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

📄 1106.asm

📁 一个完整的制袋机控制系统,包显示程序,步进电机驱动程序.
💻 ASM
📖 第 1 页 / 共 5 页
字号:
          CLR    CLK    
          SETB   CLK
          call   DELAY             ;警报delay 
	  call   DELAY             ;警报delay 
          MOV    sign_larum ,#0    ; 警告器OFF 
          ajmp   RESET             ;总数已满停机 RESET
          RET
          
integer_on: ;整袋输出有效 
          mov    p0,#0ffh
	  clr    clr_out           ; setb  clr_out    ;1106
	  clr    call_0ut          ;警报ON
	  clr    alarm_0ut         ;警报ON
	  clr    integer_out       ;整袋输出 on
          SETB   run_out           ;运行   off
  	  SETB   hole_OUT          ;凿洞off 
	  CLR    CLK
          SETB   CLK

	  LCALL  LAYER11 
          LCALL  LAYER12

; ----delay     	
          MOV    R5,#50
DM2:      MOV    R6,#100
DM1:      MOV    R7,#250
          DJNZ   R7,$
          DJNZ   R6,DM1
          DJNZ   R5,DM2
        
	 
          mov    p0,#0ffh
	  clr   run_out          ;  运行    on
  	  setb    integer_out    ;整袋输出off
	  clr    clr_out         ;  setb  clr_out    ;1106
	  setb   call_0ut        ;警报ON
	  setb   alarm_0ut       ;警报ON
          SETB   hole_OUT        ;凿洞off 
	  CLR    CLK
          SETB   CLK
           

	  MOV  sign_larum ,#0   ;警告器OFF 
          mov  quantity_display,#00   ;等于批数记数清0
	  Ajmp   start_m1         ;重新起动start_m1
        
stop_M1:  ;停止 
          LCALL   LAYER11 
	  mov a, sign_test  ;试验标记,
          MOV sign_test,#00 ;试验=0停止
          CJNE A,#0,STOP_2  ;试验标记,
          ajmp   KEY_M
STOP_2:  
          Ajmp    RESET 
KEY_return:
          mov  sp, #60h 
          ajmp    KEY_M
	  ret
          
;-------------------------
;起动一步
SETUP:
CLR  cw_out  ;0
CLR  CLK
SETB CLK
JNB  high_in , KEY_return
NOP
NOP
nop
SETB  cw_out  ;1
CLR  CLK
SETB CLK  
call  delay_m   ;delay   ;sp=fe
;-----还有100步吗--------------
CJNE r1,#1,NN1   ;=1 sp=fe
CJNE r4,#0,NN0
CJNE R0,#120,NN1 ;减速度设定/还有120步吗?
mov  r4,#1        ;120+velocity=220

NN0:;减速度
INC     DLY_C     ;减速度
CJNE  R3,#0,NN2   ;减速度设定10步吗?
mov a,r0
CJNE  a, seek,NN4  ;减速度设定还有10步吗?
mov   R3,#1
AJMP    NN2

NN1:;加速度
    DEC  DLY_C             ;加速度
    MOV  A,DLY_C    
    CJNE A, velocity,NN4   ;稳定速度
    INC DLY_C
    AJMP NN4 

NN2:
    MOV  A, photoelectric  ;光电装置有无效
    CJNE A,#11H,NN4 
;光电极性
    mov  a, polarity 
    CJNE A, #0BH,NN3
    jb   phototube_in, NN4   ;正向性+
    mov  sign_search,#00     ;搜索寻色标清0
    JMP  hole_motion
NN3:
    jnb  phototube_in, NN4    ;反向性-
    mov  sign_search,#00h     ;搜索寻色标清0
    AJMP hole_motion  
NN4:
    ret
;--------------------
 delay_m:
       mov  r6,dly_c
 dd1:  mov  r7,#2     ;R7=2
       djnz r7,$
       djnz r6,dd1
       RET

delay_1s:
         MOV    R5,postpone
Ds2:     MOV    R6,#100
Ds1:     MOV    R7,#250
         DJNZ   R7,$
         DJNZ   R6,Ds1
         DJNZ   R5,Ds2
         RET
;******************************
    ;**主要的键盘处理程序**
;******************************

;----------------------------------------
;键值处理, 起动/点进/点退/试切/寻标/设定	 
;----------------------------------------
disposal: ;(查键盘是否有按下)
         acall key1    
disposal_1:
         mov p1,#01111111B 
         acall key2              ;-查键值-

         jb acc.3, test_enter      ;试切 
         jb acc.2, seek_enter      ;寻标 
         jb acc.1, enactment_enter ;设定	 
         jb acc.0, advance_enter    ;点进 
   
         mov p1,#11101111B
         acall key2                ;-查键值-  
         jb acc.0, recede_enter    ;点退      
	 jb acc.1, eliminate       ; 清除
	 jb acc.2, cease           ;停止
         jb acc.3, setup_M         ;起动电机
         
         mov p3,#0ffh
         jnb repair_in, repair 
         AJMP disposal 
	 RET
