以前写过单片机的计数器/定时器的相关程序。今天来系统总结下。借助网络和书本又把相关的知识复习了一遍。下面这个链接就计数器/定时器做了详细的介绍。http://hi.baidu.com/at_this_time/blog/item/6fb0fba169bd5e804610640c.html
对于系统学习计数器/定时器很有帮助。如果要用单片机对外部信号进行计数或者利用单片机对外部设备进行定时控制,就需要用到单片机的定时器/计数器。日常生活中也有很多地方需要用到计数,如流水线上生产药品,当药品瓶经过某处时有红外扫面从而对药物数量进行统计。而定时器用处也广泛,闹钟就是一个例子。设定时间,时间到了进行处理。51单片机有两个定时器/计数器T0和T1,当T0做计数器时(P3.4用来做输入信号)当T1用来做计数器时(P3.5引脚作为输入信号)。当检测到有脉冲信号输入时,则会技术,当计数达到65536时,则计数器会溢出且会发送给CPU一个信号,CPU会停止当前的任务去处理规定的任务。即产生定时器/计数器中断。联系52单片机的中断:52单片机有六个中断源。
T0:定时器/计数器0中断,由T0计数器计满回0引起。中断级别为1,中断入口地址为:000BH
T1定时器/计数器1中断,由T1计数器计满回0引起。中断级别为3,中断入口地址为:001BH
当需要用到计数器时则单片机需要外接信号,而计数器则通过时钟振荡器12分频后产生技术信号。如时钟振荡器为12MHZ,则12分频后得到1MHZ信号,1MHZ每个脉冲的持续时间(1个周期为)1uS.
利用计数器,编写发光二极管闪烁的程序,定时1M需要计算,这里随便写了一个数。能看到法官二极管闪烁。程序如下,这里选择模式2自动装载数据。
#include<reg52.h>
#define uint unsigned int
sbit led=P1^0;
uint count;
void main()
{
count=0;
TMOD=0x02;//选择计数器TO模式2自动再装入计数器
//TH0=0; //(256-256)/256
TL0=0; //(256-256)%256
EA=1; // 开总中断
ET0=1; //开计数器