⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dmxout.asm

📁 一个发送程序给大家玩一玩
💻 ASM
📖 第 1 页 / 共 3 页
字号:
          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 + -