搜索
bottom↓
回复: 7

ATC12C2052AD做的旋转编码器4倍频演示程序。同时可以参考TM1638的显示程序

[复制链接]

出0入0汤圆

发表于 2011-10-19 10:57:07 | 显示全部楼层 |阅读模式
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;本实验是脉冲上升沿,下降沿捕捉实验,脉冲从P3.5,P3.7
;;;输入,用中断捕捉两路脉动的上升沿和下降沿,从P1.5输出
;;;P1.6,P1.7串行输出到TM1638显示。即旋转编码器4倍频。
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    din       equ     p1.5   ;定义TM1638通信管脚
    clk       equ     p1.6
    stb       equ     p1.7  

EPCAI  BIT IE.6
CCON   EQU 0D8H
CMOD   EQU 0D9H
CL     EQU 0E9H
CH     EQU 0F9H
CCAPM0 EQU 0DAH
CCAPM1 EQU 0DBH
CCF0   BIT CCON.0
CCF1   BIT CCON.1
CR     BIT CCON.6
ORG 000H
LJMP start
ORG 0003H
RETI
ORG 000BH
RETI
ORG 0013H
RETI
ORG 001BH
RETI
ORG 0023H
RETI
ORG 0033H
LJMP PCA_ISR
start:
       MOV 56H,#00H
       MOV 57H,#00H
       MOV 50H,#00H
       MOV 51H,#00H

MAIN:
     
     MOV CCON,#0
     CLR A
     MOV CL,A
     MOV CH,A
     MOV CMOD,#00H
     MOV CCAPM0,#31H     ;#11H只捕捉下降沿,#21H捕捉上升沿,#31H上升沿,下降沿都捕捉。
     MOV CCAPM1,#31H
     SETB CR
     SETB EPCAI
     SETB EA
     MOV 56H,51H
     MOV 57H,50H
     lcall HB2
     lcall LOOP
     LCALL DISPAY
     SJMP MAIN
     
PCA_ISR:
     CLR EA
     PUSH ACC
     PUSH PSW
     MOV C,CCF0
     JNC TD2             ;判断CCF0值为0,是有CCF1引起的中断,转B相处理程序
     CLR CCF0            ;以下是A相中断处理程序
     CLR CCF1
     mov c,p3.5          ;以下是判断P3.5与P3.7是否相同,相同加一,不同减一
     mov 20h.1,c
     mov c,p3.7
     mov 21h.1,c
     mov a,20h
     xrl a,21h           ;异或运算,判断P3.5与P3.7是否相同
     mov c,acc.1
     mov p1.4,c
     jc decout
     MOV A,50H
     clr c
     add A,#01H
     MOV 50H,A
     MOV A,51H
     ADDC A,#00H
     MOV 51H,A
     jmp out
     
decout:
     MOV A,50H
     clr c
     SUBB A,#01H
     MOV 50H,A
     MOV A,51H
     SUBB A,#00H
     MOV 51H,A   
       JMP OUT
      
TD2:                         ;B相中断处理程序
     CLR CCF0
     CLR CCF1
     mov c,p3.7              ;以下判断P3.5与P3.7是否相同,相同减一,不同加一
     mov 20h.1,c
     mov c,p3.5
     mov 21h.1,c
     mov a,20h
     xrl a,21h               ;异或运算,判断P3.5与P3.7是否相同
     mov c,acc.1
;     mov p1.4,c
     jc decout2
     MOV A,50H
     clr c
     SUBB A,#01H
     MOV 50H,A
     MOV A,51H
     SUBB A,#00H
     MOV 51H,A
     jmp out
     
decout2:
     MOV A,50H
     clr c
     add A,#01H
     MOV 50H,A
     MOV A,51H
     ADDC A,#00H
     MOV 51H,A   
        
      
      
OUT:
     
     POP PSW
     POP ACC
     SETB EA
     RETI   
     
;;以下只是把四倍频的结果送到TM1638组成是六位数码管显示,真正应用的时候就不要用了。     
     
;入口条件:待转换的双字节十六进制整数在56H、57H中。
;出口信息:转换后的三字节BCD码整数在53H、54H、55H中。
;影响资源:PSW、A、52H~57H 堆栈需求: 2字节

