STC单片机串口发送数据汇编程序
扫描二维码
随时随地手机看文章
本段程序是在STC官方程序的基础上精简而成,只保留了串口单向发送,使用串口助手可以接收到数据。
本段代代码目的是为了调试的方便,单片机内部一些工作状态和数据可以通过串口发送出来,比如AD采集到的数据等,对调试程序会起到事半功倍的效果。以下为asm格式汇编代码:
; --- 使用伟福6000编译,STC15W401AS 实测通过------------
;-----定时器2用作串口1的波特率发生器-------
;在Keil开发环境下请选择Intel的8058芯片型号进行编译
;工作频率为11.0592MHz
;-----------------------------------------
AUXR EQU 08EH ;//辅助寄存器
T2H DATA 0D6H ;//定时器2高8位
T2L DATA 0D7H ;//定时器2低8位
BUSY BIT 20H.0 ;//忙标志位
;-----------------------------------------
ORG 0000H
LJMP MAIN
ORG 0023H
LJMP UART_ISR
;//-----------------------------------------
ORG 0100H
MAIN:
CLR A
CLR BUSY
CLR EA
MOV SP,#3FH
;//-------------------------------
MOV SCON,#50H ;//8位可变波特率,无校验
MOV T2L,#0D0H ;//设置波特率重装值(65536-18432000/4/115200)
MOV T2H,#0FFH ; #FFD0对应波特率57600
MOV AUXR,#14H ;//T2为1T模式, 并启动定时器2
ORL AUXR,#01H ;//选择定时器2为串口1的波特率发生器
SETB ES ;//使能串口中断
SETB EA
;//-------------------------------
;发送串口测试数据,三次
MOV A,#0FH
LCALL SENDDATA
MOV A,#0BH
LCALL SENDDATA
MOV A,#0CH
LCALL SENDDATA
SJMP $
;UART 中断服务程序
;----------------------------*/
UART_ISR:
PUSH ACC
PUSH PSW
JNB TI,ISR_EXIT ;//检测TI位
CLR TI ;//清除TI位
CLR BUSY ;//清忙标志
ISR_EXIT:
POP PSW
POP ACC
RETI
;
SENDDATA:
JB BUSY,$ ;//等待前面的数据发送完成
SETB BUSY
MOV SBUF,A ;//写数据到UART数据寄存器
RET
;//-----------------------------------------
END