📄 dmxout.asm
字号:
djnz dmxdatareg,link_loop
mov dmxdataposition_low,#low(800)
mov dmxdataposition_high,#high(800)
mov dmxdatareg,#00h
lcall ram_write
mov dmxdataposition_low,#low(801)
mov dmxdataposition_high,#high(801)
mov dmxdatareg,#00h
lcall ram_write
;************************
ljmp dmxdataout_allframeoutend
; test code
;******************************************
;dmxdataout_ledfalsh:
; if ledrunfalgs is set the led high ,clear the led clr;
; mov a,ledcount
; jz dmxdataout_notledflash ;not falsh
; djnz dmxtimer1,dmxdataout_ledfalshquit
; mov dmxtimer1,#ledfalshshort;#1
; jnb ledrunfalgs,dmxdataout_ledhighlight
;dmxdataout_ledclear:
; clr ledrunfalgs
; orl p4,#01h
; setb statusled
; djnz ledcount,dmxdataout_ledfalshquit
; mov dmxtimer1,#ledfalshlong;#10
; ljmp dmxdataout_ledfalshquit
;dmxdataout_ledhighlight:
; setb ledrunfalgs
; anl p4,#0eh
; clr statusled
; ljmp dmxdataout_ledfalshquit
;dmxdataout_notledflash: ;;;
; djnz dmxtimer1,dmxdataout_ledfalshquit
; mov dmxtimer1,#ledfalshshort;#1
; mov ledcount,#ledfalshcount;#4
; ljmp dmxdataout_ledfalshquit
;dmxdataout_ledfalshquit:
; ljmp dmxdataout_allframeoutend
;******************************************
; ljmp dmxdataout_allframeoutend
;; position add 1
dmxdataout_allframeoutend:
ljmp dmxdataout_quit
ljmp dmxdataout_quit
dmxdataout_eerorevent:
clr txd
mov dmxdataposition_low,#1
mov dmxdataposition_high,#0
setb dmxframefalgs
setb dmxresetfalgs
ljmp dmxdataout_quit
dmxdataout_quit:
; pop dph
; pop dpl
pop acc
ret
;*****************************************
;****************************************
word_inc:
mov a,dmxdataposition_high
cjne a,#02h,word_addtrue
mov a,dmxdataposition_low
cjne a,#00,word_addtrue
nop
mov dmxdataposition_low,#1
mov dmxdataposition_high,#0
setb runbf
ljmp word_inc_end
word_addtrue:
mov a,dmxdataposition_low
add a,addvar_low
mov dmxdataposition_low,a
mov a,dmxdataposition_high
addc a,addvar_high
mov dmxdataposition_high,a
clr runbf
word_inc_end:
ret
;****************************************
;*****************************************
ram_read:
mov p1,#0f0h
mov p3,#0ffh
mov p2,#04h ;0000 0100
mov p0,dmxdataposition_low
mov a,dmxdataposition_high
orl a,#04h; ; 0000 0100
mov p2,a
anl a,#0fbh ;1111 1011 ce low
mov p2,a
clr rd
nop
mov a,p1
swap a
anl a,#0fh
mov dmxdatareg,a
mov a,p3
rr a
rr a
swap a
anl a,#0f0h
orl dmxdatareg,a
; orl a,dmxdatareg
; mov dmxdatareg,a
mov a,dmxdataposition_high
orl a,#04h;
mov p2,a
setb rd
ret
;*****************************************
ram_write:
mov p1,#0f0h
mov p3,#0ffh
mov p2,#04h ;0000 0100
mov p0,dmxdataposition_low
mov a,dmxdataposition_high ; ce high
orl a,#04h ; 0000 0100
mov p2,a
anl a,#0fbh ; 1111 1011 ; ce low
mov p2,a
clr ramwrite
mov a,dmxdatareg
swap a
anl a,#0f0h
mov p1,a
mov a,dmxdatareg
rr a
rr a
anl a,#3ch ; 00xx xx00
orl a,#80h ; 10xx xxxx
mov p3,a
nop
nop
nop
nop
setb ramwrite
mov a,dmxdataposition_high
orl a,#04h; ; 0000 0100
mov p2,a ; ce high
nop
nop
nop
ret
;*****************************************
ROTATE_KEYJ: LJMP ROTATE_KEY
;
DECRYPT: MOV A,#(11+1) ; OUTER LOOP 11+1 TIMES
MOV CNT1,A ; OUTER LOOP 11+1 TIMES
DECRYPT_OUTER: MOV A,#48 ; INNER LOOP 48 TIMES
MOV CNT0,A ; INNER LOOP 48 TIMES
DECRYPT_INNER:
; RESET WATCHDOG TIMER
MOV A,CNT1 ; LAST 48 LOOPS RESTORE THE KEY
XRL A,#1 ; LAST 48 LOOPS RESTORE THE KEY
JZ ROTATE_KEYJ ; LAST 48 LOOPS RESTORE THE KEY
CLR C ; CLEAR CARRY (FOR THE LEFT SHIFT)
MOV A,#1 ; INITIALISE MASK = 1
MOV B,HOP3 ; SHIFT MASK 4X IF BIT 2 SET
JNB B.3,DECRY_000
MOV A,#00010000B ; SHIFT MASK 4X IF BIT 2 SET
DECRY_000: MOV MASK,A ; INITIALISE MASK = 1
MOV B,HOP2 ; SHIFT MASK ANOTHER 2X IF BIT 1 SET
JB B.0,DECRY_001
SJMP DECRY_002
DECRY_001: MOV A,MASK
RLC A
RLC A
MOV MASK,A
DECRY_002: MOV B,HOP1 ; SHIFT MASK ANOTHER 1X IF BIT 0 SET
JNB B.0,DECRY_003
MOV A,MASK
RLC A
MOV MASK,A
;
DECRY_003: MOV DPH,#HIGH(TABLE)
MOV A,#LOW(TABLE)
MOV DPL,A ;KEELOQ_Temp,A
MOV A,#0 ; TABLE INDEX = 0
MOV B,HOP4
JNB B.1,DECRY_004
ORL A,#2 ; IF BIT 3 SET ADD 2 TO THE TABLE INDEX
DECRY_004: MOV B,HOP4
JNB B.6,DECRY_005
ORL A,#4 ; IF BIT 4 SET ADD 4 TO THE TABLE INDEX
;
DECRY_005: ADD A,DPL ;KEELOQ_Temp
MOV DPL,A
MOV A,#00
ADDC A,DPH
MOV DPH,A
CLR A
MOVC A,@A+DPTR
SJMP TABLE_END
;
TABLE: DB 2EH ; BITS 4:3 WERE 00
DB 00H ; END OF LOOKUP
DB 74H ; BITS 4:3 WERE 01
DB 00H ; END OF LOOKUP
DB 5CH ; BITS 4:3 WERE 10
DB 00H ; END OF LOOKUP
DB 3AH ; BITS 4:3 WERE 11
TABLE_END:
ANL A,MASK ; ISOLATE THE CORRECT BIT
MOV MASK,A
MOV B,#0 ; COPY THE BIT TO BIT 7
JZ TABLE_000 ; COPY THE BIT TO BIT 7
MOV B,#10000000B ; COPY THE BIT TO BIT 7
TABLE_000: MOV A,B ; ONLY INTERESTED IN BIT HOP2,7
XRL A,HOP2 ; ONLY INTERESTED IN BIT HOP2,7
XRL A,HOP4 ; ONLY INTERESTED IN BIT HOP4,7
XRL A,KEY1 ; ONLY INTERESTED IN BIT KEYREG1,7
MOV MASK,A ; STORE W TEMPORARILY (WE NEED BIT 7)
MOV A,MASK
RLC A ; LEFT ROTATE MASK TO GET BIT 7 INTO CARRY
MOV MASK,A
MOV A,HOP1 ; SHIFT IN THE NEW BIT
RLC A ; SHIFT IN THE NEW BIT
MOV HOP1,A
MOV A,HOP2
RLC A
MOV HOP2,A
MOV A,HOP3
RLC A
MOV HOP3,A
MOV A,HOP4
RLC A
MOV HOP4,A
;
ROTATE_KEY: CLR C ; CLEAR CARRY
MOV B,KEY7 ; SET CARRY IF LEFTMOST BIT SET
JNB B.7,ROTATE_K00
SETB C ; SET CARRY IF LEFTMOST BIT SET
;
ROTATE_K00: MOV A,KEY0
RLC A ; LEFT-ROTATE THE 64-BIT KEY
MOV KEY0,A
MOV A,KEY1
RLC A
MOV KEY1,A
MOV A,KEY2
RLC A
MOV KEY2,A
MOV A,KEY3
RLC A
MOV KEY3,A
MOV A,KEY4
RLC A
MOV KEY4,A
MOV A,KEY5
RLC A
MOV KEY5,A
MOV A,KEY6
RLC A
MOV KEY6,A
MOV A,KEY7
RLC A
MOV KEY7,A
;
DJNZ CNT0,DECRYPT_INNERJ ; INNER LOOP 48 TIMES
DJNZ CNT1,DECRYPT_OUTERJ
RET ; RETURN
DECRYPT_INNERJ: LJMP DECRYPT_INNER
DECRYPT_OUTERJ: LJMP DECRYPT_OUTER
;
HP_KEY_DAT: MOV DPTR,#KEY_DRY_DAT
MOV R0,#KEY0
MOV R1,#08
MOV B,#7
HP_KEY_DATLP: MOV A,B
MOVC A,@A+DPTR
MOV @R0,A
INC R0
DEC B
DJNZ R1,HP_KEY_DATLP
RET
;***********************************************;
KEY_DRY_DAT:
; DW 0000H,0000H;
; DW 0000H,0000H;---------------------;FACTORY
DW 2002H,054CH;
DW 434AH,01CCH;---------------------;FACTORY
; ;010A CW MOVING BODY
;010B CW SCAN
;
;HOPPING KEELOQ
;*****************************************
HP_RESTOREYES: MOV SZ11BUF1,#00000000B ;0000_00_00,0000_0100B
MOV SZ11BUF0,#00001010B ;10bit 0 0 4
setb runbf
RET
;HOPPING KEELOQ
;
;HOPPING KEELOQ
;
HP_RESTORENO: MOV SZ11BUF1,#11111111B
MOV SZ11BUF0,#11111111B
clr runbf
RET
;*****************************************
read_hopping_eram:
mov dmxdataposition_low,#11
mov dmxdataposition_high,#00
lcall ram_read
mov CSR0,dmxdatareg
mov dmxdataposition_low,#12
mov dmxdataposition_high,#00
lcall ram_read
mov CSR1,dmxdatareg
mov dmxdataposition_low,#13
mov dmxdataposition_high,#00
lcall ram_read
mov CSR2,dmxdatareg
mov dmxdataposition_low,#14
mov dmxdataposition_high,#00
lcall ram_read
mov CSR3,dmxdatareg
mov dmxdataposition_low,#15
mov dmxdataposition_high,#00
lcall ram_read
mov CSR4,dmxdatareg
mov dmxdataposition_low,#16
mov dmxdataposition_high,#00
lcall ram_read
mov CSR5,dmxdatareg
mov dmxdataposition_low,#17
mov dmxdataposition_high,#00
lcall ram_read
mov CSR6,dmxdatareg
mov dmxdataposition_low,#18
mov dmxdataposition_high,#00
lcall ram_read
mov CSR7,dmxdatareg
mov dmxdataposition_low,#19
mov dmxdataposition_high,#00
lcall ram_read
mov CSR8,dmxdatareg
ret
;************************************
;************************************
write_hopping_eram_low:
;************************************
mov dmxdataposition_low,#low(521)
mov dmxdataposition_high,#high(521)
mov dmxdatareg,csr0store
lcall ram_write
mov dmxdataposition_low,#low(522)
mov dmxdataposition_high,#high(522)
mov dmxdatareg,csr1store
lcall ram_write
mov dmxdataposition_low,#low(523)
mov dmxdataposition_high,#high(523)
mov dmxdatareg,csr2store
lcall ram_write
mov dmxdataposition_low,#low(524)
mov dmxdataposition_high,#high(524)
mov dmxdatareg,csr3store
lcall ram_write
mov dmxdataposition_low,#low(525)
mov dmxdataposition_high,#high(525)
mov dmxdatareg,csr4store
lcall ram_write
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -