单片机学习小组
登录
直播中
旧念
9年用户
856经验值
擅长:可编程逻辑 电源/新能源 光电显示
私信
关注
定时/计数器的工作原理是什么
开启该帖子的消息推送
定时器
计数器
中断系统
51中断系统是由哪些部分组成的?
定时/计数器的工作原理是什么?
回帖
(1)
苏丹
2022-2-23 13:43:10
51中断系统的组成
定时/计数器的基本原理
逻辑开关闭合后,脉冲信号将对加1计数器充值。若计数器的容量为2 n (n为整数),则当数值达到满计数值后将产生溢出,使中断请求标志TFx(x为0或1)进位为1,同时加1计数器清零。
如果在启动计数之前将TFx清零,并将一个称为计数初值a的整数先置入加1计数器,则当观察到TFx为1时表明已经加入了(2n - a)个脉冲,如此便能计算出脉冲的的到达数量了。
如果上述脉冲信号时来自单片机的外部信号,则可通过这一方法进行计数统计,即可作为计数器使用。
如果上述脉冲信号是来自单片机内部的时钟信号,则由于单片机的振荡周期非常精准,故而溢出时统计的脉冲数便可换算成定时时间,因此可作为定时器使用
定时/计数器工作原理
系统时钟(系统内部振荡器)经12分频后的脉冲(即机器周期)(12分频为12除以频率)信号和来自外部引脚Tx的脉冲信号,通过逻辑
定时/计数器的结构
由上图可知,T0和T1分别由高8位和低8位两个特殊功能寄存器组成,即
T0由TH0(字节地址8CH)、TL0(字节地址8AH)
T1由TH1(字节地址8DH)、TL1(字节地址8BH)
定时/计数器的控制是通过两个特殊功能寄存器实现的,其中,
TMOD是定时/计数器的工作方式寄存器,由它确定定时/计数器的工作方式和功能
TCON是定时/计数器的控制寄存器,用于管理T0和T1的启停、溢出和中断
电路图
要求
D1~D8灯间隔1s闪烁
完整程序
#include
unsigned char t;
void main()
{
TMOD=0x01;//0000 00|01| M1=0,M0=1,定时器T0模式1,16位计数器
EA=1;//中断总允许
ET0=1;//定时器T0的中断开关
TR0=1;//启动定时器0
while(1);
}
void timer() interrupt 1
{ //定时时间50000μs=(65536-a)×12/fosc fosc=11.0592≈12
//一个较大的数字分成两部分,分别存入定时器T0的高八位和低八位
//8位最大能表示数字256,高8位和低8位一起可表示一个最大数字256256
//括号内的结果除以256将整数存入定时器T0的高8位TH0
//括号内的结果取余256将余数存入定时器T0的低8位TL0
//TH0=(65536-50000)/256;//得到整数部分存入高8位 60 0011 1100
//TL0=(65536-50000)%256;//得到余数部分存入低8位 176 1011 0000
//2的16次方=65536 ,单位时间50000μs=50ms,2的8次方=256 ,(65536-50000)/256=60 (60)binary=0011 1100
TH0=(65536-50000)/256;//定时器T0的高8位
//(65536-50000)%256=176 (176)binary=1011 0000
TL0=(65536-50000)%256;//定时器T0的低8位
t++;//如果t累加到20,则执行if语句(即t=20时表示1秒)
if(t==20) //20个50ms(定时时间)=1s
{
t=0;//t清零,以便进行下一次计数
P1=~P1;//取反实现led的闪烁
}
}
解释部分语句
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
如果你选的单片机的晶振一定,比如12MHZ来说吧,机器周期是1us,就是说每1us产生一次计数,就拿50ms来说,这是你想要的计时,意思是,对机器周期进行50000计数就可以得到我想要的,可T0是一个可以对机器周期能进行65536次计数,也就是说我想要的50MS不能让T0溢出,怎么办?那么先给这个定时器里面放些数,放多少,就是我们想要的50MS在加上一个多少就能等于65536,也就是65536和50000的差值,这个值就是我们说的初值。
为什么除以256,因为我们的计时器是两个8位组成的,那么要把那些差值装进这两个8位,那么低8位最多能装256个机器周期,那么256计满了就用高8位的,就是说低8位满一次高8位加1,那么高8位装多少,低8位就满了几次,算法就是用差值除一下256取其整数,剩下的,就是还剩了小于256次数的就放在低8位,就是差值的余数。如果我要放一个超过256的数,肯定是超过先放高八位,把剩下的部分放在低八位中了,TH0=(65536-50000)/256就是把TL0中放不下的部分放在THO中,再把剩下的部分放在TH0中。
51中断系统的组成
定时/计数器的基本原理
逻辑开关闭合后,脉冲信号将对加1计数器充值。若计数器的容量为2 n (n为整数),则当数值达到满计数值后将产生溢出,使中断请求标志TFx(x为0或1)进位为1,同时加1计数器清零。
如果在启动计数之前将TFx清零,并将一个称为计数初值a的整数先置入加1计数器,则当观察到TFx为1时表明已经加入了(2n - a)个脉冲,如此便能计算出脉冲的的到达数量了。
如果上述脉冲信号时来自单片机的外部信号,则可通过这一方法进行计数统计,即可作为计数器使用。
如果上述脉冲信号是来自单片机内部的时钟信号,则由于单片机的振荡周期非常精准,故而溢出时统计的脉冲数便可换算成定时时间,因此可作为定时器使用
定时/计数器工作原理
系统时钟(系统内部振荡器)经12分频后的脉冲(即机器周期)(12分频为12除以频率)信号和来自外部引脚Tx的脉冲信号,通过逻辑
定时/计数器的结构
由上图可知,T0和T1分别由高8位和低8位两个特殊功能寄存器组成,即
T0由TH0(字节地址8CH)、TL0(字节地址8AH)
T1由TH1(字节地址8DH)、TL1(字节地址8BH)
定时/计数器的控制是通过两个特殊功能寄存器实现的,其中,
TMOD是定时/计数器的工作方式寄存器,由它确定定时/计数器的工作方式和功能
TCON是定时/计数器的控制寄存器,用于管理T0和T1的启停、溢出和中断
电路图
要求
D1~D8灯间隔1s闪烁
完整程序
#include
unsigned char t;
void main()
{
TMOD=0x01;//0000 00|01| M1=0,M0=1,定时器T0模式1,16位计数器
EA=1;//中断总允许
ET0=1;//定时器T0的中断开关
TR0=1;//启动定时器0
while(1);
}
void timer() interrupt 1
{ //定时时间50000μs=(65536-a)×12/fosc fosc=11.0592≈12
//一个较大的数字分成两部分,分别存入定时器T0的高八位和低八位
//8位最大能表示数字256,高8位和低8位一起可表示一个最大数字256256
//括号内的结果除以256将整数存入定时器T0的高8位TH0
//括号内的结果取余256将余数存入定时器T0的低8位TL0
//TH0=(65536-50000)/256;//得到整数部分存入高8位 60 0011 1100
//TL0=(65536-50000)%256;//得到余数部分存入低8位 176 1011 0000
//2的16次方=65536 ,单位时间50000μs=50ms,2的8次方=256 ,(65536-50000)/256=60 (60)binary=0011 1100
TH0=(65536-50000)/256;//定时器T0的高8位
//(65536-50000)%256=176 (176)binary=1011 0000
TL0=(65536-50000)%256;//定时器T0的低8位
t++;//如果t累加到20,则执行if语句(即t=20时表示1秒)
if(t==20) //20个50ms(定时时间)=1s
{
t=0;//t清零,以便进行下一次计数
P1=~P1;//取反实现led的闪烁
}
}
解释部分语句
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
如果你选的单片机的晶振一定,比如12MHZ来说吧,机器周期是1us,就是说每1us产生一次计数,就拿50ms来说,这是你想要的计时,意思是,对机器周期进行50000计数就可以得到我想要的,可T0是一个可以对机器周期能进行65536次计数,也就是说我想要的50MS不能让T0溢出,怎么办?那么先给这个定时器里面放些数,放多少,就是我们想要的50MS在加上一个多少就能等于65536,也就是65536和50000的差值,这个值就是我们说的初值。
为什么除以256,因为我们的计时器是两个8位组成的,那么要把那些差值装进这两个8位,那么低8位最多能装256个机器周期,那么256计满了就用高8位的,就是说低8位满一次高8位加1,那么高8位装多少,低8位就满了几次,算法就是用差值除一下256取其整数,剩下的,就是还剩了小于256次数的就放在低8位,就是差值的余数。如果我要放一个超过256的数,肯定是超过先放高八位,把剩下的部分放在低八位中了,TH0=(65536-50000)/256就是把TL0中放不下的部分放在THO中,再把剩下的部分放在TH0中。
举报
更多回帖
rotate(-90deg);
回复
相关问答
定时器
计数器
中断系统
谈一谈
定时器
/
计数器
的
工作原理
及应用
2022-02-23
1093
80C51单片机的
定时
/
计数器
是怎样
工作
的
2021-08-09
987
怎样通过TMOD寄存
器
设置16位
定时
/
计数器
的
工作
模式?
2021-07-16
2933
mcu
定时
/
计数器
的
定时
功能和
计数
功能区别?
2023-11-01
329
有关单片机中的
定时器
和
计数器
的相关知识汇总
2022-01-21
2235
51单片机中的
定时器
/
计数器
有哪几种
工作
方式呢
2022-01-21
4623
定时器
/
计数器
8253内部有多少个16位的
计数器
2021-10-20
1957
如何对
定时
/
计数器
进行编程?
2021-10-15
1469
定时
/
计数器
一共有几种
工作
方式?
2021-07-16
2130
求助
定时计数器
2013-10-31
2777
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
首页
论坛版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分