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

📄 lpc936

📁 单轴简易伺服电机控制系统
💻
📖 第 1 页 / 共 4 页
字号:
$INCLUDE (reg932.inc)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
	bc_2	EQU 7500H		;小刨床进刀速度:1S进9.8mm,9.8mm/s=98mm/10s=588mm/min
							;9.8mm/s=980p/s;980p/1000000us;1p=1000000/980us=1020us;/2=512us=01feh
;512us*16= 	8192=	  2000h
   	C_X1	EQU	10			;x0-x11采样相同次数
	C_X2	EQU	10			;X12-X15采样相同次数
	C_ALLX1	EQU	20			;x0-x11采样相超过失败次数
	C_ALLX2	EQU	20			;X12-X15采样相超过失败次数
	MAX_2	EQU	00H
	MAX_1	EQU	04H
	MAX_0	EQU	04CH;		最大进给2000(20mm)
;*******************
;	THTL0	EQU	65536-690   ;100*7.3728*6/12=369	;100VS:F=3000进给速度,690=345*2.f=1500
	THTL1	EQU	65536-29491	;8ms  fos=7.3728mhz  6X
;**************************
	KEY_AGE	EQU	256-6		 ;按键的年龄,8MSX6=48MS
	KEY_F	EQU	256-37		 ;按键的频率,37X8=296MS,约3次/S	    


	CK		EQU	p1.3	;P3.0		;P89LPC921
	CSD		EQU	p3.0	;P3.1		;P89LPC921
	DAD		EQU	p0.6	;P1.6		;P89LPC921
	CK_4021	EQU	p1.7	;P2.7
	l_ret	equ	p1.2
	CSX		EQU	p0.0	;P1.7
	DAX		EQU	p1.6	;P0.4
	PUS1	EQU	p0.1	;P0.5
	PUS2	EQU	p1.0	;P0.7
	PUS3	EQU	p1.4	;P1.1
;	PUS4	EQU	P1.3
	DIR1	EQU	p0.2	;P0.6
	DIR2	EQU	p1.1	;P1.0
	DIR3	EQU	p1.3	;P1.2
