📄 fet440_adc12_temp.s43
字号:
#include "msp430x44x.h"
;******************************************************************************
; MSP-FET430P440 Demo - ADC12 TempSensor
;
; Description; Sample ADC12 channel A10. Internal ADC 1.5v reference,
; oscillator and interrupt used. Result is converted to BCD 0000 - 0262 oF
; saved in R13.
; // For accurate conversion, bias ADC12 references per device datasheet //
;
; MSP430F449
; -----------------
; /|\| XIN|-
; | | |
; --|RST XOUT|-
; | |
; |A10/Temp |
;
; M.Buccini
; Texas Instruments, Inc
; January 2002
;******************************************************************************
;------------------------------------------------------------------------------
ORG 0E000h ; Program Start
;------------------------------------------------------------------------------
RESET mov.w #0A00h,SP ; Initialize '449 stackpointer
call #Init_Sys ;
;
Mainloop bis.w #ADC12SC,&ADC12CTL0 ; start A/D conversion
bis.w #CPUOFF,SR ; Hold, ADC12 ISR will force exit
call #Trans2Temp ; Transform voltage to temperature
call #BIN2BCD4 ; R13 = 0000 - 9999 BCD
jmp Mainloop ;
;
;------------------------------------------------------------------------------
Init_Sys; Initalize MSP430 system
;------------------------------------------------------------------------------
StopWDT mov.w #WDTPW+WDTHOLD,&WDTCTL ; Stop WDT
SetupADC12 mov.w #SHT0_8+REFON+ADC12ON,&ADC12CTL0 ; 1.5v ref.
mov.w #SHP,&ADC12CTL1 ; Enable sample timer
mov.b #01Ah,&ADC12MCTL0 ; A10, internal reference
bis.w #0001h,&ADC12IE ; Enable interrupt
bis.w #ENC,&ADC12CTL0 ; Enable Conversion
eint ; General enable interrupts
ret ;
;
;-----------------------------------------------------------------------------
Trans2Temp; Subroutine coverts R12 = R12/4096*761-468
; oF = ((x/4096*1500mV)-923mV)*1/1.97mV = x*761/4096 - 468
; Input: R12 0000 - 0FFFh, R11 working register
; Output: R12 0000 - 0262
;-----------------------------------------------------------------------------
mov.w R12,&MPY ;
mov.w #761,&OP2 ; F
mov.w &RESHI,R12 ;
mov.w &RESLO,R11 ;
rlc.w R11 ; /4096
rlc.w R12 ;
rlc.w R11 ;
rlc.w R12 ;
rlc.w R11 ;
rlc.w R12 ;
rlc.w R11 ;
rlc.w R12 ;
sub.w #468,R12 ; F
ret ;
;
;-----------------------------------------------------------------------------
BIN2BCD4 ; Subroutine converts binary number R12 -> Packed 4-digit BCD R13
; Input: R12 0000 - 0FFFh, R15 working register
; Output: R13 0000 - 4095
;-----------------------------------------------------------------------------
mov.w #16,R15 ; Loop Counter
clr.w R13 ; 0 -> RESULT LSD
BIN1 rla.w R12 ; Binary MSB to carry
dadd.w R13,R13 ; RESULT x2 LSD
dec.w R15 ; Through?
jnz BIN1 ; Not through
ret ;
;
;-----------------------------------------------------------------------------
ADC12_ISR; ADC12MEM0 -> R12, exit any LPMx mode
; Output: R12 0000 - 0FFFh
;-----------------------------------------------------------------------------
mov.w &ADC12MEM0,R12 ; Clear IFG flag
mov.w #GIE,0(SP) ; Enable Int. exit LPMx on reti
reti ;
;
;------------------------------------------------------------------------------
; Interrupt Vectors Used MSP430x44x
;------------------------------------------------------------------------------
ORG 0FFFEh ; MSP430 RESET Vector
DW RESET ;
ORG 0FFEEh ; ADC12 Vector
DW ADC12_ISR ;
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -