• 大小: 36KB
    文件类型: .c
    金币: 1
    下载: 0 次
    发布日期: 2023-12-04
  • 语言: 其他
  • 标签:

资源简介

利用51单片机实现,主要完成的MODBUS中,功能1,功能3,功能5,功能15,功能16的功能。即对线圈和寄存器的基本操作。简明易懂,并有详尽解释。

资源截图

代码片段和文件信息

#include “main.h“
#include “nokia_5110.h“
uint8 sendCount_217; //发送字节个数
uint8 receCount_217=0; //接收到的字节个数
uint8 sendPosi_217;     //发送位置
/*********************************************************************************/  
/*函数名称: uh_ASCIIh_217(uint8 uh_124)           
*功能介绍: 把一个16进制uh的高四位值取出转换为相应的ASCII码                                                   
/*********************************************************************************/  
uint8 uh_ASCIIh_217(uint8 uh_217)
{
uint8 temph_217;    //定义一个变量
uint8 asciih_217;    //定义一个变量
temph_217=uh_217/16;    //把一个16进制数的高4位提取出来    
if(temph_217<10)    //如果这个值小于10
{
asciih_217=temph_217+0x30;    //则加上0x30变成asc码中的值
}
else
 {
  asciih_217=temph_217+0x37;   //否则则加上0x37变成asc码中的值,即变成ABCDEF等
 }
return asciih_217;
}

/*********************************************************************************/  
/*函数名称: uh_ASCIIl_217(uint8 uh_217)            
*功能介绍: 把一个16进制uh的低四位值取出转换为相应的ASCII码                                                      
/*                                      */  
/*********************************************************************************/ 
uint8 uh_ASCIIl_217(uint8 uh_217)
{
uint8 templ_217; //定义一个变量
uint8 asciil_217; //定义一个变量
templ_217=uh_217%16; //把一个16进制数的低四位提取出来
if(templ_217<10) //如果这个值小于10
{
asciil_217=templ_217+0x30;  //则加上0x30变成asc码中的值
}
else
{
  asciil_217=templ_217+0x37; //否则则加上0x37变成asc码中的值,即变成ABCDEF等
}
 return asciil_217;
}
/*********************************************************************************/  
/*函数名称: ASCII_uh_217(uint8 asciih_217uint8 asciil_217)           
*功能介绍: 把两个ASCII码转换为10进制的值                                           
/*                                      */  
/*********************************************************************************/ 
uint8 ASCII_uh_217(uint8 asciih_217uint8 asciil_217) //在这里acsiih是第一个字符,asciil是第二个字符
{
uint8 uh_217;
if(asciih_217<57)    //如果这个值的asc码值是小于57的,则说明是1~10的asc值,
asciih_217=asciih_217-48;  //否则则是大于57的,则是A~F的asc值。
else
    asciih_217=asciih_217-55;  
  
    if(asciil_217<57)    //如果这个值小于57则是1~10
asciil_217=asciil_217-48;
else
    asciil_217=asciil_217-55;  //否则是A~F

uh_217=asciih_217*16+asciil_217;
return uh_217;    //将这个asc2码转为十进制并返回
}
/*
函数名称: lrc_217(uint8 *p_217 uint8 usDataLen_217)                                 
功能介绍: 把指针p所指向的一串ASCII码,从第二个开始把两个连续的ASCII码转换为16进制的值,
  然后把转换后的usDataLen_217个字节累加,然后取反加1,然后返回这和值。实现了LRC功能!*/                                         
/*********************************************************************************/ 
uint8  lrc_217(uint8 *p_217 uint8 usDataLen_217)
{
uint8  uchLRC_217 = 0 ;
uint8  temp_217;
uint8  q_217=0;
while(usDataLen_217)       
{
usDataLen_217--;
q_217=q_217+2;
temp_217= ASCII_uh_217(p_217[q_217-1]p_217[q_217]);   //前一个字符和后一个字符合并成一个10进制数
uchLRC_217 += temp_217;
}
uchLRC_217=255-uchLRC_217+1;
retu

评论

共有 条评论

相关资源