cmd128.asm

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

ASM
1,324
字号
 
;;;  WISE TM READ/WRITE PROGRAM
;;;;;;P3.4         T0
;;;;;;P3.5         T1
;REQ       EQU   P1.0
;ANSWER    EQU   P1.1
;CLK       EQU   P1.2
;DIN       EQU   P1.3
;O112      EQU   P1.5

SKH       EQU   P1.3
SKL    EQU   P1.2
SKC       EQU   P1.5
SKD       EQU   P1.4

O112      EQU   P1.0


LOWCK     EQU   00H
HIGHCK    EQU   01H
DDDD      EQU   02H

OIL       EQU   10H
MONEY     EQU   13H
PRICE     EQU   16H
GUNNUM    EQU   19H

YEAR      EQU   1AH
MONTH     EQU   1CH
DAY       EQU   1DH
HOUR      EQU   1EH
MINUTE    EQU   1FH
MODE      EQU   0FH
       ORG 0
      SJMP IINT
     NOP
     RETI
     NOP
     NOP
     NOP
     NOP
     NOP
     NOP
     NOP

     ;--- TIMER T0 INT.
     ORG 0BH
     LJMP  IINT
     ;------------
     NOP
     NOP
     NOP
     NOP
     NOP
     RETI
     NOP
     NOP
     NOP
     NOP
     NOP
     NOP
     NOP
     RETI
     NOP
     NOP
     NOP
     NOP
     NOP
     NOP
     NOP
     ;-- COMM INT
     ORG 23H
     JMP  IINT
     ;------
     NOP
     NOP
     NOP
     NOP
     NOP
     RETI
     NOP
     NOP
     NOP
     NOP
     NOP
     NOP
     NOP
     NOP
     NOP
     NOP
     NOP
     NOP
     NOP
     NOP
     NOP
     NOP
     NOP
     NOP
     NOP
     NOP
     NOP
     NOP
     NOP
     NOP
     NOP
     NOP
     NOP
     NOP
     NOP
     NOP
     NOP
     NOP
     NOP
     NOP
     NOP
     NOP

     ORG 50H
IINT:     
              MOV  A,#00H
              MOV  PSW,A
              MOV  SP,#80H        ;
              CLR  EA
              CLR  HIGHCK 
              CLR  LOWCK
              CLR  DDDD  
 
