📄 1106.asm
字号:
;-----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 + -