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

📄 noname1.asm

📁 51单片机控制两路步进电机,实现各种工作方式及其转换
💻 ASM
字号:
ORG 00H
        AJMP START
        ORG 0003H
        AJMP INSERT1        ;紧急停机,外中断0
        ORG 000BH
        AJMP INSERT2        ;定时器发脉冲
;*******************************
START:  CLR    P0
        RS BIT P1.7
        RW BIT P1.6
        E BIT P1.5
        DB0_DB7 DATA P1
;********************************
        ;MOV TMOD,#0
        ;MOV TL0,#0
        ;MOV TH0,#0
        ;SETB EA
        ;SETB ET0
        ;SETB TR0
        ;MOV R5,#50
        ;MOV SP,#60H
KS1:    ACALL INIT
        ACALL CLS
        MOV A,#80H        ;显示地址为第一行第一位
        ACALL Write
        MOV DPTR,#L1       ;显示 WELCOME!
        ACALL PR_STRING
        MOV A, #0C0H         ;显示地址为第2行第一位
        ACALL Write
        MOV DPTR,#L2        ;显示start
        ACALL PR_STRING
KS2:    ACALL  SCAN
        CJNE  R0, #01H,  KS2    ;开始选择模式,只有按键1作用,其他按键无效
KS3:    ACALL CLS
        MOV A,#80H        ;显示地址为第一行第一位
        ACALL Write
        MOV DPTR,#L3       ;显示 push-pull?
        ACALL PR_STRING
        MOV A, #0C1H         ;显示地址为第2行第一位
        ACALL Write
        MOV A, #59H        ;显示 Y
        ACALL WriteDDR
        MOV A, #0CEH         ;显示地址为第2行第15位
        ACALL Write
        MOV A, #4EH        ;显示      N
        ACALL WriteDDR

KS4:    ACALL  SCAN
        CJNE R0, #04H, WXCZ1      ;进入选择模式界面,按键4为返回,否则再判断
        NOP
        AJMP KS1
WXCZ1:  CJNE R0, #03H, OTHER
        NOP                        ;进入选择模式界面,按键3无效
        AJMP KS4
OTHER:  CJNE R0, #02H,   PP    ;进入选择模式界面,按键为2进入选择single或in-phase
KS5:    ACALL CLS
        MOV A,#80H        ;显示地址为第一行第一位
        ACALL Write
        MOV DPTR,#L4       ;显示 SELECT:
        ACALL PR_STRING
        MOV A, #0C0H         ;显示地址为第2行第一位
        ACALL Write
        MOV DPTR,#L5        ;显示SIG     IN-PH
        ACALL PR_STRING
KS6:    ACALL SCAN               ;键盘扫描
        CJNE R0,  #04H, WXCZ2       ;按键4的话返回上一级
        NOP
        AJMP KS3
WXCZ2:  CJNE R0,  #03H, INPH         ;按键3的话无效
        NOP
        AJMP KS6
INPH:  CJNE  R0,#02H, SINGLE         ;按键2的话同步注射      (50H)=02H
        MOV 50H, #02H
        AJMP ADJ                       ;跳转到微调
SINGLE: MOV 50H, #03H           ;按键1的话单管注射         (50H)=03H
        AJMP ADJ                ;跳转到微调

PP:    MOV 50H, #01H           ; 推挽式  (50H)=01H
ADJ:    ACALL CLS
        MOV A,#80H        ;显示地址为第一行第一位
        ACALL Write
        MOV DPTR,#L6       ;显示 ADJUST?
        ACALL PR_STRING
        MOV A, #0C0H         ;显示地址为第2行第1位
        ACALL Write
        MOV DPTR,#L2        ;显示start
        ACALL PR_STRING
KS7:    ACALL SCAN
        CJNE R0,#04H, WXCZ3    ;按返回键的话则按模式分别返回
        MOV A, 50H
        CJNE A, #01H , KS8
        MOV 50H, A
        AJMP KS3
KS8:    MOV 50H, A
        AJMP  KS5
WXCZ3:  CJNE R0,#03H, KONG          ;按键3无效
        NOP
        AJMP   KS7
KONG:   CJNE R0,#02H, BEGAD        ;按键2无效
        NOP
        AJMP   KS7
BEGAD:  NOP
        AJMP  BEGAD


;****************************************************************
SCAN:   MOV    R0,  #00H
        ;JB     P0.1,   PAN2            ;判断P0.1脚,为高电平的话去判断P0.2,为低的话判断键盘
        CLR    C
        MOV    A,    P0
        ANL    A,    #0F0H
        CJNE   A,    #00H,  CHUDOU        ;没有键按下就返回,否则先消除抖动
        SJMP   SCAN
        RET
