资源简介
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评估方法-评估模板
评论
共有 条评论