advance_enter:
ajmp KEY_advance
recede_enter:
ajmp KEY_recede

repair:
 lcall  DELAY
 ajmp repair_1
cease:
 ajmp  RESET
eliminate :
 ajmp  eliminate_1
setup_M: ;起动电机           
 LJMP  start_m1

enactment_enter:;设定进入
         LCALL  LAYER4 ;显示第4层设定  
         MOV    sign_LAYER,#03H
         MOV    sign_KEY, #80H
         LJMP  examine


seek_enter:  ;寻标进入 
         LCALL  LAYER3 ;显示第3层寻标 
         MOV    sign_LAYER, #02H
         MOV    sign_KEY, #80H
         LJMP   examine


test_enter:  ;试切进入  
        LCALL  LAYER2      ;显示第2层 
        MOV    sign_LAYER, #01H
        MOV    sign_KEY,   #80H
        AJMP   examine
        RET

eliminate_1:
        CJNE R0,#3,eliminate_4
        mov total_display ,#00
        mov r0,#4
        lcall	LAYER12
        lcall   delay
        ajmp    disposal  
eliminate_4:   
        CJNE R0,#02,eliminate_3
	MOV     DAT1,#019H    ;设定光标位置
        MOV     DAT2,#0DH    ;设定光标位置
        MOV     COM, #21H    ;设定光标
        LCALL   PR1
	mov r0,#3
	lcall   delay
        ajmp    disposal
eliminate_3:
        CJNE R0,#01,eliminate_2
        mov quantity_display  ,#00
        mov r0,#2
        lcall	LAYER11
        lcall   delay
        ajmp    disposal
        
eliminate_2:
        MOV     DAT1,#0AH    ;设定光标位置
        MOV     DAT2,#0DH    ;设定光标位置
        MOV     COM, #21H    ;设定光标
        LCALL   PR1
	MOV     COM, #0A1H   ;光标形状设置
        LCALL   PR12 
	mov r0,#1
	lcall   delay
	ajmp    disposal

repair_1:
        mov  sign_repair,#1
        lcall  LAYER_repair
        lcall  DELAY
        ajmp  disposal

recede:    
        clr    cw_out  ;0
        CLR    CLK
        SETB   CLK
        NOP
        NOP
        nop
        SETB   cw_out  ;1
        CLR    CLK
        SETB   CLK  
        lcall  DELAY0
         ret

DELAY0:   
       mov  r6,#80
 Md1:  mov  r7,#10     ;R7=2
       djnz r7,$
       djnz r6,Md1
       RET

;------------------------------
;----检查键盘--------
;-----------------------------

KEY_advance:  ;点进 advance
         LCALL  LAYER11
         LCALL	LAYER_advance
	 MOV    P0, #0ffH ;PW-初始化
         clr    clR_out	 ;setb   clr_out  ;1106
	 setb   ccw_out
         CALL   recede
	 mov    p0,#0ffh   ;PW恢复
	 CLR    clr_out
         CLR    CLK
         SETB   CLK
	 ajmp   recede_advance

KEY_recede:  ;点退 
         LCALL LAYER11
         LCALL LAYER_recede
	 MOV   P0, #0ffH  ;PW初始化
         clr   clR_out	; setb  clr_out   ;1106
	 clr   ccw_out
	 CALL  recede
         MOV   P0, #0ffH  ;PW恢复
	 CLR   clr_out
         CLR   CLK
         SETB  CLK
         ajmp  recede_advance

recede_advance: ;(查键盘是否有按下)
        ; acall key1  
	 mov p1,#01111111B 
         acall key2                ;-查键值-
         jb acc.0, KEY_advance     ;点进 
	 mov p1,#11101111B
         acall key2                ;-查键值-  
         jb acc.0, KEY_recede      ;点退    
       	 jb acc.2, cease_2         ;停止
	 AJMP  recede_advance
cease_2:      
        ajmp  RESET
	 RET
;-------------------
;----检查键盘--------
;--------------------

examine: ;检查  
       mov p1,#00001111b  ;--送查键值
       acall key2  
       jnz examine        ;等键盘释放
