
#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)
}
这是一道不完整的题目吧,c语言需要硬件电路比如(单片机,PLC等)实现软件编写,是什么样的脉冲(有周期?有规律?方波?正弦?等),这才能针对性的给出代码,如果你是想用单片机实现方波或者正弦波的脉宽测量(这几样跟测量周期一样) 那么你可以考虑计时中断,当脉冲为1时,启动计时,当脉冲为0,结束计时,转换计时器的时间,脉宽就出来了,可以多次测量取平均值,测量脉冲的口可以随意选择,建议用中断口更好编写,普通口会比较麻烦。如果其他脉冲大部分可以用这个原理测试,但是有些会影响到精度,还需采取其他措施进行补偿。提供个思路给你计数器 模式
将脉冲接入定时器0的GATE 和中断0
将脉冲反向接入定时器1的GATE和中断1
让后在中断0里面读取 定时器1的计数器 并清零
让后在中断1里面读取 定时器0的计数器 并清零
这样
定时器1的记数就是 正脉宽
定时器0的记数就是负 正脉宽
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)