cmd128.asm

来自「51系列的双CPU通过模拟I2C总线通信的例程。 文件格式为MSC-51 AS」· 汇编 代码 · 共 1,324 行 · 第 1/2 页

ASM
1,324
字号
    LCALL  DL10MS
    LCALL  DL10MS
    LCALL  DL10MS
    LCALL  DL10MS
    LCALL  DL10MS
    LCALL  DL10MS

    MOV    R5,#0A0H
LPRR11:
    MOV    C,SKH
    JC     OOSKH
    DJNZ   R5,LPRR11:
    LJMP   ERRECE
OOSKH:

;    LCALL  DL100MS
;    LCALL  DL100MS
;    LCALL  DL10MS
;    LCALL  DL10MS
;    LCALL  DL10MS
;    LCALL  DL10MS
;    LCALL  DL10MS

    MOV    C,SKL
    JC     OOANS
    LJMP   ERRWW
OOANS:
    MOV    A,#0AAH
    JMP    OUT128
ERRECE:
    MOV    A,#0E0H
    JMP    OUT128N
ERRWW:
    MOV    A,#0EEH    
OUT128N:    
    RET
    



RABYTE:
   MOV    A,R2
   PUSH   ACC

   MOV    R2,#8
   MOV    A,#0FFH
   MOV    B,A
LPREAD:
   CLR    SKC
   NOP
   LCALL  DDLL1
   MOV    C,O112    ;;;THE  OUTPUT PIN  OF AT45D041.......
   MOV    A,B
   RLC    A
   MOV    B,A 
   LCALL  DDLL2
   NOP
   SETB   SKC       ;;;
   LCALL  DDLL
   NOP
   DJNZ   R2,LPREAD
   NOP
   SETB  SKC
   POP  ACC
   MOV   R2,A
  RET
;;;;;;;;;write a byte
;;;;;;;INPUT: THE BYTE TO BE WRITEEN IS IN  "B"
WABYTE:
   MOV    A,R2
   PUSH   ACC

   MOV    R2,#8
LPWR:
   CLR    SKC
   NOP
   LCALL  DDLL1
   MOV    A,B
   RLC    A
   MOV    B,A
   MOV    SKD,C     ;;;SI  THE INPUT PIN  OF  AT45D041
   LCALL  DDLL2
   NOP
   SETB   SKC
   LCALL  DDLL
   NOP
   DJNZ   R2,LPWR
   NOP
   SETB  SKC
   POP  ACC
   MOV   R2,A
  RET
  
SENDB34:
    MOV    R2,#16
    MOV    R0,#30H   ;;SHIFT 128 BIT DATA TO 4562
LOOP34:
    MOV    A,@R0
    MOV    B,A     
    LCALL  WABYTE
    INC    R0
    DJNZ   R2,LOOP34
    SETB   SKC      

C34:
    SETB  SKL
    JNB   SKL,C34         
    
CONC34:             ;;;;ACTIVE THE SKHUST LINE
    CLR   SKH
    MOV   C,SKH
    JC    CONC34
    
B34:
    SETB  SKL
    JB    SKL,B34         
    
    LCALL  DDLL
    SETB   SKH
    SETB   SKL
    MOV    R5,#0FFH       ;;;WAIT FOR -SKH- TO TURN 1
WW34SKH:    
    LCALL  DELAY
    MOV    C,SKH
    JC     OO34SKH
    DJNZ   R5,WW34SKH
    LJMP   ER34ECE
OO34SKH:
     
    MOV    A,#0AAH
    JMP    OUT134
ER34ECE:
    MOV    A,#0E0H
OUT134:    
    RET
  

DDLL1:
     MOV  R7,#01H
TT11:MOV  R6,#5FH
TT22:DJNZ R6,TT22
     DJNZ R7,TT11
     RET

DDLL2:
      MOV  R7,#01H
AA11: MOV  R6,#5FH
AA22: DJNZ R6,AA22
      DJNZ R7,AA11
    RET

DDLL:
       MOV  R7,#02H
CC11:  MOV  R6,#5FH    ;;;;5
CC22:  DJNZ R6,CC22
       DJNZ R7,CC11
    RET

   
;;;;CLEAR ALL THE DATA BUFFER UNITS TO 0
;;;;INPUT:  R0 ---BEGIN ADDRESS
CLRBLK:
      MOV  R2,#16
LPCLR:MOV  A,#00H
      MOV  @R0,A
      INC  R0
      DJNZ R2,LPCLR  
   RET
   
