📄 ir32b02.asm
字号:
;**********************************************************;地穝IR 2in1-P VER 01 DATE:2004-08-06;**********************************************************; 73key;----------------------------------------------------------; PC20, OSC=4MHz, WDT_off, Advance;----------------------------------------------------------; NEC6122 32bit(DVD) + HS3004(TV);----------------------------------------------------------INDF EQU 00HTMR0 EQU 01HPCL EQU 02HSTATUS EQU 03HFSR equ 04HPA EQU 05H ;PORT APB EQU 06H ;PORT BPC EQU 07H ;PORT C;----------------------------------------------------------rflag equ 08hbrep equ 0 ;130msb64 equ 1 ;65.536msbeff equ 2 ;for NT changebtv equ 3 ;TV keybnt equ 4 ;NT bitbkey equ 5 ;TV DVD key actbcode equ 6 ;TV code out;----------------------------------------------------------;----------------------------------------------------------rkey equ 0ah ;key value=1-36rkeyt equ 0bh ;key tmp counterrkeyc equ 0ch ;key on count, double key checkrpb equ 0dh ;port B statusrirc equ 0eh ;ir pulse countrcode1 equ 10h ;control codercode2 equ 11h ;data codercode3 equ 12hrcode4 equ 13hrcode5 equ 14hrcode6 equ 15hrshift equ 18h ;ir out data bit countrtmp equ 1bh ;ir pulse countrsub equ 1ch ;delay sub countrout equ 1dh ;for ir data out;---------------------------------------------------------- ORG 0x7ff GOTO start;---------------------------------------------------------- ORG 0 GOTO start;----------------------------------------------------------ir01 BSF pa,0 ;9+17delay01 CLRWDT NOP NOP NOP NOP NOP NOP NOP BCF pa,0 NOP NOP NOP NOP NOP NOP NOP NOP NOP RETLW 0;----------------------------------------------------------ir3044 movlw .7 ;7*26=182us movwf rtmpir304401 CALL ir01 DECFSZ rtmp,1 GOTO ir304401 retlw 00h;----------------------------------------------------------delay3044h movlw .91 ;283*26=7358u(7.36ms) movwf rtmp goto delay02delay3044 movlw .191 ;192*26=4992u(5ms) movwf rtmp GOTO delay02;----------------------------------------------------------irout movlw .22 ;22*26=572us movwf rtmpirout01 CALL ir01 DECFSZ rtmp,1 GOTO irout01 retlw 00h;----------------------------------------------------------delayh movlw .43 ;86*26=2236 movwf rtmp goto delay02delay movlw .21 ;43*26=1118 movwf rtmpdelay02 nop CALL delay01 DECFSZ rtmp,1 GOTO delay02 retlw 00h;----------------------------------------------------------row_b0 movf pb,0 movwf rtmp movf rpb,0 xorwf rtmp,1 INCF rkeyt,1 btfsc rtmp,0 CALL row_keyrow_b1 INCF rkeyt,1 btfsc rtmp,1 CALL row_keyrow_b2 INCF rkeyt,1 btfsc rtmp,2 CALL row_keyrow_b3 INCF rkeyt,1 btfsc rtmp,3 CALL row_keyrow_b4 INCF rkeyt,1 btfsc rtmp,4 CALL row_keyrow_b5 INCF rkeyt,1 btfsc rtmp,5 CALL row_keyrow_b6 INCF rkeyt,1 btfsc rtmp,6 CALL row_keyrow_b7 INCF rkeyt,1 btfsc rtmp,7 CALL row_key RETLW 0row_key INCF rkeyc,1 MOVF rkeyt,0 MOVWF rkey RETLW 0;----------------------------------------------------------convert_dvd ;6122 ADDWF PCL,1 retlw 0ffh retlw 0ffh retlw 0ffh retlw 0ffh ;4 retlw 0ffh retlw 0ffh retlw 0ffh retlw 0ffh ;8 retlw 0ffh retlw 0ffh retlw 0ffh retlw 0ffh ;12 retlw 0ffh retlw 0ffh retlw 0ffh retlw 0ffh ;16 retlw 0ffh retlw 09h retlw 05h retlw 01h ;20 retlw 4bh retlw 47h retlw 43h retlw 4ah ;24 retlw 46h retlw 42h retlw 41h retlw 45h ;28 retlw 0ffh retlw 0ffh retlw 51h retlw 5eh ;32 retlw 4fh retlw 5ch retlw 1ch retlw 56h ;36 retlw 00h retlw 02h retlw 06h retlw 12h ;40 retlw 0eh retlw 52h retlw 1ah retlw 0dh ;44 retlw 0ah retlw 44h retlw 4dh retlw 5dh ;48 retlw 4ch retlw 06h retlw 40h retlw 58h ;52 retlw 5fh retlw 48h retlw 5ah retlw 0fh ;56 retlw 4eh retlw 14h retlw 18h retlw 54h ;60 retlw 03h retlw 07h retlw 0ffh retlw 49h ;64 retlw 0bh retlw 0ch retlw 10h retlw 50h ;68 retlw 55h retlw 59h retlw 0ffh ;EX8->TV/DVD retlw 08h ;72 retlw 04h;----------------------------------------------------------convert_tv ADDWF PCL,1 retlw 18h retlw 01h retlw 0ffh retlw 0ffh ;4 retlw 25h retlw 1bh retlw 0dh retlw 1dh ;8 retlw 33h retlw 2dh retlw 0eh retlw 29h ;12 retlw 35h retlw 09h retlw 36h retlw 15h ;16 retlw 2bh retlw 22h retlw 12h retlw 32h ;20 retlw 0ah retlw 2ah retlw 1ah retlw 1eh ;24 retlw 06h retlw 26h retlw 02h retlw 16h ;28 retlw 05h retlw 24h retlw 23h retlw 0ffh ;32 retlw 0ffh retlw 0ffh retlw 0ffh retlw 0ffh ;36 retlw 0ffh retlw 0ffh retlw 0ffh retlw 0ffh ;40 retlw 0ffh retlw 0ffh retlw 0ffh retlw 0ffh ;44 retlw 0ffh retlw 0ffh retlw 0ffh retlw 0ffh ;48 retlw 0ffh retlw 0ffh retlw 0ffh retlw 0ffh ;52 retlw 0ffh retlw 0ffh retlw 0ffh retlw 18h ;56 retlw 14h retlw 1ch retlw 0ch retlw 34h ;60 retlw 08h retlw 20h retlw 28h retlw 0ffh ;64 retlw 0ffh retlw 0ffh retlw 0ffh retlw 0ffh ;68 retlw 0ffh retlw 0ffh retlw 0ffh ;EX8->TV/DVD retlw 0ffh ;72 retlw 0ffh;----------------------------------------------------------start; btfsc status,4; GOTO init; goto key_checkinit clrf rflagkey_check clrwdt movlw 0ffh ;PB=in tris pb movlw 00h tris pc ;pc=out movlw 0ffh ; movwf pc movlw 00h tris pa movlw 08h movwf pa clrf rkeyc clrf rkey clrf rkeyt bcf rflag,b64 clrf tmr0 movlw 07h ;tmr0/256 option btfsc pb,7 goto key_ck01 btfsc pb,7 goto key_ck01 movlw .73 movwf rkey goto L_124key_ck01key_ck02 clrf pc clrf pa nop nop nop movf pb,0 movwf rpb bsf pc,0 CALL row_b0 BcF pc,0 bsf pc,1 CALL row_b0 BcF pc,1 bsf pc,2 CALL row_b0 BcF pc,2 Bsf pc,3 CALL row_b0 BcF pc,3 bsf pc,4 CALL row_b0 BcF pc,4 bsf pc,5 CALL row_b0 BcF pc,5 bsf pc,6 CALL row_b0 BcF pc,6 bsf pc,7 CALL row_b0 BcF pc,7 bsf pa,3 CALL row_b0 BcF pa,3 clrf pa clrf pc MOVLW 0x1 SUBWF rkeyc,0 BTFSS STATUS,2 GOTO sleep00L_124 movlw .3 ;TV key xorwf rkey,0 btfss status,2 goto key_01 btfsc rflag,bkey goto wait01 bsf rflag,bkey bsf rflag,btv goto wait01key_01 movlw .4 ;DVD key xorwf rkey,0 btfss status,2 goto key_02 btfsc rflag,bkey goto wait01 bsf rflag,bkey bcf rflag,btv goto wait01key_02 movlw .71 ;DVD/TV key xorwf rkey,0 btfss status,2 goto key_03 btfsc rflag,bkey goto wait01 bsf rflag,bkey movlw 08h ;/btv xorwf rflag,1 goto wait01wait01 btfss rflag,btv goto wait02 bsf pa,1 ;TV led goto waitwait02 bsf pa,2 ;DVD led goto waitkey_03 btfss rflag,btv ;TV mode goto key_dvd;----------------------------------------------------------; DATA HS3044 11bits; 1,NT,S2,S1,S0,D5,D4,D3,D2,D1,D0;----------------------------------------------------------key_tv decf rkey,0 call convert_tv movwf rcode3 xorlw 0ffh btfsc status,2 goto sleep00 bsf pa,1 ;TV led clrf rcode2 ;change code movlw .6 movwf rshifttv_01 rrf rcode3,1 ;rcode3: 0 1 2 3 4 5 rlf rcode2,1 ;rcode2: 5 4 3 2 1 0 decfsz rshift,1 goto tv_01 bsf rcode2,7 ;S2,S1,S0=1 bsf rcode2,6 movlw 05h movwf rcode1 btfsc rflag,bnt bsf rcode1,1 call ir3044 movlw .11 movwf rshiftout_304401 btfsc rcode1,2 call delay3044h call delay3044 call ir3044 rlf rcode2,1 rlf rcode1,1 decfsz rshift,1 goto out_304401 bsf rflag,beff call delay3044 ;delay10ms call delay3044 bsf rflag,b64 bsf rflag,bcode goto wait;----------------------------------------------------------; DATA 6122 32bits; C0-C7,C'0-C'7,D0-D7,/D0-/D7;----------------------------------------------------------key_dvd decf rkey,0 call convert_dvd movwf rcode3 xorlw 0ffh btfsc status,2 goto key_tv bsf pa,2 ;DVD led movlw 00h movwf rcode1 movlw 0ffh movwf rcode2 comf rcode3,0 movwf rcode4out_6122 clrf rsub ;head 9ms(346pulse) movlw .90 ;346*26=8996us movwf rtmpir9ms_2 CALL ir01 DECFSZ rtmp,1 GOTO ir9ms_2 clrf rtmpir9ms CALL ir01 DECFSZ rtmp,1 GOTO ir9ms movlw .173 ;head space=4.5ms btfsc rflag,brep movlw .86 ;repeat head space=2.236ms movwf rtmpwait4ms nop CALL delay01 DECFSZ rtmp,1 GOTO wait4ms call irout btfsc rflag,brep goto wait movlw .32 movwf rshiftout_ctl rrf rcode4,1 rrf rcode3,1 rrf rcode2,1 rrf rcode1,1 btfsc status,0 call delayh call delay call irout decfsz rshift,1 goto out_ctl bsf rflag,brep bsf rflag,b64;----------------------------------------------------------wait ;wait 108ms clrwdt movf tmr0,0 btfsc status,2 bsf rflag,b64 movlw .165 xorwf tmr0,0 btfss status,2 goto wait btfss rflag,b64 goto wait bcf rflag,b64 btfss rflag,bcode goto key_check bcf rflag,bcode call delay3044 ;delay28ms call delay3044 call delay3044 call delay3044 call delay3044 call delay3044h call delayh goto key_check;----------------------------------------------------------sleep00 btfss rflag,beff goto sleep01 bcf rflag,beff btfss rflag,bnt goto sleep02 bcf rflag,bnt goto sleep01sleep02 bsf rflag,bntsleep01 bcf rflag,brep bcf rflag,bkey MOVLW 0ffh TRIS pb MOVLW 0 TRIS pc MOVLW 00h MOVWF pc MOVLW 0 TRIS pa MOVLW 0 MOVWF pa nop nop SLEEP nop nop goto key_check ;---------------------------------------------------------- END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -