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







Zitieren

Lesezeichen