博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
51 单片机 时间/计数器中断
阅读量:4221 次
发布时间:2019-05-26

本文共 3059 字,大约阅读时间需要 10 分钟。

CPU时序的有关知识

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

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

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

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

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

 

振荡周期=1/12us;

状态周期=1/6us;

机器周期=1us; 

指令周期=1~4us;

 

定时/计数器的工作原理

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

    可见,由溢出时计数器的值减去计数初值加1才是计数器的计数值。

51单片机定时器结构

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

的启

定时/计数器的控制

  51单片机定时/计数器的工作由两个特殊功能寄存器控制。TMOD用于设置其工作方式;TCON用于控制其启动和中断申请。

    1、工作方式寄存器TMOD

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

GATE是门控位, GATE=0时,用于控制定时器的启动是否受外部中断源信号的影响。只要用软件使TCON中的TR0或TR1为1,就可以启动定时/计数器工作;GATA=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类同。

定时/计数器的工作方式

1、方式0

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

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

计数初值计算的公式为:X=213-N。

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

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

 

       门控位GATE具有特殊的作用。当GATE=0时,经反相

后使或门输出为1,此时仅由TR0控制与门的开启,与门输出

1时,控制开关接通,计数开始;当GATE=1时,由外中断引

脚信号控制或门的输出,此时控制与门的开启由外中断引脚

信号和TR0共同控制。当TR0=1时,外中断引脚信号引脚的

高电平启动计数,外中断引脚信号引脚的低电平停止计数。

这种方式常用来测量外中断引脚上正脉冲的宽度。 

定时/计数器的工作方式

2、方式1

      方式1的计数位数是16位,由TL0作为低8位,TH0

作为高8位,组成了16位加1计数器 。

 

计数个数与计数初值的关系为:X=216-N

 

定时/计数器的工作方式

3、方式2

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

计数个数与计数初值的关系为:X=28-N

工作方式2特别适合于用作较精确的脉冲信号发生

4、方式3

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

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

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

初始化程序应完成如下工作:

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

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

中断方式时,则对EA赋值,开放定时器中断。

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

 

计数器初值的计算

机器周期也就是CPU完成一个基本操作所需要的时间。

机器周期=1/单片机的时钟频率。

51单片机内部时钟频率是外部时钟的12分频。也就是说当外部晶振的频率输入到单片机里面的时候要进行12分频。比如说你用的是12MHZ的晶振,那么单片机内部的时钟频率就是12/12MHZ,当你使用12MHZ的外部晶振的时候。机器周期=1/1M=1us。

而我们定时1ms的初值是多少呢,1ms/1us=1000。也就是要计数1000个数,初值=65535-1000+1(因为实际上计数器计数到66636才溢出)

 

 

实验现象,D2间隔1s亮一次。

 

 

通过调用计时中断,每1ms中向CPU申请中断,i加1,累计增加1000,1s,led状态反转。

#include "reg52.h"			 //此文件中定义了单片机的一些特殊功能寄存器typedef unsigned int u16;	  //对数据类型进行声明定义typedef unsigned char u8;sbit led=P2^0;void Timer0Init(){	//TMOD 高四位T1,低四位T0 0000 0001  0X01	TMOD |= 0x01;	//初值=65535-1000+1= 64536 =FC18H  定时1ms	TH0=0XFC;	TL0=0X18;	ET0=1;		//打开T0计时器中断	EA=1;	  	// 总中断	TR0=1;			}void Timer1Init(){	//TMOD 高四位T1,低四位T0 0000 0001  0X01	TMOD |= 0x10;	//初值=65535-1000+1= 64536 =FC18H  定时1ms	TH0=0XFC;	TL0=0X18;	ET1=1;		//打开T1计时器中断	EA=1;	  	// 总中断	TR1=1;			}void mian(){		Timer1Init();		while(1);	}void Time0() interrupt 1{	static u16 i ;	TH1=0XFC;	TL1=0X18;	i++;	if(i==1000)//1s	{		i = 0;		led=~led;	}}void Time1() interrupt 3{	static u16 i ;	TH1=0XFC;	TL1=0X18;	i++;	if(i==1000)//1s	{		i = 0;		led=~led;	}}

 

 

 

转载地址:http://pzgmi.baihongyu.com/

你可能感兴趣的文章
谷歌“夜莺计划”曝光:秘密采集数百万医疗隐私数据!医生患者毫不知情
查看>>
2019前沿信息科技创新论坛成功举办
查看>>
清北顶会学霸:“表情”与“认知”引发的科学思辨 | 清华AI Time PHD
查看>>
GitHub超3k星!从Python代码到APP只需要一个小工具~
查看>>
独家 | 使用高斯混合模型,让聚类更好更精确(附数据&代码&学习资源)
查看>>
研究学者、医师与产业投资者齐聚一堂,将碰撞出何种火花?
查看>>
报名丨西山金融科技产业创新论坛邀您参会
查看>>
知识图谱从哪里来:实体关系抽取的现状与未来
查看>>
数据蒋堂 | 大清单报表的打印?
查看>>
近期活动盘点:高级机器学习训练营、基于神经网络的代码自动生成” “开放学术图谱”、西山金融科技产业创新论坛...
查看>>
独家 | 一文盘点AutoML 库(附PPT等链接)
查看>>
独家|图说Pandas中旋转和重塑函数
查看>>
独家 | 一文读懂概率论学习:贝叶斯理论(附链接)
查看>>
报名 | 统计学概论和医疗临床大数据分析讲座
查看>>
102页PPT,DeepMind强化学习最新进展,含图文、公式和代码
查看>>
清华自然语言处理科学家孙茂松:深度学习碰壁之后,我们还能做什么?
查看>>
独家 | 19年NAACL纪实:自然语言处理的实用性见解
查看>>
独家 | 数据科学家应该避免的5种统计陷阱(附链接)
查看>>
干货 | 22道机器学习常见面试题目
查看>>
干货 | 统计学概论和医疗临床大数据分析(附PPT下载)
查看>>