;	DIR4	EQU	P1.4
;	SBP		EQU	P0
	sb001	equ	p1.5
	sb002	equ	p3.1
	sb003	equ	p0.3
	sb004	equ	p0.4
	sb005	equ	p0.5
	R_X1	EQU	010H			;10H,11H,12H
	R_X2	EQU	013H			;13H,14H,15H
	R_X3	EQU	016H			;16H,17H,18H
	R_X4	EQU	019H			;19H,1AH,1BH

	TMP_4	EQU	1CH			;1CH--1FH
	TMP_3	EQU	20H			;2CH,2DH,2EH
	BFG0	EQU	23H
	KACT	EQU	BFG0.0
	M_UPD	EQU	BFG0.1
	TMPB	EQU	BFG0.2
	UGDIR	EQU	BFG0.3		;修改区进给量符号
	XGDIR	EQU	BFG0.4		;修改区坐标符号
	PUSDIV	EQU	BFG0.5
	LCDE	EQU	BFG0.6
	X00_07	EQU	24H
	X08_11	EQU	25H
	X12_15	EQU	26H
	X00		EQU	X00_07.0
	X01		EQU	X00_07.1
	X02		EQU	X00_07.2
	X03		EQU	X00_07.3
	X04		EQU	X00_07.4
	X05		EQU	X00_07.5
	X06		EQU	X00_07.6
	X07		EQU	X00_07.7
	X08		EQU	X08_11.0
	X09		EQU	X08_11.1
	X10		EQU	X08_11.2
	X11		EQU	X08_11.3
	X12		EQU	X12_15.0
	X13		EQU	X12_15.1
	X14		EQU	X12_15.2
	X15		EQU	X12_15.3
	X00_07R	EQU	27H
	X08_11R	EQU	28H
	X12_15R	EQU	29H
	X00R	EQU	X00_07R.0
	X01R	EQU	X00_07R.1
	X02R	EQU	X00_07R.2
	X03R	EQU	X00_07R.3
	X04R	EQU	X00_07R.4
	X05R	EQU	X00_07R.5
	X06R	EQU	X00_07R.6
	X07R	EQU	X00_07R.7
	X08R	EQU	X08_11R.0
	X09R	EQU	X08_11R.1
	X10R	EQU	X08_11R.2
	X11R	EQU	X08_11R.3
	X12R	EQU	X12_15R.0
	X13R	EQU	X12_15R.1
	X14R	EQU	X12_15R.2
	X15R	EQU	X12_15R.3
	BUFB	EQU	2AH
	E2POM	EQU	2BH
	E2G1P	EQU	E2POM.0
	E2G2P	EQU	E2POM.1
	E2G3P	EQU	E2POM.2	
	E2G4P	EQU	E2POM.3

	TMRL	EQU	2CH			;时间计数器, 计数单位为1ms。定时器1中断一次,加1
	FLASH	EQU	TMRL.5		;闪烁频率
	DSPE	EQU	TMRL.3		;显示更新频率

	GDIR	EQU	2DH
	C1DIR	EQU	GDIR.0		;连续进给方向
	C2DIR	EQU	GDIR.1
	C3DIR	EQU	GDIR.2
	C4DIR	EQU	GDIR.3

	G1DIR	EQU	GDIR.4		;点动进给方向
	G2DIR	EQU	GDIR.5
	G3DIR	EQU	GDIR.6
	G4DIR	EQU	GDIR.7

	PDIR	EQU	2EH
	P1DIR	EQU	PDIR.0		;参数区方向
	P2DIR	EQU	PDIR.1
	P3DIR	EQU	PDIR.2
	P4DIR	EQU	PDIR.3		;间隙补偿用于记忆进给方向

	X1DIR	EQU	PDIR.4		;坐标值方向
	X2DIR	EQU	PDIR.5
	X3DIR	EQU	PDIR.6
	X4DIR	EQU	PDIR.7


    GING    EQU	2FH
	G1ING	EQU	GING.0		;正在进给标志
	G2ING	EQU	GING.1		;
	G3ING	EQU	GING.2		;
	G4ING	EQU	GING.3		;
	C1G		EQU	GING.4		;连续进给标志
	C2G		EQU	GING.5		;
	C3G		EQU	GING.6		;
	C4G		EQU	GING.7		;
	G1X		EQU	30H			;30H,31H,32H,
	G2X		EQU	33H			;33H,34H,35H,
	G3X		EQU	36H			;36H,37H,38H
	G4X		EQU	39H			;39H,3AH,3BH,
	G1P		EQU	3CH			;3CH,3DH,3EH  进给量参数
	G1PING	EQU	3FH			;3FH,40H,41H
	G2P		EQU	42H			;42H,43H,44H
	G2PING	EQU	45H			;45H,46H,47H
	G3P		EQU	48H			;48H,49H,4AH  (40H-57H)连续空间(GXP和GXPING)
	G3PING	EQU	4BH			;4BH,4CH,4DH
	G4P		EQU	4EH			;4EH,4FH,50H
	G4PING	EQU	51H			;(51H,52H,53H)
	S_RAMX	EQU	54H

	S_RAM1	EQU	2DH			;保护RAM起始地址
	S_RAM2	EQU	54H			;保护RAM结束地址

	M_PAGE	EQU	56H
	GP_UPD	EQU	57H			;57H,58H,59H
	GX_UPD	EQU	5AH			;5AH,5BH,5CH
	C_UPD	EQU	5DH			;5DH
	KAGE	EQU	5EH
	KSBUF	EQU	5FH
	
	STH0	EQU	60H
	STL0	EQU	61H			;定时器0再装入地址
	SPEEDR	EQU	62H
	speeddr	equ	10
;;;;;;;;;;;;;;;;;;;;;
	E2P_4	EQU	80H		   ;80H,81H,82H,83H,....8CH	
	XL_INT	EQU	8DH			
	XL_C1	EQU	8EH	  
	XL_C2	EQU	8FH
	S_RAM	EQU	90H
	TMRH   EQU 0a0H
	
	EMG		EQU  X04R
	mspeed	equ  93	;显示电机转速
;#0c0h:间隙使用
	inxbuf	equ	0b0h	;输入缓存A5H-A7H
;**************************
ORG 		0000H
;ABC:	MOV		IEn0,#0
;	MOV		SP,#0e2H
;	LCALL	IOINIT
;SETB  CK
;SETB CSD
;SETB DAD
;SJMP ABC

	LJMP 	START 	;开始
;**************************
ORG 		03H			;INT0
	AJMP 	ERR		
	LJMP 	ERR
	LJMP 	ERR
;**************************
ORG 		0BH			;T0
	LJMP 	T00
	AJMP 	ERR
	LJMP 	ERR
;**************************
ORG 		13H			;INT1
	AJMP 	ERR
	LJMP 	ERR
	LJMP 	ERR
;**************************
ORG			1BH			;T1
	LJMP 	T10
	AJMP 	ERR
	LJMP 	ERR
