找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1811|回复: 6
收起左侧

C51通过串口实现功能切换的问题

[复制链接]
ID:273660 发表于 2018-1-11 15:56 | 显示全部楼层 |阅读模式
请大家帮忙看一下这个问题,不知道怎么解决。我在main中写了break了,但是用却没办法切换,应该是前一个功能开始了但是停不下来,不知道怎么解决,求大神帮帮忙!
  1. #include "liushuideng.h"
  2. #include "0832.h"
  3. #include "12864.h"
  4. #include "1302.h"
  5. #include "lcd12864.h"
  6. #include "DS1302.h"

  7. #define uchar unsigned char
  8. #define uint unsigned int

  9. uchar zhi;

  10. void zhongduan()
  11. {
  12.         SCON=0x50;
  13.         TMOD=0x20;
  14.         TH1=0xfd;
  15.         TL1=0xfd;
  16.         IE=0x90;
  17.         TR1=1;
  18. }

  19. void liushuiinit()
  20. {
  21.         COM = 0x90;
  22.         PA = 0xff;
  23.         PB = 0xff;
  24.         PC = 0xff;
  25. }

  26. void main()
  27. {
  28.         zhongduan();
  29.         while(1)
  30.         {
  31.                 if(zhi==1)
  32.                 {
  33.                         Init_LCD1602();
  34.                         while(1)
  35.                         {
  36.                                 jisuanqi();
  37.                                 if(zhi!=1)
  38.                                 {
  39.                                         break;
  40.                                 }       
  41.                         }       
  42.                 }
  43.                 else if(zhi==2)
  44.                 {
  45.                         liushuiinit();
  46.                         while(1)
  47.                         {
  48.                                 liushuideng();
  49.                                 if(zhi!=2)
  50.                                 {
  51.                                         PB=0XFF;
  52.                                         break;
  53.                                 }       
  54.                         }
  55.                 }
  56.                 else if(zhi==3)
  57.                 {
  58.                         while(1)
  59.                         {
  60.                                 m_12864();
  61.                                 if(zhi!=3)
  62.                                 {
  63.                                         break;
  64.                                 }
  65.                         }
  66.                 }               
  67.         }
  68. }
  69.          

  70.         //Init_LCD1602();
  71.         //jisuanqi();
  72.         //DS18B20();
  73.         //liushuideng();
  74.         //m_0832();
  75.         //m_12864();
  76.         //m_1302();

  77. void intser() interrupt 4
  78. {
  79.         RI=0;
  80.         zhi=SBUF;
  81. }
复制代码


回复

使用道具 举报

ID:274922 发表于 2018-1-11 18:33 | 显示全部楼层
你要确定的串口数据是否正常接收到,中断是否能进入。也可能是你的串口通信就不行。还要看看硬件。
回复

使用道具 举报

ID:164602 发表于 2018-1-12 09:06 | 显示全部楼层
其实很简单:
第一:只能有一个while(1),你好多这个死循环啊。
第二:除了主循环用while(1)外,其它的while,都用控制位,如:while(i),i=0,就不循环,i=1就循环。
第三:判断语句就去根据条件设置如上所说的变量i,根本不需要break。
第四:break只能跳出循环,不能跳出if,所以,你的程序就死在这里了。
回复

使用道具 举报

ID:266627 发表于 2018-1-12 15:52 | 显示全部楼层
写一个串口程序吧,把变量zhi打印出来吧。
zhi的判断在程序中只有三种可能,1 2 3
如果等于4,就什么也不做。

可能是这个问题,但还是打印出来吧,一个个找原因
回复

使用道具 举报

ID:266627 发表于 2018-1-12 15:55 | 显示全部楼层
HC6800-ES-V2.0 发表于 2018-1-12 09:06
其实很简单:
第一:只能有一个while(1),你好多这个死循环啊。
第二:除了主循环用while(1)外,其它的wh ...

第四:break只能跳出循环,不能跳出if,所以,你的程序就死在这里了。

if里有个WHILE循环,只要跳出WHILE,就会顺序执行,自然会走出IF的语句段落
回复

使用道具 举报

ID:164602 发表于 2018-1-13 19:02 | 显示全部楼层
sirf3 发表于 2018-1-12 15:55
第四:break只能跳出循环,不能跳出if,所以,你的程序就死在这里了。

if里有个WHILE循环,只要跳出W ...

你知道单片机跳出循环到if用了多少时间?你能及时放开按键吗?这样想来,可能加个消抖也许就可以了
回复

使用道具 举报

ID:275955 发表于 2018-1-14 21:45 | 显示全部楼层
还是打印出来吧,一个个找原因
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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