Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ; Coloca o LED a piscar x em x tempo. Os tempos on e off estão definidos na rotina de interrupção.
- ; Exemplo de utilização do TC0 com interrupção por Output Compare
- .include <m128def.inc>
- .cseg
- .org 0
- jmp main
- .org 0x1E ; vector interrupcao
- jmp int_TC0
- .org 0x46
- ; rotina de inicializacao do microprocessador
- ; 1024*62.5E-9*78=5E-4
- inic:
- ser r16 ; set register 0xFF
- out DDRA, r16
- ldi r16, 125 ; preenche OCR0 com 128
- out OCR0, r16
- ldi r16, 0b00011111 ; configura TC0 (3 ult dig definem: 64, 128, ...)
- out TCCR0, r16 ; modo 2, toggle OC0, sem prescaler
- ldi r16, 0b00010000 ; programa OC0 (PORTB 4) como saída
- out DDRB, r16
- in r16, TIMSK ; autoriza interrupção do TC0, OCIE0
- ori r16, 2
- out TIMSK,r16
- sei ; autorização global de interrupções
- ret
- ; rotina de servico de interrupcao
- int_TC0:
- inc r0 ; r: registo definido; r++
- ; led on
- mov r17, r0
- cpi r17, 0b01100100 ; count: 100
- breq led_on
- ; led off
- mov r17, r0
- cpi r17, 0b11000000 ; count: 200
- breq led_off
- reti ; interrupt return
- ; programa principal
- main:
- ldi r16, 0x10
- out SPH, r16
- ldi r16, 0xFF
- out SPL, r16
- call inic
- aqui:
- jmp aqui
- led_on:
- ldi r17, 0b11111110
- out PORTA, r17
- reti
- led_off:
- clr r0
- ldi r17, 0b11111111
- out PORTA, r17
- reti
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement