打印

增量式编码器测试程序

[复制链接]
5358|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
czha1|  楼主 | 2008-2-2 15:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
;增量式编码器测试程序。在试。
;还有一点问题,输入显示脉冲实际不符。再查查。
       GEE  EQU   40H
       SHI  EQU   41H
       BEI  EQU   42H
       QIAN EQU   43H
       DMG  EQU   4CH
       DMS  EQU   4DH
       DMB  EQU   4EH
       DMQ  EQU   4FH  
       X1   BIT   P3.0
       X2   BIT   P3.1
       RS   EQU   P1.7
       RW   EQU   P1.6
       E    EQU   P1.5
       PSB  EQU   P0.7
       RST  EQU   P0.6
       COM  EQU   20H
       DAT  EQU   21H 
       ORG     0000H
       AJMP    MAIN
       ORG     0030H 
MAIN:  MOV     SP,#60H
       CLR     PSB 
       LCALL   DELAY 
       SETB    PSB  ;将PSB置1,通信方式为8位数据并口
       LCALL   DELAY
       MOV     COM,#30H ;功能设置---8BIT控制界面,基本指令集
       ACALL   WRI      ;调用写指令子程序     
       LCALL   DELAY    ;延迟39uS
       MOV     COM,#0CH ;显示打开,光标关,反白显示关 
       ACALL   WRI  
       LCALL   DELAY  ;延迟39uS
       MOV     COM,#01H ;清除屏幕显示,将DDRAM的地址计数器归零
       ACALL   WRI  ;调用写指令子程序
       LCALL   DELAY     ;延迟39uS 
       MOV     COM,#06H  ;DDRAM的地址计数器(AC)加1
       ACALL   WRI   ;调用写指令子程序
       LCALL   DELAY   ;延迟39uS 
       MOV     R1,#0B5H
       MOV     COM,#90H      
       ACALL   WRI
       MOV     DAT,#0CAH        
       ACALL   WRD        
       MOV     DAT,R1 
       ACALL   WRD      ;Shi实
       MOV     R1,#0CAH
       MOV     COM,#91H
       ACALL   WRI
       MOV     DAT,#0BCH
       ACALL   WRD   
       MOV     DAT,R1   
       ACALL   WRD       ;ji际
       MOV     R1,#0B5H
       MOV     COM,#92H
       ACALL   WRI
       MOV     DAT,#0D6H
       ACALL   WRD
       MOV     DAT,R1
       ACALL   WRD     ;zhi 值  
       LCALL   SJGL ;调用数据归零子程序
       LCALL   XSCL ;调用显示处理子程序
       LCALL   XSSJ  ;调用显示数据子程序
JCZ:   LCALL   DMC
       NOP
 JCA:   CJNE    A,#01H,JCF;检测p0.0输入信号为一
JCC:   LCALL   DMC
       CJNE    A,#00H,JCA
JCD:   LCALL   DMC
       CJNE    A,#02H,JCC 
       LCALL   DMC
       CJNE    A,#03H,JCD
       LCALL   JACL  ;调用加处理子程序
       LCALL   XSSJ  ;调用显示数据子程序
JCF:   LCALL   DMC  ;调用读脉冲输入子程序
       CJNE    A,#02H,JCZ
JFA:   LCALL   DMC  ;调用读脉冲输入子程序
       CJNE    A,#00H,JCF;不为03继续读P1。1
       LCALL   DMC  ;调用读脉冲输入子程序
JFB:   CJNE    A,#01H,JFA
       LCALL   DMC  ;调用读脉冲输入子程序
       CJNE    A,#03H,JFB
       LCALL   JECL  ;调用减处理子程序
       LCALL   XSSJ  ;调用显示数据子程序
       AJMP    JCZ
;******加处理子程序******
JACL:  MOV   A,GEE      ;
       INC   A          ;后跳转FHB继续循环,设定标志位#02H
       CJNE  A,#0AH,GJD ;检测个位为十
       AJMP  SDJ1       ;跳转十位加一 
GJD:   MOV   GEE,A
       LCALL XSCL      ;跳转显示处理程序
       AJMP  SDXSA     ;跳转设定显示程序
SDJ1:  MOV   GEE,#00H   ;gwg0个位归零
       CLR   P3.4
       LCALL D1
       SETB  P3.4
       MOV   A,SHI
       INC   A
       CJNE  A,#0AH,SDJ   ;十位为十
       AJMP  BDJ1         ;百位加一
SDJ:   MOV   SHI,A
       LCALL XSCL        ;显示处理程序
       AJMP  SDXSA       ;跳转设定显示程序
BDJ1:  MOV   SHI,#00H    ;swg0十位归零
       MOV   A, BEI
       INC   A
       CJNE  A,#0AH,BDJ  ; 百位为十 
       AJMP  QDJ1        ; 千位加一
BDJ:   MOV   BEI,A
       LCALL XSCL        ;跳转显示处理程序
       AJMP  SDXSA       ;跳转设定显示程序
QDJ1:  MOV   BEI,#00H    ;bwg0百位归零
       MOV   A, QIAN
       INC   A
       CJNE  A,#0AH,QDJ  ; 千位为十
       MOV   GEE,#00H     ; 个位归零
       MOV   SHI,#00H     ; 十位归零
       MOV   BEI,#00H     ; 百位归零
       MOV   QIAN,#00H     ; 千位归零
QDJ:   MOV   QIAN,A
SDXSA: LCALL XSCL ; 
       RET
;******减处理子程序******
JECL:  MOV  A,GEE       ; 查标志位后显示一次设定子程序
       CJNE A,#00H,GWJ1 ;跳转个位减一
       AJMP SWJ         ;跳转十位减一
GWJ1:  DEC  GEE
       AJMP SDXSB   ;跳转设定显示
SWJ:   MOV  A,SHI
       CJNE A,#00H,SWJA ;十位减一
       AJMP BWJ         ;跳转百位减一
SWJA:  DEC  SHI
       MOV  GEE,#09H     ;
       AJMP SDXSB   ;跳转设定显示
BWJ:   MOV  A,BEI
       CJNE A,#00H,BWJ1 ;百位减一
       AJMP QWJ     ;跳转千位减一
BWJ1:  DEC  BEI    
       MOV  GEE,#09H ;
       MOV  SHI,#09H ;
       AJMP SDXSB   ;跳转设定显示
QWJ:   MOV  A,QIAN
       CJNE A,#00H,QWJ1
       MOV  A,#09H
       MOV  GEE,A
       MOV  SHI,A
       MOV  BEI,A
       MOV  QIAN,A 
       AJMP SDXSB    ;跳转设定显示
QWJ1:  DEC  QIAN
       MOV  GEE,#09H
       MOV  SHI,#09H
       MOV  BEI,#09H
SDXSB: LCALL XSCL ;调用显示处理子程序
       RET
XSCL:  MOV   A,GEE
       MOV   DPTR,#TAB
       MOVC  A,@A+DPTR
       MOV   DMG,A
       MOV   A,SHI
       MOV   DPTR,#TAB
       MOVC  A,@A+DPTR
       MOV   DMS,A
       MOV   A,BEI
       MOV   DPTR,#TAB
       MOVC  A,@A+DPTR
       MOV   DMB,A
       MOV   A,QIAN
       MOV   DPTR,#TAB
       MOVC  A,@A+DPTR
       MOV   DMQ,A
       RET      ;显示代码处理子程序
;******数据归零子程序******
SJGL:  MOV   A,#00H
       MOV   GEE,A
       MOV   SHI,A
       MOV   BEI,A
       MOV   QIAN,A
       RET
      ;******显示子程序******
