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

📄 main monitor.asm

📁 完成和另一单片机的通信
💻 ASM
字号:
ORG 0000H
LJMP START
;LCD REGISTERS ADDRESS
LCD_CMD_WR      EQU 0
LCD_DATA_WR     EQU 1
LCD_BUSY_RD     EQU 2
LCD_DATA_RD     EQU 3
;LCD COMMANDS
LCD_CLR         EQU 1
LCD_HOME        EQU 2
LCD_SETMODE     EQU 4
LCD_SETVISIBLE  EQU 8
LCD_SHIFT       EQU 16
LCD_SETFUNCTION EQU 32
LCD_SETCGADDR   EQU 64
LCD_SETDDADDR   EQU 128
;WAVE DATEA NUMBER
WAVE_NUM        EQU 3
;FAULT DATA
FAULT_ADDR      EQU 7FH
FAULT_NUM       EQU 2FH
FAULT_DISP      EQU 2EH
NUM_H           EQU 2DH
NUM_L           EQU 2CH 
ORG 0040H
WAVE_DATA:      DB  11H,22H,33H
STR_NUM:        DB  'FaultNO:'
                DB  0
STR_CODE:       DB  'Fault'
                DB  0
STR_COLON:      DB  ':'
                DB  0
BCD_CODE:       DB  01H,02H,04H,08H
                DB  16H,32H,64H				
ORG 0080H
START:MOV     SP,#08H
      MOV     P1,#03H
      MOV     A,#38H
      LCALL   WRCMD
	  MOV     A,#LCD_SETVISIBLE+6
	  LCALL   WRCMD
;CLEAR RAM 30H~7FH
	  MOV     R0,#7FH
	  MOV     R1,#50H
	  MOV     A,#00H
CLEAR:MOV     @R0,A
	  DEC     R0
	  DJNZ    R1,CLEAR
      MOV     SCON,#94H
      MOV     PCON,#80H
      SETB    EA
      SETB    ES
;THE NUMBER OF FAULT DATA HAVE BEEN RECEIVED
	  MOV     R7,#00H
	  MOV     FAULT_NUM,#00H
	  MOV     FAULT_DISP,#00H
      MOV    DPTR,#500
      LCALL  WTMS
CYCLE:MOV     R1,#03H
TRANS:MOV     SBUF,#0FFH
	  JNB     TI,$
	  CLR     TI
	  MOV     R0,#00H
	  MOV     DPTR,#WAVE_DATA
WAVE: CLR     A
      MOVC    A,@A+DPTR
      MOV     SBUF,A
W1:   JBC     TI,W2
      SJMP    W1
W2:   INC     DPTR
      INC     R0
      CJNE	  R0,#WAVE_NUM,WAVE
	  DJNZ    R1,TRANS
	  MOV     DPTR,#100
	  LCALL   WTMS
;TRANSFORM 2 BYTES OF 01H TO COMMUNICATE
      MOV     R0,#02H
COMMU:MOV     SBUF,#01H
COM1: JBC     TI,COM2
      SJMP    COM1
COM2: DJNZ    R0,COMMU
      CLR     P1.0
      CLR     P1.1	  
	  JNB     RI,$
	  CLR     RI
	  MOV     A,SBUF
	  CJNE    A,#01H,BACK
	  JNB     RI,$
	  CLR     RI
	  MOV     A,SBUF
	  JZ      BACK
	  MOV     FAULT_NUM,A
	  MOV     R0,#FAULT_ADDR
	  MOV     R1,#03H
;THE NUMBER OF VALID FAULT DATA IN 3 RECEIVED ONES
	  MOV     R6,#00H
SAVED:JNB     RI,$
	  MOV     A,SBUF
	  JZ      SURE
	  INC     R7
	  PUSH    ACC
	  MOV     A,R7
	  CJNE    A,FAULT_NUM,LOP
	  SJMP    SURE
LOP:  POP     ACC
      MOV     @R0,A
      INC     R6
	  DEC     R0
	  DJNZ    R1,SAVED
