?? main.a51
字號:
;*******************************************************************************
;程序名稱:簡單的串行口收發
;硬件接法:RXD和TXD通過RS-232電平轉換電路接到電腦的串行口上
;運行效果:開機時向電腦發送Hello,然后接收電腦發出的字符并回顯
;*******************************************************************************
;*******************************************************************************
;定義波特率(取值1200、2400、4800、9600、19200等)
;*******************************************************************************
BaudRate EQU 9600
;*******************************************************************************
;復位入口
;*******************************************************************************
ORG 0x0000
LJMP PreMain
;*******************************************************************************
;程序段:PreMain
;功能:進入主程序之前的初始化操作
;*******************************************************************************
PreMain:
MOV SP, #0x30
LJMP main
;*******************************************************************************
;函數:void UartInit()
;功能:串行口初始化
;*******************************************************************************
UartInit:
MOV SCON, #0x50 ;串口方式1(8位UART),允許接收
ORL PCON, #0x80 ;波特率加倍
ANL TMOD, #0x0F ;設置T1為8位自動重裝定時器,用于產生波特率
ORL TMOD, #0x20
MOV TL1, #(256-57600/BaudRate) ;根據波特率設置T1初值
MOV TH1, TL1
SETB TR1 ;啟動T1
RET
;*******************************************************************************
;函數:void UartSendChar(char c)
;功能:通過串行口發送單個字節
;參數:c = R7,是被發送的字節數據,取值0x00~0xFF
;*******************************************************************************
UartSendChar:
MOV SBUF, R7 ;數據寫入SBUF,同時啟動硬件發送過程
JNB TI, $ ;等待發送完畢
CLR TI ;清除發送標志
RET
;*******************************************************************************
;函數:void UartSendStr(char *s)
;功能:通過串行口發送單個字節
;參數:*s = (R6,R7),是被發送的字符串
;*******************************************************************************
UartSendStr:
MOV DPH, R6
MOV DPL, R7
UartSendStr_Loop:
CLR A
MOVC A, @A+DPTR
INC DPTR
JZ UartSendStr_end ;遇到字符串結束標志0x00時,停止發送
MOV R7, A
CALL UartSendChar
SJMP UartSendStr_Loop
UartSendStr_end:
RET
;*******************************************************************************
;函數:void main()
;功能:主函數
;*******************************************************************************
main:
CALL UartInit ;串行口初始化
MOV R6, #HIGH(main_String)
MOV R7, #LOW(main_String)
CALL UartSendStr ;發送Hello字符串
main_Loop:
JNB RI, $ ;等待接收數據
CLR RI ;清除接收標志
MOV R7, SBUF ;讀取接收到的數據
CALL UartSendChar ;回送收到的數據
SJMP main_Loop
main_String:
DB 'Hello',0x0D,0x0A,0x00
;*******************************************************************************
;程序結束
;*******************************************************************************
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -