STC單片機(jī)串口發(fā)送數(shù)據(jù)匯編程序
本段程序是在STC官方程序的基礎(chǔ)上精簡而成,只保留了串口單向發(fā)送,使用串口助手可以接收到數(shù)據(jù)。
本段代代碼目的是為了調(diào)試的方便,單片機(jī)內(nèi)部一些工作狀態(tài)和數(shù)據(jù)可以通過串口發(fā)送出來,比如AD采集到的數(shù)據(jù)等,對調(diào)試程序會起到事半功倍的效果。以下為asm格式匯編代碼:
; --- 使用偉福6000編譯,STC15W401AS 實(shí)測通過------------
;-----定時器2用作串口1的波特率發(fā)生器-------
;在Keil開發(fā)環(huán)境下請選擇Intel的8058芯片型號進(jìn)行編譯
;工作頻率為11.0592MHz
;-----------------------------------------
AUXR EQU 08EH ;//輔助寄存器
T2H DATA 0D6H ;//定時器2高8位
T2L DATA 0D7H ;//定時器2低8位
BUSY BIT 20H.0 ;//忙標(biāo)志位
;-----------------------------------------
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位可變波特率,無校驗(yàn)
MOV T2L,#0D0H ;//設(shè)置波特率重裝值(65536-18432000/4/115200)
MOV T2H,#0FFH ; #FFD0對應(yīng)波特率57600
MOV AUXR,#14H ;//T2為1T模式, 并啟動定時器2
ORL AUXR,#01H ;//選擇定時器2為串口1的波特率發(fā)生器
SETB ES ;//使能串口中斷
SETB EA
;//-------------------------------
;發(fā)送串口測試數(shù)據(jù),三次
MOV A,#0FH
LCALL SENDDATA
MOV A,#0BH
LCALL SENDDATA
MOV A,#0CH
LCALL SENDDATA
SJMP $
;UART 中斷服務(wù)程序
;----------------------------*/
UART_ISR:
PUSH ACC
PUSH PSW
JNB TI,ISR_EXIT ;//檢測TI位
CLR TI ;//清除TI位
CLR BUSY ;//清忙標(biāo)志
ISR_EXIT:
POP PSW
POP ACC
RETI
;
SENDDATA:
JB BUSY,$ ;//等待前面的數(shù)據(jù)發(fā)送完成
SETB BUSY
MOV SBUF,A ;//寫數(shù)據(jù)到UART數(shù)據(jù)寄存器
RET
;//-----------------------------------------
END