;******************************************************************************
; 文件名:WDTRUN.S
; 功能:运行WDT,并控制数码管D1显示输出。程序开始先对数码管D1全闪烁控制,并进行喂
; 狗处理;然后显示'-',并进入死循环,等待WDT复位。
; 说明:将跳线器JP3短接。
;******************************************************************************
INCLUDE LPC2294.INC
EXPORT MAIN
; 定义SPI控制口
SPI_CS EQU (1 SPI_DATA EQU (1 SPI_CLK EQU (1
SPI_IOCON EQU (SPI_CS|SPI_DATA|SPI_CLK) ; SPI接口的I/O设置字
AREA WDTRUNC,CODE,READONLY
MAIN LDR SP,=0x40003F00 ; 设置堆栈指针
LDR R0,=PINSEL0 ; 设置所有管脚连接GPIO
MOV R1,#0x00000000
STR R1,[R0]
STR R1,[R0,#0x04]
LDR R0,=IO0DIR ; 设置SPI控制口为输出
LDR R1,=SPI_IOCON
STR R1,[R0]
LDR R0,=WDTC
LDR R1,=0x5F0000
STR R1,[R0] ; 设置WDTC,喂狗重装值
LDR R0,=WDMOD
MOV R1,#0x03
STR R1,[R0] ; 设置并启动WDT
BL RSTWDT
MOV R5,#18
MAIN_LOOP MOV R2,#0x00
BL HC595_SENDDAT ; 发送显示
BL DELAYS ; 软件延时
MOV R2,#0xFF
BL HC595_SENDDAT ; 发送显示
BL DELAYS ; 软件延时
SUBS R5,R5,#1 ; R5=R5-1
BNE MAIN_LOOP
MOV R2,#0xBF
BL HC595_SENDDAT ; 发送显示
HALT B HALT
;******************************************************************************
; 名称:HC595_SENDDAT
; 功能:向74HC595发送一字节数据
; 入口参数:R2 待发送的数据,低8位有效
; 出口参数:无
; 占用资源:(R0、R1、R2、R7)
;******************************************************************************
HC595_SENDDAT
STMFD SP!,{R0-R12,LR} ; 寄存器入栈保护
LDR R0,=IO0CLR ; SPI_CS = 0
MOV R1,#SPI_CS
STR R1,[R0]
MOV R7,#8
HC595_SDL1 LDR R0,=IO0CLR ; SPI_CLK = 0
MOV R1,#SPI_CLK
STR R1,[R0]
ANDS R1,R2,#0x00000080 ; 判断要发送的数据位,并设置SPI_DAT
LDRNE R0,=IO0SET
LDREQ R0,=IO0CLR
MOV R1,#SPI_DATA
STR R1,[R0]
MOV R2,R2,LSL #1 ; 数据左移一位
LDR R0,=IO0SET ; SPI_CLK = 1
MOV R1,#SPI_CLK
STR R1,[R0]
SUBS R7,R7,#1
BNE HC595_SDL1 ; 若数据未发送完毕,再次发送
LDR R0,=IO0SET ; SPI_CS = 1,输出显示数据
MOV R1,#SPI_CS
STR R1,[R0]
LDMFD SP!,{R0-R12,PC} ; 返回
;******************************************************************************
; 名称:DELAYS
; 功能:软件延时。并具有清WDT指令。
; 入口参数:无
; 出口参数:无
; 占用资源:(R7)
;******************************************************************************
DELAYS
STMFD SP!,{R0-R7,LR} ; 保存参数
MOV R7,#0x18000 ; 延时参数
DELAYS_L1 BL RSTWDT
SUBS R7,R7,#1 ; R7 = R7-1
BNE DELAYS_L1 ; 判断R7-1结果是否为0,若不为0则跳
LDMFD SP!,{R0-R7,PC} ; 返回
;******************************************************************************
; 名称:RSTWDT
; 功能:清WDT
; 入口参数:无
; 出口参数:无
; 占用资源:R0、R1
;******************************************************************************
RSTWDT
LDR R0,=WDFEED
MOV R1,#0xAA
STR R1,[R0]
MOV R1,#0x55
STR R1,[R0]
MOV PC,LR
END