摘要:
以HSOO38作为红外接收头,介绍了红外遥控信号的单片机软件编码解码方法,包括编码、调制和解码的原理,以及硬件电路和程序实现。经实验测试,该方法能使红外遥控信号可靠发送和接收,并执行相应的功能。
关键词:红外遥控;单片机;编码解码
Abstract: This paper introduces an encoding and decoding method for infrsred remote—control
signal with software of microchip computer,infrared signal is received hy Hs0038, including principle of encoding and modulation and decoding, and hardware circuit, and program. Its experiment indicates that the method can help to reliable transmission of infrared to remote—control signal.
Key words: infrared remote—control; microchip computer; encoding and decoding
1
1.绪论
1.1 引言
红外遥控是一种无线、非接触控制技术、具有抗干扰能力强,信息传输可靠,功耗低,成本低,易于实现等显著优点,被诸多电子设备特别是家用电器广泛采用,并越来越多的应用到计算机系统中。
1.2 本设计所要做的工作
该设计由硬件和软件共同组成。首先是硬件部分,该系统的最终实现选用的单片处理器(S52)、键盘、LED显示、单片机的串行接口电路。因此应充分了解单片机,包括存储空间,并行口,串行口,串行通信,定时器等,掌握非编码键盘和LED的动态显示,并要在充分满足系统可实现的功能的基础上考虑到器件的价格,制版的复杂度和软件的实现难度。其次是软件部分,该系统的软件环境是S52,因此应了解S52的编程方法,常用的一些编程技巧,调试运行程序,尽量使程序简洁,易懂,便于移植,编译效率高,健壮性好。为了用计算机解决某一具体问题或实现某一特定的功能,总要先对问题或功能要求进行分析,确定相应的算法和步骤,然后选择相应的指令,并按一定的顺序排列起来,这就构成了解决某一问题或实现某一特定功能的应用程序。编制好的程序通过仿真器进行调试,将调试成功的程序通过T写入器写入到芯片ATS52中,最后把芯片ATS52插入连接完毕的硬件系统中投入实际使用。
2.系统总体设计方案
2.1 系统方案选择
(1)红外编码和发射部分
方案一:专用芯片解决方案。
专用红外编码芯片种类很多,如日本三菱公司的M50426AP、PT2262、BL9148、zD6631等,此类芯片一般集载波振荡、编码、发射于一体,具有很强的抗干扰能力,外围电路简单,使用很方便,而且价格也很低。通用的遥控器上大多使用此类专用芯片。但是,专用芯片也有致命的弱点:专用芯片的应用灵活性很差,其内部编码已经固定,无法修改内部数据,不适用于经常需要改动传送数据的场合;专用芯片几乎都是面向指令型的编码遥控方式,传输效率较低;大多数的专用芯片的内部编码及技术数据已经公诸于世,会产生安全漏洞。
方案二:微处理器单独解决方案。电路如图(a)所示。 该方案使用微处理器的I/O口直接产生38KHZ已调波,驱动红外发光二极管,发射红外数据。38KHZ方波由CPU的定时器产生或由软件编程产生。红外编码工作由软件完成,因此,红外编码方案可以任意设计,外部只需配接非常简单的硬件电路,大大降低了了电路的复杂性,有利于降低成本,减小遥控器的体积。由于使用软件编码方案,占用了CPU的一定的时间,CPU处理速度受到一定的影响,但是,对于遥控器这一类功能比较单一的系统来说,处理任务比较少,根本影响不了CPU的处理效率,仅仅是增加了软件编程的负担。
经比较,方案二既可满足题目要求,电路又非常简单,硬件成本又很低,仅仅是增加了软件的编程负担,使得红外编码非常灵活,所以采用该方案。 (2)红外接收和解码部分
方案一:分立元件解决方案,电路如图2-1所示。
图中RD1为红外接收管;R3、R4,VT1构成反相放大器;VT2、R5、C2构成滤波器,滤掉38KHZ的高频载波;R6、R7、VT3构成整形电路,将滤波后的波形处理为较好的方波;Cl、C3为耦合电容;R2为限流电阻,当接收到较强的信号是保护VT1。该方案最大的优点是供电电压比较低,可用两节电池3V电压供电。但是,由于电路使用分立元件构成,其稳定性和抗干扰能力不高,影响红外数据传输的准确性。
2
图2-1低电压红外接收电路
方案二:集成电路解决方案,电路如图(b)所示。
该方案使用一体化红外接收器,集红外接收和放大于一体,不需任何外接元件,就能完成从红外接收到输出与TTL电平兼容的所有工作,而体积和普通的塑封三极管大小一样。
经比较,方案二既可满足题目要求,电路又非常简单,硬件成本又很低,通过软件编程,使得红外编码非常灵活,所以采用该方案。 (3)器件选择:
采用12MHZ的晶振;红外接收端采用价格便宜,性能可靠的一体化红外接收头:HSOO38; 采用S52进行控制;控制方面采用小灯进行模拟。
2.2 系统构成框图
单片机 红外发射电路 一体化红外接收头 单片机 编码调制 发送 接收解调 解码
2.3系统工作原理
红外遥控有发送和接收两个组成部分:
发送端采用单片机将待发送的二进制信号编码调制为一系列的脉冲串信号,通过红外发射管发射红外信号。红外接收端普遍采用价格便宜,性能可靠的一体化红外接收头(如HSOO38,它接收红外信号频率为38KHz,周期约26US)接收红外信号,它同时对信号进行放大、检波、整形,得到相应电平的编码信号,再送给单片机,经单片机解码并执行,去控制相关对象。 (1)二进制信号的编码
本设计采用不同的脉宽宽度来实现二进制信号的编码,可由发送单片机来完成。用图2-2(a)表示二制信号中的高电平‘1’,其特征是脉冲中低电平的宽度等于0.26ms,相当于10个26us的宽度,高电平的宽度等于0.52ms,相当于20个26us的宽度;用图2-2(b)表示二进制信号中的低电平‘0’,其特征是脉冲中高电平的宽度等于0.26mS,而低电平的宽度是高电平的二倍,等于0.52ms,相当于20个26us的宽度。上述10个和20个脉冲宽度还可适当调整,以适应不同数据传输速度的需要。
图2-2(a) ‘1’的表示
(2)二进制信号的调制
3
图2-2(b) ‘0’的表示
二进制信号的调制仍由发送单片机来完成,它把编码后的二进制信号调制成频率为38KHz的间断脉冲串,相当于用二进制信号的编码乘以频率为38KHz的脉冲信号得到的间断脉冲串,即是调制后用于红外发射二极管发送的信号。如图2-3所示,A是二进制信号的编码波形,B是频率为38KHz(周期为26uS)的连续脉冲串,c是经调制后的间断脉冲串(相当于C=A*B),用于红外发射二极管发送的波形。图2-3中,待发送的二进制数据为10。
A发送前的二进制数据0、1编码 20个脉冲 10个脉冲 T=26us B、脉冲调制 单个脉冲 C=A*B、调制后的二进制信号(发送) 图2-3、二进制信号的调制
(3)二进制信号的解调
二进制信号的解调由一体化红外接收头HSOO38来完成,它把收到的红外信号(图2-4中波形D,也是图2-3中波形(C)经内部处理并解调复原,输出图2-4中波形E(正好是对图2-3中波形A的取反),HS0038的解调可理解为:在输入有脉冲串时,输出端输出低电平,否则输出高电平。二进制信号的解码由接收单片机来完成的它把红外接收头送来的二进制编码波形通过解码,还原出发送端发送的数据。如图2-4,把波形E解码后还原成数据信息101。
D、红外接收头接收的波形(输入) E、解调后的输出波形 图2-4、HS0038的输入输出波形
(4)基于字节传输的红外遥控数据格式
在发送字节的开始先通过单片机发送20个脉冲宽度(每个脉冲周期26uS)的高电平作为传输开始,接着发送8位数据(字节高位在前,低位在后),最后发送10个脉冲宽度的低电平作为传输结束,如图2-5所示。
4
传输开始 8位数据 传输结束 20个脉冲 高位在前,低位在后 10个脉冲 图2-5 基于字节传输的红外遥控数据格式
3.硬件电路设计
3.1 主要器件介绍 3.1.1 芯片ATS52
(1)主要性能:
与MCS-51单片机产品兼容、8K字节在系统可编程Flash存储器、1000次擦写周期、全静态操作:0Hz~33Hz、三级加密程序存储器、32个可编程I/O口线、三个16位定时器/计数器、八个中断源、全双工UART串行通道、低功耗空闲和掉电模式、掉电后中断可唤醒、看门狗定时器、双数据指针、掉电标识符。 (2)功能特性描述:
Ats52是一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程Flash 存储器。使用Atmel 公司高密度非 易失性存储器技术制造,与工业80C51 产品指令和引脚完 全兼容。片上Flash允许程序存储器在系统可编程,亦适于 常规编程器。在单芯片上,拥有灵巧的8 位CPU 和在系统 可编程Flash,使得ATS52为众多嵌入式控制应用系统提 供高灵活、超有效的解决方案。 ATS52具有以下标准功能: 8k字节Flash,256字节RAM, 32 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位 定时器/计数器,一个6向量2级中断结构,全双工串行口, 片内晶振及时钟电路。另外,ATS52 可降至0Hz 静态逻 辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工 作。掉电保护方式下,RAM内容被保存,振荡器被冻结, 单片机一切工作停止,直到下一个中断或硬件复位为止。8 位微控制器 8K 字节在系统可编程 Flash ATS52 (3)管脚说明:
P0 口:P0口是一个8位漏极开路的双向I/O口。作为输出口,每位能驱动8个TTL逻辑电平。对P0端口写“1”时,引脚用作高阻抗输入。 当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。在这种模式下, P0具有内部上拉电阻。
在flash编程时,P0口也用来接收指令字节;在程序校验时,输出指令字节。程序校验时,需要外部上拉电阻。
P1 口:P1 口是一个具有内部上拉电阻的8 位双向I/O 口,p1 输出缓冲器能驱动4 个 TTL 逻辑电平。对P1 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。此外,P1.0和P1.2分别作定时器/计数器2的外部计数输入(P1.0/T2)和时器/计数器2 的触发输入(P1.1/T2EX),具体如下所示。 在flash编程和校验时,P1口接收低8位地址字节。 引脚号第二功能
P1.0 T2(定时器/计数器T2的外部计数输入),时钟输出
P1.1 T2EX(定时器/计数器T2的捕捉/重载触发信号和方向控制) P1.5 MOSI(在系统编程用)
5
P1.6 MISO(在系统编程用) P1.7 SCK(在系统编程用)
P2 口:P2 口是一个具有内部上拉电阻的8 位双向I/O 口,P2 输出缓冲器能驱动4 个TTL 逻辑电平。对P2 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。在访问外部程序存储器或用16位地址读取外部数据存储器(例如执行MOVX @DPTR)时,P2 口送出高八位地址。在这种应用中,P2 口使用很强的内部上拉发送1。在使用 8位地址(如MOVX @RI)访问外部数据存储器时,P2口输出P2锁存器的内容。 在flash编程和校验时,P2口也接收高8位地址字节和一些控制信号。
P3 口:P3 口是一个具有内部上拉电阻的8 位双向I/O 口,p2 输出缓冲器能驱动4 个TTL 逻辑电平。对P3 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。P3口亦作为ATS52特殊功能(第二功能)使用。 在flash编程和校验时,P3口也接收一些控制信号。 (4)振荡器特性:
XTAL1和XTAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。 (5)时钟电路
时钟电路是计算机的心脏,它控制着计算机的工作节奏。MCS-51单片机允许的时钟频率是因型号而异的典型值为12MHZ
MCS-51内部都有一个反相放大器,XTAL1、XTAL2分别为反相放大器输入和输出端,外接定时反馈元件以后就组成振荡器,产生时钟送至单片机内部的各个部件。ATS52是属于CMOS8位微处理器,它的时钟电路在结构上有别于NMOS型的单片机。
CMOS型单片机内部(如ATS52)有一个可控的负反馈反相放大器,外接晶振(或陶瓷谐振器)和电容组成振荡器,图3-1为CMOS型单片机时钟电路框图。振荡器工作受/PD端控制,由软件置“1”PD(即特殊功能寄存器PCON.1)使/PD=0,振荡器停止工作,整个单片机也就停止工作,以达到节电目的。清“0”PD,使振荡器工作产生时钟,单片机便正常运行。图中SYS为晶振或陶瓷谐振器,振荡器产生的时钟频率主要由SYS参数确定(晶振上标明的频率)。电容C1和C2的作用有两个:其一是使振荡器起振,其二是对振荡器的频率f起微调作用(C1、C2大,f变小),其典型值为30pF。
图3-1 CMOS型单片机时钟电路框图
(6)复位电路
计算机在启动运行时都需要复位,使处理器CPU和系统中的其它部件都处于一个确定的初始状态,并从这个状态开始工作。
MCS-51单片机有一个复位引脚RST,它是史密特触发输入(对于CHMOS单片机,RST引脚的内部有一个
6
拉低电阻),当振荡器起振后,该引脚上出现2个机器周期(即24个时钟周期)以上的高电平,使器件复位,只要RST保持高电平,MCS-51保持复位状态。此时ALE、PSEN、P0、P1、P2、P3接口都输出高电平。RST变为低电平后,退出复位,CPU从初始状态开始工作。
本设计采用的复位方式是自动复位方式。对于MOS(ATS52)单片机只要接一个电容至VCC即可(见图3-2)。在加电瞬间,电容通过电阻充电,就在RST端出现一定时间的高电平,只要高电平时间足够长,就可以使MCS-51有效的复位。RST端在加电时应保持的高电平时间包括VCC的上升时间和振荡器起振的时间,Vss上升时间若为10ms,振荡器起振的时间和频率有关。10MHZ时约为1ms,1MHZ时约为10ms,所以一般为了可靠的复位,RST在上电进应保持20ms以上的高电平。RC时间常数越大,上电进RST端保持高电平的时间越长。
若复位电路失效,加电后CPU从一个随机的状态开始工作,系统就不能正常运转。
图3-2
3.1.2 集成电路74 LS21
74LS21是由四输入与门构成,74LS21集成电路的引脚分布图如图3-3所示
1A Vcc 1B 2D NC 2C 1C NC 1D 2B 1Y 2A 接地 2Y
图3-3 74LS21集成电路的引脚分布图
3.1.3接收器HS0038
一体化红外接收头HSOO38的外部结构如图3-4所示,1脚GND接电源地,2脚VCC接十SV,3脚OUT为数据输出端( TTL电平,反相输出),可直接与单片机相联。
图3-4 HS0038的外观及引脚
7
3.2主要电路设计 (1)发射电路原理图如图3-5所示: SE3039013211KVCCp1.01KVCCC3RST22uf1KC130PFC230PF12.000MHZ123456710111213141516171819GNDATS524039383736353433323130292827262524232221VCCVCCP2.7S1SW-PBP2.3S5VCCP2.2P2.7P2.6P2.5P2.4P2.3P2.2P2.1P2.0S9SW-PBP2.1S13SW-PBP2.0S14SW-PBS15SW-PBS16SW-PBS10SW-PBS11SW-PBS12SW-PBSW-PBS6SW-PBS7SW-PBS8SW-PBS2SW-PBP2.6S3SW-PBP2.5S4SW-PBP2.41245AINT1674LS21VCC10K10K10K10KP2.0P2.1P2.2P2.3P2.4P2.5P2.6R330R330R330R330R330R330R330P2.7R330DLEDDLEDDLEDDLEDDLEDDLEDDLEDDLEDVCCTitle 图3-5 发射电路原理图 (2)接收电路原理图如图3-6所示: SizeBDate:File:Number2008-4-27F:\\222222222222222222\\..\\P2345 8
345VCCDLEDDLEDDLEDDLEDDLEDDLEDDLEDDLED3C10.1UF321HS0038*1KVCCp1.0123456710111213141516171819GNDATS524R330R330R330R330R3305R330R330R330P0.1P0.6P0.4P0.3VCCC2RST22ufC?1KC330pFC412MHZ4039383736353433323130292827262524232221VCCVCCVCCP2.7P2.6P2.5P2.4P2.3P2.2P2.1P2.0P0.7P0.5P0.2P0.02P2.0P2.1P2.2P2.3P2.4P2.6P2.7P2.5130pFR330R330R330R330R330R330R330R330DLEDDLEDDLEDDLEDDLEDDLEDDLEDDLEDVCC 图3-6接收电路原理图 各个基本电路图的设计 (1)发射接收电路如图3-7所示: SE303C10.1UF321HS0038*1KVCCp1.0123456710111213141516171819GNDATS524039383736353433323130292827262524232221VCCVCC9013211Kp1.01KVCCVCCVCCRSTVCCP2.7P2.6P2.5P2.4P2.34P2.2P2.1P2.0RST3123456710111213141516171819GNDATS524039383736353433323130292827262524232221TitleSizeP2.7P2.6BP2.5Date:P2.4File:P2.35P2.2P2.1P2.0Number2008-4-27F:\\222222222222222222\\..\\Bac Title图3-7(a)接收电路 图3-7(b) 发射电路 9 SizeBDate:File:Number2008-4-28Sheet1.SchDocSheet of Drawn By:(2)键盘扫描: 采用4*4键盘,键盘扫描采用低电平扫描,中断定时扫描方式。电路图如3-8所示,其公共端连接VCC,初始时,令P2=F0H,无论哪个按键被按下,都将产生中断,开启定时器10ms,扫描键盘。开始进行扫描时,P2.0—P2.3点均保持高电平。P2.4—P2.7只能有一个为低电平。程序流程图如图4-1所示。 12P2.7S1SW-PBP2.3S5SW-PBP2.2S9SW-PBP2.1S13SW-PBP2.010K3AINT16P2.6S2SW-PBS6SW-PBS10SW-PBS14SW-PBS3SW-PBS7SW-PBS11SW-PBS15SW-PBP2.5S4SW-PBS8SW-PBS12SW-PBS16SW-PBP2.44574LS21VCC10K10K10K 图3-8 键盘扫描电路 (3)控制电路: 采用小灯的亮灭来模拟实际应用中的电路,电路如图3-9所示。 VCCDRLEDDRLEDDRLEDDRLEDDRLEDDRLEDD330RLEDDRLED330P2.7330P2.6LEDDRLED330P2.5LEDD330P2.4LEDDR330R330P0.6SizeP0.5330P2.3LEDDR330P0.4330P2.2LEDDR330P0.3330P2.1LEDDR330P0.2330P2.0LEDDR330P0.1VCCDR330P0.04TitleNumberBP0.7Date:File:2008-4-28F:\\22222222222222222图3-9 小灯控制电路 45 10 4.软件设计
4.1程序流程图
初始化 输出扫描码 yes防抖 第一行按键 yes取出键值送入23H yesCLR P1.7 yes结束 第四行按键 第三行按键 第二行按键 下一行 no超过四行? yes
图4-1键盘扫描
11
10ms到了 RETI 键盘扫描 图4-2、定时中断扫描
开始 初始化 noP1.7=1? yes数据‘1’ yes‘1’编码 no ‘0’编码 发送下一位 no 8位结束 yesCLRP1.7 图4-3发送流程图
12
开始 初始化 接收 数据‘1’ no ‘1’解码 yes‘0’解码 接收下一位 no 8位结束 yes取值 数据判别 控制 图4-4、接收流程图
5.设计结果
经过测验,红外遥控信号的发送和接收没有出现传输误码,发光二极管可以准确地显示发射信号,可靠使用,在编码解码方面降低了硬件成本。若在数据传输协议中,加上地址帧(设备号识别)和校验帧,该方法在计算机系统中将有更广泛的应用。
13
6.论文小结
在本次设计中,遇到了不少问题,首先键盘始终到1,2,3,4四个键,我先检查硬件,排除硬件 原因,其次对软件进行分析,发现未对按键设置扫描码初始值。其次是数据发送不稳定,我在51旁接上滤波电容,还有尽量减少外围元件的干扰;对编码进行完善,使数据接收更稳定。经过本次设计基本掌握红外发射和接收传感器的使用,信号的简单编码和解码;基本懂得用软件来实现键盘的扫描,数据发送接收。
致谢辞
在论文完成之际,谨向关心我、支持我的师长、朋友和亲人表示最衷心的感谢。首先要感谢我尊敬的指导老师麻莉萍老师,本论文的工作得到了麻老师悉心的指导和启发,从论文的选题和具体实现都给予极大的帮助。麻老师平易近人,我非常感谢麻老师。
本设计的完成,当然也少不了同学的帮助,感谢他们对我的帮助,没有他们的帮助,设计的任务是不可能这么快顺利完成的。同时,也要感谢我的爸爸妈妈,感谢他们这么多年来默默地支持着我的学业,我会再接再厉,以更加饱满的热情投入到今后的学习和工作中去。
参考文献:
[1] 祁伟,杨亭编著.单片机C51程序设计教程与实验.北京:北京航空航天大学出版社,2006 [2] 何立民.MCS-51系列单片机应用系统设计.北京航空航天大学出版社,2000 [3] 杰.单片微机原理及应用第2版[M].北京机械工业出版社,2001
[4] 黄智伟编著.全国大学生电子设计竞赛训练教程.北京:电子工业出版社,2005 [5] 陈威.51单片机应用系统中的软件抗干扰[J],福建电脑,2003 年第 7 期
[6] 王贺艳,王宗和.单片机(ATC51)与PC机的串行通信[J],大众科技,2005 年第 09 期 [7] 赵高生,杨文焕.单片机应用技术大全[M].西南文通大学出版社,1996 [8] 李东生,张勇.Protel DXP电路设计教程.电子工业出版社,2004
[9] 罗凌.浅谈提高单片机系统运行的可靠性[J],科技资讯,2007 年第 33 期
[10] Meixian Yang.Monolithic integrated circuit's development and application[J],SCIENCE & TECHNOLOGY INFORMATION ,2007 / /35
14
附录
;***********发送程序************************************************
ORG 0000H LJMP START ORG 0003H RETI
ORG 000BH LJMP TIME0 ORG 0013H LJMP INT1
INITIALIZE: MOV 23H, #0FFH ;发送数据初值
MOV 36H, #20H ;TIME0定时10ms mov p2, #00001111b ;产生键盘中断扫描 MOV TMOD, #2 ;TIME0方式2 MOV TH0, #6 ;250us定时初值 MOV TL0, #6 ;250us定时初值 CLR TR0 ;关闭TIME0计数 SETB ET0 ;开启TIME0
SETB IT1 ;置INT0边沿触发 SETB EX1 ;开启INT0 SETB EA ;开启总中断
RET
START: LCALL INITIALIZE ;初始化
SEND: mov p2, #00001111b ;产生键盘中断扫描
jb p1.7, $ clr EA
MOV A, 23h ;发送数据 mov p0, a ;数据显示 MOV R4,#8 ;2us 发送8位
MOV R5,#30 ;2us 传输开始(同步贞),发送30个脉冲 LCALL H26us ;3us 产生一个周期26us的脉冲
CO: RLC A ;1us 先发送字节的高位
JC SEND1 ;2us 判断发送’0‘还是’1‘
SEND0: MOV R5, #20 ;2us 发送编码'0',先发送20个脉冲宽度的低电平
LCALL L26us ;3us 产生一个宽度位26us的低电平 MOV R5,#10 ;2 LCALL H26us ;3 MOV R5,#20 ;2 LCALL L26us ;3 MOV R5,#10 ;2 LCALL H26us ;3 LJMP NEXT ;3
SEND1: MOV R5, #10 ;2us 发送编码'1',先发送10个脉冲宽度的低电平
15
LCALL L26us ;3 MOV R5,#20 ;2 LCAL L H26us ;3 MOV R5,#10 ;2 LCALL L26us ;3 MOV R5,#20 ;2 LCAL L H26us ;3 LJMP NEXT ;3
NEXT: DJNZ R4, CO ; 发送8位,未完,继续
MOV R5, #30 ;2 传输结束,发送30个脉冲的低电平 LCALL L26us ;3 SETB p1.7 SETB EA
LJMP SEND ;新的一轮数据传送
RET
;***********26us高电平脉冲******************************************* H26us: SETB P1.0 ;1us MOV R6, #5 ;2us DJNZ R6, $ ;2us*R6 clr P1.0 ;1us MOV R6, #5 ;2us DJNZ R6, $ ;2us*R6 DJNZ R5, H26us ;2us RET ;1us忽略
;***********26us低电平脉冲************************************** L26us: CLR P1.0 ;1us NOP ;1us MOV R6, #10 ;2us DJNZ R6, $ ;2*R6 DJNZ R5, L26us ;2us RET ;1us忽略
;****************外部中断1****************************************** INT1: PUSH ACC PUSH PSW CLR EX1
SETB TR0 ;开启定时器0 INT1RET: SETB EX1 POP PSW POP ACC RETI
;***************定时器0*********************************************** TIME0: PUSH ACC PUSH PSW SETB RS1 CLR RS0 clr ex1
16
BEGIN: MOV R0, #0 MOV R1, #4 MOV a, #0EFH
;***************键盘扫描******************************************** SCAN: MOV P2, A ;扫描,设定输入模式
JNB P2.0, KEYIN ;检测第一行 INC R0 ;下一个按键 JNB P2.1, KEYIN ;检测第二行 INC R0
JNB P2.2, KEYIN ;检测第三行 INC R0
JNB P2.3, KEYIN ;检测第四行 INC R0
RL A ;下一个扫描码 DJNZ R1, SCAN ;扫描下一列 DJNZ 36H, BEGIN ;重新扫描 MOV 36H, #20H ;10ms定时值 LJMP TIME0RET
KEYIN:LCALL DEL ;调用防抖子程序
MOV A, R0 ;取回按键值 anl A, #0FH ;取回按键值 MOV 23H, A ;存入按键值 CLR p1.7
LJMP TIME0RET
TIME0RET: setb ex1
mov p2,#00001111b CLR TR0 POP PSW POP ACC RETI
;**************延时16ms************************************************* DEL: MOV R7, #40 D1: MOV R6, #200 DJNZ R6, $ DJNZ R7, D1 RET END
;************接收程序****************************************** RECEIVE: MOV R5, #8 ;2us 接收8位
JB P1.1, $ ;3us 等待同步贞,即低电平
MOV R7, #10 ;2us 同步贞(低电平)到来后,延时等待10个脉冲的时间 LCALL DEL10us ;3us 调用子程序,产生一个26us的延时 JB P1.1, RECEive ;3 A MOV R7, #10 ;2 LCALL DEL10us ;3
17
JB P1.1 , RECEive ;3 B
JNB P1.1, $ ;跳过后续低电平
CO: MOV R7, #5 ;2us 编码中的高电平到来后,延时等待5个脉冲的时间
LCALL DEL10us ;3
JNB P1.1, REceive ;3 C 延时15个脉冲后,判断P1.1 MOV R7, #10 ;2 LCALL DEL10us ;3 D
JNB P1.1, REceive1 ;3 p1.1=1,接收为'0',否则为'1' receive0:mov r7, #10 ;2 LCALL DEL10us ;3 Jb p1.1, receive ;3 E' mov r7, #10 ;2 LCALL DEL10us ;3 jNb p1.1, receive ;3 F' mov r7, #10 ;2 LCALL DEL10us ; 3 jNb p1.1, receive ;3 G' mov r7, #10 ;2 LCALL DEL10us ;3 jb p1.1, receive ;3 H' CLR C RLC A
jNb p1.1, $ ;跳过后续低电平 LJMP NEXT
REceive1:mov r7, #10 ;2 LCALL DEL10us ;3 jb p1.1, receive ;3 E mov r7, #10 ;2 LCALL DEL10us ;3 jNb p1.1, receive ;3 F mov r7, #10 ;2 LCALL DEL10us ;3 jb p1.1, receive ;3 G mov r7, #10 ;2 LCALL DEL10us ;3 jb p1.1, receive ; 3 H SETB C RLC A
jNb p1.1,$ ;跳过后续低电平 LJMP NEXT
NEXT: DJNZ R5, CO ;8位未接收完继续
;************接收数据判别并处理******************************************* mov 25h,a cjne a,#00h,k1 cpl p0.0 ljmp receive
18
k1: cjne a,#01h,k2 cpl p0.1 ljmp receive k2: cjne a,#02h,k3 cpl p0.2 ljmp receive k3: cjne a,#03h,k4 cpl p0.3 ljmp receive k4: cjne a,#04h,k5 cpl ljmp k5: cjne cpl ljmp k6: cjne cpl ljmp k7: cjne cpl ljmp k8: cjne cpl ljmp k9: cjne cpl ljmp k10: cjne cpl ljmp k11: cjne cpl ljmp k12: cjne cpl ljmp k13: cjne cpl ljmp k14: cjne cpl ljmp k15: cjne cpl ljmp k16: LJMP p0.4 receive a,#05h,k6 p0.5 receive a,#06h,k7 p0.6 receive a,#07h,k8 p0.7 receive a,#08h,k9 p2.0 receive a,#09h,k10 p2.1 receive a,#0ah,k11 p2.2 receive a,#0bh,k12 p2.3 receive a,#0ch,k13 p2.4 receive a,#0dh,k14 p2.5 receive a,#0eh,k15 p2.6 receive a,#0fh,k16 p2.7 receive RECEive
19
;************26us低电平*************************************** DEL10us:
D1: MOV R6,#12 ;2 DJNZ R6,$ ;2*R6 DJNZ R7,D1 ;2 RET ;1
20
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- igbc.cn 版权所有 湘ICP备2023023988号-5
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务