; ; program for main controller of linear stepper ; ; ; definitions ; .include "tn13def.inc" .def temp = R16 ; temporary storage .def temp1 = R17 ; temporary storage .def temp2 = R18 ; temporary storage .def bitcnt = R19 ; for serial .def rxbyte = R20 ; the byte received by getchar .def godelay = R21 .def pwmval = R22 .def state = R23 .equ rxpin = PB3 .equ b1dir = PB2 .equ b2dir = PB4 .equ b1pwm = PB1 .equ b2pwm = PB0 .equ initial_pwmval = 120 .equ initial_delay = 7 .equ forward = 1 .equ back = 2 .equ setpwm = 3 .equ setdelay = 4 .equ gotostate = 5 ;bridge 1: ;pwm = PB1, OC0B ;direction = PB2 ;bridge 2: ;pwm = PB0, OC0A ;direction = PB4 .cseg .org 0 rjmp reset ; ; getChar ; assumes no line driver (doesn't invert bits) ; getChar: ldi bitcnt,9 ; 8 data bit + 1 stop bit getchar1: sbis PINB, rxpin ; wait for start bit rjmp getchar1 rcall bitdelay ; 0.5 bit delay getchar2: rcall bitdelay ; 1 bit delay rcall bitdelay ; clc ; clear carry sbis PINB, rxpin ; if RX pin high skip sec ; otherwise set carry dec bitcnt breq getchar3 ; return if all bits read ror rxbyte ; otherwise shift bit into receive byte rjmp getchar2 ; go get next bit getchar3: ret ; ; bit delay ;.equ b = 35 ; OSCCAL = 0xff 9600 bps 3.3V ;.equ b = 38 ;for 38400 .equ b = 160 ;for 9600 bitdelay: ldi temp, b bitloop: dec temp brne bitloop ret driveTimer: mov temp2, godelay DelayOuterOuter: ldi temp1, 250 DelayOuter: ldi temp, 250 DelayInner: dec temp brne DelayInner dec temp1 brne DelayOuter dec temp2 brne DelayOuterOuter ret DoState: cpi state, 0 breq State0 cpi state, 1 breq State1 cpi state, 2 breq State2 cpi state, 3 breq State3 ret State0: sbi PORTB, b1dir out OCR0B, pwmval rjmp FinishState State1: sbi PORTB, b2dir out OCR0A, pwmval rjmp FinishState State2: cbi PORTB, b1dir out OCR0B, pwmval rjmp FinishState State3: cbi PORTB, b2dir out OCR0A, pwmval rjmp FinishState FinishState: rcall driveTimer ldi temp, 0 out OCR0B, temp out OCR0A, temp ret ; ; main program ; reset: ; ; initialization ; ldi temp, low(RAMEND) out SPL, temp ; set stack pointer to top of RAM ldi temp, (1<