目录

  • 1 学习情境 1     汽车空调系统的单片机控制
    • 1.1 概述
    • 1.2 MCS-51单片机的结构
    • 1.3 单片机基本I/O口电路结构
    • 1.4 时钟电路与复位电路
    • 1.5 单片机内部定时/计数器
    • 1.6 单片机与A/D器转换接口的控制
    • 1.7 汽车空调系统机电控制部分构成
    • 1.8 汽车自动空调系统的单片机综合控制
  • 2 学习情境 2     汽车发动机系统的单片机控制
    • 2.1 汽车发动机系统电控部件的构成
    • 2.2 单片机与D/A器转换接口
    • 2.3 发动机电控点火系统的单片机控制
    • 2.4 发动机喷油系统的单片机控制
  • 3 学习情境 3     汽车电子安防系统的单片机控制
    • 3.1 汽车安全气囊防护系统机电部件构成
    • 3.2 ABS防抱死系统机电部件构成
    • 3.3 汽车防盗系统
    • 3.4 汽车安全气囊防护系统的单片机控制
    • 3.5 ABS防抱死系统的单片机的单片机控制
  • 4 学习情境 4     车载总线及网络系统的单片机控制
    • 4.1 汽车LIN总线系统的部件构成
    • 4.2 汽车CAN系统的部件构成
    • 4.3 汽车MOST总线系统的部件构成
    • 4.4 汽CAN总线系统的单片机节点控制
    • 4.5 汽车LIN总线系统的单片机节点控制
    • 4.6 汽车MOST总线系统的单片机模拟节点控制
单片机内部定时/计数器

1.5 单片机内部定时/计数

 1.5.1定时/计数器概述

(1)MCS-51单片机有两个16位的可编程定时/计数器,称为定时器T0和定时器T1。可编程选择其作为定时器用或作为计数器用。


图1-10   单片机定时/计数器结构框图

 

2)本质上讲都是计数器。

    对外部事件脉冲计数就作为计数器使用对内部的机器周期计数就作为定时器使用。(对外部脉冲计数时,信号脉冲应加到相应的外引脚上T0P3.4,T1(P3.5))他们都是加法计数器,计满后就会溢出(Overflow),溢出时产生中断标志。





1.5.2.与定时/计数器有关的SFR(定时计数器的控制)

    1.定时/计数器工作方式控制寄存器TMOD(T:Timer,M:Mode)(89H)高4位控制T1  低4位控制T0

 

GATE

C/T

M1

M0

GATE

C/T

M1

M0

          

TMOD不可位寻址,高4位和低4位分别控制T1和T0。

(1)M1M0——工作方式选择位。

            M1M0     方式      功能

            00        方式0     13位的计数器

            01        方式1     16位的计数器

            10        方式2     8位的计数器,初值自动重装

            11        方式3     两个8位的计数器,仅适用T0

(2)C/T——计数/定时方式选择位。

     C/T=1,为计数工作方式,对外部事件脉冲计数,作为计数器用(负跳变有效)。

     C/T=0,为定时工作方式,对内部机器脉冲计数,作定时器用。

(3)GATE——门控位。

一般取GATE=0,在后面的定时器工作方式结构中分析原因。

 

2.TCON:定时/计数器控制寄存器(88H)

 

TF1

TR1

TF0

TR0

IE1

IT1

IE0

IT0

 

    TCON可位寻址。低4位用于控制外部中断。高4位的功能与定时器有关,含义如下:

   TF0:定时/计数器T0溢出标志。 (T:Timer,F:Flag)

   TR0:定时/计数器T0运行控制位。(T:Timer,R:Run)

    TR0=1,T0运行

    TR0=0,T0停

  TF1:功能与TF0相同。

  TR1:功能与TR0相同。

 

3.计数寄存器

TH0、TL0是T0的两个8位计数器,TH1、TL1是T1的两个8位计数器,并且高8位数存放在TH中,低8位数存放在TL中。

 



1.5.3.定时/计数器的工作方式

(1)方式0

当TMOD中的M!M0=00时,定时/计数器工作在方式1下,为13位定时/计数器。与方式1不同的是,方式0使用了TL0或TL1的低5位。图1-8是以TC0为例的方式0结构图。

