📄 t232.asm
字号:
;主函数
#include <P16f877a.inc> ;定义所用的单片机头文件
COUNT EQU 0x20
_WREG EQU 0x21
_STATUS EQU 0x22
#define STAR_RCadd 0x50 ;串口接收数据起始存放地址
#define END_RCadd 0x70 ;串口接收数据结束存放地址
org 0x00
RESET nop
goto Start
org 0X04
INIT_V
bcf INTCON,GIE
Push
movwf _WREG ; 存 WREG状态
swapf STATUS,W ; 存 STATUS
movwf _STATUS
bcf STATUS,RP0
btfsc PIR1,RCIF ;读走数据后硬件自动清中断标志,故无须清除
call RCintsever
Pop
swapf _STATUS,W ; Restore STATUS
movwf STATUS
swapf _WREG,F ; Restore WREG w/o
swapf _WREG,W ; affecting STATUS
bsf INTCON,GIE
retfie
ORG 0X20;
Start
clrf INTCON
CALL INITDATA
clrf _WREG
CLRF _STATUS;
movlw 0xC0
MOVWF INTCON ; ENABLE GIE,PEIE
call InitUart
CALL TXDATA;
MOVLW 0X50;
MOVWF FSR;
GOTO $;
;*******************************************
InitUart ;初始化串行口
movlw 0x90
movwf RCSTA ;ENABLE UART,8BIT DATA,连续接收允许。
bsf STATUS,RP0
bsf TRISC,7 ;RX INPUT
bcf TRISC,6 ;TX OUTPUT
movlw 0x24
movwf TXSTA ;异步方式,发送允许,8位数据,高速波特率(配合4M振荡),TSR满??
movlw 0X19 ;9600=4000000/(16*(X+1))->X=25 0.16% 0x19
movwf SPBRG ;high speed mode
bsf PIE1,RCIE ;接收中断允许
bcf STATUS,RP0
return
INITDATA
MOVLW 0X2F;
MOVWF FSR; FSR=2FH
MOVLW 0X40;
GOINITDATA
INCF FSR,F; FSR=30H
MOVWF INDF;
INCF INDF,F; 0X41----30H;
MOVF INDF,W;
BTFSS FSR,3; FSR=38H,FINISH 0X41-0X48-----30H-37H
GOTO GOINITDATA;
RETURN
TXDATA ;发送数据子程序
MOVLW 0X30;
MOVWF FSR;
GOTXDATA
MOVF INDF,W; 0X41----W
MOVWF TXREG;
BSF STATUS,RP0;
BTFSS TXSTA,TRMT;
GOTO $-1;
BCF STATUS,RP0;
INCF FSR;
BTFSS FSR,3
goto GOTXDATA;
return
RCintsever ;接收数据中断服务程序
btfsc RCSTA,OERR ;溢出
goto RCerror
movf RCREG,w
movwf INDF
incf FSR,f
return
RCerror
bcf RCSTA,CREN
bsf RCSTA,CREN
return
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -