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

📄 transmitter.a51

📁 uart communication uart communication
💻 A51
📖 第 1 页 / 共 2 页
字号:
INCLUDE REG_52.PDF
RB0     EQU     000H    ; Select Register Bank 0
RB1     EQU     008H    ; Select Register Bank 1  ...poke to PSW to use

;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
;		PORT DECLERATION
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 

WRITE		EQU		P1.0
SEND		EQU	   P1.1

KEYB_CLOCK	EQU	P3.3
KEYB_DATA	EQU	P3.2

	KB_LSHIFT		EQU      12H
    KB_RSHIFT		EQU      59H
    KB_CTRL		EQU      14H
    KB_ALT		EQU      11H
    KB_CAPS		EQU      58H
    KB_SCROLL		EQU      7EH
    KB_NUML		EQU      77H
    KB_TAB		EQU      0DH
    KB_REL		EQU      0F0H
    KB_EXT		EQU      0E0H
    KB_PAUSE		EQU      0E1H
    
    CAPS		EQU          01H
    NUML		EQU          02H
    SCROLL	EQU          04H
    SHIFT	EQU          08H
    ACK		EQU          10H
    CTRL		EQU          20H
    ALT		EQU          40H
    
    RELEASE	EQU        	 80H
    PAUSED	EQU         40H
    EXTENDED EQU       80H
; ***LCD CONTROL***
LCD_RS    EQU    P0.0     ;LCD REGISTER SELECT LINE
LCD_E     EQU    P0.1    ;LCD ENABLE LINE
LCD_DB4   EQU    P0.2     ;PORT 1 IS USED FOR DATA
LCD_DB5   EQU    P0.3     ;USED FOR DATA
LCD_DB6   EQU    P0.4    ;FOR DATA
LCD_DB7   EQU    P0.5     ;FOR DATA

; ***CURSOR CONTROL INSTRUCTIONS***

OFFCUR    EQU    0CH
BLINKCUR  EQU    0DH

; ***DISPLAY CONTROL INSTRUCTIONS***

CLRDSP    EQU    01H
ONDSP     EQU    0CH

; ***SYSTEM INSTRUCTIONS***

CONFIG    EQU    28H      ; 4-BIT DATA,2 LINES,5X7 MATRIX LCD
ENTRYMODE EQU    6        ; INCREMENT CURSOR DON'T SHIFT DISPLAY 

DSEG            ; This is internal data memory
ORG     20H     ; Bit adressable memory
FLAGS1:	DS		1
KEYBRD	BIT	FLAGS1.0
POLY		BIT	FLAGS1.1


KB_OK:		DS		1
KB_DATA:		DS		1
KB_STATS:		DS		1
KB_SCAN:		DS		1
KB_TEMP:		DS		1  ; For the da*n pause key
KB_COUNT:	DS		1
COUNT:		DS		1
MSG:		DS			64
STACK:	DS	1
CSEG            ; Code begins here
         
;  ---------==========----------==========---------=========---------
;  Main routine. Program execution starts here.
;  ---------==========----------==========---------=========---------
		ORG     00H    ; Reset
;  ---------==========----------==========---------=========---------		
MAIN:		
         MOV SP,#70H
         MOV PSW,#RB0    		  ; Select register bank 0
			MOV TMOD,#20H
			MOV TH1,#0A0H
			MOV SCON,#50H
			CLR KEYBRD
			
			SETB TR1	
			CALL RESETLCD4
			CALL INITLCD4
MAINS:	CALL TITLE1
			CALL DELAYS
			CALL DELAYS

		
			SETB WRITE
			SETB SEND
			JB WRITE,$					;CHK WRITE BUTTON
LAP:		CALL DELAY
			JNB WRITE,$
						
			
LAP1:		JB KEYBRD,LAOPS
			CALL InitKeyb				;Inizialize Keyboard 
      	MOV a, KB_OK
      	JZ KBNotOK   
      	SETB KEYBRD 