;***********************************************************
CHUDOU: ACALL DELAY
        CJNE  A,  #00H,  JUKEY1           ;  确实有按键发生的话就判断键值
        SJMP  SCAN                        ; 误动作的话就返回,继续扫描
        RET
;*************************************************************
JUKEY1: CJNE  A,  #80H,  JUKEY2            ;按键4的话给50H赋4
        MOV   R0, #04H
        RET
;*************************************************************
JUKEY2: CJNE  A,  #40H,  JUKEY3        ;按键3的话给50H赋3
        MOV   R0, #03H
        RET
;**************************************************************
JUKEY3: CJNE  A,  #20H,  JUKEY4        ;按键2的话给50H赋2
        MOV   R0, #02H
        RET
;*************************************************************
JUKEY4: CJNE  A,  #10H,  JUKEY5        ;按键1的话给50H赋1
        MOV   R0, #01H
        RET
;*************************************************************
JUKEY5: ACALL CLS          ;其他的话就显示错误,先清屏
        MOV A,#85H        ;显示地址为第一行第5位
        ACALL Write
        MOV DPTR,#L0       ;显示 ERROR!
        ACALL PR_STRING
        RET
;*************************************************************
L1: DB 20h,20h,20h,20h,57h,45h,4ch,43h,4fh,4dh,45h,20h,21H,00h   ;显示 WELCOME!
L2: DB 73H,74H,61H,72H,74H,00H  ; 显示 start
L3: DB 50H,55H,53H,48H,2DH,50H,55H,4CH,4CH,3FH,00H  ;显示PUSH-PULL?
L4: DB 53H,45H,4CH,45H,43H,54H,00H  ;显示SELSCT
L5: DB 73H,69H,67H,20H,20H,20H,20H,20H,20H,20H,69H,6EH,2DH,70H,68H,00H ;显示sig    in-ph
L6: DB 41H,44h,4aH,55H,53H,54H,00H       ;显示 ADJUST
;L2: DB 4DH,4FH,44H,00H   ;显示 MOD

L0: DB 45H,52H,52H,4FH,52H,21H,00H       ;显示 ERROR!
;L5: DB 4DH,4FH,44H,20H,4FH,46H,20H,4FH,50H,45H,00H     ;  MOD OF OPE
;L6: DB 4DH,41H,4EH,55H,20H,20H,20H,20H,41H,55H,54H,4FH,4DH,00H     ; MANU      AUTOM
;L7: DB 4DH,4FH,44H,20H,4FH,46H,20H,49H,4EH,4AH,00H      ;MOD OF INJ
;******************************
INIT:
MOV A,#38H
LCALL Write
MOV A,#0EH
LCALL Write
MOV A,#06H
LCALL Write
RET
;*******************************
CheckBusy:
PUSH ACC
CB_Loop: CLR RS
SETB RW
CLR E
SETB E
MOV A,DB0_DB7
CLR E
JB ACC.7,CB_Loop
POP ACC
ACALL DELAY
RET
;********************************
Write:
ACALL CheckBusy
CLR E
CLR RS
CLR RW
SETB E
MOV DB0_DB7,ACC
CLR E
RET
;********************************
WriteDDR:
ACALL CheckBusy
CLR E
SETB RS
CLR RW
SETB E
MOV DB0_DB7,ACC
CLR E
RET
;**********************************
CLS:
MOV A,#01H
ACALL Write
RET
;**********************************
PR_STRING:
PUSH ACC
PR_LOOP: CLR A
MOVC A,@A+DPTR
JZ END_PR
ACALL WriteDDR             ;??  writeDDR?
INC DPTR
AJMP PR_LOOP
END_PR: POP ACC
RET
;**********************************
DELAY:
MOV R6,#5
D1: MOV R7,#248
DJNZ R7,$
DJNZ R6,D1
RET
;***********************************
INSERT1:
CPL  P1.4      ;
PUSH ACC        ;
PUSH PSW       ;
CLR  C         ;
CLR  TR0       ;
MOV  A, TL0    ;
ADD  A, #08H    ;
ADD  A, 30H     ;
MOV  TL0,A   ;
MOV  A,TH0   ;
ADDC A,31H   ;
MOV  TH0,A   ;
SETB TR0   ;
POP  PSW   ;
POP   ACC   ;
RETI
;**********************************
INSERT2:
PUSH ACC
PUSH PSW
CLR P1.0
CLR P1.1
CLR TR0
POP PSW
POP ACC
RETI






END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -