51单片机一种精确的判断脉冲宽度的方法

发布者:光明2599最新更新时间:2019-05-27 来源: eefocus关键字:51单片机  判断  脉冲宽度 手机看文章 扫描二维码
随时随地手机看文章

学到了一种很精确测量脉冲宽度的方法。

具体思想是:

这里写图片描述

利用定时器的内部资源(当GATE = 1时,计数器的停止和开始受TR和INT的电平共同控制),我们这里用定时器0 ,将外部脉冲接在INT0上,配置定时器0和外部中断0。当脉冲是高电平时,计数器(TH0,TL0)计数,当计数器溢出时,触发定时器中断。当脉冲为下降沿时,触发外部中断,此时停止计数,所记下的时间也就是脉冲的宽度。


代码如下:


#include

#include


#define uint unsigned int

#define uLint unsigned long int //长整型


uLint pulse_w = 0 ;//计算脉冲的时间,用长整型可以达到10的9次方us,如果用uint,最大只能达到65535us(还不到100ms)

sbit in = P3^2 ;


void Int0 (void) interrupt 0

{

    pulse_w += TL0 ;

TL0 = 0 ;

}


void Time0(void) interrupt 1

{

pulse_w += 256 ;//计数寄存器溢出,直接加最大值

}


int main()

{

//初始化

TMOD = 0xA ; //定时器0,模式2,GATE0 = 1

TH0 = 0 ;    //填初值

TL0 = 0 ;

TR0 = 0 ;     

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

IT0 = 1 ;//外部中断0下降沿触发中断

EX0 = 1 ;//开外部中断0

EA = 1 ;//开总中断

while(1)

{

if(in == 0)//见下面的解释

TR0 = 1 ;


}

}


信号函数:



signal void test(double cc) 

{

port3 &= ~(0x1<<2)  ;

swatch(1) ;

port3 |= (0x1<<2) ;

swatch(cc) ;

port3 &= ~(0x1<<2) ;

swatch(0.1) ;


_break_ = 1 ;

  

}


输入波形(脉冲高电平1s)


这里写图片描述

查看变量的值(0xF4240 = 1000000)

这里写图片描述


注释1:由于单片机复位后所有port都为高电平,所以如果不做一些措施的话,单片机一复位,计数器就会计数,造成测量误差。我的做法是:开始设TR0= 0,这样port3.2就无法开启计数器。当外部脉冲低电平时,我才让TR0 = 1,这时port3.2才能开启计数器,达到精准计时的要求


注释2:单片机的晶振为12M,所以时钟周期为1us


注释3:计算十六进制的数可以使用win7内部的计算器:使用很简单,自己点一点就会了

这里写图片描述

关键字:51单片机  判断  脉冲宽度 引用地址:51单片机一种精确的判断脉冲宽度的方法

上一篇:51单片机测量脉冲周期
下一篇:51模拟SPI

推荐阅读最新更新时间:2024-11-13 16:15

STC C51单片机EEPROM
1. STC系列单片机中都内置了EEPROM单元,而且EEPROM操作单元的操作方式是类似于NOR FLASH操作方式,以Secter单元进行擦除和写操作,同时,在重新写Flash数据的时候,内部EEPROM的数据不受影响。不同于AVR单片机中的EEPROM操作。 2. AVR单片机也都内置了EEPROM单元,但是它的EEPROM单元的操作是以字节为单元来操作,读、写以字节为最小单位。同时,在重新写Flash数据的时候,内部EEPROM的数据也被擦除。 3. Silicon Labs---C8051F单片机内部没有内置的EEPROM单元。 4. ARM芯片内部也没有内置的EEPROM单元。 5.
[单片机]
基于51单片机的遥控智能小车实作心得
两年前学习51单片机时,买了51hei单片机开发板。现在正在学习基于STM32嵌入式系统的FAT32,UGUI和UCOSII操作系统。几乎很少去看51单片机开发板了。某天,宝贝突然说要我给她买一个遥控小车,说别人都有。俺查了一下网上性能好点的小车价格不菲,我突然想起自己不是还有一块闲置的51hei单片机开发板吗?何不自己动手给宝宝做一个智能小车呢?闲话少说,付诸行动吧。 经过近一个星期的行动,小车终于完成了,虽然说样子是丑了一点,但是性能不弱。主要功能:1,红外遥控器遥控,小车同步前进,小车同步后退,左转弯,右转弯,左倒车,右倒车;2,行进中自动壁障。其实功能可以随便加,只要舍得花银子。 程序是在 51hei单片机
[单片机]
74HC595控制8位数码管 51单片机
74HC595是8位串行移位寄存器,亦能串行输出控制下一级级联芯片。关于级联、595芯片具体我就不多介绍,大家自己查吧!下面直接贴代码 此程序已成功移植到STM32平台,敬请关注! // 注意 此代码没有什么技术含量,也没有按规范些,旨在说明595怎么控制,大家不要模仿。 // 此代码刷新速度有点慢,注意想办法优化,time变量用定时器中断处理,主函数不断地刷新显示函数,这样就不会有闪屏,当然在STM32平台毫无压力 #include sbit SCK = P3^2; // 数据输入时钟线,脉冲 sbit SI = P3^3; // 数据线 sbit RCK = P3^4; // 锁存 unsig
[单片机]
基于51单片机实钟、土壤湿度检测、空气温度检测程序
项目是在相应环境中检测土壤湿度,以及检测空气温度。 软件环境:Keil C51软件 硬件环境:KST 51开发( 自带 温度、显示器模块) 使用模块: 土壤湿度传感器 PCF8591 AD转换模块 DS1302时钟模块 土壤湿度传感器 1.传感器适用于土壤的湿度检测 2.比较器采用LM393芯片,工作性能稳定 3.工作电压3.3V-5V 4.模块中蓝色的电位器是用于土壤湿度的阀值调节,顺时针调节,控制的湿度会越大,逆时针越小; 5.数字量输出D0可以与单片机直接相连,通过单片机来检测高低电平,由此来检测土壤湿度; 6.小板模拟量输出AO可以和AD模块相连,通过AD转换,可以获得土壤湿度更精确的数值; PCF8591 AD转
[单片机]
51单片机学习笔记:写了个led宏,并尝试控制led灯的亮度
经常用led灯来观察现象,甚至调试代码,修改代码时用0和1很不方便,而且阅读性也不好, 故写了个宏,用起来方便些. 今天尝试控制灯的亮度. 先试试for循环控制,占空比调节... C代码 //#include my51.h #include reg52.h typedef unsigned char u8; typedef unsigned short int u16; #ifndef _51LED_ #define _51LED_ #define led P1 //P1总线连8个led灯,灯连573锁存器,P1置低电平点亮 #define LED led
[单片机]
<font color='red'>51单片机</font>学习笔记:写了个led宏,并尝试控制led灯的亮度
51单片机矩阵键盘响应程序
51单片机矩阵键盘响应程序 #include reg51.h // P0端口接LED // P0端口接数码管 // P3端口接矩阵键盘 #define LED P0 #define KEY P3 #define DIG P0 unsigned char GetKey(void); void delay10ms(void); // 独立数码管的段码表 unsigned char val = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8e}; void main(void) { unsig
[单片机]
<font color='red'>51单片机</font>矩阵键盘响应程序
51单片机P0口什么时候使用上拉电阻?
P0口作为I/O口输出的时候时,输出低电平为0 输出高电平为高组态(并非5V,相当于悬空状态,也就是说P0 口不能真正的输出高电平)。给所接的负载提供电流,因此必须接上拉电阻(一电阻连接到VCC),由电源通过这个上拉电阻给负载提供电流。  P0作输入时不需要上拉电阻,但要先置1。因为P0口作一般I/O口时上拉场效应管一直截止,所以如果不置1,下拉场效应管会导通,永远只能读到0。因此在输入前置1,使下拉场效应管截止,端口会处于高阻浮空状态,才可以正确读入数据。   由于P0口内部没有上拉电阻,是开漏的,不管它的驱动能力多大,相当于它是没有电源的,需要外部的电路提供,绝大多数情况下P0口是必需加上拉电阻的。 1.一般51单片机的P
[单片机]
51单片机设计的自动供水系统
  图1是水塔水位控制原理图。图中虚线表示允许水位变化的上下限。在正常情况下,应保持水位在虚线范围之内。为此,在水塔的不同高度安装固定不动的三根金属棒,以感知水位变化情况。其中A棒处于下限水位以下,C棒处于上限水位,B棒在下限水位处oA棒接+5V电源,B棒、C棒各通过一个电阻与模拟地相连。      水塔由电机带动水泵供水,单片机控制电机转动以达到对水位控制的目的。供水时,水位上升,当达到上限时,由于水的导电作用.B棒、C棒连通.+5V电源,因此,b、c两端均为高电平“1”状态。这时,应停止电机和水泵的工作,不再给水塔供水。      当水位降到下限时,B棒、C棒都不能与A棒导通,因此,b、c两端均为“0”状态。这时,应启动电机,
[单片机]
用<font color='red'>51单片机</font>设计的自动供水系统
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved