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

📄 1106.asm

📁 一个完整的制袋机控制系统,包显示程序,步进电机驱动程序.
💻 ASM
📖 第 1 页 / 共 5 页
字号:

;-----2004-12-3-------
total_display      equ     41h
quantity_display   EQU     40H
seek          EQU     3fH
dly_c         EQU     3eH
pedometer_R1  EQU     3dH
pedometer_R0  EQU     3cH
;------------电机-----------------
sign_repair   EQU     3bh
sign_search   EQU     3aH
sign_larum    EQU     39H
sign_alarm    EQU     38H
sign_test     EQU     37H
sign_LAYER    EQU     36H ;标志
sign_KEY      EQU     35H ;标志
pedometer3    EQU     34H ;计步器
pedometer2    EQU     33H ;计步器
pedometer1    EQU     32H ;计步器
;--------------------------------
total         EQU     31H  ;总数
batch         EQU     30H  ;批数
postpone      EQU     2FH  ;延迟
alarm         EQU     2EH  ;警报  
;--------------------------------
polarity      EQU     2DH  ;极性
photoelectric EQU     2CH  ;光电
seek_B        EQU     2BH  ;寻B
seek_A        EQU     2AH  ;寻A
;--------------------------------
withdraw      EQU     29H  ;退料
velocity      EQU     28H  ;速度  max=#01FH
extent        EQU     27H  ;长度
girth         EQU     26H  ;周长
;----------BCD---------------------
measure1      EQU     25H  ;送显值
NUMERAL1      EQU     24H  ;BCD低位数
NUMERAL2      EQU     23H  ;BCD高位数
;----------LCD-------------------
COM           EQU     22H  ;LCD
DAT1          EQU     21H  ;LCD
DAT2          EQU     20H  ;LCD  

WRD           EQU     P3.6 ;5    ;写操作信号
RDD           EQU     P3.7 ;6    ;读操作信?CE            EQU     P2.4 ;7
CD            EQU     P2.5 ;8    ;通道选择信号
RST           EQU     P2.6 ;9    ;复位信号对应I/O控制
;--------24c04--------------------
SCL           EQU     P2.2     ;SCL
SDA           EQU     P2.3     ;SDA

;-------------out-------------------
cw_out        EQU    p0.0  ;pu
ccw_out       EQU    p0.3  ;dr
clr_out       EQU    p0.2  ;en  
hole_OUT      EQU    p0.1
integer_out   EQU    p0.4
alarm_0ut     EQU    P0.7 
run_out       EQU    p0.6
call_0ut      EQU    p0.5
;-------------in--------------------
repair_in     EQU    P3.5
phototube_in  EQU    P3.4
high_in       EQU    P3.3
transport_in  EQU    P3.2
;-------------373-------------------
CLK           EQU    p2.7
;*********************************
              ORG     0000H         
              JMP     MAIN
	      ORG     0050H
MAIN:         
              MOV     SP,#060H
              MOV     P0,#0FFH  
              CLR     call_0ut
              CLR     alarm_0ut
              CLR      CLK      ;237
	      SETB     CLK      ;237 
;初始值----------------- 
mov  withdraw,#00
mov  velocity,#50
mov  extent,#100
mov  girth,#4
;------------
mov  seek_A ,#108
mov  seek_B ,#10
mov  photoelectric,#10h
mov  polarity,#0bh
;----------
mov  alarm,#5 
mov  postpone,#00
mov  batch,#100 
mov  total,#100 

;初始化-----------------       
          mov  NUMERAL2,  #00   ;BCD--H=0
	  mov  sign_test ,#00   ;试切标清0
	  MOV  sign_larum ,#00  ;警告器OFF
          mov  sign_search,#00  ;搜寻色标清0
          mov  sign_repair,#00  ;补救标清0

 ;****************************	     
          CLR      CE
          LCALL    DL12MS
          CLR      RST 
          lcall    delay 
          lcall    delay
	  lcall    delay        
          SETB     RST
          LCALL    INT             ;初始化
RESET:                  
          ACALL    SDLT           ;调用保存数据
          ACALL    SCLT           ;调用取出保存数据
	  ACALL    LAYER1         ;显示第一层 
	 
	  mov  sign_repair,#00

          MOV      P0,#0FFH  
          CLR      CLK      ;237
	  SETB     CLK      ;237        

          mov a,sign_test     ;试验标记  
          CJNE A,#0,setup_test ;试验开始 	         
          AJMP   disposal
setup_test: 
          AJMP start_m1         ;试验开始 


;**************************************
   ;***主要的保存,取出处理程序**
;**************************************
;------保存数据子程序-------
SDLT:  SETB SDA
       SETB SCL
       MOV DPTR,#0H
X62:   MOV R2,DPL
       MOV R4,#08H
       MOV B,#120
X63:   MOV A,#0
       ACALL WRITE_BLOCK
       JNC X64
       DJNZ B,X63
       SETB C
       SJMP X66
X64:   CLR C
X66:   RET
;------取出保存的温度---------
SCLT:  SETB SDA      ;SDA
       SETB SCL      ;SCL
       MOV DPTR,#0H
X71:   MOV R2,DPL     ;ADDR --R2
       MOV R4,#08H    ;KOUNT--R4  ;PSIZDE --8H
       MOV B,#120
X72:   MOV A,#0        ;PADDR--O
       ACALL READ_BLOCK
       JNC X74
       DJNZ B,X72
X73:   SETB C
       SJMP X77
X74:   CLR C
X77:   RET
;--------------------------------------
WRITE_BLOCK:
       ACALL START
       JC X38
       RL A
       ORL A,#0A0H
       CLR ACC.0
       ACALL SHOUT
       JC X37
       MOV A,R2
       ACALL SHOUT
       JC X37
       MOV R0,#30H
X36:   MOV A,@R0
       ACALL SHOUT
       JC X37
       INC R0
       DJNZ R4,X36
       CLR C
X37:   ACALL STOP
X38:   RET
;-------------------------------------------------------
READ_BLOCK:
       ACALL START
       JC X35
       RL A
       ORL A,#0A0H
       MOV R0,A
       CLR ACC.0
       ACALL SHOUT
       JC X34
       MOV A,R2
       ACALL SHOUT
       JC X34
       ACALL START
       JC  X34
       MOV A,R0
       SETB ACC.0
       ACALL SHOUT
       JC X34
       MOV R0,#30H
X31:   ACALL SHIN
       MOV @R0,A
       MOV A,R4
       CJNE A,#1H,X32
       CALL NAK
       JMP X33
X32:   ACALL ACK
       INC R0
       DJNZ R4,X31
X33:   CLR C
X34:   ACALL STOP
X35:   RET
;------------------------------------------------------
START:  SETB SDA
        SETB SCL
        JNB SDA,X40
        JNB SCL,X40
        NOP
        CLR  SDA
        NOP
        NOP
        NOP
        NOP
        NOP
        CLR SCL
        CLR C
        JMP X41
X40:    SETB C
X41:    RET
;-------------------------------------------
STOP:   CLR SDA
        NOP
        NOP
        SETB SCL
        NOP
        NOP
        NOP
        NOP
        NOP
        SETB SDA
        RET

;-------------------------
SHOUT:  PUSH B
        MOV B,#8
X42:    RLC A
        MOV SDA,C
        NOP
        SETB SCL
        NOP
        NOP
        NOP
        NOP
        CLR SCL
        DJNZ B,X42
        SETB SDA
        NOP
        NOP
        SETB SCL
        NOP
        NOP
        NOP
        NOP
        MOV C,SDA
        CLR SCL
        POP B
        RET
;-----------------------------------------
SHIN:   SETB SDA
        PUSH B
        MOV B,#8
X43:    NOP
        NOP
        NOP
        SETB SCL
        NOP
        NOP
        MOV C,SDA
        RLC A
        CLR SCL
        DJNZ B,X43
        POP B
        RET
;------------------------------------
NAK:    SETB SDA
        NOP
        NOP
        SETB SCL
        NOP
        NOP
        NOP
        NOP
        CLR SCL
        RET
;-----------------------------------------
ACK:    CLR SDA
        NOP
        NOP
        SETB SCL
        NOP
        NOP
        NOP
        NOP
        CLR SCL
        RET


;******************************
    ;***主要的电机处理程序**
;******************************

start_m1:  
             
          MOV     DAT1,#02H       ;设定光标位置
          MOV     DAT2,#0AH       ;设定光标位置
          MOV     COM, #21H       ;设定光标
          LCALL   PR1
           
          mov  quantity_display,#00   ;等于批数记数清0
	
          MOV P0,#0FFH
          clr   run_out            ;  运行    on
	 ; clr   integer_out        ;  整袋输出on
          clr   clr_out            ;  setb  clr_out    ;1106
          CLR      CLK             ;237
	  SETB     CLK             ;237

;batch-alarm=sign_alarm
  	  mov  a, batch
          subb a, alarm
	  mov sign_alarm,a

;周长X长度=料长
          MOV R0,girth
          MOV R1,extent
          MOV  A, R0
          MOV  B, R1
          MUL  AB
          MOV pedometer_R0,A    ;-A--L
          MOV pedometer_R1,B    ;-B--H
	

