我要写一个程序,主要思路如下:
首先定时器设定一个初值1000,然后定时器自加,加到1000后,跳入中断,执行一次判断 if(P1IN&BIT0==0),若满足条件则 k++;我要的数据就是k的值。但是,我现在有个问题,在中断程序里,我必须给K赋初值,k=0。这样的话,不管我跳入几次中断,满足几次条件,K最多等于1。我该怎么改?
程序如下:
void main(void) { //int k=0,i; WDTCTL = WDTPW+WDTHOLD; //关闭看门狗
首先主流程有问题,主流程必须是一个死循环while(1){}或者for(;;){},在这个死循环中添加任务,否则程序运行到最下端会出现异常(跑飞、复位、死机等),其次你程序中的k是一个临时变量,当然每次进入都会赋值为0,关于k的定义有两种方式,一是在函数体内定义:static int k = 0;另一种就是定义成全局变量,还有中断中的程序要尽可能的短,做到快进快出,你在定时中断中加入4000毫秒的延时是不合常理的,我不知道你的具体需求是什么,若能提供详细的需求,我帮你做一个demo程序
看了你的程序的目的是在LCD中显示进入中断的次数是吗?
程序有几个问题:
比如,中断程序中的void Delay4000ms(); void可以去掉;
显示程序的初始化完全可以放到主函数中,不需要进入中断就初始化一次;
你可以把k定义成全局变量,在主函数中不断执行显示k值程序,Disp1Char(11,0,shuzi[k]);
在中断程序中改变k值即可
你的程序写得有问题,按照你的程序这样写,按键按下必须要刚好进入中断才能被检测到;
其实,可以用外部中断,进入中断,更新k值,主函数中显示k值