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

📄 stepper.asm

📁 pic得电机控制程序
💻 ASM
字号:
;                                                                    ;
;	File: STEPPER.ASM                                            ;
;                                                                    ;
;--------------------------------------------------------------------;
;PIC16C84 radic vykonoveho driveru pro bipolarni krokovy motor       ;
;--------------------------------------------------------------------;
;Autor:    Jiri Bezstarosti                                          ;
;e-mail:   jiri@bezstarosti.cz                                       ;
;web:      http://www.bezstarosti.cz                                 ;
;--------------------------------------------------------------------;
;
;	Zapojeni:
;	RA0	in	clk
;	RA1	in	dir
;	RA2	in	endstop1
;	RA3	in	endstop2
;	RB	out	stepper motor power driver
;
;	XT nebo HS oscilator, na frekvenci nezalezi, jen cim vice, tim lepe
;	WDT zakazat
;	CP jak je libo
;

	list	p=16c84
	#include p16c84.inc

	CBLOCK	0x0C	;promenne
	 ;nejak nejsou zadne potreba
	ENDC

	ORG   0

	clrw			;Hodnota pro PORTA pro vypnuty vystup
	movwf PORTA		;PORTA cely v nule
	movwf PORTB		;PORTB cely v nule
	
	bsf STATUS,RP0		;bank1 (je tam TRISA, TRISB a OPTION register)

	movlw b'11010111'	;pull-up nechat zakazane, T0CS na taktovani ne na T0CKI
	movwf OPTION_REG	;RA4 je vystup ne T0CKI

	clrw			;vynulovat w
	movwf TRISB		;PORTB cely jako vystup

	movlw b'00001111';	;RA4 vystup, ostatni RA vstup - RA4 se nepouzije, tak jako
	movwf TRISA		;vystup, at nemusim osetrovat nezapojeny vstup at nevisi ve vzduchu.

	bcf STATUS,RP0		;bank0

	movlw b'10010000'	;pozice7
	movwf PORTB		;motor do pozice 7


	;a ted smycka s krokovanim


loop	btfsc PORTA,0		;dokud clk=1
	goto $-1		;toc dokola, cekej na clk=0
		;ted budeme cekat na puls v clk
	btfss PORTA,0
	goto $-1
		;clk je ted v 1
	btfss PORTA,1		;podivej se na smer
	goto s0

	btfsc PORTA,2
	goto step6
	goto loop

s0	btfsc PORTA,3
	goto step0
	goto loop

	;RA2 a RA3 jsou koncove spinace - je-li v low, tedy stazen k zemi, nelze tim smerek krokovat


step0	movlw b'10011001'	;pozice0
	movwf PORTB


l1		;pockame si na skonceni predchoziho pulsu
	btfsc PORTA,0		;dokud clk=1
	goto $-1		;toc dokola, cekej na clk=0
		;ted budeme cekat na puls v clk
	btfss PORTA,0
	goto $-1
		;clk je ted v 1
	btfss PORTA,1		;podivej se na smer
	goto s1

	btfsc PORTA,2
	goto step7
	goto l1

s1	btfsc PORTA,3
	goto step1
	goto l1


step1	movlw b'00001001'	;pozice 1
	movwf PORTB


l2		;pockame si na skonceni predchoziho pulsu
	btfsc PORTA,0		;dokud clk=1
	goto $-1		;toc dokola, cekej na clk=0
		;ted budeme cekat na puls v clk
	btfss PORTA,0
	goto $-1
		;clk je ted v 1
	btfss PORTA,1		;podivej se na smer
	goto s2

	btfsc PORTA,2
	goto step0
	goto l2

s2	btfsc PORTA,3
	goto step2
	goto l2


step2	movlw b'01101001'	;pozice2
	movwf PORTB


l3		;pockame si na skonceni predchoziho pulsu
	btfsc PORTA,0		;dokud clk=1
	goto $-1		;toc dokola, cekej na clk=0
		;ted budeme cekat na puls v clk
	btfss PORTA,0
	goto $-1
		;clk je ted v 1
	btfss PORTA,1		;podivej se na smer
	goto s3

	btfsc PORTA,2
	goto step1
	goto l3

s3	btfsc PORTA,3
	goto step3
	goto l3

step3	movlw b'01100000'	;pozice3
	movwf PORTB


l4		;pockame si na skonceni predchoziho pulsu
	btfsc PORTA,0		;dokud clk=1
	goto $-1		;toc dokola, cekej na clk=0
		;ted budeme cekat na puls v clk
	btfss PORTA,0
	goto $-1
		;clk je ted v 1
	btfss PORTA,1		;podivej se na smer
	goto s4

	btfsc PORTA,2
	goto step2
	goto l4

s4	btfsc PORTA,3
	goto step4
	goto l4
	
step4	movlw b'01100110'	;pozice4
	movwf PORTB


l5		;pockame si na skonceni predchoziho pulsu
	btfsc PORTA,0		;dokud clk=1
	goto $-1		;toc dokola, cekej na clk=0
		;ted budeme cekat na puls v clk
	btfss PORTA,0
	goto $-1
		;clk je ted v 1
	btfss PORTA,1		;podivej se na smer
	goto s5

	btfsc PORTA,2
	goto step3
	goto l5

s5	btfsc PORTA,3
	goto step5
	goto l5

step5	movlw b'00000110'	;pozice5
	movwf PORTB


l6		;pockame si na skonceni predchoziho pulsu
	btfsc PORTA,0		;dokud clk=1
	goto $-1		;toc dokola, cekej na clk=0
		;ted budeme cekat na puls v clk
	btfss PORTA,0
	goto $-1
		;clk je ted v 1
	btfss PORTA,1		;podivej se na smer
	goto s6

	btfsc PORTA,2
	goto step4
	goto l6

s6	btfsc PORTA,3
	goto step6
	goto l6

step6	movlw b'10010110'	;pozice6
	movwf PORTB


l7		;pockame si na skonceni predchoziho pulsu
	btfsc PORTA,0		;dokud clk=1
	goto $-1		;toc dokola, cekej na clk=0
		;ted budeme cekat na puls v clk
	btfss PORTA,0
	goto $-1
		;clk je ted v 1
	btfss PORTA,1		;podivej se na smer
	goto s7

	btfsc PORTA,2
	goto step5
	goto l7

s7	btfsc PORTA,3
	goto step7
	goto l7

step7	movlw b'10010000'	;pozice7
	movwf PORTB

	goto loop


	;step patern for halfstep mode
	;movlw b'10011001'	;pozice0
	;movlw b'00001001'	;pozice1
	;movlw b'01101001'	;pozice2
	;movlw b'01100000'	;pozice3
	;movlw b'01100110'	;pozice4
	;movlw b'00000110'	;pozice5
	;movlw b'10010110'	;pozice6
	;movlw b'10010000'	;pozice7


	end

⌨️ 快捷键说明

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