找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2754|回復(fù): 4
收起左側(cè)

keil編程報錯:error C129: missing ';' before 'Count',求大神解答指點...

[復(fù)制鏈接]
ID:919246 發(fā)表于 2021-5-11 12:08 | 顯示全部樓層 |閱讀模式
51hei截圖20210511120653.png
  1. #include<modbus.h>
  2. bit  Search_Counta;//首次尋優(yōu)標(biāo)志 1
  3. bit  Search_Countb;//首次尋優(yōu)標(biāo)志 2
  4. unit8 Count; //尋優(yōu)計數(shù)值         (錯誤在這里!。。。。。。。
  5. unit8 ReceCount;  //串行口1的接收數(shù)據(jù)計數(shù)值
  6. unit8 SendCount;   //串行口1發(fā)送數(shù)據(jù)計數(shù)值
  7. unit16 Init_Value=0;   //尋優(yōu)初值
  8. uint16 Term_Value=50;   //尋優(yōu)終值
  9. uint8 Search_Steps=50;//尋優(yōu)步數(shù)
  10. uint8 idata resvbuf[16],Sendbuf[64];//串行口 1 的接收緩沖區(qū)和發(fā)送緩沖區(qū)
  11. uint16 xdata Re Wrbuf[32];    //可讀寫緩沖區(qū)
  12. uint16 xdata Register[32];   //寄存器緩沖區(qū)
  13. uint16 D_Val;           //占空比的數(shù)字量
  14. bit Error;   //錯誤標(biāo)志位
  15. uint8 bdata Coil1=0xff;//8 位線圈狀態(tài)
  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(); //初始化函數(shù)
  25. void Delay(void); //延時函數(shù)
  26. void Check Message(void);//功能碼判斷函數(shù)
  27. void Send Data();//發(fā)送數(shù)據(jù)函數(shù)                             
  28. void Read Coil(void);//讀線圈函數(shù)
  29. void Read Registers(void);//讀寄存器函數(shù)
  30. void Force Singal Coil(void);//強(qiáng)置單線圈函數(shù)
  31. void Set One Register Val(void);//預(yù)置單寄存器函數(shù)
  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      //定時/計數(shù)器 0 中斷
  95. {
  96.      TR0=0;
  97.   Error=1;
  98.   if((resvbuf[0]==IN_Address)&&(Rece Count>=8))// 判斷接收到的設(shè)備地址是否與上位機(jī)的地址相等,并成功接收上位機(jī)發(fā)送的指令
  99.   Error=0;
  100. }
  101. void Uart1_INT(void) interrupt 4 using 3       //串口 1 中斷
  102. {
  103.    if(RI)     //RI 為接收中斷標(biāo)志位,為 1 表示一個數(shù)據(jù)已經(jīng)收到。
  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 為發(fā)送中斷標(biāo)志位,為 1 表示一個數(shù)據(jù)已經(jīng)發(fā)送完畢。

  113.     {
  114.      TI=0;
  115.     }
  116. }
  117. /********************************************
  118. Function:CRC 校驗子函數(shù)

  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. :延時子函數(shù)

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

  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,作為波特率發(fā)生器,定時器 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;             //設(shè)置外部中斷 0 為低電平觸發(fā)
  164.   IE=0x93;//EA=1,ES=1,ET0=1,EX0 = 1
  165.   AUXR=0x10;//AUXR:輔助寄存器。BRTR=1,允許獨立波特率發(fā)生器運行。
  166. S2SMOD=0,串口 2 的波特率不加倍.
  167.       //EXTRAM=0,允許使用內(nèi)部擴(kuò)展的 1024 字節(jié)擴(kuò)展 RAM。
  168.   TR1=1;//啟動定時器 1
  169.   CJ();
  170. }
  171. /********************************************
  172. Function
  173. :單片機(jī)應(yīng)答(發(fā)送數(shù)據(jù))子函數(shù)

  174. ********************************************/
  175. void Send Data()
  176. {
  177.   uint8 i;
  178.   uint16 crctemp;
  179.   Sendbuf[0]=resvbuf[0]; //發(fā)送數(shù)據(jù)的第一個字節(jié)為上位機(jī)的地址
  180.   Sendbuf[1]=resvbuf[1]; //發(fā)送數(shù)據(jù)的第二個字節(jié)為功能碼
  181.   crctemp=crccheck(Sendbuf,Send Count-2);//計算發(fā)送的校驗碼
  182.   Sendbuf[Send Count-2]=crctemp&0xff;
  183.   Sendbuf[Send Count-1]=crctemp>>8; //發(fā)送消息時,CRC 低位在前、高位在后
  184.   for(i=0;i<Send Count;i++)
  185.   {  
  186.    SBUF=Sendbuf[i];
  187.    Delay();
  188.   }
  189. }

  190. /**********************************
  191. 函數(shù)功能:Modbus 功能判斷函數(shù)
  192. **********************************/  
  193. void Check Message(void)      
  194. {  
  195.   uint16 crctemp,temp;
  196.   crctemp=crccheck(resvbuf,Rece Count-2); //生成校驗碼
  197.   temp=resvbuf[Rece Count-1];//接收到的校驗碼的高字節(jié)
  198.   temp=temp<<8|resvbuf[Rece Count-2];
  199.   if(temp!=crctemp) //判斷接收到的校驗碼和生成的校驗碼是否一致
  200.   {
  201.     Error=1;   //校驗碼不一致,錯誤標(biāo)志位置 1.
  202.   }
  203.   Rece Count=0;   //單片機(jī)接收數(shù)據(jù)(上位機(jī)發(fā)送的數(shù)據(jù))無效,接收字節(jié)變量清零。
  204.   if(!Error)//校驗碼一致
  205.   {  
  206.    ES=0;//關(guān)串口 1 中斷
  207.    ET0=0;//關(guān)定時器 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. 函數(shù)功能:讀取位函數(shù)
  222. Sendbuf[i+3]表示 P0.0-P0.7 的開關(guān)狀態(tài)
  223. 若為高電平,則表明端口對應(yīng)的開關(guān)斷開;
  224. 若為低電平,則表明端口對應(yīng)的開關(guān)閉合;
  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;  //是否讀完輸入開關(guān)狀態(tài)標(biāo)志位(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];//讀取的位數(shù)
  237.   Byte Num=Coil Num/8; //折算成字節(jié)
  238.   if(Coil Num%8!=0)
  239.   Byte Num++;
  240.   Sendbuf[2]=Byte Num;//返回的字節(jié)數(shù)
  241.   for(i=0;i<Byte Num;i++)
  242.    {
  243.     Sendbuf[i+3]=0;//返回的數(shù)據(jù) 1 初始值為 0  
  244.     for(j=0;j<8;j++)
  245.     {
  246.      Coil Val=Get SWVal(Start Address);
  247.      Sendbuf[i+3]|=Coil Val<<j;//讀取每一位的狀態(tài)
  248.      Start Address++;
  249.      if(Start Address>=temp Address+Coil Num)//判斷是否讀完 Coil Num個線圈狀態(tài)
  250.      {
  251.       exit=1;
  252.       break;//讀完退出
  253.      }
  254.     }
  255.     if(exit==1)
  256.      break;
  257.    }
  258.   Send Count=5+Byte Num;//發(fā)送的字節(jié)數(shù)(發(fā)送的地址碼、功能碼、從機(jī)返回的字節(jié)數(shù)、CRC 校驗碼共占 5 個字節(jié))
  259.   Send Data();
  260. }
  261. /**********************************
  262. 函數(shù)功能:獲取開關(guān)狀態(tài)函數(shù)。8 路數(shù)字量輸入 Address1=上位機(jī)中設(shè)置的寄存
  263. 器地址減 1.在上位機(jī)中增加通道:寄存器類型設(shè)置成【1 區(qū)】輸入繼電器,寄存
  264. 器地址依次設(shè)置成 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 的開關(guān)狀態(tài)
  273.    case 1:   Coil Val=Switch>>2&0x01;break;   // P0.1 的開關(guān)狀態(tài)
  274.    case 2:   Coil Val=Switch>>3&0x01;break;   // P0.2 的開關(guān)狀態(tài)
  275.    case 3:   Coil Val=Switch>>4&0x01;break;   // P0.3 的開關(guān)狀態(tài)
  276.    case 4:   Coil Val=Switch>>5&0x01;break;   // P0.4 的開關(guān)狀態(tài)   
  277.    case 5:   Coil Val=Switch>>6&0x01;break;   // P0.5 的開關(guān)狀態(tài)
  278.    case 6:   Coil Val=Switch>>7&0x01;break;   // P0.6 的開關(guān)狀態(tài)
  279.    case 7:   Coil Val=Switch>>8&0x01;break;   // P0.7 的開關(guān)狀態(tài)
  280.     default:  break;
  281.   }
  282.   return Coil Val;
  283. }
  284. /**********************************
  285. 函數(shù)功能:讀取寄存器函數(shù)

  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; //一個寄存器數(shù)據(jù)占 2 個字節(jié)   
  294.   Sendbuf[2]=resvbuf[5]*2; //上位機(jī)寄存器為 16 位占用兩個字節(jié)  ?
  295.   Sendbuf[2]=resvbuf[5]*2
  296.   for(i=0;i<Byte Count;i+=2)//一個寄存器數(shù)據(jù)占 2 個字節(jié)
  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(); //讀電能采集模塊數(shù)據(jù)
  306. }
  307. /**********************************
  308. 函數(shù)功能:強(qiáng)制單線圈函數(shù)

  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. 函數(shù)功能:設(shè)置位值函數(shù)
  340. 6 路數(shù)字量輸出,Address=上位機(jī)中設(shè)置的寄存器地址減 1.
  341. 上位機(jī)中增加通道:寄存器類型設(shè)置成【0 區(qū)】輸出繼電器,操作方式設(shè)置成只
  342. 寫 , 寄 存 器 地 址 依 次 設(shè) 置 成 1-6 , 即 可 強(qiáng) 制 Q55-Q0(P2.0-P2.5)
  343. 的 狀 態(tài) 。
  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;   //強(qiáng)制 P2.0(Q5)的狀態(tài)
  351.    case 1:   Coil1_bit1=Val;break;   //強(qiáng)制 P2.1(Q4)的狀態(tài)
  352.    case 2:   Coil1_bit2=Val;break;   //強(qiáng)制 P2.2(Q3)的狀態(tài)
  353.    case 3:   Coil1_bit3=Val;break;   //強(qiáng)制 P2.3(Q2)的狀態(tài)
  354.    case 4:   Coil1_bit4=Val;break;   //強(qiáng)制 P2.4(Q1)的狀態(tài)
  355.    case 5:   Coil1_bit5=Val;break;   //強(qiáng)制 P2.5(Q0)的狀態(tài)
  356.    case 6:   Self_optimization();break;   //自尋優(yōu)開始
  357.    default:  result=0;break;
  358.   }
  359.   return result;   
  360. }
  361. /**********************************
  362. 函數(shù)功能:設(shè)置單寄存器函數(shù)
  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;   //要設(shè)置的寄存器地址
  371.   Register Val=resvbuf[4];
  372.   Register Val=Register Val<<8|resvbuf[5];//要設(shè)置的寄存器值
  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. 函數(shù)功能:設(shè)置寄存器值函數(shù)
  432. **********************************/
  433. bit Set Register Val(uint16 Address1,uint16 Val1)
  434. {
  435.   uint8 Addr;
  436.   bit result1=1;
  437.   Addr=Address1&0xff; //Register[]數(shù)組的大小為 32 個字節(jié)
  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. }
復(fù)制代碼

回復(fù)

使用道具 舉報

ID:796531 發(fā)表于 2021-5-11 13:50 | 顯示全部樓層
本帖最后由 paladina 于 2021-5-11 14:00 編輯

unit8 未定義吧 ,需要定義 ,你要么統(tǒng)一定義 要么改 unsigned char
回復(fù)

使用道具 舉報

ID:155507 發(fā)表于 2021-5-11 14:51 | 顯示全部樓層
少寫
#define uint8 unsigned char

缺少頭文件 modbus.h


回復(fù)

使用道具 舉報

ID:919246 發(fā)表于 2021-5-11 15:59 | 顯示全部樓層
angmall 發(fā)表于 2021-5-11 14:51
少寫
#define uint8 unsigned char

大哥,加完了 沒反應(yīng),還是那個錯誤,應(yīng)該怎么辦呢????    謝謝大佬
回復(fù)

使用道具 舉報

ID:796531 發(fā)表于 2021-5-11 17:39 | 顯示全部樓層
拜托,樓主自己仔細(xì)看看你的代碼吧 一會 uint8 一會 unit8 ,拼寫也太不注意了,你unit8 定義了后面變成 unit8 當(dāng)然還是報錯,同理 uint16也是如此
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表