定时器计数器结构及工作原理(8只led灯)
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
设定时时间50ms(即5000µs),再循环20次,参照例42计算方式
得:0x3cb0,其中0x3c装入TH0,0xb0装入TL0。
(3)设置IE寄存器
本例由于采用定时器T0中断,因此需将IE寄存器中的EA、 ET0位置1。 (4)启动和停止定时器T0 将定时器控制寄存器TCON中的TR0=1,则启动定时器T0; TR0=0,则停止定时器T0定时。
练习题
• 设系统时钟频率为12MHZ,在AT89C51单片 机的P1口上接有8只LED。采用定时器T0的 方式1的定时中断方式,使P1口外接的8只 LED每1s闪亮一次。
分析
(1)设置TMOD寄存器源自定时器T0工作在方式1,应使TMOD寄存器的M1、M0=01;
应设置C/=0,为定时器工作模式;对T0的运行控制仅由 TR0来控制,应使GATE0=0。定时器T1不使用,各相关位均 设为0。所以,TMOD寄存器应初始化为0x01。 (2)计算T0计数初值
• 方式1为16位计数器,由TH0(TH1)高8位和TL0 (TL1)低8位构成
定时原理
• T0/T1是加法计数器,对每时钟脉冲进行12 分频后,加法器中的内容加1,当由全0加 到全1后再加1时计满溢出。如果要计N个单 位,则首先应向计数器置初值为X,且有: • 初值X=最大计数值(满值)M-计数值N • 例题4-2
参考主程序
#include<reg51.h>
Char i=20;
void main( ) { TMOD=0x01;
/*循环20次*/
/*设置定时器T0为方式1*/
TH0=0x3c;
TL0=0xb0; P1=0x00; EA=1; ET0=1;
/*向TH0写入初值的高8位*/
/*向TL0写入初值的低8位*/ /*P1口8只LED点亮*/ /*总中断允许*/ /*定时器T0中断允许*/
• • • •
GATE=0:软件启动T0、T1; GATE=1:软件和硬件启动T0、T1; C/T=0,为定时器工作模式 C/T=1,为计数器工作模式
• 特殊功能寄存器TCON用于控制T0、T1的启 动和停止 • TR1位(或TR0位)=1,启动定时器 • TR1位(或TR0位)=0,停止定时器
T0/T1 工作方式1
4.2 定时器/计数器结构及工作原理
定时器:利用内部时钟产生精确的定时时间 计数器:对外部脉冲进行计数 单片机内部两个可编程定时器/计数器T1、T0 T0由特殊功能寄存器TH0、TL0构成
T1由特殊功能寄存器TH1、TL1构成。
• 特殊功能寄存器TMOD用于选择T0、T1的工 作模式和工作方式。
if(i<=0)
{P1=~P1; i=20; } }
TR0=1;
while(1) ; }
/*启动定时器T0*/
/*无穷循环,等待定时中断*/
参考中断程序
void T0_int(void) interrupt 1 {TH0=0x3c; /*给T0装入16位初值*/ TL0=0xb0; i--; /*循环次数减1*/ /*P1口按位取反*/ /*重新设置循环次数*/