新闻中心

EEPW首页>嵌入式系统>设计应用> 51单片机——定时/计数器

51单片机——定时/计数器

作者: 时间:2016-11-26 来源:网络 收藏

一.定时器操作步骤

定时器操作步骤

二.工作方式控制寄存器TMOD

工作方式控制寄存器TMOD

TMOD的低半字节(D0,D1,D2,D3)用来控制定时器/计数器0

本文引用地址://m.amcfsurvey.com/article/201611/321840.htm

TMOD的高半字节(D4,D5,D6,D7)用来控制定时器/计数器1

对TMOD中的内容说明:

GATE——门控制 

GATE=1时,由外部中断引脚INT0、INT1来启动定时器T0、T1。   

当INT0引脚为高电平时TR0置位,启动定时器T0;   

当INT1引脚为高电平时TR1置位,启动定时器T1。   

GATE=0时,仅由TR0,TR1置位分别启动定时器T0、T1。

C/T——功能选择位   

C/T=0时为定时功能,

C/T=1时为计数功能。     

M0、M1——方式选择功能   

由于有2位,因此有4种工作方式:

定时/计数器工作方式

三.根据单片机晶振,所选TMOD的的工作方式,所要定的时间,来确定THO和TLO所要赋予的初值:

(以12M晶振,工作方式1即16位计数器为例,设所定时间为Xus(16为计数器最大数65536,即65536us,若所定时间大于65535,则要用if语句控制,现假设X<65535))

1.时钟周期的时间t=1/12M=1/12 us

2.机器周期的时间T=12*1/12=1 us

3.因为每经过一个机器周期计数器+1,所以,计数器+1,经过的时间为 1 us。

若所定时间为X,则要求经过Xus,中断响应,又因为16位计数器要全部置1(即达到65535)+1后,中断才会响应,所以,初值=(65536-X)

4.将初值转化为16进制码,分别付给TH0和TL0

eg:所定时间5ms

初值=(65536-5000)=60536=EC78

TH0=0xEC;TL0=0x78;

(当工作方式不同时,TH0/TL0的赋值也不同,个人觉得有了16位计数器了,其余的没什么用,不介绍了)

5.写程序时另一种THO/TLO赋值方法

TH0=(65536-20000)/256;

TL0=(65536-20000)%6;

这样设置,每经过20ms,发生一次中断,中断时间一般以秒为单位,所以经过n次中断即可。

四.中断开启

注:在用到中断时,必须要开总中断EA,即EA=1。 //开总中断

1.中断允许控制寄存器IE

中断允许寄存器

EX0(EX1):外部中断允许控制位

EX0=1 外部中断0开关闭合 //开外部中断0

EX0=0 外部中断0开关断开

ET0(ET1):定时中断允许控制位

ET0=1定时器中断0开关闭合 //开内部中断0

ET0=0 定时器中断0开关断开

ES: 串口中断允许控制位

ES=1 串口中断开关闭合 //开串口中断

ES=0 串口中断开关断开

2.定时器控制寄存器 TCON //控制外部中断和定时器中断

定时器/计数器控制寄存器

外部中断:

IE0(IE1):外部中断请求标志位

当INT0(INT1)引脚出现有效的请求信号,此位由单片机自动置1,cpu开始响应,处理终端,而当入中断程序后由单片机自动置0.

//外部中断,即外部中断相应的引脚接入低电平或下降沿信号时,中断开始响应。

IT0(IT1):外部中断触发方式控制位 //选择有效信号

IT0(IT1)=1:脉冲触发方式,下降沿有效。

IT0(IT1)=0:电平触发方式,低电平有效。

内部中断:

TF0(TF1):内部定时器/计数器溢出中断标志位

当定时器、计数器计数溢出的时候,此位由单片机自动置1,cup开始响应,处理中断,而当进入中断程序后由单片机自动置0.

//内部中断实际上就是利用内部的计数器,只不过提供计数的脉冲来自单片机自身。

TR0(TR1):定时器/计数器启动位 //启动定时器

TR0(TR1)=1;启动定时器/计数器0

TR0(TR1)=0; 关闭定时器/计数器0



评论


技术专区

关闭