XSSJ:  MOV   R2,#0A3H 
       MOV   R1,DMQ
       MOV   COM,#93H
       LCALL WRI
       MOV   DAT,R2
       LCALL WRD
       MOV   DAT,R1
       LCALL WRD     ;SDQDM代码
       MOV   R1,DMB
       MOV   COM,#94H
       LCALL WRI
       MOV   DAT,R2
       LCALL WRD
       MOV   DAT,R1
       LCALL WRD     ;SDBDM代码
       MOV   R1,DMS
       MOV   COM,#95H
       LCALL WRI
       MOV   DAT,R2
       LCALL WRD
       MOV   DAT,R1
       LCALL WRD     ;SDSDM代码
       MOV   R1,DMG
       MOV   COM,#96H
       LCALL WRI
       MOV   DAT,R2
       LCALL WRD
       MOV   DAT,R1
       LCALL WRD     ;SDGDM代码设定参数显示
       RET
WRI:   PUSH    ACC
       CLR     RS
       SETB    RW
WRI1:  MOV     P2,#0FFH
       SETB    E
       MOV     A,P2 
       NOP
       CLR     E
       JB      ACC.7,WRI1
       NOP
       CLR     RW            
       MOV     P2,COM
       NOP
       SETB    E
       NOP      
       CLR     E  
       POP     ACC            
       RET           ;写指令子程序
WRD:   PUSH    ACC
       CLR     RS  
       LCALL   D1
       SETB    RW                
WRD1:  MOV     P2,#0FFH
       NOP
       SETB    E              
       MOV     A,P2
       LCALL   D1
       CLR     E  
       JB      ACC.7,WRD1     
       NOP
       SETB    RS
       NOP
       CLR     RW
       LCALL   D1
       MOV     P2,DAT
       SETB    E
       NOP
       CLR     E
       POP     ACC  
       RET           ;读指令子程序
    ;******读脉冲输入子程序******
DMC:   MOV     A,P3
       MOV     R0,#03H
       ANL     A,R0 ;A数据内容与R0相与。留A
       MOV     R1,A;数据缓冲
       LCALL   D1
       MOV     A,P3;检测正转输入信号为一?
       MOV     R0,#03H
       ANL     A,R1 ;A数据内容与R0相或。留A
       RET
DELAY: NOP
DEL:   NOP
DOE:   MOV  R6,#0FFH
DT1:   DJNZ R6,DT1
       RET
D1:    MOV R7,#03H
DE2:   MOV R6,#01H
DE1:   DJNZ R6,DE1
       DJNZ R7,DE2
       RET
       ORG 0900H
TAB:   DB 0B0H,0B1H,0B2H,0B3H,0B4H
       DB 0B5H,0B6H,0B7H,0B8H,0B9H
       END

相关帖子

沙发
czha1|  楼主 | 2008-2-4 15:52 | 只看该作者

改了下,现在差不多了。

DMC:   MOV     A,P3
       MOV     R0,#03H
       ANL     A,R0 ;A数据内容与R0相与。留A
       MOV     45H,A;数据缓冲
       LCALL   D1
       MOV     A,P3;检测正转输入信号为一?
       MOV     R0,#03H
       ANL     A,R1 ;A数据内容与R0相或。留A
       (cjne    a,45H,dmc) 这里改了下,现在差不多了。
       RET

准备再试格雷码。

使用特权

评论回复
板凳
jsxiaoye| | 2008-2-11 01:48 | 只看该作者

增量式编码器测试程序

能否提供原理图,让我们学习一下,不胜感激!

使用特权

评论回复
地板
ic_ic| | 2008-2-13 14:32 | 只看该作者

有些晕

汇编,头大!

使用特权

评论回复
5
czha1|  楼主 | 2008-2-13 17:04 | 只看该作者

没几根线

没几根线,P3.0和P3.1输入信号.其余就是液晶显示线.

没有图.需要留邮箱有时间把最新程序发过来

使用特权

评论回复
6
mlhmxhabc| | 2013-9-5 00:26 | 只看该作者
楼主有51C语言的程序吗?1983899172@qq.com,谢谢!

使用特权

评论回复
7
79xiaozaizai| | 2013-9-5 07:59 | 只看该作者
c51的程序,我有,测到的脉冲0误差

使用特权

评论回复
8
songchenping| | 2019-11-15 10:54 | 只看该作者
79xiaozaizai 发表于 2013-9-5 07:59
c51的程序,我有,测到的脉冲0误差

可以共享一下吗?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

25

主题

103

帖子

1

粉丝