c51单片机的定时器计数器怎么用?最好用例子

c51单片机的定时器计数器怎么用?最好用例子,第1张

方法有很多的,给你一个,你可以调试一下,你可以通过不同的晶振去计算定时器初值,如果你懂定时器这部分很好调通的
#include <reg52h>
sbit p1_0=P1^0;
int i; //全局变量
void timing(void) //晶振为36864M
{
TMOD|=0x01; //定时器T0,工作方式1
TH0=0xC3;
TL0=0xC7; //这两个寄存器存的是计数器的计数开始的值,这两个值累加至溢出后正好是50ms
ET0=1; //使T0中断可以溢出
EA=1; //开启总中断
TF0=0; //溢出位清零
TR0=1; //开启T0
}
/定时中断函数/
void time0_int () interrupt 1 //定时中断函数
{
TH0=0xC3;
TL0=0xC7;
i++;
}
main()
{
i=0;
timing();
while(;)
{
if(i==20)
{
p1_0=~p1_0; //p10口状态翻转
i=0;
}
}

计数器作用

在数字电子技术中应用的最多的时序逻辑电路。计数器不仅能用于对时钟脉冲计数,还可以用于分频、定时、产生节拍脉冲和脉冲序列以及进行数字运算等。但是并无法显示计算结果,一般都是要通过外接LCD或LED屏才能显示。

定时器作用

用定时器来控制开关或工作时间

扩展资料

定时器(Timer)

人类最早使用的定时工具是沙漏或水漏,但在钟表诞生发展成熟之后,开始尝试使用这种全新的计时工具来改进定时器,达到准确控制时间的目的。定时器确实是一项了不起的发明,使相当多需要人控制时间的工作变得简单了许多。

甚至将定时器用在了军事方面,制成了定时炸d,定时雷管。现在的不少家用电器都安装了定时器来控制开关或工作时间。

计数器在数字系统中主要是对脉冲的个数进行计数,以实现测量、计数和控制的功能,同时兼有分频功能,计数器是由基本的计数单元和一些控制门所组成,计数单元则由一系列具有存储信息功能的各类触发器构成,这些触发器有RS触发器、T触发器、D触发器及JK触发器等。

计数器在数字系统中应用广泛,如在电子计算机的控制器中对指令地址进行计数,以便顺序取出下一条指令,在运算器中作乘法、除法运算时记下加法、减法次数,又如在数字仪器中对脉冲的计数等等。

计数器可以用来显示产品的工作状态,一般来说主要是用来表示产品已经完成了多少份的折页配页工作。它主要的指标在于计数器的位数,常见的有3位和4位的。很显然,3位数的计数器最大可以显示到999,4位数的最大可以显示到9999。

参考资料来源:百度百科-定时器

参考资料来源:百度百科-计数器

你可以按照以下步骤编写STC8G1K08芯片的LED点亮和灭的时间控制程序:

设置芯片的时钟和计数器,以便实现时间控制。例如,可以使用定时器或延时函数来控制时间。

在主函数中编写程序,实现LED点亮和灭的时间控制。可以使用if语句或while语句来判断时间是否达到要求,然后控制LED灯的点亮和灭。

在main函数中添加延时函数,以实现上电后30秒后LED灯开始点亮的要求。
下面是一个简单的示例程序,仅供参考:

#include<reg52h>

sbit LED=P1^0;

void delay(unsigned int i)

{

while(i--);

}

void main()

{

unsigned int count=0;  //计数器,用于实现30秒的延时

while(count<30000)  //上电后30秒开始执行程序

{

delay(1000);  //每次延时1秒

count+=1000;

}

LED=1;  //点亮LED

delay(3000);  //LED持续3秒

LED=0;  //灭掉LED

while(1);  //芯片不工作

}

在上述程序中,使用了一个计数器来实现上电后30秒的延时,然后LED点亮并持续3秒后灭掉,最后芯片不工作。需要注意的是,示例程序仅供参考,具体实现方式需要根据实际情况进行调整和优化。

利用定时器定时或延时,其实就是利用计数器对内部时钟信号或机器周期计数,但时间都不长。实现长延时的方法很简单,对每一次定时计数,计数到某一个数时,即为一定时间。例如,定时器可定时20ms,每20ms到,或中断,或查询,并计数,计数到50次,定时的时间就是20ms×50=1000ms=1秒,再计60秒,得到1分,计60分得1小时。依此,可以实现时钟计时。

在图形化编程中,重复执行多少次通常可以使用循环结构来实现。在Scratch等编程工具中,循环结构分为固定循环次数的循环和条件循环两类。
对于固定循环次数的循环,可以使用“重复”(repeat)块来实现,该块可控制循环体内部的代码重复执行多少次。具体来说,可以拖动“重复”块到代码编辑区,然后设置重复的次数即可。
对于条件循环,通常使用“当…时” (when…)和“重复直到”(repeat until)等块来实现。这种情况下,重复执行多少次的次数是由运行时满足条件的次数来决定的。
无论使用哪种循环类型,都可以添加控制语句来限制循环次数,例如,可以使用计数器变量来计算循环执行的次数,然后在达到一定次数后退出循环。
总的来说,要控制图形化编程的重复执行时间,可以使用循环结构来实现,并根据场景需求添加其他控制语句以调整循环次数。

定时和计数是日常生活和生产中最常见和最普遍的问题。
定时器和计数器功能基本上都是使用相同的逻辑实现的,而且这两个功能都包含输入的计数信号,本质上都是对脉冲计数。计数器用来计数并指示在任意间隔内输入信号(事件)的个数,而定时器则对规定间隔内输入的信号个数进行计数,用来指示经历的时间。
在单片机中,定时/计数器作定时功能用时,对机器周期计数(由单片机的晶体振荡器经过12分频后得到),因每次计数的周期是固定的,所以根据它计数的多少就可以很方便的计算出它计数的时间。如图1所示。
 
图1 计数与定时
二、溢出的基本概念
从一个生活中的例程看起:一个水盆在水龙头下,水龙头没关紧,水一滴滴地滴入盆中。盆的容量是有限的,水滴持续落下,盆中的水持续变满,最终有一滴水使得盆中的水满了,这就是“溢出”。
如果一个空的盆要1万滴水滴进去才会满,开始滴水之前可以先放入一部分水,叫做计数初值。如果现在要计数9000,那么可以先放入1000滴水,也就是计数初值为1000,再计数9000就可以溢出产生中断。
单片机中通常采用计数初值的办法,如果每个脉冲是1微秒,则计满256个脉冲需时256微秒,如果现在要定时100微妙,只要在计数器里面先放进156,然后计数100就可以就可以溢出产生中断了。如图2所示。
 
图2 定时器/计数器的溢出
 
三、定时/计数的主要方法
实现定时或计数,主要有三种方法。
(1)软件延时
软件延时利用微处理器执行一个延时程序段实现。因为微处理器执行每条指令都需要一定时间,通过指令的循环实现软件延时。软件定时具有不使用硬件的特点,但却占用了大量CPU时间。另外,软件定时精度不高,在不同系统时钟频率下,执行一条指令的时间不同,同一个软件延时程序的定时时间也会不同。
(2)硬件定时
硬件定时采用数字电路中的分频器将系统时钟进行适当分频产生需要的定时信号,也可以采用单稳电路或简易定时电路(如常用的555定时器)由外接RC(电阻、电容)电路控制定时时间。这样的定时电路较简单,利用不同分频倍数或改变电阻阻值、电容容值使定时时间在一定范围内改变。
(3)可编程的硬件定时
可编程定时器/计数器最大特点是可以通过软件编程来实现定时时间的改变,通过中断或查询方法来完成定时功能或计数功能。这种电路不仅定时值和定时范围可用程序改变,而且具有多种工作方式,可以输出多种控制信号,具备较强的功能。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/10340924.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-07
下一篇 2023-05-07

发表评论

登录后才能评论

评论列表(0条)

保存