比如我写一个程序~设定了5s进一次定时器中断。
但是我程序main的整体架构是:
初始化
初始化
定时器设定
使能中断
while(1)主循环
{
。。。。。。
}
这样子
那么 程序逐级执行
执行到while(1)里面程序就一直循环了
那么在这个一直循环的过程中,程序还会定时按照5s进入到定时器中断执行吗???
那么程序执行的思路是 while(1)和定时器中断里面的东西同时执行吗??
还是说 执行while(1)过程中 突然进入定时器中断 执行中断里面的东西 然后执行完了再回到while(1)继续执行呢???
谢谢!
中断就是打断正常的执行程序,转而去执行中断服务子程序,执行完后再转回来执行被打断的程序。
5S时间到就产生中断,停下while(1)中的工作,并保存当前寄存器状态,然后自动进入中断服务程序了。中断执行完后再恢复中断前的状态继续执行while(1)。
其实我觉得您没必要用while(1)这个死循环,msp430中如timerA有寄存器TACTL中就可以设置clock source,Up mode,分频等等。如Up mode可以累积计数。这个您仔细看下datasheet。
关键的一点说道了就行了,定时器可以在没有cpu的情况下运行,等到了5秒,去给cpu一个中断请求
执行while(1)过程中 突然进入定时器中断 执行中断里面的东西 然后执行完了再回到while(1)继续执行呢???
——这个是正解,中断与while(1)里的东西交替执行,中断执行期间While(1)里的程序会被暂停。所以有说法就是中断服务越短越好。
实时性要求不是那么高的情况下,可以在中断里放一些标志位处理语句,然后在While(1)里面放一些周期很短的轮询语句,如果标志位变了,那么执行相应的程序,这样中断的使用可以更灵活。
定时器,在设置好,打开后,自动运行。不占cpu资源。到定时时间,给cpu中断。cpu跳转到定时器中断处理函数。处理后,继续执行主循环里的内容。