#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit led1=P1^0;
uchar tt;
void main()
{
TMOD=0x01;
// TH0=(65536-50000)/256;
// TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
while(1);
}
void timer0()interrupt 1 using 1
{
// TH0=(65536-50000)/256;
// TL0=(65536-50000)%256;
tt++;
if(tt==20)
{
tt=0;
led1=~led1;
}
}
就是这个程序。求大神帮我解释下这个程序的意义。
单片机中断程序中,我不对TH0,TL0赋值,怎么也一样运行?
TH0与TL0组成的寄存器能存放的最大的数据为65535,定时的方法是首先在寄存器里存放一个数据,然后单片机会在每个时钟周期里自动加1,等加满后就会自动清0,此时会触发单片机的中断,这样就达到了计时的目的,例如单片机晶振为12.000MHz,
单片机 c语言中的定时中断函数,在mian函数TH0和TL0有了初始化,为什么在...
因为定时器计数溢出时才产生中断,th0tl0全等于0。这种定时工作方式不会自动重装定时初值,所以中断子函数中要人工装载。主函数中如果省去初值,那就是从0开始计数,第一次进入中断的时间会有误差,所以不能省。
单片机中断程序中为什么要重新赋值?
在工作方式2时是自动重装初值的,不需要给TH0\/TL0重新赋值;在其他工作方式下需要。定时器工作时其TH\/TL的值是一直加,直到溢出得到中断。工作方式2是8位定时\/计数器,其高8位被用来保存初值,来中断后就自动把保存在其中的初值付给定时计数器,而方式0方式1是13位、16位定时\/计数器,2个寄存器都使用掉了,硬件不能...
...中断程序里的TH0和TL0的赋值语句现象还是一样 ?
应为:TMOD = 0x01;
请教一个单片机的问题 很基础的
是的,只有溢出才申请中断,要进入中断必须要EA=1,和ET0=1两个条件满足。至于你说的开始删除TH0和TL0赋初值也能进入中断的问题,很简单,你没赋初值,那么初值默认为0,经过65536次计数后也同样溢出申请中断。第二个问题嘛,计数是没有终止的,除非你TR0=0,所以你在给TH0和TL0赋值的过程中都在...
单片机定时器方式2 TH0和TL0如何赋值
我有更好的答案推荐于2017-12-16 11:19:39 最佳答案 TH0,和TL0在程序一开始赋值一次就行了,再以后,单片机运行的时候,即TR0 = 1,只有TL0运行,TL0从初始数值开始自加,当加到255之后,再加1 次,就变成 了0,此时,单片机的硬件会自动把TH0里的数值赋值给TL0,然后TL0又自加,加到255之后...周而复始。除非...
单片机定时器的TH0与TL0的区别是什么?
你好,赋值一样只是个别情况,并不是说每个程序的TH0和TL0要赋一样的值。比如 TH0=0xfc ;TL0=0x18 ;合起来就是FC18H,十进制是64536。高8位和低8位组合起来可以表示0~65535,而8位寄存器只能表示0~255,所以可以更方便的满足定时的需要。o(∩_∩)o ...
单片机中的中断问题,
回到while(1),等待下一次中断,定时器继续计数;定时器产生中断,...反复20次,P10取反。所以你的问题:1.中断函数是只执行一次吗 不是,每次执行完之后,由于中断未关,并且T0继续计数,所以后面一直会有中断;2.还有中断函数对TH0,TL0的赋值是不是多余?不是。每次产生中断后T0的值已经是0了,...
单片机中th0,tl0赋值什么用
单片机中,th0、tl0是定时器0的计数单元,实行加计数。对th0、tl0赋值也叫赋初值,目的就是在此基础上再计数多少次th0、tl0同时等于0(发生溢出)。
单片机定时中断的问题
标志位在子程序中已被改变,现在就可能出错了。所以在进入中断子程序时要首先把这些标志位(即ACC和PSW)保存起来即PUSH ACC和PUSH PSW,子程序结束时释放:POP PSW和POP ACC,以便回到主程序时能正确的继续运行。如果用不到这些,也可以不操作,但是建议你最好进行保护,这样不容易出错的。