📄 复件 v1.0.asm
字号:
;***********************************;
; 编码器测试架程序
; 孙世林 测试用 OSC:20M
; www.mcswe.com
; 2005-12-12
;************************************
LED0 EQU 40H
LED1 EQU 41H
LED2 EQU 42H
LED3 EQU 43H
LED4 EQU 44H
LED5 EQU 45H; 小数
MOVD EQU 46H
MOVD1 EQU 47H;
WHEE1NOW EQU 48H;
KEYTMP EQU 49H;
WHEE1OLD EQU 4AH;
RIGHTCOUNT EQU 4BH;
LEFTCOUNT EQU 4CH;
ENCODERCNT EQU 4DH;
;************;
; 中断入口 ;
;************;
ORG 0000H ;程序执行开始地址
LJMP START0 ;跳至START执行
ORG 0003H ;外中断0中断入口地址
LJMP INTEXT0 ;
ORG 000BH ;定时器T0中断入口地址
RETI ;中断返回
ORG 0013H ;外中断1中断入口地址
LJMP INTEXT1 ;
ORG 001BH ;定时器T1中断入口地址
RETI ;中断返回
ORG 0023H ;串行口中断入口地址
RETI ;中断返回
ORG 002BH ;定时器T2中断入口地址
RETI ;中断返回
;************;
; 初始化程序 ;
;************;
START0:CALL LINE;
START: MOV LED5,#0DH;
MOV LED1,#0DH; 清零时显示"CLR
MOV LED4,#010H;R
MOV LED3,#0AH;L
MOV LED2,#0FH;C
MOV LED0,#0DH;
MOV SP,#60H;
START1: ACALL DISPLAY; 等待键释放
JNB P3.7, START1
CLEARP: ACALL CLRALL1; 调用清零程序
LJMP MAIN0; 跳到主程序开始计数
CLRALL1:MOV A,#00H;
MOV LED0,#0AH; L
MOV LED1,#18H; n
MOV LED2,A
MOV LED3,A
MOV LED4,A
MOV LED5,A
MOV WHEE1OLD,A;
CLR C;
MOV P3,#0FFH
MOV P1,#0FFH
MOV P2,#0FFH
RET
;************;
; 主 程 序 ;
;************;
MAIN0: CALL DISPLAY
; CLR P2.6
CALL DISPLAY
JNB P3.6,QI3;
AJMP MAIN
QI3: ACALL DISPLAY
JNB P3.6,QI31;
AJMP MAIN0;
QI31: AJMP ERR7; 如缺相则报警
MAIN: ACALL DISPLAY
MOV P1,#0FFH; 置P1口为输入状态
MOV P0,#0FFH;
MOV P3,#0FFH; 置P3口为输入状态
; CLR P2.6;
CLR EA
JNB P3.7,START
JNB P1.5,ZSIG; 如Z相信号复位则开始计线数
CALL DISPUN; 调用图案旋转子程序
JNB P3.6,QI32; 是否缺相?
AJMP MAIN; 如缺相则报警
QI32: ACALL DISPLAY
JNB P3.6,QI31;
AJMP MAIN0;
;STARCP1:MOV A,LED2
CJNE A,#02H,LOOP
MOV A,LED3
CJNE A,#05H,LOOP
MOV A,LED4
CJNE A,#00H,LOOP
MOV A,LED5
CJNE A,#00H,LOOP
CLR EA
STARCP1:JNB P1.5,ACT1; z脉冲是否出现?
CLR P2.7; OPEN SPK
AJMP STARCP1; 返回
ACT2: CLR P2.7
MOV WHEE1OLD,#12H ;
AJMP ACTION0;
ACT1: CLR EA
MOV MOVD,P3;
MOV MOVD1,P1;
MOV A,LED2;
CJNE A,#00H,ACT2; 如千位是0则继续计数,以免反转时回0出错.
ACALL DISPLAY; 调用显示程序
ZSIG:
LOOP: JNB P3.7,ALLCLR;
; CLR P2.6
SETB IT0;
SETB EX0;
SETB IT1;
SETB EX1;
SETB EA; 开总中断
ACALL DISPLAY; 调用显示程序
JNB P1.5,ACT1; z脉冲是否出现?
JNB P3.6,ACTA2
SETB P2.7
AJMP ZSIG;
ACTA2: LCALL DISPLAY
JNB P3.6,ACTA2
AJMP ERR7
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ACTTON2: AJMP ERR6; 方向反.
AA0: AJMP ACTION
ACTION0:ACALL DISPLAY; 调用显示程序
CLR EA
MOV P1,#0FFH
JNB P3.7, ALLCLR
CLR P2.7
SETB P2.6
JNB P1.5,AA22;
AJMP ACTION0
ALLCLR: LJMP START;
AA22: MOV MOVD,P3;
MOV MOVD1,P1;
AA24: JNB P3.6,AA0; 手动跳过
MOV A,LED1;
CJNE A,#0DH,ACTTON2;
CLR C
MOV A,MOVD1;
JNB P2.6,SBS1;
CJNE A,#9AH,ACTION00; 9a/55如是SBS测是55
SBS: CLR C
MOV A,MOVD;
CJNE A,#0DEH,ACTION00; 0deh/
JNB P1.5,ACTION5;
AJMP A30;
ACTION00: DEC WHEE1OLD;
MOV A,WHEE1OLD;
CLR C
CJNE A,#00H,ACTION0; 不为零继续
AJMP A30;
ACTION5:AJMP ACTION;
SBS1: CJNE A,#55H,ACTION00;
AJMP SBS
A30:
V0: CLR C
MOV A, MOVD;
JNB ACC.0,V1;
AJMP ERR4;
V1: JB ACC.1,W0;
AJMP ERR4;
W0: JB ACC.4,W1
AJMP ERR5;
W1: JNB ACC.5,Z0;
AJMP ERR5;
Z0: MOV A,MOVD1;; 显示那路出错。
JB ACC.4,Z1;
AJMP ERR2;
Z1: JNB ACC.5,U0;
AJMP ERR2;
U0: JB ACC.6,U1;
AJMP ERR3;
U1: JNB ACC.7,A0;
AJMP ERR3;
A0: JB ACC.0,A1;
AJMP ERR0;
A1: JNB ACC.1,B0
AJMP ERR0;
B0: JB ACC.2,B1;
AJMP ERR1;
B1: JNB ACC.3,MAIN1;
AJMP ERR1;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ACTION: ACALL DISPLAY; 调用显示程序
CLR EA
MOV P1,#0FFH
JNB P3.7, OUT0
CLR P2.7
; CLR P2.6
ACALL DISPLAY; 调用显示程序
MAIN1: ACALL DISPLAY; 调用显示程序
MOV P1,#0FFH
MOV P0,#0FFH;
MOV P3,#0FFH; 置P3口为输入状态
SETB P2.7
CLR EA
JNB P3.7,OUT0;
JNB P1.7,USIG; U Sig
JNB P3.1,VSIG; V Sig
JNB P3.5,WSIG; W Sig
JNB P3.6,QI33;
AJMP MAIN1
USIG: JB P1.6,USIG1;
; AJMP ERR3;
USIG1: MOV LED0,#16H; 显示U代码
AJMP MAIN1
VSIG: JB P3.0,VSIG1;
; AJMP ERR4
VSIG1: MOV LED0,#15H; 显示V代码
AJMP MAIN1
WSIG: JB P3.4,WSIG1;
; AJMP ERR5
WSIG1: MOV LED0,#14H; 显示W代码
AJMP MAIN1
OUT0: AJMP START
QI33: ;ACALL DISPLAY; 调用显示程序
AJMP ERR7
ERR0: MOV LED0,#0DH; ERR 0 A
MOV LED1,#11H;
MOV LED2,#10H
MOV LED3,#10H
MOV LED4,#0DH
MOV LED5,#00H
AJMP ERRDISP
ERR1: MOV LED0,#0DH; ERR 1 B
MOV LED1,#11H;
MOV LED2,#10H
MOV LED3,#10H
MOV LED4,#0DH
MOV LED5,#01H
AJMP ERRDISP
ERR2: MOV LED0,#0DH; ERR 2 Z
MOV LED1,#11H;
MOV LED2,#10H
MOV LED3,#10H
MOV LED4,#0DH
MOV LED5,#02H
AJMP ERRDISP
ERR3: MOV LED0,#0DH; ERR 3 U
MOV LED1,#11H;
MOV LED2,#10H
MOV LED3,#10H
MOV LED4,#0DH
MOV LED5,#03H
AJMP ERRDISP
ERR4: MOV LED0,#0DH; ERR 4 v
MOV LED1,#11H;
MOV LED2,#10H
MOV LED3,#10H
MOV LED4,#0DH
MOV LED5,#04H
AJMP ERRDISP
ERR5: MOV LED0,#0DH; ERR 5 w
MOV LED1,#11H;
MOV LED2,#10H
MOV LED3,#10H
MOV LED4,#0DH
MOV LED5,#05H
AJMP ERRDISP
ERR7: MOV LED0,#0DH; ERR 7 缺相
MOV LED1,#0DH;
MOV LED2,#11H
MOV LED3,#10H
MOV LED4,#10H
MOV LED5,#07H
CLR P2.7
LCALL DISPLAY
LCALL DL05S
LCALL DL05S
LCALL DISPLAY
LCALL DL05S
LCALL DL05S
LCALL DISPLAY
AJMP ERROUT3
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ERR6: MOV LED0,#0DH; ERR 6 方向出错
MOV LED1,#11H;
MOV LED2,#10H
MOV LED3,#10H
MOV LED4,#0DH
MOV LED5,#06H
ERRDISP:LCALL DISPLAY
MOV P3,#0FFH;
CLR P2.7
ERRDISP1:LCALL DISPLAY
JNB P3.7, ERROUT
AJMP ERRDISP1
ERROUT:AJMP START
ERROUT2:SETB P2.7;
; CLR P2.6;
CLR EA
CALL CLRALL1;
MOV MOVD,#0FFH;
MOV LED1,#17H; u 等待插入
CALL DISPUU
MOV MOVD,#0FFH
CALL DISPUU
MOV MOVD,#0FFH
CALL DISPUU
MOV MOVD,#03FH
CALL DISPUU
MOV MOVD,#0FFH
CALL DISPUU
MOV LED1,#18H
MOV MOVD,#0FFH
CALL DISPUU
MOV MOVD,#0FFH
CALL DISPUU
MOV MOVD,#0FFH
CALL DISPUU
MOV MOVD,#0FFH
CALL DISPUU
MOV MOVD,#02FH
CALL DISPUU
AJMP ERROUT2;
DISPUU: CALL DISPU2
DEC MOVD
CLR C
MOV A,MOVD
CJNE A,#00H,DISPUU
CALL DISPU2
MOV P3,#0FFH;
RET
DISPU2:LCALL DISPLAY
JB P3.6,OHIN;
JNB P3.7,OHIN;
LCALL DISPLAY
JB P3.6,OHIN;
JNB P3.7,OHIN;
LCALL DISPLAY
JB P3.6,OHIN;
JNB P3.7,OHIN;
LCALL DISPLAY
JB P3.6,OHIN;
JNB P3.7,OHIN;
LCALL DISPLAY
JB P3.6,OHIN;
JNB P3.7,OHIN;
LCALL DISPLAY
RET
OHIN: AJMP START;
ERROUT3:SETB P2.7;
; CLR P2.6;
CLR EA
MOV MOVD,#0FFH;
MOV LED0,#17H; u 等待插入
CALL DISPUU
MOV MOVD,#0FFH
CALL DISPUU
MOV MOVD,#0FFH
CALL DISPUU
MOV MOVD,#03FH
CALL DISPUU
MOV MOVD,#0FFH
CALL DISPUU
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -