红外线遥控器(nec编码方式)
- 格式:ppt
- 大小:1.04 MB
- 文档页数:30
红外遥控协议标准(NEC/RC5/RC5X)及编程目录1.NEC码遥控器技术标准2.RC5/RC5X码遥控器技术标准3.解码原理及算法(NEC)4.实例代码(NEC)1.NEC码遥控器技术标准特点:8位的系统码和8位的命令码长度为了增加可靠性,地址码(即用户码)和命令码都要发送两次脉冲宽度调制载波频率为38K每一位的时间长度为1.12ms或2.25ms其逻辑1与逻辑0的表示如图所示:逻辑1为2.25ms,脉冲时间560us;逻辑0为1.12ms,脉冲时间560us。
所以我们根据脉冲时间长短来解码。
推荐载波占空比为1/3至1/4。
NEC协议格式:首次发送的是9ms的高电平脉冲,其后是4.5ms的低电平,接下来就是8bit 的地址码(从低有效位开始发),而后是8bit的地址码的反码(主要是用于校验是否出错)。
然后是8bit 的命令码(也是从低有效位开始发),而后也是8bit的命令码的反码。
地址和命令发送两次。
第二次发送时,所有的位取反,用来验证第一次发送的消息。
如果开发者不用验证,则可以忽略验证的数据,或者将地址或命令扩展为16bit以上是一个正常的序列,但可能存在一种情况:你一直按着1个键,这样的话发送的是以110ms为周期的重复码,如下图:就是说,发了一次命令码之后,不会再发送命令码,而是每隔110ms时间,发送一段重复码。
重复码由9ms高电平和2.25ms的低电平以及560us的高电平组成。
需要注意的是:1838红外一体接收头为了提高接受灵敏度。
输入高电平,其输出的是相反的低电平。
2、编程注意事项2.1红外接收头引脚信号是相反的电平。
2. 2数据从LSB(低位)开始发送,所以选择右移方式接收数据。
四个字节的数据都是先发送D0,最后发送D7。
所以接收到1位数据后,给变量的最高位赋值,右移。
或者先右移,再给变量的最高位赋值。
2.3.可以用一个数组保存32个数据的持续时间,用于后面判断高低电平。
用定时器对两个数据(中断)之间的时间计时,并保存这个持续时间用于以后判断是位1还是位0。
ir常用编码格式-回复什么是常用的IR编码格式?IR(红外线)编码格式是一种用来传递红外线信号的数字编码标准。
它被广泛应用于遥控设备,例如电视、音响、空调和机顶盒等。
常用的IR编码格式有多种,每种编码格式都具有自己独特的特点和用途。
1. NEC编码格式NEC编码格式是最常见和最普遍使用的IR编码格式之一。
它由NEC公司设计并广泛应用于消费类电子产品的遥控设备中。
NEC编码格式使用38kHz的红外载波频率来传输数据,并将0和1二进制逻辑编码成600μs的高电平和600μs的低电平。
NEC编码格式具有高可靠性和简单的实现方式,因此被广泛应用于各种电子设备。
2. RC-5编码格式RC-5编码格式是由荷兰公司Philips开发的一种IR编码标准。
它广泛应用于Philips以及一些其他品牌的遥控设备中。
RC-5编码格式使用36kHz 的红外载波频率,并将0和1的二进制逻辑编码成由889μs长的位周期以及不同的偏移量组成的波形。
RC-5编码格式具有较高的抗干扰能力和较长的传输距离,因此适用于一些特殊环境下的遥控设备。
3. Sony SIRC编码格式Sony SIRC(Sony Infrared Remote Control)编码格式是由索尼公司开发的一种IR编码标准。
它被广泛应用于Sony品牌的遥控设备中。
Sony SIRC编码格式使用40kHz的红外载波频率,并将每位数据编码成同样长度的波形,其中高电平的时间表示1,低电平的时间表示0。
Sony SIRC 编码格式具有较高的数据传输速率和较低的成本,因此被广泛应用于各种消费类电子产品。
4. RCMM编码格式RCMM(Remote Control Message Format)编码格式是由赛博感应公司(Cybernetic Micro Systems)开发的一种IR编码标准。
它主要应用于一些专业设备和工控设备的遥控系统中。
RCMM编码格式使用36kHz 或40kHz的红外载波频率,并将每个按键的数据编码成由预定数量的高电平和低电平组成的波形。
华宝空调红外遥控编码资料简介华宝空调是一款广泛使用的家用空调品牌,它提供了方便的红外遥控功能,使得用户可以轻松控制空调的各种设置。
本文将介绍华宝空调红外遥控编码资料,包括红外遥控编码的原理、常用编码格式、编码数据的解析和使用方法等。
红外遥控编码原理红外遥控编码是通过发送特定的红外脉冲信号来实现对设备的控制。
华宝空调红外遥控编码原理基于脉冲宽度调制(PWM)技术,即通过调整脉冲信号的宽度来表示不同的控制指令。
常用编码格式华宝空调红外遥控编码使用了一种常见的编码格式,即NEC编码格式。
NEC编码格式是一种广泛应用于红外遥控领域的标准编码格式,它使用了32位二进制数据表示一个完整的红外遥控指令。
NEC编码格式的具体结构如下: - Header:8位数据,用于表示一个遥控指令的开始。
- Address:8位数据,用于表示遥控器的地址。
- Command:8位数据,用于表示具体的遥控指令。
- Inverted Command:8位数据,用于表示Command的反码。
编码数据的解析要解析华宝空调红外遥控编码数据,可以按照以下步骤进行: 1. 接收红外遥控编码数据。
2. 解析Header,判断是否为一个完整的红外遥控指令。
3. 解析Address,获取遥控器的地址。
4. 解析Command,获取具体的遥控指令。
5. 对Command进行处理,执行相应的操作。
使用方法要使用华宝空调红外遥控编码,可以按照以下步骤进行: 1. 获取红外遥控编码数据。
2. 解析编码数据,获取遥控指令。
3. 根据遥控指令,执行相应的操作,如调整温度、风速、模式等。
下面是一个示例代码,演示如何使用华宝空调红外遥控编码进行温度调节:# 导入红外遥控库import infrared_remote_control as irc# 获取红外遥控编码数据data = irc.get_infrared_data()# 解析编码数据header = irc.parse_header(data)address = irc.parse_address(data)command = irc.parse_command(data)# 判断遥控指令类型if command == "temperature_up":# 温度增加temperature = irc.get_current_temperature()irc.set_temperature(temperature + 1)elif command == "temperature_down":# 温度减少temperature = irc.get_current_temperature()irc.set_temperature(temperature - 1)else:# 其他指令pass总结华宝空调红外遥控编码资料介绍了红外遥控编码的原理、常用编码格式、编码数据的解析和使用方法。
32红外遥控模块知识点详细笔记
32红外遥控模块是一种常用的遥控模块,它可以接收和发送红外线信号,从而实现遥控功能。
以下是关于32红外遥控模块的详细知识点笔记:
1. 工作原理
32红外遥控模块通过接收红外线信号来工作。
当遥控器按下某个按钮时,它会发送一串编码好的红外线信号。
32红外遥控模块接收到信号后,会解码并执行相应的操作。
2. 编码方式
红外线信号的编码方式有很多种,其中最常见的是NEC编码。
NEC编码采用脉冲宽度调制(PWM)方式对二进制数据进行编码和解码。
在NEC编码中,脉冲的宽度和间隔时间都有严格的规定,从而确保解码的准确性。
3. 引脚说明
32红外遥控模块通常有以下几个引脚:VCC、GND、RXD和TXD。
VCC 和GND是电源和地线,RXD和TXD是接收和发送数据的引脚。
当模块接
收到红外线信号时,它会将信号从RXD引脚输出到单片机或其他控制器。
当模块需要发送信号时,它会从TXD引脚输入数据,并将数据编码成红外线信号发送出去。
4. 常见应用
32红外遥控模块广泛应用于各种遥控器和控制系统中,例如电视、空调、机顶盒等。
通过使用32红外遥控模块,我们可以轻松地实现遥控功能,提高设备的便利性和智能化程度。
5. 注意事项
使用32红外遥控模块时,需要注意以下几点:
- 确保电源电压正确,避免烧毁模块;
- 确保接收和发送引脚连接正确,避免出现通信错误;
- 避免强光干扰和电磁干扰,以免影响遥控效果;
- 注意遥控距离和角度的限制,确保遥控器和接收器之间的通信畅通无阻。
红外遥控编码传输协议生产厂家对红外遥控的编码做了严格的规范,目前国内外主流的红外遥控编码传输协议有十多种,如NEC、Philips RC-5、Philips RC-6、Philips RC-MM、Philips RECS80、 RCA、X-Sat、ITT、JVC、Sharp、Nokia NRC17和Sony SIRC等。
国内最常用的规范有两种:NEC和Sony SIRC。
这两种规范的调制方式分别为:PPM(脉冲间隔调制)和PWM(脉冲宽度调制)。
谈到这两个概念,我需要具体讲解一下,因为我在网上查阅相关资料时甚是郁闷,好多说法相互矛盾。
有说NEC属于PWM的因为它的脉宽不同,PPM的脉宽是固定的。
而细心地朋友如果探究到NEC的典型芯片的芯片手册时,会发现上面这种说法是错误的。
比如UPD6121这款红外远程控制芯片的调制方式为PPM。
后来终于在一家国外的网站上找到了能够自圆其说的解释。
个人认为比较正确,拿来和大家分享。
要想认清红外遥控编码传输协议的具体内容,我想还是先捡其重点来讲一下,编码规范中最重要的当属调制这部分了。
而主流的调制方式有两种分别为PPM和PWM,当然其他还有好几种,这里先不讲解,免得糊涂了。
本文就先介绍下PPM和PWM的区别。
PPM(Pulse Position Modulation),其实更加准确的说法应该是PDM(Pulse Distance Modulation)即脉冲间隔调制:上图为典型编码规范NEC协议的调制图,为PPM调制。
可以看出不管是“0”还是“1”,有高频调制波的地方(下文称其为脉冲)其宽度都是相同的位560us,而脉冲间的间隔则是不同的:“1”时为(2.25ms-560us),“0”时为(1.12ms-560us)。
由此得来PPM的称号。
再来看下PWM的调制波形吧:显然可以看出,“1”的脉冲宽度为1.2ms,“0”的为600us。
而脉冲间隔不管是“0”还是“1”,均为600us。
nec红外协议NEC红外协议。
NEC红外协议是一种用于红外遥控器通信的协议标准,广泛应用于家电、电子设备等领域。
它采用了38kHz的载波频率,通过调制不同的脉宽来实现数据的传输,具有传输距离远、抗干扰能力强等优点。
本文将对NEC红外协议的原理、格式、编码方式等进行详细介绍,以便对该协议有更深入的了解。
NEC红外协议的原理是通过调制38kHz的载波信号来传输数据。
在NEC协议中,逻辑“0”和逻辑“1”分别用不同的脉宽来表示,通常逻辑“0”用560us的脉宽表示,而逻辑“1”用1690us的脉宽表示。
通过这种方式,接收端可以根据脉宽的不同来解析出发送端发送的数据,从而实现通信的目的。
NEC红外协议的格式通常包括引导脉冲、地址码、反码、命令码等部分。
其中,引导脉冲是一个9ms的高电平脉冲和4.5ms的低电平脉冲交替组成,用于唤醒接收器;地址码用来表示遥控器的地址信息;反码是地址码的反码,用于提高数据传输的可靠性;命令码用来表示具体的操作命令,比如开关机、音量调节等。
通过这样的格式组织,NEC红外协议可以实现对各种遥控器指令的准确传输。
NEC红外协议的编码方式是采用了32位的编码格式,其中包括8位的地址码、8位的地址反码、8位的命令码和8位的命令反码。
这种编码方式可以保证数据的准确性和可靠性,同时也便于接收端对数据进行解析和识别。
通过这种编码方式,NEC红外协议可以实现对各种遥控器指令的精准传输。
总的来说,NEC红外协议作为一种广泛应用的红外遥控器通信协议,具有传输距离远、抗干扰能力强、编码方式简单等优点。
通过对NEC红外协议的原理、格式、编码方式等方面的介绍,相信读者对该协议有了更深入的了解,可以更好地应用于实际的产品开发和设计中。
总结一下,NEC红外协议在红外遥控器通信领域有着重要的地位,其原理简单明了,格式清晰规范,编码方式可靠性高。
相信随着科技的不断发展,NEC红外协议将会有更广泛的应用和发展。
nec码红外遥控完整编码红外遥控编码程序如下:NEC .SECTION 'DATA'a_REM_CODE DB ? ;KEY DATA CODEa_CUSTOMER_1 DB ? ;遥控器头码(客户码)低八位a_CUSTOMER_2 DB ? ;遥控器头码(客户码)高八位#define CUS_6221_1 00110100b ;1234H#define CUS_6221_2 00010010b ;@------------------------------------------------NEC_CODE .SECTION 'CODE';@************* SUBROUTINE[xx]: Send Remote Code ************;;遥控码发送:SEND_REMOTE_CODE:clr WDT ;清除进位标志,检测遥控发送的有效的按键SZ fg_SendActive ;SZ表示以0结尾的字符串JMP READY_SEND ;跳转到READY_SEND模块retREADY_SEND:NEC_CODE:mov A,a_KEY_NUM ;将数值发送到寄存器A中,直接寻址mov M_TBLP,ATABRDL a_REM_CODE ;查表专用指令;读取遥控头码(客户码)低八位数值 MOV A,CUS_6221_1MOV a_CUSTOMER_1,AMOV A,CUS_6221_2MOV a_CUSTOMER_2,A以上为READY_SEND运行模块,同时是为后面NEC码发送的准备;首先将一个按键的数值已以直接寻址方式发送到寄存器A中,将寄存器A的是发送到M_TBLP 中,然后查表a_REM_CODE,将CUS_6221_1的值发送到寄存器中,在赋值给遥控器头码(客户码)低八位a_CUSTOMER_1,同理,将CUS_6221_2赋值给遥控器头码(客户码)低八位a_CUSTOMER_2,随后即开始发送NEC遥控码。
红外遥控编码格式红外遥控器的编码格式通常有两种格式:NEC与RC5NEC格式的特征:1:使用38 kHz载波频率2:引导码间隔就是9 ms + 4、5 ms3:使用16位客户代码4:使用8位数据代码与8位取反的数据代码下面的波形就是从红外接收头上得到的波形:(调制信号转变成高低电平了)不过需要将波形反转一下才方便分析:NEC 协议通过脉冲串之间的时间间隔来实现信号的调制(英文简写PPM)。
逻辑“0”就是由0、56ms的38KHZ载波与0、560ms的无载波间隔组成;逻辑“1”就是由0、56ms的38KHZ载波与1、68ms的无载波间隔组成;结束位就是0、56ms的38K载波。
下面实例就是已知NEC类型遥控器所截获的波形:遥控器的识别码就是Address=0xDD20;其中一个键值就是Command=0x0E;注意波形先就是发低位地址再发高位地址。
所以0000,0100,1011,1011反转过来就就是1101,1101,0010,000十六进制的DD20;键值波形如下:也就是要将0111,0000反转成0000,1110得到十六进制的0E;另外注意8位的键值代码就是取反后再发一次的,如图0111,0000 取反后为1000,1111。
最后一位就是一个逻辑“1”。
RC5编码相对简单一些:下面的遥控器地址就是1A,键值就是0D的波形同样由于取自红外接收头的波形需要反相一下波形以便于分析:反相后的波形:根据编码规则:得到一组数字:110,11010,001101 根据编码定义第一位就是起始位S 通常就是逻辑1第二位就是场位F通常为逻辑1,在RC5扩展模式下它将最后6位命令代码扩充到7位代码(高位MSB),这样可以从64个键值扩充到128个键值。
第三位就是控制位C 它在每按下了一个键后翻转,这样就可以区分一个键到底就是一直按着没松手还就是松手后重复按。
如图所示就是同一按键重复按两次所得波形,只有第三位就是相反的逻辑,其它的位逻辑都一样。
∙方便理解所看到的波形是从红外接收管出来的信号,跟协议所说的信号高低(0或1)刚好相反。
∙NEC协议是众多红外遥控协议的其中一种,除NEC外,还有RC5、RC6等其它的。
市面上买到的非学习型万能电视遥控器大多集成一种或多种编码是NEC型的,我买的二个遥控器中就有三种以上编码是NEC的。
∙NEC编码的一帧(通常按一下遥控器按钮所发送的数据)由引导码、地址码及数据码组成,,如下图所示,把地址码及数据码取反的作用是加强数据的正确性。
∙
∙引导码及数据的定义如下图所示,当一直按住一个按钮的时候,会隔110ms左右发一次引导码(重复),并不带任何数据
∙
∙以下是用示波器采集到的一直按住某个按钮时的波形:
∙
∙按一下按钮的波形:。
HT48CA0 APPLICATION NOTE. Application CircuitHOLTEK HT48CA0 (64KEY).Working Register Define;*****************************************************;@***** Filename : SAMPLE.ASM (Remote 64KEY) ******;@************** OSC:455KHz CARRY:38KHz ***********;@****************** HT48CA0 ******************;;*****************************************************;;***** System memory Map *****M_INDIRECT1 equ [00h] ;Indirect addressing register M_MP0 equ [01h] ;Data Memory pointM_ACC equ [05h] ;AccumulatorM_PCL equ [06h] ;Program Counter Lower-order M_TBLP equ [07h] ;Table PointerM_TBLH equ [08h] ;Table Higher-order byteM_STATUS equ [0ah] ;Micro controll statusPORT_A equ [12h] ;PA I/O registerPORT_B equ [14h] ;PB I/O registerPORT_C equ [16h] ;PC Output registerPORT_AC equ [3Eh] ;PA Temp register;-----------------------------------;;--- System FLAG define ---#define fg_CF M_STATUS.0 ;CARRY Flag#define fg_ZF M_STATUS.2 ;ZERO Flag;;--- I/O Pin define ---#define pn_IR PORT_C.0 ;Carry Output Port;;--- Address Define ---#define DATA_RAM 20h ;HT48CA0;;--- Instruction Define ---#define NOP2 JMP $+1 ;Long NOP Define;@------------------------------------------------SAMPLE .SECTION 'DATA';; --- Temp RAM ---a_SR10 DB ? ;;WORK Temp Registera_SR11 DB ? ;;a_SR12 DB ? ;;a_SR13 DB ? ;;;;--------- Program RAM --------a_SCAN_STEP DB ? ;;Scan Key Colummn Step Numbera_PREV_KEY DB ? ;;Save Previous Key Numbera_KEY_NUM DB ? ;;Scan Key Numbera_COL_VALUE DB ? ;;Read on column value to a_COL_VALUE KD_TEMP DB ? ;;Key Debounce Check TimesNKD_TEMP DB ? ;;Key Release Confirm Times;;--- User FLAG define ---fg_SendActive DBIT ;;VALIDITY KEY Flagfg_PressRec DBIT ;;Check Column Multi_Key Flagfg_REPEAT DBIT ;;REPEAT KEY Flagfg_Multi_Key DBIT ;;INVALID KEY FlagHT48CA0 REMOTE CONTROL FLOWCHARTSCAN KEY PROCEDURE FLOWCHARTREAD KEY PROCEDURE FLOWCHARTTIME DELAY PROCEDURE FLOWCHART. Main Program;;==================================================================== ;@========================= Main Program ============================= ;;==================================================================== SAMPLE_CODE .SECTION 'CODE'org 00hMAIN:;------------------------------------------clr WDT;@ ===== Initial Port =====;; +--------- PB7: O PULL-HIGH;; |+-------- PB6: O PULL-HIGH;; ||+------- PB5: O PULL-HIGH;; |||+------ PB4: O PULL-HIGH;; ||||+----- PB3: O PULL-HIGH;; |||||+---- PB2: O PULL-HIGH;; ||||||+--- PB1: O PULL-HIGH;; |||||||+-- PB0: O PULL-HIGHset PORT_Aclr PORT_AC;; +--------- PA7: WAKE-UP I PULL-HIGH;; |+-------- PA6: WAKE-UP I PULL-HIGH;; ||+------- PA5: WAKE-UP I PULL-HIGH;; |||+------ PA4: WAKE-UP I PULL-HIGH;; ||||+----- PA3: WAKE-UP I PULL-HIGH;; |||||+---- PA2: WAKE-UP I PULL-HIGH;; ||||||+--- PA1: WAKE-UP I PULL-HIGH;; |||||||+-- PA0: WAKE-UP I PULL-HIGHset PORT_B;; +-- PC0: O PULL-HIGHmov A,11111111bmov PORT_C,A;@===== Clear RAM ( HT-48CA0 : 20h-3Fh ) =====CLEAR_RAM:mov A,DATA_RAM ;; 1. RAM Start Addressmov M_MP0,A ;;mov A,032d ;; 2. Amount of RAMCLEAR_RAM_1: ;;clr M_INDIRECT1 ;;inc M_MP0 ;;SDZ M_ACC ;;JMP CLEAR_RAM_1 ;;CLEAR_RAM_END: ;;;@----- Default RAM value -----DEFAULT_RAM:clr a_SCAN_STEP;T1=455KHz /4 = 8.79 uS ;;%%%%%%%%%%%%%%%%%%%%%%%%%% Main Prog. Array %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% START_MAIN_PROC:;@*********** Polling System Event ***********POLLING_EVENT:CALL SCAN_KEY_MATRIX ;SCAN KEY PROCEDURECALL F_DELAY ;TIME DELAY PROCEDURECALL SEND_REMOTE_CODE ;SEND CODE PROCEDURESZ fg_Multi_Key ;Check Invalid KeyJMP POLLING_EVENT ;SZ fg_SendActive ;Check Validity KeyJMP POLLING_EVENT ;SZ a_KEY_NUM ;Check NO Key PressJMP POLLING_EVENT ;SLEEP:clr PORT_A ;Ready WakeUp Low Levelhalt ;System HaltJMP POLLING_EVENT ;Any Key WakeUp ;;%%%%%%%%%%%%%%%%%%%%%%%%%% Subroutine Array %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ;@************* SUBROUTINE[xx]: Scan 64 Key Matrix (8x8) ************SCAN_KEY_MATRIX:;;--- READ KEY PROCEDURE ---clr wdt ;;Initiate Processclr a_KEY_NUM ;clr fg_PressRec ;clr a_SCAN_STEP ;clr fg_Multi_Key ;mov A,01111111b ;mov PORT_AC,A ;NEXT_COLUMN:rlA PORT_AC ;mov PORT_A,A ;Scan Column PA PORT OUTPUTmov PORT_AC,A ;NOP ;;;--- READ PB PORT ---SET PORT_B ;;SET PB0,PB1 Pull-UpMOV A,PORT_B ;;Read on column value to a_COL_VALUE mov a_COL_VALUE,A ;;mov A,001dmov a_SR11,Amov A,11111110b ;;mov a_SR10,Amov A,a_COL_VALUE ;; This column value to ACCSNZ a_COL_VALUE.7JMP KEY_ROW_7SNZ a_COL_VALUE.6JMP KEY_ROW_6SNZ a_COL_VALUE.5JMP KEY_ROW_5SNZ a_COL_VALUE.4JMP KEY_ROW_4SNZ a_COL_VALUE.3JMP KEY_ROW_3SNZ a_COL_VALUE.2JMP KEY_ROW_2SNZ a_COL_VALUE.1JMP KEY_ROW_1SNZ a_COL_VALUE.0JMP KEY_ROW_0NOP2nopJMP COL_WITHOUT_KEYKEY_ROW_7:rl a_SR10 ;; a_SR10 rotate to "01111111b"inc a_SR11KEY_ROW_6:rl a_SR10 ;; a_SR10 rotate to "10111111b"inc a_SR11KEY_ROW_5:rl a_SR10 ;; a_SR10 rotate to "11011111b"inc a_SR11KEY_ROW_4:rl a_SR10 ;; a_SR10 rotate to "11101111b"inc a_SR11KEY_ROW_3:rl a_SR10 ;; a_SR10 rotate to "11110111b"inc a_SR11KEY_ROW_2:rl a_SR10 ;; a_SR10 rotate to "11111011b"inc a_SR11KEY_ROW_1:rl a_SR10 ;; a_SR10 rotate to "11111101b"inc a_SR11KEY_ROW_0:xor A,a_SR10 ;;Check ROW Multi-KeySZ fg_ZFJMP COL_WITH_KEYCOL_ERROR_KEY:set fg_Multi_KeyCOL_WITHOUT_KEY:NOP2NOP2NOP2JMP READY_2_NEXT_COLUMNCOL_WITH_KEY: ;;KEY NUMBER PROCESSrlA a_SCAN_STEP ;;\rl M_ACC ;; > a_SCAN_STEP * 8 --> ACCrl M_ACC ;;/add A,a_SR11 ;;mov a_KEY_NUM,A ;;SZ fg_PressRec ;;Check Column Multi-Keyset fg_Multi_Key ;;set fg_PressRec ;;READY_2_NEXT_COLUMN:inc a_SCAN_STEPmov A,a_SCAN_STEPxor A,008dSNZ fg_ZFJMP NEXT_COLUMNnopREAD_KEY_COMPLETE:;@************* SUBROUTINE[xx]: Check Key Active ************;@--- Scan Key Complete, Check key valid ? ---CHECK_KEY_ACTIVE:clr wdtSZ a_KEY_NUM ;;If a_KEY_NUM = ffh, invalid key JMP VALID_KEY_CHKJMP INVALID_KEY_CHK;@--------------------------VALID_KEY_CHK:SZ a_PREV_KEY ;;Check New KeyJMP VALID_KEYC_PROJMP KEY_DEBVALID_KEYC_PRO:mov A,a_KEY_NUMxor A,a_PREV_KEY ;; Check Repeat keySNZ fg_ZFJMP VALID_SEND_KEY;;----------------------------VALID_RPSEND_KEY:snz fg_Multi_key ;Check Multi-Key Clear a_KEY_NUM JMP REPEAT_KEYclr a_KEY_NUMretREPEAT_KEY:SET fg_REPEAT ;;SET Repeat FlagNOP2JMP SET_VALIDFGVALID_SEND_KEY:mov a,a_PREV_KEY ;;Check Change KeyXOR A,0FFH ;;Check Debounce ENDSNZ fg_ZFJMP CHANG_KEY;;--- NEW KEY InitiateCLR fg_REPEATmov a,a_KEY_NUMmov a_PREV_KEY,a;;--- SET VALIDITY KEYSET_VALIDFG:SET fg_SendActiveretCHANG_KEY:CLR KD_TEMPJMP RKEY_PRO;@----------------------------INVALID_KEY_CHK:CLR KD_TEMPRKEY_PRO: ;Release Key ConfirmINC NKD_TEMPMOV A,NKD_TEMPXOR A,5SNZ fg_ZFJMP SCAN_KEY_MATRIXDEC NKD_TEMP ;NO_KEY_PROC:clr fg_SendActiveNOP2NOP2NOPEXIT_INVALID_KEY:mov a,a_KEY_NUM ;Clear a_PREV_KEYmov a_PREV_KEY,aNOP2retKEY_DEB: ;T1=455KHz/4=116480Hz = 8.79us ;Check Key DebounceINC KD_TEMPMOV A,KD_TEMPXOR A,6SNZ fg_ZFJMP SCAN_KEY_MATRIXMOV A,0FFH ;SAVE KEY Debounce Check ENDMOV a_PREV_KEY,A ;0FFH to a_PREV_KEYJMP SCAN_KEY_MATRIX;@********** SubRoutine[xx]: Delay 10*ACC+5 Instruction Cycle ********** ;;--- TIME DELAY PROCEDURE ---F_DELAY:SZ KD_TEMPJMP NEWK_DMOV A,NKD_TEMP ;Release Confirm time offset delaymov a_SR13,ABLANK_DELAY_00:INC a_SR13MOV A,a_SR13XOR A,5SZ fg_ZFJMP BLANK_DELAY_010mov A,155dBLANK_DELAY_01:SDZ M_ACCJMP BLANK_DELAY_01clr wdtJMP BLANK_DELAY_00BLANK_DELAY_010:CLR NKD_TEMPMOV a,1 ;OFFSET TIME DELAYmov a_SR13,ABLANK_DELAY_02:mov A,37dBLANK_DELAY_03:clr wdtSDZ M_ACCJMP BLANK_DELAY_03SDZ a_SR13JMP BLANK_DELAY_02RETNEWK_D: ;;New Key No Time Offset DelayCLR KD_TEMPRET;;---------------------------------------;@************* SUBROUTINE[xx]: Send Remote Code ************SEND_REMOTE_CODE:clr WDTSZ fg_SendActiveJMP READY_SENDretREADY_SEND:; REMOTE CODE SEND & DATA FRAME DELAY TIME OFFSET;ret;;************************** End of program ********************************* ENDSEND CODE PROCEDURE FLOWCHARTA. HT6221 ( NEC FORMAT );;***************************************************** ;@***** Filename : NEC.FORMAT (Remote 64KEY) ****** ;@************** OSC:455KHz CARRY:38KHz *********** ;@****************** HT48CA0 ****************** ;;*****************************************************NEC .SECTION 'DATA'a_REM_CODE DB ? ;KEY DATA CODEa_CUSTOMER_1 DB ? ;CUSTOMER CODE LOW BYTE a_CUSTOMER_2 DB ? ;CUSTOMER CODE HIGH BYTE#define CUS_6221_1 00110100b ;1234H #define CUS_6221_2 00010010b;@------------------------------------------------ NEC_CODE .SECTION 'CODE';@************* SUBROUTINE[xx]: Send Remote Code ************ SEND_REMOTE_CODE:clr WDT ;CHECK VALIDITY KEY SZ fg_SendActive JMP READY_SEND retREADY_SEND:NEC_CODE:mov A,a_KEY_NUM ;READ KEY DATANEC Format CodeEX.PS. Custom Code = 0808H Data Code =mov M_TBLP,ATABRDL a_REM_CODEMOV A,CUS_6221_1 ;READ CUSTOMER CODEMOV a_CUSTOMER_1,AMOV A,CUS_6221_2MOV a_CUSTOMER_2,A;;--- Starting send NEC Remote code ---SEND_NEC: ;Check No Key Code ffHSIZA a_REM_CODEJMP LEADNEC_CODEretLEADNEC_CODE: ; 1 Instruction Cycle = 8.79usclr pn_IR ;High Level 9 ms (455KHz:1023 Cycle) mov A,002d ; [(3*168)+5]*2 = 1018mov a_SR13,ALEADIND_CODE_00:mov A,168dmov M_ACC,ALEADIND_CODE_01:SDZ M_ACCJMP LEADIND_CODE_01SDZ a_SR13JMP LEADIND_CODE_00NOP2NOP2NOPset pn_IRclr wdt;---mov A,001d ;LOW Level 2.5ms (284Cycle)mov a_SR13,A ; [(4*69)+5]*1 = 281LEAD_CODE_04:mov A,70dmov M_ACC,ALEAD_CODE_05:NOPSDZ M_ACCJMP LEAD_CODE_05SDZ a_SR13JMP LEAD_CODE_04clr wdtSZ fg_REPEAT ;CHECK REPEAT KEYJMP REPEAT_CODE;---mov A,001d ;LOW Level 2.0ms (227Cycle)mov a_SR13,A ; [(4*55)+5]*1 = 225LEAD_CODE_06:mov A,53dmov M_ACC,ALEAD_CODE_07:NOPSDZ M_ACCJMP LEAD_CODE_07SDZ a_SR13JMP LEAD_CODE_06clr wdtnop2;------------------------CUSNEC_CODE:mov A,002dmov a_SR13,AMOV A,OFFSET a_CUSTOMER_1MOV M_MP0,ACUSTOM_PRO:mov A,008dmov a_SR11,A ; 8 data bitnopCUSTOM_BIT_BL ;0.56ms->63 Cycleclr pn_IR ;[(3*20)+2]=62mov A,20dCUSTOM_BIT_BL_1:SDZ M_ACCJMP CUSTOM_BIT_BL_1clr wdtnopCUSTOM_BIT_BH: ;'0' 0.56ms->63 Cycle set pn_IR ;'1' 1.68ms->191 Cycle noprr M_INDIRECT1 ;mov A,18dSZ M_INDIRECT1.7 ;mov A,61dCUSTOM_BIT_BH_0:SDZ M_ACCJMP CUSTOM_BIT_BH_0clr wdtSDZ a_SR11JMP CUSTOM_BIT_BLINC M_MP0SDZ a_SR13JMP CUSTOM_PRO;;---------------------------------------DATA6NEC_BIT:mov A,002dmov a_SR13,ADATA_PRO:mov A,008dmov a_SR11,A ;; 8 data bitnopDATA_BIT_BL: ;0.53ms->60 Cycleclr pn_IR ;[(3*19)+2]=59mov A,20dDATA_BIT_BL_1:SDZ M_ACCJMP DATA_BIT_BL_1clr wdtnopDATA_BIT_BH: ;'0' 0.53ms->60 Cycleset pn_IR ;'1' 1.58ms->179 Cyclenoprr a_REM_CODE ;mov A,18dSZ a_REM_CODE.7mov A,61dDATA_BIT_BH_0:SDZ M_ACCJMP DATA_BIT_BH_0clr wdtSDZ a_SR11JMP DATA_BIT_BLCPL A_REM_CODESDZ a_SR13JMP DATA_PRO;0.53ms->60 Cycleclr pn_IR ;[(3*19)+2]=59mov A,20dDATA_BIT_BL_2:SDZ M_ACCJMP DATA_BIT_BL_2clr wdtset pn_IR;--- Frame Delay Time Process ---;mov A,004d ;Repetition time=108ms (12286 Cycle) mov a_SR13,A ;Scan Key = 2471 Cycle;Send Code = 7349 CycleFDTP_LOOP_01: ;12286-2471-7349=2466mov A,152d ;[(4*152)+5]*4=2452mov M_ACC,AFDTP_LOOP_02:nopSDZ M_ACCJMP FDTP_LOOP_02clr wdtSDZ a_SR13JMP FDTP_LOOP_01mov A,3dmov M_ACC,AFDTP_LOOP_03:SDZ M_ACCJMP FDTP_LOOP_03NOP2ret;--------------------------------REPEAT_CODE:;0.56ms->63 Cycleclr pn_IR ;[(3*20)+2]=62mov A,19dREP_BIT_BL_3:SDZ M_ACCJMP REP_BIT_BL_3clr wdtset pn_IR;--- Repeat Frame Delay Time Process ---;mov A,016d ;Repetition time=108ms (12286 Cycle) mov a_SR13,A ;Scan Key = 2471 Cycle;Send Repeat Code = 1390 CycleREP_DELAY_02: ;12286-2471-1390=8425mov A,130d ;[(4*130)+5]*16=8400mov M_ACC,A ;REP_DELAY_03: ;nopSDZ M_ACCJMP REP_DELAY_03clr wdtSDZ a_SR13JMP REP_DELAY_02mov A,07dmov M_ACC,AREP_DELAY_04:SDZ M_ACCJMP REP_DELAY_04NOP2ret%%%%%%%%%%%%%%%%%%%% Remote Table Array %%%%%%%%%%%%%%%%%%%%%%%%%org 300h;@ --000000 00000000;; ||||||||;; ++++++++-- 8 bit Data code;; NEC KeyDW 00ffh ;; Key 00 : --- :00DW 0000h ;; Key 1 : --- :01DW 0001h ;; Key 2 : :02DW 0002h ;; Key 3 : :03DW 0003h ;; Key 4 : :04DW 0004h ;; Key 5 : :05DW 0005h ;; Key 6 : :06DW 0006h ;; Key 7 : :07DW 0007h ;; Key 8 : :08DW 0008h ;; Key 9 : :09DW 0009h ;; Key 10 : :10DW 000ah ;; Key 11 : :11DW 000bh ;; Key 12 : :12DW 000ch ;; Key 13 : :13DW 000dh ;; Key 14 : :14DW 000eh ;; Key 15 : :15DW 000fh ;; Key 16 : :16DW 0010h ;; Key 17 : :17DW 0011h ;; Key 18 : :18 DW 0012h ;; Key 19 : :19 DW 0013h ;; Key 20 : :20 DW 0014h ;; Key 21 : :21 DW 0015h ;; Key 22 : :22 DW 0016h ;; Key 23 : :23 DW 0017h ;; Key 24 : :24 DW 0018h ;; Key 25 : :25 DW 0019h ;; Key 26 : :26 DW 001ah ;; Key 27 : :27 DW 001bh ;; Key 28 : :28 DW 001ch ;; Key 29 : :29 DW 001dh ;; Key 30 : :30 DW 001eh ;; Key 31 : :31 DW 001fh ;; Key 32 : :32 DW 0020h ;; Key 33 : :33 DW 0021h ;; Key 34 : :34 DW 0022h ;; Key 35 : :35 DW 0023h ;; Key 36 : :36 DW 0024h ;; Key 37 : :37 DW 0025h ;; Key 38 : :38 DW 0026h ;; Key 39 : :39 DW 0027h ;; Key 40 : :40 DW 0028h ;; Key 41 : :41 DW 0029h ;; Key 42 : :42 DW 002ah ;; Key 43 : :43 DW 002bh ;; Key 44 : :44 DW 002ch ;; Key 45 : :45 DW 002dh ;; Key 46 : :46 DW 002eh ;; Key 47 : :47 DW 002fh ;; Key 48 : :48 DW 0030h ;; Key 49 : :49 DW 0031h ;; Key 50 : :50 DW 0032h ;; Key 51 : :51 DW 0033h ;; Key 52 : :52 DW 0034h ;; Key 53 : :53 DW 0035h ;; Key 54 : :54 DW 0036h ;; Key 55 : :55 DW 0037h ;; Key 56 : :56 DW 0038h ;; Key 57 : :57 DW 0039h ;; Key 58 : :58 DW 003ah ;; Key 59 : :59 DW 003bh ;; Key 60 : :60 DW 003ch ;; Key 61 : :61 DW 003dh ;; Key 62 : :62 DW 003eh ;; Key 63 : :63 DW 003fh ;; Key 64 : :64 END;;***************************************************** ;@** Filename : MITSUBISH.FORMAT (Remote 64KEY) **** ;@************** OSC:455KHz CARRY:38KHz *********** ;@****************** HT48CA0 ****************** ;;*****************************************************MITSUBISH .SECTION 'DATA'a_REM_CODE DB ? ;KEY DATA CODEa_FACTOR DB ? ;KEY DATA DELAY TIME FACTOR a_CUSTOMER_1 DB ? ;CUSTOMER CODE#define CUS_50560 11101110b ;0EEH;@------------------------------------------------ MITSUBISH_CODE .SECTION 'CODE';@************* SUBROUTINE[xx]: Send Remote Code ************ SEND_REMOTE_CODE:clr WDT ;CHECK VALIDITY KEY SZ fg_SendActive JMP READY_SEND retREADY_SEND:M5056_ACODE:mov A,a_KEY_NUM ;READ KEY DATA mov M_TBLP,A ; TABRDL a_REM_CODE ;B. M50560 (MITSUBISH Format)(HT6240)4ms4ms EX.PS. 500us => 56 cycle (530us => 60 cycl 2ms-500us=1.5ms => 170 cycle(2.11ms-530us=1.58ms => 179 cycl 80ms => 9101 cycle(67.5ms =>7678ms => 910 cycle (8.44ms => 960 4ms => 455 cycle (4.22ms => 480mov A,M_TBLH ;READ Data Delay Time Factor and A,00001111b ;mov a_FACTOR,A ;MOV A,CUS_50560 ;READ CUSTOM CodeMOV a_CUSTOMER_1,A ;;--------------------------;;--- Starting send 5056 Remote code ---SEND_5056:SIZA a_REM_CODE ;CHECK NO KEY CODE ffHJMP LEAD50_CODEretLEAD50_CODE:clr pn_IR ;;---mov A,001d ;High Level 8.ms (910Cycle) mov a_SR13,A ; [(4*226)+5]*1 = 909LEAD50_CODE_00:mov A,225dmov M_ACC,ALEAD50_CODE_01:NOPSDZ M_ACCJMP LEAD50_CODE_01SDZ a_SR13JMP LEAD50_CODE_00clr wdtnopNOP2set pn_IR;---mov A,001d ;Low Level 4ms (455Cycle)mov a_SR13,A ; [(4*112)+5]*1 = 453LEAD50_CODE_02:mov A,111dmov M_ACC,ALEAD50_CODE_03:NOPSDZ M_ACCJMP LEAD50_CODE_03SDZ a_SR13JMP LEAD50_CODE_02clr wdtNOP2;-----------------------------CUS50_CODE:mov A,008dmov a_SR11,A ; 8 data bitCUS50_BIT_BL: ;0.5ms->57 Cycleclr pn_IR ;[(3*18)+2]=56mov A,18dCUS50_BIT_BL_1:SDZ M_ACCJMP CUS50_BIT_BL_1clr wdtnopCUS50_BIT_BH: ;'0' 0.5ms->57 Cycleset pn_IR ;'1' 1.5ms->170 Cyclerr a_CUSTOMER_1 ;mov A,16dnopSZ a_CUSTOMER_1.7 ;mov A,54dCUS50_BIT_BH_0:SDZ M_ACCJMP CUS50_BIT_BH_0clr wdtSDZ a_SR11JMP CUS50_BIT_BL;0.5ms->57 Cycleclr pn_IR ;[(3*18)+2]=56mov A,18dCUS50_BIT_BL_2:SDZ M_ACCJMP CUS50_BIT_BL_2clr wdtnopset pn_IR;--- ;Low Level 4ms (455Cycle) ; [(4*112)+5]*1 = 453mov A,001dmov a_SR13,ALEAD50_CODE_04:mov A,111dmov M_ACC,ALEAD50_CODE_05:NOPSDZ M_ACCJMP LEAD50_CODE_05SDZ a_SR13JMP LEAD50_CODE_04clr wdtNOP2;;---------------------------------------DATA50_BIT:mov A,008dmov a_SR11,A ;; 8 data bitDAT50_BIT_BL: ;0.5ms->57 Cycleclr pn_IR ;[(3*18)+2]=56mov A,18dDAT50_BIT_BL_1:SDZ M_ACCJMP DAT50_BIT_BL_1clr wdtnopDAT50_BIT_BH: ;'0' 0.5ms->57 Cycleset pn_IR ;'1' 1.5ms->170 Cyclerr a_REM_CODE ;mov A,16dnopSZ a_REM_CODE.7mov A,54dDAT50_BIT_BH_0:SDZ M_ACCJMP DAT50_BIT_BH_0clr wdtSDZ a_SR11JMP DAT50_BIT_BL;0.5ms->57 Cycleclr pn_IR ;[(3*18)+2]=57mov A,18dDAT50_BIT_BL_2:SDZ M_ACCJMP DAT50_BIT_BL_2clr wdtnopset pn_IR;--- delay factor ;Low Level 1.ms (114Cycle); [(4*27)+5]*1 = 113mov A,a_FACTORmov a_SR13,ADELAY50_CODE_01:mov A,27dnop2mov M_ACC,ADELAY50_CODE_02:NOPSDZ M_ACCJMP DELAY50_CODE_02clr wdtSDZ a_SR13JMP DELAY50_CODE_01;--- FRAME DELAY TIME PROCESS ---mov A,002d ;Repetition time=80ms (9101 Cycle) mov a_SR13,A ;Scan Key = 2471 Cycle;Send Code = 7349 CycleDELAY_LOOP_01: ;9101-2471-5376=1254mov A,155d ;[(4*155)+5]*2=1250mov M_ACC,ADELAY_LOOP_02:nopSDZ M_ACCJMP DELAY_LOOP_02clr wdtSDZ a_SR13JMP DELAY_LOOP_01NOP2CODE50_END:ret;@************* SUBROUTINE[xx]: Scan Key Matrix ************ ;;%%%%%%%%%%%%%%%%%%%%%%%%% Remote Table Array %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% org 300h;@ --000000 00000000;; |||| ||||||||;; |||| ++++++++-- 8 bit Data code;; ++++-- Delay Factor (Data '0' bit Num);; M50560KeyDW 00FFh ;; Key XX : :00DW 0800h ;; Key 1 : --- :01DW 0701h ;; Key 2 : --- :02DW 0702h ;; Key 3 : :03DW 0603h ;; Key 4 : :04DW 0704h ;; Key 5 : :05DW 0605h ;; Key 6 : :06DW 0606h ;; Key 7 : :07DW 0507h ;; Key 8 : :08DW 0708h ;; Key 9 : :09DW 0609h ;; Key 10 : :10DW 060ah ;; Key 11 : :11DW 050bh ;; Key 12 : :12DW 060ch ;; Key 13 : :13DW 050dh ;; Key 14 : :14DW 050eh ;; Key 15 : :15DW 040fh ;; Key 16 : :16DW 0710h ;; Key 17 : :17DW 0611h ;; Key 18 : :18DW 0612h ;; Key 19 : :19DW 0513h ;; Key 20 : :20DW 0614h ;; Key 21 : :21DW 0515h ;; Key 22 : :22DW 0516h ;; Key 23 : :23DW 0417h ;; Key 24 : :24DW 0618h ;; Key 25 : :25DW 0519h ;; Key 26 : :26DW 051ah ;; Key 27 : :27DW 041bh ;; Key 28 : :28DW 051ch ;; Key 29 : :29DW 041dh ;; Key 30 : :30DW 041eh ;; Key 31 : :31DW 031fh ;; Key 32 : :32DW 0720h ;; Key 33 : :33DW 0621h ;; Key 34 : :34DW 0622h ;; Key 35 : :35DW 0523h ;; Key 36 : :36DW 0624h ;; Key 37 : :37DW 0525h ;; Key 38 : :38DW 0226h ;; Key 39 : :39DW 0427h ;; Key 40 : :40DW 0628h ;; Key 41 : :41DW 0529h ;; Key 42 : :42DW 052ah ;; Key 43 : :43DW 042bh ;; Key 44 : :44DW 052ch ;; Key 45 : :45DW 042dh ;; Key 46 : :46 DW 042eh ;; Key 47 : :47 DW 032fh ;; Key 48 : :48 DW 0630h ;; Key 49 : :49 DW 0531h ;; Key 50 : :50 DW 0532h ;; Key 51 : :51 DW 0433h ;; Key 52 : :52 DW 0534h ;; Key 53 : :53 DW 0435h ;; Key 54 : :54 DW 0436h ;; Key 55 : :55 DW 0337h ;; Key 56 : :56 DW 0538h ;; Key 57 : :57 DW 0439h ;; Key 58 : :58 DW 043ah ;; Key 59 : :59 DW 033bh ;; Key 60 : :60 DW 043ch ;; Key 61 : :61 DW 033dh ;; Key 62 : :62 DW 033eh ;; Key 63 : :63 DW 023fh ;; Key 64 : :64 END;;*****************************************************;@***** Filename : SONY.FORMAT (Remote 64KEY) ******;@************** OSC:455KHz CARRY:38KHz ***********;@****************** HT48CA0 ******************;;*****************************************************SONY .SECTION 'DATA'a_REM_CODE DB ? ;KEY DATA CODEa_KEY_TEMP DB ? ;KEY DELAY TIME OFFSET COUNT a_Category DB ? ;SAVE Category Code#define CATEGORY 00000100b ;04H;@------------------------------------------------SONY_CODE .SECTION 'CODE';@************* SUBROUTINE[xx]: Send Remote Code ************SEND_REMOTE_CODE:clr WDT ;CHECK VALIDITY KEYSZ fg_SendActiveJMP READY_SENDretREADY_SEND:SONY_CODE:mov A,a_KEY_NUM ;READ KEY DATAmov M_TBLP,AC. SONY Format(68cycle)(136cycle)(11H)(44H)EX.TABRDL a_REM_CODEMOV A,CATEGORY ;READ CATEGORY CODEMOV a_Category,A;;--- Starting send SONY Remote code ---SEND_SONY:SIZA a_REM_CODE ;Check No Key Code ffHJMP LEADSY_CODEretLEADSY_CODE:clr pn_IR ;High Level 2.4ms (455KHz:273 Cycle) mov A,89d ; [(3*91)= 273mov M_ACC,ALEADIND_CODE_00:SDZ M_ACCJMP LEADIND_CODE_00clr wdtCLR a_KEY_TEMP;;---------------------------------------DATASY_BIT: ;SEND KEY DATA CODEmov A,007dmov a_SR11,A ; 7 data bitDATSY_BIT_BL: ;0.6ms->68 CycleSET pn_IR ;[(3*22)+2]=59mov A,22dDATSY_BIT_BL_1:SDZ M_ACCJMP DATSY_BIT_BL_1clr wdtDATSY_BIT_BH: ;'0' 0.6ms->68 CycleCLR pn_IR ;'1' 1.2ms->136 Cyclerr a_REM_CODE ;mov A,19dSZ a_REM_CODE.7mov A,42dDATSY_BIT_BH_0:SDZ M_ACCJMP DATSY_BIT_BH_0clr wdtSNZ a_REM_CODE.7INC a_KEY_TEMP ;COUNT DELAY TIME OFFSETNOPSDZ a_SR11JMP DATSY_BIT_BL;--------------------------------CATESY_BIT: ;SEND Category Codemov A,005dmov a_SR11,A ; 5 Category BitCATSY_BIT_BL: ;0.6ms->68 CycleSET pn_IR ;[(3*22)+2]=59mov A,22dCATSY_BIT_BL_1:SDZ M_ACCJMP CATSY_BIT_BL_1clr wdtCATSY_BIT_BH: ;'0' 0.6ms->68 CycleCLR pn_IR ;'1' 1.2ms->136 Cyclerr a_Category ;mov A,20dSZ a_Category.7mov A,43dCATSY_BIT_BH_0:SDZ M_ACCJMP CATSY_BIT_BH_0clr wdtSDZ a_SR11JMP CATSY_BIT_BLSET pn_IR;------------------------;--- delay factor ;;DELSY_CODE_00:SZ a_KEY_TEMP ;CHECK DELAY TIME OFFSET COUNTJMP DELSY_PROJMP SEND_ENDDELSY_PRO:MOV A,a_KEY_TEMPMOV a_SR11,ADELSY_LP:mov A,21d ;0.6ms ->68CycleDELSY_BIT_BL_1:SDZ M_ACCJMP DELSY_BIT_BL_1clr wdtNOPSDZ a_SR11JMP DELSY_LP;--- Frame Delay Time Process ---;mov A,001d ;Repetition time=45ms (5119 Cycle) mov a_SR13,A ;Scan Key = 2471 Cycle;Send Code = 2473 CycleFDTP_LOOP_01: ;5119-2471-2473=175mov A,42d ;[(4*42)+5]*1=173mov M_ACC,AFDTP_LOOP_02:nopSDZ M_ACCJMP FDTP_LOOP_02clr wdtSDZ a_SR13JMP FDTP_LOOP_01SEND_END:ret;;%%%%%%%%%%%%%%%%%%%%%%%%% Remote Table Array %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% org 300h;@ --000000 00000000;; |||||||;; +++++++-- 7 bit Data code;; SONY KeyDW 00ffh ;; Key 00 : --- :00DW 0000h ;; Key 1 : --- :03DW 0001h ;; Key 2 : :04DW 0002h ;; Key 3 : :05DW 0003h ;; Key 4 : :06DW 0004h ;; Key 5 : :07DW 0005h ;; Key 6 : :08DW 0006h ;; Key 7 : :09DW 0007h ;; Key 8 : :10DW 0008h ;; Key 9 : :09DW 0009h ;; Key 10 : :10DW 000ah ;; Key 11 : :11DW 000bh ;; Key 12 : :12DW 000ch ;; Key 13 : :13DW 000dh ;; Key 14 : :14DW 000eh ;; Key 15 : :15DW 000fh ;; Key 16 : :16DW 0010h ;; Key 17 : :17DW 0011h ;; Key 18 : :18DW 0012h ;; Key 19 : :19DW 0013h ;; Key 20 : :20DW 0014h ;; Key 21 : :21DW 0015h ;; Key 22 : :22DW 0016h ;; Key 23 : :23DW 0017h ;; Key 24 : :24DW 0018h ;; Key 25 : :25DW 0019h ;; Key 26 : :26DW 001ah ;; Key 27 : :27DW 001bh ;; Key 28 : :28DW 001ch ;; Key 29 : :29DW 001dh ;; Key 30 : :30DW 001eh ;; Key 31 : :31DW 001fh ;; Key 32 : :32DW 0020h ;; Key 33 : :33DW 0021h ;; Key 34 : :34DW 0022h ;; Key 35 : :35DW 0023h ;; Key 36 : :36DW 0024h ;; Key 37 : :37DW 0025h ;; Key 38 : :38DW 0026h ;; Key 39 : :39DW 0027h ;; Key 40 : :40DW 0028h ;; Key 41 : :41DW 0029h ;; Key 42 : :42 DW 002ah ;; Key 43 : :43 DW 002bh ;; Key 44 : :44 DW 002ch ;; Key 45 : :45 DW 002dh ;; Key 46 : :46 DW 002eh ;; Key 47 : :47 DW 002fh ;; Key 48 : :48 DW 0030h ;; Key 49 : :49 DW 0031h ;; Key 50 : :50 DW 0032h ;; Key 51 : :51 DW 0033h ;; Key 52 : :52 DW 0034h ;; Key 53 : :53 DW 0035h ;; Key 54 : :54 DW 0036h ;; Key 55 : :55 DW 0037h ;; Key 56 : :56 DW 0038h ;; Key 57 : :57 DW 0039h ;; Key 58 : :58 DW 003ah ;; Key 59 : :59 DW 003bh ;; Key 60 : :60 DW 003ch ;; Key 61 : :61 DW 003dh ;; Key 62 : :62 DW 003eh ;; Key 63 : :63 DW 003fh ;; Key 64 : :64 END;;***************************************************** ;@** Filename : PHILIPS.FORMAT (Remote 64KEY) **** ;@************** OSC:429KHz CARRY:36KHz *********** ;@****************** HT48CA0 ****************** ;;***************************************************** PHILIPS .SECTION 'DATA'a_REM_CODE DB ? ;KEY DATA CODEa_FACTOR DB ? ;KEY DATA DELAY TIME FACTOR a_CUSTOMER_1 DB ? ;CUSTOMER CODEa_CONTROL_BIT DB ? ;SAVE CONTROL BIT FLAG ;@------------------------------------------------ PHILIPS_CODE .SECTION 'CODE';;========================================================================== ;@************* SUBROUTINE[xx]: Send Remote Code ************ SEND_REMOTE_CODE:clr WDT ;CHECK VALIDITY KEY SZ fg_SendActive JMP READY_SEND retREADY_SEND:M3010_CODE:mov A,a_KEY_NUM ;READ KEY DATA mov M_TBLP,A ; TABRDL a_REM_CODE ; RL a_REM_CODE ; RL a_REM_CODE ;MOV A,M_TBLH ;READ SYSTEM CODED. M3010(PHILIPS FORMAT)(SAA3010)(HT6230)bit(New key1,0 Repeat)114.573ms => 12288 cyclePS. system code => 00H ~ 1FH command code => 00H ~ 3FH(Carry 36KHz)EX.( OSC : 429KHz Carry : 36KHz )RL M_ACCRL M_ACCMOV a_CUSTOMER_1,ASNZ fg_REPEAT ;INC a_CONTROL_BIT ;NEW KEY 1&0 REPEAT;;--- Starting send 6121 Remote code ---SEND_M3010:SIZA a_REM_CODE ;CHECK NO KEY CODE ffH JMP START_BITretSTART_BIT: ;START BITE 11BSAT_BIT1:SET pn_IRSAT_BIT1_PRO: ;895uS->102 cycle "LOW" MOV A,33d ;[(3*33)+2]=101SAT_BIT1P1:SDZ M_ACCJMP SAT_BIT1P1clr wdtNOPCLR pn_IR ;895uS->102 cycle "HIGH" MOV A,32d ;[(3*33)+2]=101SAT_BIT1P2:SDZ M_ACCJMP SAT_BIT1P2clr wdtSZ a_REM_CODE.0JMP SAT_BIT3SAT_BIT2:NOP2SET pn_IRSAT_BIT2_PRO: ;895uS->102 cycle "LOW" MOV A,33d ;[(3*33)+2]=101SAT_BIT1P3:SDZ M_ACCJMP SAT_BIT1P3clr wdtNOPCLR pn_IR ;895uS->102 cycle "HIGH" MOV A,32d ;[(3*33)+2]=101SAT_BIT1P4:SDZ M_ACCJMP SAT_BIT1P4clr wdtJMP SEND_CRT;--------SAT_BIT3:NOP。
HT49CVX 遥控接收软件模块设计指南文件编码:HA0077s概述本软件模块用于接收译码编码格式为NEC格式(见图1) 的红外遥控器信号,由于使用了RMT TIMER,所以适用于带有RMT TIMER功能的HT49CVX系列。
功能及原理本软件模块适用译码NEC格式的红外编码,NEC格式如下图所示:图1 NEC编码格式使用时请将红外信号接到PC.7/RMT引脚,由波形的上升和下降缘触发RMTTIMER来记录高、低准位的宽度,每记录一对高低准位后,再采用相对宽度的方法,即判断高准位与低准位的宽度的相对大小,来判定接收到该bit的信号是bit ″0″或bit ″1″。
在接收Lead Code和Repeat Code的时候,则是采用判断相对宽度和判断高低准位的宽度是否在给定的范围里面相结合的方法,例如,在系统频率为4MHz时,如果lo_count>hi_count 并且 lo_l<lo_count<lo_h并且hi_l<hi_count<hi_h,则认为接收到的该bit为Lead Code或者为RepeatCode。
(注:实际应用时,一般情况下,实际接收到的波形与图1所示的波形,高低准位正好相反。
lo_count为实际低准位宽度,hi_count为实际高准位宽度,如图2;lo_l,lo_h,hi_l,hi_h分别是低准位和高准位的宽度范围)。
使用者应注意的是,在自己的系统频率不是4MHz时,应相应地修改在receiver_define.asm文件里的lo_l,lo_h,hi_l,hi_h四个常数,否则程序不能正常运行!图2在接收到第一对高低准位后,随即判断该bit是否为Lead Code,如果不是,则软件模块将自行初始化;如果是,则继续接收以后的讯号,在接收完全部的Custom Code和Data Code后,将判断接收到的Custom Code是否与预置的一致并且Data Code的高低字节是否互反,如果不是,则软件模块将自行初始化;如果接收有效,则设立旗标为有效值,并继续判断是否有Repeat Code进入,若有,则设立对应旗标为有效值。