Já consegui por o avr a piscar o led, mas tive de usar o programa eproms(feito por um users dum forum a 4 anos), e gravar esse hex na flash.
Quando tiver algum tempo vou ver se faço um pequeno tutorial
tenho este programa mas tem um erro só que nao sei qual, ando as voltas e nao consigo descobrir é se alguem desse uma dica agradecia
#include "avr.h"
class LedTI4s
{
public:
/* Referência ao registrador */
AT90S* AT90S8515;
/* Contador para o tempo */
unsigned char contador;
/* Handler da interrupção 0 (Botão)*/
void IRQ0 (void)
{
if(AT90S8515->mcucr == 0x0A) {
AT90S8515->timsk = 0x02;
AT90S8515->mcucr = 0x0F;
} else {
contador = 61;
AT90S8515->timsk = 0x00;
AT90S8515->mcucr = 0x0A;
AT90S8515->portb = 0xFF;
}
}
/* Handler da interrupção 1 (Botão)*/
void IRQ1 (void)
{
IRQ0();
}
/* Handler da interrupção 7 (Timer)*/
void IRQ7 (void)
{
contador--;
if(contador == 0)
AT90S8515->portb = 0x00;//acende os leds
}
/* Inicailiza os registradores e o objeto para o registrador. */
void inicializa(void)
{
AT90S8515 = reinterpret_cast<AT90S *>(0);
AT90S8515->ddrb = 0xFF;//configura porta B como saída
AT90S8515->ddrd = 0x00;//configura porta D como entrada
AT90S8515->tccr0 = 0x05;//prescaler 1024
AT90S8515->portb = 0xFF;//apaga os leds
AT90S8515->sreg = 0x80;//habilita as interrupções
AT90S8515->gimsk = 0xC0;//habilita as interrupções
AT90S8515->timsk = 0x00;//desabilita timer 0
AT90S8515->mcucr = 0x0A;
contador = 61;
}
};
LedTI4s led;
void __vector_1 (void)
{
led.IRQ0();
}
void __vector_2 (void)
{
led.IRQ1();
}
void __vector_7 (void)
{
led.IRQ7();
}
int main(void)
{
led.inicializa();
while(1);
return 0;
}