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

📄 crycomm rx.a51

📁 uart communication uart communication
💻 A51
📖 第 1 页 / 共 2 页
字号:
MSAG2:
	DB 1H,80H,'Waiting for Data',00H
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~	
ALGO_DISP:
	MOV DPTR,#MSG21
	CALL LCD_MSG
	RET
MSG21:
	DB 1H,80H,'Monoalphabetic  ',0C0H,'Polyalphabetic  ',00H
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ASK_KEY0:
	MOV DPTR,#MSG22
	CALL LCD_MSG
	RET
MSG22:
	DB 1H,80H,'Please select',0C0H,'the Key: 0',00H
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ASK_KEY1:
	MOV DPTR,#MSG23
	CALL LCD_MSG
	RET
MSG23:
	DB 1H,80H,'Please select',0C0H,'the Key: 1',00H
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ASK_KEY2:
	MOV DPTR,#MSG24
	CALL LCD_MSG
	RET
MSG24:
	DB 1H,80H,'Please select',0C0H,'the Key: 2',00H
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ASK_KEY3:
	MOV DPTR,#MSG25
	CALL LCD_MSG
	RET
MSG25:
	DB 1H,80H,'Please select',0C0H,'the Key: 3',00H
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ASK_KEY4:
	MOV DPTR,#MSG26
	CALL LCD_MSG
	RET
MSG26:
	DB 1H,80H,'Please select',0C0H,'the Key: 4',00H
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ASK_KEY5:
	MOV DPTR,#MSG261
	CALL LCD_MSG
	RET
MSG261:
	DB 1H,80H,'Please select',0C0H,'the Key: 5',00H
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ASK_KEY6:
	MOV DPTR,#MSG27
	CALL LCD_MSG
	RET
MSG27:
	DB 1H,80H,'Please select',0C0H,'the Key: 6',00H
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ASK_KEY7:
	MOV DPTR,#MSG29
	CALL LCD_MSG
	RET
MSG29:
	DB 1H,80H,'Please select',0C0H,'the Key: 7',00H
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ASK_KEY8:
	MOV DPTR,#MSG30
	CALL LCD_MSG
	RET
MSG30:
	DB 1H,80H,'Please select',0C0H,'the Key: 8',00H
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ASK_KEY9:
	MOV DPTR,#MSG31
	CALL LCD_MSG
	RET
MSG31:
	DB 1H,80H,'Please select',0C0H,'the Key: 9',00H
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
MSG_RECEIVED:
	MOV DPTR,#MSG33
	CALL LCD_MSG
	RET
MSG33:
	DB 1H,80H,'1 Message',0C0H,'Received...',00H
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;**********************************************************
; INITIALIZE THE LCD 4-BIT MODE                                                                                   
;**********************************************************
INITLCD4:
         CLR         LCD_RS     ; LCD REGISTER SELECT LINE
         CLR         LCD_E      ; ENABLE LINE
         MOV         R4, #CONFIG; FUNCTION SET - DATA BITS,
                                ; LINES, FONTS
         CALL       WRLCDCOM4
         MOV         R4, #ONDSP ; DISPLAY ON
         CALL       WRLCDCOM4
         MOV         R4, #ENTRYMODE ; SET ENTRY MODE
         CALL       WRLCDCOM4  ; INCREMENT CURSOR RIGHT, NO SHIFT
         MOV         R4, #CLRDSP; CLEAR DISPLAY, HOME CURSOR
         CALL       WRLCDCOM4
         RET


; **********************************************************
; SOFTWARE VERSION OF THE POWER ON RESET
; **********************************************************
RESETLCD4:
         CLR         LCD_RS     ; LCD REGISTER SELECT LINE
         CLR         LCD_E      ; ENABLE LINE
         CLR         LCD_DB7    ; SET BIT PATTERN FOR...
         CLR         LCD_DB6    ; ... POWER-ON-RESET
         SETB        LCD_DB5
         SETB        LCD_DB4
         SETB        LCD_E      ; START ENABLE PULSE
         CLR         LCD_E      ; END ENABLE PULSE
         MOV         A, #4      ; DELAY 4 MILLISECONDS
         CALL       MDELAY
         SETB        LCD_E      ; START ENABLE PULSE
         CLR         LCD_E      ; END ENABLE PULSE
         MOV         A, #1      ; DELAY 1 MILLISECOND
         CALL       MDELAY
         SETB        LCD_E      ; START ENABLE PULSE
         CLR         LCD_E      ; END ENABLE PULSE
         MOV         A, #1      ; DELAY 1 MILLISECOND
         CALL       MDELAY
         CLR         LCD_DB4    ; SPECIFY 4-BIT OPERATION
         SETB        LCD_E      ; START ENABLE PULSE
         CLR         LCD_E      ; END ENABLE PULSE
         MOV         A, #1      ; DELAY 1 MILLISECOND
         CALL       MDELAY
         MOV         R4, #CONFIG; FUNCTION SET
         CALL       WRLCDCOM4
         MOV         R4, #08H   ; DISPLAY OFF
         CALL       WRLCDCOM4
         MOV         R4, #1     ; CLEAR DISPLAY, HOME CURSOR
         CALL       WRLCDCOM4
         MOV         R4,#ENTRYMODE  ; SET ENTRY MODE
         ACALL       WRLCDCOM4
 	   JMP INITLCD4

; **********************************************************
; SUB RECEIVES A COMMAND WORD TO THE LCD
; COMMAND MUST BE PLACED IN R4 BY CALLING PROGRAM
; **********************************************************
WRLCDCOM4:
         CLR         LCD_E
         CLR         LCD_RS     ; SELECT READ COMMAND
         PUSH        ACC        ; SAVE ACCUMULATOR
         MOV         A, R4      ; PUT DATA BYTE IN ACC
         MOV         C, ACC.4   ; LOAD HIGH NIBBLE ON DATA BUS
         MOV         LCD_DB4, C ; ONE BIT AT A TIME USING...
         MOV         C, ACC.5   ; BIT MOVE OPERATOINS
         MOV         LCD_DB5, C
         MOV         C, ACC.6
         MOV         LCD_DB6, C
         MOV         C, ACC.7
         MOV         LCD_DB7, C
         SETB        LCD_E      ; PULSE THE ENABLE LINE
         CLR         LCD_E
         MOV         C, ACC.0   ; SIMILARLY, LOAD LOW NIBBLE
         MOV         LCD_DB4, C
         MOV         C, ACC.1
         MOV         LCD_DB5, C
         MOV         C, ACC.2
         MOV         LCD_DB6, C
         MOV         C, ACC.3
         MOV         LCD_DB7, C
         CLR         LCD_E
         SETB        LCD_E      ; PULSE THE ENABLE LINE
         CLR         LCD_E
         CALL MADELAY
         POP         ACC
         RET
; **********************************************************
; SUB TO RECEIVE A DATA WORD TO THE LCD
; DATA MUST BE PLACED IN R4 BY CALLING PROGRAM
; **********************************************************
WRLCDDATA:
         CLR         LCD_E
         SETB        LCD_RS     ; SELECT READ DATA
             PUSH        ACC        ; SAVE ACCUMULATOR
         MOV         A, R4      ; PUT DATA BYTE IN ACC
         MOV         C, ACC.4   ; LOAD HIGH NIBBLE ON DATA BUS
         MOV         LCD_DB4, C ; ONE BIT AT A TIME USING...
         MOV         C, ACC.5   ; BIT MOVE OPERATOINS
         MOV         LCD_DB5, C
         MOV         C, ACC.6
         MOV         LCD_DB6, C
         MOV         C, ACC.7
         MOV         LCD_DB7, C
         SETB        LCD_E      ; PULSE THE ENABLE LINE
         CLR         LCD_E
         MOV         C, ACC.0   ; SIMILARLY, LOAD LOW NIBBLE
         MOV         LCD_DB4, C
         MOV         C, ACC.1
         MOV         LCD_DB5, C
         MOV         C, ACC.2
         MOV         LCD_DB6, C
         MOV         C, ACC.3
         MOV         LCD_DB7, C
         CLR         LCD_E
         SETB        LCD_E      ; PULSE THE ENABLE LINE
         CLR         LCD_E
         NOP
         NOP
         POP         ACC
         RET