BEGIN:
      NOP
      SETB  SKL
      SETB  SKH
      NOP
      NOP
      NOP     ;;;  POWER ON HANDSAKE------- 
      NOP
      MOV   R1,#0A3H
      MOV   R2,#01H
      LCALL CMDB31     
      NOP
      NOP   ;;;;;;;SKHUEST TO FILL OIL
      NOP
      LCALL CMDB32
      NOP
      NOP   ;;;; END THE FILL OIL
      NOP
      MOV    R0,#GUNNUM
      MOV    A,#00H
      MOV    @R0,A
      MOV    R0,#OIL    
      MOV    A,#00H
      MOV    @R0,A
      INC    R0
      MOV    A,#02H
      MOV    @R0,A
      INC    R0
      MOV    A,#22H
      MOV    @R0,A
      INC    R0
      MOV    R0,#MONEY   
      MOV    A,#00H
      MOV    @R0,A
      INC    R0
      MOV    A,#04H
      MOV    @R0,A
      INC    R0
      MOV    A,#44H
      MOV    @R0,A
      INC    R0
      MOV    R0,#PRICE   
      MOV    A,#02H
      MOV    @R0,A
      INC    R0
      MOV    A,#00H
      MOV    @R0,A
      INC    R0
      LCALL CMDB33
      NOP
      NOP   ;;;SEND FILL OIL DATA ------------------
      NOP
      NOP
      MOV    R0,#GUNNUM
      MOV    A,#00H
      MOV    @R0,A
      MOV    R0,#OIL   
      MOV    A,#00H
      MOV    @R0,A
      INC    R0
      MOV    A,#00H
      MOV    @R0,A
      INC    R0
      MOV    A,#33H
      MOV    @R0,A
      INC    R0
      MOV    R0,#MONEY    
      MOV    A,#00H
      MOV    @R0,A
      INC    R0
      MOV    A,#00H
      MOV    @R0,A
      INC    R0
      MOV    A,#99H
      MOV    @R0,A
      INC    R0
      MOV    R0,#PRICE   
      MOV    A,#00H
      MOV    @R0,A
      INC    R0
      MOV    A,#03H
      MOV    @R0,A
      INC    R0
      LCALL  CMDB34
      NOP
      NOP      ;;;;DIRECTLY DISPLAY ------------
      NOP
      LCALL CMDB35       
      NOP
      NOP     ;;;CURRENTLY OIL DATA .....
      NOP
      LCALL CMDB36
      NOP
      NOP     ;;;;DAY RECORD
      NOP
      MOV   R0,#YEAR
      MOV   A,#19H
      MOV   @R0,A
      INC   R0
      MOV   A,#99H
      MOV   @R0,A
      INC   R0
      MOV   R0,#MONTH
      MOV   A,#10H
      MOV   @R0,A
      MOV   R0,#DAY
      MOV   A,#01H
      MOV   @R0,A
      NOP
      LCALL CMDB37
      NOP
      NOP     ;;;;;MONTH  RECORD
      NOP
      MOV   R0,#YEAR
      MOV   A,#19H
      MOV   @R0,A
      INC   R0
      MOV   A,#99H
      MOV   @R0,A
      INC   R0
      MOV   R0,#MONTH
      MOV   A,#08H
      MOV   @R0,A
      NOP
      LCALL CMDB38
      NOP
      NOP   ;;;;MODIFY THE PRICE
      NOP
      MOV   R0,#PRICE
      MOV   A,#02H
      MOV   @R0,A
      INC   R0
      MOV   A,#77H
      MOV   @R0,A
      NOP
      LCALL CMDB39
      NOP
      NOP        ;;;;;SET THE TIME --------------
      NOP
      MOV   R0,#YEAR
      MOV   A,#19H
      MOV   @R0,A
      INC   R0
      MOV   A,#99H
      MOV   @R0,A
      MOV   R0,#MONTH
      MOV   A,#06H
      MOV   @R0,A
      MOV   R0,#DAY
      MOV   A,#26H
      MOV   @R0,A
      MOV   R0,#HOUR
      MOV   A,#01H
      MOV   @R0,A
      MOV   R0,#MINUTE
      MOV   A,#30H
      MOV  @R0,A
      NOP
      LCALL CMDB310      
      NOP
      NOP
      NOP
      MOV   R0,#MODE
      MOV   A,#00H
      MOV   @R0,A
      LCALL CMDB311
      NOP
      NOP     ;;;;DISPLAY THE <SUM>
      NOP
      MOV   R0,#MODE
      MOV   A,#00H
      MOV   @R0,A
      MOV   R0,#GUNNUM
      MOV   A,#00H
      MOV   @R0,A
      NOP
      LCALL CMDB313
      NOP
      NOP
      NOP     ;;;;;;;;CMDB312----------------------
      NOP
      LCALL CMDB312       ;;;DISPLAY  REAL TIME
      NOP
      NOP     ;;;  POWER ON HANDSAKE-------
      NOP
      MOV   R1,#3AH
      MOV   R2,#01H
      LCALL CMDB31     
      NOP
      NOP
      NOP
      LJMP  BEGIN
      
;;;;;;NOT  USED
ASK:
    CLR   SKH
    MOV   C,SKH
    JC    ASK
    MOV  C,DDDD
    MOV  SKD,C 
    MOV  R3,#00H
WAITL:
    MOV   C,SKH
    JC    OUTT
    MOV   C,SKC
    JC    WAITL
    SETB  LOWCK     
WAITH:
    MOV   C,SKH
    JC    OUTT
          
    MOV   C,SKC
    JNC   WAITH
    MOV   C,DDDD
    CPL   C
    MOV   SKD,C
    MOV   DDDD,C
    INC   R3
    MOV   A,R3
    CLR   C
    SUBB  A,#128
    JNC   OUTT
;    MOV   C,SKH
;    JNC   WAITL
     JMP   WAITL 
OUTT:    
  RET

;;;;TEST CLOCK ..........
;;;;SEND 128 BIT DATA TO MONITOR 
;;;;INPUT: 30H--->3FH:THE 128 BIT DATA
;;;;OUTPUT: E0H ----COMMUNICATION ERROR 
;;;;;;      EEH ----REFUSED BY MONITOR  
;;;;;;      AAH ----SUCCESS
S128B:
    CLR   SKH
    MOV   C,SKH
    JC    S128B
     
    MOV    R0,#30H
    MOV    A,@R0
    MOV    B,A
    LCALL  SFIRST
    SETB   SKH   ;;;GET READY FOR MONITOR
    JC     ERRORS
    MOV    R2,#15
    MOV    R0,#31H
