打印

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

[复制链接]
1520|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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

粉丝