搜索
bottom↓
回复: 8

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

[复制链接]

出0入8汤圆

发表于 2013-12-10 10:16:19 | 显示全部楼层 |阅读模式
  1. #include <string.h>
  2. #include <STC15W204S.H>

  3. #define uint unsigned int
  4. #define uchar unsigned char

  5. sbit FMQ=P1^4;
  6. sbit LED1=P1^3;
  7. sbit LED2=P1^0;

  8. #define lenth 8 //数据长度 定义为8个数据为一帧,产生一次标志位
  9. uchar DAT[lenth],n;         //n用于记录当前接收了多少
  10. bit Flag=0;                //标志位
  11. //uchar Buff[20];//缓冲区
  12. //uchar dat[];
  13. uchar code tab1[]={0xC1,0x99,0x18,0x99,0x01,0x0A,0x55,0x6B};                 //开报警命令
  14. uchar code tab2[]={0xC1,0x99,0x19,0x99,0x01,0x0A,0x55,0x6C};                 //关报警命令

  15. uchar code tab3[]={0xC2,0x99,0x18,0x99,0x01,0x0A,0x55,0x6C};                 //回复开报警
  16. uchar code tab4[]={0xC2,0x99,0x19,0x99,0x01,0x0A,0x55,0x6B};                 //回复关报警

  17. //extern DELAY_MS(int x);         //延时毫秒
  18. //extern FMQ_KBJ(void);         //开蜂鸣器报警
  19. //extern FMQ_GBJ(void);         //关蜂鸣器报警
  20. //extern LED_KBJ(void);         //开led报警
  21. //extern LED_GBJ(void);         //关led报警
  22. //extern Send(uchar);
  23. /*延时毫秒函数*/
  24. void DELAY_MS(int x)     //延时毫秒
  25. {
  26. int i;
  27. while(x--)
  28. {
  29.   WDT_CONTR=0x36;
  30.   for(i=0;i<100;i++);
  31. }
  32. }
  33. /*串口初始化函数*/
  34. void UartInit(void)                //串口初始化
  35. {
  36. SCON = 0x50;                    //8位数据,可变波特率
  37. AUXR |= 0x40;                     //定时器1时钟为Fosc,即1T
  38. AUXR &= 0xFE;                    //串口1选择定时器1为波特率发生器
  39. TMOD &= 0x0F;                    //设定定时器1为16位自动重装方式
  40. TL1 = 0xE0;                    //设定定时初值
  41. TH1 = 0xFE;                    //设定定时初值
  42. ET1 = 0;                        //禁止定时器1中断
  43. TR1 = 1;                        //启动定时器1
  44. }

  45. /*开蜂鸣器报警函数*/
  46. void FMQ_KBJ(void)
  47. {
  48. while(1)
  49. {
  50.   WDT_CONTR=0x36;
  51.   FMQ=0;
  52.   DELAY_MS(500);
  53.   FMQ=1;
  54.   DELAY_MS(500);
  55. }
  56. }
  57. /*关蜂鸣器报警函数*/
  58. void FMQ_GBJ(void)
  59. {
  60. FMQ=1;
  61. }
  62. /*开led报警函数*/
  63. void LED_KBJ(void)
  64. {
  65. while(1)
  66. {
  67.   WDT_CONTR=0x36;
  68.   LED1=0;LED2=0;
  69.   DELAY_MS(200);
  70.   LED1=1;LED2=1;
  71.   DELAY_MS(200);
  72. /*   LED1=~LED1;LED2=~LED2;   */
  73. }
  74. }
  75. /*关led报警函数*/
  76. void LED_GBJ(void)
  77. {
  78. LED1=1;LED2=1;
  79. }
  80. /*主函数*/
  81. void main(void)
  82. {
  83. uint i;
  84. UartInit();
  85. LED_GBJ();
  86.   P1M1=0X00;
  87.   P1M0=0X19;
  88.     while(1)
  89.     {
  90.        if(Flag)                                            //判断标志位是否为1
  91.        {  
  92.           if(DAT[n]==tab1[i])                //较对
  93.                   {                         //表示 收到8个数据了
  94.                     ES=0;
  95.                    while(!TI)
  96.                    {
  97.                     for(i=0;i<8;i++)
  98.                     {
  99.                      SBUF=tab3[i];                    //返回一帧数据
  100.                         // while(!TI);
  101.              TI=0;
  102.                     }}
  103.                     FMQ_KBJ();
  104.                     LED_KBJ();
  105.                   }
  106.                   else if(DAT[n]==tab2[i])
  107.                   {
  108.                     ES=0;
  109.                     for(i=0;i<8;i++)
  110.                    {
  111.                     SBUF=tab4[i];                    //返回一帧数据
  112.                         while(!TI);
  113.             TI=0;
  114.                    }
  115.                     FMQ_GBJ();
  116.                     LED_GBJ();
  117.                   }
  118.                   else
  119.                   {
  120.                    TI=0;
  121.                   }
  122.                  ES=1;
  123.                  Flag=0;
  124.        }
  125.     }
  126. }

  127. /*发送单字节数据函数*/
  128. void Send(uchar m)
  129. {
  130. TI = 0;
  131. SBUF = m;
  132. while(!TI);
  133. TI = 0;       
  134. }

  135. /*串口中断接收一帧数据函数*/
  136. void Uart_interrupt(void) interrupt 4 using 3
  137. {      
  138.   {
  139.     if(RI)
  140.     {
  141.       RI = 0;
  142.       DAT[n++]=SBUF;
  143.       if(n==lenth)                  //判断接收到的数据是否为一帧
  144.       {
  145.          Flag=1;
  146.          n=0;
  147.       }
  148.     }
  149.   }
  150. }
复制代码

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入8汤圆

 楼主| 发表于 2013-12-10 10:35:06 | 显示全部楼层
拯救一下菜鸟吧 纠结了好久

出0入0汤圆

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

出0入8汤圆

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

出0入0汤圆

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

出0入8汤圆

 楼主| 发表于 2013-12-10 10:57:20 | 显示全部楼层
binaimei2007 发表于 2013-12-10 10:53
随便看了一下,LED_KBJ和FMQ_KBJ里面都有while(1)  都死在那了,这是什么意思?

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

出0入8汤圆

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

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

出0入0汤圆

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

出0入8汤圆

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

好的  我在看一下 ,谢谢
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 14:16

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表