⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sendstr.s

📁 easyARM2100开发板资料及应用程序举例说明
💻 S
字号:
;****************************************************************************** 
; 文件名:SENDSTR.S
; 功能:向串口发送数据。
; 说明:使用外部11.0592MHz晶振,系统时钟配置后Fpclk=11.0592MHz;
;      通讯波特率115200,8位数据位,1位停止位,无奇偶校验。
;****************************************************************************** 
			INCLUDE		LPC2294.INC
			EXPORT  	MAIN
			
FPCLK		EQU		11059200				; 定义FPclk
ART_BPS		EQU		115200					; 定义波特率
			
			AREA   	SENDSTRC,CODE,READONLY 								
		
MAIN 		LDR		SP,=0x40003F00			; 设置堆栈指出针
			LDR		R0,=PINSEL0				; 设置IO口使用为UART0
			MOV		R1,#0x05
			STR		R1,[R0]
			
			BL		SYSCLK_INI				; 设置系统时钟
			
			BL		UART0_INI				; 初始化串口UART0,设置波特率
LOOP		LDR		R3,=HELLO
			BL		UART0_SENDSTR			; 发送字串,字串中以0x00结束
			BL		DELAYS					; 软件延时
			B		LOOP


;******************************************************************************		
; 名称:SYSCLK_INI
; 功能:设置系统时钟。(M值为4,P值为2)
; 入口参数:无
; 出口参数:无
; 占用资源:R0、R1		
;******************************************************************************
SYSCLK_INI	
			LDR		R0,=VPBDIV
			MOV		R1,#0x00
			STR		R1,[R0]					; VPBDIV=0x00
			
			LDR		R0,=PLLCFG
			MOV		R1,#0x23
			STR		R1,[R0]					; PLLCFG=0x23,设置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]	
			
			MOV		PC,LR

;******************************************************************************
; 名称:DELAYS
; 功能:软件延时
; 入口参数:无
; 出口参数:无
; 占用资源:R7
;******************************************************************************
DELAYS	
			MOV		R7,#0x000FF000			; 延时参数
DELAYS_L1	SUBS	R7,R7,#1				; R7 = R7-1
			BNE		DELAYS_L1               ; 判断R7-1结果是否为0,若不为0则跳转
			MOV		PC,LR					; 返回
			
			

;******************************************************************************			
; 名称:UART0_INI
; 功能:初始化串口0。设置为8位数据位,1位停止位,无奇偶校验,波特率为9600
; 入口参数:无
; 出口参数:无
; 占用资源:R0、R1
;******************************************************************************
UART0_INI			
			LDR		R0,=U0LCR			    ; 设置UART工作模式
			MOV		R1,#0x83				; DLAB = 1,可设置波特率
			STR		R1,[R0]
					
			LDR		R0,=U0DLL			    ; 设置波特率
			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位数据位,1位停止位,无奇偶校验,DLAB = 0 
			
			MOV		PC,LR					; 返回		


;******************************************************************************
; 名称:UART0_SENDB
; 功能:串口发送字节数据。向UART0发送一字节数据,并等待发送完毕
; 入口参数:R1		要发送的数据,低8位有效
; 出口参数:无
; 占用资源:R0、R1			
;******************************************************************************
UART0_SENDB
			LDR		R0,=U0THR			
			STR		R1,[R0]					; 发送数据

			LDR		R0,=U0LSR			    ; 等待发送完毕
UART0SD_L1	LDR		R1,[R0]
			ANDS	R1,R1,#0x40
			BEQ		UART0SD_L1
			
			MOV		PC,LR
			
			
;******************************************************************************
; 名称:UART0_SENDSTR
; 功能:向UART0发送字符串。发送字串指针R3,字串中以0x00结束
; 入口参数:R3		要发送字串指针
; 出口参数:无
; 占用资源:R0、R1
;******************************************************************************
UART0_SENDSTR
			STMFA 	SP!,{R0-R9, LR}
			
UART0SR_L1	LDR		R1,[R3],#4
			CMP		R1,#0x00
			BEQ		UART0SR_L2				; 若数据为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


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -