红外遥控电子密码锁
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1绪论
1.1 课题背景及目的
电子技术的飞速发展,给古老的锁具生产带来了巨大的变革,现代的电子技术与机械技术相结合,产生了一大批如声控锁、磁控锁、密码锁、遥控锁,指纹锁等先进的锁具。
目前国内外密码锁系统的主要方向的发展是:接触式密码锁系统,非接触式密码锁系统,智能识别密码锁系统,但是他们都相应的存在着不同的缺点。
例如:接触式密码锁系统成本较低,体积小,卡片本身无须电源,但使用不太方便,而且有接触磨损。
相比之下,红外遥控密码锁系统的成本与接触式密码锁系统相当,而且可以进行近距离遥控,使用十分方便。
而且它已经与PC 机的数据库相结合,可以组成一套酒店房间的门禁管理系统。
由于红外遥控具有许多优点,例如红外线发射装置采用红外发光二极管遥控发射器易于小型化且价格低廉;采用数字信号编码和二次调制方式,不仅可以实现多路信息的控制,增加遥控功能,提高信号传输的抗干扰性,减少误动作,而且功率消耗低;红外线不会向室外泄露,不会产生信号串扰;反应速度快、传输效率高、工作稳定可靠等。
工业设备中,在高压、辐射、有毒气体、粉尘等环境下,采用红外线遥控不仅完全可靠而且能有效地隔离电气干扰。
所以红外线遥控是目前使用最广泛的一种通信和遥控手段。
在本设计中,红外遥控密码锁和PC 机、数据库相结合,能够实现适时的、强大的管理,使得整个红外遥控系统得到更好的完善。
1.2 国内外研究现状
目前大部分的锁采用的都是机械式的,其最大的缺点是利用简单工具就能很容易地把锁打开。
针对这种情况,我们设计了一种红外遥控密码锁,而一般设备都采用专用的遥控编码及解码集成电路,其制作简单、容易,但由于特定功能的限制,只适用于专用的电器产品,其应用范围受到限制。
而设计的红外遥控密码锁系统能提高门禁系统的可靠性和安全性,适应市场需要。
该系统具有普通电子密码锁功能的同时,还增加了遥控功能。
该系统具有较强的实际应用价值,所涉及的技术包括:红外载波数据传输技术、单片
机控制技术、红外遥控系统编码及译码技术、电路设计与演示板制作技术等。
1.3 课题研究方法
本设计基于STC89C52单片机系列,运用了两块单片机芯片,一片实现红外解码,一块用来按键控制,数码管显示以及数据存储,通过查找资料确定各个模块的功能及实现方法,先在软件上进行调试,再根据硬件修改调试软件,最后将各个模块合理组合在一起,达到预计的功能与目标。
1.4 本章小结
本章介绍了红外遥控密码锁技术的课题背景,红外技术在现代生活中的应用以及该课题的国内外研究现状,探讨与确定研究本课题的方法。
2 基本原理及方案的论证
2.1 红外通讯原理
红外遥控是单工的红外通信方式,本设计的红外遥控采用以通信方式为基础的红外遥控,而且本设计也使用了红外通信技术,故着重分析红外通信的基本原理。
红外通信是利用红外技术实现两点间的近距离保密通信和信息转发。
它一般由红外发射和接收系统两部分组成。
发射系统对一个红外辐射源进行调制后发射红外信号,而接收系统用光学装置和红外探测器进行接收,就构成红外通信系统。
红外线是波长在 750nm至1mm之间的电磁波[5],它的频率高于微波而低于可见光,是一种人的眼睛看不到的光线。
红外通信一般采用红外波段内的近红外线,波长在0.75um至 25um之间。
红外数据协会(IrDA)成立后,为了保证不同厂商的红外产品能够获得最佳的通信效果,红外通信协议将红外数据通信所采用的光波波长的范围限定在850 至 900nm之内。
红外通信的基本原理[6]是发送端将基带二进制信号调制为一系列的脉冲串信号(载波信号),通过红外发射管发射红外信号。
常用的有通过脉冲宽度来实现信号调制的脉宽调制(PWM)和通过脉冲串之间的时间间隔来实现信号调制的脉时调制(PPM)两种方法。
脉时调制(PPM)[7,8,9,10]是红外数据协会(IrDA)和国际电子电工委员会(IEEE)都推荐的调制方式,本设计采用脉时调制方法,即用两个脉冲串之间的时间间隔来表示二进制信息,数据比特的传送仿照不带奇偶校验的RS232 [8]通信,首先产生一个同步头,然后接着 8 位数据比特。
如图 2.1所示。
图 2.1 PPM 调制波形图
普通的红外遥控采用面向指令的帧结构,数据帧由同步码,地址码和指令码组成,指令码长度多为 8~16 个比特,传送多字节遥控协议时效率偏低,而增加指令码的长度不利于接收器同步,为此本设计选用一种面向字节的帧结构,采用类似于异步串行通信的帧结构,每帧由一个起始位(二进制数 0)、8 个数据位和 2 个停止位(二进制数 1)构成,如图 2.2 所示。
每帧传送 1 个字节的数据,帧与帧间隔大于 2ms,帧结构不含地址信息,寻址问题由高层协议解决[8]。
图 2.2 数据帧结构示意图
由于红外光存在反射,在全双工的方式下发送的信号也可能会被本身接收,因此,红外通信应采用异步半双工方式,即通信的某一方发送和接收是交替进行的。
2.2 89C52芯片介绍
89C52的引脚图如图2.3所示
图2.3 89C52芯片引脚图
主电源及时钟引脚--此类引脚包括电源引脚Vcc、Vss、时钟引脚XTAL1、XTAL2。
(1)Vcc(40脚):接+5V电源,为单片机芯片提供电能。
(2)Vss(20脚)接地。
(3)XTAL1(19脚)在单片机内部,它是一个反向放大器的输入端,该放大器构
了片内的振荡器,可提供单片机的时钟控制信号。
(4)XTAL2(18脚)在单片机内部,接至上述振荡器的反向输出端。
控制引脚—此类引脚包括RESET(即RSR/VPD)、ALE/PROG、PSEN、EA/VPP,可以提供控制信号,有些具有复用功能。
(1)RSR/ VPD(9脚):复位信号输入端,高电平有效,当振荡器运行时,在此引加上两个机器周期的高电平将使单片机复位(REST)。
复位后应使此引脚电平保持为不高于0.5V的低电平,以保证单片机正常工作。
掉电期间,此引脚可接上备用电源(VPD),以保持内部RAM中的数据不丢失。
当Vcc下降到低于规定值,而VPD在其规定的电压范围内(5±0.5V)时,VPD就向内部RAM提供备用电源。
(2)ALE/PROG(30脚):ALE为地址锁存允许信号。
当单片机访问外部存储器时,(地址锁存允许)输出脉冲的下降沿用于锁存16位地址的低8位。
即使不访问外部存储器,ALE端仍有周期性正脉冲输出,其频率为振荡器频率的1/6。
但是每当访问外部数据存储器时,在两个机器周期中ALE只出现一次,即丢失一个ALE脉冲。
ALE端可以驱动8个LSTTL负载。
(3)PSEN(29脚):程序存储器允许输出控制端。
此输出为单片内访问外部程序存储器的读选通信号。
在从外部程序存储器取指令(或取常数)期间,每个机器周期均PSEN 两次有效。
但在此期间,每当访问外部数据存储器时,这两次有效的PSEN信号将不会出现。
PSEN同样可以驱动8个LSTTL负载。
(4)EA/VPP(31脚):EA功能为内外程序存储器选择控制端。
当EA端保持高电平时单片机访问内部程序存储器,但在PC(程序计数器)值超过0FFFH时将自动转向执行外部程序存储器内的程序。
输入/输出引脚—此类引脚包括P0口、P1口、P2口和P3口。
(1)P0(P0.0~P0.7)是一个8位三态双向I/0口,在不访积压外部存储器,做通用I/0口使用,用于传送CPU的输入/输出数据,当访问外部存储器时,此口为地址总路线
低8位及数据总路线分时复用口,可带8个LSTTL负载。
(2)P1(P1.0~P2.7)是一个8位准双向I/O口(作为输入时,口锁存器置1),带有内部上拉电阻,可带4个LSTTL负载。
(3)P2(P2.0~P2.7)是一个8位准双向I/O口,与地址总路线高8位复用,可驱动4个LSTTL负载。
2.3 方案的比较及确定
本设计的重点在于遥控解码,遥控解码的方式有硬件解码与软件解码。
方案一:硬件解码。
硬件解码:在接受遥控的一边可以连接一个专用解码芯片,只要按键盘上的键值,它就能直接把这个键值解码出来并存储,当你调用这个键值的时候只要从里面去读取就行了,所以它的解码率高,读取显示简单,这是它的优点。
可是该芯片价格昂贵,而且只能解码对应的遥控器,兼容性差,成本昂贵,不适合用作市场量产。
方案二:软件解码。
软件解码:根据遥控器选择的芯片不同,其遥控码格式也有不同。
现在市场上主要有日本的NEC标准和飞利浦标准,通过软件的方式解码时解码的正确率就是一个很重要的指标了。
在单片机编程的时候是选择用执行效率高的汇编语言还是选用可读性编写容易的C语言呢?不可否认汇编的执行效率是C语言的几倍甚至几十倍,而且误码率低,可是如果选择汇编的话编写难度可想而知,可是如果用C语言编写的话误码率及实时性又会变得比较差。
综合以上考虑,如果我们能够在解码这部分用汇编,而显示及控制这部分用C语言编写的话,就能较好的完成我们预期的目标。
因此我选用了两块C52单片机芯片,一块负责红外解码,一块负责显示与控制。
事实证明,我的选择和预想中的一样,很好的解决了汇编与C语言难以共存的问题。
基于上述比较,我们选择了方案二,采用汇编与C语言共同的软件解码方式。
2.4本章小结
本章介绍了基于单片机红外遥控密码锁设计的两个重点--红外通讯基本原理与单片机芯片89C51的基础知识。
通过介绍实现他的关键技术提出了系统设计的方案--硬件解码方案和软件解码方案。
而后对两个方案的优缺点进行比较,最终确定了实现设计的方案--软件解码方案。
3模块功能介绍及实现
3.1 红外遥控技术
3.1.1 硬件介绍:
遥控器里面是一个键盘编码器,每个按键对应一个编码,在把编码调制到一个高频信号上,其目的是为了降低发射的功率损耗;再把调制好的信号送给红外发光管把信号发送出去。
接收过程恰好与此相反,首先由红外接收管收到微弱的信号,经放大后解解调(把高频载波去掉),再进行解码,就可得到遥控器发过来的数据。
如图3.1所示。
图3.1 红外遥控流程图
图3.1中遥控接收器部分的“光/电放大”和“解调”由一体化接收头完成,单片机要做的只是“解码”。
实验板上一体化接收头的数据输出线经过了 INT0 切换开关连接到单片机的 P32 脚(即 INT0),INT0 切换开关弹起时连通。
3.1.2 实现方法:
经遥控器发送的是串行数据,通过脉冲的占空比来区别‘0’和‘1’;以脉宽为 0.565ms,间隔 0.56ms,周期为 1.125ms 的组合表示二进制‘0’;以脉宽为0.565ms,间隔为 1.685ms,周期为 2.25ms 的组合表示二进制‘1’。
其波形如下图。
图3.2 遥控码的“0”和“1”
遥控器产生的遥控编码是连续的32位二进制码组,其中前16位为用户识别码,能区别不同的电器设备;后 16 位为 8 位操作码及其反码,最多可产生128 个不同的编码。
当遥控器一个键按下超过36ms,震荡器使芯片激活,将发射一组 108ms 的编码脉
冲,这 108ms 发射代码由一个起始码(9ms),一个结果码(4.5ms),低8位地址码(9ms~18ms),高 8位地址码(9ms~18ms),8 位数据码(9ms~18ms)及其反码(9ms~18ms)组成。
如果键按下超过 108ms 仍未松开,接下来发送的代码(连发码)就只由起始码(9ms)和结束码(4.5ms)组成。
解码关键在于如何识别‘0’和‘1’,‘0’和‘1’均以 0.56ms 的低电平开始,不同的是高电平的宽度不同,‘0’为0.56ms,‘1’为1.68ms,所以必须根据高电平的宽度区别‘0’和‘1’。
如果从 0.56ms 过后开始延时,0.56ms 后若读到低电平,说明该位为‘0’,反之为‘1’;为了可靠起见,延时必须比 0.56ms 长一些,但又不能超过 1.12ms,否则如果该位为‘0’,读到的已是下一位的高电平,因此取(1.12+0.56)/2=0.84ms比较可靠。
过程如图3.3所示。
图3.3 数据码的组成
3.2 4*4矩阵键盘
因为本设计用到的按键较多,所以本设计采用行列式键盘,同时也能减少所占用的I/O线的数目,节省资源。
图3.4行列式键盘原理电路图
每一条水平(行线)与垂直线(列线)的交叉处不相通,而是通过一个按键来连通,利用这种行列式矩阵结构只需要N条行线和M条列线,即可组成具有N×M个按键的键盘。
本设计发射部分采用4*3键盘,接收部分采用4*4键盘。
键盘扫描时,首先由I/O
口低四位输出高电平,高四位输出低电平,假若有键按下,那么在I/O口低四位即可读出低电平,接着延时消抖,再具体判断是何键按下。
判断键盘中有无键按下
将全部行线 X0-X3 置低电平然后检测列线的状态只要有一列的电平为低则表示键盘中有键被按下而且闭合的键位于低电平线与4根行线相交叉的 4个按键之中若所有列线均为高电平则表示键盘中无键按下
判断闭合键所在的位置。
在确认有键按下后即可进入确定具体闭合键的过程其方法是依次将行线置为低电平即在置某根行线为低电平时其它线为高电平当确定某根行线为低电平后再逐行检测各列线的电平状态若某列为低则该列线与置为低电平的行线交叉处的按键就是闭合的按键.
现将接收部分的键盘功能做一下说明。
如图,0至9号键为数字键,六位密码从中产生。
“确认”键,“更改”键,“取消”键和“MAS”键为功能按键,具有控制开锁,更改密码和取消相关操作等功能。
剩余的两个键在本设计中未用,可作为今后的功能扩展键使用。
3.3 I2C总线技术
3.3.1 I2C总线特点
I2C总线最主要的优点是其简单性和有效性。
由于接口直接在组件之上,因此I2C 总线占用的2C总线是由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据。
在CPU与被控IC串行EEPROM24C02 读写实验I2I2空间非常小,减少了电路板的空间和芯片管脚的数量,降低了互联成本。
总线的长度可高达25 英尺,并且能够以10Kbps 的最大传输速率支持40 个组件。
I2C总线的另一个优点是,它支持多(multimastering),其中任何能够进行发送和接收的设备都可以成为主总线。
一个主控能够控制信号的传输和时钟频率。
当然,在任何时间点上只能有一个主控。
I之间、IC与IC之间进行双向传送,最高传送速率100kbps。
各种被控制电路均并联在这条总线上,但就像电话机一样只有拨通各自的号码才能工作,所以每个电路和模块都有唯一的地址,在信息的传输过程中,I2C总线上并接的每一模块电路既是主控器(或被控器),又是发送器(或接收器),这取决于它所要完成的功能。
3.3.2 I2C通信原理
(1)数据传输:SDA线上的数据必须在时钟的高电平时期保持稳定,SDA线上的
电平状态I21 数据传输:SDA 线只有在时钟的低电平时期才能改变。
图3.5 SDA和SCL相互关系
(2)开始信号:SCL 为高电平时,SDA 由高电平向低电平跳变,开始传送数据。
(3)结束信号:SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据。
(4)应答信号:接收数据的IC 在接收到8bit 数据后,向发送数据的IC 发出低电平脉
(5)总线基本操作:I2C规程运用主/从双向通讯。
器件发送数据到总线上,则定义为发送冲,表示已收到数据。
CPU向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU接收到应答信号后,根据实际情况作出是否继续传递信号的判断。
若未收到应答信号,则判断为受控单元出现故障。
器,器件接收数据则定义为接收器。
主器件和从器件都可以工作于接收和发送状态。
总线必须由主器件(通常为微控制器)控制,主器件产生串行时钟(SCL)控制总线的传输方向,并产生起始和停止条件。
SDA线上的数据状态仅在SCL为低电平的期间才能改变,SCL为高电平的期间,SDA状态的改变被用来表示起始和停止条件。
参见图3.6
图3.6 SCL与SDA波形关系
3.3.3 硬件介绍:
24C04是CMOS 2048位串行EEPROM,内部组织成256×8位。
16 字节页面写。
与MCS-51单片机接口如图40所示。
由于SDA是漏极开路输出,且可以与任何数目的漏极开路或集电极开路输出“线或”(wire-Ored)连接。
上拉电阻的选择可参考24C02 的数据手册(一般为10K)。
下面是通过I2C接口对24C04 进行单字节写操作的例程。
图3.7 24C02电路图
3.4 显示模块
3.4.1 LCD液晶显示
LCD1602 可显示两行英文字符,并且内带ASCII 字符库。
LCD1602 模块内部可以完成显示扫描,单片机只要向LCD1602 发送命令和显示内容的ASCII 码。
表3-1 引脚功能说明
引
符号功能说明
脚
1 VSS 一般接地
2 VDD 接电源(+5V)
3 V0 液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高
(对比度过高时会产生“鬼影”,可以通过一个10K的电位器调整对比度)。
4 RS RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
5 R/W R/W为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。
6 E E(或EN)端为使能(enable)端,下降沿使能。
7 DB0 底4位三态、双向数据总线0位(最低位)
8 DB1 底4位三态、双向数据总线1位
9 DB2 底4位三态、双向数据总线2位
10 DB3 底4位三态、双向数据总线3位
11 DB4 高4位三态、双向数据总线4位
12 DB5 高4位三态、双向数据总线5位
13 DB6 高4位三态、双向数据总线6位
14 DB7 高4位三态、双向数据总线7位(最高位)(也是busy flag)
15 BLA 背光电源正极
16 BLK 背光电源负极
图3.8 LCD1602引脚图
RS R/W 操作说明
0 0 写入指令寄存器(清除屏等)
0 1 读busy flag(DB7),以及读取位址计数器(DB0~DB6)值
1 0 写入数据寄存器(显示各字型等)
1 1 从数据寄存器读取数据
1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”。
因为1602识别的是ASCII码,试验可以用ASCII码直接赋值,在单片机编程中还可以用字符型常量或变量赋值,如'A’。
图3.9是1602的16进制ASCII码值:
读的时候,先读上面那列,再读左边那行,如:感叹号!的ASCII为0x21,字母B的ASCII为0x42(前面加0x表示十六进制)。
图3.9 1602的16进制ASCII码值
表3-3 显示地址
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
00 H 01
H
02
H
03
H
04
H
05
H
06
H
07
H
08
H
09
H
0A
H
0B
H
0C
H
0D
H
0E
H
0F
H
40 H 41
H
42
H
43
H
44
H
45
H
46
H
47
H
48
H
49
H
4A
H
4B
H
4C
H
4D
H
4E
H
4F
H
指令集
1602通过D0~D7的8位数据端传输数据和指令。
显示模式设置: (初始化)
0011 0000 [0x38] 设置16×2显示,5×7点阵,8位数据接口;
显示开关及光标设置: (初始化)
0000 1DCB D显示(1有效)、C光标显示(1有效)、B光标闪烁(1有效) 0000 01NS N=1(读或写一个字符后地址指针加1 &光标加1),
N=0(读或写一个字符后地址指针减1 &光标减1),
S=1 且N=1 (当写一个字符后,整屏显示左移)
s=0 当写一个字符后,整屏显示不移动
数据指针设置:
数据首地址为80H,所以数据地址为80H+地址码(0-27H,40-67H)
其他设置:
01H(显示清屏,数据指针=0,所有显示=0);02H(显示回车,数据指针=0)。
通常推荐的初始化过程:
延时15ms
写指令38H
延时5ms
写指令38H
延时5ms
写指令38H
延时5ms
(以上都不检测忙信号)
(以下都要检测忙信号)
写指令38H
写指令08H 关闭显示
写指令01H 显示清屏
写指令06H 光标移动设置
写指令0cH 显示开及光标设置
3.4.2 数码管显示
数码管显示有动态扫描显示与静态显示。
其中动态扫描显示是最常用的显示方法。
在本次设计中,通过动态扫描方式显示密码及其状态。
由于人类的眼睛有视觉余留的特性,对快速变化的图象分辨不清,利用这点我们
制一数码管处于点亮的时间为10ms,接着关闭它,锁存数据的显示码,选通这位,控制它点亮10ms,以此下去直到第六个数码管也点亮10ms,在从第一位开始重复上面的步骤。
图3.10 数码管显示流程图
3.5 本章小结
本章具体介绍了红外通讯模块,键盘模块,密码存储模块以及显示模块的基本知识与其实现的方法。
红外通讯模块解决遥控解码问题,通过弄清楚红外的编码格式,就能通过软件解码方式读取遥控发射的数据。
键盘部分介绍了4*4矩阵键盘的原理与实现。
密码存储模块运用了I2C总线技术,详细介绍了I2C总线技术的优缺点。
显示部分详细说明了LCD1602液晶显示的基本原理与运用操作,而且还提到了数码管的动态扫描显示原理。
4 总结
本设计利用两块89C52单片机芯片完成了基于红外遥控密码锁的设计,实现了红外遥控和键盘双输入控制,密码储存部分采用24C02芯片实现了断电保护问题,显示部分实现了数码管六位动态显示状态功能,并扩展到了LCD1602液晶屏上显示,在报警部分设计了蜂鸣器在密码输入错误三次蜂鸣器报警的功能。
它的创新点在于用了一块单独的89C52芯片进行红外解码,而且解码部分软件设计用的是汇编语言,而显示键盘部分用的是C语言,通过两块89C52芯片使得这两种语言很好的组合在一起,使得他们既能够很好的完成各自的任务也能很好的兼容在一起完成整个系统的任务。
然而系统还是存在如下一些不足:没有考虑过多外部因素对系统的影响,比如密码丢失,误操作对系统的影响。
报警与提示功能做得不够完善,遥控的有效距离没有进行系统的论证。
这些因素有待进一步完善。
参考文献
[1] 林伸茂.8051单片机彻底研究基础篇[M].北京:人民邮电出版社,2003:24-153.
[2] 赵广林.Protel 99SE电路设计与制作[M].北京:电子工业出版社,2005:15-342.
[3] 冯耀辉等.PowerPCB 5.0入门与提高[M].北京:人民邮电出版社,2004:17-48.
[4] 康华光等.电子技术基础第2版[M].北京:高等教育出版社,2004:10-156.
[5] 胡凯,张颖超.生化分析仪的设计及与PC机的通信[J].微计算机信息,2006:
208-209.
[6] 马鸿文.基于AT89C52单片机的自动存取柜的设计与实现[M].微计算机信
息,2006:101-103.
[7] 曹巧媛.单片机原理及应用[M].北京:电子工业出版社,2002.
[8] 牛翌光.单片机原理及接口技术[M].北京:电子工业出版社,2008:32-79.
[9] 杨路明.C语言程序设计[M].北京:北京邮电大学出版社,2005:52-268.
[10] 张文峥,李先亮,张其善.IrDA 红外通信在导航仪中的应用[J]. 2000,10.
[11] 邱玉春,李文俊.单片机系统中的红外通信接口[J].2000:56-163.
[12] 黄耀军,周云,严国萍.计算机红外无线互连的设计几实现[J].2000,2.
[13] 麦山,皮佑国.基于单片机的协议红外遥控系统[J].1998,5.
[14]Jimemez Petal. Improved PPM schemes for infrared wireless LAN [J].Electronics
Lettrs,1996,10.
[15] Serial Infrared Link Access Protocol(IrLAP),Version 1.1. June 16,1996,IBM
Corporation , Hewlett-Packard Company, Apple Computer, Inc.,Counterpoint Systems Foundry, Inc.
附录源程序
ORG 0000H
MAIN:
JNB P3.2,IR ;遥控扫描
LJMP MAIN ;主循环
IR: ;解码开始
MOV R6,#10
IR_SB:
;CPL P1.0
;LCALL DELAY882;延时882微秒
MOV R7,#202
DELAY882_A:;882us延时
NOP
NOP
DJNZ R7,DELAY882_A
JB P3.2,IR_ERROR;数据错误退出解码
DJNZ R6,IR_SB;重复10次检测
;识别连发码
JNB P3.2,$;等待高电平避开9MS低电平引导脉冲
;LCALL DELAY2400
MOV R7,#245
DELAY2400_A:
NOP
NOP
NOP
NOP
NOP
NOP
NOP
DJNZ R7,DELAY2400_A
JNB P3.2,IR_RP;这里为低电平,认为是连发码
;LCALL DELAY2400 ;延时4.74MS避开4.5MS的结果码 MOV R7,#245
DELAY2400_B:
NOP
NOP
NOP
NOP
NOP
NOP
NOP
DJNZ R7,DELAY2400_B
;读取32位数据码
MOV R1,#1AH;存放数据的起始地址
MOV R2,#4
IR_4BYTE:
MOV R3,#8
IR_8BIT:
JNB P3.2,$;等待地址码第一位的高电平信号
;LCALL DELAY882;高电平来后开始延时882uS
MOV R7,#202
DELAY882_B:;882us延时
NOP
NOP
DJNZ R7,DELAY882_B
MOV C,P3.2
JNC IR_8BIT_0;延时后为为低电平则跳到IR_8BIT_0
;LCALL DELAY1000
MOV R7,#229
DELAY1000_A:
NOP
NOP
DJNZ R7,DELAY1000_A
IR_8BIT_0:
MOV A,@R1;将R1中的地址给累加器A
RRC A;将C移入A的最低位
MOV @R1,A;保存A中的值到RAM中
DJNZ R3,IR_8BIT;接收地址码的高8位
INC R1;下一地址
DJNZ R2,IR_4BYTE;接收完成8位数据,8位数据码和16位地址码 LJMP IR_GOTO ;解码结束
IR_RP:
LJMP IR_GOTO
IR_ERROR:
LJMP MAIN
IR_GOTO: ;执行部分
MOV A,1CH
CPL A
CJNE A,1DH,IR_ERROR
MOV P1,1DH ;接收到的数据显示到P1口 MOV 1AH,#00H ;接收区清0
MOV 1BH,#00H
MOV 1CH,#00H
MOV 1DH,#00H
DELAY2400_1:
NOP
NOP
NOP
NOP
NOP
NOP
NOP
DJNZ R7,DELAY2400_1
DELAY2400_2:
NOP
NOP
NOP
NOP
NOP
NOP
NOP
DJNZ R7,DELAY2400_2
DELAY2400_3:
NOP
NOP
NOP
NOP
NOP
NOP
NOP
DJNZ R7,DELAY2400_3
DELAY2400_4:
NOP。