?? uart0rf.#1
字號:
;UART0RF.ASM ;C8051F UART0 方式0 發送、接收實驗
$include (c8051f020.inc) ; SFR declaration
MTD EQU 40H ;設接收緩沖首地址為40H
MRD EQU 40H ;設發送緩沖首地址為40H
ORG 0
AJMP MAIN
ORG 100H
MAIN:
MOV WDTCN, #0DEh ;關看門狗定時器
MOV WDTCN, #0ADh
LCALL UARTINT
SETB P1.2 ;P1.2=1,實驗電路處于接收串行數據輸入的狀態
MOV R2,#2 ;R2,連續傳送兩個字節
CLR P1.1 ;置數,將16位并口狀態數據置入74LS165內的寄存器
SETB P1.1
LCALL VUARTNI ;歸一化子程序,讀入74LS165發來的串行數據,并存入40H,41H中去
CLR P1.2 ;P1.2=0,實驗電路處于串行數據輸出的狀態
ACALL DELAY
CLR P1.0 ;清除74LS164的輸出口
SETB P1.0
MOV R2,#2 ;R=2,連續傳送兩個字節
LCALL VUARTNO ;歸一化子程序,將40H,41H內的數據從串行發送到74LS164去
AJMP MAIN
;UART方式0狀態下,發送N個字節的歸一化子程序。
VUARTNO:MOV R0,#MTD ;送緩沖區首地址入R0
MOV SCON0,#0 ;UART方式0設定
SOUT:MOV A,@R0 ;發送數據入A中
CLR TI ;發送標志清零
MOV SBUF0,A ;啟動發送
WAIO:JNB TI,WAIO ;發送等待
INC R0 ;指向下一個發送數據的地址
DJNZ R2,SOUT ;N個數據發送完否?未完轉SOUT
RET ;N個數據發送完,子程序結束
;UART方式0狀態下,接收N個字節的歸一化子程序
VUARTNI:MOV R0,#MRD ;送緩沖區首地址入R0
SIN: CLR RI ;清除接收結束標志
MOV SCON0,#10H ;UART方式0設定,啟動REN=1
WAI: JNB RI,WAI ;接收等待,接收完一幀,數據入SBUF中
MOV A,SBUF0 ;接收到的數據從A轉入接收緩沖區中
MOV @R0,A;
INC R0 ;指向下一個接收數據的地址
DJNZ R2,SIN; ;N個數據接收完否? 未完轉SIN
RET ;N個數據接收完,子程序結束。
DELAY:MOV R7,#10H ;延時子程序
DY:MOV R6,#0FFH
DJNZ R6,$
DJNZ R7,DY
RET
UARTINT: MOV XBR0,#04 ;選擇TX0、RX0連到P0.0,P0.1兩個引腳
MOV XBR2,#40H ;允許功能選擇開關
MOV P0MDOUT, #01 ;選擇P0.0為推拉方式,P0.1為漏極開路
MOV P1MDOUT ,#7H ;選擇P1.0,P1.1.P1.2為推拉方式
MOV OSCXCN,#67H ;選擇片外晶振頻率(11.0592MHZ)
WAIT: MOV A, OSCXCN
JNB ACC.7,WAIT ;等待外部晶體振蕩器穩定
MOV OSCICN,#08 ;選擇外部晶體振蕩器,關閉內部振蕩器
RET
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -