資源簡介
3個從機1個主機485通信代碼,支持51單片機,有興趣的小伙伴可以下載學習,一個很直白的代碼,通俗易通。

代碼片段和文件信息
#include?
#define?uchar?unsigned?char
#define?uint??unsigned?int
sbit??q1=P0^0;
sbit??q2=P0^1;
sbit??q3=P0^2;
sbit??q4=P0^3;
sbit??q45=P0^4;
sbit??q5=P0^5;
sbit??q6=P0^6;
sbit??q7=P0^7;
sbit??q8=P2^0;
sbit??q9=P2^1; ?
bit??cmdArrived;
uchar??cntRxd=0; ?//字節接收個數計數器
uchar??bufRxd[10];//串口接收緩沖區
uchar??OFFON=0x1F;//本機狀態標記
uchar??RUN;?//從機運行令牌標記
uchar??LEN;//實際讀取到的數據字節數
uchar?array[30];??
unsigned?char?T0RH?=?0;??//T0重載值的高字節
unsigned?char?T0RL?=?0;??//T0重載值的低字節
void?ConfigTimer0(unsigned?int?ms);
extern?void?UartRxMonitor(unsigned?char?ms);
void?delayms(uchar?k);
void?delay500ms();
uchar?UartRead(uchar?*bufuchar?len);??//串口數據讀取函數,數據接收指針buf,讀取數據長度len,返回值為實際讀取到的數據長度
void?UartWrite(uchar?*buf?uchar?len);
void??GoOn();
void?CRCECC();???//CRC校驗函數
uint?GetCRC16(uchar?*ptruchar?len);
void?main()
????{?
?? ??
??TMOD=0x20;
??????TH1=0xfd;
??????TL1=0xfd;
??????TR1=1;
?????
??????SM0=0;
??????SM1=1;
??EA=1;
??ES=1;
??
???while(1)
????????{
? ConfigTimer0(1);??//配置T0定時1ms
????REN=1;
?????CRCECC();?
}
???}
void?delayms(uchar?k)
?????{
???uint?ijh;
???for(h=0;h<4;h++)
????{
??for(i=0;i ??????for(j=0;j<122;j++);
?}
???
?}
void?delay500ms()
?{
uchar?abcd;
???for(d=0;d<4;d++)
????{
for(c=23;c>0;c--)
?for(b=152;b>0;b--)
???for(a=70;a>0;a--);
?}
?}
uchar?UartRead(uchar?*bufuchar?len)??//串口數據讀取函數,數據接收指針buf,讀取數據長度len,返回值為實際讀取到的數據長度
???????{
?????uchar?i;
?????if(len>cntRxd)//讀取長度大于實際接收到的數據長度時
???{
?????len=cntRxd;//讀取長度設置為實際接收到的數據長度;
???}
?for(i=0;i ???{
????*buf=bufRxd[i];
buf++;
???}
???cntRxd=0;//清零接收計數器
???return?len;//返回實際讀取長度 ?
???}???
void?UartWrite(uchar?*buf?uchar?len)
?????{
??while(len--)
?????{
??SBUF=*buf;
??buf++;
??while(!TI);
??TI=0;
?}
?????}
void?CRCECC()
??{
????uchar?len;
????uint?crc;
uchar?crchcrcl;
while(!cmdArrived);
REN?=?0;
ET0?=?0;????????
????TR0?=?0;????????
cmdArrived=0;
len=UartRead(arraysizeof(array));//將接收到的命令讀取到緩沖區中
if(array[0]==0x01)???//核對地址已決定是否響應命令,本機地址為0x01
?{
??crc=GetCRC16(arraylen-2);???//計算CRC校驗值
??crch=crc>>8;
??crcl=crc&0xFF;
??if((array[len-2]==crch)&&(array[len-1]==crcl))??//判斷CRC校驗是否正確
????{
??
??switch(array[1])?//按功能碼執行操作
?????{
???case?0x03:?//讀取一個或者連續的寄存器
???????if((array[2]==0x00)&&(array[3]==0x00))??//判斷寄存器初始地址是否為00
?????{
??array[2]=0x02; //數據的字節數為寄存器數*2,因Modbus定義的寄存器為16位
??array[3]=0x00; //寄存器高字節補0
??array[4]=OFFON;?//讀取本機的狀態
??len=5;
??break;
?}
???else?//寄存器地址不被支持時,返回錯誤碼
???{
????array[1]=0x83;
array[2]=0x02;
len=3;
????????????????????
break;
???}
??case?0x06://寫入單個寄存器
?????if((array[2]==0x00)&&(array[3]==0x00))??//判斷寄存器初始地址是否為00
??????????{
???RUN=array[5];//保存寄存器地址
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件??????13800??2017-01-01?09:36??3個從機1個主機485通信已測試成功\cong1\congji4
?????文件??????10622??2017-01-01?09:36??3個從機1個主機485通信已測試成功\cong1\congji4.c
?????文件???????5208??2017-01-01?09:36??3個從機1個主機485通信已測試成功\cong1\congji4.hex
?????文件?????????62??2017-01-01?09:36??3個從機1個主機485通信已測試成功\cong1\congji4.lnp
?????文件??????20925??2017-01-01?09:36??3個從機1個主機485通信已測試成功\cong1\congji4.LST
?????文件??????19671??2017-01-01?09:36??3個從機1個主機485通信已測試成功\cong1\congji4.M51
?????文件??????15077??2017-01-01?09:36??3個從機1個主機485通信已測試成功\cong1\congji4.OBJ
?????文件????????361??2017-01-01?09:36??3個從機1個主機485通信已測試成功\cong1\congji4.plg
????.......?????55656??2017-01-01?09:36??3個從機1個主機485通信已測試成功\cong1\congji4.uvopt
?????文件??????13407??2016-04-25?16:50??3個從機1個主機485通信已測試成功\cong1\congji4.uvproj
?????文件?????????37??2017-01-01?09:36??3個從機1個主機485通信已測試成功\cong1\congji4.__i
????.......?????55668??2016-12-21?08:30??3個從機1個主機485通信已測試成功\cong1\congji4_uvopt.bak
?????文件??????????0??2016-04-25?16:43??3個從機1個主機485通信已測試成功\cong1\congji4_uvproj.bak
?????文件???????6376??2009-05-07?14:37??3個從機1個主機485通信已測試成功\cong1\STARTUP.A51
?????文件??????14048??2016-04-25?16:49??3個從機1個主機485通信已測試成功\cong1\STARTUP.LST
?????文件????????749??2016-04-25?16:49??3個從機1個主機485通信已測試成功\cong1\STARTUP.OBJ
?????文件??????18708??2015-11-25?22:03??3個從機1個主機485通信已測試成功\cong1\stc12c5a60s2.h
?????文件??????16514??2017-01-01?09:37??3個從機1個主機485通信已測試成功\cong2\congji4
?????文件??????12025??2017-01-01?09:37??3個從機1個主機485通信已測試成功\cong2\congji4.c
?????文件???????5713??2017-01-01?09:37??3個從機1個主機485通信已測試成功\cong2\congji4.hex
?????文件?????????62??2017-01-01?09:37??3個從機1個主機485通信已測試成功\cong2\congji4.lnp
?????文件??????25363??2017-01-01?09:37??3個從機1個主機485通信已測試成功\cong2\congji4.LST
?????文件??????22665??2017-01-01?09:37??3個從機1個主機485通信已測試成功\cong2\congji4.M51
?????文件??????18098??2017-01-01?09:37??3個從機1個主機485通信已測試成功\cong2\congji4.OBJ
?????文件????????361??2017-01-01?09:37??3個從機1個主機485通信已測試成功\cong2\congji4.plg
????.......?????55660??2017-01-01?09:37??3個從機1個主機485通信已測試成功\cong2\congji4.uvopt
?????文件??????13406??2016-04-27?11:37??3個從機1個主機485通信已測試成功\cong2\congji4.uvproj
?????文件?????????37??2017-01-01?09:37??3個從機1個主機485通信已測試成功\cong2\congji4.__i
????.......?????55664??2016-12-21?08:30??3個從機1個主機485通信已測試成功\cong2\congji4_uvopt.bak
?????文件??????13407??2016-04-25?16:50??3個從機1個主機485通信已測試成功\cong2\congji4_uvproj.bak
............此處省略46個文件信息
- 上一篇:安卓視頻播放器源碼
- 下一篇:軟件工作量評估-FPA評估方法-評估模板
評論
共有 條評論