- #include <msp430x54x.h>
- unsigned int results[5]; // 转换值存取变量
- long fliter0(long *, int);
- void main(void)
- {
- int cnt = 0;
- unsigned int i;
- WDTCTL = WDTPW+WDTHOLD; // 关闭看门狗
- P7SEL |= 0x03; // 使能时钟端口
- UCSCTL6 |= XCAP_3; // 配置晶振电容
- UCSCTL7 &= ~(XT1LFOFFG + DCOFFG); // 清除失效标志位
- SFRIFG1 &= ~OFIFG; // 清除失效中断标志位
- UCSCTL4 = SELM__DCOCLK + SELS__DCOCLK; // 选择时钟源
- //UCSCTL4 = SELM_7 + SELS_2; // 选择时钟源
-
- P6DIR &= ~(BIT1 + BIT2 + BIT3); // P6.7口A7输入
- P6SEL |= (BIT1 + BIT2 + BIT3); // P7口第二功能
- P4DIR |= BIT0;
- P4DIR |= BIT1;
- P4DIR |= BIT2;
-
- ADC12CTL2 = ADC12RES_2 + ADC12REFOUT; // AD基本配置
- ADC12CTL0 = ADC12ON + ADC12MSC + ADC12SHT01 + ADC12REFON + ADC12REF2_5V;
- ADC12MCTL0 |= ADC12INCH_1; // 通道1输入
- ADC12MCTL1 |= ADC12INCH_2; // 通道2输入
- ADC12MCTL2 |= ADC12INCH_3; // 通道3输入
- ADC12MCTL3 |= ADC12INCH_2; // 通道2输入
- ADC12MCTL4 |= ADC12INCH_3 + ADC12EOS; // 通道3输入
- ADC12CTL1 = ADC12SHP + ADC12CONSEQ_3; // 选择转换模式
- for (i=0;i<0xFFFF;i++); // 等待基准电压建立
- UCSCTL8 |= MODOSCREQEN;
- ADC12IE |= 0X08; // 使能通道4中断
- ADC12CTL0 |= ADC12ENC; // 开启转换
- _EINT(); // 打开总中断
- ADC12CTL0 |= ADC12SC; // 转换开始
- LPM3; // 进入低功耗3
-
- }
- #pragma vector = ADC12_VECTOR
- __interrupt void ADC12ISR(void)
- {
-
- unsigned int i;
- unsigned int j;
- results[0] = ADC12MEM0; // 保存第一通道值
- results[1] = ADC12MEM1; // 保存第二通道值
- results[2] = ADC12MEM2; // 保存第三通道值
- results[3] = ADC12MEM3; // 保存第四通道值
- results[4] = ADC12MEM4; // 保存第五通道值
-
- /*
- 程序部分
- */
-
- P4OUT ^= BIT0;
- for(i = 0; i < 10000; i++);
- }
复制代码
主程序部分就不写了,我通过for(i = 0; i < 10000; i++);完成之后翻转P4.0的方式来估计计算的时间,程序运行实际输出方波频率21Hz,for语句一次累加是5个机器周期,那么计算频率为:21*2**5*10000=2MHz,但是我用的是16M的晶振啊,我的程序为什么这么慢啊(只有AD12的话输出是10kHz,也不是AD的时间太长),分频什么的设置我不懂啊,我就想程序的计算频率再高一点,那么我应该怎么设置啊?
此帖出自
小平头技术问答
具体的用法我不太清楚 但是DCO本身也是不准确的 你可以选择使用16M外部晶振在测试一下
一周热门 更多>