;寻找有无效
	  MOV  A, photoelectric ;光电装置有无效
          CJNE A,#11H,KEY_M
	  mov  a, pedometer_R0
          add  a, seek_B
	  mov  pedometer_R0,a
	  MOV  A,pedometer_R1
	  ADDC A,#00
	  MOV  pedometer_R1,A

;seek_b + seek_a = seek        
          mov a, seek_b
	  add a, seek_a
          mov seek,a

;查询停止,拉料键
KEY_M:         
          mov  p1,#11101111B         ;--查询停止键值-- 
          jnb    P1.2, STOP_M        ;停止电机	     	 
	
	  MOV    P3,#0FFH            ;--查询拉料键值--
	  clr   run_out            ;  运行    on
          JB     transport_in , KEY_M
          lcall	  DL12MS
          JB     transport_in,  KEY_M
	  AJMP   M_K 

STOP_M:  ;停止电机	
          AJMP   RESET
          RET

;------脉冲记数-------------------------
;SETU至KEY_M一段不要长要不然反应太慢

M_K:      mov dly_c,#150      ;起步予置数一定要大于velocity-数=150
          mov r4,#00          ;带负荷时不能起动电机还要加大
          mov r3,#00

          MOV  R0,pedometer_R0  ; L ;-pedometer
          MOV  R1,pedometer_R1  ; H ;-extent  ;电机步数倍数,长度
          INC  R1

	  MOV P0,#0FFH         ;PW0000	   
          clr   run_out        ;  运行    on
	  ;clr   integer_out    ;整袋输出on                
          clr   clr_out        ; setb  CLR_OUT   ;1106
	  setb  CCW_OUT	
          MOV A,sign_larum     
          CJNE A,#1,stop_add
	  clr  call_0ut       ;警报ON	 
          CLR  alarm_0ut      ;警报ON	

   
;------脉冲记数----- 
         
stop_add: 
          mov sp,#60h            ;sp=60h????
          acall  SETUP
          DJNZ R0,stop_add       ;R0减1位起动一步 
          DJNZ R1,stop_add       ;倍减完时加完时就停机 

;光电寻找三个无效停止          
	  MOV  A, photoelectric  ;光电有无效转
          CJNE A,#11H,hole_motion ;无效转hole_motion(a=0)

          inc  sign_search
          mov  a, sign_search     ;光电寻找三个
	  CJNE a,#3,hole_motion   ;三个无效停止
          
          mov    p0,#0ffh
          SETB   integer_out     ;整袋输出 OFF
          CLR    call_0ut  
	  CLR    alarm_0ut       ;警报ON
          CLR    CLK    
          SETB   CLK

          MOV  sign_larum ,#0  ;警告器
          mov  sign_search,#00 ;搜寻色标清0
	  Ajmp    RESET        ;重新停止
	  ret
	 
hole_motion:;延迟=1'凿洞 
         
          mov a, postpone       ;延迟=0'不凿洞 
          jz     no_hole        ;postpone=0,no_hole

          lcall  delay_1s       ;凿洞修整delay 

	  mov    p0, #0ffH      ;凿洞on
	  clr    run_out        ;  运行    on
          clr    clr_out        ;  setb  clr_out    ;1106
         ; CLR    integer_out   ;整袋输出 OFF
	  CLR    hole_OUT       ;凿洞on
          CLR    CLK
          SETB   CLK

          call   DELAY          ;delay 

          SETB    hole_OUT      ;凿洞off 
	  clr   run_out         ;  运行    on
	  clr     clr_out       ;  setb  clr_out    ;1106
	;  CLR     integer_out  ;整袋输出 OFF
	  CLR     CLK
          SETB    CLK

no_hole: ;补救数  
         MOV   A ,sign_repair
         CJNE  a,#1,INC_display
	 AJMP  stop_M1 ;停机 
          
INC_display: ;批数提前10警报 
          INC    quantity_display    ;inc	
 	  mov a, quantity_display
          CJNE a,sign_alarm,no_larum ;记数不等于警报
          MOV    sign_larum ,#1      ; 警告器out ;等于警报

no_larum: ;批数已满总数加1
	  CJNE a,batch,stop_M1    ;记数不等于批数
          INC    total_display    ;显示总数
;总数不够整袋输出
          mov  a,total_display     ;显示总数已满不?
          CJNE a,total,integer_on
;总数已满停机 
	  mov  p0,#0ffh            ;总数已满停机处理
          SETB   hole_OUT          ;凿洞off 
          clr    integer_out       ;整袋输出off
          clr    call_0ut          ;警报ON
	  clr    alarm_0ut         ;警报ON

⌨️ 快捷键说明

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