图1-11  工作在方式0下的定时/计数器0的结构

方式0下的定时时间为:

   ,式中a为初始值。

由上式可计算出初始值a的大小。有一点特别需要注意,在给定时/计数器赋初始值时,是将初始值a的低五位付给TL0或TL1

将初始值15536化为16进制数,然后赋给TH0和TL0即可。在此基础上定时,50mS到时,则会产生溢出。

由此可以得到方式1时的初始值计算公式:

(2)方式1

 

 


1-12  方式1逻辑结构

 

    当M1M0=01时,定时/计数器工作在方式1,逻辑结构如上图1-9所示。内部为16位计数器,有TL0作低8位和TH0 作8位,16位计满溢出,溢出置位TF0。最大计数值为216=65536。

   原理分析总结:

GATE=0,TR0=1,控制开关闭合,开始计数。

 

  GATE=1,同时    TR=1

INT0=1时,才开始运行。

 总上分析,得出取GATE=0

 3)方式2


图1-13   方式2,逻辑结构

    当M1M0=10时,定时/计数器工作在方式2,逻辑结构如上图1-10所示。定时/计数器工作为8位,能自动恢复定时/计数器初值。即用TL0计数,计满溢出时自动将TH0中的值送入TL0,自动恢复初值。计数的最大值为256。

(4)方式3

方式3只适用于TC0。在方式3下,TC0分成了两个独立的定时/计数器TL0和TH0,均为8位的T/C。此时,TC1一般作波特率发生器时,可以设置成方式0、1或2,用在任何不需要中断控制的场合。一般T1作波特率发生器时,常设置成方式2的自动重装模式。





1.5.4初值的计算方法

  用定时器T0产生1ms的定时,系统的fosc=12MHZ

分析:机器周期=1us要产生1ms的定时,要数1ms/1us=1000个机器周期的脉冲,那么数机器周期的方法有两种方法

 1000                  1000

0  65536

                         初值

1)从0开始计数,计到1000即可,但是总要去看什么时候到1000?

(2)从某个平台(初值)开始计数,计满刚好溢出,产生中断标志,请求中断

具体计算:

65536-1ms/1us=65536-1000=64536

转换后存到计数寄存器中即可。

 

1.5.5定时/计数器的应用步骤

1、初始化

选择工作模式  MOV  TMOD, ……..

计数器付初值  MOV  TH0,  ……..

              MOV  TL0, ………..

启动计数器    SETB  TR0

开中断        SETB  ET0

              SETB  EA

 

2、提供中断入口地址

3、编写中断服务程序。

(1)保护现场、恢复现场

(2)重新赋初值(方式2除外)

例:设计一程序,在P1.0引脚上输出周期为2ms方波。fOSC=6MHz.

分析:要在P1.0引脚上输出方波,只要在P1.0引脚上交替输出高电平和低电平即可,用定时/计数器产生1ms定时,定时到改变输出信号。

计算1ms定时的计数初值,1ms需要数500机器周期。

初值=65536-500=65036

65036/256    得整数部分为254,余数为12。

程序如下:

ORG  0000H

LJMP  SETUP

ORG  000BH

      LJMP  INET0P

ORG  0030H

         SETUP:MOV  TMOD,#01

MOV  TH0,#254

  MOV  TL0,#12

SETB  TR0

SETB  ET0

SETB  EA

           MAIN:SJMP  $

          INET0P:CLR  TR0

MOV  TH0,#254

MOV  TL0,#12

  SETB  TR0

CPL  P1.0

RETI

END

从方式0和方式1的应用看,方式1比方式0有优点,计数范围大,初值计算不须换算,使用方便,建议采用。

例:设计一程序,在P1.0引脚上输出400us方波。fOSC=6MHz. 用方式2实现

分析:由于400us需要计数200个机器脉冲数,而8位计数器就能计数256,因此用方式2可以实现。

初值=256-200=56

程序如下:

ORG  0000H

                    LJMP  SETUP

                    ORG  000BH

LJMP  INET0P

ORG  0030H

         SETUP:MOV  TMOD,#02

MOV  TH0,#56

MOV  TL0,#56

SETB  TR0

SETB  ET0

SETB  EA

     MAIN:SJMP  MAIN

            INET0P:CPL  P1.0

            RETI

END