• 大小: 188KB
    文件类型: .rar
    金币: 2
    下载: 1 次
    发布日期: 2021-05-12
  • 语言: 其他
  • 标签:

资源简介

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个文件信息

评论

共有 条评论