导航:首页 > 操作系统 > 单片机定时器的频率

单片机定时器的频率

发布时间:2022-06-11 08:41:06

⑴ 51单片机中用定时器怎么样控制频率

#include<reg52.h>
#include<intrins.h>
#define uint unsigned int //宏定义
#define uchar unsigned char //宏定义
sbit beep=P2^3;
uchar num=0,times=0;
uint flag,tt;
uint freq[]={4000,400,80,40,20,10,5,4}; //1Hz~1KHz
void main() //主函数
{
beep=0;
TMOD=0x12;//设置定时器0,定时器1为工作方式1
TH0=(256-125);
TL0=(256-125);
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
EA=1;//开总中断
ET0=1;//开定时器0中断
ET1=1;
TR1=1;
TR0=1;//启动定时器0
while(1);//等待中断产生
}
void timer0() interrupt 1 //定时器0中断
{
tt++;
if(tt>=freq[num])
{
tt=0;
beep=~beep;
}
}
void timer1() interrupt 3
{
times++;
if(times>=40)
{
times=0;
num++;
num&=8;
}
}

⑵ 单片机时钟频率12MHZ,计算定时2ms所需定时器初值

1、“T计数=12/12=1μs”,分子是机器周期,分母是12M。所以才是1μs。
2、得看定时器是加还是减,还有是多少位的(即确定定时范围)
比如:定时器是加的,范围是000000-FFFFFE,这个只要FFFFFE-7D0=FFF82E(H)
定时器是减的,范围是000000-FFFFFE,这个只要000000+7D0=0007D0(H)
7D0(2000)*1μs=2ms

⑶ 单片机中 定时器/计数器 的计数初值是怎么计算得出的(计数和定时计算方式是否不同)--初学单片机

计数初值的计算:

定时或计数方式下计数初值如何确定:定时器选择不同的工作方式,不同的操作模式其计数值均不相同。若设最大计数值为M,各操作模式下的M值为:

模式0:M=2^13=8192

模式1:M=2^16=65536

模式2:M=2^8=256

模式3:M=256,定时器T0分成2个独立的8位计数器,所以THO、TLO的M均为256。

因为MCS-51的两个定时器均为加1计数器,当初值到最大值(00H或0000H)时产生溢出,将TF位置1,可发出溢出中断,因此计数器初值X的计算式为:X=M-计数值。

式中的M由操作模式确定,不同的操作模式计数器的长不相同,故M值也不相同。而式中的计数值与定时器的工作方式有关。

1、计数工作方式时

计数工作方式时,计数脉冲由外部引入,是对外部冲进行计数,因此计数值根据要求确定。其计数初值:X=M-计数值。

2、定时工作方式时

定时工作方式时,计数脉冲由内部供给,对机器周期进行计数,计数脉冲频率fcont=fosc*1/12、计数周期T=1/fcont=12/fosc定时工作方式的计数初值X等于:

X=M-计数值=M-t/T=M-(fosc*t)/12

式中:fosc为振荡器的振荡频率,t为要求定吋的时间。

(3)单片机定时器的频率扩展阅读:

定时器工作方式的设定:

定时器有两种工作方式:定时和计数。由TMOD的D6位和D2位决定,其中D6位决定T1的工作方式,D2位决定T0的工作方式。值为0时工作在定时方式,值为1时工作在计数方式。并且有四种操作模式:

1、模式0:13位计数器,TLi只用低5位。

2、模式1:16位计数器。

3、模式2:8位自动重装计数器,THi的值在计数中不变, TLi 溢出时,THi中的值自动装入TLi中。

4、模式3:T0分成2个独立的8位计数器,T1停止计数。

⑷ 单片机中用定时器 和计数器来求频率 计算公式是怎么写的

用定时器来及频率,你只需将定时器定时为1秒,1秒内的脉冲个数就是频率了。如果你一定要公式,非常简单,用计数器计到的脉冲个数除以定时时间就是频率了。其中定时器每计一次的时间是晶振的十二分之一,例如,12M晶振就是(12*10^6)*(1/12)=1us.

⑸ 设80C51单片机晶振频率为12MHZ,定时器作计数器使用时,其最高的输入计数频率应为

最高的输入技术频率应为500khz。

计算方法:

确认一次记数,即一次负跳变,需要2个机器周期,即24个时钟周期或震荡周期,则最高记数频率为12M/24=500khz。

或者按照时间计算,晶振频率12M的2个机器周期即2us,那么频率就是1/2*10^6=500khz,结果相同。

(5)单片机定时器的频率扩展阅读:

80C51单片机的嵌入式原理:

