?? adc0.s
字號(hào):
;******************************************************************************
; 文件名:ADC0.S
; 功能:使用ADC模塊的通道0進(jìn)行電壓的測(cè)量,然后將轉(zhuǎn)換結(jié)果的高8位值輸出LED數(shù)碼管顯
; 示。顯示格式:a段對(duì)d0位,b段對(duì)d1位,c段對(duì)d2位......
; 說明:由W1調(diào)節(jié)測(cè)量電壓值。
;******************************************************************************
INCLUDE LPC2294.INC
EXPORT MAIN
; 定義PCLK值
FPCLK EQU 11059200
; 定義ADC控制字 (設(shè)置通道0進(jìn)行ADC轉(zhuǎn)換)
ADC_MODE EQU (1 << 0)\
| ((FPCLK / 1000000 - 1) << 8)\
| (0 << 16)\
| (0 << 17)\
| (1 << 21)\
| (0 << 22)\
| (1 << 24)\
| (0 << 27)
; 定義SPI控制口
SPI_CS EQU (1<<29) ; P0.29
SPI_DATA EQU (1<<6) ; P0.6
SPI_CLK EQU (1<<4) ; P0.4
SPI_IOCON EQU (SPI_CS|SPI_DATA|SPI_CLK) ; SPI接口的I/O設(shè)置字
AREA LEDDISPC,CODE,READONLY
CODE32
MAIN LDR SP,=0x40003F00
LDR R0,=PINSEL0
MOV R1,#0x00000000
STR R1,[R0]
MOV R1,#0x00400000 ; 設(shè)置P0.27連接到AIN0
STR R1,[R0,#0x04]
BL SYSCLK_INI ; 設(shè)置系統(tǒng)時(shí)鐘
LDR R0,=IO0DIR ; 設(shè)置SPI控制口為輸出
LDR R1,=SPI_IOCON
STR R1,[R0]
MAIN_LOOP LDR R0,=ADCR
LDR R1,=ADC_MODE
STR R1,[R0] ; 啟動(dòng)ADC轉(zhuǎn)換
BL DELAYS
LDR R0,=ADDR
LDR R1,[R0]
ANDS R1,R1,#0x80000000
BEQ MAIN_LOOP ; 判斷AD轉(zhuǎn)換是否已結(jié)束
LDR R1,[R0] ; 讀取ADC轉(zhuǎn)換結(jié)果
MVN R2,R1,LSR #0x08 ; 右移8位后得到8位ADC數(shù)據(jù),取反后放入R2
BL HC595_SENDDAT ; 發(fā)送顯示
B MAIN_LOOP
;******************************************************************************
; 名稱:SYSCLK_INI
; 功能:設(shè)置系統(tǒng)時(shí)鐘。(M值為4,P值為2)
; 入口參數(shù):無
; 出口參數(shù):無
; 占用資源: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,設(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]
MOV PC,LR
;******************************************************************************
; 名稱:HC595_SENDDAT
; 功能:向74HC595發(fā)送一字節(jié)數(shù)據(jù)
; 入口參數(shù):R2 待發(fā)送的數(shù)據(jù),低8位有效
; 出口參數(shù):無
; 占用資源:(R0、R1、R2、R7)
;******************************************************************************
HC595_SENDDAT
STMFD SP!,{R0-R12,LR} ; 寄存器入棧保護(hù)
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 ; 判斷要發(fā)送的數(shù)據(jù)位,并設(shè)置SPI_DAT
LDRNE R0,=IO0SET
LDREQ R0,=IO0CLR
MOV R1,#SPI_DATA
STR R1,[R0]
MOV R2,R2,LSL #1 ; 數(shù)據(jù)左移一位
LDR R0,=IO0SET ; SPI_CLK = 1
MOV R1,#SPI_CLK
STR R1,[R0]
SUBS R7,R7,#1
BNE HC595_SDL1 ; 若數(shù)據(jù)未發(fā)送完畢,再次發(fā)送
LDR R0,=IO0SET ; SPI_CS = 1,輸出顯示數(shù)據(jù)
MOV R1,#SPI_CS
STR R1,[R0]
LDMFD SP!,{R0-R12,PC} ; 返回
;******************************************************************************
; 名稱:DELAYS
; 功能:軟件延時(shí)
; 入口參數(shù):無
; 出口參數(shù):無
; 占用資源:R7
;******************************************************************************
DELAYS
MOV R7,#0x000FF000 ; 延時(shí)參數(shù)
DELAYS_L1 SUBS R7,R7,#1 ; R7 = R7-1
BNE DELAYS_L1 ; 判斷R7-1結(jié)果是否為0,若不為0則跳轉(zhuǎn)
MOV PC,LR ; 返回
LTORG ; 聲明文字池
END
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -