飞翼我的心 发表于 2017-1-18 09:11:34

端口脉冲计数

一个端口通过外部使其置高或置低效果类似方波脉冲(但不是持续的,有可能长时间都置低),怎么计数其脉冲个数以及判断其上升沿,比如说在TIM1定时器溢出中断里:
#pragma vector=TIM1_OVR_UIF_vector
__interrupt void TIM1_OVR_UIF_IRQHandler(void)
{
TIM1_SR1=0X00;
count13++;
if(count13==3)                        //数3个脉冲后PD2置高
PD2=1;                                       
if(count13==6)                     //数3个脉冲后PD2置低
PD2=0;
}
如何计数PD2端口的脉冲个数以及判断其上升沿.

jinglixixi 发表于 2017-1-18 11:00:34

你对PD2的高或低直接计数即可,至于上升沿看PD2由0->1的变化即可。

飞翼我的心 发表于 2017-1-18 11:13:49

jinglixixi 发表于 2017-1-18 11:00
你对PD2的高或低直接计数即可,至于上升沿看PD2由0->1的变化即可。

直接计数怎么做,需要开外部中断吗,我只知道通过中断可以计数脉冲个数

zoomdy 发表于 2017-1-18 12:50:18

你是要输出脉冲?还是测量脉冲个数?

飞翼我的心 发表于 2017-1-18 13:28:16

zoomdy 发表于 2017-1-18 12:50
你是要输出脉冲?还是测量脉冲个数?

测量脉冲个数还有判断下降沿

发表于 2017-1-18 13:34:56

外部中断上升沿触发来进行上升沿的计数。

飞翼我的心 发表于 2017-1-18 14:09:10

安 发表于 2017-1-18 13:34
外部中断上升沿触发来进行上升沿的计数。

谢谢啦,还有如果这个脉冲不是持续的,可能PD2端口会突然长时间置低,会影响计数吗

anobodykey 发表于 2017-1-18 14:20:39

楼上说的都挺对的,如果只检测上升沿的话就可以设置成外部中断为上升沿触发即可,在中断服务例程中计数即可。

飞翼我的心 发表于 2017-1-18 14:24:46

anobodykey 发表于 2017-1-18 14:20
楼上说的都挺对的,如果只检测上升沿的话就可以设置成外部中断为上升沿触发即可,在中断服务例程中计数即可 ...

明白了,但是如果该脉冲不是持续恒定的,有可能PD2端口会突然长时间置低,影响计数吗

发表于 2017-1-18 14:42:56

如果长时间不变,是不会影响的计数的,只有上升沿发生时才会进入中断。楼主可以测试一下。
页: [1] 2
查看完整版本: 端口脉冲计数