51单片机--定时器测量脉宽

发布者:EnchantedDream最新更新时间:2018-07-14 来源: eefocus关键字:51单片机  定时器  测量脉宽 手机看文章 扫描二维码
随时随地手机看文章

阅读数:476

学51也算有一段时间了 以前学的相当的粗糙 很多原理性的东西 都不知道 今天上课的时候听老师说  这个LOW的单片机可以测量脉宽   去手册上看了一下 加上课本上说的  卧槽 真的可以 哈哈  

直接上手册上的来说吧  

就是这个东西  TMOD寄存器中的那个GATE位  很明显 手册中说道  当这位置1的时候 只有在INT0(P3.2)引脚为高电平的时候  并且TR0或者TR1置位的时候 定时/计数器才打开  我们就可以利用这个特点来测量一个脉冲的高电平的宽度  就是这个高电平的持续时间  那么怎么测量呢  说一下思路  

首先  我们让门控位GATE=1   并且启动定时/计数器 TR0  但是这时候寄存器TH0  TL0里面的数值并不会增加  因为INT0这个引脚上还没高电平  我们把要测量的脉冲接到P3.2这个引脚上   当高电平来的时候   TH0和TL0里面的数值就开始每过一个机器周期增加一   知道P3.2引脚上的高电平消失   当高电平消失的时候 自然 TH0和TL0也就停止计数了  这时候我们把TH0和TL0里面的数值读出来   根据时钟和机器周期的关系就可以的出来高电平的时间了  这里 简单算一下 吧   好算一点  假设晶振频率是12MHZ那么机器周期就是1US   如果读出来 TH0+TL0=50000    那么这个高电平的持续时间就是50mS  能明白不 !!!

我用仿真做了一下  得出的结果基本正确   这里说一下仿真的问题   就是 仿真里面好像默认的51的晶振频率是12MHZ   即使你搭建外部晶振电路也不能改变改变频率 还要复位貌似也不太好用  哎呀 算了 这个不太影响

直接上代码 上图  看一下 下面的代码  我仿真里面设置的脉冲频率是1KHZ 占空比是50%    由这个代码得到的高电平的时间 理论值是500us   测得位501us 我觉得基本正确


# include

# define uint unsigned int 

# define uchar unsigned char

