|
我是NEC的初学者,在IAR调试程序时发现定时器中断的变量数据(已定义为全局变量)复位了!我检查了N久,都查不出是什么原因?
程序如下:#include<io78f0451.h>
#include <stdio.h>
#include <intrinsics.h>
#define DI() __disable_interrupt()
#define EI() __enable_interrupt()
unsigned int pl,pk;
unsigned int ms1;
char pl_flag;
void init_CPU(void)
{
OSCCTL=0; /**/
PCC=0;
RCM=0;
MOC=0X80; /*STOP X1*/
MCM=0;
/* OSTC=0x00;*/
OSTS=0X01;
HIOTRM=0X10;
}
void init_port(void)
{
PM3_3=1;
PM4_3= 0;
}
void init_tm50(void)
{
TMC50=0X0C;
TCL50=0X05; /*fprs=8MHz/64=0.125MHz*/
CR50=125; /*8us*125=1ms*/
TMMK50=0;
TMPR50=0; /* INT first*/
TCE50=1;
}
#pragma vector=INTTM50_vect
__interrupt void vect_INTTM50(void)
{
ms1++;
pk++;
if(P3_3==1)
{
ms1=0;
pl_flag=0;
}
if(P3_3==0)
{
pl_flag=1;
}
if((ms1>=10)&&( pl_flag==1))
{
ms1=0;
pl++;
P4_3=0;
}
P4_3= 1;
TMIF50=0;
}
void main(void)
{
DI();
init_CPU();
init_port();
init_tm50();
EI();
while(1)
;
}
程序调试时,进入中断服务函数,进行单步跟踪,发现变量pk自加到1200就变为0了,而pl一直是从0变为1,然后又从1变为0,如此反复.
我真搞不懂是什么原因让这全局两个变量不能一直自加下去呢?希望哪位高手帮忙解决一下,不胜感激! |
阿莫论坛20周年了!感谢大家的支持与爱护!!
一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。
|