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

📄 ex1401.asm

📁 PIC单片机指令集
💻 ASM
字号:
;
;	UART (Universal Asynchronous Receiver Transmitter)
;
;	Transmit ASCII of 4x4 keys w/o display (by polling )
;	Display received ASCII on LCD ( by Interrupt )
;	
;
	LIST P=16F877, R=DEC
	#INCLUDE P16F877.INC
	CBLOCK 0X20
	ENDC
;
;	DEFINE RAM
;
	CBLOCK
	 W_BAK, STATUS_BAK		; back up RAM for w register
;	 KYBUF
	ENDC
;
;
	ORG 0
	NOP
	GOTO MAIN
;
	ORG 4
PUSH:
	MOVWF W_BAK		; save w register
	SWAPF STATUS,W
	CLRF STATUS		
	MOVWF STATUS_BAK	; save status register	
;
	MOVF RCREG,W
	CALL putcLCD
	BCF PIR1,RCIF
;
POP:
	SWAPF 	STATUS_BAK,W	; Restore STATUS
	MOVWF	STATUS
	SWAPF 	W_BAK,F		; Restore WREG w/o
	SWAPF	W_BAK,W		; affecting STATUS
	RETFIE
;
;---------------------------------------------------------------;
								;
	#INCLUDE <putLINE.INC>					;
								;
;	ASCII table must be 16 characters in one line		;
; !!!	tables must be located at the front end of every page	;
								;
putLINE_TBL:							;
	ADDWF PCL						;
	DT "RS232 9600,N,8,1"	; (16 chracters in one line)	;
;	DT "   00:00:00     "	; (16 chracters in one line)	;
;								;
;===============================================================;
;
NUM_TO_CHR_TBL:
	ANDLW H'0F'
	ADDWF PCL
	DT "0123456789ABCDEF"	; ASCII of numbers 0~F
;
;---------------------------------------------------------------;
								;
	#INCLUDE <LCD.INC>					;
								;
; Defines for I/O ports that provide LCD data & control		;
								;
LCD_DATA	equ	PORTB					;
LCD_CNTL	equ	PORTB					;
								;
RS	equ	5	; RS=PORTB,5				;
E	equ	4						;
								;
;===============================================================;

MAIN:
;
;************************************************
;*   - Initialize the USART                     *
;*       - 9600 Baud @ 16MHz                    *
;*       - 8-bit transmit                       *
;*       - Transmit enabled                     *
;*       - Asynchronous                         *
;*       - High speed baud rate select          *
;*       - Serial port enabled                  *
;*       - 8-bit reception                      *
;*       - Enable continuous receive            *
;*       - Enable address detect                *
;************************************************
;
	BANKSEL SPBRG
	MOVLW	103			; SPBRG value for 9600 BAUD @ 16MHZ
	MOVWF	SPBRG
;
	CLRF	TXSTA               	; clear and setup TXSTA(TX9:0=8bit) 
	BSF	TXSTA,BRGH           	; enable high BAUD RATE
	BSF	TXSTA,TXEN           	; enable serial transmission
;
	BANKSEL RCSTA
	CLRF	RCSTA                	; clear and setup RCSTA(RX:0=8bit) 
	BSF	RCSTA,CREN           	; enable continuous reception
	BSF	RCSTA,SPEN           	; enable serial port
;  
	BANKSEL PIE1			; enable recption interrupt
	BSF PIE1,RCIE
;
	BANKSEL PIR1
	BCF PIR1,RCIF			; clear reception flag
	BSF INTCON,PEIE			; enable peripheral interrupt
	BSF INTCON,GIE			; enable global interrupt
;
;***************************************;
;
	CALL	InitLCD			; initiallize LCD
	CALL	clrLCD
	CALL	L1homeLCD		; locate cursor to line 1
	MOVLW	0
	CALL putLINE			; put "RECEIVED DATA : " in line 1
	CALL	L2homeLCD		; locate cursor to line 2
;
MAIN1:
	CALL KB4X4
	BTFSC KYBUF,4			; key pressed?
	GOTO MAIN1
;
	MOVF KYBUF,W
	CALL NUM_TO_CHR_TBL		; convert key data to ASCII
	MOVWF TXREG			; transmit data now!
	BCF PIR1,TXIF	
MAIN2:
	BTFSS PIR1,TXIF		
	GOTO MAIN2			; wait for finish of transmission
;
MAIN3:
	CALL KB4X4
	BTFSS KYBUF,4			; wait for key released
	GOTO MAIN3
	GOTO MAIN1
;
;---------------------------------------------------------------;
								;
	#INCLUDE <KB4X4.INC>					;
								;
;	externally defined pins (in main program)		;
								;
PORT4X4	EQU PORTD	; 0~3=I/P, 4~7=O/P			;
TRIS4X4	EQU TRISD	; set direction of port			;
								;
;===============================================================;
;
;
;
	END

⌨️ 快捷键说明

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