;;;;GET THE CHECK SUM AND PUT IT THE  CONSEQUENTLY BYTE
;;;;INPUT: R0---THE BEGIN ADDRESS OF DATA BLOCK
;;;;
CHKSUM:
      MOV  A,@R0
      DEC  A
      MOV  R2,A
      MOV  B,#00H
LLLS:
      INC   R0
      MOV   A,@R0
      ADD   A,B
      MOV   B,A
      DJNZ  R2,LLLS
      INC   R0
      MOV   A,B
      MOV   @R0,A
     RET

;;;;GET THE CHECK SUM AND PUT IT THE  CONSEQUENTLY BYTE
;;;;INPUT: R0---THE BEGIN ADDRESS OF DATA BLOCK
;;;;
CHKXOR:
      MOV  A,@R0
      DEC  A
      MOV  R2,A
     MOV  B,#00H
LXOR:
      INC   R0
      MOV   A,@R0
      XRL   A,B
      MOV   B,A
      DJNZ  R2,LXOR
      INC   R0
      MOV   A,B
      MOV   @R0,A
     RET


;;;TELL THE  MONITOR MODE OF POWER ON AND DISPLAY
;;;  INPUT: R1--MODE OF POWER ON
;;;;        R2--MODE OF DISPLAY 

POWERON:
     MOV  R0,#30H
     MOV  A,#05H
     MOV  @R0,A
     INC  R0
     MOV  A,R1
     MOV  @R0,A
     INC  R0  
     MOV  A,R2
     MOV  @R0,A
   RET 
   
;;;TELL THE  MONITOR MODE OF POWER ON AND DISPLAY
;;;  INPUT: R1--MODE OF POWER ON
;;;;        R2--MODE OF DISPLAY 
CMDB31:
      MOV    R0,#30H
      LCALL  CLRBLK        ;;;FILL THE UNITS FROM 30H-->3FH WITH  "00H"  
     MOV  R0,#30H
     MOV  A,#06H
     MOV  @R0,A
     INC  R0
     MOV  A,#0A0H
     MOV  @R0,A
     INC  R0
     MOV  A,R1
     MOV  @R0,A
     INC  R0  
     MOV  A,R2
     MOV  @R0,A
      MOV    R0,#30H  ;;;;.SSSSSSSS
      LCALL  CHKXOR 
      LCALL  SEND128   ;;;;;FOR 4562
   RET 


CMDB32:
      MOV    R0,#30H
      LCALL  CLRBLK        ;;;FILL THE UNITS FROM 30H-->3FH WITH  "00H"  

     MOV  R0,#30H
     MOV  A,#03H
     MOV  @R0,A
     INC  R0
     MOV  A,#0A1H
     MOV  @R0,A    
     INC  R0 
     MOV  A,#00H
     MOV  @R0,A 
      MOV    R0,#30H
      LCALL  CHKXOR 
      LCALL  SEND128   ;;;;;FOR 4562
     
   RET
   
;;;; TELL THE END OF FILL OIL OPERATION
;;;;INPUT: OIL (3 BYTE) MONEY (3 BYTE) PRICE (3 BYTE)
;;;;;      GUNNUM ( 1 BYTE)
CMDB33:
      MOV    R0,#30H
      LCALL  CLRBLK        ;;;FILL THE UNITS FROM 30H-->3FH WITH  "00H"  

    MOV   A,#11
    MOV   R0,#30H
    MOV   @R0,A
    
    INC   R0
    MOV   A,#0A2H
    MOV   @R0,A
    
    INC   R0
    MOV   R1,#GUNNUM
    MOV   A,@R1
    MOV   @R0,A
    
    MOV   R1,#OIL
    MOV   R2,#03H
LLO33:    
    INC   R0
    MOV   A,@R1
    MOV   @R0,A
    INC   R1
    DJNZ  R2,LLO33
    
    MOV   R1,#MONEY
    MOV   R2,#03H
LL33:    
    INC   R0
    MOV   A,@R1
    MOV   @R0,A
    INC   R1
    DJNZ  R2,LL33
    
    MOV   R1,#PRICE
    MOV   R2,#03H
LLP33:    
    INC   R0
    MOV   A,@R1
    MOV   @R0,A
    INC   R1
    DJNZ  R2,LLP33
      MOV    R0,#30H
      LCALL  CHKXOR 
      LCALL  SEND128   ;;;;;FOR 4562
    
    RET   
    
