Hallo Aileron,
Du brauchst dazu nicht die ganzen 300 Seiten zu lesen.
Es genügt doch der Abschnitt über die Timer und evtl. der über Interrupts.
Um dich ein wenig zu motivieren hier ein Stückchen Beispielcode,
der einen Mega8-16 dazu bringt mit 2Hz also alle 0,5s
einen Timerinterupt auszulösen.
Die Interruptroutine Int2Hz zählt dann PortC hoch, damit sich auch was tut.
Gruß Jan
Code:
;*** Int2Hz ***
.NOLIST
.INCLUDE <m8def.inc>
.LIST
.equ clk=16000000
;Interrupt Vector Table
rjmp RESET ;Reset Handler
rjmp RESET ;EXT_INT0 ; IRQ0 Handler
rjmp RESET ;EXT_INT1 ; IRQ1 Handler
rjmp RESET ;TIM2_COMP ; Timer2 Compare Handler
rjmp RESET ;TIM2_OVF ; Timer2 Overflow Handler
rjmp RESET ;TIM1_CAPT ; Timer1 Capture Handler
rjmp int2hz ;TIM1_COMPA ; Timer1 CompareA Handler
rjmp RESET ;TIM1_COMPB ; Timer1 CompareB Handler
rjmp RESET ;TIM1_OVF ; Timer1 Overflow Handler
rjmp RESET ;TIM0_OVF ; Timer0 Overflow Handler
rjmp RESET ;SPI_STC ; SPI Transfer Complete Handler
rjmp RESET ;USART_RXC ; USART RX Complete Handler
rjmp RESET ;USART_UDRE ; UDR Empty Handler
rjmp RESET ;USART_TXC ; USART TX Complete Handler
rjmp RESET ;ADC_CC ; ADC Conversion Complete Handler
rjmp RESET ;EE_RDY ; EEPROM Ready Handler
rjmp RESET ;ANA_COMP ; Analog Comparator Handler
rjmp RESET ;TWSI ; Two-wire Serial Interface Handler
rjmp RESET ;SPM_RDY ; Store Program Memory Ready Handler
RESET: ldi r16,high(RAMEND) ;SP setzen
out SPH,r16
ldi r16,low(RAMEND)
out SPL,r16
;Init PortC = Output
ldi r16,0xff
out ddrc,r16
;Init Timer1
;Mode 4, CTC, TOP=OCR1A, Prescl=256
clr r16
out TCCR1A,r16
ldi r16,(1<<WGM12)|(1<<CS12)
out TCCR1B,r16
ldi r16,high(clk/256/2)
out OCR1AH,r16
ldi r16,low(clk/256/2)
out OCR1AL,r16
;Enable Timer 1 Output Compare A INT
in r16,TIMSK
ori r16,1<<OCIE1A
out TIMSK,r16
sei
main: rjmp main
;Die Interruptroutine
int2hz: inc r16
out portc,r16
reti
Lesezeichen