;**************************
ORG 		23H			;串口
	AJMP 	ERR
	LJMP	ERR
	LJMP 	ERR
ORG 		2BH		   ;掉电检测
	LJMP 	IBOE
	AJMP 	ERR
	LJMP 	ERR
;;**************************
ORG 		33H		   ;I2C
	AJMP 	ERR
	LJMP 	ERR
	LJMP 	ERR
;*************************
ORG 		3BH		   ;键盘
	AJMP 	ERR
	LJMP 	ERR
	LJMP 	ERR
;*************************
ORG 43H		   ;比较器2
	DB 		02H
	LJMP 	ERR
	LJMP 	ERR
	LJMP 	ERR
	LJMP 	ERR
	LJMP 	ERR
;*************************
ORG 		53H		   ;看门狗
	DB 		02H
	LJMP 	ERR
	LJMP 	ERR
	LJMP 	ERR
	LJMP 	ERR
	LJMP 	ERR
;*************************
ORG 		63H		   ;比较器1
	DB 		02H
	LJMP 	ERR
	LJMP 	ERR
	LJMP 	ERR
	LJMP 	ERR
	LJMP 	ERR
;**************************
ORG 		73H		   ;定时器I
	DB 		02H
	LJMP 	ERR
	LJMP 	ERR
	LJMP 	ERR
	LJMP 	ERR
;**************************
;**************************
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ORG 0202H
ERR:
	ORL	AUXR1,#08H
	AJMP ERR
;**********************************	
;****************************************
	LJMP 	ERR
;**************************
;**************************
IOINIT:
						;IO口配置:
						;P0.0-P0.4准双向口
						;P0.5-P0.7开漏输出
						;P1.0-P1.4开漏输出
						;P1.5仅为输入
						;P1.6,P1.7强上拉
	MOV		P0M1,#0BEH
	MOV		P0M2,#087H
	MOV		P1M1,#033H
	MOV		P1M2,#093H
;***************************
	MOV		P3M1,#02H
	MOV		P3M2,#00H

	MOV		P2M1,#00H	;
	MOV		P2M2,#00H	;
	RET

ORG 1000H

;***************************
;**************************
	LJMP 	ERR
	LJMP 	ERR
;**************************
;**************************
	LJMP 	ERR
;**************************
RAMINIT:
	CLR     A
    MOV     R0,#08H
RAMINIT0:
    MOV     @R0,A
    INC     R0
	ACALL	CLRWDT
    CJNE    R0,#30H,RAMINIT0
;	JNB		F0,RAMINiT1
;	MOV		R0,#3CH
RAMINIT1:
	MOV		@R0,A
	INC		R0
	ACALL	CLRWDT
    CJNE    R0,#0E0H,RAMINIT1
	RET
;**************************
	LJMP 	ERR
	LJMP 	ERR
	LJMP 	ERR
;**************************
;**************************
TMINIT:
	MOV		TMOD,#11H	;16bit timer
;	MOV		TH0,#HIGH(THTL0)
;	MOV		TL0,#LOW(THTL0)
	MOV		TH1,#HIGH(THTL1)
	MOV		TL1,#LOW(THTL1)
	SETB	TR1
	RET		
	LJMP 	ERR
	LJMP 	ERR
;**************************
;**************************
	LJMP 	ERR
	LJMP 	ERR
;**************************
	LJMP 	ERR
;**************************
;**************************
	LJMP 	ERR
	LJMP 	ERR
;**************************
LCDSETUP: ;初始化
	MOV 	A,#30H			;FUNCTION SETTING	   8位数据线,基本指令
	ACALL 	LCDW_COM
	MOV 	A,#06H 	;	光标向右移,显示画面整体不移位
	ACALL 	LCDW_COM
	MOV 	A,#0CH		;DISPLAY ON	无光标,光标不反白
	ACALL 	LCDW_COM
	RET
;**************************
;**************************
	LJMP 	ERR
	LJMP 	ERR
	LJMP 	ERR
;**************************
	LJMP 	ERR
;**************************
;**************************
readbf:
mov r5,#070
djnz r5,$
ret
push acc
mov p2,#0ffh
mov p2m1,#0ffh
clr csd
clr csd
setb dad
setb dad
;;;;;;;;;;;;;;
setb ck
setb ck
;;;;;;;;;;;;
nop
nop
mov a,p2
clr ck
clr ck
jb acc.7,$
pop acc
mov p2m1,#0h
ret
LCDW_DAT: 				;串口写命令
lcall readbf
setb csd
setb csd
lccca:
clr dad
clr dad
mov p2,a
mov p2,a
setb ck
setb ck
nop
nop
clr ck
clr ck
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    MOV     R5,A
    MOV 	A,#0FAH
	SJMP	LCD_W
