历史上的今天
今天是:2024年10月10日(星期四)
2019年10月10日 | MSP430学习笔记2-ADC12
2019-10-10 来源:eefocus
开发版型号:SEED—MSP430F5529A
开发工具 :CCS 5.4v
以下内容是CCS中ADC12操作的一些简单的demo,现整理如下:
有关MSP430F5529芯片ADC12相关资料,可参考《MSP430x5xx and MSP430x6xx Family User's Guide (Rev. M)——Chapter 28 ADC12_A》
1:demo描述
Description: A single sample is made on A0 with reference to AVcc.
Software sets ADC12SC to start sample and conversion - ADC12SC
automatically cleared at EOC. ADC12 internal oscillator times sample (16x)
and conversion. In Mainloop MSP430 waits in LPM0 to save power until ADC12
conversion complete, ADC12_ISR will force exit from LPM0 in Mainloop on
reti. If A0 > 0.5*AVcc, P1.0 set, else reset.
参考AVcc电压、以A0定时器作为采样输入信号源的、单通道单次模式采样,当采样信号大于0.5*AVcc时,P1.0置位,否则为0。
代码如下:
1 #include 2 3 int main(void) 4 { 5 WDTCTL = WDTPW + WDTHOLD; // Stop WDT 6 ADC12CTL0 = ADC12SHT02 + ADC12ON; // Sampling time, ADC12 on 7 ADC12CTL1 = ADC12SHP; // Use sampling timer 8 ADC12IE = 0x01; // Enable interrupt 9 ADC12CTL0 |= ADC12ENC; 10 P6SEL |= 0x01; // P6.0 ADC option select 11 P1DIR |= 0x01; // P1.0 output 12 13 while (1) 14 { 15 ADC12CTL0 |= ADC12SC; // Start sampling/conversion 16 17 __bis_SR_register(LPM0_bits + GIE); // LPM0, ADC12_ISR will force exit 18 __no_operation(); // For debugger 19 } 20 } 21 22 #pragma vector = ADC12_VECTOR 23 __interrupt void ADC12_ISR(void) 24 { 25 switch(__even_in_range(ADC12IV,34)) 26 { 27 case 0: break; // Vector 0: No interrupt 28 case 2: break; // Vector 2: ADC overflow 29 case 4: break; // Vector 4: ADC timing overflow 30 case 6: // Vector 6: ADC12IFG0 31 if (ADC12MEM0 >= 0x7ff) // ADC12MEM = A0 > 0.5AVcc? 32 P1OUT |= BIT0; // P1.0 = 1 33 else 34 P1OUT &= ~BIT0; // P1.0 = 0 35 36 __bic_SR_register_on_exit(LPM0_bits); // Exit active CPU 37 case 8: break; // Vector 8: ADC12IFG1 38 case 10: break; // Vector 10: ADC12IFG2 39 case 12: break; // Vector 12: ADC12IFG3 40 case 14: break; // Vector 14: ADC12IFG4 41 case 16: break; // Vector 16: ADC12IFG5 42 case 18: break; // Vector 18: ADC12IFG6 43 case 20: break; // Vector 20: ADC12IFG7 44 case 22: break; // Vector 22: ADC12IFG8 45 case 24: break; // Vector 24: ADC12IFG9 46 case 26: break; // Vector 26: ADC12IFG10 47 case 28: break; // Vector 28: ADC12IFG11 48 case 30: break; // Vector 30: ADC12IFG12 49 case 32: break; // Vector 32: ADC12IFG13 50 case 34: break; // Vector 34: ADC12IFG14 51 default: break; 52 } 53 } 2:代码分析 1)主函数中代码: 1 ADC12CTL0 = ADC12SHT02 + ADC12ON; // Sampling time, ADC12 on 2 ADC12CTL1 = ADC12SHP; // Use sampling timer 3 ADC12IE = 0x01; // Enable interrupt 4 ADC12CTL0 |= ADC12ENC; 5 6 ADC12CTL0 |= ADC12SC; // Start sampling/conversion 参考控制寄存器如下: ADCSHT0x :采样保持定时器0,该四位定义了保存在转换存储寄存器中转换结果的采样周期; ADC12ENC:转换允许 ADC12SHP:选择采样定时器A0输出 ADC12IE:中断允许 (来自中断允许寄存器) 2)中断部分代码: 中断寄存向量ADC12IV中的数字(0-36)用来判断中断标志寄存器中相关位是否置位,此时表明转换结果已经装入转换存储寄存器中,具体数字的含义参见下图: 3) 1 if (ADC12MEM0 >= 0x7ff) // ADC12MEM = A0 > 0.5AVcc? 2 P1OUT |= BIT0; // P1.0 = 1 3 else 4 P1OUT &= ~BIT0; // P1.0 = 0 参考电压使用VCC,因为ADC精度为12位(4095),所以0x7FF(2047)就是0.5Vcc的AD值


史海拾趣
|
在实现复杂信号处理算法时,FPGA硬件数字信号处理(DSP)体系结构发挥了很大的作用。Altera Stratix®V FPGA 具有精度可调DSP模块体系结构,是能够有效支持包括浮点实现等多种不同精度级的唯一可编程器件。采用64位级联总线和累加器,设计人员不 ...… 查看全部问答> |
|
有没有熟悉此模块的大哥啊~小弟最近在用这个模块。用其内部的python编程接口。在采到gps信息,放入一个变量A当中后,我该怎样操作,才能将这些gps信息通过短信的方式发送出去啊。也就是短信内容,不需要自己输入,而是发送一个变量中的内容,该如何 ...… 查看全部问答> |
|
不安全状态一定导致死锁状态吗? 不安全状态是指不存在任何一个安全序列,那最终结果将导致死锁吧, 有没可能当前处于不安全状态,有不会导致死锁呢? 我搜了搜,有的说一定会,一定说不一定,到底答案是什么?… 查看全部问答> |
|
12864液晶模块,3块,每块40元 320240液晶显示模块,用的时间不超过一小时,50元 1.8液晶模块,做实验用的,带转接板 15元 智峰脱机下载器,95成新,用的时间不超过10个小时,100元(买的时候260元) ...… 查看全部问答> |
|
我这几天又有点忙,不过我有空还是搞了下EZ430-RF2500 看了下库: 觉得不错唉: 首先这个库可以在任何MSP430单片机上实现,设立这个库的目地就是为了RF2500能很方便地同MSP430单片机接口 传一下我找的资料从资料来看这个库很好理解,只要修下定 ...… 查看全部问答> |
|
一个不容忽视的事实是,整个射频微波市场早已大过了示波器市场。这让某些测试测量厂商有点坐不住了。 “泰克一直就很想进入射频微波领域,我们一直在寻找机会。”泰克产品市场经理钱永先生说。 &nb ...… 查看全部问答> |




