搜索
bottom↓
回复: 0

被定时器的计数打败了!为什么读不出TAR的值呢?

[复制链接]

出0入0汤圆

发表于 2013-9-2 14:33:54 | 显示全部楼层 |阅读模式
本帖最后由 guwu454 于 2013-9-2 14:37 编辑

我要做一个脉冲计数器,思路是用定时器A0作为计数器,使用外部时钟,将脉冲作为外部时钟,TAR连续增模式。用定时器A1作为时间窗口,定时一秒。代码如下:

  1. #include <msp430.h>
  2. #include "string.h"
  3. #include "stdio.h"
  4. int main(void)
  5. {
  6.   WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  7.   P1DIR |= 0x40;                            // P1.0 intput
  8.   P1SEL |=0x01;

  9.   TACTL = TASSEL_0 + MC_2;                  // SMCLK, contmode
  10.   
  11.   TA1CCTL0 = CCIE;                             // CCR0 interrupt enabled
  12.   TA1CCR0 = 32768;
  13.   TA1CTL = TASSEL_1 + MC_2;   
  14.   
  15.   //usart初始化
  16.    if (CALBC1_1MHZ==0xFF)                                        // If calibration constant erased
  17.   {                                                                                       
  18.     while(1);                               // do not load, trap CPU!!       
  19.   }
  20.   DCOCTL = 0;                               // Select lowest DCOx and MODx settings
  21.   BCSCTL1 = CALBC1_1MHZ;                    // Set DCO
  22.   DCOCTL = CALDCO_1MHZ;
  23.   P1SEL = BIT1 + BIT2 ;                     // P1.1 = RXD, P1.2=TXD
  24.   P1SEL2 = BIT1 + BIT2 ;                    // P1.1 = RXD, P1.2=TXD
  25.   UCA0CTL1 |= UCSSEL_2;                     // SMCLK
  26.   UCA0BR0 = 104;                            // 1MHz 9600
  27.   UCA0BR1 = 0;                              // 1MHz 9600
  28.   UCA0MCTL = UCBRS0;                        // Modulation UCBRSx = 1
  29.   UCA0CTL1 &= ~UCSWRST;                     // **Initialize USCI state machine**
  30.   IE2 |= UCA0RXIE;                          // Enable USCI_A0 RX interrupt

  31.   
  32.   _BIS_SR(LPM0_bits + GIE);                 // Enter LPM0 w/ interrupt
  33. }

  34. // Timer A0 interrupt service routine
  35. #pragma vector=TIMER1_A0_VECTOR
  36. __interrupt void Timer_A (void)
  37. {
  38. int data=0;
  39. char p[5];
  40. int n=0;
  41. int i=0;
  42.   TA1CCR0 += 32768;                            // Add Offset to CCR0
  43.   P1OUT ^= 0x40;                            // Toggle P1.0
  44.   data=TA0R;
  45.   n=sprintf(p,"%05d",data);
  46.    // n=(u8 )sprintf(buf,"%03d",(int)temp);
  47.   for(i=0;i<n;i++)
  48.   {
  49.   while (!(IFG2&UCA0TXIFG));                // USCI_A0 TX buffer ready?
  50.   UCA0TXBUF = p[i];   
  51.   }
  52. }
复制代码
现在的问题是读不出TA0R的值,总是为0该怎么办啊?

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-26 21:39

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表