这个程序咋调不通,大神帮忙看下
#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,n; //n用于记录当前接收了多少
bit Flag=0; //标志位
//uchar Buff;//缓冲区
//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==tab1) //较对
{ //表示 收到8个数据了
ES=0;
while(!TI)
{
for(i=0;i<8;i++)
{
SBUF=tab3; //返回一帧数据
// while(!TI);
TI=0;
}}
FMQ_KBJ();
LED_KBJ();
}
else if(DAT==tab2)
{
ES=0;
for(i=0;i<8;i++)
{
SBUF=tab4; //返回一帧数据
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=SBUF;
if(n==lenth) //判断接收到的数据是否为一帧
{
Flag=1;
n=0;
}
}
}
} 拯救一下菜鸟吧 纠结了好久 LZ也是发帖量上100的坛友了,怎么还是不会问问题呢,不说现象,只贴代码一般没人看。 binaimei2007 发表于 2013-12-10 10:49
LZ也是发帖量上100的坛友了,怎么还是不会问问题呢,不说现象,只贴代码一般没人看。 ...
串口发送C1 99 18 99 01 0A 55 6B接收到的却是1F 33 AE A6 EB 55 29 00 ;而且报警没反应;
平时基本都是打酱油100发帖都是打出来的 哈哈 随便看了一下,LED_KBJ和FMQ_KBJ里面都有while(1)都死在那了,这是什么意思? binaimei2007 发表于 2013-12-10 10:53
随便看了一下,LED_KBJ和FMQ_KBJ里面都有while(1)都死在那了,这是什么意思?
让他一直报警,接收到命令才关 binaimei2007 发表于 2013-12-10 10:49
LZ也是发帖量上100的坛友了,怎么还是不会问问题呢,不说现象,只贴代码一般没人看。 ...
按理说接收到的是0xC2,0x99,0x18,0x99,0x01,0x0A,0x55,0x6C啊 看看波特率配的对不对,晶振的频率对不对,程序要一部分一部分的调,先把串口部分调好再调其他的功能 binaimei2007 发表于 2013-12-10 11:04
看看波特率配的对不对,晶振的频率对不对,程序要一部分一部分的调,先把串口部分调好再调其他的功能 ...
好的我在看一下 ,谢谢
页:
[1]