‘壹’ 单片机PCA能测量1秒脉宽吗
可以,只要代码编辑无误,一般情况下是可以测量的。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上正脉冲的宽度。
‘贰’ 怎么用C语言编写51单片机测脉宽的程序~ 跪求完整程序!
#include<reg51.h>
#define uint unsigned int
uint width;
sbit pulse=P3^2;
main()
{
TMOD=0x09; //定时器0模式1,GATE=1
TH0=0;
TL0=0;
while(pulse); //等待P3.2变低
TR0=1; //启动定时器0
while(!pulse); //等待脉冲变高
while(pulse); //等待脉冲变低
TR0=0; //关闭定时器0
pulse=TH0*256+TL0; //取定时值。
while(1);
}
‘叁’ 单片机测量脉宽 能够用单片机测量1us以下的脉宽吗,极限是多少
这个和单片机的时钟频率有关,比如51单片机,12MHz外晶振,内部定时器使用的就是1MHz的晶振,测量脉冲宽度误差就是1us。
换句话说,如果要求测量1us的脉宽,以最大1%的误差计算(0.01us),要求的测量频率至少是100MHz。这个频率恐怕没有几个单片机做得到的。
如果放宽要求,可以算算看了。以前曾经采用过FPGA,输入频率是50MHz(高稳晶振),经PLL倍频,测量1us的脉冲才刚刚好。
‘肆’ 如何用stc单片机测量脉宽
测量原理,低电平时,等待高电平到来,打开定时器,等待高电平结束,关闭定时器,读出定时器的值,即是脉冲宽度。当然有时定时器会溢出,要开中断,把中断时间也要算上。
‘伍’ 我用C51单片机做简易数字频率计,测量脉宽2K以内是差不多的,但是超过2K就各种不对了,这是测量脉
你用的是什么单片机?主频是多少?看你的寄存器应该是51。
别忘了,51单片机的主频12MHz,为了抗干扰,还要12分频。
也就是说,你只有1MHz的运算频率。然后你得到你的w,还要做那么复杂的灶衡运算,本身while(p3_5==0)的判凳轮断也要时间。
还有,你的n1,n2是什么类型的呀。你用的是n1=w*65536我就觉得,它至少是个32位的整型变量。我的老天,51的内核只有8位,它要做许许多多额外的运算才能给你拼合出32位变量。
还有你调用函数的各种开销,一旦你的所有时间开销大于500个周期,你就会错过脉宽。
总之,还得看你的目标频率范围是多大吧。任何仪器都有一个频率上限,超过频率上限的就测不了了。如果在2K以内,你就忍了。超过2K,建议你换平台。
8位系统建议你换AVR或者PIC,首先,这两个是RISC结构,拿AVR来说,单周期指令,不需要12分频,16~20Mhz的主频也比51的高。最关键的还有硬件捕捉等功隐粗做能,测量脉宽之类的操作可以靠硬件实现,软件只需要简单处理就可以了。
系统要求再高,可以考虑CORTEX M0系列的32位单片机。主频最高到72MHz,本身累加器是32位的,像你这种32位乘法一个周期就可以完成。也有各种硬件帮你测量脉宽。
‘陆’ 利用8051单片机定时器T0测量某正脉冲的宽度
原理:分别用脉冲的上升沿和下降沿出发单片机,上升沿给出中断1开始计数,下降沿给出中断2停止计数,最后换算出高电平宽度=计数周期数×一个计数的时间。
设置的SFR:TMODE(一定要注意GATE的设置为1),TCON,IE,TH0,TL0等
最大脉宽计算:我们知道计数器中断的产生是从全1变为全0产生溢出中断,所以我们计数器的处置设定为00H,如果我们让其工作在方式1计数下,最大计数值为2^16=65536,那么最大计数脉冲宽度就是65536*2us。
一定要注意我们利用GATE的控制作用是计数器用来测量脉冲宽度。
不明白的LZ可以在上网络看看利用GATE的控制作用是计数器用来测量脉冲宽度这方面知识,或者我们在交流,呵呵