Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .include "m328pdef.inc"
- ; vektory přerušení
- .org 0x000
- rjmp start
- .org OC0Aaddr
- rjmp TIM0_COMPA ;definice obsluhy přerušení TIM0_COMPA
- .org PCI0addr
- rjmp PCI0 ;Pin Change Interrupt Request 0
- start:
- ; nastavení pinů
- ser r17 ;set register
- out DDRD,r17 ;port D jako vystup
- clr r16 ;clear register
- out PORTD,r16 ;nastaveni nuly
- ;nastaveni timeru 0
- ;běžím na 1MHz
- ldi r16,250 ;Hodnota proti které porovnávám čítač, terý se přičítá s timer clock - pro nastavení 1MHZz/1024 to trva 1/4s
- out OCR0A,r16 ;
- ldi r16,(2<<WGM00)
- out TCCR0A,r16 ; Timer mode = CTC (Clear Time on Compare Match)
- ldi r16,0b00000101
- out TCCR0B,r16 ; Timer clock = system clock / 1024 - při 1Mhz je perioda timerclocku cca 1.024ms
- ldi r17,(1<<OCIE0A)
- sts TIMSK0,r17 ; Enable Timer/Counter0 Compare Match A Interrupt
- ;nastaveni pin change interrupt
- ldi r16, 0b0000001
- sts PCICR,r16 ; povoleni pin change interrupt ze zdroju PCINT7..0 - portB
- ldi r16, 0b00001111 ; povoleni interruptu ze spodnich 4 bitu portB
- sts PCMSK0,r16
- sei ;globalni povoleni int.
- start2:
- nop
- nop
- nop
- rjmp start2
- PCI0: ;obsluha preruseni od tlacitka
- ser r17 ;set register
- out PIND,r17 ;toggle vystupu/portD
- ldi r17,0b00000000
- sts TCNT0, r17
- ldi r16, 0b00000010
- sts TIMSK0,r16 ; Enable Timer/Counter0 Compare Match A Interrupt
- reti
- TIM0_COMPA: ;obsluha přerušení TIM0_COMPA
- ser r17 ;set register
- out PIND,r17 ;toggle vystupu/portD
- reti
Add Comment
Please, Sign In to add comment