; ; ; 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