c51单片机的定时器计数器怎么用?最好用例子
计数器1,也是计数,设置初值也是为了计数,是对外部脉冲计数,而这外部脉冲是要从P3.5输入的。初值也是计数的需要,TL1=256-实际计数值=6,可以算出实际计数值是250。也就是需要对外部脉冲计250个才中断一次。
你在外部加脉冲,是只加一个吧,所以,屏幕上没有显示,至少要加250个以上,每加250个,cou才加一个数。
这是我根据频率计程序修的
//用定时计数器1作为脉冲计数器(P3.5引脚正是输入功能),定时器0作为定时器用,定时50ms产生中断
//中断4次后(即0.2s)读计数器1的数据
#include
#define uint unsigned int
#define uchar unsigned char
//定义以I/O口的功能
sbit rs=P1^3;//液晶屏写选择,0命令 1数据
sbit rw=P1^4;//液晶屏读写选择
sbit lcden=P1^5;//液晶屏使能
#define db P2 //定义P2为数据输出口,写数据时用db代替P2,增加液晶屏程序的通用性
//更改硬件接线时,只更改此处,而不必去更改液晶屏读写子程序
uchar aa;//计中断次数
uint bb,cc,dd;//保存计数器的值
void Delay1ms(unsigned int i) //1ms延时程序
{
unsigned int j;
for(;i>0;i--)
{
for(j=0;j<125;j++)
{;}
}
}
void init()//初始化设置
{
TMOD=0x51;//定时器1作为计数器,定时器0作为定时器用
TH1=0;//计数器清0
TL1=0;
EA=1;//开总中断
ET0=1;//允许定时器0中断
TH0=0x4c;
TL0=0x5c;
TR1=1;//启动计数器
TR0=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()//液晶屏初始化
{
rw=0;
write_com(0x38);//显示模式16字*2行,5*7点阵,数据口8位
Delay1ms(10*12);
write_com(0x0f);//开显示,显示光标,光标闪烁
Delay1ms(10*12);
write_com(0x06);//写完数据后数据指针和光标位置自动加1
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;//分离出十万,万,千,百,十,个
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);
}
void main()//主程序很简单
{
init();//初始化
while(1)//循环程序
{
dd=bb*256+cc;//0.2S的计数值
display4(dd);//显示
Delay1ms(100); //延时
}
}
void timer0()interrupt 1//注意:定时器0的中断序号为1
{
aa++;
TH0=0x4c;
TL0=0x5c;
if(aa==4)//中断4次,共0.2S
{
TR1=0;//暂停计数
aa=0;
bb=TH1;//读出计数器数据
cc=TL1;
TL1=0;//计数器清0
TH1=0;
TR1=1;//重新启动计数器
}
}
#include <reg52.h>
sbit p1_0=P1^0;
int i; //全局变量
void timing(void) //晶振为3.6864M
{
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; //p1.0口状态翻转
i=0;
}
}
//用定时器T0查询方式P0口8位控制LED闪烁
#include<reg52.h> // 包含52单片机寄存器定义的头文件
#define uchar unsigned char
#define uint unsigned int
/**************************************************************
函数功能:主函数
**************************************************************/
void main(void)
{
TMOD=0x01; //使用定时器T0的模式1
TH0=(65536-50000)/256; //定时器T0的高8位赋初值
TL0=(65536-50000)%256; //定时器T0的高8位赋初值
TR0=1; //启动定时器T0
TF0=0; //溢出标志位 先清零
P0=0xff; //关闭LED灯
while(1)//无限循环等待查询
{
while(TF0==1)
{
TF0=0;
P0=~P0;
TH0=(65536-50000)/256; //定时器T0的高8位赋初值否则会从0开始计数
TL0=(65536-50000)%256; //定时器T0的高8位赋初值
}
}
}
怎样使用51单片机的定时器?
51单片机定时器的使用 51单片机定时器\/计时器的使用 步骤:1、 打开中断允许位:对IE寄存器进行控制,IE寄存器各位的信息如下图所示:EA: 为0时关所有中断;为1时开所有中断 ET2:为0时关T2中断;为1时开T2中断,只有8032、8052、8752才有此中断 ES: 为0时关串口中断;为1时开串口中断 ET1:...
51单片机555定时器原理
555定时器的电路结构 555定时器的电路结构如图所示。C1和C2为两个电压比较器,其功能是如果“+”输入端电压v+大于“-”输入端电压v-,即v+>v-时,则比较器输出vc为高电平(vc=1),反之输出vc为低电平(vc=0)。比较器C1参考电压v1+(VREF1)=2\/3Vcc,比较器C2的参考电压v2-(VREF2)=...
51单片机的3个定时器怎样使用?
51单片机只有T0,T1。52才有T2的。定时器设置方法:做定时用一般采用16位模式,也就是TMOD=0x11(10或01单独一个定时器的话),初值的计算是这样的:假设时间是X毫秒,晶振为YMhz,那么:THn=(65536-1000*X*Y\/12)\/256 TLn=(65536-1000*X*Y\/12)%256 之后就是TRn=1(开启定时器)ETn=1(开启...
单片机高手给点拨下,定时器这个不太理解,定时器初始化有几种方法啊...
51 单片机中定时器,是个 16 位的加法计数器。其内容是 0000H ~ FFFFH,即:0 ~ 65535。每隔一个机器周期,加一次一。加到 65536,就会溢出,产生中断。在外部振荡器频率 = 11.0592 MHz 时,机器周期=1085.06944...us。要想定时 1000us,这就有点困难了。在外部振荡器频率 = 12 MHz 时,...
C51单片机定时器1以方式1定时1秒如何设置?
1、先打开我们熟悉的单片机c51编程软件——keil,先把主方法写好。2、然后,我们要定义两个变量。3、接着,设定好定时器的工作方式。4、设置中断发生的机制。5、最后,我们要加进这几行代码进行初值的重装。6、最后,把if语句补充完毕就可以了。
请问51单片机怎么用定时器延时?
51单片机的几种精确延时实现延时通常有两种方法:一种是硬件延时,要用到定时器\/计数器,这种方法可以提高CPU的工作效率,也能做到精确延时;另一种是软件延时,这种方法主要采用循环体进行。 1 使用定时器\/计数器实现精确延时 单片机系统一般常选用11.059 2 MHz、12 MHz或6 MHz晶振。第一种更容易...
51单片机的定时器和计数器分别定时和计数的周期是多长时间,这个脉冲...
定时器\/计数器做为定时器来用的时候,是数的单片机时钟的脉冲个数,也就是说,单片机的时钟做为定时器\/计数器的时钟源,因为单片机的时钟一般比较固定,因此,我们就知道一个脉冲占多长时间,因为根据脉冲的个数,就能推算出时间,就能做定时器用.比如:12MHz的传统51单片机,一个脉冲周期是1us,如果定时器数了...
51单片机如何配置定时器2?
1、首先第一步是定时器2是新增资源,也是51单片机定时器里面功能最强大的一个定时器。注意的是掌握好定时器2还是非常有必要的。2、然后就是定时器2是一个16位定时器\/计数器,注意的是通过设置特殊功能寄存器T2CON中的C\/T2位可将其设置为定时器或是计数器。3、接着就是通过设置T2CON中的工作模式...
51单片机T0定时器4种方式的定时时长分别是多少
这个取决于系统时钟和定时器位数。例如传统89c51单片机(在不考虑新型单片机有分频设置的情况下),12MHz系统时钟,采用8位定时器,最大定时时间为256us;如果采用16位定时器,最大定时时间为65536us。
MCS-51单片机AT89C51有几个几位的定时计数器,可以被设定的工作方式有几...
51单片机有两个定时器,每个定时器可以设置4中工作方式。\\x0d\\x0a方式0:13位定时器\\x0d\\x0a方式1:16位定时器\\x0d\\x0a方式2:8位重装载模式\\x0d\\x0a方式3:两个独立8位定时器模式
原融克廷: 方法有很多的,给你一个,你可以调试一下,你可以通过不同的晶振去计算定时器初值,如果你懂定时器这部分很好调通的 #include sbit p1_0=P1^0; int i; //全局变量void timing(void) //晶振为3.6864M {TMOD|=0x01; //定时器T0,...
百色市13183026028: 怎样使用51单片机的定时器? - ?
原融克廷: 1. 设定工作方式TMOD=..... 2. 装入初值 TH0=...TL0=....TH1=....TL1=..... 3.开启定时器中断和总中断ET0=1或ET1=1 EA=1 4.启动时器 TR0=1 TR1=1 5.写中断服务程序 其中 3和5可以没有
百色市13183026028: 51单片机计数器怎么用 - ?
原融克廷: 可以利用51单片机的计数器T0、T1,例如用计数器0的外部计数脉冲输入端T0计数,当计满100个脉冲数量后,触发中断.进入计数服务中断程序.
百色市13183026028: 51单片机的计数器怎么用 - ?
原融克廷: 首先将定时器设置为计数器模式. 其次,将外部脉冲接入到相应定时器的输入端. 这样就可以使用计数器了.
百色市13183026028: 单片机C51,对定时器/计数器初值设置 - ?
原融克廷: 我觉得算是规定吧,51单片机的汇编程序中A到F前面都要加0.
百色市13183026028: 51单片机,计数器和定时器具体这么用?计数器记的是谁的脉冲数??
原融克廷: 定时器和计数器虽然有定时和技术两种工作模式,但其本质都是使用加法计数器对脉冲进行计数.定时器/计数器每接受一个计数脉冲,加法计数器的值就加1;计满时则发生溢出,计数器又从0开始计数并置溢出标志位(TF0=1或TF1=1). 1)定时模式 在此模式下,计数器的输入脉冲是由晶振12分频获得的.例如,晶振频率为12MHz的值加1.这样就可以根据计数值计算定时时间,也可以根据定时时间计算计数器的初值. 2)计数模式 在此模式下,计数器的输入脉冲是由外部引脚(T0或T1)输入的.外部引脚出现下降沿时,对应计数器的值加1.如果设置计数器的初值,那么读取当时计数器就可以计算脉冲个数. 完全手打,请采纳
百色市13183026028: C51单片机中如何通过两个外部中断,并用计数器将两个中断的时间定出来,并通过P1显示出来 - ?
原融克廷: 你在一个外部中断程序里面写打开定时器中断,在另一个外部中断里面关闭定时器中断.然后计算TH,TL变化的值,再根据晶振频率算出间隔时间.看你是用数码管显示还是用液晶显示,反正显示很简单
百色市13183026028: 单片机的定时/计数器该怎么选择模式? - ?
原融克廷: 首先你要根据自己的需要来确定 如果是定时,定时时间长短来决定!比如你需要个高精度的信号输出,在信号半周期小于250us(大于的话就最好用方式1了)时可以方式2,即自动重装功能,而其你的中断需要设定为高优先级的,在中断入口是...
百色市13183026028: 51单片机如何同时使用定时器和计数器采集数据? - ?
原融克廷: 这是我根据频率计程序修的 //用定时计数器1作为脉冲计数器(P3.5引脚正是输入功能),定时器0作为定时器用,定时50ms产生中断 //中断4次后(即0.2s)读计数器1的数据 #include <reg52.h> #define uint unsigned int #define uchar unsigned ...
百色市13183026028: c51单片贩定时计数器t0有几种工作方式 - ?
原融克廷: 51单片机定时计数器T0有四种工作方式: 方式0: 13位定时计数方式,最大计数值为2^13=8192,定时8192个机器周期; 方式1: 16位定时计数方式,最大计数值为2^16=65536,定时65536个机器周期; 方式2: 8位自动重装计数方式,最大计数值为2^8=256,定时256个机器周期; 方式3: 特殊工作方式.将定时器0分成两个彼此独立8位计数器.