哈尔滨理工大学软件工程专业08-7李万鹏原创作品,转载请标明出处
http://blog.youkuaiyun.com/woshixingaaa/archive/2010/09/19/5893970.aspx
定时/计数器的结构和工作原理
定时/计数器的实质是加1计数器(16位),由高8位和低8位两个寄存器组成。80C51单片机定时/计数器的工作是由两个特殊功能寄存器控制的。TMOD是定时/计数器的工作方式寄存器,确定工作方式和功能,低四位用于T0,高四位用于T1。TCON是控制寄存器,控制T0和T1的启动和停止及溢出标志,高四位与定时器有关,低四位与外部中断有关。如果定时/计数器工作于定时模式,则表示定时时间已到;如果工作于计数模式,则表示计数值已满。加1计数器输入的计数脉冲有两个来源,一个是由系统的时钟振荡脉冲经12分频后送来;一个是T0或T1引脚输入的外部脉冲源。
中断允许控制。CPU对中断系统所有中断以及某个中断源的开放和屏蔽是由中断允许寄存器
IE控制的。
#include <reg52.h> unsigned int t; sbit p3_4 = P3^4; void init_timer(){ TH0 = (65535 - 50000) / 256; //求取高8位 TL0 = (65535 - 50000) % 256; //求取低8位 EA = 1; //CPU总中断允许位 ET0 = 1; //定时/计数器中断允许位 IT0 = 1; //下降沿有效 TR0 = 1; //定时器启动 TMOD = 0x01; //使用定时器T0,16位计数器 p3_4 = 1; } void main(){ init_timer(); t = 0; while(1){ if(t == 20){ p3_4 = ~p3_4; //响一秒,停一秒 t = 0; } } } void bell() interrupt 1{ TH0 = (65535 - 50000) / 256; //从15535开始计时,共50000us,50ms TL0 = (65535 - 50000) % 256; //20*50 = 1000ms = 1s 即1s响停一次 t++; }