📄 09jsj7414.asm
字号:
;------------集束机控制器程序(MCS51)"74LS14"------------
;------------最后调试时间:2007年9月7日----------------
;------------程序状态:--------------------------------
;------------2008年12月改版----------------------------
;------------74LS164控制线及相关单元-------------------
AB164 EQU P1.7 ;74LS164串行数据线
CK164 EQU P1.6 ;74LS164串行时钟线
DSBT EQU P1.5 ;LED消影线
DSRAM EQU 5FH ;显示缓冲单元
;--------------输入线定义----------------
FBI EQU P3.7 ;翻板输入
QDI EQU P3.2 ;起始点输入
XZI EQU P3.4 ;选择开关输入
ZFI EQU P3.3 ;正反转输入
JSI EQU P3.5 ;计数输入
NKI EQU P3.1 ;内控检测输入
DAX EQU P3.6 ;串行数据线
;-------------其它单元---------------
HXCT EQU 5EH ;环形分配计数器
TMP1 EQU 2EH ;P1口值备份单元
CSRAM EQU 5DH ;翻板次数计数单元
MLRAM EQU 5CH ;传送命令单元
;-------------参数定义-----------------
NUM1 EQU 16 ;延时常数
NUM2 EQU 6
ORG 0000H
SJMP 0030H
ORG 001BH
LJMP IET1
ORG 0030H
MOV SP,#65H ;设置堆栈指针
MOV P1,#0F9H ;I/O口初始化
MOV P3,#0FFH
MOV 20H,#00H ;清标志
MOV 22H,#00H
SETB AB164 ;74LS164控制线初始化
CLR CK164
MOV TMP1,#99H ;有关单元初始化
MOV 41H,#20 ;加速段步数值
MOV 42H,#80 ;匀速段步数值
MOV 43H,#20 ;减速段步数值
MOV CSRAM,#0 ;清翻板次数计数
MOV DSRAM,#0 ;清显示缓冲单元
LCALL DISP ;显示单元值
MOV DPTR,#HXDA ;取环形分配表首址
MOV R0,#30H ;内存单元首址
STR1: CLR A
MOVC A,@A+DPTR
MOV @R0,A
INC R0
INC DPTR
CJNE R0,#36H,STR1
MOV HXCT,#30H ;置环形分配计数器初值
MOV TMOD,#22H
MOV TL1,#NUM2 ;250us
MOV TH1,#NUM2
MOV 28H,#NUM1 ;16*250us=4ms
SETB ET1
SETB EA
MOV R2,#10
STR1_1: MOV R7,#200;延时0.1s
LCALL T20MS2
DJNZ R2,STR1_1
LPJC: JB NKI,PJC1 ;无内控输入吗?
JB 20H.0,LPJC ;有内控初始化设置标志吗?
CLR P1.0 ;取消定相
SETB TR1 ;启动T1定时
CLR 20H.1 ;正转
SETB 20H.0 ;置内控初始化设置标志
SJMP LPJC
PJC1: JNB 20H.0,PJC11 ;无内控初始化设置标志吗?
CLR TR1 ;停止T0定时
MOV TL1,TH1 ;恢复时间常数
MOV 28H,#NUM1
LCALL DTME ;延时
SETB P1.0 ;定相
CLR 20H.0 ;清内控初始化设置标志
PJC11: JNB QDI,PJC2 ;有起始点信号吗?
JB 20H.2,PJC11 ;有起始点初始化设置标志吗?
MOV C,ZFI ;取正反转输入
MOV 20H.1,C
CPL 20H.1
CLR P1.0 ;取消定相
SETB TR1
SETB 20H.2 ;置起始点初始化设置标志
SJMP PJC11
PJC2: JNB 20H.2,PJC21 ;无起始点初始化设置标志吗?
CLR TR1 ;停止T1定时
MOV TL1,TH1 ;恢复时间常数
MOV 28H,#NUM1
LCALL DTME ;延时
SETB P1.0 ;定相
CLR 20H.2 ;清起始点初始化设置标志
PJC21: JNB FBI,PJC3 ;无翻板输入信号吗?
LCALL T20MS
JNB FBI,PJC3 ;无翻板输入信号吗?
MOV DSRAM,#0 ;清显示缓冲单元
LCALL DISP ;显示单元值
LCALL ZDYC ;调转动一次子程序
LCALL CSCLA ;调转动次数处理
PJC22: JB FBI,PJC22 ;翻板输入信号仍有效吗?
LCALL T20MS
JB FBI,PJC22 ;翻板输入信号仍有效吗?
LCALL DTME ;延时
PJC3: JB 20H.3,PJC31 ;处于有效状态吗?
JNB JSI,PJC21 ;无计数输入信号吗?
LCALL T20MS
JNB JSI,PJC21 ;无计数输入信号吗?
SETB 20H.3 ;置计数输入信号有效标志
INC DSRAM ;调整显示缓冲单元的值
MOV A,DSRAM ;取显示缓冲单元的值
CJNE A,#10,PJC32
MOV DSRAM,#0 ;清显示缓冲单元
LCALL DISP ;显示单元值
LCALL ZDYC ;调转动一次子程序
LCALL CSCL ;调转动次数处理
SJMP PJC21
PJC32: LCALL DISP ;显示单元值
SJMP PJC21
PJC31: JB JSI,PJC21 ;仍有计数输入信号吗?
LCALL T20MS
JB JSI,PJC21 ;仍有计数输入信号吗?
CLR 20H.3 ;清计数输入信号有效标志
SJMP PJC21
;--------------转动次数处理--------------
CSCL: INC CSRAM ;调整翻板次数
MOV A,CSRAM ;判断到5次了吗?
CJNE A,#5,CSCL1
CSCLA: MOV CSRAM,#0 ;重新计数
CLR 20H.5 ;清叠送电机反转标志
MOV MLRAM,#3 ;发3号命令(输送带向前0-10s)
SJMP CSCL2
CSCL1: MOV C,XZI ;取10/50选择输入
MOV 20H.4,C
CPL 20H.4
JB 20H.4,CSCL3 ;有50选择标志吗?
JNB 20H.5,CSCL3 ;无叠送电机反转标志吗?
MOV MLRAM,#2 ;发2号命令(叠送电机向后0-5s)
SJMP CSCL4
CSCL3: MOV MLRAM,#1 ;发1号命令(叠送电机向前0-5s)
CSCL4: CPL 20H.5 ;变换叠送电机方向标志
;----------------发数据码程序--------------
CSCL2: CLR DAX ;发启始码
MOV R7,#16 ;延时8ms
LCALL T20MS2
SETB DAX
MOV R7,#6 ;延时3ms
LCALL T20MS2
MOV R2,#8 ;准备发送数据
MOV A,MLRAM ;取命令码
CS2_2: CLR DAX
MOV R7,#1 ;延时0.5ms
LCALL T20MS2
SETB DAX
MOV R7,#1 ;延时0.5ms
LCALL T20MS2
RLC A ;C<-D7<--D0<-C
JNC CS2_1 ;C=0吗?
MOV R7,#1 ;延时0.5ms
LCALL T20MS2
CS2_1: DJNZ R2,CS2_2
CLR DAX
MOV R7,#1 ;延时0.5ms
LCALL T20MS2
SETB DAX
RET
;-----------T20MS----------------
T20MS: MOV R7,#10 ;
T20MS2: MOV R6,#246 ;2us
T20MS1: DJNZ R6,T20MS1 ;2*246us=492us
DJNZ R7,T20MS2 ;2us
RET ;1us
;-----------转动一次子程序----------------
ZDYC: SETB 20H.7 ;置脉冲数标志
SETB 22H.1 ;置加速段标志
SETB 22H.0 ;置变速标志
MOV 29H,#0 ;表指针清0
MOV 40H,41H ;取加速段步数
MOV C,ZFI ;取正反转输入
MOV 20H.1,C
CPL 20H.1
CLR P1.0 ;取消定相
SETB TR1 ;启动T1
LOP1: JB 22H.7,LOP2 ;运行结束了吗?
SJMP LOP1
LOP2: MOV 22H,#0 ;运行单元标志清零
CLR 20H.7 ;清脉冲数标志
LP2_1: JNB QDI,LOP3 ;有起始点信号吗?
SJMP LP2_1
LOP3: CLR TR1 ;运行结束处理
MOV TL1,#NUM2 ;恢复时间常数
MOV TH1,#NUM2
MOV 28H,#NUM1
LCALL DTME ;延时
SETB P1.0 ;定相
RET
;------------环形分配输出---------------
HXOUT: MOV R0,HXCT ;取环形分配计数器的值
JB 20H.1,HXO1 ;有反转标志吗?
INC R0
CJNE R0,#36H,HXO2
MOV R0,#30H
SJMP HXO2
HXO1: DEC R0
CJNE R0,#2FH,HXO2
MOV R0,#35H
HXO2: MOV A,@R0 ;取环形分配输出
ANL TMP1,#0F0H ;P1口高4位不变,低四位输出
ORL TMP1,A
MOV P1,TMP1
MOV HXCT,R0 ;存环形分配计数器的值
RET
;-----------显示子程序--------------
DISP: MOV DPTR,#TAB ;显示DSRAM(1位)
SETB DSBT ;消影
MOV A,DSRAM ;取数
ANL A,#0FH
MOVC A,@A+DPTR ;取段码
LCALL P164
CLR DSBT ;显示
RET
;---------74LS164(串入并出)程序---------
P164: MOV R2,#08H
P164_1: RRC A ;C->D7-->D0->C
MOV AB164,C ;AB->QA(0)-->QH(7)
SETB CK164
NOP
CLR CK164
DJNZ R2,P164_1
SETB AB164
SETB TMP1.7
RET
;------------延时-----------------------
DTME: SETB 20H.6 ;置延时标志
SETB TR1 ;启动T1(320ms)
DTME1: JNB 22H.6,DTME2 ;延时结束了吗?
SJMP DTME1
DTME2: CLR TR1 ;停止T1定时
MOV TL1,TH1 ;恢复时间常数
MOV 28H,#NUM1
RET
;------------T1中断服务程序-----------------------
IET1: DJNZ 28H,ET1_2
JB 22H.0,ET1_1 ;有变速标志吗?
MOV 28H,#NUM1
JNB 20H.6,ET1_4 ;无延时标志吗?
CLR 20H.6 ;清延时标志
SJMP ET1_2
ET1_4: LCALL HXOUT ;调环形分配输出
JNB 20H.7,ET1_2 ;无脉冲数标志吗?
DEC 40H ;调整脉冲数
MOV A,40H
CJNE A,#0,ET1_2 ;脉冲数不为零吗?
JB 22H.5,ET1_3 ;有减速段标志吗?
JB 22H.2,ET1_5 ;有匀速段标志吗?
CLR 22H.1 ;清加速段标志
SETB 22H.2 ;置匀速段标志
MOV 40H,42H ;取匀速段步数
SJMP ET1_2
ET1_5: CLR 22H.2 ;清匀速段标志
SETB 22H.5 ;置减速段标志
MOV 40H,43H ;取减速段步数
MOV 29H,#00H ;表指针清0
SJMP ET1_2
ET1_3: SETB 22H.7 ;置运行结束标志
ET1_2: RETI
ET1_6: MOV 28H,2AH
SJMP ET1_4
ET1_1: JNB 22H.1,T1_1 ;无加速段标志吗?
MOV DPTR,#TAB1 ;取加速表地址
ET1_7: MOV A,29H ;取表指针
CJNE A,#20,ET1_71
SJMP ET1_6 ;指针到限
ET1_71: ADD A,29H ;指针*2
INC 29H ;调整指针
MOV R2,A
MOVC A,@A+DPTR ;取数据表高位
MOV 28H,A
MOV 2AH,A
MOV A,R2
INC A
MOVC A,@A+DPTR ;取数据表低位
MOV TH1,A
LJMP ET1_4
T1_1: JB 22H.2,ET1_6 ;是匀速段标志吗?
MOV DPTR,#TAB2 ;减速表
SJMP ET1_7
;-------------字符表(共阳)-------------------LOVE BODY nana (ラブボディナナ)LOVE BODY nana (ラブボディナナ)
TAB: DB 03H,9FH,25H,0DH ;字符'0--3'
DB 99H,49H,41H,1BH ;字符'4--7'
DB 01H,09H ;字符'8,9'
;-----------环形分配表-----------
HXDA: DB 08H,0CH,04H ;A-AB-B
DB 06H,02H,0AH ;BC-C-CA
;-----------加/减速数据表-----------
TAB1:
DB 16,6,16,6 ;加速数据表
DB 16,26,16,46
DB 16,66,16,86
DB 16,106,16,126
DB 8,6,8,16
DB 8,26,8,36
DB 8,40,8,45
DB 8,50,8,55
DB 8,70,8,75
DB 8,60,8,65
DB 8,80,8,80
DB 8,80,8,80
TAB2:
DB 8,75,8,70 ;减速数据表
DB 8,65,8,60
DB 8,55,8,50
DB 8,45,8,40
DB 8,36,8,26
DB 8,16,8,6
DB 16,126,16,106
DB 16,86,16,66
DB 16,46,16,26
DB 16,6,16,6
DB 16,6,16,6
DB 16,6,16,6
END
TAB1:
DB 16,6,16,48 ;加速数据表
DB 16,77,16,100
DB 16,117,8,6
DB 8,29,8,48
DB 8,64,8,77
DB 8,89,8,100
DB 8,109,8,117
DB 8,124,4,3
DB 4,13,4,22
DB 4,29,4,35
DB 4,35,4,35
TAB2:
DB 4,29,4,22 ;减速数据表
DB 4,13,4,3
DB 8,124,8,117
DB 8,109,8,100
DB 8,89,8,77
DB 8,64,8,48
DB 8,29,8,6
DB 16,117,16,100
DB 16,77,16,48
DB 16,6,16,6
DB 16,6,16,6
END
TAB1:
DB 16,8,16,36 ;加速数据表
DB 16,46,16,66
DB 16,116,16,126
DB 8,25,8,35
DB 8,50,8,65
DB 8,75,8,85
DB 8,95,8,105
DB 8,105,8,115
DB 8,127,8,130
DB 8,133,8,146
DB 8,146,8,146
TAB2:
DB 8,140,8,125 ;减速数据表
DB 8,105,8,95
DB 8,85,8,75
DB 8,65,8,55
DB 8,45,8,35
DB 8,25,16,126
DB 16,106,16,86
DB 16,66,16,46
DB 16,26,16,6
DB 16,6,16,6
DB 16,6,16,6
END
TAB1:
DB 16,8,16,46 ;加速数据表
DB 16,56,16,66
DB 16,76,16,86
DB 8,15,8,25
DB 8,35,8,45
DB 8,55,8,65
DB 8,85,8,100
DB 8,115,8,120
DB 8,130,8,140
DB 8,145,8,150
DB 8,156,8,156
TAB2:
DB 8,150,8,145 ;减速数据表
DB 8,125,8,115
DB 8,95,8,85
DB 8,75,8,65
DB 8,55,8,45
DB 8,35,16,126
DB 16,106,16,86
DB 16,66,16,46
DB 16,26,16,6
DB 16,6,16,6
DB 16,6,16,6
END
TAB1:
DB 16,6,16,6 ;加速数据表
DB 16,26,16,46
DB 16,66,16,86
DB 16,106,16,126
DB 8,6,8,16
DB 8,26,8,36
DB 8,40,8,45
DB 8,50,8,55
DB 8,70,8,75
DB 8,60,8,65
DB 8,80,8,80
DB 8,80,8,80
TAB2:
DB 8,75,8,70 ;减速数据表
DB 8,65,8,60
DB 8,55,8,50
DB 8,45,8,40
DB 8,36,8,26
DB 8,16,8,6
DB 16,126,16,106
DB 16,86,16,66
DB 16,46,16,26
DB 16,6,16,6
DB 16,6,16,6
DB 16,6,16,6
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -