微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 新人求助,自己实在没有办法了才求各位大神,帮帮小弟...

新人求助,自己实在没有办法了才求各位大神,帮帮小弟...

时间:10-02 整理:3721RD 点击:
问题:买来的产品里面只带了例程,通过485发送01 02开启继电器1和继电器2,因为网内设备有好几个,所以想要通过地址来判定,现在卡在了串口2中断判断,求各位大神能够帮帮小弟! 比如我想通过发送 01 02 03 f1 0d来开Y00 ,串口中断怎么改?

  1. *********************************************************************/
  2. /********************************************************************
  3. PC机与控制板采用485或者232连接都可以进行测试

  4. 单片机接收PC机发送的十六进制码表如下:
  5. 输出控制
  6. 01、全开:PC发送0xFF;           
  7. 02、全关:PC发送0X00;
  8. ************************************************************
  9. 03、第一路开:PC发送0x01;*********11、第一路关:PC发送0xF1;
  10. 04、第二路开:PC发送0x02;*********12、第二路关:PC发送0xF2;
  11. 05、第三路开:PC发送0x03;*********13、第三路关:PC发送0xF3;
  12. 06、第四路开:PC发送0x04;*********14、第四路关:PC发送0xF4;
  13. 07、第五路开:PC发送0x05;*********15、第五路关:PC发送0xF5;
  14. 08、第六路开:PC发送0x06;*********16、第六路关:PC发送0xF6;
  15. ************************************************************
  16. 输入控制
  17. ************************************************************
  18. 03、第一路触发:向PC发送0xA1
  19. 04、第二路触发:向PC发送0xA2
  20. 05、第三路触发:向PC发送0xA3
  21. 06、第四路触发:向PC发送0xA4
  22. 07、第五路触发:向PC发送0xA5
  23. 08、第六路触发:向PC发送0xA6
  24. ************************************************************
  25. *********************************************************************/
  26. #include<STC12C5A60S2.H>                 //库文件
  27. #include <intrins.h>
  28. #define uchar unsigned char//宏定义无符号字符型
  29. #define uint unsigned int  //宏定义无符号整型
  30. /********************************************************************
  31.                             初始定义
  32. *********************************************************************/

  33. unsigned char dat; //用于存储单片机接收发送缓冲寄存器SBUF里面的内容
  34. /*定义八位数字量输入为单片机P0口*/
  35. sbit X00=P1^0;
  36. sbit X01=P1^1;
  37. sbit X02=P1^4;
  38. sbit X03=P1^5;
  39. sbit X04=P1^6;
  40. sbit X05=P1^7;
  41. /*定义八位数字量输出IO口*/
  42. sbit Y00=P2^0;  
  43. sbit Y01=P2^1;
  44. sbit Y02=P2^2;
  45. sbit Y03=P2^3;
  46. sbit Y04=P2^4;
  47. sbit Y05=P2^5;
  48. /********************************************************************
  49.                             延时函数
  50. *********************************************************************/
  51. void delay(uchar t)
  52. {
  53.   uchar i,j;
  54.    for(i=0;i<t;i++)
  55.    {
  56.             for(j=250;j>0;j--);
  57.          { ;
  58.          }
  59.    }
  60. }
  61. /********************************************************************
  62.                            输出处理函数
  63. *********************************************************************/
  64. void open_X3(uchar turm)
  65. {
  66.         char i;
  67.         for(i=7;i>=0;i--)
  68.         {
  69.                 turm=_crol_(turm,1);
  70.                 switch(i)
  71.                 {
  72.                   case 0:Y00=turm&0x01;break;
  73.                   case 1:Y01=turm&0x01;break;
  74.                   case 2:Y02=turm&0x01;break;
  75.                   case 3:Y03=turm&0x01;break;
  76.                   case 4:Y04=turm&0x01;break;
  77.                   case 5:Y05=turm&0x01;break;
  78.                   default:break;
  79.                 }
  80.          }
  81. }
  82. /********************************************************************
  83.               功能:串口初始化,波特率9600,方式1
  84. *********************************************************************/
  85. void Init_Com(void)
  86. {
  87.     //串口初始化
  88.     TMOD = 0x20;
  89.     SCON = 0x50;
  90.     TH1 = 0xFd;
  91.     TL1 = 0xFd;
  92.     TR1 = 1;
  93.         ES=1;                //开串口1中断         
  94.    //485接口初始化       
  95.     S2CON=0x50;        //方式1,八位数据,可变波特率                             
  96.         AUXR1=0x00;        //1T工作方式                                  
  97.         BRT=0XFD;         //设置波特率9600                                 
  98.         AUXR=0x10;        //启动波特率发生器                                 
  99.         EA=1;                 //开总中断                                                  
  100.         IE2=0x01;        //开串口2中断                                 
  101. }
  102. /********************************************************************
  103.                             配置P4口
  104. *********************************************************************/
  105. void P4_init(void)
  106. {
  107.     P4SW=0x70;   //配置P4口
  108.     P4M0&=0x80;         
  109.     P4M1&=0x80;
  110. }
  111. /********************************************************************
  112.                             配置P4口
  113. *********************************************************************/
  114. void B485_send(uchar c)
  115. {

  116.   SBUF=S2BUF=c;
  117. }
  118. /********************************************************************
  119.                             主函数
  120. *********************************************************************/
  121. void main()
  122. {
  123.    Init_Com();//串口初始化
  124.    P4_init();
  125.    while(1)
  126.    {              
  127.        if(X00==0) {delay(20);Y00=0;while(!X00);Y00=1;B485_send(0XA1);}
  128.            if(X01==0) {delay(20);Y01=0;while(!X01);Y01=1;B485_send(0XA2);}
  129.            if(X02==0) {delay(20);Y02=0;while(!X02);Y02=1;B485_send(0XA3);}
  130.            if(X03==0) {delay(20);Y03=0;while(!X03);Y03=1;B485_send(0XA4);}
  131.            if(X04==0) {delay(20);Y04=0;while(!X04);Y04=1;B485_send(0XA5);}
  132.            if(X05==0) {delay(20);Y05=0;while(!X05);Y05=1;B485_send(0XA6);}
  133.         switch(dat) //接收数据判断
  134.         {
  135.                 uchar k;
  136.                 k=10;
  137.                 case 0xff: open_X3(0x00);delay(k);break; //  全开
  138.                 case 0x00: open_X3(0xff);delay(k);break; //  全关
  139.                
  140.                 case 0x01: Y00=0;delay(k);break;           //  第一路开
  141.                 case 0x02: Y01=0;delay(k);break;           //  第二路开
  142.                 case 0x03: Y02=0;delay(k);break;           //  第三路开
  143.                 case 0x04: Y03=0;delay(k);break;           //  第四路开
  144.                 case 0x05: Y04=0;delay(k);break;           //  第五路开
  145.                 case 0x06: Y05=0;delay(k);break;           //  第六路开
  146.                
  147.                 case 0xF1: Y00=1;delay(k);break;           //  第一路关
  148.                 case 0xF2: Y01=1;delay(k);break;           //  第二路关
  149.                 case 0xF3: Y02=1;delay(k);break;           //  第三路关
  150.                 case 0xF4: Y03=1;delay(k);break;           //  第四路关
  151.                 case 0xF5: Y04=1;delay(k);break;           //  第五路关
  152.                 case 0xF6: Y05=1;delay(k);break;           //  第六路关

  153.                 default:break;                                           //  跳出
  154.     }
  155.   }
  156. }
  157. /********************************************************************
  158.                           串口中断函数
  159. *********************************************************************/
  160. void commIntProc() interrupt 4
  161. {
  162.         if(TI)
  163.                 TI = 0;
  164.         if(RI)
  165.          {
  166.           RI = 0;
  167.           dat = SBUF;
  168.          } //接收数据SBUF赋与dat       
  169. }
  170. /********************************************************************
  171.                          串口二(485) 发送接收中断函数
  172. *********************************************************************/
  173. void uart2_isr()  interrupt 8
  174. {
  175.    if( S2CON & 0x01 )
  176.          {
  177.                 S2CON &= ~0x01;
  178.                    dat= S2BUF;       
  179.          }
  180.         if( S2CON & 0x02 )
  181.         {
  182.           S2CON&=0xfd;
  183.         }
  184. }         
  185. /********************************************************************
  186.                               结束
  187. *********************************************************************/

复制代码



串口中断 接受你所规定的数组,当然有个数据判断,有效接受,无效等待,有效数据,如那个继电器动作指令,有效接受,给主程序,进行执行。

串口中断 接受你所规定的数组,当然有个数据判断,有效接受,无效等待,有效数据,如那个继电器动作指令,有效接受,给主程序,进行执行。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top