历史上的今天
返回首页

历史上的今天

今天是:2025年05月18日(星期日)

正在发生

2020年05月18日 | 51 单片机 时间/计数器中断

2020-05-18 来源:eefocus

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;

}

}

推荐阅读

史海拾趣

Hewlett Packard Co公司的发展小趣事
晶体管在工作时会产生一定的热量,需要采取适当的散热措施以防止过热损坏。
Advanced Microelectronic Products Inc公司的发展小趣事

在电子行业竞争日益激烈的背景下,AMP公司面临着来自同行的巨大压力。为了应对这一挑战,公司进行了战略调整,将重心转向高端电子产品的研发和生产。通过不断提升产品性能和品质,AMP公司成功打造了多个高端品牌,并在细分市场中取得了显著优势。此外,公司还积极拓展新的应用领域,为未来发展奠定了坚实基础。

Elec & Eltek公司的发展小趣事

Eltek公司是一家专注于电力电子技术的公司,成立于20世纪中期。创始人王刚(化名)意识到电力电子技术对于提高能源利用效率的重要性,于是决定投身这一领域。在他的带领下,Eltek公司不断研发出高效、可靠的电力电子产品,如变频器、逆变器等。随着可再生能源技术的兴起,Eltek公司抓住机遇,将电力电子技术应用于可再生能源领域,如太阳能、风能等。这一创新举措让Eltek公司在可再生能源领域取得了显著的成绩。

對餘科技(DIOFIT)公司的发展小趣事

在市场竞争日益激烈的情况下,DIOFIT公司凭借敏锐的市场洞察力和灵活的营销策略,不断拓展市场份额。他们针对不同地区、不同行业的需求,制定个性化的产品推广方案,通过线上线下相结合的方式,加强品牌推广和渠道建设。同时,DIOFIT公司还积极参与各类展会和论坛,与业界同仁交流合作,拓展国际视野,为公司的发展注入新的活力。

台湾君耀(Brightking)公司的发展小趣事

为了进一步提升竞争力,君耀开始实施国际化战略。公司在日本、中国大陆等地设立生产基地,利用当地的资源和优势,提高生产效率,降低成本。同时,君耀积极参与国际认证,其产品通过UL、VDE、TUV、CSA等一系列国际认证,为进军国际市场打下了坚实的基础。

Fukushima Futaba Electric Co Ltd公司的发展小趣事

Fukushima Futaba Electric Co., Ltd.(以下简称“Futaba Electric”)的创立可以追溯到1948年,由熊本县出身的卫藤五郎和北海道出身的细矢礼二在千叶县共同创立。公司名“Futaba”取自两人故乡的首字,寓意着双叶的结合与协作。初期,Futaba Electric专注于电气设备的制造与研发,凭借创始人的远见卓识和不懈努力,逐渐在电子行业崭露头角。这一时期,公司主要生产基础的电气元件,如电阻器、电容器等,为后续的发展奠定了坚实的基础。

问答坊 | AI 解惑

VISHAY汽车TVS选型指导

VISHAY汽车TVS选型指导 [ 本帖最后由 westpac 于 2008-7-27 09:56 编辑 ]…

查看全部问答>

PCB教程类大整理(不断更新中)

1、 PADS Power-PCB中文教程!这是一本难得的中文教程,详细介绍了该软件的使用方法和过程,是学习Power-PCB软件的好教材 https://bbs.eeworld.com.cn/viewthread.php?tid=68638&extra=page%3D1%26amp%3Bfilter%3Dtype%26amp%3Btypeid%3D9 2、 P ...…

查看全部问答>

cadence又出16.01版本了

cadence又出16.01版本了 各位大虾可以看看 真快…

查看全部问答>

大虾在哪?

最近在学计算机结构与组成这门课,感觉好难,有很多地方都不懂,就是什么零扩展,符号扩展,还有从虚拟内存到物理内存的映射,页组织和分页,学起来感觉摸不着头脑,哪位有这方面的书籍推荐一下啊,最好配有清晰透彻的图解,谢谢啊,感激涕零!…

查看全部问答>

evc 下怎么处理鼠标右键的消息?

在evc下的cview的类下是不是没有RButton 这个句柄? 想问那怎么在程序里处理鼠标右键的消息呢?…

查看全部问答>

如何实现两机的无线互连?

有两台计算机,相距200多米远,如何用无线网卡实现两机的网络互连?不要无线路由和无线接入能行吗?…

查看全部问答>

求助:在Marvell PXA310下进行内核调试,内核启动后,串口没有启动信息输出。提示:串口无法注册。附上:DEBUG调试信息

最近在做Android的移植,将Marvell提供的linux kernel打补丁和编译,生成内核zImage文件,通过blob的tftp下载到pxa310的平台上。 代码跟踪方式是通过BDI2000对kernel启动过程进行跟踪。 对打开MMU功能前,代码跟踪;以及进行了,打开MMU功能后, ...…

查看全部问答>

evc下调色板疑问

RealizePalette后返回的值为0,入口数可能为0吗…

查看全部问答>

usart1问题

哪位大侠能给我一个USART1用作异步通信UART的例程,我调试了蛮久,还是有错。 我的程序是:谁能帮我找找哪里有问题!或直接给我一个例程吧,太感谢了~~     USART_DeInit(USART1);   //USART_InitStruct init  & ...…

查看全部问答>

新做的STM32开发板,将陆续开源开发例程。

这一年来迷上了STM32,新的手持GPS方案也要采用STM32平台, 本来想买个开发板玩玩, 看了好多, 觉的缺这少那的, 于是自己琢磨了一个方案, 其实也是采纳了别的板子的优点,正在做例程。 硬件资源:          ...…

查看全部问答>