; **********************************************************
; SUB TAKES THE STRING IMMEDIATELY FOLLOWING THE CALL AND
; DISPLAYS ON THE LCD. STRING MUST BE TERMINATED WITH A
; NULL (0).
; **********************************************************
LCD_MSG:
	CLR A			; Clear Index 
	MOVC A,@A+DPTR		; Get byte pointed by Dptr 
	INC DPTR			; Point to the next byte 
	JZ LCD_Msg9		; Return if found the zero (end of stringz) 
        CJNE A,#01H,Lcd_Msg1	; Check if is a Clear Command 
	MOV R4,A
	CALL WRLCDCOM4       	;If yes, RECEIVE it as command to LCD 
	JMP   LCD_MSG          	;Go get next byte from stringz 
                              
Lcd_Msg1: CJNE A,#0FFH,FLL	;Check for displaying full character
	MOV R4,A
	CALL WRLCDDATA
	JMP LCD_MSG
 FLL:	CJNE  A,#080h,$+3      	; Data or Address?  If => 80h then is address. 
	JC    Lcd_Msg_Data     	; Carry will be set if A < 80h (Data) 
	MOV R4,A
	CALL  WRLCDCOM4         ; Carry not set if A=>80, it is address 
	JMP Lcd_Msg          	; Go get next byte from stringz 
                             
Lcd_Msg_Data:                   ; 
	MOV R4,A
	CALL WRLCDDATA        	; It was data, RECEIVE it to Lcd 
	JMP  Lcd_Msg          		; Go get next byte from stringz 
Lcd_Msg9: 
	
	RET                    	; Return to Caller 

; **********************************************************
; 1 MILLISECOND DELAY ROUTINE
; **********************************************************

MDELAY:
         PUSH        ACC
         MOV         A,#0A6H
MD_OLP:
         INC         A
         NOP
         NOP
         NOP
         NOP
         NOP
         NOP
         NOP
         NOP
         JNZ         MD_OLP
         NOP
         POP         ACC
         RET
MADELAY:
         PUSH        ACC
         MOV         A,#036H
MAD_OLP:
         INC         A
         NOP
         NOP
         NOP
         NOP
         NOP
         NOP
         NOP
         NOP
         JNZ         MAD_OLP
         NOP
         POP         ACC
         RET
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
DELAYS:                       ;One second delay routine
  MOV R6, #00H               ;put 0 in register R6 (R6 = 0)
   MOV R5, #04H              ;put 5 in register R5 (R5 = 4)
LOOPB:
   INC R6                     ;increase R6 by one (R6 = R6 +1)
   ACALL DELAYMS              ;call the routine above. It will run and return to here. 
   MOV A, R6                  ;move value in R6 to A                    
   JNZ LOOPB                  ;if A is not 0, go to LOOPB
  DEC R5                     ;decrease R5 by one. (R5 = R5 -1)
  MOV A, R5                  ;move value in R5 to A
   JNZ LOOPB                  ;if A is not 0 then go to LOOPB. 
  RET
;**************************************************************************
DELAYMS:                      ;millisecond delay routine
;                             ;
   MOV R7,#00H                ;put value of 0 in register R7
LOOPA:                          
   INC R7                     ;increase R7 by one (R7 = R7 +1)
   MOV A,R7                   ;move value in R7 to Accumlator (also known as A)
   CJNE A,#0FFH,LOOPA         ;compare A to FF hex (256). If not equal go to LOOPA
   RET                        ;return to the point that this routine was called from
;************************************************************************** 
 END
   

⌨️ 快捷键说明

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