- #include <string.h>
- #include <STC15W204S.H>
- #define uint unsigned int
- #define uchar unsigned char
- sbit FMQ=P1^4;
- sbit LED1=P1^3;
- sbit LED2=P1^0;
- #define lenth 8 //数据长度 定义为8个数据为一帧,产生一次标志位
- uchar DAT[lenth],n; //n用于记录当前接收了多少
- bit Flag=0; //标志位
- //uchar Buff[20];//缓冲区
- //uchar dat[];
- uchar code tab1[]={0xC1,0x99,0x18,0x99,0x01,0x0A,0x55,0x6B}; //开报警命令
- uchar code tab2[]={0xC1,0x99,0x19,0x99,0x01,0x0A,0x55,0x6C}; //关报警命令
- uchar code tab3[]={0xC2,0x99,0x18,0x99,0x01,0x0A,0x55,0x6C}; //回复开报警
- uchar code tab4[]={0xC2,0x99,0x19,0x99,0x01,0x0A,0x55,0x6B}; //回复关报警
- //extern DELAY_MS(int x); //延时毫秒
- //extern FMQ_KBJ(void); //开蜂鸣器报警
- //extern FMQ_GBJ(void); //关蜂鸣器报警
- //extern LED_KBJ(void); //开led报警
- //extern LED_GBJ(void); //关led报警
- //extern Send(uchar);
- /*延时毫秒函数*/
- void DELAY_MS(int x) //延时毫秒
- {
- int i;
- while(x--)
- {
- WDT_CONTR=0x36;
- for(i=0;i<100;i++);
- }
- }
- /*串口初始化函数*/
- void UartInit(void) //串口初始化
- {
- SCON = 0x50; //8位数据,可变波特率
- AUXR |= 0x40; //定时器1时钟为Fosc,即1T
- AUXR &= 0xFE; //串口1选择定时器1为波特率发生器
- TMOD &= 0x0F; //设定定时器1为16位自动重装方式
- TL1 = 0xE0; //设定定时初值
- TH1 = 0xFE; //设定定时初值
- ET1 = 0; //禁止定时器1中断
- TR1 = 1; //启动定时器1
- }
- /*开蜂鸣器报警函数*/
- void FMQ_KBJ(void)
- {
- while(1)
- {
- WDT_CONTR=0x36;
- FMQ=0;
- DELAY_MS(500);
- FMQ=1;
- DELAY_MS(500);
- }
- }
- /*关蜂鸣器报警函数*/
- void FMQ_GBJ(void)
- {
- FMQ=1;
- }
- /*开led报警函数*/
- void LED_KBJ(void)
- {
- while(1)
- {
- WDT_CONTR=0x36;
- LED1=0;LED2=0;
- DELAY_MS(200);
- LED1=1;LED2=1;
- DELAY_MS(200);
- /* LED1=~LED1;LED2=~LED2; */
- }
- }
- /*关led报警函数*/
- void LED_GBJ(void)
- {
- LED1=1;LED2=1;
- }
- /*主函数*/
- void main(void)
- {
- uint i;
- UartInit();
- LED_GBJ();
- P1M1=0X00;
- P1M0=0X19;
- while(1)
- {
- if(Flag) //判断标志位是否为1
- {
- if(DAT[n]==tab1[i]) //较对
- { //表示 收到8个数据了
- ES=0;
- while(!TI)
- {
- for(i=0;i<8;i++)
- {
- SBUF=tab3[i]; //返回一帧数据
- // while(!TI);
- TI=0;
- }}
- FMQ_KBJ();
- LED_KBJ();
- }
- else if(DAT[n]==tab2[i])
- {
- ES=0;
- for(i=0;i<8;i++)
- {
- SBUF=tab4[i]; //返回一帧数据
- while(!TI);
- TI=0;
- }
- FMQ_GBJ();
- LED_GBJ();
- }
- else
- {
- TI=0;
- }
- ES=1;
- Flag=0;
- }
- }
- }
- /*发送单字节数据函数*/
- void Send(uchar m)
- {
- TI = 0;
- SBUF = m;
- while(!TI);
- TI = 0;
- }
- /*串口中断接收一帧数据函数*/
- void Uart_interrupt(void) interrupt 4 using 3
- {
- {
- if(RI)
- {
- RI = 0;
- DAT[n++]=SBUF;
- if(n==lenth) //判断接收到的数据是否为一帧
- {
- Flag=1;
- n=0;
- }
- }
- }
- }
复制代码
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
串口发送C1 99 18 99 01 0A 55 6B 接收到的却是1F 33 AE A6 EB 55 29 00 ;而且报警没反应;
平时基本都是打酱油 100发帖都是打出来的 哈哈
让他一直报警,接收到命令才关
一周热门 更多>