-
大小: 188KB文件類型: .rar金幣: 2下載: 1 次發(fā)布日期: 2021-05-12
- 語(yǔ)言: 其他
- 標(biāo)簽:
資源簡(jiǎn)介
3個(gè)從機(jī)1個(gè)主機(jī)485通信代碼,支持51單片機(jī),有興趣的小伙伴可以下載學(xué)習(xí),一個(gè)很直白的代碼,通俗易通。

代碼片段和文件信息
#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; ?//字節(jié)接收個(gè)數(shù)計(jì)數(shù)器
uchar??bufRxd[10];//串口接收緩沖區(qū)
uchar??OFFON=0x1F;//本機(jī)狀態(tài)標(biāo)記
uchar??RUN;?//從機(jī)運(yùn)行令牌標(biāo)記
uchar??LEN;//實(shí)際讀取到的數(shù)據(jù)字節(jié)數(shù)
uchar?array[30];??
unsigned?char?T0RH?=?0;??//T0重載值的高字節(jié)
unsigned?char?T0RL?=?0;??//T0重載值的低字節(jié)
void?ConfigTimer0(unsigned?int?ms);
extern?void?UartRxMonitor(unsigned?char?ms);
void?delayms(uchar?k);
void?delay500ms();
uchar?UartRead(uchar?*bufuchar?len);??//串口數(shù)據(jù)讀取函數(shù),數(shù)據(jù)接收指針buf,讀取數(shù)據(jù)長(zhǎng)度len,返回值為實(shí)際讀取到的數(shù)據(jù)長(zhǎng)度
void?UartWrite(uchar?*buf?uchar?len);
void??GoOn();
void?CRCECC();???//CRC校驗(yàn)函數(shù)
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定時(shí)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)??//串口數(shù)據(jù)讀取函數(shù),數(shù)據(jù)接收指針buf,讀取數(shù)據(jù)長(zhǎng)度len,返回值為實(shí)際讀取到的數(shù)據(jù)長(zhǎng)度
???????{
?????uchar?i;
?????if(len>cntRxd)//讀取長(zhǎng)度大于實(shí)際接收到的數(shù)據(jù)長(zhǎng)度時(shí)
???{
?????len=cntRxd;//讀取長(zhǎng)度設(shè)置為實(shí)際接收到的數(shù)據(jù)長(zhǎng)度;
???}
?for(i=0;i ???{
????*buf=bufRxd[i];
buf++;
???}
???cntRxd=0;//清零接收計(jì)數(shù)器
???return?len;//返回實(shí)際讀取長(zhǎng)度 ?
???}???
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));//將接收到的命令讀取到緩沖區(qū)中
if(array[0]==0x01)???//核對(duì)地址已決定是否響應(yīng)命令,本機(jī)地址為0x01
?{
??crc=GetCRC16(arraylen-2);???//計(jì)算CRC校驗(yàn)值
??crch=crc>>8;
??crcl=crc&0xFF;
??if((array[len-2]==crch)&&(array[len-1]==crcl))??//判斷CRC校驗(yàn)是否正確
????{
??
??switch(array[1])?//按功能碼執(zhí)行操作
?????{
???case?0x03:?//讀取一個(gè)或者連續(xù)的寄存器
???????if((array[2]==0x00)&&(array[3]==0x00))??//判斷寄存器初始地址是否為00
?????{
??array[2]=0x02; //數(shù)據(jù)的字節(jié)數(shù)為寄存器數(shù)*2,因Modbus定義的寄存器為16位
??array[3]=0x00; //寄存器高字節(jié)補(bǔ)0
??array[4]=OFFON;?//讀取本機(jī)的狀態(tài)
??len=5;
??break;
?}
???else?//寄存器地址不被支持時(shí),返回錯(cuò)誤碼
???{
????array[1]=0x83;
array[2]=0x02;
len=3;
????????????????????
break;
???}
??case?0x06://寫入單個(gè)寄存器
?????if((array[2]==0x00)&&(array[3]==0x00))??//判斷寄存器初始地址是否為00
??????????{
???RUN=array[5];//保存寄存器地址
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件??????13800??2017-01-01?09:36??3個(gè)從機(jī)1個(gè)主機(jī)485通信已測(cè)試成功\cong1\congji4
?????文件??????10622??2017-01-01?09:36??3個(gè)從機(jī)1個(gè)主機(jī)485通信已測(cè)試成功\cong1\congji4.c
?????文件???????5208??2017-01-01?09:36??3個(gè)從機(jī)1個(gè)主機(jī)485通信已測(cè)試成功\cong1\congji4.hex
?????文件?????????62??2017-01-01?09:36??3個(gè)從機(jī)1個(gè)主機(jī)485通信已測(cè)試成功\cong1\congji4.lnp
?????文件??????20925??2017-01-01?09:36??3個(gè)從機(jī)1個(gè)主機(jī)485通信已測(cè)試成功\cong1\congji4.LST
?????文件??????19671??2017-01-01?09:36??3個(gè)從機(jī)1個(gè)主機(jī)485通信已測(cè)試成功\cong1\congji4.M51
?????文件??????15077??2017-01-01?09:36??3個(gè)從機(jī)1個(gè)主機(jī)485通信已測(cè)試成功\cong1\congji4.OBJ
?????文件????????361??2017-01-01?09:36??3個(gè)從機(jī)1個(gè)主機(jī)485通信已測(cè)試成功\cong1\congji4.plg
????.......?????55656??2017-01-01?09:36??3個(gè)從機(jī)1個(gè)主機(jī)485通信已測(cè)試成功\cong1\congji4.uvopt
?????文件??????13407??2016-04-25?16:50??3個(gè)從機(jī)1個(gè)主機(jī)485通信已測(cè)試成功\cong1\congji4.uvproj
?????文件?????????37??2017-01-01?09:36??3個(gè)從機(jī)1個(gè)主機(jī)485通信已測(cè)試成功\cong1\congji4.__i
????.......?????55668??2016-12-21?08:30??3個(gè)從機(jī)1個(gè)主機(jī)485通信已測(cè)試成功\cong1\congji4_uvopt.bak
?????文件??????????0??2016-04-25?16:43??3個(gè)從機(jī)1個(gè)主機(jī)485通信已測(cè)試成功\cong1\congji4_uvproj.bak
?????文件???????6376??2009-05-07?14:37??3個(gè)從機(jī)1個(gè)主機(jī)485通信已測(cè)試成功\cong1\STARTUP.A51
?????文件??????14048??2016-04-25?16:49??3個(gè)從機(jī)1個(gè)主機(jī)485通信已測(cè)試成功\cong1\STARTUP.LST
?????文件????????749??2016-04-25?16:49??3個(gè)從機(jī)1個(gè)主機(jī)485通信已測(cè)試成功\cong1\STARTUP.OBJ
?????文件??????18708??2015-11-25?22:03??3個(gè)從機(jī)1個(gè)主機(jī)485通信已測(cè)試成功\cong1\stc12c5a60s2.h
?????文件??????16514??2017-01-01?09:37??3個(gè)從機(jī)1個(gè)主機(jī)485通信已測(cè)試成功\cong2\congji4
?????文件??????12025??2017-01-01?09:37??3個(gè)從機(jī)1個(gè)主機(jī)485通信已測(cè)試成功\cong2\congji4.c
?????文件???????5713??2017-01-01?09:37??3個(gè)從機(jī)1個(gè)主機(jī)485通信已測(cè)試成功\cong2\congji4.hex
?????文件?????????62??2017-01-01?09:37??3個(gè)從機(jī)1個(gè)主機(jī)485通信已測(cè)試成功\cong2\congji4.lnp
?????文件??????25363??2017-01-01?09:37??3個(gè)從機(jī)1個(gè)主機(jī)485通信已測(cè)試成功\cong2\congji4.LST
?????文件??????22665??2017-01-01?09:37??3個(gè)從機(jī)1個(gè)主機(jī)485通信已測(cè)試成功\cong2\congji4.M51
?????文件??????18098??2017-01-01?09:37??3個(gè)從機(jī)1個(gè)主機(jī)485通信已測(cè)試成功\cong2\congji4.OBJ
?????文件????????361??2017-01-01?09:37??3個(gè)從機(jī)1個(gè)主機(jī)485通信已測(cè)試成功\cong2\congji4.plg
????.......?????55660??2017-01-01?09:37??3個(gè)從機(jī)1個(gè)主機(jī)485通信已測(cè)試成功\cong2\congji4.uvopt
?????文件??????13406??2016-04-27?11:37??3個(gè)從機(jī)1個(gè)主機(jī)485通信已測(cè)試成功\cong2\congji4.uvproj
?????文件?????????37??2017-01-01?09:37??3個(gè)從機(jī)1個(gè)主機(jī)485通信已測(cè)試成功\cong2\congji4.__i
????.......?????55664??2016-12-21?08:30??3個(gè)從機(jī)1個(gè)主機(jī)485通信已測(cè)試成功\cong2\congji4_uvopt.bak
?????文件??????13407??2016-04-25?16:50??3個(gè)從機(jī)1個(gè)主機(jī)485通信已測(cè)試成功\cong2\congji4_uvproj.bak
............此處省略46個(gè)文件信息
評(píng)論
共有 條評(píng)論