JTAGICE mkII 或是 AVR单片机 的问题
程序 见 附录,出现的问题是:当 代码 如附录所写 时,程序 运行正常,当 把 函数func()中的代码 直接放到while(1)中,即如下:(原程序 是 用 func() 代替了 几行代码)
while(1)
{
atimer = 0; //清1ms定时标志
atmp = (aclock)/2;
if (anum!=atmp )
{
anum = atmp;
atimer = 1; //置1ms定时标志
}
if(atimer == 1)
{
PORTA=~PORTA;
}
}
此时,程序 不正常。单步调试 时,程序指针 不会 指向 atimer=0、atmp 这两行,也就是说 这两行 不被 CPU 执行。经过我 反复验证,确实如此。
附录:
#include avr/io.h>
#include interrupt.h>
#include
unsigned int atmp;
unsigned int atimer;
unsigned int anum;
unsigned int aclock;
void func();
int main(void)
{
DDRA=0xFF; //将PA口接到LED上观察现象。
PORTA=0x00;
TCCR1A=0x00;
TCCR1B=(1 TCNT1=58162; TIMSK=(1 asm("SEI"); while(1) { func(); if(atimer == 1) { PORTA=~PORTA; } } } void func() { atimer = 0; //清1ms定时标志 atmp = (aclock)/2; if (anum!=atmp ) { anum = atmp; atimer = 1; //置1ms定时标志 } } ISR(TIMER1_OVF_vect,ISR_BLOCK) { TCNT1=58162; //1024分频下延时2S. aclock++; if(aclock==100) aclock=0; }
JTAGICEmkIIAVR单片 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)