新人求助,自己实在没有办法了才求各位大神,帮帮小弟...
时间:10-02
整理:3721RD
点击:
问题:买来的产品里面只带了例程,通过485发送01 02开启继电器1和继电器2,因为网内设备有好几个,所以想要通过地址来判定,现在卡在了串口2中断判断,求各位大神能够帮帮小弟! 比如我想通过发送 01 02 03 f1 0d来开Y00 ,串口中断怎么改?
- *********************************************************************/
- /********************************************************************
- PC机与控制板采用485或者232连接都可以进行测试
- 单片机接收PC机发送的十六进制码表如下:
- 输出控制
- 01、全开:PC发送0xFF;
- 02、全关:PC发送0X00;
- ************************************************************
- 03、第一路开:PC发送0x01;*********11、第一路关:PC发送0xF1;
- 04、第二路开:PC发送0x02;*********12、第二路关:PC发送0xF2;
- 05、第三路开:PC发送0x03;*********13、第三路关:PC发送0xF3;
- 06、第四路开:PC发送0x04;*********14、第四路关:PC发送0xF4;
- 07、第五路开:PC发送0x05;*********15、第五路关:PC发送0xF5;
- 08、第六路开:PC发送0x06;*********16、第六路关:PC发送0xF6;
- ************************************************************
- 输入控制
- ************************************************************
- 03、第一路触发:向PC发送0xA1
- 04、第二路触发:向PC发送0xA2
- 05、第三路触发:向PC发送0xA3
- 06、第四路触发:向PC发送0xA4
- 07、第五路触发:向PC发送0xA5
- 08、第六路触发:向PC发送0xA6
- ************************************************************
- *********************************************************************/
- #include<STC12C5A60S2.H> //库文件
- #include <intrins.h>
- #define uchar unsigned char//宏定义无符号字符型
- #define uint unsigned int //宏定义无符号整型
- /********************************************************************
- 初始定义
- *********************************************************************/
- unsigned char dat; //用于存储单片机接收发送缓冲寄存器SBUF里面的内容
- /*定义八位数字量输入为单片机P0口*/
- sbit X00=P1^0;
- sbit X01=P1^1;
- sbit X02=P1^4;
- sbit X03=P1^5;
- sbit X04=P1^6;
- sbit X05=P1^7;
- /*定义八位数字量输出IO口*/
- sbit Y00=P2^0;
- sbit Y01=P2^1;
- sbit Y02=P2^2;
- sbit Y03=P2^3;
- sbit Y04=P2^4;
- sbit Y05=P2^5;
- /********************************************************************
- 延时函数
- *********************************************************************/
- void delay(uchar t)
- {
- uchar i,j;
- for(i=0;i<t;i++)
- {
- for(j=250;j>0;j--);
- { ;
- }
- }
- }
- /********************************************************************
- 输出处理函数
- *********************************************************************/
- void open_X3(uchar turm)
- {
- char i;
- for(i=7;i>=0;i--)
- {
- turm=_crol_(turm,1);
- switch(i)
- {
- case 0:Y00=turm&0x01;break;
- case 1:Y01=turm&0x01;break;
- case 2:Y02=turm&0x01;break;
- case 3:Y03=turm&0x01;break;
- case 4:Y04=turm&0x01;break;
- case 5:Y05=turm&0x01;break;
- default:break;
- }
- }
- }
- /********************************************************************
- 功能:串口初始化,波特率9600,方式1
- *********************************************************************/
- void Init_Com(void)
- {
- //串口初始化
- TMOD = 0x20;
- SCON = 0x50;
- TH1 = 0xFd;
- TL1 = 0xFd;
- TR1 = 1;
- ES=1; //开串口1中断
- //485接口初始化
- S2CON=0x50; //方式1,八位数据,可变波特率
- AUXR1=0x00; //1T工作方式
- BRT=0XFD; //设置波特率9600
- AUXR=0x10; //启动波特率发生器
- EA=1; //开总中断
- IE2=0x01; //开串口2中断
- }
- /********************************************************************
- 配置P4口
- *********************************************************************/
- void P4_init(void)
- {
- P4SW=0x70; //配置P4口
- P4M0&=0x80;
- P4M1&=0x80;
- }
- /********************************************************************
- 配置P4口
- *********************************************************************/
- void B485_send(uchar c)
- {
- SBUF=S2BUF=c;
- }
- /********************************************************************
- 主函数
- *********************************************************************/
- void main()
- {
- Init_Com();//串口初始化
- P4_init();
- while(1)
- {
- if(X00==0) {delay(20);Y00=0;while(!X00);Y00=1;B485_send(0XA1);}
- if(X01==0) {delay(20);Y01=0;while(!X01);Y01=1;B485_send(0XA2);}
- if(X02==0) {delay(20);Y02=0;while(!X02);Y02=1;B485_send(0XA3);}
- if(X03==0) {delay(20);Y03=0;while(!X03);Y03=1;B485_send(0XA4);}
- if(X04==0) {delay(20);Y04=0;while(!X04);Y04=1;B485_send(0XA5);}
- if(X05==0) {delay(20);Y05=0;while(!X05);Y05=1;B485_send(0XA6);}
- switch(dat) //接收数据判断
- {
- uchar k;
- k=10;
- case 0xff: open_X3(0x00);delay(k);break; // 全开
- case 0x00: open_X3(0xff);delay(k);break; // 全关
-
- case 0x01: Y00=0;delay(k);break; // 第一路开
- case 0x02: Y01=0;delay(k);break; // 第二路开
- case 0x03: Y02=0;delay(k);break; // 第三路开
- case 0x04: Y03=0;delay(k);break; // 第四路开
- case 0x05: Y04=0;delay(k);break; // 第五路开
- case 0x06: Y05=0;delay(k);break; // 第六路开
-
- case 0xF1: Y00=1;delay(k);break; // 第一路关
- case 0xF2: Y01=1;delay(k);break; // 第二路关
- case 0xF3: Y02=1;delay(k);break; // 第三路关
- case 0xF4: Y03=1;delay(k);break; // 第四路关
- case 0xF5: Y04=1;delay(k);break; // 第五路关
- case 0xF6: Y05=1;delay(k);break; // 第六路关
- default:break; // 跳出
- }
- }
- }
- /********************************************************************
- 串口中断函数
- *********************************************************************/
- void commIntProc() interrupt 4
- {
- if(TI)
- TI = 0;
- if(RI)
- {
- RI = 0;
- dat = SBUF;
- } //接收数据SBUF赋与dat
- }
- /********************************************************************
- 串口二(485) 发送接收中断函数
- *********************************************************************/
- void uart2_isr() interrupt 8
- {
- if( S2CON & 0x01 )
- {
- S2CON &= ~0x01;
- dat= S2BUF;
- }
- if( S2CON & 0x02 )
- {
- S2CON&=0xfd;
- }
- }
- /********************************************************************
- 结束
- *********************************************************************/
串口中断 接受你所规定的数组,当然有个数据判断,有效接受,无效等待,有效数据,如那个继电器动作指令,有效接受,给主程序,进行执行。
串口中断 接受你所规定的数组,当然有个数据判断,有效接受,无效等待,有效数据,如那个继电器动作指令,有效接受,给主程序,进行执行。