?? adc_lcd.s43
字號:
;******************************************************************************
; 文件名稱:
; ADC_LCD.s43
; 文件說明:
; 通過ADC12 對內部溫度傳感器進行數據采樣,把
; 溫度顯示到LCD,溫度顯示的格式是華氏溫度,帶兩位小數
;*****************************************************************************
#include "msp430x44x.h" ;
;*****************************************************************************
ORG 08000h ; 程序起始
;*****************************************************************************
RESET mov #0600h,SP ; 初始化堆棧
StopWDT mov #WDTPW+WDTHOLD,&WDTCTL ; 關看門狗
SetupFLL bis.b #XCAP14PF,&FLL_CTL0 ; 配置晶振去耦電容
mov #0fffh,r15
os_wait dec r15 ;延遲
jnz os_wait
call #lcd_display_ona ;初始化LCD
;*****************************************************************************
; 設置ADC12
;*****************************************************************************
SetupADC12 mov #ADC12ON+REFON+REF2_5V+SHT0_6,&ADC12CTL0
; 啟動ADC12,使用內部2.5V參考電壓, SHT0
; 位置位
mov #SHP,&ADC12CTL1 ; 使用采樣定時器
mov.b #INCH_10+SREF_1,&ADC12MCTL0 ; 使用 A10, Vref+
bis #BIT0,&ADC12IE ; 使能中斷
;
mov #03600h,R15 ; 設置delay量
L$1 dec R15 ;
jnz L$1 ;
bis #ENC,&ADC12CTL0 ; 使能轉換
eint ; 使能中斷
;*****************************************************************************
; 主循環
;*****************************************************************************
Mainloop bis #ADC12SC,&ADC12CTL0 ; 啟動轉換
bis #CPUOFF,SR ; 低功耗等待轉換完成
;
DispTemp mov #0h,R15 ; 清零R15
mov #32h,R5
;
jmp First_cmp ; 跳轉
CMPloop incd R15 ; inc R15
dadd #1,R5 ;
First_cmp cmp Temp_Tab(R15),R6 ; 比較 A/D 結果
jge CMPloop ;
;
;
L_C mov #00h,r7
mov #0h,r15
jmp First_cmp_c ;
CMPloop_c incd R15 ;
dadd #55h,R7 ;
First_cmp_c cmp Temp_Tab(R15),R6 ;
jge CMPloop_c ;
;
;
;**************************************************************************
; 顯示溫度到LCD
;**************************************************************************
LCD_DISP
call #show_clr
mov r7,r13
and #000fh,r13
mov.b lcd_table(R13),&LCDM1
mov r7,r13 ;顯示 D1
rra r13
rra r13
rra r13
rra r13
and #000fh,r13
mov.b lcd_table(R13),&LCDM2
mov.b r7,r13 ;·D2
swpb r13
and #000fh,r13
mov.b lcd_table(R13),R15
add.b #80h,r15
mov.b r15,&LCDM3 ;顯示 "."
mov r7,r13 ;顯示 D3
swpb r13
rra r13
rra r13
rra r13
rra r13
and #000fh,r13
mov.b lcd_table(R13),&LCDM4 ;顯示 d4
RET_1
mov #0ffh,r15 ;延遲
delay_1 dec r15
jnz delay_1
jmp Mainloop
;*************************************************************************
; 初始化LCD
;*************************************************************************
lcd_display_ona mov.b #0ffh,&P3DIR
mov.b #03h,&P4DIR
mov.b #0FCh,&P5SEL ;設置為外圍模塊
mov.b #LCDON+LCD4MUX+LCDP1,&LCDCTL ;設置 4Mux 模式
mov.b #BTFRFQ1,&BTCTL ;設置Basic Timer : SSEL=0 DIV=0 Reset=1,
;ACLK,32768/256 = 128Hz
;使能Basic Timer 中斷
call #show_clr ;LCD清0
ret
;****************************************************-
; 清除LCD緩沖區
;****************************************************-
show_clr
mov.b #01h,R15 ; 清除LCD緩存
show_clr1
mov.b #00h,LCDMEM(r15) ; 設置LCD初始值
inc.b R15 ; 計數器加一
cmp.b #0ah,R15 ; if r15>10
jnz show_clr1
ret
delay mov.b #0ffh,R15
ttt nop
nop
dec.b R15
jnz ttt
ret
;***********************************************************************
; 溫度轉換參考表,表值是根據公式計算得到,取的是近似值
;**********************************************************************
Temp_Tab DW 064Fh ;32F
DW 0652h
DW 0656h
DW 0659h ;35F
DW 065Ch
DW 065Fh
DW 0662h
DW 0666h
DW 0669h ;40F
DW 066Ch
DW 066Fh
DW 0673h
DW 0676h
DW 0679h ;45F
DW 067Ch
DW 0680h
DW 0683h
DW 0686h
DW 0689h ;50F
DW 068Ch
DW 0690h
DW 0693h
DW 0696h
DW 0699h ;55F
DW 069Dh
DW 06A0h
DW 06A3h
DW 06A6h
DW 06AAh ;60F
DW 06ADh
DW 06B0h
DW 06B3h
DW 06B6h
DW 06BAh ;65F
DW 06BDh
DW 06C0h
DW 06C3h
DW 06C7h
DW 06CAh ;70F
DW 06CDh
DW 06D0h
DW 06D4h
DW 06D7h
DW 06DAh ;75F
DW 06DDh
DW 06E0h
DW 06E4h
DW 06E7h
DW 06EAh ;80F
DW 06EDh
DW 06F1h
DW 06F4h
DW 06F7h
DW 06FAh ;85F
DW 06FEh
DW 0701h
DW 0704h
DW 0707h
DW 070Bh ;90F
DW 070Eh
DW 0711h
DW 0714h
DW 0717h
DW 071Bh ;95F
DW 071Eh
DW 0721h
DW 0724h
DW 0728h
DW 072Bh ;100F
DW 0FFFh ;溫度太高,超出處理范圍
;********************************************************
; LCD的數字對照表
;********************************************************
lcd_table
db 7bh ;0
db 12h ;1
db 4fh ;2
db 1fh ;3
db 36h ;4
db 3dh ;5
db 7dh ;6
db 13h ;7
db 7fh ;8
db 3fh ;9
db 73h ;A
db 7ch ;B
db 69h ;C
db 5eh ;d
db 6fh ;e
db 65h ;F
;*******************************************************************
ADC12ISR ; ADC12終端
;*******************************************************************
mov &ADC12MEM0,R6 ; 保存結果到R6
bic #CPUOFF,0(SP) ;
reti ;
;
;*******************************************************************
; 中斷向量表
;*******************************************************************
ORG 0FFFEh ; MSP430 RESET 向量
DW RESET ;
ORG 0FFEEh ; ADC12 中斷向量
DW ADC12ISR ;
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -