上升沿触发器原理及逻辑图

电子常识

2582人已加入

描述

计数器应用包括通话、短信、数据等类别的记录,并支持用户自主选择清零日期,以及按照类别添加提醒数值,如用户可以选择每月任一一天,或者第一天、最后一天作为记录循环清零日,同时添加通话时长、短信条数、数据流量数量的提醒节点。计数器的应用极为广泛,不仅能用于计数,还可用于分频、定时,以及组成各种检测电路和控制电路。为了使用方便,在有些单片集成计数器上还附加了异步置零、预置数、保持等功能,并设置了相应的控制端。

在数字电子技术中应用的最多的时序逻辑电路。计数器不仅能用于对时钟脉冲计数,还可以用于分频、定时、产生节拍脉冲和脉冲序列以及进行数字运算等。但是并无法显示计算结果,一般都是要通过外接LCD或LED屏才能显示。

计数初值

定时器的初值的计算如下:在定时器模式下,计数器的计数脉冲来自于晶振脉冲的12分频信号,即对机器周期进行计数。若选择12M晶振,则定时器的计数频率为1MHZ。假设定时时间为T,机器周期为T1,即12/晶振频率。X为定时器初值。则 X=2^n-T/T1。方式0,n=13,方式1时,n=16,方式2和方式3,n=8

本题技术初值计算如下:

X=2^16-100*10^(-3)/(12/6*10^6)

=65536-50000=15536=3CB0H

123 MOV TMOD,#01H;控制字

MOV TH0,#3CH;初值高位

MOV TL0,#0B0H;初值低位

计数器的初始化与计数初值的计算

一。 定时/计数器的初始化

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

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

2)。 计算初值, 并将其写入 TH0, TL0 或者 TH1, TL1.

3)。 使用中断方式时, 则对IE赋值, 开放中断。

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

二。 初值的计算

假设定时器工作在方式1, 则位数是16位。 定时器一旦启动, 便在原来的数值上开始加1计数。 如果程序开始时, 我们没有设置TH.x和TL.x, 则它们的默认值为0. 假设时钟频率为12MHz, 12个时钟周期为一个机器周期, 那么此时机器周期就是1us, 计满TH.x 和TL.x 就需要: 计数最大值-1; 再来一个脉冲, 计数器就会溢出, 随即向CPU申请中断。 因此溢出共需要65536us, 约等于65.5ms.

例如要定时50ms, 那么就要先给TH.x和TL.x装初值。 TH.x和TL.x 中应该装入的总数是65536 - 50000 = 15536; TH.x = 15536 / 256 = 60; TL.x = 15536 % 256 = 176; 在这个初值的基础上级50000个数后就溢出, 此时刚好就是50ms中断一次。

例如要定时1s, 但是定时/计数器的最大定时时长为65536us, 不够。 那么我们可以设定定时50ms, 重复20次, 就刚好是1s了。(20次50ms就刚好是1s)。

三。 例子代码

[cpp] view plain copy// P1口大约1s置反一次

#include《reg52.h》 // 包含特殊功能寄存器的定义

#define LED P1 // 宏定义LED代表P1

unsigned char ucCount = 0;

// 定时器初始化子程序

void Init_Timer0(void)

{

TMOD = 0x01; // 不影响定时计数器T1

// 使用定时计数器T0(GATE 0, C/T 0, M1 0, M0 1)

// 使用模式1, 16位定时器。

TH0 = (65536 - 50000) / 256; // 计数器计数初值, 这里使用定时器最大值从0开始计数一直到65535溢出

TL0 = (65536 - 50000) % 256;

EA = 1; // 总中断打开

ET0 = 1; // 定时器中断打开

TR0 = 1; // 定时器开关打开

}

void main()

{

Init_Timer0();

P1 = 0xFF;

while(1);

}

// 中断函数

void Timer0_isr(void) interrupt 1 using 1

{

TH0 = (65536 - 50000) / 256; // 计数器计数初值, 这里使用定时器最大值从0开始计数一直到65535溢出

TL0 = (65536 - 50000) % 256;

++ucCount;

if(19 == ucCount)

{

LED = ~LED; // 指示灯反相,可以看到闪烁

ucCount = 0;

}

}

单片机计数器初值计算方法

计算:

1.晶振12M

12MHz除12为1MHz,也就是说一秒=1000000次机器周期。10ms=10000次 机器周期。 65536-10000=55536(d8f0) TH0=0xd8,TL0=0xf0

2.晶振11.0592M

11.0592MHz除12为921600Hz,就是一秒921600次机器周期,10ms=9216次机器周期。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分