資源簡介
利用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
評論
共有 條評論