;;;;OK
;;;; SEND THE OIL DATA TO MONITOR    
;;;;INPUT: OIL (3 BYTE) MONEY (3 BYTE) PRICE (3 BYTE)
;;;;;      GUNNUM ( 1 BYTE)
CMDB34:
      MOV    R0,#30H
      LCALL  CLRBLK        ;;;FILL THE UNITS FROM 30H-->3FH WITH  "00H"  

    MOV   A,#11
    MOV   R0,#30H
    MOV   @R0,A
    
    INC   R0
    MOV   A,#0A3H
    MOV   @R0,A
    
    INC   R0
    MOV   R1,#GUNNUM
    MOV   A,@R1
    MOV   @R0,A
    
    MOV   R1,#OIL
    MOV   R2,#03H
LLOIL:    
    INC   R0
    MOV   A,@R1
    MOV   @R0,A
    INC   R1
    DJNZ  R2,LLOIL
    
    MOV   R1,#MONEY
    MOV   R2,#03H
LLMN:    
    INC   R0
    MOV   A,@R1
    MOV   @R0,A
    INC   R1
    DJNZ  R2,LLMN
    
    MOV   R1,#PRICE
    MOV   R2,#03H
LLPRI:    
    INC   R0
    MOV   A,@R1
    MOV   @R0,A
    INC   R1
    DJNZ  R2,LLPRI
      MOV    R0,#30H
;;    LCALL  CHKXOR 
      LCALL  SENDB34   ;;;;;FOR 4562
    
    RET   

CMDB35:
      MOV    R0,#30H
      LCALL  CLRBLK        ;;;FILL THE UNITS FROM 30H-->3FH WITH  "00H"  

     MOV  R0,#30H
     MOV  A,#0FH
     MOV  @R0,A
     INC  R0
     MOV  A,#0A4H
     MOV  @R0,A    
     INC  R0
     MOV  A,#00H
     MOV  @R0,A    
    MOV    R0,#30H
    LCALL  CHKXOR 
    LCALL  SEND128   ;;;;;FOR 4562
     
   RET
   
CMDB36:
      MOV    R0,#30H
      LCALL  CLRBLK        ;;;FILL THE UNITS FROM 30H-->3FH WITH  "00H"  

     MOV  R0,#30H
     MOV  A,#03H
     MOV  @R0,A
     INC  R0
     MOV  A,#0A5H
     MOV  @R0,A    
     INC  R0 
     MOV  A,#00H
     MOV  @R0,A 
      MOV    R0,#30H
      LCALL  CHKXOR 
      LCALL  SEND128   ;;;;;FOR 4562
     
   RET

;;;;;LOOK FOR THE DAY RECORD
;;;;;INPUT: YEAR,MONTH,DAY
   
CMDB37:
      MOV    R0,#30H
      LCALL  CLRBLK        ;;;FILL THE UNITS FROM 30H-->3FH WITH  "00H"  

     MOV  R0,#30H
     MOV  A,#07H
     MOV  @R0,A
     INC  R0
     MOV  A,#0A6H
     MOV  @R0,A    
     INC  R0        ;;;;GUN
     MOV  A,#00H
     MOV  @R0,A
     INC  R0
     MOV  R1,#YEAR
     MOV  A,@R1
     MOV  @R0,A
     INC  R0
     INC  R1
     MOV  A,@R1
     MOV  @R0,A
     INC  R0
     MOV  R1,#MONTH
     MOV  A,@R1
     MOV  @R0,A
     INC  R0
     MOV  R1,#DAY  
     MOV  A,@R1
     MOV  @R0,A
     
    MOV    R0,#30H
    LCALL  CHKXOR 
    LCALL  SEND128   ;;;;;FOR 4562
     
   RET

;;;;;LOOK FOR THE MONTH RECORD
;;;;;INPUT: YEAR,MONTH
   
CMDB38:
      MOV    R0,#30H
      LCALL  CLRBLK        ;;;FILL THE UNITS FROM 30H-->3FH WITH  "00H"  

     MOV  R0,#30H
     MOV  A,#06H
     MOV  @R0,A
     INC  R0
     MOV  A,#0A7H
     MOV  @R0,A    
     INC  R0        ;;;;GUN
     MOV  A,#00H
     MOV  @R0,A
     INC  R0
     MOV  R1,#YEAR
     MOV  A,@R1
     MOV  @R0,A
     INC  R0
     INC  R1
     MOV  A,@R1
     MOV  @R0,A
     INC  R0
     MOV  R1,#MONTH
     MOV  A,@R1
     MOV  @R0,A
     
    MOV    R0,#30H
    LCALL  CHKXOR 
    LCALL  SEND128   ;;;;;FOR 4562
   RET


;;;;;CHANGE+++++++++
;;;;;MODIFY THE PRICE
;;;;;INPUT: PRICE ,GUN
;;;;;OUTPUT: AAH  ----- SUCCESS
;;;;;        EEH  -----FAILE  OR REFUSED BY SKSJ CPU
           
