stm8端口脉冲

2019-03-23 17:51发布

一个端口通过外部使其置高或置低效果类似方波脉冲(但不是持续的,有可能长时间都置低),怎么计数其脉冲个数以及判断其上升沿,比如说在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端口的脉冲个数以及判断其上升沿.
此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
sang523
1楼-- · 2019-03-24 15:55
qwerghf 发表于 2017-1-18 16:10
定时器中断读取IO电平计数,中断时间间隔为你最小的脉冲时间

本身这个脉冲就是PD2端口在tim1溢出中断里产生的,再用一个定时器中断读电平去计数
ZHZ26
2楼-- · 2019-03-24 18:57
sang523 发表于 2017-1-18 14:14
其实就是一个io口通过对其置高置低类似于脉冲,就是在我发的程序上对PD2进行计数和判断其下降沿

再定义两个全局变量,一个进定时器中断时自加,一个在if(count13==6)里面自加,不就OK了?
另外你的count13变量应该在if(count13==6)的分支里面清0吧
sang523
3楼-- · 2019-03-25 00:31
 精彩回答 2  元偷偷看……
ZHZ26
4楼-- · 2019-03-25 02:10
sang523 发表于 2017-1-20 08:26
清零原程序有写的,但是这样怎么做到判断边沿极性

你的边沿极性有你的程序控制,运行“PD2=0;”时,PD2就输出下降沿,你在“PD2=0;”后加个计数语句:“num++;”
这样num的值不就是下降沿的次数?
建议count13清零在定时器中断中处理,避免下次进入定时器中断时,主程序还没运行到清零的语句
sang523
5楼-- · 2019-03-25 04:29
ZHZ26 发表于 2017-1-20 19:04
你的边沿极性有你的程序控制,运行“PD2=0;”时,PD2就输出下降沿,你在“PD2=0;”后加个计数语句:“nu ...

恩,懂了,谢谢

一周热门 更多>