2019-11-13 21:40:37 wangjiaweiwei 阅读数 72
  • 51单片机综合小项目-第2季第4部分

    本课程是《朱有鹏老师单片机完全学习系列课程》第2季第4个课程,也是51单片机学完之后的一个综合小项目,该项目运用了开发板上大多数外设设备,并将之结合起来实现了一个时间、温度显示以及报警功能、时间调整功能等单片机控制常见的功能,有一定代码量,需要一定调试技巧和编程能力来完成,对大家是个很好的总结和锻炼,并且能拓展项目经验。

    3410 人正在学习 去看看 朱有鹏

一 、 定时器的原理

 1、CPU时序的有关知识

     1)振荡周期:为单片机提供定时信号的振荡源的周期(晶振周期或外加振荡周期)

     2)状态周期:2个振荡周期为1个状态周期,用S表示。振荡周期又称S周期或时钟周期。

     3)机器周期:1个机器周期含6个状态周期,12个振荡周期。

     4)指令周期:完成1条指令所占用的全部时间,它以机器周期为单位。

例如:外接晶振为12MHz时,51单片机相关周期的具体值为:

         振荡周期=1/12us;
         状态周期=1/6us;
         机器周期=1us;
         指令周期=1~4us;

2、定时器/计数器的作用

    51单片机有两组定时器/计数器,因为既可以定时,又可以计数,故称之为定时器/计数器。

    定时器/计数器和单片机的CPU是相互独立的。定时器/计数器工作的过程是自动完成的,不需要CPU的参与。

    51单片机中的定时器/计数器是根据机器内部的时钟或者是外部的脉冲信号对寄存器中的数据加1。

    有了定时器/计数器之后,可以增加单片机的效率,一些简单的重复加1的工作可以交给定时器/计数器处理。CPU转而处理一些复杂的事情。同时可以实现精确定时作用。

3、定时/计数器的工作原理

    定时/计数器实质上是一个加1计数器。它随着计数器的输入脉冲进行自加1,也就是每来一个脉冲,计数器就自动加1,,当加到计数器为全1时,再输入一个脉冲就使计数器回零,且计数器的溢出使相应的中断标志位置1,向CPU发出中断请求(定时/计数器中断允许时)。如果定时/计数器工作于定时模式,则表示定时时间已到;如果工作于计数模式,则表示计数值已满。
    可见,由溢出时计数器的值减去计数初值加1才是计数器的计数值。

4、51单片机定时器结构

   定时/计数器的实质是加1计数器(16位),由高8位和低8位两个寄存器THx和TLx组成。TMOD是定时/计数器的工作方式寄存器,确定工作方式和功能;TCON是控制寄存器,控制T0、T1的启动和停止及设置溢出标志。

5、 定时/计数器的控制

    51单片机定时/计数器的工作由两个特殊功能寄存器控制。TMOD用于设置其工作方式;TCON用于控制其启动和中断申请。
    1)、工作方式寄存器TMOD
       工作方式寄存器TMOD用于设置定时/计数器的工作方式,低四位用于T0,高四位用于T1。其格式如下:

  

 GATE是门控位, GATE=0时,用于控制定时器的启动是否受外部中断源信号的影响。只要用软件使TCON中的TR0或TR1为1,就可以启动定时/计数器工作;GATE=1时,要用软件使TR0或TR1为1,同时外部中断引脚INT0/1也为高电平时,才能启动定时/计数器工作。即此时定时器的启动条件,加上了INT0/1引脚为高电平这一条件。
     C/T :定时/计数模式选择位。C/T =0为定时模式;C/T =1为计数模式。
    M1M0:工作方式设置位。定时/计数器有四种工作方式。

 2)、控制寄存器TCON

TCON的低4位用于控制外部中断。TCON的高4位用于控制定时/计数器的启动和中断申请。其格式如下:

      TF1(TCON.7):T1溢出中断请求标志位。T1计数溢出时由硬件自动置TF1为1。CPU响应中断后TF1由硬件自动清0。T1工作时,CPU可随时查询TF1的状态。所以,TF1可用作查询测试的标志。TF1也可以用软件置1或清0,同硬件置1或清0的效果一样。
       TR1(TCON.6):T1运行控制位。TR1置1时,T1开始工作;TR1置0时,T1停止工作。TR1由软件置1或清0。所以,用软件可控制定时/计数器的启动与停止。
       TF0(TCON.5):T0溢出中断请求标志位,其功能与TF1类同。
       TR0(TCON.4):T0运行控制位,其功能与TR1类同。

