📄 63a
字号:
;*******************************************
;MCU-PIC16C63A,WDT=ON,HS,16MHZ
;本例将寄存器BUFFER1和BUFFER2中的数据串口发送出去,没有中断调用,单片机选用PIC16C63A
;*******************************************
LIST P=PIC16C63A
INCLUDE "P16C63A.INC"
ORG 0000H
GOTO MAIN
BUFFER1 EQU 20H
BUFFER2 EQU 21H
MAIN MOVLW 0X55
MOVWF BUFFER1
MOVLW 0X56
MOVWF BUFFER2
;发送过程
BSF STATUS,RP0
MOVLW 25H
MOVWF SPBRG;设定波特率9600
CLRF TXSTA;SYNC=0-异步方式,没有第9位,BRGH=0低速
BCF STATUS,RP0
MOVLW B'10010000'
MOVWF RCSTA;SPEN=1,串口使能
BSF TXSTA,TXEN;允许发送
MOVF BUFFER1,W;发送第一个寄存器数据
MOVWF TXREG
again BTFSS TXSTA,TRMT;判断TSR为空则间断
GOTO again
MOVF BUFFER2,W;发送第二个寄存器数据
MOVWF TXREG
again2 BTFSS TXSTA,TRMT;判断TSR为空则间断
GOTO again2
NOP
END
list p=16c63 ; list directive to define processor
#include <p16c63.inc> ; processor specific variable definitions
__CONFIG _BODEN_OFF&_CP_OFF&_WRT_ENABLE_ON&_PWRTE_ON&_WDT_OFF&_XT_OSC&_DEBUG_OFF&_CPD_OFF&_LVP_OFF
; '__CONFIG' directive is used to embed configuration data within .asm file.
; The lables following the directive are located in the respective .inc file.
; See respective data sheet for additional information on configuration word.
;***** VARIABLE DEFINITIONS
w_temp EQU 0x20 ; variable used for context saving
status_temp EQU 0x21 ; variable used for context saving
Buffer1 EQU 0x22
Buffer2 EQU 0x23
;**********************************************************************
ORG 0x000 ; processor reset vector
nop
clrf PCLATH ; ensure page bits are cleared
goto main ; go to beginning of program
ORG 0x004 ; interrupt vector location
movwf w_temp ; save off current W register contents
movf STATUS,w ; move status register into W register
bcf STATUS,RP0 ; ensure file register bank set to 0
movwf status_temp ; save off contents of STATUS register
; isr code can go here or be located as a call subroutine elsewhere
bcf STATUS,RP0 ; ensure file register bank set to 0
movf status_temp,w ; retrieve copy of STATUS register
movwf STATUS ; restore pre-isr STATUS register contents
swapf w_temp,f
swapf w_temp,w ; restore pre-isr W register contents
retfie ; return from interrupt
ORG 40H
main
banksel TRISC ; MPLAB提供的宏,BANK选择
MOVLW 0X80
MOVWF TRISC ; TX/RX口输入输出配置
banksel SPBRG
MOVLW D'25' ; 十进制的25
MOVWF SPBRG ; 9600 BPS/ 4MHZ
banksel TXSTA
CLRF TXSTA
BSF TXSTA,BRGH ; HIGH SPEED/ASYN/8BITS
BSF TXSTA,TXEN
banksel RCSTA
CLRF RCSTA
BSF RCSTA,SPEN ; SERIAL PORT ENABLE
BSF RCSTA,CREN ; CONTINUOUS RECEIVE ENABLE
; 8BITS/DISABLE ADDEN
banksel TXREG
movf Buffer1,W
movwf TXREG
call TXPOLL
movf Buffer2,W
movwf TXREG
call TXPOLL
goto $
;************************************************
;* RXPOLL - This function polls the USART *
;* receive interrupt flag and waits until a *
;* data byte is available in RCREG. *
;************************************************
RXPOLL
bcf STATUS,RP0
btfss PIR1,RCIF
goto RXPOLL
return
;************************************************
;* TXPOLL - This function polls the TRMT flag *
;* and waits until the USART has finished *
;* shifting the data byte out of the transmit *
;* shift register. *
;************************************************
TXPOLL
bsf STATUS,RP0
TLOOP
btfss TXSTA,TRMT
goto TLOOP
bcf STATUS,RP0
return
END ; directive 'end of program'
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -