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