在阅读了大约五遍文字并进行谷歌搜索后,我决定寻求帮助。我目前正在使用 Timer_A 中断以 1 秒/10 秒/1 分钟的间隔一次打开/关闭两个 LED。默认程序每秒都会打开/关闭 LED,但我找不到在 10 秒和一分钟后关闭它们的方法。我可以使用 __delay_cycles(xxxx) 来实现此目的,但显然这样做会破坏计时器的目的。这是我的代码。
#include <msp430.h>
#define RedLED BIT0
#define GreenLED BIT6
#define RedLEDToggle (P1OUT ^= RedLED)
#define GreenLEDToggle (P1OUT ^= GreenLED)
unsigned int counter = 0;
void main(void)
{
WDTCTL = WDTPW | WDTHOLD;
//WDTCTL = WDT_MDLY_32;
P1DIR = RedLED | GreenLED;
P1OUT = RedLED | GreenLED;
TACTL = TASSEL_2 | ID_3 | MC_3 | TAIE;
TACCR0 = 62500;
_enable_interrupts();
LPM1;
}
#pragma vector=TIMER0_A1_VECTOR
__interrupt void Timer_A(void)
{
if ( counter == 10)
{
switch (TAIV)
{
case 0x02: break;
case 0x04: break;
case 0x0A: RedLEDToggle | GreenLEDToggle;
break;
}
}
else
{
counter ++;
}
}
这很简单,\
您有一个 1 秒计时器,每 1 秒就会产生一次中断。
你的其他时间是那 1 秒的倍数。
因此,在程序开始时将 10 秒计数器设置为 0,并将 1 分钟计数器设置为 0。
每 1 秒中断一次,两个计数器都会递增。
每次 10 秒计数器都会从 9 步进到 10
- 将该计数器重置为 0
- 处理 10 秒的活动
每次 1 分钟计数器都会从 59 步进到 60
- 将该计数器重置为 0
- 处理 1 分钟的活动
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)