LOOPS:
    MOV    A,@R0
    MOV    B,A     
    LCALL  SABYTE
    JC     ERRORS
    INC    R0
    DJNZ   R2,LOOPS
        
    MOV    R5,#0FFH
WAITSKH:    
    LCALL  DELAY
    MOV    C,SKH
    JC     OVERSKH
    DJNZ   R5,WAITSKH
    LJMP   ERRSHOU
OVERSKH:
    MOV    R5,#0FFH
WAITANS:
    LCALL  DELAY
    MOV    C,SKL
    JC     OVERANS
    DJNZ   R5,WAITANS
    LJMP   ERRORS
OVERANS:
    MOV    A,#0AAH
    JMP    OUT128B
ERRSHOU:
    MOV    A,#0E0H
    JMP    OUT128B    
ERRORS:
    MOV    A,#0EEH    
OUT128B:    
   RET

;;;;TEST CLOCK ..........
;;;SEND  A BYTE TO MONITOR
SABYTE:
       MOV   A,R2
       PUSH  ACC     
       MOV  R2,#08H
       MOV  R6,#0FFH
R703:  MOV  R7,#0FFH
WAITLS:
       MOV   C,SKC
       JNC   OVERL00
       DJNZ  R7,WAITLS
       DJNZ  R6,R703
       LJMP  ERRORB
OVERL00:
       MOV   R6,#0FFH
R704:  MOV   R7,#0FFH       
WAITHS:
       MOV   C,SKC
       JC    OVERH00
       DJNZ  R7,WAITHS
       DJNZ  R6,R704
       LJMP  ERRORB
OVERH00:       
    MOV   A,B
    RLC   A
    MOV   B,A
    MOV   SKD,C
    DJNZ  R2,WAITLS
    CLR   C
    JMP   OUTTS
ERRORB:
    SETB  C
OUTTS:   
    POP  ACC
    MOV  R2,A 
 RET 

;;;;TEST CLOCK ..........
;;;;; SEND THE FIRST BYTE OF 128 BYTE
SFIRST:
     MOV   A,R2
     PUSH  ACC     
     
    MOV   A,B
    RLC   A
    MOV   B,A
    MOV   SKD,C
     
     MOV  R2,#07H
     MOV  R6,#0FFH
RR7: MOV  R7,#0FFH
WAITLF:
    MOV   C,SKC
    JNC   OVERLL
    DJNZ  R7,WAITLF
    DJNZ  R6,RR7
    LJMP  ERRORF
OVERLL:
      MOV   R6,#0FFH
R702: MOV   R7,#0FFH   
WAITHF:
      MOV   C,SKC
      JC    OVERHH
      DJNZ  R7,WAITHF
      DJNZ  R6,R702 
      LJMP  ERRORF
OVERHH:    
    MOV   A,B
    RLC   A
    MOV   B,A
    MOV   SKD,C
    DJNZ  R2,WAITLF
    CLR   C
    JMP   OUTTF
ERRORF:
    SETB  C 
OUTTF:    
    POP  ACC
    MOV  R2,A 
 RET 

DELAY:
     MOV   R7,#08H   ;;;WHEN  R6=0F7H R7=02H THE TIME IS 1MS
DD11:MOV   R6,#0ACH        
DD22:DJNZ  R6,DD22
     DJNZ  R7,DD11
   RET

;;;;CHANGE+++++++++
;;;;DELAY  100 MS
DL100MS:
      MOV   R7,#200
DL177:MOV   R6,#0F7H
DL166:DJNZ  R6,DL166
      DJNZ  R7,DL177 
      RET

;;;;CHANGE++++++++++
;;;;DELAY  10 MS
DL10MS:
       MOV   R7,#20
DL1777:MOV   R6,#0F7H
DL1666:DJNZ  R6,DL1666
       DJNZ  R7,DL1777 
       RET

