/* leds8.c -- acende ciclicamente 8 leds ligados na porta B -- com otimização O2 ocupa 156 bytes (gera instruçõe in e out -- para acessar a porta B); -- o tamanho do código não é alterado declarando curled como register -- nem eliminando a função ledon e colocando inline os seus 3 comandos -- Prof. Célio Guimarães 31 Agosto 2007 MC404A *************************************************************************************/ #include #include void longdelay(uint8_t ms) { while (ms!=0){ _delay_loop_2(0); // delays 262 ms on a 1Mhz CPU (from avr libc manual) --ms; } } void ledon(uint8_t curled) // função para ligar,dar um atraso e desligar o led corrente { PORTB= curled; // liga curled longdelay(4); // we want a delay of 262 msecs on a 4 MHZ CPU PORTB= 0; //desliga todos leds } int main(void) { uint8_t curled=0x80; //código do led a ser ligado DDRB= 0xff; // programa todos os pinos da porta B para saida ledon(curled); // liga inicialmente o led no pino 8 while (1){ // vamos ligar ciclicamente cada um dos leds while (curled != 0x01){ curled= curled>>1; // desloca o led a ligar para a direita ledon(curled); } while(curled != 0x80){ curled= curled<<1; // desloca o led a ligar para a esquerda ledon(curled); } }// fecha o laço infinito }