找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

keil編程時(shí)error C202: 'TR0': undefined identifier求大佬指點(diǎn),怎么改,謝謝謝謝!

[復(fù)制鏈接]
ID:919246 發(fā)表于 2021-5-11 20:32 | 顯示全部樓層 |閱讀模式
  1. #include<modbus.h>
  2. #define uchar unsigned char
  3. #define uint8 unsigned char
  4. #define uint16 unsigned char
  5. bit  Search_Counta;//首次尋優(yōu)標(biāo)志 1
  6. bit  Search_Countb;//首次尋優(yōu)標(biāo)志 2
  7. uint8 Count; //尋優(yōu)計(jì)數(shù)值
  8. uint8 ReceCount;  //串行口1的接收數(shù)據(jù)計(jì)數(shù)值
  9. uint8 SendCount;   //串行口1發(fā)送數(shù)據(jù)計(jì)數(shù)值
  10. uint16 Init_Value=0;   //尋優(yōu)初值
  11. uint16 Term_Value=50;   //尋優(yōu)終值
  12. uint8 Search_Steps=50;//尋優(yōu)步數(shù)
  13. uint8 idata resvbuf[16],Sendbuf[64];//串行口 1 的接收緩沖區(qū)和發(fā)送緩沖區(qū)
  14. uint16 xdata ReWrbuf[32];    //可讀寫緩沖區(qū)
  15. uint16 xdata Register[32];   //寄存器緩沖區(qū)
  16. uint16 D_Val;           //占空比的數(shù)字量
  17. bit Error;   //錯(cuò)誤標(biāo)志位
  18. uint8 bdata Coil1=0xff;//8 位線圈狀態(tài)
  19. sbit Coil1_bit0=Coil1^0;
  20. sbit Coil1_bit1=Coil1^1;
  21. sbit Coil1_bit2=Coil1^2;
  22. sbit Coil1_bit3=Coil1^3;
  23. sbit Coil1_bit4=Coil1^4;
  24. sbit Coil1_bit5=Coil1^5;
  25. sbit Coil1_bit6=Coil1^6;
  26. sbit Coil1_bit7=Coil1^7;
  27. void InitSystem(); //初始化函數(shù)
  28. void Delay(void); //延時(shí)函數(shù)
  29. void CheckMessage(void);//功能碼判斷函數(shù)
  30. void SendData();//發(fā)送數(shù)據(jù)函數(shù)                             
  31. void ReadCoil(void);//讀線圈函數(shù)
  32. void ReadRegisters(void);//讀寄存器函數(shù)
  33. void ForceSingalCoil(void);//強(qiáng)置單線圈函數(shù)
  34. void SetOneRegisterVal(void);//預(yù)置單寄存器函數(shù)
  35. uint8 GetSWVal(uint16 Address);
  36. bit SetCoilVal(uint16 Address,bit Val);
  37. bit SetRegisterVal(uint16 Address1,uint16 Val1);
  38. uint16 crccheck(uint8*puchMsg, uint8 usDataLen);
  39. void Delay_us(uint8 t);
  40. void Write_TLC(uint16 dat);
  41. void Self_optimization();

  42. //CRC 校驗(yàn)查表碼值

  43. const uint8 code auchCRCHi[] ={  
  44. 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,  
  45. 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,  
  46. 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,  
  47. 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,  
  48. 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,  
  49. 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,  
  50. 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,  
  51. 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,  
  52. 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,  
  53. 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,  
  54. 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,  
  55. 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,  
  56. 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,  
  57. 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,  
  58. 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,  
  59. 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,  
  60. 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,  
  61. 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,  
  62. 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,  
  63. 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,   
  64. 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,  
  65. 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,  
  66. 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,  
  67. 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,  
  68. 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,  
  69. 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40};  

  70. const uint8 code auchCRCLo[] = {  
  71. 0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06,  
  72. 0x07, 0xC7, 0x05, 0xC5, 0xC4, 0x04, 0xCC, 0x0C, 0x0D, 0xCD,  
  73. 0x0F, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x09,  
  74. 0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9, 0x1B, 0xDB, 0xDA, 0x1A,  
  75. 0x1E, 0xDE, 0xDF, 0x1F, 0xDD, 0x1D, 0x1C, 0xDC, 0x14, 0xD4,  
  76. 0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2, 0x12, 0x13, 0xD3,  
  77. 0x11, 0xD1, 0xD0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3,  
  78. 0xF2, 0x32, 0x36, 0xF6, 0xF7, 0x37, 0xF5, 0x35, 0x34, 0xF4,  
  79. 0x3C, 0xFC, 0xFD, 0x3D, 0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A,  
  80. 0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38, 0x28, 0xE8, 0xE9, 0x29,  
  81. 0xEB, 0x2B, 0x2A, 0xEA, 0xEE, 0x2E, 0x2F, 0xEF, 0x2D, 0xED,  
  82. 0xEC, 0x2C, 0xE4, 0x24, 0x25, 0xE5, 0x27, 0xE7, 0xE6, 0x26,  
  83. 0x22, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60,  
  84. 0x61, 0xA1, 0x63, 0xA3, 0xA2, 0x62, 0x66, 0xA6, 0xA7, 0x67,  
  85. 0xA5, 0x65, 0x64, 0xA4, 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F,  
  86. 0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB, 0x69, 0xA9, 0xA8, 0x68,  
  87. 0x78, 0xB8, 0xB9, 0x79, 0xBB, 0x7B, 0x7A, 0xBA, 0xBE, 0x7E,  
  88. 0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5,  
  89. 0x77, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71,  
  90. 0x70, 0xB0, 0x50, 0x90, 0x91, 0x51, 0x93, 0x53, 0x52, 0x92,  
  91. 0x96, 0x56, 0x57, 0x97, 0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C,  
  92. 0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, 0x5A, 0x9A, 0x9B, 0x5B,  
  93. 0x99, 0x59, 0x58, 0x98, 0x88, 0x48, 0x49, 0x89, 0x4B, 0x8B,  
  94. 0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C,  
  95. 0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42,  
  96. 0x43, 0x83, 0x41, 0x81, 0x80, 0x40};  

  97. void timer0_INT(void)interrupt 1 using 1      //定時(shí)/計(jì)數(shù)器 0 中斷
  98. {
  99.   TR0=0;
  100.   Error=1;
  101.   if((resvbuf[0]==IN_Address)&&(ReceCount>=8))// 判斷接收到的設(shè)備地址是否與上位機(jī)的地址相等,并成功接收上位機(jī)發(fā)送的指令
  102.   Error=0;
  103. }
  104. void Uart1_INT(void)interrupt 4 using 3       //串口 1 中斷
  105. {
  106.    if(RI)     //RI 為接收中斷標(biāo)志位,為 1 表示一個(gè)數(shù)據(jù)已經(jīng)收到。
  107.     {
  108.       RI=0;
  109.       resvbuf[ReceCount++]=SBUF;
  110.       TR0=0;
  111.       TH0=(65536-3688)/256;
  112.       TL0=(65536-3688)%256;   //定時(shí)器 0 定時(shí) 4ms
  113.       TR0=1;     
  114.     }
  115.    if(TI)      ////TI 為發(fā)送中斷標(biāo)志位,為 1 表示一個(gè)數(shù)據(jù)已經(jīng)發(fā)送完畢。
  116.     {
  117.      TI=0;
  118.     }
  119. }
  120. /********************************************
  121. Function:CRC 校驗(yàn)子函數(shù)

  122. ********************************************/
  123. uint16 crccheck(uint8*puchMsg, uint8 us DataLen)  
  124. {  
  125.   uint8 uchCRCHi = 0xFF ;  
  126.   uint8 uchCRCLo = 0xFF ;  
  127.   uint8 uIndex ;  
  128.   while(usDataLen--)  
  129.   {
  130.   uIndex = uchCRCHi^*puchMsg++ ;  
  131.   uchCRCHi = uchCRCLo ^ auchCRCHi[uIndex] ;  
  132.   uchCRCLo = auchCRCLo[uIndex] ;  
  133.   }  
  134.   return (uchCRCHi << 8 | uchCRCLo) ;     //生成校驗(yàn)碼,高位在前,低位在后。
  135. }
  136. /********************************************
  137. Function
  138. :延時(shí)子函數(shù)

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

  149. void Init System()
  150. {  
  151.   Rece Count=0;
  152.   Rece2Count=0;
  153.   Count   = 0;
  154.   Search_Counta = 0;
  155.   Search_Countb = 0;
  156.   DA_Val = 0;
  157.   Register[9] = 0;//初始化時(shí)占空比輸出為 0
  158.   Re Wrbuf[21] = 0;//初始工作時(shí)控制信號為 0
  159.   Re Wrbuf[22] = 0;//初始工作時(shí)電流為 0
  160.   Re Wrbuf[23] = 0;//初始工作時(shí)電流為 0
  161.   TMOD=0x21;//定時(shí)器 1 工作方式 2,作為波特率發(fā)生器,定時(shí)器 0 工作方式1
  162.   SCON=0x50;//串行口 1 工作方式 1,允許接收
  163.   BRT=0xfd;   //串行口 2 波特率 [url=mailto:9600@11.0592MHz]9600@11.0592MHz[/url]
  164.   TH1=0xfd;
  165.   TL1=0xfd;//串行口 1 波特率 [url=mailto:9600@11.0592MHz]9600@11.0592MHz[/url]
  166.   IT0 = 0;             //設(shè)置外部中斷 0 為低電平觸發(fā)
  167.   IE=0x93;//EA=1,ES=1,ET0=1,EX0 = 1
  168.   AUXR=0x10;//AUXR:輔助寄存器。BRTR=1,允許獨(dú)立波特率發(fā)生器運(yùn)行。
  169. S2SMOD=0,串口 2 的波特率不加倍.
  170.       //EXTRAM=0,允許使用內(nèi)部擴(kuò)展的 1024 字節(jié)擴(kuò)展 RAM。
  171.   TR1=1;//啟動(dòng)定時(shí)器 1
  172.   CJ();
  173. }
  174. /********************************************
  175. Function
  176. :單片機(jī)應(yīng)答(發(fā)送數(shù)據(jù))子函數(shù)

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

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

  289. **********************************/
  290. void Read Registers(void)
  291. {
  292.   uint16 Start Address;
  293.   uint8 Byte Count,i;
  294.   Start Address=resvbuf[2];
  295.   Start Address=Start Address<<8|resvbuf[3];
  296.   Byte Count=resvbuf[5]*2; //一個(gè)寄存器數(shù)據(jù)占 2 個(gè)字節(jié)   
  297.   Sendbuf[2]=resvbuf[5]*2; //上位機(jī)寄存器為 16 位占用兩個(gè)字節(jié)  ?
  298.   Sendbuf[2]=resvbuf[5]*2
  299.   for(i=0;i<Byte Count;i+=2)//一個(gè)寄存器數(shù)據(jù)占 2 個(gè)字節(jié)
  300.      {
  301.    Sendbuf[i+4]=Re Wrbuf[Start Address]&0xff;
  302.    Sendbuf[i+3]=Re Wrbuf[Start Address]>>8; //高位在前、低位在后
  303.    Start Address++;
  304.   }
  305.   Send Count=Byte Count+5;
  306.   Send Data();
  307.   if(resvbuf[3] == 0x00)
  308.    CJ(); //讀電能采集模塊數(shù)據(jù)
  309. }
  310. /**********************************
  311. 函數(shù)功能:強(qiáng)制單線圈函數(shù)

  312. **********************************/
  313. void Force Singal Coil(void)
  314. {
  315.   uint16 Address,On Off;
  316.   bit temp,Coil Val;
  317.   Address=resvbuf[2]<<8|resvbuf[3];
  318.   On Off=resvbuf[4]<<8|resvbuf[5];
  319.   if(On Off==0x0000)
  320.   {
  321.    Coil Val=0;
  322.    temp=Set Coil Val(Address,Coil Val);
  323.   }
  324.   else if(On Off==0x FF00)
  325.   {
  326.    Coil Val=1;
  327.    temp=Set Coil Val(Address,Coil Val);
  328.   }
  329.   if(temp==1)     //成功返回原命令
  330.   {   
  331.   Sendbuf[2]=resvbuf[2];   
  332.   Sendbuf[3]=resvbuf[3];
  333.   Sendbuf[4]=resvbuf[4];
  334.   Sendbuf[5]=resvbuf[5];
  335.   Send Count=8;
  336.   Send Data();
  337.   }
  338.   else
  339.    Error=1;
  340. }
  341. /**********************************
  342. 函數(shù)功能:設(shè)置位值函數(shù)
  343. 6 路數(shù)字量輸出,Address=上位機(jī)中設(shè)置的寄存器地址減 1.
  344. 上位機(jī)中增加通道:寄存器類型設(shè)置成【0 區(qū)】輸出繼電器,操作方式設(shè)置成只
  345. 寫 , 寄 存 器 地 址 依 次 設(shè) 置 成 1-6 , 即 可 強(qiáng) 制 Q55-Q0(P2.0-P2.5)
  346. 的 狀 態(tài) 。
  347. **********************************/
  348. bit Set Coil Val(uint16 Address,bit Val)
  349. {
  350.   bit result=1;
  351.   switch(Address&0x0f)
  352.   {
  353.    case 0:   Coil1_bit0=Val;break;   //強(qiáng)制 P2.0(Q5)的狀態(tài)
  354.    case 1:   Coil1_bit1=Val;break;   //強(qiáng)制 P2.1(Q4)的狀態(tài)
  355.    case 2:   Coil1_bit2=Val;break;   //強(qiáng)制 P2.2(Q3)的狀態(tài)
  356.    case 3:   Coil1_bit3=Val;break;   //強(qiáng)制 P2.3(Q2)的狀態(tài)
  357.    case 4:   Coil1_bit4=Val;break;   //強(qiáng)制 P2.4(Q1)的狀態(tài)
  358.    case 5:   Coil1_bit5=Val;break;   //強(qiáng)制 P2.5(Q0)的狀態(tài)
  359.    case 6:   Self_optimization();break;   //自尋優(yōu)開始
  360.    default:  result=0;break;
  361.   }
  362.   return result;   
  363. }
  364. /**********************************
  365. 函數(shù)功能:設(shè)置單寄存器函數(shù)
  366. **********************************/
  367. void Set One Register Val(void)
  368. {
  369.   uint16 R_Address,Register Val;
  370.   bit temp1;
  371.   R_Address=resvbuf[2];
  372.   R_Address=R_Address<<8|resvbuf[3];
  373.   R_Address=R_Address-90;   //要設(shè)置的寄存器地址
  374.   Register Val=resvbuf[4];
  375.   Register Val=Register Val<<8|resvbuf[5];//要設(shè)置的寄存器值
  376.   temp1=Set Register Val(R_Address,Register Val);
  377.   if((temp1 == 1)&&(R_Address == 9))   //成功返回原命令
  378.   {
  379.    Sendbuf[2]=resvbuf[2];
  380.    Sendbuf[3]=resvbuf[3];
  381.    Sendbuf[4]=resvbuf[4];
  382.    Sendbuf[5]=resvbuf[5];
  383.    Send Count = 8;
  384.    Send Data();
  385.    D_Val = Register[9];
  386.    Write_TLC(D_Val); //輸出 D 值
  387.   }
  388.   else if((temp1 == 1)&&(R_Address == 10))
  389.   {
  390.    Sendbuf[2]=resvbuf[2];
  391.    Sendbuf[3]=resvbuf[3];
  392.    Sendbuf[4]=resvbuf[4];
  393.    Sendbuf[5]=resvbuf[5];
  394.    Send Count = 8;
  395.    Send Data();
  396.    Harm_Times = Register[10]&0x FF;   
  397.   }
  398.   else if((temp1 == 1)&&(R_Address == 11))
  399.   {  
  400.    Sendbuf[2]=resvbuf[2];
  401.    Sendbuf[3]=resvbuf[3];
  402.    Sendbuf[4]=resvbuf[4];
  403.    Sendbuf[5]=resvbuf[5];
  404.    Send Count = 8;
  405.    Send Data();  
  406.    Init_Value = Register[11];
  407.    Search_Counta = 0;
  408.   }
  409.   else if((temp1 == 1)&&(R_Address == 12))
  410.   {
  411.    Sendbuf[2]=resvbuf[2];
  412.    Sendbuf[3]=resvbuf[3];
  413.    Sendbuf[4]=resvbuf[4];
  414.    Sendbuf[5]=resvbuf[5];
  415.    Send Count = 8;
  416.    Send Data();  
  417.    Term_Value = Register[12];
  418.    Search_Countb = 0;
  419.   }
  420.   else if((temp1 == 1)&&(R_Address == 13))
  421.   {
  422.    Sendbuf[2]=resvbuf[2];
  423.    Sendbuf[3]=resvbuf[3];
  424.    Sendbuf[4]=resvbuf[4];
  425.    Sendbuf[5]=resvbuf[5];
  426.    Send Count = 8;
  427.    Send Data();  
  428.    Search_Steps = Register[13]&0x FF;
  429.   }
  430.   else   //否則置錯(cuò)誤位
  431.    Error=1;
  432. }
  433. /**********************************
  434. 函數(shù)功能:設(shè)置寄存器值函數(shù)
  435. **********************************/
  436. bit Set Register Val(uint16 Address1,uint16 Val1)
  437. {
  438.   uint8 Addr;
  439.   bit result1=1;
  440.   Addr=Address1&0xff; //Register[]數(shù)組的大小為 32 個(gè)字節(jié)
  441.      Register[Addr]=Val1;
  442.   return result1;
  443. }
  444. void Delay_us(uint8 t)
  445. {
  446.   uint8 i;
  447.   for(i=0;i<12*t;i++)
  448.    _nop_();
  449. }
復(fù)制代碼
51hei截圖20210511203108.png
51hei截圖20210511203041.png
回復(fù)

使用道具 舉報(bào)

ID:213173 發(fā)表于 2021-5-12 06:52 | 顯示全部樓層
這段程序可能只是一個(gè)功能模塊,并且含有外部變量。不可以單獨(dú)編譯。
回復(fù)

使用道具 舉報(bào)

ID:887371 發(fā)表于 2021-5-12 09:07 | 顯示全部樓層
#include <REG52.H>

前面加上這句。
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

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