单片机测量脉宽c语言程序,利用51系列单片机定时器功能实现测量脉冲宽度
STC12C系列增强型单片机片上扩展了基本51单片机的功能,如提供了PCA/PWM接口,定时器能工作在1T模式下(基本51单片机的时钟是Fosc的12分频,1T模式下1分频)。
PCA可以用于脉宽测量,但是,protues暂不支持该系列单片机的仿真功能,反复烧写也挺麻烦,所以还是先用基本51单片机实现该功能,在后面的博文里在实现PCA测量脉宽。
实现思路如下:
TMOD最高位GATEn置位后,Tn启动计数受INTn(Pin3.3)和TRn的共同影响:TRn为1,当INTn引脚输入为高电平时,Tn才允许计数。利用这个功能可测量INTn上正脉冲的宽度。
先上图(原谅我的制图能力):
1):1处 在上升沿之前,初始化TMOD,TRn=1;
2):2处 INTn引脚为高电平,开始计数测量脉宽;
3):3处 INTn引脚为低电平,测量结束停止计数TRn=0
再上仿真图:
1).信号发生器电平选5v方波。注信号发生器的反相端接地,否则正向端只输出2.5v的方波(剩下的2.5v输出反相方波,可以接到示波器上试试),INTn上永远收不到高电平,达不到预期效果。
2).T0定时器做计数器使用,收到一个负脉冲产生溢出,启动T1;
3).T0,T1全工作在方式2自动装载计数值模式。
然后,上代码:
工作频率12Mhz
#include
#include
sbit P1_0 = P3^3;
#define MakeByte(target, Hi,Lo) \
do{ \
target |= (((Hi)<<4)|(Lo)); \
}while(0); \
#define SetTH(n,val) \
do{ \
TH##n = val; \
}while(0); \
#define SetTL(n,val) \
do{ \
TL##n = val; \
}while(0); \
#define EnableET(n) \
do{ \
ET##n = 0x01; \
IE |= 0x80; \
}while(0); \
unsigned int click;
unsigned int oneMs;
unsigned char getPlusWidth;
int main()
{
unsigned int totalus=0,maxPlusWidth=0;
P3 = 0xFF;
getPlusWidth = 0;
MakeByte(TMOD,0x0A,0x06);
SetTH(0,0xff);
SetTL(0,0xff);
SetTH(1,0x38);
SetTL(1,0x38);
EnableET(0);
EnableET(1);
TR0 = 0x01;
while(1)
{
while(!getPlusWidth);
//等待INT1至低
while(INT1==0x01);
//等待INT1至高电平
while(INT1==0x00);
//等待INT1至低电平,脉宽结束
while(INT1==0x01);
TR1 = 0x00;
totalus = 1000*(oneMs+(click*0.2))+(TL1-TH1);
oneMs = 0;
}
return 0;
}
//T0引脚上接受到负跳变
void IsrT0() interrupt 1
{
TR1 = 0x00;
getPlusWidth = 1;
TR1 = 0x01;
}
void IsrT1() interrupt 3
{
//每次进入中断0.2ms
click++;
if(click == 5)
{
oneMs++;
click=0;
}
}
最后 上仿真结果:
500Hz的方波,脉宽981us
1kHz的方波,脉宽587us 2kHz方波,脉宽234us
单片机测量脉宽c语言程序,利用51系列单片机定时器功能实现测量脉冲宽度相关推荐
- 利用51系列单片机定时器功能实现测量脉冲宽度
STC12C系列增强型单片机片上扩展了基本51单片机的功能,如提供了PCA/PWM接口,定时器能工作在1T模式下(基本51单片机的时钟是Fosc的12分频,1T模式下1分频). PCA可以用于脉宽测量 ...
- 单片机 spwm c语言程序,基于STC系列单片机的SPWM波形实现
摘要:文章在比较了多种生成SPWM波的技术基础上,给出了利用等效面积法来产生SPWM波形的工作原理,详细介绍了由单片机STCl2C5410AD的可编程计数器阵列PCA实现SPWM控制软件的编写过程,并 ...
- 单片机控制灯光亮度c语言程序,基于51单片机控制LED灯光亮度并报警
利用pwm控制led灯光亮度大小.可以显示许多亮度等级 到最低或者最高亮度等级会发出报警.设计思路: LED一般是恒流操作的,如何改变LED的亮度呢?答案就是PWM控制.在一定的频率的方波中,调整高电 ...
- 丁向荣单片机pdf_单片机原理与应用(C语言版)——基于STC15W201S系列单片机 丁向荣 纺著 9787121246357...
第1章 STC15W201S单片机结构与工作原理 1.1 微型计算机结构与单片机 1.1.1 微型计算机的基本结构与工作原理 1.1.2 单片机概述 1.2 STC15W201S单片机结构与工作原理 ...
- 单片机独立式按键c语言程序,(原创)51单片机C语言程序设计--速学教程实例(入门篇)之独立按键(查询)...
(原创)51单片机C语言程序设计--速学教程实例(入门篇)之独立按键(查询) /************************************************************ ...
- 基于51单片机的光照强度检测c语言程序,基于51单片机光照强度检测报告.doc
基于51单片机光照强度检测报告 课程设计报告 课程名称: 智能仪器课程设计 题 目: 基于51单片机的光照强度 摘要 光敏电阻测光强度系统,该系统可以自动检测光照强度的强弱并显示让人们知道此时光照强度 ...
- 51单片机蜂鸣器播放音乐C语言程序实例,51单片机蜂鸣器音乐之八月桂花播放源程序...
/************************************************************************ [文件名] C51音乐程序(八月桂花) [功能] ...
- 单片机方波da转换c语言程序,基于51单片机的波形发生器DA转换(dac0832)
代码如下: #include"reg51.h" #define uchar unsigned char sbit ksaw=P2^0; //锯齿波按键. sbit ktran=P2 ...
- 洗衣机洗涤部分c语言程序,51单片机洗衣机控制板及C语言程序
51单片机洗衣机控制板及C语言程序,该控制板单片机采用AT89C51单片机,所设计全自动洗衣机功能有:标准洗衣.经济洗衣.单独洗衣以及排水四种洗衣等四种方式,有强洗.弱洗及运行/暂停.显示及报警功能, ...
- STC15单片机利用PCA功能测量脉宽应用示例
STC15单片机利用PCA功能测量脉宽应用示例
最新文章
- 阻塞、非阻塞、超时(同步与异步)
- Innumerable Ancestors 尺取 dfs序 lca
- Halcon学习笔记(三)---数据类型
- java五子棋实训训心得,java五子棋实习报告
- jquery div无法获取html文件,怎么样用jquery在div中加载页面
- 相机标定后图像像素和物理尺寸对应_你需要事件相机标定板,咱做了个
- iphone储存空间系统怎么清理_iPhone内存总是不够用?那是你不会清理,这样清立马腾出10G空间...
- Android Ble蓝牙中如何获取RawData ,UUID,Major,Minor,Measured power at 1 meter的数据。
- 关于-宏碁4741G换固态硬盘SSD的一些注意事项
- 开发人员必知!什么是Scrum敏捷开发?
- 牛牛的汉诺塔(记忆化搜索)
- android打开手机自带浏览器,【Appium】打开手机自带的浏览器
- 安装bcc、cachetop、cachestat
- 【C系列6.9】分手在雨季
- matlab怎么多重积分,多重积分的MATLAB实现
- C# 保存图片到本地文件夹中
- java苹果通知V2新版协议实现订阅退款
- 集束管的一些基础知识
- 背景图片大小兼容ie
- 高大上:光学技术“回归”地球整出“彩虹车站”