梯形图语言可以“一句顶一万句”,也可以“一句顶一句”。比如把一个字节或字从一个地址移动到另一个地址,这实际和汇编语言的一条指令等同。因此梯形图也可以作为普通的程序开发语言使用。

嵌入式软件的开发平台使用梯形图语言的其他功能和PLC类似, 便于“计算机外行”来编程,梯形图语言在处理计算、字符等方面显然落后于其他的软件开发系统。没有必要回避梯形图编程语言的这些缺点。这也是有一利必有一弊。

诚然,用开发平台提供指令(元件)也能完成嵌入式系统的编程,但一般不提倡这么做。用梯形图语言编程,应尽量使用系统提供的代码,尽量少的自己编程,让绝大多数代码由系统提供。这样即提高了效率,降低了成本,也保证了程序运行的可靠性。

使用“一句顶一句”编程时,是没有办法的办法。当然,必要时,也必须使用。这也增加的编程的灵活性和扩大了平台的使用范围。

其实我们把各种处理方式使用C语言、汇编语言或其他语言事先编好,放在平台中供给客户使用。客户使用梯形图语言编程,实际都是调用这些用其他语言编好的模块而已。

参考资料来源:网络-80C51



⑹ 51单片机用定时器计数器测量频率

定时器1对外部脉冲计数时TMOD高4位设置应该是5
因此TMOD=0x51;
以下我的频率计程序:
#include <reg52.h>//因没用到STC12C5410专有特殊功能寄存器,此处用52或51的头文件均可
#define unit unsigned int
#define uchar unsigned char
//定义以I/O口的功能
sbit beiguang=P3^2;//液晶屏背光
sbit rs=P1^3;//液晶屏写选择,0命令 1数据
sbit rw=P1^4;//液晶屏读写选择
sbit lcden=P1^5;//液晶屏使能
sbit fm=P1^7;//蜂鸣器

#define db P2 //定义P2为数据输出口,写数据时用db代替P2,增加液晶屏程序的通用性

//更改硬件接线时,只更改此处,而不必去更改液晶屏读写子程序
uchar aa,bb,cc;//变量声明
unit dd,ee;
void Delay1ms(unsigned int i) //1ms延时程序

{
unsigned int j;
for(;i>0;i--)
{
for(j=0;j<125;j++)
{;}
}
}
void init()//初始化设置

{
TMOD=0x15;//定时器0作为计数器,定时器1作为定时器用
TH0=0;//计数器清0
TL0=0;
EA=1;//开总中断
ET1=1;//允许定时器1中断
TH1=0x4c;
TL1=0x5c;
TR0=1;//启动计数器
TR1=1;//启动定时器
aa=0;
}
void write_com(uchar com)//向液晶屏写命令

{
db=com;
rs=0;
rw = 0;
lcden=0;
Delay1ms(10*12);
lcden=1;
Delay1ms(10*12);
lcden=0;
}
void write_date(uchar date)//向液晶屏写数据

{
db=date;
rs=1;
rw = 0;
lcden=0;
Delay1ms(10*12);
lcden=1;
Delay1ms(10*12);
lcden=0;
}
void init2()//液晶屏初始化
{
beiguang=0;
rw=0;
write_com(0x38);
Delay1ms(10*12);
write_com(0x0f);
Delay1ms(10*12);
write_com(0x06);
Delay1ms(10*12);
write_com(0x01);
Delay1ms(10*12);
}
void display4(unsigned int number) //单行多位显示程序
{
uchar A1,A2,A3,A4,A5;
init2();//液晶屏初始化
A1=number/10000%10;//分离出万,千,百,十,个,对于int型数据,最大不超过65535
A2=number/1000%10;
A3=number/100%10;
A4=number/10%10;
A5=number%10;
write_com(0x80);//第1个数据的位置设定,第1行第1列
Delay1ms(10);
write_date(0x30+A1);//写数据
Delay1ms(10);
write_date(0x30+A2);
Delay1ms(10);
write_date(0x30+A3);
Delay1ms(10);
write_date(0x30+A4);
Delay1ms(10);
write_date(0x30+A5);
Delay1ms(10);

write_com(0x87);//第6个数据'H'的位置,中间空85和86 二格
write_date('H');
Delay1ms(10);
write_date('z');
Delay1ms(10);
}
void main()//主程序很简单
{
init();//初始化
while(1)//循环程序
{
dd=bb*256+cc;//0.5S的计数值
ee=2*dd;//换算为1秒钟的计数值
if(aa==1)
{
if(TH0>12)//预判断,50ms内TH0>12,1s内计数值将超过可计数的最大值65535
fm=0;//报警
}
display4(ee);//显示
fm=1;//报警停止
}
}
void timer1()interrupt 3//注意:定时器1的中断序号为3
{
aa++;
TH1=0x4c;//11.0592Mhz
TL1=0x5c;
if(aa==10)//中断10次,共0.5S
{
TR0=0;//暂停计数
aa=0;
bb=TH0;//读出计数器数据
cc=TL0;
TL0=0;//计数器清0
TH0=0;
TR0=1;//重新启动
}
}

