80C51系列单片机学习→中断一节里→计算初值→

书上原文:(郭天祥老师的《51单片机/C语音教程》)
……
接下来讲解如何计算初值问题。定时器一旦启动,它便在原来的数值上开始加1计数,若在程序开始时,我们没有设置TH0和TL0,它们的默认值都是0,假设时钟频率为12MHz,12个时钟周期为一个机器周期,那么此时机器周期就是1us,计满TH0和TL0就需要2^16-1个数,再来一个脉冲计数器,随即向CPU申请中断。因此溢出一次共需65536us,约等于65.5ms,如果我们要定时50ms的话,那么就需要先给TH0和TL0装一个初值,在这个初值的基础上计5000个数后,定时器溢出,此时刚好就是50ms中断一次,当需定时1s时,我们写程序时当产生20次50ms的定时器中断后便认为是1s,这样便可精确控制时间了,要计5000个数时,TH0和TL0中应该装入的总数是65536-50000=15536,把15536对256求模:15536/256=60装入TH0中,把15536对256求余:15536%256=176装入TL0中。
以上就是定时器初值的计算方法,总结后得出结论:当定时器的方式1时, 设机器周期为Tcy,定时器产生一次中断的时间为t,那么需要计数的个数N=t/Tcy,装入THX和TLX中的数分别为
THX=(65536-N)/256 , TLX=(65536-N)%256
……
前面的内容还好,我看到中断这一章的时候就开始晕了,反复的看还是晕,很多不理解:
1,怎样理解TH0和TL0
2,为什么要对256求模,求余?
哦,我知道TH0和TL0是16位定时器/计数器的高低位,TL0是低八位,TH0=是高八位

1.
TH0和TL0
是用来放计数初值的 相当于AX中的AH和AL
TH0中放的是初值中的高8位,TL0中放的是初值中的低8位
(计数初值一共是16位)
计数器计数的话,是 +1 等TH0和TL0全变为0FFH 然后溢出,定时器就产生一个定时中断
例如:TH0=0FFH,TL0=0FDH ;TL0自加两个数之后,变成了0FFH,再加一个1 ,
TH0和TL0都溢出,都变为00H,定时器就产生一个定时中断
2.
256=2^8;
因为计数器是+1 计数的,所以先算初值:65536-50000=15536
然后,把15536化为2进制数,按照不同的模式放置初值,例如;方式2的话,所得2进制的高八位直接放TH0,第八位直接放TL0(可能不是方式2,记不太清楚而来,反正其中有一种方式是这样的)
这里 对15536/256取模,相当得到该数对应的2进制数的高八位所对应的十进制
15536/256取余数,相当得到该数对应的2进制数的低八位所对应的十进制数
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-10-22
个人理解如下:
(1)8051中的定时器用法很经典,TH0和TL0是用来存放计数值的寄存器,其中的H表示High,高,即定时器T0计数器的高8位,显然L表示Low,即定时器T0计数器的低8位。如郭天祥老师的资料所讲,定时器的定时时间是根据计数溢出,即计数器超过65535时发生溢出,(此时寄存器的TH0和TL0的值也全部被清零了,所以每次进入定时中断都必须重新写TH0和TL0的数值,这点很重要!不然默认就会从0开始计数,定时时间就会出错!!!)然后计数器根据TH0和TL0中的数值重新开始计数。定时计数器是16位的,TH0是高8位,TL0是低8位。定时的时候计数器不断加1,即“1”是加在TL0里面的,由于TL0是8位寄存器,当TL0里面的值等于2的8次方即256时,TL0会自动清零,然后进行进位,即高8位TH0里面数值要加1。如此往复,直到发生溢出,溢出信号导致定时中断请求,然后就可以进入定时中断执行函数了。
(2)对256求模,根据我的第一点,你应该有所了解了,就是TH0是高8位,要想在TH0里面加1,则必须低8位TL0里面的数据加到256才可以。 就像25这个数,从3开始加1,则个位必须加到10时十位才能加1,道理是一样的。