HB2: CLR A ;BCD码初始化
MOV 53H,A
MOV 54H,A
MOV 55H,A
MOV 52H,#10H ;转换双字节十六进制整数
HB3: MOV A,57H ;从高端移出待转换数的一位到CY中
RLC A
MOV 57H,A
MOV A,56H
RLC A
MOV 56H,A
MOV A,55H ;BCD码带进位自身相加,相当于乘2
ADDC A,55H
DA A ;十进制调整
MOV 55H,A
MOV A,54H
ADDC A,54H
DA A
MOV 54H,A
MOV A,53H
ADDC A,53H
MOV 53H,A ;双字节十六进制数的万位数不超过6,不用调整
DJNZ 52H,HB3 ;处理完16bit
RET

LOOP:

       MOV A,53H
       ANL A,#0FH
       MOV 75H,A
       MOV A,53H
       SWAP A
       ANL A,#0FH
       MOV 76H,A
       MOV A,54H
       ANL A,#0FH
       MOV 73H,A
       MOV A,54H
       SWAP A
       ANL A,#0FH
       MOV 74H,A
       MOV A,55H
       ANL A,#0FH
       MOV 71H,A
       MOV A,55H
       SWAP A
       ANL A,#0FH
       MOV 72H,A      
       RET
     
     
;---------TM1616写程序-------------------     
      
PUT:  mov    R2,#8          ;设定发送数据为8位
      clr    stb            ;拉底STB
      clr    c              ;清C
put1: rrc    a              ;带进位右移,D0移到C
      clr    clk            ;拉低CLK时钟线
      nop
      nop
      nop
      nop
      mov    din,c          ;把C中数移动到DIN
      nop
      nop
      nop
      nop
      setb   clk            ;把时钟clk拉高
      nop
      nop
      nop
      nop
      djnz  R2,put1
      ret
;-------TM1616显示子程序----------               

dispay: mov a,#00h             ;设TM1616芯片为4位7段显示方式
       lcall put               ;调用写入子程序
       setb  stb               ;拉高stb,写入生效
       mov a,#44h              ;设定TM1616芯片为绝对地址方式
       lcall put
       setb stb
       mov  a,#0c0h            ;左起第一位显示地址
       lcall put
       mov  a,76h              ;把显示储存地址72h取到A
       mov  dptr,#tab          ;取段码表地址
       movc  a,@a+dptr         ;查表
       lcall put
       setb stb
       mov a,#0c2h             ;左起第二位显示地址
       lcall put
       mov  a,75h
       mov  dptr,#tab
       movc  a,@a+dptr
       lcall put
       setb  stb
       mov a,#0c4h             ;左起第三为显示地址
       lcall put
       mov  a,74h

       mov  dptr,#tab
       movc  a,@a+dptr
       lcall put
       setb  stb
       mov a,#0c6h              ;左起第四位显示地址。
       lcall put
       mov  a,73h

       mov  dptr,#tab
       movc  a,@a+dptr
       lcall put
       setb  stb
      
       mov a,#0c8h             ;左起第五位显示地址
       lcall put
       mov  a,72h

       mov  dptr,#tab
       movc  a,@a+dptr
       lcall put
       setb  stb
      
       mov a,#0cAh             ;左起第六为显示地址
       lcall put
       mov  a,71h

       mov  dptr,#tab
       movc  a,@a+dptr
       lcall put
       setb  stb
  
       mov  a,#08fh             ;写入10001111,后三位是亮度级别,倒数第四位是开关显示器。前面两位10代表显示控制命令。
       lcall put
       setb stb         
       ret  
      
TAB:  DB 03fh,06h,05bh,04fh,066h,06dh,07dh,07h,07fh,06fh        ;共阴极编码
     
      
     
     END

出0入0汤圆

 楼主| 发表于 2011-11-29 09:01:03 | 显示全部楼层
有没有知道怎么克服光电编码器震动引起的毛刺脉冲计数误差的方法?大家一起讨论啊。
头像被屏蔽

出0入0汤圆

发表于 2012-2-5 08:24:07 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

出0入0汤圆

发表于 2012-2-5 08:33:21 | 显示全部楼层
话说ATC是哪个公司的产品?
看汇编好像是51兼容的吧
毛刺?长啥样?示波器上吧,给个图片看看吧。

出0入0汤圆

发表于 2012-2-5 20:47:38 | 显示全部楼层
不明白也mark一下

出0入0汤圆

 楼主| 发表于 2012-2-21 15:29:29 | 显示全部楼层
毛刺就是编码器在特定是位置停止的时候,a相,或者b相有单独的脉冲输出,这时编码器并没有旋转。

出0入0汤圆

发表于 2012-2-22 19:25:19 | 显示全部楼层
单独的输出的问题你都没搞懂?4倍频怎么做到的?

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-5-4 04:25

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

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