|
;增量式编码器测试程序。在试。
;还有一点问题,输入显示脉冲实际不符。再查查。
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
|
|