6、定时/计数器的工作方式

1)、方式0
          方式0为13位计数,由TL0的低5位(高3位未用)和TH0的8位组成。TL0的低5位溢出时向TH0进位,TH0溢出时,置位TCON中的TF0标志,向CPU发出中断请求。

         

    定时器模式时有:N=t/ Tcy 。计数初值计算的公式为:X=2^13-N。定时器的初值还可以采用计数个数直接取补法获得。
计数模式时,计数脉冲是T0引脚上的外部脉冲。
       门控位GATE具有特殊的作用。当GATE=0时,经反相后使或门输出为1,此时仅由TR0控制与门的开启,与门输出
1时,控制开关接通,计数开始;当GATE=1时,由外中断引脚信号控制或门的输出,此时控制与门的开启由外中断引脚
信号和TR0共同控制。当TR0=1时,外中断引脚信号引脚的高电平启动计数,外中断引脚信号引脚的低电平停止计数。
这种方式常用来测量外中断引脚上正脉冲的宽度。   

2)、方式1 
      方式1的计数位数是16位,由TL0作为低8位,TH0作为高8位,组成了16位加1计数器 。

计数个数与计数初值的关系为:X=2^16-N 

3)、方式2 
      方式2为自动重装初值的8位计数方式。 

 计数个数与计数初值的关系为:X=28-N 
工作方式2特别适合于用作较精确的脉冲信号发生器。

4)、方式3 
      方式3只适用于定时/计数器T0,定时器T1处于方式3时相当于TR1=0,停止计数。 

工作方式3将T0分成为两个独立的8位计数器TL0和TH0 。

7、定时器初始化程序应完成如下工作:
1)对TMOD赋值,以确定T0和T1的工作方式。
2)计算初值,并将其写入TH0、TL0或TH1、TL1。
3)中断方式时,则对EA赋值,开放定时器中断。
4)使TR0或TR1置位,启动定时/计数器定时或计数。 

8、计数器初值的计算

    机器周期也就是CPU完成一个基本操作所需要的时间。
    机器周期=1/单片机的时钟频率。
     51单片机内部时钟频率是外部时钟的12分频。也就是说当外部晶振的频率输入到单片机里面的时候要进行12分频。比如说你用的是12MHZ的晶振,那么单片机内部的时钟频率就是12/12MHZ,当你使用12MHZ的外部晶振的时候。机器周期=1/1M=1us。
    而定时1ms的话初值是:1ms/1us=1000。也就是要计数1000个数,初值=65535-1000+1(因为实际上计数器计数到66636才溢出)=64536=FC18H

 

程序示例1:使用定时0,达到1s钟定时时,led状态进行反转

#include "reg52.h"

typedef unsigned char u8;
typedef unsigned int u16;

sbit led = P2^0;



void Timer0Init()
{
 TMOD |= 0X01;
 TH0 = 0XFC;
  TL0 = 0X18;
  ET0 = 1;
  EA = 1;
  TR0 = 1;
}

void main()
{
Timer0Init();
 while(1);
}

void Time0() interrupt 1
{
  static u16 i;
  TH0 = 0XFC;
  TL0 = 0X18;
  i ++;
  if(i == 1000)
  {
  i = 0;
  led = ~led;
   }
}

例如:外接晶振为

程序示例2:使用定时1,达到1s钟定时时,led状态进行反转 

#include "reg52.h"

typedef unsigned char u8;
typedef unsigned int u16;

sbit led = P2^0;



void Timer1Init()
{
 TMOD |= 0X10;
 TH1 = 0XFC;
  TL1 = 0X18;
  ET1 = 1;
  EA = 1;
  TR1 = 1;
}

void main()
{
Timer1Init();
 while(1);
}

void Time1() interrupt 3
{
  static u16 i;
  TH1 = 0XFC;
  TL1 = 0X18;
  i ++;
  if(i == 1000)
  {
  i = 0;
  led = ~led;
   }
}

 

