江科大51单片机笔记【17】红外遥控(外部中断)
写在前言
此为博主自学江科大51单片机(B站)的笔记,方便后续重温知识
在后面的章节中,为了防止篇幅过长和易于查找,我把一个小节分成两部分来发,上章节主要是关于本节课的硬件介绍、电路图、原理图等理论知识,主要是为下章节的代码部分打基础。
我的单片机是24年12月在tb普中买的,型号是STC89C52,在原视频中引脚或接口不对应的我都会改正,保证在我的机子上能运行才发上来的,还有一些文字部分是我的理解,并非照搬,所以可能有理解不到位的现象。
如有误或交流,敬请指点提问
红外遥控有一个小拨片把电池隔开,用的时候要拿出来
课程目标:
1.LCD显示遥控的地址码,遥控码和+-控制自定义数字
2.红外遥控电机调速
课程总览:
红外遥控介绍,硬件电路,发送和接收,NEC编码,遥控器键码,51单片机的外部中断,寄存器
一、红外遥控简介
- 红外遥控是利用红外光进行通信的设备,由红外LED将调制后的信号发出,由专用的红外接收头进行解调输出
- 通信方式:单工、异步
- 红外LED波长:940nm(人眼看不到)还有一种850nm可以看到
- 通信协议标准:NEC标准
二、硬件电路
我们的开发板上并没有发送部分,只能通过遥控器发送
我们主要是做接收部分
首先是发送部分,上面是两个串联的三极管开关,下面是一个红外LED和一个限流电阻,而两个三极管分别接入38KHz的方波以及我们给的波形,这个电路的功能是当高电平时灭,当低电平时红外以38KHz的频率亮,目的是抗干扰
第二个电路简单,如果给低电平就亮,高电平就灭,如果要输出波形就需要程序来实现,并且IO口要支持输出波形
接收部分,是一个一体化红外接收头,含有滤波抗干扰等功能,我们的代码就是解码这个波形,又因为按键按下的判断太慢了,不能像之前一样用if循环扫描按键,所以我们就把输出OUT放到外部中断上,这样实时性就很高
三、基本发送与接收
- 空闲状态:红外LED不亮,接收头输出高电平
- 发送低电平:红外LED以38KHz频率闪烁发光,接收头输出低电平
- 发送高电平:红外LED不亮,接收头输出高电平
虽然空闲状态跟发送高电平看起来是一样的,但还是可以区分的,红外发送的时候是以第一个下降沿开始,往后都是发送来的波形,此时接收到高电平就是发送高电平状态,等波形结束,再接收到高电平就是空闲状态
顺带一提,这个38KHz是在实际的底层通信时出现的,但在编码时不会涉及,因为已经在底层功能给调制解调了
四、NEC编码
此时又需要一个标准,怎么表示高低电平,以及怎么组成0和1,这就是NEC编码的作用
这是时序波形,这个波形就是遥控器按键按下时接收头OUT输出的波形,
首先是高电平,然后是Start信号
接着是DATA数据区,data的格式如下,地址码+地址码反码(验证)+命令+命令反码
在这里不是平时那样高电平表示1,低电平表示0,而是像下面这样,高电平的时间比低电平的时间稍长一点
然后就是重复的波形,这个是连续按键的功能,如果你一直按着按键不动,就隔110ms就发送一个Repeat的波形
下面是示波器实际采样得到的图
五、遥控器键码
六、51单片机的外部中断
- STC89C52只有4个外部中断,但实际上我们这给开发板只引出了两个外部中断,即0和1
- 有两种触发方式:下降沿触发和低电平触发
- 中断号:
七、外部中断寄存器
之前定时器也讲过这部分
我们在这里只讲外部中断0和1,直接接到P32和P33引脚,然后是触发方式ITO和IT1,当=1时是下降沿触发,=0是低电平触发,IE是中断标志位,EX0是使能中断,EA是所有中断,PX可以选优先级