SURE: MOV     A,R6
	  JZ      RESET
	  LCALL   DISPLAY
	  MOV     A,R7
	  CJNE    A,FAULT_NUM,BACK
RESET:MOV     R7,#00H
BACK: MOV     DPTR,#100
      LCALL   WTMS
      LJMP    CYCLE
;DISPLAY THE FAULT CODE HAVE JUST BEEN RECEIVED IN LCD
DISPLAY:MOV   A,#LCD_CLR
        ACALL WRCMD
        MOV   DPTR,#STR_NUM
        ACALL WRSTR
        MOV   A,FAULT_NUM
        ACALL WRNUM
        MOV   DPTR,#STR_CODE
        ACALL WRSTR
		MOV   A,FAULT_DISP
		INC   A
		ACALL WRNUM
		MOV   DPTR,#STR_COLON
		ACALL WRSTR                       ;DISPLAY:
		MOV   A,#FAULT_ADDR
        CLR   C
		SUBB  A,FAULT_DISP
		MOV   R0,A
		MOV   A,@R0
		ACALL WRNUM
		INC   FAULT_DISP
		MOV   DPTR,#500
        ACALL WTMS
		DJNZ  R6,DISPLAY
		RET
;TRANSFORM COMMANDS TO LCD
WRCMD:  MOV   R0,#LCD_CMD_WR
        MOVX  @R0,A
		JMP   RDBUSY
;QUERY THE STATE OF LCD TO MAKE SURE IT'S UNBUSY
RDBUSY: MOV   R1,#LCD_BUSY_RD
        MOVX  A,@R1		
        JB    ACC.7,RDBUSY
		RET
;DISPLAY STRINGS
WRSTR:  MOV   R0,#LCD_DATA_WR
WS1:    CLR   A
        MOVC  A,@A+DPTR
        JZ    OVER
        MOVX  @R0,A
        INC   DPTR
        ACALL RDBUSY
        SJMP WS1
OVER:   RET
;DISPLAY NUMBER IN ACC
WRNUM:  MOV   R0,#LCD_DATA_WR
        ACALL TOASCII
        MOV   A,NUM_H
        MOVX  @R0,A
        ACALL RDBUSY		
        MOV   A,NUM_L
        MOVX  @R0,A
        ACALL RDBUSY
        RET
;TRANSFORM THE NUMBER IN ACC TO ASCII CODE
TOASCII:MOV   R1,#07H               ;COUNTER
        MOV   R0,#00H               ;ADDRESS OFFSET
		MOV   R2,#00H               ;SAVE THE BCD NUMBER
		MOV   R3,#04H               ;TIME OF SHIFTING NUMBER
TOA1:	RRC   A
		JNC   TOA2
        PUSH  ACC
		MOV   DPTR,#BCD_CODE
		MOV   A,R0
        MOVC  A,@A+DPTR
        ADD   A,R2
        DA    A
        MOV   R2,A
		POP   ACC
TOA2:   INC   R0
        DJNZ  R1,TOA1
        MOV   A,R2
		ANL   A,#0FH
		ADD   A,#30H                ;30H IS THE ASCII CODE OF 0
		MOV   NUM_L,A
		MOV   A,R2
TOA3:	RR    A
		DJNZ  R3,TOA3
		ANL   A,#0FH
		ADD   A,#30H                ;30H IS THE ASCII CODE OF 0
		MOV   NUM_H,A
		RET
;WAIT FOR NUMBER OF MILLISECONDS IN DPTR
WTMS:   XRL   DPH,#0FFH
        XRL   DPL,#0FFH
		INC   DPTR
WT1:	MOV   TH0,#0FCH             ;1000'COMPLEMENT NUMBER IS 0FC18H
		MOV   TL0,#018H
		MOV   TMOD,#01H
		SETB  TCON.4
WT2:    JNB   TCON.5,WT2
        CLR   TCON.4
		CLR   TCON.5
        INC   DPTR
		MOV   A,DPL
		ORL   A,DPH
		JNZ   WT1
		RET
        END

⌨️ 快捷键说明

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