2013-05-19 22:30:49 yunwen3344 阅读数 1058
  • 51单片机综合小项目-第2季第4部分

    本课程是《朱有鹏老师单片机完全学习系列课程》第2季第4个课程,也是51单片机学完之后的一个综合小项目,该项目运用了开发板上大多数外设设备,并将之结合起来实现了一个时间、温度显示以及报警功能、时间调整功能等单片机控制常见的功能,有一定代码量,需要一定调试技巧和编程能力来完成,对大家是个很好的总结和锻炼,并且能拓展项目经验。

    3410 人正在学习 去看看 朱有鹏

1.  CPU时序的有关知识

   (1)振荡周期:为单片机提供定时信号的振荡源的周期(晶振周期或外加振荡周期)。

   (2)状态周期:2个振荡周期为1个状态周期,用S表示。振荡周期又称S周期或时钟周期。

   (3)机器周期:1个机器周期含6个状态周期,12个振荡周期(使用计时器时,每隔一个机器周期计时器加1)。

   (4)指令周期:完成1条指令所占用的全部时间,它以机器周期为单位。

2.  学习定时器前须明白:

   (1)51单片机有2组定时器/计数器(52单片机有三组),可定时或计数。

   (2)定时器/计数器和单片机的CPU是相互独立的,定时器/计数器工作的过程是自动完成的,不需要CPU的参与。

   (3)51单片机中的定时器/计数器是根据机器内部的时钟或者外部的脉冲信号对寄存器(即TH0、TL0和TH1、TL1)中的数据加1。

3.  TMOD是定时/计数器的工作方式寄存器,确定工作方式和功能;TCON是控制寄存器,控制T0、T1的启动和停止及设置溢出标识。

                       GATE:门控位,用于控制定时器的启动是否受外部中断源信号的影响。GATE=0时,只要用软件使TCON中的TR0或TR1为1,就可以启动定时/计数器工作。 GATE=1时,用软件置TR0或TR1为1,同时外部中断引脚INT0/1也为高电平时,才能启动定时/计数器工作。 

   C/T:C/T=0为定时模式;C/T=1为计数模式。

   M1M0:工作方式设置位,共四种工作方式。

       00——13位定时/计数器【TL0或TL1的低5位(高3位未用)和TH0或TH1的8位组成,TL0或TL1的低5位溢出时向TH0或TH1进位,TH0或TH1溢出时,置位TCON中的TF0或TF1标志,向CPU发出中断请求,CPU响应中断后,TF0或TF1自动清0。初始值=2^13 - 定的时间或计的数】

       01——16位定时/计数器【初始值=2^16 - 定的时间或计的数】

       10——8位自动重装定时/计数器【TH0、TH1保存初始值,TL0、TL1从初始值开始加1,溢出后TH0、TH1中的初始值又重新装入TL0、TL1。初始值=2^8 - 定的时间或计的数,特别适用于较精确的脉冲信号发生器。

       11—— T0分成两个独立的8位定时/计数器;T1此方式停止计数。【TL0溢出时TF0置1,TH0溢出时TF1置1。】  



TF0、TF1:T0、T1溢出时,由硬件自动将TF0、TF1置1,CPU响应中断后TF0、TF1由硬件自动清0;也可用软件将TF0、TF1置1或清0,效果同硬件一样。

4.   使用定时器,该做哪些工作?

    (1)对TMOD赋值,以确定T0和T1的工作方式,TMOD各位如上面的图片所示;

    (2)计算初值,并将其写入TH0、TL0或TH1、TL1【如晶振12MHz,定时50ms,TH0=(65536-50000)/256,TL0=(65536-50000)%256 】;

    (3)开EA,开放定时器中断(IE寄存器如下图)。

    (4)使TR0或TR1置位,启动定时/计数器定时或计数(在 TCON寄存器中)。

    (5)写中断服务程序,注意对应的中断号。


2018-07-22 17:19:18 F_zmmfs 阅读数 212
  • 51单片机综合小项目-第2季第4部分

    本课程是《朱有鹏老师单片机完全学习系列课程》第2季第4个课程,也是51单片机学完之后的一个综合小项目,该项目运用了开发板上大多数外设设备,并将之结合起来实现了一个时间、温度显示以及报警功能、时间调整功能等单片机控制常见的功能,有一定代码量,需要一定调试技巧和编程能力来完成,对大家是个很好的总结和锻炼,并且能拓展项目经验。

    3410 人正在学习 去看看 朱有鹏

CPU时序:

v振荡周期:为单片机提供定时信号的振荡源的周期(晶振周期或外加振荡周期)

v状态周期:2个振荡周期为1个状态周期,用S表示。振荡周期又称S周期或时钟周期。

v机器周期:1个机器周期含6个状态周期,12个振荡周期。

v指令周期:完成1条指令所占用的全部时间,以机器周期为单位。

 

例如:外接晶振为12MHz时,89S52单片机的4个时间周期的具体值为:​​​​​​

v振荡周期=1/12us;

v状态周期=1/6us;

v机器周期=1us;

v指令周期=1~4us;

注意:

v定时器/计数器和单片机的CPU是相互独立的。定时器/计数器工作的过程是自动完成的,不需要CPU的参与。

v51单片机有两组定时器/计数器,因为既可以定时又可以计数,故称之为定时器/计数器。

结构:

由高8位和低8位两个寄存器THx和TLx组成

TMOD是定时/计数器的工作方式寄存器,确定工作方式和功能

TCON是控制寄存器,控制T0、T1的启动和停止及设置溢出标志

控制:

TMOD用于设置其工作方式

TCON用于控制其启动和中断申请。

GATE是门控位:用于控制定时器的启动是否受外部中断源信号的影响。

  • GATE=0时:不受外部影响;(启动:TCON中的TR0或TR1为1)
  • GATA=1时:受外部影响;(启动:TR0或TR1为1,同时外部中断引脚INT0/1也为高电平时)​​​​​​​​​​​​​​​​

C/T:定时/计数模式选择位。C/T =0为定时模式;C/T =1为计数模式。

M1M0:工作方式设置位。定时/计数器有四种工作方式。(主要用01)

 

vTF1(TCON.7):T1溢出中断请求标志位。T1计数溢出时由硬件自动置TF1为1。CPU响应中断后TF1由硬件自动清0。T1工作时,CPU可随时查询TF1的状态。所以,TF1可用作查询测试的标志。TF1也可以用软件置1或清0,同硬件置1或清0的效果一样。

vTR1(TCON.6):T1运行控制位。TR1置1时,T1开始工作;TR1置0时,T1停止工作。TR1由软件置1或清0。所以,用软件可控制定时/计数器的启动与停止。//人工主要操作TR

vTF0(TCON.5):T0溢出中断请求标志位,其功能与TF1类同。

vTR0(TCON.4):T0运行控制位,其功能与TR1类同。

 

定时器初值计算公式:

定时器模式时有:N=t/ Tcy

计数初值计算的公式为:X=2^(定时器位数)-N。

定时器的初值还可以采用计数个数直接取补法获得。

计数模式时,计数脉冲是T0引脚上的外部脉冲。

 

如何使用计时器

v对TMOD赋值,以确定T0和T1的工作方式。

v计算初值,并将其写入TH0、TL0或TH1、TL1。

v对EA赋值,开放定时器中断。

v使TR0或TR1置位,启动定时/计数器定时或计数。

 

#include<reg52.h>
#define uchar unsigned char 
#define uint unsigned int 

unsigned char code smg_du[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};

uchar num,kk;


void main()
{
	TMOD=0x01;					//设置定时器0为工作方式1
	TH0=(65536-50000)/256; 		//设置初值
	TL0=(65536-50000)%256;
	EA=1;      					//打开总中断开关
	ET0=1;     					//打开定时器中断
	TR0=1;     					//启动定时器
	while(1)
	{
		if(kk==20)//定时器运行20次之后数码管显示
		{
			kk=0;	
			P1=smg_du[num];
			num++;
			if(num==10)//循环数码管
				num=0;
		}
	}

}

void timer0 () interrupt 1
{
	//进入到函数之后,只有方式二可以自动装载
	
	//手动装载初始值
	TH0=(65536-50000)/256; 
	TL0=(65536-50000)%256;
	
	kk++;//进来一次kk加一 一次

}

 

 

2018-08-06 10:27:27 qq_40691438 阅读数 159
  • 51单片机综合小项目-第2季第4部分

    本课程是《朱有鹏老师单片机完全学习系列课程》第2季第4个课程,也是51单片机学完之后的一个综合小项目,该项目运用了开发板上大多数外设设备,并将之结合起来实现了一个时间、温度显示以及报警功能、时间调整功能等单片机控制常见的功能,有一定代码量,需要一定调试技巧和编程能力来完成,对大家是个很好的总结和锻炼,并且能拓展项目经验。

    3410 人正在学习 去看看 朱有鹏

CPU时序部分知识:

振荡周期:为单片机提供定时信号的振荡源的周期(晶振周期或外加振荡周期)。

状态周期:2个振荡周期为1个状态周期,用S表示。振荡周期又称S周期或时钟周期。 机器周期:1个机器周期含6个状态周期,12个振荡周期。

指令周期:完成1条指令所占用的全部时间,它以机器周期为单位。

定时器部分知识:

51单片机有两组定时器/计数器,因为既可以定时,    又可以计数,故称之为定时器/计数器。

定时器/计数器和单片机的CPU是相互独立的。定时器/计数器工作的过程是自动完成的,不需要CPU的参与。

51单片机中的定时器/计数器是根据机器内部的时钟或者是外部的脉冲信号对寄存器中的数据加1。 

结构:

定时/计数器的实质是加1计数器(16位),由高8位和低8位两个寄存器THx和TLx组成。TMOD是定时/计数器的工作方式寄存器,确定工作方式和功能;TCON是控制寄存器,控制T0、T1的启动和停止及设置溢出标志。

TMOD用于设置其工作方式;TCON用于控制其启动和中断申请。

工作方式寄存器TMOD工作方式寄存器TMOD用于设置定时/计数器的工作方式,低四位用于T0,高四位用于T1。

GATE是门控位, GATE=0时,只要用软件使TCON中的TR0或TR1为1,就可以启动定时/计数器工作;GATA=1时,要用软件使TR0或TR1为1,同时外部中断引脚INT0/1也为高电平时,才能启动定时/计数器工作。

C/T :定时/计数模式选择位。C/T =0为定时模式;C/T =1为计数模式。    

M1M0:工作方式设置位。定时/计数器有四种工作方式。

TR1(TCON.6):T1运行控制位。TR1置1时,T1开始工作;TR1置0时,T1停止工作。TR1由软件置1或清0。所以,用软件可控制定时/计数器的启动与停止。(定时器1)

TR0(TCON.4):T0运行控制位,其功能与TR1类同。(定时器0)

TF1(TCON.7):T1溢出中断请求标志位。T1计数溢出时由硬件自动置TF1为1。CPU响应中断后TF1由硬件自动清0。T1工作时,CPU可随时查询TF1的状态。所以,TF1可用作查询测试的标志。TF1也可以用软件置1或清0,同硬件置1或清0的效果一样。

TF0(TCON.5):T0溢出中断请求标志位,其功能与TF1类同

2017-09-19 21:16:16 williamgavin 阅读数 592
  • 51单片机综合小项目-第2季第4部分

    本课程是《朱有鹏老师单片机完全学习系列课程》第2季第4个课程,也是51单片机学完之后的一个综合小项目,该项目运用了开发板上大多数外设设备,并将之结合起来实现了一个时间、温度显示以及报警功能、时间调整功能等单片机控制常见的功能,有一定代码量,需要一定调试技巧和编程能力来完成,对大家是个很好的总结和锻炼,并且能拓展项目经验。

    3410 人正在学习 去看看 朱有鹏

定时器
学习目标:

1, 定时器的原理
2, 定时器的使用


CPU时序有关知识:
1, 振荡周期:为单片机提供定时信号的振荡源的周期(晶振周期或外加振荡周期)
2, 状态周期:2个振荡周期为1个状态周期,用S表示。振荡周期又称S周期或时钟周期。
3, 机器周期:1个机器周期含6个状态周期,12个振荡周期。
4, 指令周期:完成1条指令所占用的全部时间,它以机器周期为单位。
在我使用的单片机, 外加晶振为12M, 也就是说, 
震荡周期为(1/12)us; 状态周期为(1/6)us;  机器周期为1us; 指令周期为1~4us。


在学习定时器之前需要明白的:


1, 51单片机有两组定时器/计数器,因为既可以定时,又可以计数,故称之为定时器/计数器。
2, 定时/计数器和单片机的CPU是相互独立的。定时器/计数器工作的过程是自动完成的,不需要CPU的参与。
3, 51单片机中的定时器/计数器是根据机器内部的时钟或者是外部的脉冲信号对寄存器中的数据加1。
4, 有了定时器/计数器之后,可以增加单片机的效率,一些简单的重复加1的工作可以交给定时器/计数器处理。
CPU转而处理一些复杂的事情。同时可以实现精确定时作用。


定时/计数器的工作原理
    定时/计数器实质上是一个加1计数器。它随着计数器的输入脉冲进行自加1,也就是每来一个脉冲,计数器就自
动加1,,当加到计数器为全1时,再输入一个脉冲就使计数器回零,且计数器的溢出使相应的中断标志位置1,向CPU
发出中断请求(定时/计数器中断允许时)。如果定时/计数器工作于定时模式,则表示定时时间已到;如果工作于
计数模式,则表示计数值已满。
    可见,由溢出时计数器的值减去计数初值才是加1计数器的计数值。(important)


文中的 T0 和 T1 是指 T0计时器 和 T1计时器。

51单片机定时器结构
    定时/计数器的实质是加1计数器(16位),由高8位和低8位两个寄存器THx和TLx组成。TMOD是定时/计数器的
工作方式寄存器,确定工作方式和功能;TCON是控制寄存器,控制T0、T1的启动和停止及设置溢出标志。


定时/计数器的控制
51单片机定时/计数器的工作由两个特殊功能寄存器控制。TMOD用于设置其工作方式;TCON用于控制其启动和中
断申请。
   
1、工作方式寄存器TMOD
   工作方式寄存器TMOD用于设置定时/计数器的工作方式,低四位用于T0,高四位用于T1。其格式如下:
   
7 6 5 4 3 2 1 0
字节地址:89H   GATE C/(/T)  M1 M0  GATE   C/(/T)  M1  M0 TMOD


GATE是门控位, 用于控制定时器的启动是否受外部中断源信号的影响。GATE=0时,只要用软件使TCON中的TR0或TR1
为1,就可以启动定时/计数器工作;GATA=1时,要用软件使TR0或TR1为1,同时外部中断引脚INT0/1也为高电平时,
才能启动定时/计数器工作。即此时定时器的启动条件,加上了INT0/1引脚为高电平这一条件。一般我们使用的是
GATE = 0这种。
C/(/T) :定时/计数模式选择位。C/(/T) = 0 为定时模式;C/(/T) = 1 为计数模式。
M1M0:工作方式设置位。定时/计数器有四种工作方式。
M1M0     工作方式           说明
00 方式0 13位定时/计数器
01          方式1 16位定时/计数器
10 方式2 8位自动重装定时/计数器
11          方式3    T0分成两个独立8位定时/计数器; T1停止计数
这里主要需要掌握的是方式1和方式2.
2、控制寄存器TCON
      TCON的低4位用于控制外部中断,已在前面介绍。TCON的高4位用于控制定时/计数器的启动和中断申请。
其格式如下:


7 6 5 4 3 2 1 0
字节地址:88H   TF1    TR1  TF0  TR0 TCON


TF1(TCON.7):T1溢出中断请求标志位。T1计数溢出时由硬件自动置TF1为1。CPU响应中断后TF1由硬件自动清0。
T1工作时,CPU可随时查询TF1的状态。所以,TF1可用作查询测试的标志。TF1也可以用软件置1或清0,同硬件置1或
清0的效果一样。
TR1(TCON.6):T1运行控制位。TR1置1时,T1开始工作;TR1置0时,T1停止工作。TR1由软件置1或清0。所以,用
软件可控制定时/计数器的启动与停止。
TF0(TCON.5):T0溢出中断请求标志位,其功能与TF1类同。
TR0(TCON.4):T0运行控制位,其功能与TR1类同。


定时/计数器的工作方式:
1、方式0
   方式0为13位计数,由TL0的低5位(高3位未用)和TH0的8位组成。TL0的低5位溢出时向TH0进位,TH0溢出时,
