定时器的使用能够使延时更加的准确
定时器/计数器由振荡器,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(;;) { //循环等待定时器溢出 } }