CMDB39:
      MOV    R0,#30H
      LCALL  CLRBLK        ;;;FILL THE UNITS FROM 30H-->3FH WITH  "00H"  

     MOV  R0,#30H
     MOV  A,#05H
     MOV  @R0,A
     INC  R0
     MOV  A,#0A8H
     MOV  @R0,A    
     INC  R0        ;;;;GUN
     MOV  A,#00H
     MOV  @R0,A
     
     INC    R0
     MOV    R1,#PRICE
     MOV    A,@R1
     MOV    @R0,A
     INC    R0
     INC    R1
     MOV    A,@R1
     MOV    @R0,A
     MOV    R0,#30H
     LCALL  CHKXOR

     LCALL  SEND128J   ;;;;;FOR 4562
     XRL    A,#0AAH
     JZ     CHOK
     MOV    A,#0EEH
     JMP    ENDCHJ
CHOK:
     MOV    A,#0AAH
ENDCHJ:
   RET
   
CMDB312:
      MOV    R0,#30H
      LCALL  CLRBLK        ;;;FILL THE UNITS FROM 30H-->3FH WITH  "00H"  

     MOV  R0,#30H
     MOV  A,#02H
     MOV  @R0,A
     INC  R0
     MOV  A,#0ABH
     MOV  @R0,A    
    MOV    R0,#30H
    LCALL  CHKXOR 
    LCALL  SEND128   ;;;;;FOR 4562
     
   RET
   
;;;;;SET THE REAL TIME 
;;;;;INPUT: YEAR,MONTH,DAY,HOUR,MINUTE
   
CMDB310:
      MOV    R0,#30H
      LCALL  CLRBLK        ;;;FILL THE UNITS FROM 30H-->3FH WITH  "00H"  

     MOV  R0,#30H
     MOV  A,#08H
     MOV  @R0,A
     INC  R0
     MOV  A,#0A9H
     MOV  @R0,A    
     INC  R0
     MOV  R1,#YEAR
     MOV  A,@R1
     MOV  @R0,A
     INC  R0
     INC  R1
     MOV  A,@R1
     MOV  @R0,A
     INC  R0
     MOV  R1,#MONTH
     MOV  A,@R1
     MOV  @R0,A
     INC  R0
     MOV  R1,#DAY  
     MOV  A,@R1
     MOV  @R0,A
     INC  R0
     MOV  R1,#HOUR 
     MOV  A,@R1
     MOV  @R0,A
     INC  R0
     MOV  R1,#MINUTE
     MOV  A,@R1
     MOV  @R0,A
     
    MOV    R0,#30H
    LCALL  CHKXOR 
    LCALL  SEND128   ;;;;;FOR 4562
     
   RET

CMDB311:
      MOV    R0,#30H
      LCALL  CLRBLK        ;;;FILL THE UNITS FROM 30H-->3FH WITH  "00H"  

     MOV  R0,#30H
     MOV  A,#03H
     MOV  @R0,A
     INC  R0
     MOV  A,#0AAH
     MOV  @R0,A    
     INC  R0
     MOV  R1,#MODE
     MOV  A,@R1
     MOV  @R0,A
    MOV    R0,#30H
    LCALL  CHKXOR 
    LCALL  SEND128   ;;;;;FOR 4562
   
   RET
   
CMDB313:
      MOV    R0,#30H
      LCALL  CLRBLK        ;;;FILL THE UNITS FROM 30H-->3FH WITH  "00H"  
                   
     MOV  R0,#30H
     MOV  A,#04H
     MOV  @R0,A
     INC  R0
     MOV  A,#0ACH
     MOV  @R0,A    
     INC  R0
     MOV  R1,#GUNNUM
     MOV  A,@R1
     MOV  @R0,A
     INC  R0
     MOV  R1,#MODE
     MOV  A,@R1
     MOV  @R0,A
    MOV    R0,#30H
    LCALL  CHKXOR 
    LCALL  SEND128   ;;;;;FOR 4562
   
   RET
   
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
STEST: ;;;;;NOT  USE
    MOV   A,R2
    PUSH  ACC     
     
    MOV   A,B
    RLC   A
    MOV   B,A
    MOV   SKD,C
     
     MOV  R2,#07H
     MOV  R7,#0FFH
TESTLF:
    MOV   C,SKC
    JC    TESTLF
    
TESTHF:
    MOV   C,SKC
    JNC   TESTHF
    
    MOV   A,B
    RLC   A
    MOV   B,A
    MOV   SKD,C
    DJNZ  R2,TESTLF
TTTF:   
    POP  ACC
    MOV  R2,A 
 RET

       END

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?