LAP1S:  	JNB WRITE,$
			CALL EDIT_DATA				;enter the text
      	CALL CLEAR_MEMORY
   		MOV R0,#MSG 
   		MOV R5,#64   
      	SETB WRITE					;CHK WRITE BUTTON	FOR CANCEL EDITING
LAOPS:	CALL Check_Keyb 
			JNB WRITE,LAP1S
			JNB SEND,SEN_DATA
        	JNC LAOPS
        	MOV A,KB_DATA
        	MOV @R0,A
        	INC R0
        	CJNE R5,#64,LINE1					;CLEAR SCREEN
        	MOV R4,#01H
        	CALL WRLCDCOM4
        	CALL MDELAY
			MOV R4,#80H
        	CALL WRLCDCOM4
        	CALL MDELAY 
        	MOV R4,#0FH
        	CALL WRLCDCOM4
        	CALL MDELAY 
        	AJMP LINE
KBNotOK:	AJMP KBNotOKS        	
LINE1:  	CJNE R5,#48,LINE2					;SECOND LINE
        	MOV R4,#0C0H
        	CALL WRLCDCOM4
        	CALL MDELAY
        	AJMP LINE
LINE2:  	CJNE R5,#32,LINE3					;SECOND PAGE FIRST LINE
			MOV R4,#01H
        	CALL WRLCDCOM4
        	CALL MDELAY
			MOV R4,#80H
        	CALL WRLCDCOM4
        	CALL MDELAY
        	AJMP LINE
LINE3:   CJNE R5,#16,LINE					;SECOND PAGE SECOND LINE
        	MOV R4,#0C0H
        	CALL WRLCDCOM4
        	CALL MDELAY
        	AJMP LINE
LINE:		MOV R4,KB_DATA
         CALL WRLCDDATA
         CALL MDELAY
        	DJNZ R5,LAOPS
        	
        	CALL PRESS_SENT
        	
        	SETB SEND
        	SETB WRITE
HERE:  	JNB SEND,SEN_DATA
        	JB WRITE,HERE
        	AJMP LAP
        	
SEN_DATA:
			CALL DELAY
			JNB SEND,$
			CALL ALGO_DISP					;DISP SELECT ALGORITHM
			SETB SEND
			SETB WRITE
			
NXT1:		JNB SEND,NEXT
			JB WRITE,NXT1
			CLR POLY
			CALL DELAY
			JNB WRITE,$
			CALL DELAY 
			AJMP NEXT1
			
			
NEXT:		SETB POLY
			CALL DELAY
			JNB SEND,$
			CALL DELAY 
			
NEXT1:	MOV COUNT,#00H
			CALL SELECT_KEY
			CALL DELAY
			CALL SENDING_DATA
			
			MOV R6,#50
						
TOPS:		
			MOV A,#0AAH			;START BYTE
			CALL TRANS 
			MOV A,#64
			CLR C
			SUBB A,R5		;TRANSMIT MESSAGE LENGTH
			MOV R5,A			
			CALL TRANS	
			JNB POLY,FGV1
			MOV A,#21H			;ENCRYPTION TYPE BYTE
			CALL TRANS			;AB FOR MONO
			AJMP FGV2
FGV1:		MOV A,#20H			;;AC FOR POLY	
			CALL TRANS	
FGV2:		MOV A,COUNT
			ADD A,#30H
			CALL TRANS			
			MOV R0,#MSG 		
REPEAT:	MOV A,@R0
   		INC R0
   		CALL TRANS
   		DJNZ R5,REPEAT
   		
   		SETB WRITE
   		JNB WRITE,LAP1SA
   		DJNZ R6,TOPS
   		
   		CALL DATA_SENT
   		CALL DELAYS
   		CALL DELAYS
   		CALL DELAYS
			AJMP MAINS		
			
LAP1SA:	CALL MDELAY
			JNB WRITE,$
			AJMP LAP1S			
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
CLEAR_MEMORY:
   		MOV R0,#MSG 
   		MOV R5,#64  
   		MOV A,#' '
