找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3972|回复: 6
收起左侧

单片机外部中断0给脉冲计数,计数不准确?

[复制链接]
ID:408519 发表于 2019-5-11 14:21 | 显示全部楼层 |阅读模式
我用外部中断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
TIM图片20190511141905.jpg
回复

使用道具 举报

ID:425825 发表于 2019-5-11 21:50 | 显示全部楼层
这样的红外对射,精度有限,可能会产生毛刺,也就是多次被误触发了
回复

使用道具 举报

ID:149451 发表于 2019-5-12 07:16 | 显示全部楼层
你的遮光速度很慢,不知是否应加入除颤功能(类似按键除颤),用示波器观察下,遮光板波形边缘应该不“干净”
回复

使用道具 举报

ID:408519 发表于 2019-5-12 19:49 | 显示全部楼层
来51学习 发表于 2019-5-11 21:50
这样的红外对射,精度有限,可能会产生毛刺,也就是多次被误触发了

谢谢你,我已经解决了问题,加了延时函数之后就行了
回复

使用道具 举报

ID:408519 发表于 2019-5-12 19:49 | 显示全部楼层
w1179benp 发表于 2019-5-12 07:16
你的遮光速度很慢,不知是否应加入除颤功能(类似按键除颤),用示波器观察下,遮光板波形边缘应该不“干净 ...

谢谢你,是这样的,我加入延时函数之后就行了
回复

使用道具 举报

ID:408519 发表于 2019-5-12 19:54 | 显示全部楼层
我解决的办法是在外部中断里面加了一个延时函数,就行了。但是我不知道这样做是否妥当???
回复

使用道具 举报

ID:470129 发表于 2021-8-17 11:01 | 显示全部楼层
亢亢 发表于 2019-5-12 19:54
我解决的办法是在外部中断里面加了一个延时函数,就行了。但是我不知道这样做是否妥当???

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

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表