?? uart.asm
字號:
;串口通信測試
;晶振6.0MHz,通信波特率7500,采用T2作為串行口波特率發生器
;文件名:UART.ASM
;于2006年9月22日至2006年9月24日編程 作者:唐元廣
;
;主程序段
ORG 0000H
LJMP MAIN ;轉主程序段
ORG 0023H
LJMP COMINT ;轉串行口中斷服務程序
ORG 0040H
MAIN: MOV SP,#80H ;堆??臻g128個字節
MOV A,#0FFH
MOV P0,A
MOV P3,A
MOV P2,A
MOV TMOD,#11H ;T0,T1為方式1(16位)
CLR A
MOV PSW,A ;通用寄存器R0-R7選擇0區
;面板指示燈及磁場量程的初使化程序段
MAINLB1:MOV IP,#10H ;設定,PS為高優先級(鄢定明書P107)
MOV PCON,#00H
MOV SCON,#070H ;選擇串行口方式1
MOV T2CON,#34H ;發送和接收波特率
MOV TH2,#0FFH ;設定時初值(波特率為:7500)
MOV TL2,#0E7H
MOV RCAP2H,#0FFH
MOV RCAP2L,#0E7H
CLR TR0 ;禁止定時器0工作
CLR ET0 ;禁止定時器0中斷
MOV 30H,#80H ;串行口接收數據緩沖區首單元置空
CLR ET1 ;禁止定時器1中斷
SETB EA ;允許CPU中斷
;主循環程序段
MAINLOP:SETB ES ;允許串行口中斷
MOV A,30H ;接收的控制數據送A
CLR C
PUSH A
SUBB A,#0BH
POP A
JNC MAINLOP ;為空轉回
CLR ES ;禁止串行口中斷
MOV B,#03H ;通訊功能程序入口地址表間隔
MUL AB
MOV 30H,#80H ;接收數據緩沖區置空
MOV DPTR,#KPRG1 ;指向通訊功能程序入口地址表首址
JMP @A+DPTR ;鍵功能程序散轉
;通訊功能程序入口地址表
KPRG1: LJMP MAGNCHG ;轉微機改變磁場量程轉換程序段
MAGNCHG:MOV A,#01H
LCALL TXDSUB
MOV A,#80H
LCALL TXDSUB
MOV A,#20H
LCALL TXDSUB
MOV A,#30H
LCALL TXDSUB
MOV A,#0DH ;給微機發送回車符
LCALL TXDSUB
LJMP MAINLOP
;串行口中斷服務程序段
;接收數據說明:一接收到0DH則中斷返回
;出口參數:接收的數據在緩沖區30H~37H中
COMINT: CLR ES ;關串行口中斷
JNB RI,COMINT0 ;不是接收數據中斷標志轉
CLR RI
PUSH 00H ;R0入棧
PUSH A
PUSH B
PUSH PSW
MOV A,SBUF
MOV 30H,A ;接收的控制數據送30H單元
MOV R0,#31H ;指向接收數據緩沖區首址
COMINT1:LCALL RXDSUB ;調用接收一字節子程序
MOV @R0,A
INC R0
CLR C
SUBB A,#0DH
JNZ COMINT1 ;沒有接收到0DH則繼續接收
POP PSW
POP B
POP A
POP 00H
COMINT0:CLR TI
SETB ES ;允許串行口中斷
RETI
;接收一字節子程序
;出口參數:接收到的ASCII碼在A中
RXDSUB: PUSH DPL
PUSH DPH
PUSH B
MOV B,#0AH
RXDLOP4:MOV DPH,#0FFH
RXDLOP3:MOV DPL,#0FFH
RXDLOP2:JNB RI,RXDLOP0 ;等待接收標志置位
SJMP RXDLOP1
RXDLOP0:DJNZ DPL,RXDLOP2
DJNZ DPH,RXDLOP3
DJNZ B,RXDLOP4 ;等待2.6S后未接收到則退出
MOV A,#0DH
SJMP RXDLOP5
RXDLOP1:CLR RI
MOV A,SBUF
RXDLOP5:POP B
POP DPH
POP DPL
RET
;發送一字節子程序段
;入口參數:要發送的數據送A中
TXDSUB: MOV SBUF,A
TDWAIT0:JNB TI,TDWAIT0
CLR TI
RET
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -