Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* Partindo da situação em que os LEDs (D1 ... D8) se encontram apagados, pretende-se que, ao accionar SW1, seja feito o sequenciamento dos 8 LEDs D1, D2, ..., D8 (um LED activo de cada vez). Depois de D8 ser activado a sequência deve recomeçar com D1. A activação dos diferentes LEDs deve ser feita de 500 em 500 ms. A activação de SW6 permite colocar o sistema na situação inicial (LEDs todos apagados). */
- /*
- Tc - tempo ciclo
- 1Tc = 1 / f = 1 / 16MHz = 62.5ns
- P -> for (i)
- M -> for (j)
- N -> for (k)
- P*[M*[(N*x*tc)+y*Tc]+z*Tc]
- ciclo for (6 ciclos):
- ldi ... (1 ciclo)
- inc ... (1 ciclo)
- cpi ... (2 ciclos)
- brne ... (2 ciclos)
- */
- #include "C:\Program Files\WinAVR-20080610\avr\include\avr\io.h"
- int main(void) {
- /* inicializacao das variaveis */
- unsigned char sw;
- /* PORTA entrada */
- DDRA = 0x00;
- PORTA = 0x00;
- /* PORTC saida */
- DDRC = 0xFF;
- PORTC = 0xFF;
- /* vars */
- int the_led = 0;
- int flag = 0;
- /* rotina */
- while(1) {
- flag = 0;
- PORTC = 0xFF; // leds apagados
- /* switch 1 activo */
- sw = PINA;
- if (sw == 0xFE) {
- /* */
- while (flag == 0) {
- /* ciclo led */
- for (the_led = 1; the_led <= 9; the_led++) {
- /* 500ms with 8bits */
- /* P*[M*[(N*x*tc)+y*Tc]+z*Tc] */
- /* simula uma limitacao de 8 bits */
- /* P = 5 ciclos */
- for (int i = 0; i <= 20; i++) {
- /* M = 5 ciclos */
- for (int j = 0; j <= 255; j++) {
- /* N = 5 ciclos + 6 ciclos */
- for (int k = 0; k <= 255; k++) {
- /* reset */
- /* 1 ciclo */
- sw = PINA;
- /* 2 ciclos */
- if (sw == 0xDF) {
- /* 1 ciclo */
- flag = 1;
- /* 2 ciclos */
- goto goto_point;
- }
- }
- }
- }
- goto_point:
- /* after 500ms */
- switch(the_led) {
- case 1: PORTC = 0xFF;break; // 0b11111111
- case 2: PORTC = 0x7F;break; // 0b01111111
- case 3: PORTC = 0xBF;break; // 0b10111111
- case 4: PORTC = 0xDF;break; // 0b11011111
- case 5: PORTC = 0xEF;break; // 0b11101111
- case 6: PORTC = 0xF7;break; // 0b11110111
- case 7: PORTC = 0xFB;break; // 0b11111011
- case 8: PORTC = 0xFD;break; // 0b11111101
- case 9: PORTC = 0xFE;break; // 0b11111110
- }
- }
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement