怎么用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);
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-05-07
sbit echo=P3^6;
cemk()
{uint mk=0;
TR0=0;
TH0=0;
TL0=0;
echo=0;
while((!echo);
TR0=1;
while(echo);
TR0=0;
mk=TH0*256+TL0
return mk;
}
主程序要加上
TMOD=0x11;
EA=1;
ET0=1;
把要测的端脚接P3.6调用cemk()程序返回的数据就是脉宽了(机器周期1us即(12MHZ晶振)测量范围0~65535us)如果害怕陷入死循环可以在while()语句里面加点保护。
这个只测量高电平时间周期时间zhxiufan答的就是,他的比较全
相似回答