找回密码
 立即注册

QQ登录

只需一步,快速开始

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

keil编程时error C202: 'TR0': undefined identifier求大佬指点,怎么改,谢谢谢谢!

[复制链接]
跳转到指定楼层
楼主
  1. #include<modbus.h>
  2. #define uchar unsigned char
  3. #define uint8 unsigned char
  4. #define uint16 unsigned char
  5. bit  Search_Counta;//首次寻优标志 1
  6. bit  Search_Countb;//首次寻优标志 2
  7. uint8 Count; //寻优计数值
  8. uint8 ReceCount;  //串行口1的接收数据计数值
  9. uint8 SendCount;   //串行口1发送数据计数值
  10. uint16 Init_Value=0;   //寻优初值
  11. uint16 Term_Value=50;   //寻优终值
  12. uint8 Search_Steps=50;//寻优步数
  13. uint8 idata resvbuf[16],Sendbuf[64];//串行口 1 的接收缓冲区和发送缓冲区
  14. uint16 xdata ReWrbuf[32];    //可读写缓冲区
  15. uint16 xdata Register[32];   //寄存器缓冲区
  16. uint16 D_Val;           //占空比的数字量
  17. bit Error;   //错误标志位
  18. uint8 bdata Coil1=0xff;//8 位线圈状态
  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(); //初始化函数
  28. void Delay(void); //延时函数
  29. void CheckMessage(void);//功能码判断函数
  30. void SendData();//发送数据函数                             
  31. void ReadCoil(void);//读线圈函数
  32. void ReadRegisters(void);//读寄存器函数
  33. void ForceSingalCoil(void);//强置单线圈函数
  34. void SetOneRegisterVal(void);//预置单寄存器函数
  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 校验查表码值

  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      //定时/计数器 0 中断
  98. {
  99.   TR0=0;
  100.   Error=1;
  101.   if((resvbuf[0]==IN_Address)&&(ReceCount>=8))// 判断接收到的设备地址是否与上位机的地址相等,并成功接收上位机发送的指令
  102.   Error=0;
  103. }
  104. void Uart1_INT(void)interrupt 4 using 3       //串口 1 中断
  105. {
  106.    if(RI)     //RI 为接收中断标志位,为 1 表示一个数据已经收到。
  107.     {
  108.       RI=0;
  109.       resvbuf[ReceCount++]=SBUF;
  110.       TR0=0;
  111.       TH0=(65536-3688)/256;
  112.       TL0=(65536-3688)%256;   //定时器 0 定时 4ms
  113.       TR0=1;     
  114.     }
  115.    if(TI)      ////TI 为发送中断标志位,为 1 表示一个数据已经发送完毕。
  116.     {
  117.      TI=0;
  118.     }
  119. }
  120. /********************************************
  121. Function:CRC 校验子函数

  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) ;     //生成校验码,高位在前,低位在后。
  135. }
  136. /********************************************
  137. Function
  138. :延时子函数

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

  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;//初始化时占空比输出为 0
  158.   Re Wrbuf[21] = 0;//初始工作时控制信号为 0
  159.   Re Wrbuf[22] = 0;//初始工作时电流为 0
  160.   Re Wrbuf[23] = 0;//初始工作时电流为 0
  161.   TMOD=0x21;//定时器 1 工作方式 2,作为波特率发生器,定时器 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;             //设置外部中断 0 为低电平触发
  167.   IE=0x93;//EA=1,ES=1,ET0=1,EX0 = 1
  168.   AUXR=0x10;//AUXR:辅助寄存器。BRTR=1,允许独立波特率发生器运行。
  169. S2SMOD=0,串口 2 的波特率不加倍.
  170.       //EXTRAM=0,允许使用内部扩展的 1024 字节扩展 RAM。
  171.   TR1=1;//启动定时器 1
  172.   CJ();
  173. }
  174. /********************************************
  175. Function
  176. :单片机应答(发送数据)子函数

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

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

  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; //一个寄存器数据占 2 个字节   
  297.   Sendbuf[2]=resvbuf[5]*2; //上位机寄存器为 16 位占用两个字节  ?
  298.   Sendbuf[2]=resvbuf[5]*2
  299.   for(i=0;i<Byte Count;i+=2)//一个寄存器数据占 2 个字节
  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(); //读电能采集模块数据
  309. }
  310. /**********************************
  311. 函数功能:强制单线圈函数

  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. 函数功能:设置位值函数
  343. 6 路数字量输出,Address=上位机中设置的寄存器地址减 1.
  344. 上位机中增加通道:寄存器类型设置成【0 区】输出继电器,操作方式设置成只
  345. 写 , 寄 存 器 地 址 依 次 设 置 成 1-6 , 即 可 强 制 Q55-Q0(P2.0-P2.5)
  346. 的 状 态 。
  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;   //强制 P2.0(Q5)的状态
  354.    case 1:   Coil1_bit1=Val;break;   //强制 P2.1(Q4)的状态
  355.    case 2:   Coil1_bit2=Val;break;   //强制 P2.2(Q3)的状态
  356.    case 3:   Coil1_bit3=Val;break;   //强制 P2.3(Q2)的状态
  357.    case 4:   Coil1_bit4=Val;break;   //强制 P2.4(Q1)的状态
  358.    case 5:   Coil1_bit5=Val;break;   //强制 P2.5(Q0)的状态
  359.    case 6:   Self_optimization();break;   //自寻优开始
  360.    default:  result=0;break;
  361.   }
  362.   return result;   
  363. }
  364. /**********************************
  365. 函数功能:设置单寄存器函数
  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;   //要设置的寄存器地址
  374.   Register Val=resvbuf[4];
  375.   Register Val=Register Val<<8|resvbuf[5];//要设置的寄存器值
  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   //否则置错误位
  431.    Error=1;
  432. }
  433. /**********************************
  434. 函数功能:设置寄存器值函数
  435. **********************************/
  436. bit Set Register Val(uint16 Address1,uint16 Val1)
  437. {
  438.   uint8 Addr;
  439.   bit result1=1;
  440.   Addr=Address1&0xff; //Register[]数组的大小为 32 个字节
  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. }
复制代码

51hei截图20210511203108.png (33.83 KB, 下载次数: 58)

51hei截图20210511203108.png

51hei截图20210511203041.png (146.24 KB, 下载次数: 56)

51hei截图20210511203041.png
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:213173 发表于 2021-5-12 06:52 | 只看该作者
这段程序可能只是一个功能模块,并且含有外部变量。不可以单独编译。
回复

使用道具 举报

板凳
ID:887371 发表于 2021-5-12 09:07 | 只看该作者
#include <REG52.H>

前面加上这句。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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