📄 ex1401.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 + -