假设系统时钟频率采用6MHz c语言,单片机(c语言版)定时器计数器精要.ppt

单片机(c语言版)定时器计数器精要.ppt

时间常数的计算 时间常数:定时器/计数器T0或T1的初始计数值,在T0或T1被启动后,每个机器周期使计数器中的计数值加1,计数器产生溢出后。 定时时间:计数器溢出时间,时间常数越大,定时时间就越短;时间常数越小,定时时间就越长。时钟的频率越高,定时时间越短;时钟的频率越低,定时时间越长。 设系统时钟的频率为fosc,计数器的初始值为N,定时器工作于方式1,则定时时间: T=(216-N)×12/fosc (1) 如果定时器工作于方式2或方式3,定时时间为: T=(28-N)×12/fosc (2) 例如:系统的时钟频率是12MHz,在方式1下,如果希望定时器/计数器T0的定时时间T为10ms,则初值N =216-T=65536-10000=55536 MCS-51单片机的定时器是可编程的,但在进行定时或计数之前要对程序进行初始化,具体步骤如下: (1)确定工作方式字:对TMOD寄存器正确赋值; (2)确定定时初值:计算初值,直接将初值写入寄存器的TH0、TL0或TH1、TL1; 初值计算:设计数器的最大值为M,则置入的初值X为: 计数方式:X=M-计数值 定时方式:由(M-X)T=定时值,得X=M-定时值/T T为计数周期,是单片机的机器周期。 (模式0-M为213,模式1-M为216,模式2和3-M为28) (3)根据需要,对IE置初值,开放定时器中断; (4)启动定时/计数器,对TCON寄存器中的TR0或TR1置位,置位以后,计数器即按规定的工作模式和初值进行计数或开始定时。 6.4.1 P1口外接的8只LED每0.5s闪亮一次。 【例6-1】在AT89S51单片机的P1口上接有8只LED(电路见图4-7)。下面采用定时器T0的方式1的定时中断方式,使P1口外接的8只LED每0.5s闪亮一次。 (1)设置TMOD寄存器 方式1;计时工作模式;仅由TR0来控制;T1不使用。 TMOD寄存器应初始化为0x01=0000 0001B [案例2] 如图所示,P0口接8只发光二极管,编程使发光管轮流点亮,点亮时间为500ms,要求使用定时器T0来控制,设晶振为12MHz。 设计思想 我们可将P0口的初值设置为0xFE,对应于发光管D1亮,每隔500ms将P0的值循环左移一位,这一周期性的定时作业用T0来完成。 主函数 uchar count=0; //50ms定时中断次数计数器 void main(void) { led=0xfe; TMOD=0x01; //T0工作于方式1 TH0=-50000/256; //定时时间为50ms TL0=-50000%256; ET0=1; //允许T0中断 TR0=1; //启动T0定时 EA=1; //CPU开中断 while (1); } void time0(void) interrupt 1 { TH0=-50000/256; TL0=-50000%256; count++; if(count==10) { count=0; led=_crol_(led,1); P0=led; } } [案例4] 用定时器来控制数码管的动态显示。 主程序 uchar bsel , n; void main(void) { n=0; bsel=0xfe; //首先显示数码管的最低位 TMOD=0x01; //T0工作于定时方式2 TH0=-1000/256; //T0的定时时间为1000us TL0=-1000%256; ET0=1; //允许T0中断 TR0=1; //启动定时 EA=1; //开中断 while(1); } void time0(void) interrupt 1 { TH0=-1000/256; TL0=-1000%256; P0=0xff; P2=bsel; P0=segtab[dbuf[n]]; bsel=_crol_(bsel,1);

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值