单片机之定时器/计数器

单片机之定时器/计数器总结

准备工作: 基础

(一)两种个工作方式:

1、定时工作方式,加1信号由振荡器的12分频产生,即每过一个机器周期,计数值增1,直至计满溢出为止。

2、计数工作方式,通过引脚T0T1对外部信号计数,外部脉冲的下降沿触发计数, 当输入脉冲信号从10的负跳变时,计数器就自动加1,外部输入的计数脉冲的最高频率为系统振荡频率的1/24,外部输入信号脉冲宽度至少保持1个机器周期。

(二)16位的定时器/计数器分别由两个专用寄存器组成,即T0TH0TL0构成;T1TH1TL1构成,这些寄存器由于存放定时和计数初值。

(三)两个重要的寄存器:

一个是8位的TMOD,另一个是8位的TCON 

TMOD 主要用于选定定时器的工作方式   TMOD  GATE C/T M1 M0 GATE C/T M1 M0

TCON主要用于控制定时器的启动与停止  TCON   TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0

控制计数器运行是根据  门控位gate和外部引脚Int0Int1 以及TRX来决定

(四)定时器/计数器有四种工作方式:

           T0有四种工作方式,T1有三种工作方式。

(1) 方式013位计数器方式

     溢出值是:213=8192

(2) 方式116位计数器方式

             溢出值是:216=65536

(3) 方式28位自动重装初值方式

溢出值是:28=256

(4) 方式3T0分成两个独立的8位计数器方式

(五)接着比较重要的是定时器/计数器的初始化

初值X的计算:X  =   M  -  计数值(计数次数)

 实战:

 写了两个比较简单的应用程序

1.流水灯控制程序(半秒点亮一个灯,如果你想要相隔时间更长的话则需要更换晶振,我开发板上的晶振是 12MHZ的所以就定半秒了)功能已在开发板上实现,代码:

   org  0000h

     ljmp main

     org  000bh

     ljmp loop

main:mov tmod,#01h

     mov tcon,#10h

     mov ie,#82h

     mov th0,#3ch

     mov tl0,#0b0h

     mov a,#0feh

     mov p1,a

     sjmp $

loop:rl a

     mov p1,a

     mov th0,#3ch

     mov tl0,#0b0h

     reti

     End

2.根据T0(P3.4)输入低频负脉冲,要求P3.4每次发生负调变时,P1.0输出一个1ms的方波,看书花了将近20分钟才看懂了后改编,这里的系统晶振得6MHZ才行 代码:

       org 0000h

       ljmp main

       org 000bh

       ljmp t0i

       org 001bh

       ljmp t1i

main:   mov tmod,#25h

    mov ie,#82h

        mov ip,#0ah

    mov tcon,#10h

      mov th0,#0ffh

    mov tl0,#0ffh

      mov th1,#06h

     mov tl1,#06h

   clr f0

loop:  jnz f0,loop

   setb et1

   setb tr1

loop1: ajmp loop1 

t0i:   clr tr0  

       setb f0

       reti

t1i: cpl p1.0

    reti

       

至于门控位它可用于计算脉冲宽度代码更简单只需设置 tmod即可 代码就不放在这了

 

待续…………

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值