examine_1:
       acall  key1        ;(查键盘是否有按下
       mov p1,#10111111B   ;--送查键值
       acall key2          ;--查键值
       
       jb acc.1,  key_assignments_11     ;-
       jb acc.2,  key_assignments_12     ;ok
       jb acc.3,  key_assignments_13     ;+


       mov p1,#11011111B   ;--送查键值
       acall key2          ;--查键值
       jb acc.0,  key_assignments_20      ;右
       jb acc.1,  key_assignments_21      ;下   
       jb acc.2,  key_assignments_22      ;上 
       jb acc.3,  key_assignments_23      ;左   


       mov p1,#11101111B   ;--送查键值
       acall key2          ;--查键值
       
       jb acc.1,   key_assignments_31     ;清零
       jb acc.2,   key_assignments_32     ;停止  
   
       AJMP examine;检查
key_assignments_11: ;-
        MOV  R2,  sign_LAYER
assignments_DEC_1:
        CJNE R2,#01H, assignments_DEC_2
        AJMP deal_decrease_1
assignments_DEC_2:
        CJNE R2,#02H, assignments_DEC_3
        AJMP deal_decrease_2
assignments_DEC_3:
        CJNE R2,#03H, assignments_DEC_1
        AJMP deal_decrease_3  
key_assignments_13: ;+
        MOV  R2,  sign_LAYER
assignments_ADD_1:
        CJNE R2,#01H, assignments_ADD_2
        AJMP deal_adding_1
assignments_ADD_2:
        CJNE R2,#02H, assignments_ADD_3
        AJMP deal_adding_2
assignments_ADD_3:
        CJNE R2,#03H, assignments_ADD_1
        AJMP deal_adding_3

key_assignments_20: ;右
        MOV A ,sign_KEY  
        RL A
        RL A
        AJMP deal
key_assignments_21: ;下 
        MOV A ,sign_KEY  
        RL A
        AJMP deal
key_assignments_22: ;上 
        MOV A ,sign_KEY  
        RR A  
        AJMP deal
key_assignments_23: ;左
        MOV A ,sign_KEY  
        RR A
        RR A  
        AJMP deal

key_assignments_31:   ;清零
        AJMP to_clear
key_assignments_32:   ;停止
        AJMP  RESET
key_assignments_12: ;ok
        MOV     DAT1,#02H    ;设定光标位置
        MOV     DAT2,#0DH    ;设定光标位置
        MOV     COM, #21H    ;设定光标
        LCALL   PR1
        MOV     COM, #0A7H   ;光标形状设置
        LCALL   PR12 
        LCALL   DELAY
        LCALL   DELAY

        mov a, sign_LAYER   ; #01H
	cjne a,#1,test_no
        mov  sign_test,#1
       
test_no:mov  a, sign_LAYER
        cjne a,#2,seek_no
	mov  a, polarity      ;极性
        CJNE A, #0BH,reverse
        jnb  phototube_in , seek_no   ;正向性+
        mov p1,#11101111B     ;--查询停止键值-- 
        jnb   P1.2,seek_no
	MOV   P0, #0ffH   ;pw-00 
clr clR_out	;setb  clR_out     ;CLR
	setb  ccw_out     ;CCW    
	CALL  recede
        JMP   test_no
reverse:
        jb   phototube_in, seek_no    ;反向性-
       	mov   p1,#11101111B     ;--查询停止键值-- 
        jnb   P1.2, seek_no 	
        MOV   P0, #0ffH  ;pw-00
        clr clR_out	;setb  clR_out    ;CLR
	setb  ccw_out    ;CCW
        CALL  recede
        JMP   test_no  
seek_no:
        AJMP    RESET
        RET

;------------------------------
;查键盘(查键盘是否有按下)
;------------------------------

key1: 
       mov p1,#0FH  ;00001111
       MOV A, P1
       ORL A, #0F0H ;11110000
       CPL A            
       jz key1_1   ;没按下key1
       Lcall DL12MS
       MOV A, P1
       ORL A, #0F0H ;11110000
       CPL A  
       RET
 key1_1:      
       mov p3,#0ffh
       jb repair_in, key1 
       RET
KEY2: ;--查键值------ 
       ;Lcall DL12MS
       MOV A, P1
       ORL A, #0F0H ;11110000
       CPL A            
       RET

;------------------------  
;进入2,3,4,层光标位置处理
;------------------------

deal:
      JB   ACC.0, enter_girth    ;进入周长  
      JB   ACC.1, enter_velocity ;进入速度
      JB   ACC.2, enter_extent   ;进入长度     
      JB   ACC.3, enter_withdraw ;进入退料
      SWAP A 
      AJMP  deal;处理

enter_girth:  ;进入周长光标
      MOV     DAT1,#0CH    ;设定光标位置
      MOV     DAT2,#06H    ;设定光标位置
      MOV     COM, #21H    ;设定光标
      LCALL   PR1
      MOV     COM, #0A1H   ;光标形状设置
      LCALL   PR12

      MOV  sign_KEY,#01H
      AJMP examine         ;检查

enter_velocity: ;进入速度光标
      MOV     DAT1,#0CH    ;设定光标位置
      MOV     DAT2,#0AH    ;设定光标位置
      MOV     COM, #21H    ;设定光标
      LCALL   PR1
      MOV     COM, #0A1H   ;光标形状设置
      LCALL   PR12 
 
      MOV  sign_KEY,#02H
      AJMP examine         ;检查

enter_extent:;进入长度光标

⌨️ 快捷键说明

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