单片机中断时如何执行的?
时间:10-02
整理:3721RD
点击:
RT。
#include<reg52.h>
。
。
void main()
{
TMOD=0x01;
TH0=(65536-500)/256;
TL0=(65536-500)%256;
EA=1; //开总中断
ET1=1; //允许定时/计数器1 中断
TR1=1;
while(1)
{
。
if(num<10)
{};
}
void T0_time () interrupt 1 //定时器中断函数
{
TH0 = ( 65536 - 500 ) / 256;
TL0 = ( 65536 - 500 ) % 256;
num ++;
if(num=20)
{
num=0;
}
}
这个程序中,是不是在main函数中,定时器就已经开始计数了?在下面中断服务中,如果num的值符合main的条件,怎么办?
#include<reg52.h>
。
。
void main()
{
TMOD=0x01;
TH0=(65536-500)/256;
TL0=(65536-500)%256;
EA=1; //开总中断
ET1=1; //允许定时/计数器1 中断
TR1=1;
while(1)
{
。
if(num<10)
{};
}
void T0_time () interrupt 1 //定时器中断函数
{
TH0 = ( 65536 - 500 ) / 256;
TL0 = ( 65536 - 500 ) % 256;
num ++;
if(num=20)
{
num=0;
}
}
这个程序中,是不是在main函数中,定时器就已经开始计数了?在下面中断服务中,如果num的值符合main的条件,怎么办?
符合MIAN的值就得去MIAN里运行,如果你的NUM在MIAN中无法大于10,那么你写的定时里的NUM的赋值0就没用意义,在你SETB EA,ET0,TR0时,计数器就开始计数
TR1=1;定时器启动;小编要明白进入中断后,只有执行完中断服务程序才能返回main
恩恩。是不是可以这样认为,定时器一直在计数,当溢满时,重新被初始化,继续计数?
num没加一次,就是回到while程序中,然后在回到中断服务中,依次循环。?
定时器是一值在扫描的,只有定时时间到就一定会进定时中断去执行里面的内容
多谢大神!