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 + -
显示快捷键?