如果 发表于 2013-12-10 10:16:19

这个程序咋调不通,大神帮忙看下

#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;
      }
    }
}
}

如果 发表于 2013-12-10 10:35:06

拯救一下菜鸟吧 纠结了好久

binaimei2007 发表于 2013-12-10 10:49:01

LZ也是发帖量上100的坛友了,怎么还是不会问问题呢,不说现象,只贴代码一般没人看。

如果 发表于 2013-12-10 10:51:58

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发帖都是打出来的 哈哈

binaimei2007 发表于 2013-12-10 10:53:35

随便看了一下,LED_KBJ和FMQ_KBJ里面都有while(1)都死在那了,这是什么意思?

如果 发表于 2013-12-10 10:57:20

binaimei2007 发表于 2013-12-10 10:53
随便看了一下,LED_KBJ和FMQ_KBJ里面都有while(1)都死在那了,这是什么意思?

让他一直报警,接收到命令才关

如果 发表于 2013-12-10 11:02:05

binaimei2007 发表于 2013-12-10 10:49
LZ也是发帖量上100的坛友了,怎么还是不会问问题呢,不说现象,只贴代码一般没人看。 ...

按理说接收到的是0xC2,0x99,0x18,0x99,0x01,0x0A,0x55,0x6C啊

binaimei2007 发表于 2013-12-10 11:04:35

看看波特率配的对不对,晶振的频率对不对,程序要一部分一部分的调,先把串口部分调好再调其他的功能

如果 发表于 2013-12-10 11:07:03

binaimei2007 发表于 2013-12-10 11:04
看看波特率配的对不对,晶振的频率对不对,程序要一部分一部分的调,先把串口部分调好再调其他的功能 ...

好的我在看一下 ,谢谢
页: [1]
查看完整版本: 这个程序咋调不通,大神帮忙看下