adc10_sch_rt.s43
来自「MSP430F22X单片机开发套件源代码」· S43 代码 · 共 70 行
S43
70 行
#include "msp430x20x2.h"
;此程序是用ADC10单通道多次方式测片内温度二极管的电压
;连续作了10次AD并将结果存在ad_value的数组中
;调试程序并观察ADC10MEM及ad_value的数值
; MSP430F20x2
; -----------------
; /|\| XIN|-
; | | |
; --|RST XOUT|-
; | |
; |A10 (Temp) P1.0|-->LED
;-------------------------------------------------------------------------------
ADCDeltaOn EQU 3 ;当AD采样值高于第一次AD值+ADCDeltaOn时,P1.0输出高电平
;-------------------------------------------------------------------------------
NAME main
PUBLIC main
;-------------------------------------------------------------------------------
; MSP430F22x中断向量表
;-------------------------------------------------------------------------------
ORG 0FFFEh
DC16 main
ORG 0FFEAh ;ADC10中断向量
DC16 adc10_isr
ORG 0FFF2h ;TIMER_A1中断向量
DC16 ta0_isr
;------------------------------------------------------------------------------
RSEG CODE ;程序开始
;------------------------------------------------------------------------------
main MOV.W #0600H,SP ;设置堆栈指针
stopWDT MOV.W #WDTPW+WDTHOLD,&WDTCTL ;关看门狗
MOV.B &CALBC1_1MHZ,&BCSCTL1 ;设定DCO为1MHZ
MOV.B &CALDCO_1MHZ,&DCOCTL
;时钟源选AD内部时钟并4分频,选通道10,AD启动信号来源选TA.OUT1,选单通道连续采样
MOV.W #ADC10DIV_3+INCH_10+SHS_1+CONSEQ_2,&ADC10CTL1
;选2.5V为正向参考,地为负参考,AD中断使能,打开参考,启动AD模块(不是启动AD转换)
MOV.W #SREF_1+ADC10SHT_3+REF2_5V+ADC10IE+REFON+ADC10ON,&ADC10CTL0
MOV.W #30,&TACCR0 ;延时等待参考稳定
BIS.W #CCIE,&TACCTL0 ;CCR0中断使能
MOV.W #TACLR+MC_1+TASSEL_2,&TACTL;TA增计数,时钟源为smclk
BIS.W #LPM0+GIE,SR ;进入低功耗0,使能总中断
BIC.W #CCIE,&TACCTL0 ;CCR0中断禁止
DINT ;关总中断
BIS.W #ENC,&ADC10CTL0 ;AD转换使能
MOV.W #OUTMOD_4,&TACCTL1 ;CCR1选输出模式4,当TAR=0时,输出高电平
MOV.W #TASSEL_2+MC_2,&TACTL ;TA改为连续计数,smclk时钟源
ADC_wait BIT.W #ADC10IFG,&ADC10CTL0 ;测试第一次转换是否结束
JZ ADC_wait
MOV.W &ADC10MEM,R4 ;读出第一次AD转换的值
ADD.W #ADCDeltaOn,R4 ;将AD值加上ADCDeltaOn
CLR.B &P1OUT
BIS.B #01h,&P1DIR
mainloop BIS.W #LPM0+GIE,SR ;进入低功耗0,使能总中断
NOP ;用于调试
;-------------------------------------------------------------------------------
ta0_isr; ISR for TACCR0
;-------------------------------------------------------------------------------
CLR.W &TACTL ;TA停止计数
BIC.W #LPM0,0(SP) ;退出低功耗
RETI
;-------------------------------------------------------------------------------
adc10_isr;
;-------------------------------------------------------------------------------
CMP.W R4,&ADC10MEM ;当AD采样值高于第一次AD值+ADCDeltaOn时,P1.0输出高电平
JLO adc_isr_1
BIS.B #01h,&P1OUT
RETI
adc_isr_1 BIC.B #01h,&P1OUT ;否者清p1.0
RETI
END main
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?