uchar code table1[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; 

uint High,Low;

sbit K=P3^2;

sbit led0=P2^0;  

sbit led1=P2^1;  

sbit led2=P2^2;  

sbit led3=P2^3;

void delay(uint k)   //延时函数    这个延时是为了数码管  

{  

    uint i,j;  

    for(i=k;i>0;i--)  

        for(j=113;j>0;j--) ;  

}

void Init_T0()

{

TMOD=0x09;

TH0=0;

TL0=0;

}

void Display(disnum)  

{  

    led0=1;  

    P0=table1[disnum/1000];  

    delay(3);  

    P0=0xff;  

    led0=0;   

  

    led1=1;  

    P0=table1[disnum%1000/100];  

    delay(3);  

    P0=0xff;  

    led1=0;  

  

    led2=1;  

    P0=table1[disnum%100/10];  

    delay(3);  

    P0=0xff;  

    led2=0;  

  

    led3=1;  

    P0=table1[disnum%10];  

    delay(3);  

    P0=0xff;  

    led3=0;  

  

}

void Message_Width()

{

while(K);

TR0=1;

while(!K);

while(K);

TR0=0;

High=TH0;

Low=TL0;

}

void main()

{

while(1)

{

  Init_T0();

  Message_Width();

  Display(High*256+TL0);

}

}

此代码得到下图 


但是无意间让我发现了一个很无奈的问题  我觉得上面的数码管写的太小学生了 于是想让程序少几行 把数码管的函数变更了一下  但是测得脉宽长度居然不一样了 多了8个us即使两个函数执行时间不一样  可是我实在数码管显示函数之前就把脉宽测量完成了 啊  为啥会多这个8us呢   有哪位大佬看到希望指点一下 啊 下面附上代码和图


# include

# define uint unsigned int 

# define uchar unsigned char

uchar code table1[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; 

uchar code table2[]={0x01,0x02,0x04,0x08};

uchar table3[4]={0};

uint High,Low,n;

sbit K=P3^2;

void delay(uint k)   //延时函数    这个延时是为了数码管  

{  

    uint i,j;  

    for(i=k;i>0;i--)  

        for(j=113;j>0;j--) ;  

}

void  Data_Process(disnum)

{

table3[0]= disnum/1000;

table3[1]= disnum%1000/100;

table3[2]= disnum%100/10;

table3[3]= disnum%1000;

}

void Display()  

{  

uchar i;

for(i=0;i<4;i++)

{

P2=table2[i];

P0=table1[table3[i]];

delay(3);

P0=0xff;

P2=0; 

}

void Init_T0()

{

TMOD=0x09;

TH0=0;

TL0=0;

}

void Message_Width()

{

while(K);

TR0=1;

while(!K);

while(K);

TR0=0;

High=TH0;

Low=TL0;

}

void main()

{

while(1)

{

Init_T0();

Message_Width();

Data_Process(High*256+TL0);

Display();

}

}




关键字:51单片机  定时器  测量脉宽 引用地址:51单片机--定时器测量脉宽

上一篇:51单片机的代码存储问题
下一篇:51单片机的各种周期

推荐阅读最新更新时间:2024-03-16 16:08

51单片机的延时计算
前言 我使用51,STC这一类的单片机做控制好几年,一直是使用现成的程序,在其上修修改改,以达到需求动作目的即可。从来都是不求甚解。想法既是如此,会用即可,了解那么多做什么。 此次又在做一项目,里面用到I2C通讯。本来是直接复制粘贴了事,却没想对里面的一个小小的延时函数起了兴趣,由于本人是基础功底只有5战斗力的渣渣,写写画画了一天才搞了个大体明白。 以前总是在看其他博主的文章,默默潜水。然而此次,突然就忍不住想写篇文章发表一下费尽心思的微不足道的心得体会。 正文 void Delay10us() //@12.000MHz { unsigned char i; _nop_(); _nop_(); i = 27
[单片机]
<font color='red'>51单片机</font>的延时计算
C51单片机串口通讯的硬件电路图
51单片机有一个全双工的串行通讯口,所以单片机和电脑之间可以方便地进行串口通讯。进行串行通讯时要满足一定的条件,比如电脑的串口是RS232电平的,而单片机的串口是TTL电平的,两者之间必须有一个电平转换电路,我们采用了专用芯片MAX232进行转换,虽然也可以用几个三极管进行模拟转换,但是还是用专用芯片更简单可靠。我们采用了三线制连接串口,也就是说和电脑的9针串口只连接其中的3根线:第5脚的GND、第2脚的RXD、第3脚的TXD。这是最简单的连接方法,但是对我们来说已经足够使用了,电路如下图所示,MAX232的第10脚和单片机的11脚连接,第9脚和单片机的10脚连接,第15脚和单片机的20脚连接。 串口通讯的硬件电路如下图所示。
[单片机]
C<font color='red'>51单片机</font>串口通讯的硬件电路图
Keil C51单片机集成开发环境编程与调试教程
同 VC 之类的通用 C 语言集成开发环境(IDE)一样,Keil 也采用“工程” (Project)的方式管理源代码及相关文件,这种管理方式为由多个源代码文件组 成的大型程序开发提供了方便。不管是最简单的 C51程序,还是复杂的多文件 程序都需要以下步骤: 1)先建立新的工程文件; 2)在工程中新建源代码文件,或是将已经存在的源代码文件加入工程; 3)编译; 4)调试,修正错误再编译; 5)将生成的二进制文件*.hex 烧入单片机。 本教程重点介绍上述前 4 个步骤。 二、Keil中新建工程的步骤 1. 单击菜单“Project——New uVision Project……” 出现新建工程对话框: 在此对话框中选择存
[单片机]
Keil C<font color='red'>51单片机</font>集成开发环境编程与调试教程
基于AT89C51单片机的电池监测系统设计
1、前言 随着锂离子电池的广泛应用,其安全性问题越来越受重视。对锂离子电池的参数进行实时检测可以有效避免电池的不安全使用,并且可以尽量发挥电池的性能。有些应用领域由于条件限制,难于铺设线路,需要对电池进行远距离的监测,比如路灯蓄电池管理;或者由于大量使用,逐个连接监测线路比较麻烦如基站电源管理中电池的状态监测或者大量在通信电台集中的场合等,可通过无线网络对采集的数据进行传输管理。 该系统主要由锂离子电池组状态参数数据采集、信号无线传输、数据处理等几部分组成,系统框图如图1所示。前端由状态参数采集模块和无线发射控制模块组成,其中数据采集部分包括对锂离子电池组的电压、电流、内阻以及温度等参数进行测量,由单片机对采样数据进行初步处理
[单片机]
基于AT89C<font color='red'>51单片机</font>的电池监测系统设计
51单片机】普通I/O口模拟SPI口C语言程序
89C51系列单片机都不带SPI口,所在在这种情况下,我们可以模拟SPI口来现实我们要的功能,程序如下: //-----------------------函数声明,变量定义------------ #include #include sbit SCK=P1^0; // 将p1.0口模拟时钟输出 sbit MOSI=P1^1; // 将p1.1口模拟主机输出 sbit MISO=P1^2; // 将p1.1口模拟主机输入 sbit SS1=P1^3; // 将p1.1口模拟片选 #define delayNOP(); {_nop_();_nop_();_nop_();_nop_();}; //-------------------
[单片机]
STM8单片机定时器驱动的深度解析
上一节给大家介绍了基于标准库STM8单片机GPIO的驱动,本节课主要给大家介绍一下STM8定时器的驱动。 我们先打开STM8L10x单片机的规格书,简单的了解一下STM8L10X单片机的定时器功能。 如果所示,STM8L10x单片机共有3个定时器,分别是TIM2、TIM3、TIM4. 其中TIM2和TIM3是16位的基本定时器,TIM4是8位定时器。 因TIM2和TIM3是16位,所以定时时间更长,功能更加强大,所以我们今天主要给大家介绍一下TIM2和TIM3; 我们以TIM2为例给大家介绍一下定时器功能。 STM8打开标准库文件夹,打开定时器例程 如上图所示,是标准库中定时器2的例程。 我们打开TIM2文件夹
[单片机]
STM8单片机<font color='red'>定时器</font>驱动的深度解析
51单片机利用锁存器控制数码管显示年月日时分秒
数码管模块中的两片74hc573,一片锁存段码,一片锁存位码,这样才能驱动8位数码管。74hc573是锁存器,用于数码管显示时通常是采用段选、片选共用同一组并口的驱动方式。 驱动数码管需要两个信号,一个是段选信号,另一个是片选信号。段选信号是固定的8个(对于普通7段数码管),而片选信号数量是与数码管位数相同的。 对于8位数码管的动态扫描来说,片选信号要8根线,这样仅仅驱动数码管就占用了16个IO口,非常浪费。 原理 使用573锁存器后,只占用10个IO口,其中2个用于控制锁存器使能,另外8个用于输出信号。先关闭控制片选信号的573芯片的锁存功能,然后单片机输出片选信号。随后再开启锁存,此时无论573的输入端如何变化,输
[单片机]
<font color='red'>51单片机</font>利用锁存器控制数码管显示年月日时分秒
基于80C51单片机的多功能肌电测量仪设计
肌电测量或肌电图是检查人体神经、肌肉系统功能的重要方法,广泛应用于神经科、骨科、耳鼻喉科及口腔科。它可为临床诊断、治疗神经肌肉系统疾患提供客观的科学依据。肌电测量仪一般只具有在示波器上显示波形和记录波形的功能。早期,肌电信号通过照相对胶片进行显影才能看到;后来,把肌电信号描绘在肌电图纸上。这两种肌电信号记录法的机构都很复杂。这里介绍一种利用普通的示波器,通过单片机和A/D、D/A转换控制系统构成的,具有记忆、波形分析(诊断)功能和各种操作的实时处理的低功耗智能肌电测量仪。该肌电测量仪可实现一次采集后,多次重复显示、打印,实现了肌电信号测量仪的智能化 1 多功能肌电测量仪的硬件设计 1.1 系统硬件结构框图 系统硬件结构框图如图
[单片机]
基于80C<font color='red'>51单片机</font>的多功能肌电<font color='red'>测量</font>仪设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved