关于51单片机

2025-01-05 07:19:54
推荐回答(4个)
回答1:

//初始化程序
TMOD=0x01; //T0:GATE=0,(以TR0启动);C/T=0,(定时器模式);M1=0,M0=1,(方式1,16位)
TH0=(65536-45872)/256; //T0初值
TL0=(65536-45872)%256; //T0初值
EA=1; //CPU开中断 (中断允许寄存器IE.7)
ET0=1; // 允许T0中断 (中断允许寄存器IE.3)
TR0=1; // 启动T0 (定时器/计数器控制寄存器TCON.4)

因为是方式1,所以在初始化程序中要置T0初值,在中断函数中也要置T0初值。

回答2:

void T0_time() interrupt 1
{
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
num++;
if(num==20)
{
num=0;
D1=~D1;
}
}
这一部分就是定时器0中断函数,当定时器0溢出,也就是产生定时器0中断,程序会从主程序中自动跳转到这个函数中执行,执行这个函数后又自动返回到主程序。

回答3:

主函数里没有执行中断函数,只是在循环等待中断。
中断时执行
num++;
if(num==20)
{
num=0;
D1=~D1;
}

回答4:

中断函数不用写执行位置。 符合条件直接进