希望对你有所帮助,如还有疑问,可以继续追问,很乐意为你解答,嘿嘿~
好好学,祝你成功!
第2个回答  2012-10-22
中断是C51的精华,不可能轻易就理解掌握的,很多人学习这个都是反复多次才领会的。所以现在你理解不了不要紧,过段时间再看理解层面就会慢慢深入一些,反复多次,自然就理清头绪了。
其实中断是由硬件来自动完成的,但你需要在软件代码中通过配置寄存器来操控硬件。TH0,TL0是定时器/计数器的高低位,当用TR0=1语句控制定时器/计数器开始工作时候,TH0和TL0(初始为0)便开始按照晶振频率来计数(每个机器周期自动+1),当TL0由0自动增加到256时候,此时需要进1位到TH0,同时将TL0清0重新计数,再到256再进位再清零,如此反复,直到TH0/256+TL0=65536,这时候就会产生溢出,促发中断。
第3个回答  2012-10-22
多学习多练习

80C51系列单片机学习→中断一节里→计算初值→
(计数初值一共是16位)计数器计数的话,是 +1 等TH0和TL0全变为0FFH 然后溢出,定时器就产生一个定时中断 例如:TH0=0FFH,TL0=0FDH ;TL0自加两个数之后,变成了0FFH,再加一个1 ,TH0和TL0都溢出,都变为00H,定时器就产生一个定时中断 2.256=2^8;因为计数器是+1 计数的,所以先算...

说明80C51单片机的中断过程.
80c51把所有中断标志都集中到TCON和SCON寄存器中。其中外中断是使用采样的方法把中断请求锁定在TCON寄存器的IE0(IE1)标志位上,而定时中断和串行中断的中断请求由于都发生在芯片的内部,定时中断可以直接去置位TCON的TF0(TF1),串行中断可以直接去置位SCON的RI和TI。内中断不存在采样问题。 2.中断查询 所谓查询,就是由...

什么是中断?80C51单片机的中断是什么?
在80C51单片机中,中断是一种硬件机制,它允许单片机响应外部或内部的事件,如定时器溢出、外部输入信号变化、串行通信接收\/发送完成等。80C51单片机支持多个中断源,每个中断源都有一个特定的中断向量(即中断服务例程的入口地址)。当一个中断发生时,单片机会根据中断优先级来决定是否立即处理该中断,如果当前...

单片机-80c51中断有几个优先级
两个优先级,一个高级,一个低级。由IP寄存器设置,也可以位设置,分别用PX0,PT0,PX1,PT1,PS 为1是高级,为0是低级。同级的中断由自然优先级来判定,从高到低分别是:INT0,T0,INT1,T1,串口

简述80c51单片机中断使能位是哪些?中断优先级是什么及特点?
80c51单片机中断优先级只有两级,1为高,0为低 中断使能位有总中断使能位EA,各个中断源都有使能位 EX0 EX1 ET0 ET1 ES共5 个。

80C51的中断有哪些?
在80C51单片机中,中断是实现实时处理和多任务操作的重要手段。当单片机正在执行主程序时,如果外部或内部发生某一事件(如定时器溢出、外部信号输入等),单片机可以暂停当前主程序的执行,转而响应这一事件,即执行相应的中断服务程序。这一过程被称为中断响应。80C51单片机有五个中断源,分别是两个外部中断...

80C51的中断响应处理过程是怎样?
中断响应是指单片机CPU对中断源提出的中断请求的接受过程。当某一中断源提出中断请求时,CPU会检测到这一请求,并进行一系列的响应操作。响应中断的首要步骤是保存当前正在执行的程序状态。CPU会将当前的指令地址、程序计数器(PC)、状态寄存器等关键信息暂时保存在内存中,以便在中断服务完成后能够继续执行...

80C51单片机有哪些中断源?对应的中断入口地址分别是什么?
外部中断0:入口:0003H 定时器0: 入口:000BH 外中断1: 入口:0013H 定时器1: 入口:001BH 串口中断:入口:0023H 1.1个串口中断,地址:0x98H;外部中断和定时计数器中断:设置地址:0x88H;定时计数器设置地址:TMOD:0x89H,TL0;8AH TL0;8BH TH0;8CH :TH1: 8DH。

80C51单片机有几个中断源,分别是什么?
80C51单片机具备五个中断源,具体如下:1. 外部中断0,即INT0。2. 定时\/计数器0,即T0。3. 外部中断1,即INT1。4. 定时\/计数器1,即T1。5. 串行通信口中断,即串口。在80C51单片机中,所有中断源的优先级是可以调整的。为了定义高优先级中断,您需要修改IP寄存器,对应的位分别是:PX0、PT0、...

80C51单片机有哪几个中断源?
80C51单片机有哪5个中断源:1. 外部中断0,即INT0 2. 内部定时器\/计数器0,即T0 3. 外部中断1,即INT1 4. 内部定时器\/计数器1,即T1 5. 串行口,UART

相似回答