怎么用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);
}
#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);
}
展开全部
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答的就是,他的比较全
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答的就是,他的比较全
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询