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

📄 cpu4563.asm

📁 段式LCD驱动的例程
💻 ASM
字号:
 
;;;  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

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

OIL       EQU   10H
MONEY     EQU   13H
PRICE     EQU   16H
GUNNUM    EQU   19H
       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
      NOP
      NOP
      CLR  REQ
      NOP
      SETB REQ 
      NOP
      SETB ANSWER 
      NOP
      SETB  CLK    
      NOP
      CLR  CLK
      NOP
      SETB  DIN    
      NOP
      CLR   DIN
      NOP
      NOP
      MOV    R0,#30H
      LCALL  CLRBLK        ;;;FILL THE UNITS FROM 30H-->3FH WITH  "00H"    
      MOV    R0,#GUNNUM
      MOV    A,#00H
      MOV    @R0,A
      MOV    R0,#OIL    ;;;;;FILL OIL  DATA
      MOV    R2,#03H
LOIL:      
      MOV    A,#44H
      MOV    @R0,A
      INC    R0
      DJNZ   R2,LOIL
      MOV    R0,#MONEY    ;;;;;FILL MONEY DATA  FIELD
      MOV    R2,#03H
POIL:      
      MOV    A,#55H
      MOV    @R0,A
      INC    R0
      DJNZ   R2,POIL
      MOV    R0,#PRICE    ;;;;FILL PRICE FIELD
      MOV    R2,#03H
KOIL:      
      MOV    A,#77H
      MOV    @R0,A
      INC    R0
      DJNZ   R2,KOIL
      LCALL  CMDB34
      NOP
      MOV    R0,#30H
      LCALL  CHKXOR 
      NOP
      ;;;LCALL S128B
      LCALL  SEND128   ;;;;;FOR 4562
      NOP
      NOP
      NOP
      ;;;;;;;;;;--------------------------
YYYY: 
      NOP
      NOP
      MOV    R0,#30H
      LCALL  CLRBLK        ;;;FILL THE UNITS FROM 30H-->3FH WITH  "00H"    
      NOP
      MOV   R1,#0A3H
      MOV   R2,#01H
      LCALL CMDB31       ;;;POWER ON......
      NOP
      MOV    R0,#30H
      LCALL  CHKXOR 
      NOP
      LCALL  SEND128   ;;;;;FOR 4562
      SETB   CLK 
      NOP
      NOP
      JMP   YYYY
      NOP
      NOP
      NOP
      MOV    R0,#30H
      LCALL  CLRBLK        ;;;FILL THE UNITS FROM 30H-->3FH WITH  "00H"    
      NOP
      LCALL CMDB312       ;;;DISPLAY  REAL TIME
      NOP
      MOV    R0,#30H
      LCALL  CHKXOR 
      NOP
      LCALL  SEND128   ;;;;;FOR 4562
      SETB   CLK 
      NOP
      NOP
      NOP
      MOV    R0,#30H
      LCALL  CLRBLK        ;;;FILL THE UNITS FROM 30H-->3FH WITH  "00H"    
      NOP
      LCALL CMDB35        ;;;DISPLAY DIRECTLY
      NOP
      MOV    R0,#30H
      LCALL  CHKXOR 
      NOP
      LCALL  SEND128   ;;;;;FOR 4562
      SETB   CLK 
      NOP
      NOP
      NOP
      ;;;;;;;;;SSSSSSSSSTTTTTTTTTTTTTTTTTTT
      NOP
      NOP
      MOV    R0,#30H
      LCALL  CLRBLK        ;;;FILL THE UNITS FROM 30H-->3FH WITH  "00H"    
      NOP
      LCALL CMDB310      
      NOP
      MOV    R0,#30H
      LCALL  CHKXOR 
      NOP
      LCALL  SEND128   ;;;;;FOR 4562
      SETB   CLK 
      NOP
      NOP
      NOP
      MOV   R2,#16
      MOV   R1,#30H
LDLD: MOV   A,@R1
      MOV   B,A
      LCALL WABYTE
      INC   R1
      DJNZ  R2,LDLD
      NOP
      NOP
      NOP
      MOV   R2,#16
      MOV   R1,#20H
LOLO: LCALL RABYTE
      MOV   A,B
      MOV   @R1,A
      INC   R1
      DJNZ  R2,LOLO
      NOP
      NOP
      NOP      
      MOV   R0,#30H
      LCALL CLRBLK
      NOP
      MOV   R0,#30H
      LCALL CHKSUM
      NOP
      LCALL  DELAY
      NOP
      LJMP  BEGIN
      
;;;;;;NOT  USED
ASK:
    CLR   REQ
    MOV   C,REQ
    JC    ASK
    MOV  C,DDDD
    MOV  DIN,C 
    MOV  R3,#00H
WAITL:
    MOV   C,REQ
    JC    OUTT
    MOV   C,CLK
    JC    WAITL
    SETB  LOWCK     
WAITH:
    MOV   C,REQ
    JC    OUTT
          
    MOV   C,CLK
    JNC   WAITH
    MOV   C,DDDD
    CPL   C
    MOV   DIN,C
    MOV   DDDD,C
    INC   R3
    MOV   A,R3
    CLR   C
    SUBB  A,#128
    JNC   OUTT
;    MOV   C,REQ
;    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   REQ
    MOV   C,REQ
    JC    S128B
     
    MOV    R0,#30H
    MOV    A,@R0
    MOV    B,A
    LCALL  SFIRST
    SETB   REQ	 ;;;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
WAITREQ:    
    LCALL  DELAY
    MOV    C,REQ
    JC     OVERREQ
    DJNZ   R5,WAITREQ
    LJMP   ERRSHOU
