找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2750|回复: 4
打印 上一主题 下一主题
收起左侧

keil编程报错:error C129: missing ';' before 'Count',求大神解答指点...

[复制链接]
跳转到指定楼层
楼主

  1. #include<modbus.h>
  2. bit  Search_Counta;//首次寻优标志 1
  3. bit  Search_Countb;//首次寻优标志 2
  4. unit8 Count; //寻优计数值         (错误在这里!!!!!!!!)
  5. unit8 ReceCount;  //串行口1的接收数据计数值
  6. unit8 SendCount;   //串行口1发送数据计数值
  7. unit16 Init_Value=0;   //寻优初值
  8. uint16 Term_Value=50;   //寻优终值
  9. uint8 Search_Steps=50;//寻优步数
  10. uint8 idata resvbuf[16],Sendbuf[64];//串行口 1 的接收缓冲区和发送缓冲区
  11. uint16 xdata Re Wrbuf[32];    //可读写缓冲区
  12. uint16 xdata Register[32];   //寄存器缓冲区
  13. uint16 D_Val;           //占空比的数字量
  14. bit Error;   //错误标志位
  15. uint8 bdata Coil1=0xff;//8 位线圈状态
  16. sbit Coil1_bit0=Coil1^0;
  17. sbit Coil1_bit1=Coil1^1;
  18. sbit Coil1_bit2=Coil1^2;
  19. sbit Coil1_bit3=Coil1^3;
  20. sbit Coil1_bit4=Coil1^4;
  21. sbit Coil1_bit5=Coil1^5;
  22. sbit Coil1_bit6=Coil1^6;
  23. sbit Coil1_bit7=Coil1^7;
  24. void Init System(); //初始化函数
  25. void Delay(void); //延时函数
  26. void Check Message(void);//功能码判断函数
  27. void Send Data();//发送数据函数                             
  28. void Read Coil(void);//读线圈函数
  29. void Read Registers(void);//读寄存器函数
  30. void Force Singal Coil(void);//强置单线圈函数
  31. void Set One Register Val(void);//预置单寄存器函数
  32. uint8 Get SWVal(uint16 Address);
  33. bit Set Coil Val(uint16 Address,bit Val);
  34. bit Set Register Val(uint16 Address1,uint16 Val1);
  35. uint16 crccheck(uint8 *puch Msg, uint8 us Data Len);
  36. void Delay_us(uint8 t);
  37. void Write_TLC(uint16 dat);
  38. void Self_optimization();

  39. //CRC 校验查表码值

  40. const uint8 code auch CRCHi[] ={  
  41. 0x00, 0x C1, 0x81, 0x40, 0x01, 0x C0, 0x80, 0x41, 0x01, 0x C0,  
  42. 0x80, 0x41, 0x00, 0x C1, 0x81, 0x40, 0x01, 0x C0, 0x80, 0x41,  
  43. 0x00, 0x C1, 0x81, 0x40, 0x00, 0x C1, 0x81, 0x40, 0x01, 0x C0,  
  44. 0x80, 0x41, 0x01, 0x C0, 0x80, 0x41, 0x00, 0x C1, 0x81, 0x40,  
  45. 0x00, 0x C1, 0x81, 0x40, 0x01, 0x C0, 0x80, 0x41, 0x00, 0x C1,  
  46. 0x81, 0x40, 0x01, 0x C0, 0x80, 0x41, 0x01, 0x C0, 0x80, 0x41,  
  47. 0x00, 0x C1, 0x81, 0x40, 0x01, 0x C0, 0x80, 0x41, 0x00, 0x C1,  
  48. 0x81, 0x40, 0x00, 0x C1, 0x81, 0x40, 0x01, 0x C0, 0x80, 0x41,  
  49. 0x00, 0x C1, 0x81, 0x40, 0x01, 0x C0, 0x80, 0x41, 0x01, 0x C0,  
  50. 0x80, 0x41, 0x00, 0x C1, 0x81, 0x40, 0x00, 0x C1, 0x81, 0x40,  
  51. 0x01, 0x C0, 0x80, 0x41, 0x01, 0x C0, 0x80, 0x41, 0x00, 0x C1,  
  52. 0x81, 0x40, 0x01, 0x C0, 0x80, 0x41, 0x00, 0x C1, 0x81, 0x40,  
  53. 0x00, 0x C1, 0x81, 0x40, 0x01, 0x C0, 0x80, 0x41, 0x01, 0x C0,  
  54. 0x80, 0x41, 0x00, 0x C1, 0x81, 0x40, 0x00, 0x C1, 0x81, 0x40,  
  55. 0x01, 0x C0, 0x80, 0x41, 0x00, 0x C1, 0x81, 0x40, 0x01, 0x C0,  
  56. 0x80, 0x41, 0x01, 0x C0, 0x80, 0x41, 0x00, 0x C1, 0x81, 0x40,  
  57. 0x00, 0x C1, 0x81, 0x40, 0x01, 0x C0, 0x80, 0x41, 0x01, 0x C0,  
  58. 0x80, 0x41, 0x00, 0x C1, 0x81, 0x40, 0x01, 0x C0, 0x80, 0x41,  
  59. 0x00, 0x C1, 0x81, 0x40, 0x00, 0x C1, 0x81, 0x40, 0x01, 0x C0,  
  60. 0x80, 0x41, 0x00, 0x C1, 0x81, 0x40, 0x01, 0x C0, 0x80, 0x41,   
  61. 0x01, 0x C0, 0x80, 0x41, 0x00, 0x C1, 0x81, 0x40, 0x01, 0x C0,  
  62. 0x80, 0x41, 0x00, 0x C1, 0x81, 0x40, 0x00, 0x C1, 0x81, 0x40,  
  63. 0x01, 0x C0, 0x80, 0x41, 0x01, 0x C0, 0x80, 0x41, 0x00, 0x C1,  
  64. 0x81, 0x40, 0x00, 0x C1, 0x81, 0x40, 0x01, 0x C0, 0x80, 0x41,  
  65. 0x00, 0x C1, 0x81, 0x40, 0x01, 0x C0, 0x80, 0x41, 0x01, 0x C0,  
  66. 0x80, 0x41, 0x00, 0x C1, 0x81, 0x40};  

  67. const uint8 code auch CRCLo[] = {  
  68. 0x00, 0x C0, 0x C1, 0x01, 0x C3, 0x03, 0x02, 0x C2, 0x C6, 0x06,  
  69. 0x07, 0x C7, 0x05, 0x C5, 0x C4, 0x04, 0x CC, 0x0C, 0x0D, 0x CD,  
  70. 0x0F, 0x CF, 0x CE, 0x0E, 0x0A, 0x CA, 0x CB, 0x0B, 0x C9, 0x09,  
  71. 0x08, 0x C8, 0x D8, 0x18, 0x19, 0x D9, 0x1B, 0x DB, 0x DA, 0x1A,  
  72. 0x1E, 0x DE, 0x DF, 0x1F, 0x DD, 0x1D, 0x1C, 0x DC, 0x14, 0x D4,  
  73. 0x D5, 0x15, 0x D7, 0x17, 0x16, 0x D6, 0x D2, 0x12, 0x13, 0x D3,  
  74. 0x11, 0x D1, 0x D0, 0x10, 0x F0, 0x30, 0x31, 0x F1, 0x33, 0x F3,  
  75. 0x F2, 0x32, 0x36, 0x F6, 0x F7, 0x37, 0x F5, 0x35, 0x34, 0x F4,  
  76. 0x3C, 0x FC, 0x FD, 0x3D, 0x FF, 0x3F, 0x3E, 0x FE, 0x FA, 0x3A,  
  77. 0x3B, 0x FB, 0x39, 0x F9, 0x F8, 0x38, 0x28, 0x E8, 0x E9, 0x29,  
  78. 0x EB, 0x2B, 0x2A, 0x EA, 0x EE, 0x2E, 0x2F, 0x EF, 0x2D, 0x ED,  
  79. 0x EC, 0x2C, 0x E4, 0x24, 0x25, 0x E5, 0x27, 0x E7, 0x E6, 0x26,  
  80. 0x22, 0x E2, 0x E3, 0x23, 0x E1, 0x21, 0x20, 0x E0, 0x A0, 0x60,  
  81. 0x61, 0x A1, 0x63, 0x A3, 0x A2, 0x62, 0x66, 0x A6, 0x A7, 0x67,  
  82. 0x A5, 0x65, 0x64, 0x A4, 0x6C, 0x AC, 0x AD, 0x6D, 0x AF, 0x6F,  
  83. 0x6E, 0x AE, 0x AA, 0x6A, 0x6B, 0x AB, 0x69, 0x A9, 0x A8, 0x68,  
  84. 0x78, 0x B8, 0x B9, 0x79, 0x BB, 0x7B, 0x7A, 0x BA, 0x BE, 0x7E,  
  85. 0x7F, 0x BF, 0x7D, 0x BD, 0x BC, 0x7C, 0x B4, 0x74, 0x75, 0x B5,  
  86. 0x77, 0x B7, 0x B6, 0x76, 0x72, 0x B2, 0x B3, 0x73, 0x B1, 0x71,  
  87. 0x70, 0x B0, 0x50, 0x90, 0x91, 0x51, 0x93, 0x53, 0x52, 0x92,  
  88. 0x96, 0x56, 0x57, 0x97, 0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C,  
  89. 0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, 0x5A, 0x9A, 0x9B, 0x5B,  
  90. 0x99, 0x59, 0x58, 0x98, 0x88, 0x48, 0x49, 0x89, 0x4B, 0x8B,  
  91. 0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C,  
  92. 0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42,  
  93. 0x43, 0x83, 0x41, 0x81, 0x80, 0x40};  

  94. void timer0_INT(void) interrupt 1 using 1      //定时/计数器 0 中断
  95. {
  96.      TR0=0;
  97.   Error=1;
  98.   if((resvbuf[0]==IN_Address)&&(Rece Count>=8))// 判断接收到的设备地址是否与上位机的地址相等,并成功接收上位机发送的指令
  99.   Error=0;
  100. }
  101. void Uart1_INT(void) interrupt 4 using 3       //串口 1 中断
  102. {
  103.    if(RI)     //RI 为接收中断标志位,为 1 表示一个数据已经收到。
  104.     {
  105.       RI=0;
  106.       resvbuf[Rece Count++]=SBUF;
  107.       TR0=0;
  108.       TH0=(65536-3688)/256;
  109.       TL0=(65536-3688)%256;   //定时器 0 定时 4ms
  110.       TR0=1;     
  111.     }
  112.    if(TI)      ////TI 为发送中断标志位,为 1 表示一个数据已经发送完毕。

  113.     {
  114.      TI=0;
  115.     }
  116. }
  117. /********************************************
  118. Function:CRC 校验子函数

  119. ********************************************/
  120. uint16 crccheck(uint8 *puch Msg, uint8 us Data Len)  
  121. {  
  122.   uint8 uch CRCHi = 0x FF ;  
  123.   uint8 uch CRCLo = 0x FF ;  
  124.   uint8 uIndex ;  
  125.   while (usDataLen--)
  126.   {
  127.   uIndex = uchCRCHi^*puchMsg++ ;  
  128.   uchCRCHi = uch CRCLo ^ auch CRCHi[u Index] ;  
  129.   uchCRCLo = auch CRCLo[u Index] ;  
  130.   }  
  131.   return (uch CRCHi << 8 | uch CRCLo) ;     //生成校验码,高位在前,低位在后。
  132. }
  133. /********************************************
  134. Function
  135. :延时子函数

  136. ********************************************/
  137. void Delay(void)
  138. {
  139.   uint16 i;
  140.   for(i=0;i<3600;i++)
  141.   {
  142.    _nop_();
  143.   }
  144. }
  145. //初始化函数

  146. void Init System()
  147. {  
  148.   Rece Count=0;
  149.   Rece2Count=0;
  150.   Count   = 0;
  151.   Search_Counta = 0;
  152.   Search_Countb = 0;
  153.   DA_Val = 0;
  154.   Register[9] = 0;//初始化时占空比输出为 0
  155.   Re Wrbuf[21] = 0;//初始工作时控制信号为 0
  156.   Re Wrbuf[22] = 0;//初始工作时电流为 0
  157.   Re Wrbuf[23] = 0;//初始工作时电流为 0
  158.   TMOD=0x21;//定时器 1 工作方式 2,作为波特率发生器,定时器 0 工作方式1
  159.   SCON=0x50;//串行口 1 工作方式 1,允许接收
  160.   BRT=0xfd;   //串行口 2 波特率 [url=mailto:9600@11.0592MHz]9600@11.0592MHz[/url]
  161.   TH1=0xfd;
  162.   TL1=0xfd;//串行口 1 波特率 [url=mailto:9600@11.0592MHz]9600@11.0592MHz[/url]
  163.   IT0 = 0;             //设置外部中断 0 为低电平触发
  164.   IE=0x93;//EA=1,ES=1,ET0=1,EX0 = 1
  165.   AUXR=0x10;//AUXR:辅助寄存器。BRTR=1,允许独立波特率发生器运行。
  166. S2SMOD=0,串口 2 的波特率不加倍.
  167.       //EXTRAM=0,允许使用内部扩展的 1024 字节扩展 RAM。
  168.   TR1=1;//启动定时器 1
  169.   CJ();
  170. }
  171. /********************************************
  172. Function
  173. :单片机应答(发送数据)子函数

  174. ********************************************/
  175. void Send Data()
  176. {
  177.   uint8 i;
  178.   uint16 crctemp;
  179.   Sendbuf[0]=resvbuf[0]; //发送数据的第一个字节为上位机的地址
  180.   Sendbuf[1]=resvbuf[1]; //发送数据的第二个字节为功能码
  181.   crctemp=crccheck(Sendbuf,Send Count-2);//计算发送的校验码
  182.   Sendbuf[Send Count-2]=crctemp&0xff;
  183.   Sendbuf[Send Count-1]=crctemp>>8; //发送消息时,CRC 低位在前、高位在后
  184.   for(i=0;i<Send Count;i++)
  185.   {  
  186.    SBUF=Sendbuf[i];
  187.    Delay();
  188.   }
  189. }

  190. /**********************************
  191. 函数功能:Modbus 功能判断函数
  192. **********************************/  
  193. void Check Message(void)      
  194. {  
  195.   uint16 crctemp,temp;
  196.   crctemp=crccheck(resvbuf,Rece Count-2); //生成校验码
  197.   temp=resvbuf[Rece Count-1];//接收到的校验码的高字节
  198.   temp=temp<<8|resvbuf[Rece Count-2];
  199.   if(temp!=crctemp) //判断接收到的校验码和生成的校验码是否一致
  200.   {
  201.     Error=1;   //校验码不一致,错误标志位置 1.
  202.   }
  203.   Rece Count=0;   //单片机接收数据(上位机发送的数据)无效,接收字节变量清零。
  204.   if(!Error)//校验码一致
  205.   {  
  206.    ES=0;//关串口 1 中断
  207.    ET0=0;//关定时器 0 中断
  208.    switch(resvbuf[1])  //判断功能码
  209.    {
  210. case 2:  Read Coil();break;
  211.      case 3:  Read Registers();break;
  212.      case 5:  Force Singal Coil();break;
  213.      case 6:  Set One Register Val();break;
  214.         default:   Error=1;
  215.    }
  216.    ET0=1;
  217.    ES=1;
  218.   }
  219. }
  220. /**********************************
  221. 函数功能:读取位函数
  222. Sendbuf[i+3]表示 P0.0-P0.7 的开关状态
  223. 若为高电平,则表明端口对应的开关断开;
  224. 若为低电平,则表明端口对应的开关闭合;
  225. **********************************/  
  226. void Read Coil(void)
  227. {
  228.   uint16 Start Address;//寄存器起始地址
  229.   uint16 temp Address;
  230.   uint8 Coil Num,i,Byte Num,j;
  231.   uint8 Coil Val;
  232.   bit exit=0;  //是否读完输入开关状态标志位(exit=1 表示读完了)
  233.   Start Address=resvbuf[2];   //起始地址高 8 位
  234.   Start Address=Start Address|resvbuf[3];//起始地址低 8 位
  235.   temp Address=Start Address;
  236.   Coil Num=resvbuf[5];//读取的位数
  237.   Byte Num=Coil Num/8; //折算成字节
  238.   if(Coil Num%8!=0)
  239.   Byte Num++;
  240.   Sendbuf[2]=Byte Num;//返回的字节数
  241.   for(i=0;i<Byte Num;i++)
  242.    {
  243.     Sendbuf[i+3]=0;//返回的数据 1 初始值为 0  
  244.     for(j=0;j<8;j++)
  245.     {
  246.      Coil Val=Get SWVal(Start Address);
  247.      Sendbuf[i+3]|=Coil Val<<j;//读取每一位的状态
  248.      Start Address++;
  249.      if(Start Address>=temp Address+Coil Num)//判断是否读完 Coil Num个线圈状态
  250.      {
  251.       exit=1;
  252.       break;//读完退出
  253.      }
  254.     }
  255.     if(exit==1)
  256.      break;
  257.    }
  258.   Send Count=5+Byte Num;//发送的字节数(发送的地址码、功能码、从机返回的字节数、CRC 校验码共占 5 个字节)
  259.   Send Data();
  260. }
  261. /**********************************
  262. 函数功能:获取开关状态函数。8 路数字量输入 Address1=上位机中设置的寄存
  263. 器地址减 1.在上位机中增加通道:寄存器类型设置成【1 区】输入继电器,寄存
  264. 器地址依次设置成 1-8
  265. **********************************/
  266. uint8 Get SWVal(uint16 Address1)
  267. {
  268.   uint8 Coil Val,Switch=0xff;
  269.   Switch=P0;
  270.   switch(Address1&0x0f)
  271.   {
  272.    case 0:   Coil Val=Switch>>1&0x01;break;   // P0.0 的开关状态
  273.    case 1:   Coil Val=Switch>>2&0x01;break;   // P0.1 的开关状态
  274.    case 2:   Coil Val=Switch>>3&0x01;break;   // P0.2 的开关状态
  275.    case 3:   Coil Val=Switch>>4&0x01;break;   // P0.3 的开关状态
  276.    case 4:   Coil Val=Switch>>5&0x01;break;   // P0.4 的开关状态   
  277.    case 5:   Coil Val=Switch>>6&0x01;break;   // P0.5 的开关状态
  278.    case 6:   Coil Val=Switch>>7&0x01;break;   // P0.6 的开关状态
  279.    case 7:   Coil Val=Switch>>8&0x01;break;   // P0.7 的开关状态
  280.     default:  break;
  281.   }
  282.   return Coil Val;
  283. }
  284. /**********************************
  285. 函数功能:读取寄存器函数

  286. **********************************/
  287. void Read Registers(void)
  288. {
  289.   uint16 Start Address;
  290.   uint8 Byte Count,i;
  291.   Start Address=resvbuf[2];
  292.   Start Address=Start Address<<8|resvbuf[3];
  293.   Byte Count=resvbuf[5]*2; //一个寄存器数据占 2 个字节   
  294.   Sendbuf[2]=resvbuf[5]*2; //上位机寄存器为 16 位占用两个字节  ?
  295.   Sendbuf[2]=resvbuf[5]*2
  296.   for(i=0;i<Byte Count;i+=2)//一个寄存器数据占 2 个字节
  297.      {
  298.    Sendbuf[i+4]=Re Wrbuf[Start Address]&0xff;
  299.    Sendbuf[i+3]=Re Wrbuf[Start Address]>>8; //高位在前、低位在后
  300.    Start Address++;
  301.   }
  302.   Send Count=Byte Count+5;
  303.   Send Data();
  304.   if(resvbuf[3] == 0x00)
  305.    CJ(); //读电能采集模块数据
  306. }
  307. /**********************************
  308. 函数功能:强制单线圈函数

  309. **********************************/
  310. void Force Singal Coil(void)
  311. {
  312.   uint16 Address,On Off;
  313.   bit temp,Coil Val;
  314.   Address=resvbuf[2]<<8|resvbuf[3];
  315.   On Off=resvbuf[4]<<8|resvbuf[5];
  316.   if(On Off==0x0000)
  317.   {
  318.    Coil Val=0;
  319.    temp=Set Coil Val(Address,Coil Val);
  320.   }
  321.   else if(On Off==0x FF00)
  322.   {
  323.    Coil Val=1;
  324.    temp=Set Coil Val(Address,Coil Val);
  325.   }
  326.   if(temp==1)     //成功返回原命令
  327.   {   
  328.   Sendbuf[2]=resvbuf[2];   
  329.   Sendbuf[3]=resvbuf[3];
  330.   Sendbuf[4]=resvbuf[4];
  331.   Sendbuf[5]=resvbuf[5];
  332.   Send Count=8;
  333.   Send Data();
  334.   }
  335.   else
  336.    Error=1;
  337. }
  338. /**********************************
  339. 函数功能:设置位值函数
  340. 6 路数字量输出,Address=上位机中设置的寄存器地址减 1.
  341. 上位机中增加通道:寄存器类型设置成【0 区】输出继电器,操作方式设置成只
  342. 写 , 寄 存 器 地 址 依 次 设 置 成 1-6 , 即 可 强 制 Q55-Q0(P2.0-P2.5)
  343. 的 状 态 。
  344. **********************************/
  345. bit Set Coil Val(uint16 Address,bit Val)
  346. {
  347.   bit result=1;
  348.   switch(Address&0x0f)
  349.   {
  350.    case 0:   Coil1_bit0=Val;break;   //强制 P2.0(Q5)的状态
  351.    case 1:   Coil1_bit1=Val;break;   //强制 P2.1(Q4)的状态
  352.    case 2:   Coil1_bit2=Val;break;   //强制 P2.2(Q3)的状态
  353.    case 3:   Coil1_bit3=Val;break;   //强制 P2.3(Q2)的状态
  354.    case 4:   Coil1_bit4=Val;break;   //强制 P2.4(Q1)的状态
  355.    case 5:   Coil1_bit5=Val;break;   //强制 P2.5(Q0)的状态
  356.    case 6:   Self_optimization();break;   //自寻优开始
  357.    default:  result=0;break;
  358.   }
  359.   return result;   
  360. }
  361. /**********************************
  362. 函数功能:设置单寄存器函数
  363. **********************************/
  364. void Set One Register Val(void)
  365. {
  366.   uint16 R_Address,Register Val;
  367.   bit temp1;
  368.   R_Address=resvbuf[2];
  369.   R_Address=R_Address<<8|resvbuf[3];
  370.   R_Address=R_Address-90;   //要设置的寄存器地址
  371.   Register Val=resvbuf[4];
  372.   Register Val=Register Val<<8|resvbuf[5];//要设置的寄存器值
  373.   temp1=Set Register Val(R_Address,Register Val);
  374.   if((temp1 == 1)&&(R_Address == 9))   //成功返回原命令
  375.   {
  376.    Sendbuf[2]=resvbuf[2];
  377.    Sendbuf[3]=resvbuf[3];
  378.    Sendbuf[4]=resvbuf[4];
  379.    Sendbuf[5]=resvbuf[5];
  380.    Send Count = 8;
  381.    Send Data();
  382.    D_Val = Register[9];
  383.    Write_TLC(D_Val); //输出 D 值
  384.   }
  385.   else if((temp1 == 1)&&(R_Address == 10))
  386.   {
  387.    Sendbuf[2]=resvbuf[2];
  388.    Sendbuf[3]=resvbuf[3];
  389.    Sendbuf[4]=resvbuf[4];
  390.    Sendbuf[5]=resvbuf[5];
  391.    Send Count = 8;
  392.    Send Data();
  393.    Harm_Times = Register[10]&0x FF;   
  394.   }
  395.   else if((temp1 == 1)&&(R_Address == 11))
  396.   {  
  397.    Sendbuf[2]=resvbuf[2];
  398.    Sendbuf[3]=resvbuf[3];
  399.    Sendbuf[4]=resvbuf[4];
  400.    Sendbuf[5]=resvbuf[5];
  401.    Send Count = 8;
  402.    Send Data();  
  403.    Init_Value = Register[11];
  404.    Search_Counta = 0;
  405.   }
  406.   else if((temp1 == 1)&&(R_Address == 12))
  407.   {
  408.    Sendbuf[2]=resvbuf[2];
  409.    Sendbuf[3]=resvbuf[3];
  410.    Sendbuf[4]=resvbuf[4];
  411.    Sendbuf[5]=resvbuf[5];
  412.    Send Count = 8;
  413.    Send Data();  
  414.    Term_Value = Register[12];
  415.    Search_Countb = 0;
  416.   }
  417.   else if((temp1 == 1)&&(R_Address == 13))
  418.   {
  419.    Sendbuf[2]=resvbuf[2];
  420.    Sendbuf[3]=resvbuf[3];
  421.    Sendbuf[4]=resvbuf[4];
  422.    Sendbuf[5]=resvbuf[5];
  423.    Send Count = 8;
  424.    Send Data();  
  425.    Search_Steps = Register[13]&0x FF;
  426.   }
  427.   else   //否则置错误位
  428.    Error=1;
  429. }
  430. /**********************************
  431. 函数功能:设置寄存器值函数
  432. **********************************/
  433. bit Set Register Val(uint16 Address1,uint16 Val1)
  434. {
  435.   uint8 Addr;
  436.   bit result1=1;
  437.   Addr=Address1&0xff; //Register[]数组的大小为 32 个字节
  438.      Register[Addr]=Val1;
  439.   return result1;
  440. }
  441. void Delay_us(uint8 t)
  442. {
  443.   uint8 i;
  444.   for(i=0;i<12*t;i++)
  445.    _nop_();
  446. }
复制代码

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:796531 发表于 2021-5-11 13:50 | 只看该作者
本帖最后由 paladina 于 2021-5-11 14:00 编辑

unit8 未定义吧 ,需要定义 ,你要么统一定义 要么改 unsigned char
回复

使用道具 举报

板凳
ID:155507 发表于 2021-5-11 14:51 | 只看该作者
少写
#define uint8 unsigned char

缺少头文件 modbus.h


回复

使用道具 举报

地板
ID:919246 发表于 2021-5-11 15:59 | 只看该作者
angmall 发表于 2021-5-11 14:51
少写
#define uint8 unsigned char

大哥,加完了 没反应,还是那个错误,应该怎么办呢????    谢谢大佬
回复

使用道具 举报

5#
ID:796531 发表于 2021-5-11 17:39 | 只看该作者
拜托,楼主自己仔细看看你的代码吧 一会 uint8 一会 unit8 ,拼写也太不注意了,你unit8 定义了后面变成 unit8 当然还是报错,同理 uint16也是如此
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表