PEER:		MOV @R0,A
   		INC R0
   		DJNZ R5,PEER 
   		RET
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
KBNotOKS:
			CALL DISP1
			SETB WRITE
			JB WRITE,$
			CALL MDELAY
			JNB WRITE,$
			AJMP LAP1		
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
DELAY:
		MOV R1,#0FFH
RE1:	MOV R2,#0FFH
RE:	NOP
		DJNZ R2,RE
		DJNZ R1,RE1
		RET
;**********************************************************		
;  ---------==========----------==========---------=========---------
TRANS:		
			MOV SBUF,A
			JNB TI,$
			CLR TI	
			RET			
;##########################################################
;		DISPLAY ROUTINES
;##########################################################
TITLE1:
	MOV DPTR,#MSAG1
	CALL LCD_MSG
	RET
MSAG1:
	DB 1H,82H,'Securred Comm',0C3H,'Automation   ',00H
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~	
SENDING_DATA:
	MOV DPTR,#MSAG2
	CALL LCD_MSG
	RET
MSAG2:
	DB 1H,80H,'Sending data....',00H
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~	
PRESS_SENT:
	MOV DPTR,#MSAG3
	CALL LCD_MSG
	RET
MSAG3:
	DB 1H,80H,'Write to Edit..',0C0H,'Send to Transmit',00H
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~	

DISP1:
	MOV DPTR,#MSG1
	CALL LCD_MSG
	RET
MSG1:
	DB 1H,84H,'Keyboard',0C3H,'* Not Ok *', 00H
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
EDIT_DATA:
	MOV DPTR,#MSG2
	CALL LCD_MSG
	RET
MSG2:
	DB 1H,80H,'Enter the text',0C0H,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
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
DATA_SENT:
	MOV DPTR,#MSG33
	CALL LCD_MSG
	RET
MSG33:
	DB 1H,80H,'Data send...',00H
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SELECT_KEY:
		MOV A,COUNT
		CJNE A,#00H,CVF0
		CALL ASK_KEY0
		AJMP CVFF
CVF0:	CJNE A,#01H,CVF1
		CALL ASK_KEY1
		AJMP CVFF
CVF1:	CJNE A,#02H,CVF2
		CALL ASK_KEY2
		AJMP CVFF
CVF2:	CJNE A,#03H,CVF3
		CALL ASK_KEY3
		AJMP CVFF
CVF3:	CJNE A,#04H,CVF4
		CALL ASK_KEY4
		AJMP CVFF
CVF4:	CJNE A,#05H,CVF5
		CALL ASK_KEY5
		AJMP CVFF
CVF5:	CJNE A,#06H,CVF6
		CALL ASK_KEY6
		AJMP CVFF
CVF6:	CJNE A,#07H,CVF7
		CALL ASK_KEY7
		AJMP CVFF
CVF7:	CJNE A,#08H,CVF8
		CALL ASK_KEY8
		AJMP CVFF
CVF8:	CJNE A,#09H,CVF9
		CALL ASK_KEY9
		AJMP CVFF
CVF9:	MOV COUNT,#00H
		AJMP SELECT_KEY
CVFF:	
		SETB WRITE
		SETB SEND
FCD3:	JNB WRITE,FCD1
		JNB SEND,FCD2	
		AJMP FCD3	

FCD2:	CALL MDELAY
		JNB SEND,$
		RET
FCD1:	INC COUNT
		MOV A,COUNT
		CALL MDELAY
		JNB WRITE,$
		AJMP SELECT_KEY	
;**********************************************************
; 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 WRITES A COMMAND WORD TO THE LCD
; COMMAND MUST BE PLACED IN R4 BY CALLING PROGRAM
; **********************************************************
WRLCDCOM4:
         CLR         LCD_E
         CLR         LCD_RS     ; SELECT SEND 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...

⌨️ 快捷键说明

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