LCDW_COM:		   		;串口写数据
lcall readbf
clr csd
clr csd
sjmp lccca
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    MOV     R5,A
	MOV		A,#0F8H
LCD_W:
	SETB 	CSD 		;CSD=CS
	CLR		CK
	MOV 	R4,#8
LCDW1:
	CLR		C
	RLC 	A
	MOV		DAD,C		;DAD=DAD
	SETB 	CK
	CLR 	CK 			;CK=CLK
	DJNZ 	R4,LCDW1
	MOV 	A,R5
	ANL 	A,#0F0H
	MOV 	R4,#8
LCDW2: 
	CLR 	C
	RLC 	A
	MOV 	DAD,C
	SETB	CK
	CLR 	CK
	DJNZ 	R4,LCDW2
	MOV 	A,R5
	SWAP	A
	ANL 	A,#0F0H
	MOV 	R4,#8
LCDW3:
	CLR 	C
	RLC 	A
	MOV 	DAD,C
	SETB 	CK
	CLR 	CK
	DJNZ 	R4,LCDW3
	CLR 	CSD
	SETB	DAD
	MOV     A,R5
LCDW4:
	RET
;**************************
	LJMP 	ERR
	LJMP 	ERR
	LJMP 	ERR
	LJMP 	ERR
;**************************
;**************************
LCDW_L:
	MOV		R3,#8
LCDWL1:
	CLR		A
	MOVC 	A,@A+DPTR
	INC		DPTR
	ACALL 	LCDW_DAT
	CLR 	A
	MOVC 	A,@A+DPTR
	INC 	DPTR
	ACALL 	LCDW_DAT
	JNB		F0,LCDWL3
;	MOV		R2,#2
LCDWL2:
	MOV		R7,#255
	ACALL	DELAY
	ACALL	DELAY
;	DJNZ	R2,LCDWL2
LCDWL3:
	DJNZ 	R3,LCDWL1
    RET

;**************************
	LJMP 	ERR
	LJMP 	ERR
;**************************
DELAY:
	MOV		R6,#0
	ACALL	CLRWDT
	DJNZ	R6,$
delay000:
	DJNZ	R7,DELAY
	RET
;**************************
	LJMP 	ERR
	LJMP 	ERR
;**************************

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
IN4021LB:
	MOV		BUFB,A
	XCH		A,@R0
	XRL		A,@R0
	JNZ		IN4021L1
	INC		R0
	INC		@R0
	MOV		A,@R0
	INC     R0
    MOV     @R0,#0
    CJNE	A,DPL,IN4021L2
    DEC     R0
    dec     A
    MOV     @R0,A
    MOV		A,BUFB
	SJMP	IN4021L3
IN4021L1:
	INC		R0
	MOV		@R0,#0
	INC		R0
	INC		@R0
	MOV		A,@R0
	CJNE	A,DPH,IN4021L2
    dec     A
    MOV     @R0,A
	CLR		A
IN4021L3:	
	MOV		@R1,a
IN4021L2:	

	RET
	LJMP 	ERR
	LJMP 	ERR
;**************************
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
	LJMP 	ERR
	LJMP 	ERR
;**************************
IN4021S:
	MOV		BUFB,A
	MOV		C,BUFB.2
	MOV		ACC.0,C
	MOV		C,BUFB.3
	MOV		ACC.1,C
	MOV		C,BUFB.1
	MOV		ACC.2,C
	MOV		C,BUFB.0
	MOV		ACC.3,C
	MOV		C,BUFB.7
	MOV		ACC.4,C
	MOV		C,BUFB.6
	MOV		ACC.5,C
	MOV		C,BUFB.5
	MOV		ACC.6,C
	MOV		C,BUFB.4
	MOV		ACC.7,C
	RET
;**************************
IN4021:
setb dax
	CLR		CK_4021
	CLR		CK_4021
	CLR		CSX
	CLR		CSX
    SETB	CSX
    SETB	CSX
	CLR		CSX
	CLR		CSX
	MOV		R2,#8	
IN4021_0:
	MOV		C,DAX
	RLC		A
	SETB	CK_4021
	SETB	CK_4021
	CLR		CK_4021
	CLR		CK_4021
	DJNZ	R2,IN4021_0
	CPL		A
;	ACALL	IN4021S
	MOV		R3,A
	MOV		R2,#8	