⑺ 单片机的定时器0工作在方式1,晶振频率为12MHZ,要实现定时20ms,定时器的计数初值是多少

定时器计数脉冲频率是1 MHZ,周期是1us,因此20ms是20000个脉冲
因此初值是65536-20000
高8位上的1代表256,因此高8位装的256倍数
TH0=(65536-20000)/256;
低8位装的是不足256部分;
TL0=(65536-20000)%256;

⑻ 时钟频率为12MHZ, 如何利用51单片机定时/计数器定时500ms

我说一下原理
12MHZ的51单片机,定时器最大只能定时65.535ms,所以要定时500ms的时间,
需要产生10次50ms的定时。
步骤如下:
1、每隔50ms定时器中断溢出,计数+1。
2、当计数达到10次时,便产生了500ms的定时啦,然后,你自己根据你的设计,需要让单片机做什么就自己写些什么(比如让某个io口取反)
3、计数达到10次后,不要忘了初始化计数。
最后给点建议:1、要让定时器计数50ms,只能在定时器的工作方式1下进行;
2、定时器初值: TH0 = 0x3C; TL0 = 0x0B0;(我使用的是定时器0)
思路和原理都给你了,只要你看懂了,想让计时器计时多少s都如鱼得水。

⑼ 单片机的系统晶振频率6MHz,,要求定时值为10ms,定时器T0工作在方式1时,其初值是多少TM

定时值为10ms时,定时器T0工作在方式1时,定时器T0对应的初值是1388H

TMOD的值是00000001B,TH0=13H;TL0=88H。

晶振频率为6M,则机器周期为2us,定时10ms,溢出值为5000,TMOD可以设置为方式0或者1,一般设置为1,初始设置如下:

TMOD=0x01

TH0=(65536-5000)/256

TL0=(65536-5000)%256

(9)单片机定时器的频率扩展阅读:

初值定理适用于右边序列,即适用于k<M(M为整数)时f(k)=0的序列。它用于由象函数直接求得序列的初值f(M),f(M+1),…,而不必求得原序列。

初值定理使用条件是要求连续函数f(t)不含冲击函数δ(t)及其各阶导数,或者象函数F(s)为真分数。当象函数为真分式时,根据初值定理可直接由象函数得出函数的初值。

⑽ 请教如何用51单片机的一个定时器计算三路开关量输入的频率

方案1:51的定时器定时时间不长,为了解决这一问题,可以设置一全局变量(假设你用c编程序)作计数器,等到定时中断发生时中断函数给这一全局变量加一,在主程序中判断这一变量的大小,从而推算出定时时间。譬如说,定时器设置成0.5秒中断一次,中断时给变量t加一,那么当t等于16时,就是8秒了。这种方案的缺点是必须在中断函数中加入给变量加一的额外语句,使得定时出现误差,但是也能通过减少定时器的定时时间来补偿,不过计算较麻烦,而且不便于精确定时。
方案2:使用低频的晶振或低频外部震荡。有些型号的单片机支持0至12mhz的震荡频率,只要频率足够低绝对能够在定时器最大定时时间内产生出想要的脉冲。这种方案是以牺牲单片机的运行速度为前提的,不过要是做一些简单控制的话,倒是一种不错的选择。

阅读全文

与单片机定时器的频率相关的资料

热点内容
解压视频白头小哥 浏览:748
cadq命令 浏览:956
python连接本地数据库报错 浏览:194
手机模拟加密禁卡操作 浏览:105
电荷数怎么算法 浏览:589
cad如何打开命令行 浏览:150
php图片限制大小 浏览:164
程序员一夜未归 浏览:593
苹果xsmaxapp怎么不显示更新 浏览:600
苹果app怎么清除角标 浏览:483
解压屁屁玩具脏了怎么办 浏览:670
算法识别自动折叠 浏览:9
dos命令遍历文件 浏览:456
翻译整个pdf 浏览:198
怎么给解压软件授权 浏览:622
怎么换手机桌面壁纸安卓 浏览:957
pdf转换阅读器 浏览:344
特斯拉怎么app预约充电 浏览:498
安卓怎么录像更清晰 浏览:919
怎么服务器输入命令没有显示出来 浏览:799