首页 三菱,索尼,飞利普,东芝等6种红外遥控器编码及程序

三菱,索尼,飞利普,东芝等6种红外遥控器编码及程序

举报
开通vip

三菱,索尼,飞利普,东芝等6种红外遥控器编码及程序 HT48CA0 APPLICATION NOTE . Application Circuit .Working Register Define ;***************************************************** ;@***** Filename : SAMPLE.ASM (Remote 64KEY) ****** ;@************** ...

三菱,索尼,飞利普,东芝等6种红外遥控器编码及程序
HT48CA0 APPLICATION NOTE . Application Circuit .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 point M_ACC equ [05h] ;Accumulator M_PCL equ [06h] ;Program Counter Lower-order M_TBLP equ [07h] ;Table Pointer M_TBLH equ [08h] ;Table Higher-order byte M_STATUS equ [0ah] ;Micro controll status PORT_A equ [12h] ;PA I/O register PORT_B equ [14h] ;PB I/O register VDD VDD 0.1u 1 K1 240 1 D1 D2 K2 K3 K4 K5 K6 K7 K8 K9 K10 K11 K12 K13 K14 K15 K16 K17 K18 K19 K20 K21 K22 K23 K24 K25 K26 K27 K28 K29 K30 K31 K32 K33 K34 K35 K36 K37 K38 K39 K40 K41 K42 K43 K44 K45 K46 K47 K48 K49 K50 K51 K52 K53 K54 K55 K56 K57 K58 K59 K60 K61 K62 K63 K64 HOLTEK HT48CA0 (64KEY) Q1 Q2 P A 1 P A 0 P B 1 P B 0 P C 0 V D D O SC 2 O SC 1 V S S R E S B N C N C P A 2 P A 3 P A 4 P A 5 P A 6 P A 7 P B 2 P B 3 P B 4 P B 5 P B 6 P B 7 H T 48 C A 0 U 1 1 32 4 5 76 8 9 10 11 12 131415161718192021222324 0.1u 455KHz 300P 300P . 1 2 1 2 100uF 1 2 1 2 12 1 2 1 2 1 2 1 2 PORT_C equ [16h] ;PC Output register PORT_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 Register a_SR11 DB ? ;; a_SR12 DB ? ;; a_SR13 DB ? ;; ;;--------- Program RAM -------- a_SCAN_STEP DB ? ;;Scan Key Colummn Step Number a_PREV_KEY DB ? ;;Save Previous Key Number a_KEY_NUM DB ? ;;Scan Key Number a_COL_VALUE DB ? ;;Read on column value to a_COL_VALUE KD_TEMP DB ? ;;Key Debounce Check Times NKD_TEMP DB ? ;;Key Release Confirm Times ;;--- User FLAG define --- fg_SendActive DBIT ;;VALIDITY KEY Flag fg_PressRec DBIT ;;Check Column Multi_Key Flag fg_REPEAT DBIT ;;REPEAT KEY Flag fg_Multi_Key DBIT ;;INVALID KEY Flag START INITIATE DATA SCAN KEY fg_Multi_Key =1 SEND CODE HALT HT48CA0 REMOTE CONTROL FLOWCHART NO fg_SendActive =1 NO YES YES Any Key WakeUp CHECK INVALID KEY CHECK NO KEY PRESS KEY_NUM =0 YES NO CHECK VALIDITY KEY TIME DELAY PROCESS KEY_NUM =0 KEY_NUM =a_PREV_KEY SET fg_SendActive CLR fg_REPEAT a_PREV_KEY= KEY_NUM SCAN KEY READ KEY fg_Multi_key =1 KD_TEMP =6 NKD_TEMP =5 RETURN YES NO NO YES NO YES YES NO YES NO SCAN KEY PROCEDURE FLOWCHART CHECK INVALID KEY SET VALIDITY KEY CHECK NO KEY PRESS Release Confirm Debounce Check INC KD_TEMP INC NKD_TEMP SET fg_REPEAT SET REPEAT KEY a_PREV_KEY =0 a_PREV_KEY =0 YES NO Check Change Key KEY_NUM =0 New Key Initiate New Key Press INITIATE fg_PressRec fg_Multi_Key KEY_NUM=0 PORT_A =11111110B SCAN_STEP=1 READ PORT_B NO KEY PRESS Multi-KEY PRESS fg_PressRec =1 SET fg_PressRec KEY NUMBER PROCESS SCAN_STEP =8 END READ KEY SET fg_Multi_Key INC SCAN_STEP RL PORT_A READ KEY PROCEDURE FLOWCHART READ KEY YES NO NO YES YES NO NO YES 64 KEY Matrix (8x8) ----------------------- 8 ROW 8 COLUMN Check ROW Multi-key Check Column Multi-key SET INVALID KEY . Main Program ;;==================================================================== ;@========================= Main Program ============================= ;;==================================================================== SAMPLE_CODE .SECTION 'CODE' org 00h MAIN: ;------------------------------------------ clr WDT ;@ ===== Initial Port ===== ;; +--------- PB7: O PULL-HIGH ;; |+-------- PB6: O PULL-HIGH ;; ||+------- PB5: O PULL-HIGH ;; |||+------ PB4: O PULL-HIGH ;; ||||+----- PB3: O PULL-HIGH TIME DELAY NKD_TEMP =5 SCAN TIME DELAY OFFSET TIME DELAY CLR NKD_TEMP RETURN TIME DELAY PROCEDURE FLOWCHART YES NO INC NKD_TEMP KD_TEMP =0 CLR KD_TEMP YES NO NEW KEY NO TIME OFFSET DELAY Release Confirm Time Offset Delay ;; |||||+---- PB2: O PULL-HIGH ;; ||||||+--- PB1: O PULL-HIGH ;; |||||||+-- PB0: O PULL-HIGH set PORT_A clr 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-HIGH set PORT_B ;; +-- PC0: O PULL-HIGH mov A,11111111b mov PORT_C,A ;@===== Clear RAM ( HT-48CA0 : 20h-3Fh ) ===== CLEAR_RAM: mov A,DATA_RAM ;; 1. RAM Start Address mov M_MP0,A ;; mov A,032d ;; 2. Amount of RAM CLEAR_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 PROCEDURE CALL F_DELAY ;TIME DELAY PROCEDURE CALL SEND_REMOTE_CODE ;SEND CODE PROCEDURE SZ fg_Multi_Key ;Check Invalid Key JMP POLLING_EVENT ; SZ fg_SendActive ;Check Validity Key JMP POLLING_EVENT ; SZ a_KEY_NUM ;Check NO Key Press JMP POLLING_EVENT ; SLEEP: clr PORT_A ;Ready WakeUp Low Level halt ;System Halt JMP POLLING_EVENT ;Any Key WakeUp ;;%%%%%%%%%%%%%%%%%%%%%%%%%% Subroutine Array %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ;@************* SUBROUTINE[xx]: Scan 64 Key Matrix (8x8) ************ SCAN_KEY_MATRIX: ;;--- READ KEY PROCEDURE --- clr wdt ;;Initiate Process clr 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 OUTPUT mov PORT_AC,A ; NOP ; ;;--- READ PB PORT --- SET PORT_B ;;SET PB0,PB1 Pull-Up MOV A,PORT_B ;;Read on column value to a_COL_VALUE mov a_COL_VALUE,A ;; mov A,001d mov a_SR11,A mov A,11111110b ;; mov a_SR10,A mov A,a_COL_VALUE ;; This column value to ACC SNZ a_COL_VALUE.7 JMP KEY_ROW_7 SNZ a_COL_VALUE.6 JMP KEY_ROW_6 SNZ a_COL_VALUE.5 JMP KEY_ROW_5 SNZ a_COL_VALUE.4 JMP KEY_ROW_4 SNZ a_COL_VALUE.3 JMP KEY_ROW_3 SNZ a_COL_VALUE.2 JMP KEY_ROW_2 SNZ a_COL_VALUE.1 JMP KEY_ROW_1 SNZ a_COL_VALUE.0 JMP KEY_ROW_0 NOP2 nop JMP COL_WITHOUT_KEY KEY_ROW_7: rl a_SR10 ;; a_SR10 rotate to "01111111b" inc a_SR11 KEY_ROW_6: rl a_SR10 ;; a_SR10 rotate to "10111111b" inc a_SR11 KEY_ROW_5: rl a_SR10 ;; a_SR10 rotate to "11011111b" inc a_SR11 KEY_ROW_4: rl a_SR10 ;; a_SR10 rotate to "11101111b" inc a_SR11 KEY_ROW_3: rl a_SR10 ;; a_SR10 rotate to "11110111b" inc a_SR11 KEY_ROW_2: rl a_SR10 ;; a_SR10 rotate to "11111011b" inc a_SR11 KEY_ROW_1: rl a_SR10 ;; a_SR10 rotate to "11111101b" inc a_SR11 KEY_ROW_0: xor A,a_SR10 ;;Check ROW Multi-Key SZ fg_ZF JMP COL_WITH_KEY COL_ERROR_KEY: set fg_Multi_Key COL_WITHOUT_KEY: NOP2 NOP2 NOP2 JMP READY_2_NEXT_COLUMN COL_WITH_KEY: ;;KEY NUMBER PROCESS rlA a_SCAN_STEP ;;\ rl M_ACC ;; > a_SCAN_STEP * 8 --> ACC rl M_ACC ;;/ add A,a_SR11 ;; mov a_KEY_NUM,A ;; SZ fg_PressRec ;;Check Column Multi-Key set fg_Multi_Key ;; set fg_PressRec ;; READY_2_NEXT_COLUMN: inc a_SCAN_STEP mov A,a_SCAN_STEP xor A,008d SNZ fg_ZF JMP NEXT_COLUMN nop READ_KEY_COMPLETE: ;@************* SUBROUTINE[xx]: Check Key Active ************ ;@--- Scan Key Complete, Check key valid ? --- CHECK_KEY_ACTIVE: clr wdt SZ a_KEY_NUM ;;If a_KEY_NUM = ffh, invalid key JMP VALID_KEY_CHK JMP INVALID_KEY_CHK ;@-------------------------- VALID_KEY_CHK: SZ a_PREV_KEY ;;Check New Key JMP VALID_KEYC_PRO JMP KEY_DEB VALID_KEYC_PRO: mov A,a_KEY_NUM xor A,a_PREV_KEY ;; Check Repeat key SNZ fg_ZF JMP VALID_SEND_KEY ;;---------------------------- VALID_RPSEND_KEY: snz fg_Multi_key ;Check Multi-Key Clear a_KEY_NUM JMP REPEAT_KEY clr a_KEY_NUM ret REPEAT_KEY: SET fg_REPEAT ;;SET Repeat Flag NOP2 JMP SET_VALIDFG VALID_SEND_KEY: mov a,a_PREV_KEY ;;Check Change Key XOR A,0FFH ;;Check Debounce END SNZ fg_ZF JMP CHANG_KEY ;;--- NEW KEY Initiate CLR fg_REPEAT mov a,a_KEY_NUM mov a_PREV_KEY,a ;;--- SET VALIDITY KEY SET_VALIDFG: SET fg_SendActive ret CHANG_KEY: CLR KD_TEMP JMP RKEY_PRO ;@---------------------------- INVALID_KEY_CHK: CLR KD_TEMP RKEY_PRO: ;Release Key Confirm INC NKD_TEMP MOV A,NKD_TEMP XOR A,5 SNZ fg_ZF JMP SCAN_KEY_MATRIX DEC NKD_TEMP ; NO_KEY_PROC: clr fg_SendActive NOP2 NOP2 NOP EXIT_INVALID_KEY: mov a,a_KEY_NUM ;Clear a_PREV_KEY mov a_PREV_KEY,a NOP2 ret KEY_DEB: ;T1=455KHz/4=116480Hz = 8.79us ;Check Key Debounce INC KD_TEMP MOV A,KD_TEMP XOR A,6 SNZ fg_ZF JMP SCAN_KEY_MATRIX MOV A,0FFH ;SAVE KEY Debounce Check END MOV a_PREV_KEY,A ;0FFH to a_PREV_KEY JMP SCAN_KEY_MATRIX ;@********** SubRoutine[xx]: Delay 10*ACC+5 Instruction Cycle ********** ;;--- TIME DELAY PROCEDURE --- F_DELAY: SZ KD_TEMP JMP NEWK_D MOV A,NKD_TEMP ;Release Confirm time offset delay mov a_SR13,A BLANK_DELAY_00: INC a_SR13 MOV A,a_SR13 XOR A,5 SZ fg_ZF JMP BLANK_DELAY_010 mov A,155d BLANK_DELAY_01: SDZ M_ACC JMP BLANK_DELAY_01 clr wdt JMP BLANK_DELAY_00 BLANK_DELAY_010: CLR NKD_TEMP MOV a,1 ;OFFSET TIME DELAY mov a_SR13,A BLANK_DELAY_02: mov A,37d BLANK_DELAY_03: clr wdt SDZ M_ACC JMP BLANK_DELAY_03 SDZ a_SR13 JMP BLANK_DELAY_02 RET NEWK_D: ;;New Key No Time Offset Delay CLR KD_TEMP RET ;;--------------------------------------- ;@************* SUBROUTINE[xx]: Send Remote Code ************ SEND_REMOTE_CODE: clr WDT SZ fg_SendActive JMP READY_SEND ret READY_SEND: ; REMOTE CODE SEND & DATA FRAME DELAY TIME OFFSET ; ret ;;************************** End of program ********************************* END SEND CODE fg_SendActive =0 READ KEY TABLE READ CUSTOMER CODE a_REM_CODE =ffH Send Lead Code fg_REPEAT =0 Send Customer Code Send Data Code RETURN Send Repeat Code Frame Delay Time Process Repeat Frame Delay Time Process SEND CODE PROCEDURE FLOWCHART YES NO YES NO YES NO CHECK VALIDITY KEY CHECK NO KEY CODE CHECK REPEAT KEY Offset Data Frame Repetition time Offset Data Frame Repetition time KEY DATA Table ( ORG 300H ) A. HT6221 ( NEC FORMAT ) ;;***************************************************** ;@***** Filename : NEC.FORMAT (Remote 64KEY) ****** ;@************** OSC:455KHz CARRY:38KHz *********** ;@****************** HT48CA0 ****************** ;;***************************************************** NEC .SECTION 'DATA' a_REM_CODE DB ? ;KEY DATA CODE a_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 ret READY_SEND: NEC_CODE: mov A,a_KEY_NUM ;READ KEY DATA NEC Format Code C0C1C2C3C4C5C6C7C8C9CaCbCcCdCeCf D0 D1 D2 D3 D4 D5 D6 D7 D0 D1 D2 D3 D4 D5 D6 D7 end 16 Custom bits 8 Data bits 8 Data bits New key First Code Lead Code 9ms 4.5ms 0.56ms Repeat Code 9ms 2.5ms Repetition time 108ms => 12286 cycle First code Repeat Code logic 0 logic 1 1.12ms 2.24ms 0.56ms (63cycle) 0.56ms (Carry 38KHz) (63cycle) (191cycle) end10101111010100000000100000001000 Lead Custom Code Data Code Data Code EX. PS. Custom Code = 0808H Data Code = 50H (284cycle) mov M_TBLP,A TABRDL a_REM_CODE MOV A,CUS_6221_1 ;READ CUSTOMER CODE MOV a_CUSTOMER_1,A MOV A,CUS_6221_2 MOV a_CUSTOMER_2,A ;;--- Starting send NEC Remote code --- SEND_NEC: ;Check No Key Code ffH SIZA a_REM_CODE JMP LEADNEC_CODE ret LEADNEC_CODE: ; 1 Instruction Cycle = 8.79us clr pn_IR ;High Level 9 ms (455KHz:1023 Cycle) mov A,002d ; [(3*168)+5]*2 = 1018 mov a_SR13,A LEADIND_CODE_00: mov A,168d mov M_ACC,A LEADIND_CODE_01: SDZ M_ACC JMP LEADIND_CODE_01 SDZ a_SR13 JMP LEADIND_CODE_00 NOP2 NOP2 NOP set pn_IR clr wdt ;--- mov A,001d ;LOW Level 2.5ms (284Cycle) mov a_SR13,A ; [(4*69)+5]*1 = 281 LEAD_CODE_04: mov A,70d mov M_ACC,A LEAD_CODE_05: NOP SDZ M_ACC JMP LEAD_CODE_05 SDZ a_SR13 JMP LEAD_CODE_04 clr wdt SZ fg_REPEAT ;CHECK REPEAT KEY JMP REPEAT_CODE ;--- mov A,001d ;LOW Level 2.0ms (227Cycle) mov a_SR13,A ; [(4*55)+5]*1 = 225 LEAD_CODE_06: mov A,53d mov M_ACC,A LEAD_CODE_07: NOP SDZ M_ACC JMP LEAD_CODE_07 SDZ a_SR13 JMP LEAD_CODE_06 clr wdt nop2 ;------------------------ CUSNEC_CODE: mov A,002d mov a_SR13,A MOV A,OFFSET a_CUSTOMER_1 MOV M_MP0,A CUSTOM_PRO: mov A,008d mov a_SR11,A ; 8 data bit nop CUSTOM_BIT_BL ;0.56ms->63 Cycle clr pn_IR ;[(3*20)+2]=62 mov A,20d CUSTOM_BIT_BL_1: SDZ M_ACC JMP CUSTOM_BIT_BL_1 clr wdt nop CUSTOM_BIT_BH: ;'0' 0.56ms->63 Cycle set pn_IR ;'1' 1.68ms->191 Cycle nop rr M_INDIRECT1 ; mov A,18d SZ M_INDIRECT1.7 ; mov A,61d CUSTOM_BIT_BH_0: SDZ M_ACC JMP CUSTOM_BIT_BH_0 clr wdt SDZ a_SR11 JMP CUSTOM_BIT_BL INC M_MP0 SDZ a_SR13 JMP CUSTOM_PRO ;;--------------------------------------- DATA6NEC_BIT: mov A,002d mov a_SR13,A DATA_PRO: mov A,008d mov a_SR11,A ;; 8 data bit nop DATA_BIT_BL: ;0.53ms->60 Cycle clr pn_IR ;[(3*19)+2]=59 mov A,20d DATA_BIT_BL_1:
本文档为【三菱,索尼,飞利普,东芝等6种红外遥控器编码及程序】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_005674
暂无简介~
格式:pdf
大小:201KB
软件:PDF阅读器
页数:49
分类:互联网
上传时间:2012-02-18
浏览量:47