; =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ; SIMPLE SERVODRIVER 16x - FIRMWARE ; Matěj Kubička, 2007, BSD Licence ; =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- .include "m8def.inc" .equ fCPU = 16000000 .equ PeriodTicksConst = (fCPU / 100000) .equ SramOffset = 0x044E .def NumCycles = r18 .def ActServo = r19 .def SregTemp = r20 .def intAcc = r21 .org 0x000 rjmp RESET ; Reset handler .org 0x006 rjmp TIM1_CTC ; CTC timer interrupt .org 0x00B rjmp RSRXC ; RS232 ; =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ; Initialization of program ; =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- RESET: ; Nastavení zásobníku (SRAM) ldi r16, LOW(SramOffset - 1) out SPL, r16 ldi r16, HIGH(SramOffset - 1) out SPH, r16 ; Initialize timer, CTC mode ldi r16, (1 << WGM12) | (1 << CS10) out TCCR1B, r16 ldi r16, (1 << OCIE1A) out TIMSK, r16 ; 10us timer period ldi r17,HIGH(PeriodTicksConst) ldi r16,LOW(PeriodTicksConst) out OCR1AH,r17 out OCR1AL,r16 ; Initialization of RS232 at bitrate 4800 Bd ldi r17, 0 ldi r16, 207 out UBRRH, r17 out UBRRL, r16 ; Enable RX and TX ldi r16, (1<