⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 复件 v1.0.asm

📁 2005年做的一个小东东
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;***********************************;
;       编码器测试架程序
;         孙世林    测试用   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 + -