;;;;;CHANGE+++++++++
;;;;GENERATE CLOCK TO 4562........
;;;;SHIFT 128  BIT DATA TO MONITOR THROUGH 4562
;;;;INPUT: 30H--->3FH:THE 128 BIT DATA
;;;;OUTPUT: E0H ----COMMUNICATION ERROR 
;;;;;;      EEH ----REFUSED BY MONITOR  
;;;;;;      AAH ----SUCCESS
;;;;;;
;;;;;;      DDH ----SKSJ IS BUSY ,JUST GET OUT AND WAIT A MOMENT.......
SEND128:
    MOV    R2,#16H   ;;;;2000 MS
DL2000:
    SETB   SKH
    SETB   SKL
    SETB   SKH
    SETB   SKL
    MOV    C,SKH
    ANL    C,SKL
    JC     CONNN
    LCALL  DL100MS
    DJNZ   R2,DL2000
    MOV    A,#0DDH
    LJMP   OUT128
CONNN:

    MOV    R2,#16
    MOV    R0,#30H   ;;SHIFT 128 BIT DATA TO 4562
LOOPWS:
    MOV    A,@R0
    MOV    B,A     
    LCALL  WABYTE
    INC    R0
    DJNZ   R2,LOOPWS
    SETB   SKC      

    MOV    R2,#05H
CCC:
    SETB   SKC
    DJNZ   R2,CCC

;;CCC:
;;    SETB  SKL
;;    JNB   SKL,CCC         
;;

CONCLR:             ;;;;ACTIVE THE SKHUST LINE
    CLR   SKH
    MOV   C,SKH
    JC    CONCLR
    
BBB:
    SETB  SKL
    JB    SKL,BBB         
    
    LCALL  DDLL
    LCALL  DDLL
    LCALL  DDLL
    LCALL  DDLL
    SETB   SKH
    SETB   SKL
    MOV    R5,#0FFH       ;;;WAIT FOR -SKH- TO TURN 1
WWWWSKH:    
    LCALL  DELAY
    MOV    C,SKH
    JC     OOOOSKH
    DJNZ   R5,WWWWSKH
    LJMP   ERRRECE
OOOOSKH:
    MOV    R5,#0FFH    ;;;WAIT FOR SKL TO TURN 1
WWWWANS:
    LCALL  DELAY
    MOV    C,SKL
    JC     OOOOANS
    DJNZ   R5,WWWWANS
    LJMP   ERRWWW
OOOOANS:
    MOV    A,#0AAH
    JMP    OUT128
ERRRECE:
    MOV    A,#0E0H
    JMP    OUT128    
ERRWWW:
    MOV    A,#0EEH    
OUT128:    
    RET
    
;;;;;CHANGE++++++++++++
;;;;GENERATE CLOCK TO 4562........
;;;;SHIFT 128  BIT DATA TO MONITOR THROUGH 4562
;;;;INPUT: 30H--->3FH:THE 128 BIT DATA
;;;;OUTPUT: E0H ----COMMUNICATION ERROR 
;;;;;;      EEH ----REFUSED BY MONITOR  
;;;;;;      AAH ----SUCCESS
;;;;;;
;;;;;;      DDH ----SKSJ IS BUSY ,JUST GET OUT AND WAIT A MOMENT.......
SEND128J:
    MOV    R2,#16H   ;;;;2000 MS
DL2000N:
    SETB   SKH
    SETB   SKL
    SETB   SKH
    SETB   SKL
    MOV    C,SKH
    ANL    C,SKL
    JC     CONNNN
    LCALL  DL100MS
    DJNZ   R2,DL2000N

    MOV    A,#0DDH
    LJMP   OUT128N
CONNNN:

    MOV    R2,#16
    MOV    R0,#30H   ;;SHIFT 128 BIT DATA TO 4562
LOOPWSN:
    MOV    A,@R0
    MOV    B,A     
    LCALL  WABYTE
    INC    R0
    DJNZ   R2,LOOPWSN
    SETB   SKC      

    MOV    R2,#05H
CCCN:
    SETB   SKC
    DJNZ   R2,CCCN


CONCLRN:             ;;;;ACTIVE THE SKHUST LINE
    CLR   SKH
    MOV   C,SKH
    JC    CONCLRN
    
BBBN:
    SETB  SKL
    JB    SKL,BBBN         
    
    SETB   SKH
    SETB   SKL

    LCALL  DL100MS
    LCALL  DL100MS
    LCALL  DL100MS    ;;; ENOUGH TO SET TIME
    LCALL  DL100MS
    LCALL  DL100MS
    LCALL  DL100MS
    LCALL  DL10MS

⌨️ 快捷键说明

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