51单片机怎么实现外部脉冲计数 15
我需要在100ms内,测出外部INT0脉冲的个数。用INT0接外部脉冲,定时器0工作在方式2进行100ms定时,外部脉冲中断高优先级,当定时器满的话,读出计数值,求程序和...
我需要在100ms内,测出外部INT0脉冲的个数。用INT0接外部脉冲,定时器0工作在方式2进行100ms定时,外部脉冲中断高优先级,当定时器满的话,读出计数值,求程序和指导建议!!谢谢
展开
6个回答
展开全部
#include<reg51.h>
#define uint unsigned int
uint dat=0,time=0;
bit flag=0;
sbit key=P1^0;
void int00() interrupt 0
{
dat++;
}
void t0isr() interrupt 1
{
time++;
if(time>=400)flag=1;
}
main()
{
TMOD=0x22;
TH0=6;
TL0=6;
TH1=0xfd;
TL1=0xfd;
TR1=1;
SCON=0x40;
ET0=1;
EX0=1;
IT0=1;
PX0=1;
EA=1;
while(1)
{
if(key==0)
{
while(key==0);
TR0=1;
while(flag==0);
TR0=0;
flag=0;
SBUF=dat;
while(TI==0);
TI=0;
SBUF=dat>>8;
while(TI==0);
TI=0;
}
}
}
#define uint unsigned int
uint dat=0,time=0;
bit flag=0;
sbit key=P1^0;
void int00() interrupt 0
{
dat++;
}
void t0isr() interrupt 1
{
time++;
if(time>=400)flag=1;
}
main()
{
TMOD=0x22;
TH0=6;
TL0=6;
TH1=0xfd;
TL1=0xfd;
TR1=1;
SCON=0x40;
ET0=1;
EX0=1;
IT0=1;
PX0=1;
EA=1;
while(1)
{
if(key==0)
{
while(key==0);
TR0=1;
while(flag==0);
TR0=0;
flag=0;
SBUF=dat;
while(TI==0);
TI=0;
SBUF=dat>>8;
while(TI==0);
TI=0;
}
}
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
那就在程序里面用循环语句对管脚进行电平高低的检测,if什么情况,然后counter++。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不太行呀,外部脉冲少的话对定时器影响还不大,要是脉冲频率高了的话,对定时器很有影响的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用定时器计数方式,外部脉冲从T0或者T1输入
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
100ms内,测出外部INT0脉冲的个数。
---------
这个“个数”,最多 能达到多少?
---------
这个“个数”,最多 能达到多少?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询