我送个程序你看看
定时器T0的模式2测量正脉冲宽度
#include<reg51.h> //包含51单片机寄存器定义的头文件
sbit ui=P3^2; //将ui位定义为P3.2(INT0)引脚,探测输入电压
/*******************************************
函数功能:主函数
******************************************/
void main(void)
{
TMOD=0x0a; // TMOD=0000 1010B,使用定时器T0的模式2,GATE置1
EA=1; //开总中断
ET0=0; //禁止定时器T0中断
TH0=0; //计数器T0高8位赋初值
TL0=0; //计数器T0低8位赋初值
TR0=1; //启动T0
while(1)
{
while(ui==0) ; //INT0为低电平,T0不启动
TL0=0; //INT0为高电平, T0启动, TL0清0做准备
while(ui==1) ; //在INT0高电平期间等待,计时结果送TH0\TL0
P1=TL0; //INT0一旦为低电平就将计时结果送P1口(或其他变量存储),根据机器周期可以计
算出INT0上高电平存续的宽度,当然如果高电平时间太长,也可以算上TH1。
//While(1);
}
}
|