📄 stepper.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 + -