51单片机定时器/计数器的使用程序与分析

定时器的使用能够使延时更加的准确

定时器/计数器由振荡器,12分频电路,多路转换开关MUX,16位的加1计数器T0和16位的T1寄存器组成。定时器/计数器的核心是16位的加1计数器。
1、计数功能:对外部脉冲进行计数。外部脉冲通过T0(P3.4)、T1(P.5)两个信号引脚输入,输入的脉冲再负跳变时有效,进行加1计数,一个下降沿脉冲计数一次,并将技术的结果保存在计数寄存器中。
2、定时器功能:对单片机内部进行的相关计数,即每个机器周期产生一个计数脉冲,每经过一个机器周期计数器加1.

定时器/计数器的控制寄存器与工作方式
1、定时器/计数器工作方式寄存器TMOD(一个不可以按位寻址的8位特殊功能寄存器,89H,高四位-T1,低四位-T0)
  T1 T1 T1 T1 T0 T0 T0 T0
TMOD D7 D6 D5 D4 D3 D2 D1 D0
位符号 GATE C/T M1 M0 GATE C/T M1 M0
含义我们稍后再说,,,
2、定时器控制寄存器TCON(用来启动进入工作状态)
TCON D7 D6 D5 D4 D3 D2 D1 D0
位符号 TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
位地址 8FH 8EH 8DH 8CH 8BH 8AH 89H 88H
3、中断允许控制器IE,,,


本程序将简单的利用定时器对时间进行控制,发光二极管按P1.0,P1.1,P1.2,,,,P1.7,P1.0,,,,的顺序依次循环点亮。每次发光二极管点亮的时间精准的控制在1s。
#include<reg51.h>
unsigned int num=100;
unsigned char x=0xfe;
void timer1() interrupt 3
{
num--;
TH1=0x63;
TL0=0x18; //重新设置初值
if(num==0)
{
if(x==0x7f)
x<<=1;
else 
{
x<<=1;
x++;
}
P1=x;
num=100;
}
 }
void main()
{
TMOD=0x00; //设置定时器工作模式
TH1=0x63;
TL0=0x18;	//设置初值

EA=1;		   //总中断允许
ET1=1;		 //定时器中断允许
TR1=1;		  //定时开始
for(;;)
{
		   //循环等待定时器溢出
}
}

 
 


后续在做补充


猜你喜欢

转载自blog.csdn.net/allaoe/article/details/80570270