OVERREQ:
    MOV    R5,#0FFH
WAITANS:
    LCALL  DELAY
    MOV    C,ANSWER
    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,CLK
       JNC   OVERL00
       DJNZ  R7,WAITLS
       DJNZ  R6,R703
       LJMP  ERRORB
OVERL00:
       MOV   R6,#0FFH
R704:  MOV   R7,#0FFH       
WAITHS:
       MOV   C,CLK
       JC    OVERH00
       DJNZ  R7,WAITHS
       DJNZ  R6,R704
       LJMP  ERRORB
OVERH00:       
    MOV   A,B
    RLC   A
    MOV   B,A
    MOV   DIN,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   DIN,C
     
     MOV  R2,#07H
     MOV  R6,#0FFH
RR7: MOV  R7,#0FFH
WAITLF:
    MOV   C,CLK
    JNC   OVERLL
    DJNZ  R7,WAITLF
    DJNZ  R6,RR7
    LJMP  ERRORF
OVERLL:
      MOV   R6,#0FFH
R702: MOV   R7,#0FFH   
WAITHF:
      MOV   C,CLK
      JC    OVERHH
      DJNZ  R7,WAITHF
      DJNZ  R6,R702 
      LJMP  ERRORF
OVERHH:    
    MOV   A,B
    RLC   A
    MOV   B,A
    MOV   DIN,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

;;;;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
SEND128:
    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   CLK      

CCC:
    SETB  ANSWER
    JNB   ANSWER,CCC         
    
CONCLR:             ;;;;ACTIVE THE REQUST LINE
    CLR   REQ
    MOV   C,REQ
    JC    CONCLR
    
BBB:
    SETB  ANSWER
    JB    ANSWER,BBB         
    
    LCALL  DDLL
    LCALL  DDLL
    LCALL  DDLL
    LCALL  DDLL
    SETB   REQ
    SETB   ANSWER
    MOV    R5,#0FFH       ;;;WAIT FOR -REQ- TO TURN 1
WWWWREQ:    
    LCALL  DELAY
    MOV    C,REQ
    JC     OOOOREQ
    DJNZ   R5,WWWWREQ
    LJMP   ERRRECE
OOOOREQ:
     
    MOV    R5,#0FFH    ;;;WAIT FOR ANSWER TO TURN 1
WWWWANS:
    LCALL  DELAY
    MOV    C,ANSWER
    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

RABYTE:
   MOV    A,R2
   PUSH   ACC

   MOV    R2,#8
   MOV    A,#0FFH
   MOV    B,A
LPREAD:
   CLR    CLK
   NOP
   LCALL  DDLL1
   MOV    C,O112    ;;;THE  OUTPUT PIN  OF AT45D041.......
   MOV    A,B
   RLC    A
   MOV    B,A 
   LCALL  DDLL2
   NOP
   SETB   CLK       ;;;
   LCALL  DDLL
   NOP
   DJNZ   R2,LPREAD
   NOP
   SETB  CLK
   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    CLK
   NOP
   LCALL  DDLL1
   MOV    A,B
   RLC    A
   MOV    B,A
   MOV    DIN,C     ;;;SI  THE INPUT PIN  OF  AT45D041
   LCALL  DDLL2
   NOP
   SETB   CLK
   LCALL  DDLL
   NOP
   DJNZ   R2,LPWR
   NOP
   SETB  CLK
   POP  ACC
   MOV   R2,A
  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
     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
   RET 
 
;;;    

CMDB32:
     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
   RET

CMDB312:
     MOV  R0,#30H
     MOV  A,#02H
     MOV  @R0,A
     INC  R0
     MOV  A,#0ABH
     MOV  @R0,A    
   RET

CMDB35:
     MOV  R0,#30H
     MOV  A,#0AH
     MOV  @R0,A
     INC  R0
     MOV  A,#0A4H
     MOV  @R0,A    
     INC  R0
     MOV  A,#00H
     MOV  @R0,A    
   RET

   
CMDB310:
     MOV  R0,#30H
     MOV  A,#08H
     MOV  @R0,A
     INC  R0
     MOV  A,#0A9H
     MOV  @R0,A    
   RET
   
   
CMDB33:
     MOV  R0,#30H
     MOV  A,#02H
     MOV  @R0,A
     INC  R0
     MOV  A,#0A2H
     MOV  @R0,A    
    RET 
    
;;;; SEND THE OIL DATA TO MONITOR    
;;;;INPUT: OIL (3 BYTE) MONEY (3 BYTE) PRICE (3 BYTE)
;;;;;      GUNNUM ( 1 BYTE)
CMDB34:
    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
    RET   
   
MXJILU:
     MOV  R0,#30H
     MOV  A,#02H
     MOV  @R0,A
     INC  R0
     MOV  A,#0A5H
     MOV  @R0,A    
    RET 
    
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
STEST:
    MOV   A,R2
    PUSH  ACC     
     
    MOV   A,B
    RLC   A
    MOV   B,A
    MOV   DIN,C
     
     MOV  R2,#07H
     MOV  R7,#0FFH
TESTLF:
    MOV   C,CLK
    JC    TESTLF
    
TESTHF:
    MOV   C,CLK
    JNC   TESTHF
    
    MOV   A,B
    RLC   A
    MOV   B,A
    MOV   DIN,C
    DJNZ  R2,TESTLF
TTTF:   
    POP  ACC
    MOV  R2,A 
 RET

       END

⌨️ 快捷键说明

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