完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我用430f149的A0到A6通道采集Ia-Ua-Ib-Ub-Ic-UC,由定时器A定时采样,初步为1ms采样1次。当P1.0口有上升沿时触发定时器,下一个上升沿关闭定时器,再下一个开启定时器,再下一个关闭......我单步能采集到电压值,为什么连续时就观察不到采样值呢?
语言描述太差,不知道说清楚了没?没的话在补充 #include "msp430x14x.h" #include "global.h" uchar flag1=0; //脉冲标志位 void init_clk(); void init_port(); void main() { WDTCTL = WDTPW + WDTHOLD; init_clk(); init_port(); init_adc12(); init_timerA(); _EINT(); while(1); } void init_clk() { int i; BCSCTL1 &= ~XT2OFF; for (i=0;i<1024;i++) _NOP(); do { IFG1 &= ~OFIFG; for (i = 0xFF; i > 0; i--); } while ((IFG1 & OFIFG) != 0); BCSCTL2 |= SELM1+SELS; } void init_port() { //设置P1.0上升沿中断检测频率起始和结束 P1DIR&=~BIT0; //P1.0输入 P1IE|=0x01; //P1.0中断允许 P1IES&=~BIT0; //P1.0上升沿出发 P1IFG&=~BIT0; //P1.0中断标志清除 P6SEL|=0x3F; //使能AD通道A0-A5 } #pragma vector=PORT1_VECTOR __interrupt void Port_1() { flag1=(flag1+1)%2; if(flag1==1) { start_timerA(); } else { stop_timerA(); } } *******************************************adc12.c******************************************* #include "msp430x14x.h" #include "global.h" unsigned char index=0; unsigned int IAresults[20]; unsigned int UAresults[20]; unsigned int IBresults[20]; unsigned int UBresults[20]; unsigned int ICresults[20]; unsigned int UCresults[20]; /******************************************* 函数名称: ADC12初始化 功 能: 采样变频电压电流的瞬时值 参 数: 无 返 回 值: 无 说 明: 采用430内部2.5V参考电压,序列通道单次转换 ********************************************/ void init_adc12() { uint i; ADC12CTL0&=~ENC; ADC12CTL0|=ADC12ON+REFON+REF2_5V+SHT0_2+MSC; //打开AD内核,启动内部2.5V参考电压,设置采样时钟,多次采样 for(i=0;i<0x3600;i++) //为参考源启动提供延时 { } ADC12CTL1|=SHP+CONSEQ_1; //SAMPCON来自采样定时器,序列通道单次转换 ADC12MCTL0=INCH_0+SREF_1; //VR+=Vref+,VR-=AVss,通道A0 ADC12MCTL1=INCH_1+SREF_1; //VR+=Vref+,VR-=AVss,通道A0 ADC12MCTL2=INCH_2+SREF_1; //VR+=Vref+,VR-=AVss,通道A0 ADC12MCTL3=INCH_3+SREF_1; //VR+=Vref+,VR-=AVss,通道A0 ADC12MCTL4=INCH_4+SREF_1; //VR+=Vref+,VR-=AVss,通道A0 ADC12MCTL5=INCH_5+SREF_1+EOS; //VR+=Vref+,VR-=AVss,通道A0,最后序列 ADC12IE|=0x20; //使能中断ADC12IFG.5 ADC12CTL0|=ENC; } void start_adc12() { // ADC12CTL0|=ENC; ADC12CTL0|=ADC12SC; //开始转换 } #pragma vector=ADC_VECTOR __interrupt void adc_int(void) { IAresults[index]=ADC12MEM0; UAresults[index]=ADC12MEM1; IBresults[index]=ADC12MEM2; UBresults[index]=ADC12MEM3; ICresults[index]=ADC12MEM4; UCresults[index]=ADC12MEM5; index++; } *******************************************timerA.c******************************************* #include "msp430x14x.h" #include "global.h" /******************************************* 函数名称: 定时器A初始化 功 能: 利用定时器产出1ms的定时,定时启动ADC12采样 参 数: 无 返 回 值: 无 说 明: 定时器时钟SMCLK,赠计数模式工作 ********************************************/ void init_timerA() { TACTL|=TASSEL1+TACLR; //SMCLK.清除TAR. CCTL0|=CCIE; //比较模式.允许中断 CCR0=8000; //定时时间1ms } void start_timerA() //赠计数模式 { TACTL|=TASSEL1+TACLR+ID_3; TACTL|=MC_1; } void stop_timerA() { TACTL|=MC_0; } #pragma vector=TIMERA0_VECTOR __interrupt void Timer_A(void) { start_adc12(); } |
|
相关推荐
1个回答
|
|
大神,这里面的AD采样可以只换成一个AD通道采样吗?只采集一个0~5v的电压,可以吗?
|
|
|
|
只有小组成员才能发言,加入小组>>
2905个成员聚集在这个小组
加入小组2649 浏览 1 评论
MSP430FR5994 使用库函数 定时器触发AD问题请教
2951 浏览 2 评论
请问怎么把下面51单片机的代码改成msp430 g2 pocket的代码,还有改下时间变成30秒
2253 浏览 1 评论
4668 浏览 1 评论
2461 浏览 1 评论
913浏览 3评论
MSP430FR5994 使用库函数 定时器触发AD问题请教
2951浏览 2评论
2649浏览 1评论
1043浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-8-11 11:20 , Processed in 1.145853 second(s), Total 50, Slave 43 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191