IN4021_1:
	MOV		C,DAX
	RLC		A
	SETB	CK_4021
	SETB	CK_4021
	CLR		CK_4021
	CLR		CK_4021
	DJNZ	R2,IN4021_1
	CPL		A
;	ACALL	IN4021S
	MOV		R4,A
	SWAP	A
	ANL		A,#0FH
	MOV		R5,A
	MOV		A,R4		;R3=|X7|X6|X5|X4|X3 |X2 |X1 |X0 |
	ANL		A,#0FH		;R4=|0 |0 |0 |0 |X11|X10|X9 |X8 |
	MOV		R4,A	 	;R5=|0 |0 |0 |0 |X15|X14|X13|X12|
	RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INPUTX:
	ACALL	IN4021		 ;175T
	MOV		R0,#R_X2
	MOV		DPL,#C_X1
	MOV		DPH,#C_ALLX1
;	MOV		R1,#X08_11
MOV R1,#(INXBUF+1)
	ACALL	IN4021LB
MOV X08_11,@R1

	MOV		A,R3
	MOV		R0,#R_X1
	MOV		R1,#INXBUF
	ACALL	IN4021LB
MOV X00_07,@R1
;mov a,r3
;mov @r1,a
	MOV		A,R5
	MOV		R0,#R_X3
	MOV		R1,#(INXBUF+2)
	MOV		DPL,#C_X2
	MOV		DPH,#C_ALLX2
	ACALL	IN4021LB
MOV X12_15,@R1
	RET
;**************************************
	LJMP 	ERR
;**************************
XRLX:
	MOV		A,@R0
	XCH		A,@R1
	XRL		A,@R1
	ANL		A,@R1
	MOV		@R0,A
	RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
	LJMP 	ERR
;**************************
CLRWDT:
	CLR		EA
	MOV		WFEED1,#0A5H
	MOV		WFEED2,#05AH
	SETB	EA
	RET
//**************************************
	LJMP 	ERR
;**************************
DSP_X:
   MOV     A,#98H
    LCALL   LCDW_COM 
    MOV     R0,#X00_07R
    MOV     R2,#8
    LCALL   DSP_XS1
jnb x04r,dspx0
dspx1:

  INC     R0
   ACALL   DSP_XS
   INC     R0
   ACALL   DSP_XS
 	LCALL	LCDSETUP
ret

dspx0:
	jnb tmrl.6,dspx1
	LCALL    DSP_SPED

    RET
;;;;;;;;;;;;;;;;;;;;	
	LJMP 	ERR
;;;;;;;;;;;;;;;;;;;;
INLCD:
	MOV		A,#20h
	ACALL	LCDW_DAT
	DJNZ	R2,INLCD
	RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
	LJMP 	ERR
;**************************
MAX:
	CLR		C
	MOV		A,#MAX_0
	SUBB	A,@R0
	INC		R0
	MOV		A,#MAX_1
	SUBB	A,@R0
	INC		R0
	MOV		A,#MAX_2
	SUBB	A,@R0
	JNC		MAX0
	MOV		@R0,#MAX_2
	DEC		R0
	MOV		@R0,#MAX_1
	DEC		R0
	MOV		@R0,#MAX_0
MAX0:
	RET
MAX800:


	CLR		C
	MOV		A,#0deh;15
	SUBB	A,@R0
	INC		R0
	MOV		A,#3;0
	SUBB	A,@R0
	INC		R0
	MOV		A,#0
	SUBB	A,@R0
	JNC		MAX801
	MOV		@R0,#0
	DEC		R0
	MOV		@R0,#3;0
	DEC		R0
	MOV		@R0,#0deh;15
MAX801:
	RET
MAX300:


	CLR		C
	MOV		A,#02Ch;15
	SUBB	A,@R0
	INC		R0
	MOV		A,#1;0
	SUBB	A,@R0
	INC		R0
	MOV		A,#0
	SUBB	A,@R0
	JNC		MAX301
	MOV		@R0,#0
	DEC		R0
	MOV		@R0,#1;0
	DEC		R0
	MOV		@R0,#02Ch;15
MAX301:
	RET

//**************************************
	LJMP 	ERR
;**************************
DSP_XS:
    MOV     R2,#4
DSP_XS1:
    MOV     BUFB,@R0
DSP_XS2:
    MOV     A,BUFB
    RRC     A
    MOV     BUFB,A
    MOV     A,#'.'
    JNC     DSP_XS0
    MOV     DPTR,#TAB4

⌨️ 快捷键说明

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