搜索
bottom↓
回复: 3

EC11编码器识别程序——有时不准确,请达人指点

[复制链接]

出0入0汤圆

发表于 2012-5-24 12:03:49 | 显示全部楼层 |阅读模式
我编了一个EC11系列编码器的识别程序(汇编语言,不会C啊),但是有时不准确。
不使用中断,直接程序识别。
目的:测试编码器;
硬件连接:编码器的AB信号直接输入到P1.0和P1.1。AB端用10K上拉,对地用0.1u电容去抖动。

恳请达人指点。谢谢!

E11TST:           ;P1.0--E11A,P1.1--E11B
                  ;顺时针:AB=11,01,00,10/D2H;逆时针:AB=11,10,00,01/E1H
                  ;使用资源:A,B,R1,R2,ABH
  MOV B,#03H
  MOV A,P1      ;1
  ANL A,#03H    ;取低2位
  MOV R1,A
  MOV ABH,A
  XRL A,#03H
  JZ E11TST1     ;ABH=03H, GO
  RET            ;ABH<>03H
E11TST1:
  MOV A,P1
  ANL A,#03H
  MOV R2,A         ;2,3,4
  XRL A,R1
  JZ E11TST1       ;R1=R2, GO
  MOV A,ABH
  RL A
  RL A
  ADD A,R2
  MOV ABH,A
  MOV A,R2
  MOV R1,A
  DJNZ B,E11TST1
  MOV A,ABH
  XRL A,#0D2H
  JNZ E11TST2      ;ABH<>D2H, GO
  INC ABHN         ;ABH=D2H,顺时针------------------
  AJMP E11TST3
E11TST2:
  MOV A,ABH
  XRL A,#0E1H
  JNZ E11TSTEND    ;ABH<>E1H(&ABH<>D2H)
  DEC ABHN         ;ABH=E1H,逆时针-----------------
E11TST3:
  
E11TSTEND:
  RET

阿莫论坛20周年了!感谢大家的支持与爱护!!

你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。

出0入0汤圆

发表于 2012-5-25 10:00:27 | 显示全部楼层
本帖最后由 Lpdengsh 于 2012-5-25 10:02 编辑

不懂汇编  传个STM32的C程序  可以参考一下
/*
函数:EC11_1_Read()
功能:EC11旋转读取
参数:无
返回:EC11_1_State
为真 正转 假反转
*/
bool EC11_1_Read(void)
{
        EC11_IORead();
        if(BMA1&&BMB1)
                flag1=1;
        if(flag1==1)
        {
                if((BMA1==0)&&(BMB1==0))
                {
                        if(Last_BMB1_status)
                        {
                                flag1=0;
                                EC11_1_State=TRUE;
                        }
                        if(Last_BMA1_status)
                        {
                                flag1=0;
                                EC11_1_State=FALSE;       
                        }
                }
        }
        Last_BMA1_status=BMA1;
        Last_BMB1_status=BMB1;
        return EC11_1_State;
}
bool EC11_2_Read(void)
{
       
        EC11_IORead();
        if(BMA2&&BMB2)
                flag2=1;
        if(flag2==1)
        {
                if((BMA2==0)&&(BMB2==0))
                {
                        if(Last_BMB2_status)
                        {
                                flag2=0;
                                EC11_2_State=TRUE;
                        }
                        if(Last_BMA2_status)
                        {
                                flag2=0;
                                EC11_2_State=FALSE;       
                        }
                }
        }
        Last_BMA2_status=BMA2;
        Last_BMB2_status=BMB2;
        return EC11_2_State;
}



出0入0汤圆

 楼主| 发表于 2012-5-26 14:22:11 | 显示全部楼层
又认真研究了手里的EC编码器,有如下体会与大家分享:

E11TST:           ;P1.0--E11A,P1.1--E11B
                  ;顺时针:AB=11,01,00,10/D2H;逆时针:AB=11,10,00,01/E1H
                  ;起始稳定状态为11(P1.0=1,P1.1=1)
                  ;测试用0010、0001来识别
                  ;单稳态:11态的AB相位变换:顺时针:AB=11,01,00,10;逆时针:AB=11,10,00,01
                  ;        11态的AB相位变换:顺时针:AB=11,00,01;   逆时针:AB=11,01,00(12点,无开关,体积比较大的)
                  ;双稳态:11态的AB相位变换:顺时针:AB=11,01,00;   逆时针:AB=11,10,00
                  ;        00态的AB相位变换:顺时针:AB=00,10,11;   逆时针:AB=00,01,11
                  ;手里有的EC编码器都可以用了!!
  MOV B,#0C8H    ;C8=200,200*1mS=200mS
  MOV A,P1        ;1/00B
  ANL A,#03H      ;取低2位
  MOV R1,A
  MOV ABH,A
  XRL A,#00H
  JZ  E11TST1     ;ABH=00H/00B, GO
  AJMP E11TST3    ;ABH<>00H
E11TST1:
  ACALL DL1MS     ;1mS延时
  MOV  A,P1
  ANL  A,#03H
  MOV  R2,A       ;2/01B,10B
  XRL  A,R1
  JNZ  E11TSTQ    ;R1<>R2, GO
  DJNZ B,E11TST1  ;R1=R2=00, GO
  AJMP E11TST3    ;200mS内没有收到下一个变化则推出
E11TSTQ:
  MOV A,ABH
  RL A
  RL A
  ADD A,R2
  MOV ABH,A
  MOV  A,R2
  XRL  A,#02H
  JZ   EC11INC    ;R2=10B/0010,顺时针,GO
  MOV  A,R2
  XRL  A,#01H
  JZ   EC11DEC    ;R2=01B/0001,逆时针,GO
  AJMP E11TST3
EC11INC:
  INC ABHN         ;ABH=02H,顺时针------------------
  AJMP E11TST3
EC11DEC:
  DEC ABHN         ;ABH=01H,逆时针-----------------
  ;----------------------------------------------
E11TST3:  

E11TSTEND:
  RET

出0入0汤圆

发表于 2014-11-21 21:21:25 | 显示全部楼层
最近要用,先标记一下
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-10-3 00:48

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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