找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1288|回复: 4
打印 上一主题 下一主题
收起左侧

红外遥控在单片机外部中0(下降沿触发)中接收四个字节数据的过程中会再次引发中断么

[复制链接]
回帖奖励 20 黑币 回复本帖可获得 2 黑币奖励! 每人限 1 次
跳转到指定楼层
楼主
ID:408519 发表于 2020-2-28 15:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
51单片机在做红外遥控的实验过程中,在外部中断0函数中接收四个字节的数据,(程序如下:),我的疑问是,在接收数据的过程中产生的下降沿,会再次引发外部中断0的中断么?从实验现象猜测来看是不会的,有点不理解?//外部中断0触发函数如下:下降沿触发
  1. void GetDateToIr() interrupt 0
  2. {
  3.         u8 i, j;
  4.         u8 Byte;
  5.         u16 time;
  6.         
  7.         //1.判断起始码低电平9ms
  8.         time = GetLowTime();
  9.         if( (time<8500) || (time>9500) )//8.5ms<time<9.5ms
  10.                 return ;        
  11.         //2.判断起始码高电平4.5ms
  12.         time = GetHighTime();
  13.         if( (time<4000) || (time>5000) )//4.0ms<time<5.0ms
  14.                 return ;
  15.                
  16.         //3.接收4Byte数据
  17.         for(i=0; i<4; i++)
  18.         {        
  19.                 for(j=0; j<8; j++)
  20.                 {
  21.                         time = GetLowTime();
  22.                         if( (time<340) || (time>780) )//低电平 340us<time<780us
  23.                                 return ;
  24.                         
  25.                         time = GetHighTime();
  26.                         if( (time>340) && (time<780) )//表明这是一个“0”
  27.                         {
  28.                                 Byte >>= 1;
  29.                         }else if( (time>1500) && (time<1900) )//1.5ms<time<1.9ms
  30.                         {
  31.                                 Byte >>= 1;
  32.                                 Byte |= 0x80;
  33.                         }else
  34.                                 return ;
  35.                 }
  36.                 IfredValue[i]=Byte;        
  37.         }
  38. }
复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:235200 发表于 2020-2-28 17:21 | 只看该作者
应该会触发,不过我在调试时,在进入中断后关闭了外部中断,等处理完后再打开外部中断的
回复

使用道具 举报

板凳
ID:401564 发表于 2020-2-28 17:26 | 只看该作者
外部中断0中断级别为最高级别,不会被其它中断打断
第一次接收到红外信号之后进入中断,函数没有执行完之前,中断是没有返回的,是一直停留在中断函数内部检测端口的电平而已,不会再次触发中断的
只有中断返回之后才会再次触发中断
回复

使用道具 举报

地板
ID:408519 发表于 2020-2-28 19:17 | 只看该作者
csmyldl 发表于 2020-2-28 17:21
应该会触发,不过我在调试时,在进入中断后关闭了外部中断,等处理完后再打开外部中断的

我也调试了一下,现象是,当在中断程序的时候,数据口变化的时候(即在接收数据的时候),外部中断0的标志位是会变化的,但是不会重新进入中断服务程序。
回复

使用道具 举报

5#
ID:408519 发表于 2020-2-28 19:19 | 只看该作者
Y_G_G 发表于 2020-2-28 17:26
外部中断0中断级别为最高级别,不会被其它中断打断
第一次接收到红外信号之后进入中断,函数没有执行完之 ...

明白了,谢谢你,我软件调试的时候确实是这样的,在接收数据的过程中,即使中断标志位置1了,并不会重新进入中断,而是继续执行
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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