📄 dmxout.asm
字号:
mov dmxdataposition_low,#low(526)
mov dmxdataposition_high,#high(526)
mov dmxdatareg,csr5store
lcall ram_write
mov dmxdataposition_low,#low(527)
mov dmxdataposition_high,#high(527)
mov dmxdatareg,csr6store
lcall ram_write
mov dmxdataposition_low,#low(528)
mov dmxdataposition_high,#high(528)
mov dmxdatareg,csr7store
lcall ram_write
mov dmxdataposition_low,#low(529)
mov dmxdataposition_high,#high(529)
mov dmxdatareg,csr8store
lcall ram_write
ret
;*****************************************
;************************************
write_hopping_eram_high:
;************************************
mov dmxdataposition_low,#low(551)
mov dmxdataposition_high,#high(551)
mov dmxdatareg,csr0store
lcall ram_write
mov dmxdataposition_low,#low(552)
mov dmxdataposition_high,#high(552)
mov dmxdatareg,csr1store
lcall ram_write
mov dmxdataposition_low,#low(553)
mov dmxdataposition_high,#high(553)
mov dmxdatareg,csr2store
lcall ram_write
mov dmxdataposition_low,#low(554)
mov dmxdataposition_high,#high(554)
mov dmxdatareg,csr3store
lcall ram_write
mov dmxdataposition_low,#low(555)
mov dmxdataposition_high,#high(555)
mov dmxdatareg,csr4store
lcall ram_write
mov dmxdataposition_low,#low(556)
mov dmxdataposition_high,#high(556)
mov dmxdatareg,csr5store
lcall ram_write
mov dmxdataposition_low,#low(557)
mov dmxdataposition_high,#high(557)
mov dmxdatareg,csr6store
lcall ram_write
mov dmxdataposition_low,#low(558)
mov dmxdataposition_high,#high(558)
mov dmxdatareg,csr7store
lcall ram_write
mov dmxdataposition_low,#low(559)
mov dmxdataposition_high,#high(559)
mov dmxdatareg,csr8store
lcall ram_write
ret
;*****************************************
write_tagerat:
mov dmxdataposition_low,#low(515)
mov dmxdataposition_high,#high(515)
mov dmxdatareg,#79
lcall ram_write
mov dmxdataposition_low,#low(516)
mov dmxdataposition_high,#high(516)
mov dmxdatareg,#09
lcall ram_write
mov dmxdataposition_low,#low(517)
mov dmxdataposition_high,#high(517)
mov dmxdatareg,#12
lcall ram_write
mov dmxdataposition_low,#low(518)
mov dmxdataposition_high,#high(518)
mov dmxdatareg,#26
lcall ram_write
ret
;*****************************************
write_other:
mov dmxdataposition_low,#low(530)
mov dmxdataposition_high,#high(530)
mov dmxdatareg,th0
lcall ram_write
mov dmxdataposition_low,#low(531)
mov dmxdataposition_high,#high(531)
mov dmxdatareg,tl0
lcall ram_write
mov dmxdataposition_low,#low(532)
mov dmxdataposition_high,#high(532)
mov dmxdatareg,r0
lcall ram_write
mov dmxdataposition_low,#low(533)
mov dmxdataposition_high,#high(533)
mov dmxdatareg,r1
lcall ram_write
mov dmxdataposition_low,#low(534)
mov dmxdataposition_high,#high(534)
mov dmxdatareg,r2
lcall ram_write
mov dmxdataposition_low,#low(535)
mov dmxdataposition_high,#high(535)
mov dmxdatareg,r3
lcall ram_write
mov dmxdataposition_low,#low(536)
mov dmxdataposition_high,#high(536)
mov dmxdatareg,CNT0
lcall ram_write
mov dmxdataposition_low,#low(537)
mov dmxdataposition_high,#low(537)
mov dmxdatareg,CNT1
lcall ram_write
mov dmxdataposition_low,#low(538)
mov dmxdataposition_high,#high(538)
mov dmxdatareg,CNT2
lcall ram_write
mov dmxdataposition_low,#low(539)
mov dmxdataposition_high,#high(539)
mov dmxdatareg,MASK
lcall ram_write
mov dmxdataposition_low,#low(540)
mov dmxdataposition_high,#high(540)
mov dmxdatareg,KEY7
lcall ram_write
mov dmxdataposition_low,#low(541)
mov dmxdataposition_high,#high(541)
mov dmxdatareg,CSR1
lcall ram_write
mov dmxdataposition_low,#low(542)
mov dmxdataposition_high,#high(542)
mov dmxdatareg,CSR0
lcall ram_write
mov dmxdataposition_low,#low(543)
mov dmxdataposition_high,#high(543)
mov dmxdatareg,#sp_reg
lcall ram_write
mov dmxdataposition_low,#low(544)
mov dmxdataposition_high,#high(544)
mov dmxdatareg,outdelayh
lcall ram_write
mov dmxdataposition_low,#low(545)
mov dmxdataposition_high,#high(545)
mov dmxdatareg,outdelayl
lcall ram_write
ret
;**********************************
delay_timer:
clr tf0 ; #0d3h
mov tl0,#01h;#0fbh;#0e7h;#0d3h ;150us ; 90 88us delay at 150us --130us
mov th0,#00h ;#0feh
setb tr0
jnb tf0,$
clr tf0
clr tr0
ret
;****************************************
;****************************************
;****************************************
;*************************************************************************
;* RECEIVE() : Keeloq FOR 16mhz *
;*************************************************************************
KEQ_RECEIVE: CLR TCON.4 ; [2] Normal is Low on Keeloq input pin
MOV TH0,#00
MOV TL0,#00
SETB TCON.4
MOV CNT0,#00 ; [2] Normal is Low on Keeloq input pin
MOV CNT1,#00 ; [2]
MOV CNT2,#23 ; [2] Preamble Counter=23
MOV HOP_LENGTH,#66 ; [2]
;
CNT2_LP_23: JB KEELOQ_IN,$ ; [2]1 Is KEELOQ_IN = LOW ? Yes, Goto Calibrate portion
CLR TCON.4
MOV CNT0,TL0
MOV CNT1,TH0
;
MOV TH0,#00
MOV TL0,#00
SETB TCON.4
DJNZ CNT2,CNT2_NZ_LOOP
SJMP CNT2_ZERO
;
CNT2_NZ_LOOP: JNB KEELOQ_IN,$ ; [2]1 Is KEELOQ_IN = High ? Yes, Goto Calibrate portion
CLR TCON.4
MOV CNT0,TL0
MOV CNT1,TH0
;
MOV TH0,#00
MOV TL0,#00
SETB TCON.4
DJNZ CNT2,CNT2_LP_23
SJMP KQ_RECEIVE_Fail
;
CNT2_ZERO: MOV A,CNT1
CJNE A,#HIGH(1320),CNT2_CP00 ;660us UP
SJMP CNT2_CPEQ
CNT2_CP00: JNC KQ_RECEIVE_Fail
SJMP CNT2_LOW_CP
;
CNT2_CPEQ: MOV A,CNT0
CJNE A,#LOW(1320),CNT2_CP01
CNT2_CP01: JNC KQ_RECEIVE_Fail
;
CNT2_LOW_CP: MOV A,CNT1
CJNE A,#HIGH(520),CNT2_CP10 ;260us LOW
SJMP CNT2_CPEQ1
CNT2_CP10: JC KQ_RECEIVE_Fail
SJMP CNT2_CP_PASS
;
CNT2_CPEQ1: MOV A,CNT0
CJNE A,#LOW(520),CNT2_CP11
CNT2_CP11: JC KQ_RECEIVE_Fail
;
CNT2_CP_PASS: MOV A,CNT1
MOV R1,A ;TE Strore R1,R0
MOV A,CNT0
MOV R0,A
MOV A,CNT1
CLR C
RRC A
MOV CNT1,A ;1/2 TE Store CNT1,CNT0
MOV A,CNT0
RRC A
MOV CNT0,A
SJMP KQ_REC_HEADER
;
KQ_RECEIVE_Fail:LCALL HP_RESTORENO
CLR C
RET
KQ_REC_HEADER:
JNB KEELOQ_IN,$ ;Is KEELOQ_IN = High ? Yes, Goto Calibrate portion
CLR TCON.4
CLR TF0
MOV R2,TL0 ;SAVE FOR CACULATE HEADER
MOV R3,TH0 ;IS OVER TIME NO?,OR YES?
;
MOV A,#LOW(65536)
CLR C
SUBB A,CNT0 ;1/2 TE
MOV TL0,A
MOV A,#HIGH(65536)
SUBB A,CNT1
MOV TH0,A ;1/2 TE
SETB TCON.4
;-----------Calculator Header time Over or less-;
MOV B,#12
LCALL KQ_TE_MUL
MOV A,R3
CJNE A,DPH,KQ_TE_CA001
KQ_TE_CA001: JNC KQ_RECEIVE_Fail
MOV B,#08
LCALL KQ_TE_MUL
MOV A,R3
CJNE A,DPH,KQ_TE_CA002
KQ_TE_CA002: JC KQ_RECEIVE_Fail
SJMP KQ_REC_HEAD1
;-----------------------------------------------;
KQ_REC_HEAD0: JNB KEELOQ_IN,$ ;Is KEELOQ_IN = High ? Yes, Goto Calibrate portion
CLR TCON.4
CLR TF0
MOV A,#LOW(65536)
CLR C
SUBB A,CNT0 ;1/2 TE
MOV TL0,A
MOV A,#HIGH(65536)
SUBB A,CNT1
MOV TH0,A ;1/2 TE
SETB TCON.4
;-----------------------------------------------;
KQ_REC_HEAD1: JNB TF0,$ ;TIME OVER
CLR TCON.4
CLR TF0
;
MOV A,#LOW(65536)
CLR C
SUBB A,R0 ;TE
MOV TL0,A
MOV A,#HIGH(65536)
SUBB A,R1 ;TE
MOV TH0,A
SETB TCON.4
;
JNB KEELOQ_IN,KQ_RECEIVE_Fail ;Is KEELOQ_IN = Low ?
;
JNB TF0,$ ;TIME OVER
CLR TCON.4
CLR TF0
;
MOV A,#LOW(65536)
CLR C
SUBB A,R0 ;TE
MOV TL0,A
MOV A,#HIGH(65536)
SUBB A,R1 ;TE
MOV TH0,A
SETB TCON.4
;
JNB KEELOQ_IN,KQ_LEVEL ;Is KEELOQ_IN = High ?
CLR C
SJMP KQ_REC_DATA
KQ_LEVEL: SETB C
KQ_REC_DATA: LCALL ROT_CSRs
JNB TF0,$ ;TIME OVER
JNB KEELOQ_IN,KQ_LEVEL_L
LJMP KQ_RECEIVE_Fail ;Is KEELOQ_IN = High ?
KQ_LEVEL_L: DJNZ HOP_LENGTH,KQ_REC_HEAD0
;-----------------------------------------------;
RECEIVE_A_FRAME:
MOV CNT1,#6 ; 72 - 66 = 6 bit Don't need shiht, return
ROT_Adjust: CLR C
LCALL ROT_CSRs ; [31]
DJNZ CNT1,ROT_Adjust
Rec_Exit: LCALL HP_RESTOREYES
SETB C
RET
;
KQ_TE_MUL: MOV DPL,#00
MOV DPH,#00
KQ_TE_CA000: MOV A,R0 ;LOAD TE
ADD A,DPL
MOV DPL,A
MOV A,R1
ADDC A,DPH
MOV DPH,A
DJNZ B,KQ_TE_CA000
RET
;
;HOPPING KEELOQ
;*****************************************************
;**** Rotate CSRs register right 1 bit ; [31]
;*****************************************************
;HOPPING KEELOQ
;
ROT_CSRs: ; [2]
MOV A,CSR8 ; [1]
RRC A ; [1]
MOV CSR8,A ; [1]
;
MOV A,CSR7 ; [1]
RRC A ; [1]
MOV CSR7,A ; [1]
;
MOV A,CSR6 ; [1]
RRC A ; [1]
MOV CSR6,A ; [1]
;
MOV A,CSR5 ; [1]
RRC A ; [1]
MOV CSR5,A ; [1]
;
MOV A,CSR4 ; [1]
RRC A ; [1]
MOV CSR4,A ; [1]
;
MOV A,CSR3 ; [1]
RRC A ; [1]
MOV CSR3,A ; [1]
;
MOV A,CSR2 ; [1]
RRC A ; [1]
MOV CSR2,A ; [1]
;
MOV A,CSR1 ; [1]
RRC A ; [1]
MOV CSR1,A ; [1]
;
MOV A,CSR0 ; [1]
RRC A ; [1]
MOV CSR0,A ; [1]
RET ; [2]
;
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -