This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
您好,您可以参考以下代码:
https://dev.ti.com/tirex/explore/node?node=AFDh5q2fLOVBjhPwpSfOTw__IOGqZri__LATEST
并需要进行以下修改:
1. 将 TA0CCR0改为=9
2. 删除该行 "P1OUT ^= 0x01",然后把您的变量n放在这里。当 TIMER0_A0_ 中断时,n 会添加 1。
您好,工程师在函数中定义 n : _interrupt void Timer_B (void) ,当 n 增加到 9 ,P1.0=1 时,程序如下运行:
您可以更改 while (1) 并在此处添加定时器输出,您可以先试下,不知道是否符合您的要求。
您好,您可以看一下我上一个问题中的描述,我是使用了timer_a来计数并输出,请问是这里使用了timer_b还要使用timer_a吗,还有就是 _interrupt void Timer_B (void)这个中断函数是定义在哪里的?
您好,,我想设计的就是一个把flash中存储的数据赋给数组,然后每次定时器中断输出一个数组值的程序。但是由于数据过大,ccs中我定义的数组好像一次性存放不下,所以我希望在定时器累计中断次数n,当n=9时,主程序可以通过监听这个n值,来关闭定时器,重写数组然后再打开定时器输出,我使用了volatile 定义,现在发现内存中n的值已经可以发生了累加,但是由于主函数不会循环保持对n值的监听,所以即使n值在子函数中变化了,主函数无法重置输出数组
您好,以上给到您的代码只是个例子,您可以使用TimerA,您不需要TimerB。
以及这两个是可以同时使用的。
the _interrupt void Timer_B (void) 是定义在 msp430f5529.h file中的。
您可以从以下代码中查看声明:#pragma vector = TIMER0_A0_VECTOR, 转到 msp430f5529.h。
您好,可以麻烦看下上面那个最新的提问吗?
我想设计的就是一个把flash中存储的数据赋给数组,然后每次定时器中断输出一个数组值的程序。但是由于数据过大,ccs中我定义的数组好像一次性存放不下,所以我希望在定时器累计中断次数n,当n=9时,主程序可以通过监听这个n值,来关闭定时器,重写数组然后再打开定时器输出,我使用了volatile 定义,现在发现内存中n的值已经可以发生了累加,但是由于主函数不会循环保持对n值的监听,所以即使n值在子函数中变化了,主函数无法重置输出数组
1. 您好,请您检查下您定义 n 的位置, 需要将其定义为全局变量 (在主函数之外)。
2. 在主函数中,您需要打开以下中断:_bis_SR_register(); 在此处添加您的功能(关闭定时器),最后打开 LPM0,如下所示:
您好,
> TA0CTL |=MC__STOP;
不会使定时器停止,您试下以下语句:
> TA0CTL &= ~MC_3; // MC=0 to stop timer
您好,我试了好像还是不可以。能麻烦工程师修改一下这里完整示例吗,我的程序如下,定义了两个四位的一维数组m和M,每次中断触发先输出m数组中的m0到m3,当中四个值输出完成,希望可以停止中断,将M数组中的值赋给m,然后再继续输出新的m0到m3
我在n=9时将数组m的值进行了替换
那么数据 m[i] 是否可以替换? 您可以像上一条回复中那样添加 TA0CTL &= ~MC_0 ,以查看定时器是否可以停止。
在 ISR 中,定时器中断被禁用,因此应该是可以在 "if (k==4) " 块中将 M[] (立即) 复制到 m[] (立即)。9 是一个很小的数字,需要放入 TA0CCR0 (使用 SMCLK 计时)。 ISR 无法在这段时间内完成,因此将持续运行,并且永远不会返回 main()。
此外,位之间的时间间隔将不会保持。 请问数字 9 源自何处? 您这边从最初的问题来看,似乎是希望将闪存块复制到 RAM 块,以便可以输出它。 请问您这边为什么不能直接从闪存发送?
当我直接从flash中发送时,令d=*p,然后输出d,会导致每一位数据的时间长度与原先设定的长度有误差,比如我原本是0.5ms输出一位,从flash中读取再输出会变成0.67ms左右。
添加这句TA0CTL &= ~MC_0 ,貌似定时器没有暂停,不知道是不是我写的不太对,能否给一个完整的如何暂停中断的例程?例如,当中断程序发生了n=100次时,使得定时器、中断暂停,直到我清空n的值。
>TA0CTL &= ~MC_0
>> 不会停止计时器 (因为 MC__STOP[=MC_0]=0)。 您试下以下语句:
>>TA0CTL &= ~MC_3 ; // MC=0 以停止计时器
停止计时器将停止新的中断,直到执行其他操作 (即定时器再次启动)。 从 ISR 返回后,可能会触发一个挂起的中断。 要防止这种情况,请添加以下语句:
> TA0CCTL0 &= ~CCIFG ; // 清除可能挂起的 CCR0 中断