标题: 单片机外部中断0给脉冲计数,计数不准确? [打印本页]

作者: 亢亢    时间: 2019-5-11 14:21
标题: 单片机外部中断0给脉冲计数,计数不准确?
我用外部中断0做了一个统计槽形光耦脉冲的个数,光码盘装在一个一分钟只有十五转的电机上,统计5个脉冲的个数,然后执行相应的程序,但是不知道为什么统计不到5个,就执行相应的程序了,这是为什么?

单片机源程序如下:
  1. #include <reg52.h>

  2. unsigned char count;
  3. void INT0_init();

  4. void main(){
  5.         INT0_init();
  6.         P1=0x00;
  7.         while(1){               
  8.         if(count==5){
  9.                 P1=0xff;
  10.                 count=0;        
  11.                 }
  12.         }
  13. }
  14. //有遮挡输出高电平,没有遮挡为低电平
  15. void INT0_init(){
  16.         IT0=1;//外部中断0为跳变沿触发方式
  17.         EX0=1;//打开外部中断0
  18.         EA=1;//全局中断允许位
  19. }
  20. void INT_0() interrupt 0{
  21.         count++;
  22. }
复制代码



捕获.PNG (138.46 KB, 下载次数: 24)

捕获.PNG

TIM图片20190511141905.jpg (4.52 MB, 下载次数: 34)

TIM图片20190511141905.jpg

作者: 来51学习    时间: 2019-5-11 21:50
这样的红外对射,精度有限,可能会产生毛刺,也就是多次被误触发了
作者: w1179benp    时间: 2019-5-12 07:16
你的遮光速度很慢,不知是否应加入除颤功能(类似按键除颤),用示波器观察下,遮光板波形边缘应该不“干净”
作者: 亢亢    时间: 2019-5-12 19:49
来51学习 发表于 2019-5-11 21:50
这样的红外对射,精度有限,可能会产生毛刺,也就是多次被误触发了

谢谢你,我已经解决了问题,加了延时函数之后就行了
作者: 亢亢    时间: 2019-5-12 19:49
w1179benp 发表于 2019-5-12 07:16
你的遮光速度很慢,不知是否应加入除颤功能(类似按键除颤),用示波器观察下,遮光板波形边缘应该不“干净 ...

谢谢你,是这样的,我加入延时函数之后就行了
作者: 亢亢    时间: 2019-5-12 19:54
我解决的办法是在外部中断里面加了一个延时函数,就行了。但是我不知道这样做是否妥当???
作者: 菜鸟小丸子    时间: 2021-8-17 11:01
亢亢 发表于 2019-5-12 19:54
我解决的办法是在外部中断里面加了一个延时函数,就行了。但是我不知道这样做是否妥当???

你好,楼主,我用的夏普槽形光耦计数脉冲,发现不准,请问你的延时是加在哪里的




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1