Also ich hab jetzt was gefunden und das auf meinen µC umgearbeitet. Die berechnung stimmt nicht genau. Der Timer schaltet nicht bei jeder sekunde aber so in etwa bei 1,5, das ist aber auch etwas nebensache/einstellungssache
Kann mir mal jemand den Code erklären?
Die Erklärung würde mir für den init Teil reichen. DankeCode:;************************************************************************/ ;* */ ;* Precise 1 Second Timebase */ ;* */ ;* Author: Peter Dannegger */ ;* danni@specs.de */ ;* */ ;************************************************************************/ .nolist .include"m16def.inc" .equ xtal = 8000000 .equ debounce = 100 .equ remainder = xtal - xtal / debounce * debounce .def isreg = r15 .def wr0 = r16 .def iwr0 = r17 .def prescaler = r18 .def second = r19 .list rjmp init .org OC1Aaddr rjmp OC1Aint ;------------------------------------------------------------------------- OC1Aint: in isreg, sreg ;************************************************************************/ ;* Insert Key Debouncing Here */ ;************************************************************************/ ldi iwr0, high( xtal / debounce - 1 ) out ocr1ah, iwr0 ldi iwr0, low( xtal / debounce - 1 ) out ocr1al, iwr0 dec prescaler brne _oci1 ldi prescaler, debounce inc second ldi iwr0, high( xtal / debounce + remainder - 1 ) out ocr1ah, iwr0 ldi iwr0, low( xtal / debounce + remainder - 1 ) out ocr1al, iwr0 _oci1: out sreg, isreg reti ;------------------------------------------------------------------------- init: ldi wr0, 0xFF out ddrb, wr0 ldi wr0, high( ramend ) out sph, wr0 ldi wr0, low( ramend ) out spl, wr0 ldi wr0, 1<<WGM12^1<<CS10 out TCCR1B, wr0 ldi wr0, high( 8000000 / 100 - 1 ) out ocr1ah, wr0 ldi wr0, low( 8000000 / 100 - 1 ) out ocr1al, wr0 out tcnt1l, wr0 ldi prescaler, debounce ldi wr0, 1<<OCIE1A out TIMSK, wr0 sei main: ldi second, 0 _mai1: cpi second, 60 breq main out ddrb, second rjmp _mai1 ;------------------------------------







Zitieren

Lesezeichen