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

📄 09jsj7414.asm

📁 本程序里包含c51单片机和pic12f675间的单总线通信方式、
💻 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 + -