关于程序实现此串口中断功能

[复制链接]
 楼主| yuse 发表于 2010-10-24 10:06 | 显示全部楼层 |阅读模式
程序如下,要实现的功能是:当单片机收到3时,执行led1和led2交替闪烁的现象;当收到1或者2时执行其他led的其他状态。

问题是:在执行led1和led2交替闪烁的现象时如果收到1或者2,有时不能立刻改变到1或者2状态,好像还需要等待延时以及程序完检测while(!RI)后才能退出再进入1或2状态。

不知道具体是怎样的原理?想实现各种状态立刻改变最好应该怎么做呢?把延时函数用成定时器吗?
void commIntProc() interrupt 4
{
if(RI)
{
  RI = 0;
  flag = SBUF;
  if(flag=='1')
    ……
  if(flag=='2')
  {
   
    led3=0;
   
  }
  if(flag=='3')
  {
   while(!RI)
   {
   led1=0;
   led2=1;
   delay(4000);
   led1=1;
   led2=0;
   delay(4000);  
   }
  }
}
}
一级菜鸟 发表于 2010-10-24 10:08 | 显示全部楼层
下面那句WHILE搬到中断外面去,没这么折腾人家的。
zhiyonghe 发表于 2010-10-24 11:19 | 显示全部楼层
最好别在中断里搞这些!!
在中断里判断是flag==1,2,3,再i置个标志位,把中断里面的东西全搞到外面去
定时器可以的话别老想到用delay
您需要登录后才可以回帖 登录 | 注册

本版积分规则

152

主题

453

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部