?? sendstr.s
字號(hào):
;******************************************************************************
; 文件名:SENDSTR.S
; 功能:向串口發(fā)送數(shù)據(jù)。
; 說(shuō)明:使用外部11.0592MHz晶振,系統(tǒng)時(shí)鐘配置后Fpclk=11.0592MHz;
; 通訊波特率115200,8位數(shù)據(jù)位,1位停止位,無(wú)奇偶校驗(yàn)。
;******************************************************************************
INCLUDE LPC2294.INC
EXPORT MAIN
FPCLK EQU 11059200 ; 定義FPclk
ART_BPS EQU 115200 ; 定義波特率
AREA SENDSTRC,CODE,READONLY
ENTRY
MAIN LDR SP,=0x40003F00 ; 設(shè)置堆棧指出針
LDR R0,=PINSEL0 ; 設(shè)置IO口使用為UART0
MOV R1,#0x05
STR R1,[R0]
; 設(shè)置系統(tǒng)時(shí)鐘
LDR R0,=VPBDIV
MOV R1,#0x00
STR R1,[R0] ; VPBDIV=0x00
LDR R0,=PLLCFG
MOV R1,#0x23
STR R1,[R0] ; PLLCFG=0x23,設(shè)置M值為4,P值為2
LDR R0,=PLLCON
MOV R1,#0x01
STR R1,[R0] ; PLLCON=0x01
LDR R0,=PLLFEED
MOV R1,#0xAA
STR R1,[R0] ; PLLFEED=0xAA
MOV R1,#0x55
STR R1,[R0] ; PLLFEED=0x55
WAIT_OK LDR R0,=PLLSTAT
LDR R1,[R0]
ANDS R1,R1,#0x0400
BEQ WAIT_OK ; 等待PLL鎖定
LDR R0,=PLLCON
MOV R1,#0x03
STR R1,[R0]
LDR R0,=PLLFEED
MOV R1,#0xAA
STR R1,[R0]
MOV R1,#0x55
STR R1,[R0]
BL UART0_INI ; 初始化串口UART0,設(shè)置波特率
LOOP LDR R3,=HELLO
BL UART0_SENDSTR ; 發(fā)送字串,字串中以0x00結(jié)束
BL DELAYS ; 軟件延時(shí)
B LOOP
;******************************************************************************
; 名稱:DELAYS
; 功能:軟件延時(shí)
; 入口參數(shù):無(wú)
; 出口參數(shù):無(wú)
; 占用資源:R7
;******************************************************************************
DELAYS
MOV R7,#0x0000FF00 ; 延時(shí)參數(shù)
DELAYS_L1 SUBS R7,R7,#1 ; R7 = R7-1
BNE DELAYS_L1 ; 判斷R7-1結(jié)果是否為0,若不為0則跳轉(zhuǎn)
MOV PC,LR ; 返回
;******************************************************************************
; 名稱:UART0_INI
; 功能:初始化串口0。設(shè)置為8位數(shù)據(jù)位,1位停止位,無(wú)奇偶校驗(yàn),波特率為9600
; 入口參數(shù):無(wú)
; 出口參數(shù):無(wú)
; 占用資源:R0、R1
;******************************************************************************
UART0_INI
LDR R0,=U0LCR ; 設(shè)置UART工作模式
MOV R1,#0x83 ; DLAB = 1,可設(shè)置波特率
STR R1,[R0]
LDR R0,=U0DLL ; 設(shè)置波特率
MOV R1,#(FPCLK/16/ART_BPS):MOD:256
STR R1,[R0]
LDR R0,=U0DLM
MOV R1,#(FPCLK/16/ART_BPS)/256
STR R1,[R0]
LDR R0,=U0LCR
MOV R1,#0x03
STR R1,[R0] ; 8位數(shù)據(jù)位,1位停止位,無(wú)奇偶校驗(yàn),DLAB = 0
MOV PC,LR ; 返回
;******************************************************************************
; 名稱:UART0_SENDB
; 功能:串口發(fā)送字節(jié)數(shù)據(jù)。向UART0發(fā)送一字節(jié)數(shù)據(jù),并等待發(fā)送完畢
; 入口參數(shù):R1 要發(fā)送的數(shù)據(jù),低8位有效
; 出口參數(shù):無(wú)
; 占用資源:R0、R1
;******************************************************************************
UART0_SENDB
LDR R0,=U0THR
STR R1,[R0] ; 發(fā)送數(shù)據(jù)
LDR R0,=U0LSR ; 等待發(fā)送完畢
UART0SD_L1 LDR R1,[R0]
ANDS R1,R1,#0x40
BEQ UART0SD_L1
MOV PC,LR
;******************************************************************************
; 名稱:UART0_SENDSTR
; 功能:向UART0發(fā)送字符串。發(fā)送字串指針R3,字串中以0x00結(jié)束
; 入口參數(shù):R3 要發(fā)送字串指針
; 出口參數(shù):無(wú)
; 占用資源:R0、R1
;******************************************************************************
UART0_SENDSTR
STMFA SP!,{R0-R9, LR}
UART0SR_L1 LDR R1,[R3],#4
CMP R1,#0x00
BEQ UART0SR_L2 ; 若數(shù)據(jù)為0x00,返回
BL UART0_SENDB
B UART0SR_L1
UART0SR_L2 LDMFA SP!,{R0-R9, LR}
MOV PC,LR
LTORG ; 在此聲明文字池
HELLO DCD 'H', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd', '!', '\r','\n',0x0
END
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -