搜索
bottom↓
回复: 4
打印 上一主题 下一主题

430有最大捕获个数限制吗?

[复制链接]

出0入0汤圆

跳转到指定楼层
1
发表于 2010-7-1 12:20:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我设置430的timerA为捕获模式,每次捕获进入中断之后就使i++。timerB则定时一秒。但是i的最大值只能是4096。(i为 unsigned long型。)各位大侠帮忙看看,谢谢~~
部分程序:

CCTL0 |=CM_1+CCIS_0+SCS+CAP+CCIE;
TACTL |= TASSEL_1+TAIE+TACLR+MC_1+ID_3;

#pragma vector=TIMERA0_VECTOR
__interrupt void TIMER_A(void)
{
  i++;
}

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

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

2
 楼主| 发表于 2010-7-1 12:20:52 | 只看该作者
全部程序,比较乱。现在还没有写成 等精度模式。
#include "msp430x16x.h"
#include "mclk.h"
#include "Cry1602.h"
#include "math.h"

typedef unsigned char uchar;
double cnt[100];
//double cnt;
double temp = 0,i =0;
double sum = 0;
unsigned long freq = 0, n=0;

uchar shuzi[] = {"0123456789"};
uchar dat[] = {"00000.0000"};

#define CPU_F ((double)8000000)
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))

main()
{
mclk();
BCSCTL2 |=DIVS_3;  

P1DIR = 0x00;           //ÊäÈë
P1DIR |= 0x10;                  //P1.4 smclk
P2DIR |= 0xff;           //Êä³ö
P1SEL |= 0x02;                 //P1.1 TA0
P1SEL |= 0x10;           // P1.4 special func
P2OUT = 0x00;            

LcdReset();
DispNChar(3,0,10,shuzi);

CCTL0 |=CM_1+CCIS_0+SCS+CAP+CCIE; ///ÉÏÉýÑØ+ͬ²½+CCIOB+²¶»ñ¹¦ÄÜ+²¶»ñÖжÏÔÊÐí
TACTL |= TASSEL_1+TAIE+TACLR+MC_1+ID_3;

TBCTL |= TBSSEL_1 + TBCLR + MC_1; // ACLK, clear TAR,up to mode
TBCCTL0 = CCIE; // CCR0 interrupt enabled
TBCCR0 = 32768;   

_EINT();
while(1);
}

#pragma vector=TIMERA0_VECTOR
__interrupt void TIMER_A(void)
{
  i++;
}


#pragma vector=TIMERB0_VECTOR
__interrupt void TIMER_B(void)
{
  TBCTL |= MC_0;
  TACTL |= MC_0;
  freq = i-1;
  freq *= 10000;
  dat[0]=freq/100000000+'0';
  dat[1]=freq/10000000%10+'0';
  dat[2]=freq/1000000%10+'0';
  dat[3]=freq/100000%10+'0';
  dat[4]=freq/10000%10+'0';
  dat[6]=freq/1000%10+'0';
  dat[7]=freq/100%10+'0';
  dat[8]=freq/10%10+'0';
  dat[9]=freq%10+'0';
  i = 0;
  freq = 0;
  LcdWriteCommand(0x01, 1);           //clear
  DispNChar(0,0,10,dat);               // nie,hang,shu
  TACTL |= MC_1;
  TBCTL |= TBCLR+MC_2;
}

出0入0汤圆

3
 楼主| 发表于 2010-7-1 22:07:03 | 只看该作者
TACTL |= TASSEL_1+TAIE+TACLR+MC_1+ID_3;


改成

TACTl |= TASSEL_1 + TAIE + TACLR + MC_1;

就能计数到 32768了。
奇怪????

出0入0汤圆

4
发表于 2011-8-25 21:36:53 | 只看该作者
回复【2楼】xthupan
-----------------------------------------------------------------------

你把定时器A设置成了输入捕获模式,而时钟源选择的是32768的辅助系统时钟,所以该程序捕获的是ACLK的脉冲,第一次你进行了8分频,则每秒捕获的实际脉冲数为3278/8=4096,第二次你把分频系数改为0后则对ACLK进行直接捕获,也就每秒32768个脉冲了。我想你是想测输入方波的频率吧,但你却选错了时钟源,误测了ACLK的时钟频率
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-25 00:50

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

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