置位TCON中的TF0标志,向CPU发出中断请求。如果是T1计数器也是如此。
        定时器模式时有:N=t/ Tcy 
计数初值计算的公式为:X=2^13-N。
定时器的初值还可以采用计数个数直接取补法获得。
计数模式时,计数脉冲是T0引脚上的外部脉冲。


    门控位GATE具有特殊的作用。
当GATE=0时,经反相后使或门输出为1,此时仅由TR0控制与门的开启,与门输出1时,控制开关接通,计数开始;
当GATE=1时,由外中断引脚信号控制或门的输出,此时控制与门的开启由外中断引脚信号和TR0共同控制。当TR0=1时,
外中断引脚信号引脚的高电平启动计数,外中断引脚信号引脚的低电平停止计数。具体的图请参见powerpoint。
这种方式常用来测量外中断引脚上正脉冲的宽度。


2、方式1 
    方式1的计数位数是16位,由TL0作为低8位,TH0作为高8位,组成了16位加1计数器。
计数个数与计数初值的关系为:X=2^16-N


3、方式2 
    方式2为自动重装初值的8位计数方式。 
计数个数与计数初值的关系为:X=2^8-N 
工作方式2特别适合于用作较精确的脉冲信号发生器。


4、方式3 
    方式3只适用于定时/计数器T0,定时器T1处于方式3时相当于TR1=0,停止计数。 
工作方式3将T0分成为两个独立的8位计数器TL0和TH0 。


使用定时器,该做哪些工作:
初始化程序应完成如下工作:
1, 对TMOD赋值,以确定T0和T1的工作方式。
2, 计算初值,并将其写入TH0、TL0或TH1、TL1。
3, 中断方式时,则对EA赋值,开放定时器中断。
4, 使TR0或TR1置位,启动定时/计数器定时或计数。


计数器初值的计算
机器周期也就是CPU完成一个基本操作所需要的时间。
机器周期=1/单片机的时钟频率。
51单片机内部时钟频率是外部时钟的12分频。也就是说当外部晶振的频率输入到单片机里面的时候要进行12分频。
比如说你用的是12MHZ的晶振,那么单片机内部的时钟频率就是12/12MHZ,当你使用12MHZ的外部晶振的时候。
机器周期=1/1M=1us。
而我们定时1ms的初值是多少呢,1ms/1us=1000。也就是要计数1000个数,初值=65535-1000+1
(因为实际上计数器计数到65536才溢出)=64536=FC18H




/**************************************************************************************
***************************************************************************************/


总结:定时/计数器是由两个寄存器组成, TMOD用于设置其工作方式;TCON用于控制其启动和中
断申请。


TMOD的GATE一般设置为0; C/(/T) 为选择是计数器( = 1)还是计时器( = 0); M0M1设置工作方式:一般为方式1或者
方式2.


TCON的TFx为中断请求, 如果中断都设置好了, 那么就会进入中断。 TRx为开启还是关闭哪一个(T0 or T1)。
对于TCON来说, 低四位为控制外部中断。 高四位为控制定时/计数器的中断。

# include <reg52.h>

typedef unsigned int u16;
typedef unsigned char u8;

sbit led = P2^0;

// 设置初值为 1 ms = 1000us
void Timer0Init()
{
	TMOD |= 0x01;  // 设置为方式1;
	TH0 = 0xfc;	  // 计算初值; 公式为:65535 - 初值 + 1
	TH1 = 0x18;
	EA = 1;
	ET0 = 1;
	TR0 = 1;
}

int main (void)
{
	
	Timer0Init();
	while (1);
	return 0;
}

void Timer0() interrupt 1
{
	static u16 i;
	// 由于超过65535之后, 又会跳到0, 所以要赋初值。
	TH0 = 0xfc;
	TH1 = 0x18;
	i++;
	if (1000 == i) // 1000ms等于 1 s 。
	{
		i = 0;
		led = ~led;
	}
}
// 因为定时器的功能都满足, 所以当中断服务函数执行完毕之后又会跳到Timer0Init()函数
// 然后又会执行中断服务函数, 这样循环。


spi通信协议

阅读数 117

定时器与计数器

阅读数 171

没有更多推荐了,返回首页