Exercicios Resolvidos Microcontroladores PIC

Embed Size (px)

DESCRIPTION

Exercicios resolvidos

Citation preview

Capitulo 21-) Escreva um programa para acionar o led conectado no pino 0 da porta B da figura 9 de acordo com a seguinte lgica:a-) Pisca 4 vezes o led a uma freqncia de 1 Hz,b-) Espera 5 segundos,c-) Pisca 6 vezes o led a uma freqncia de 2 Hz,d-) Espera 3 segundos,e-) Voltar para o item a.OBS: O tempo ligado igual ao tempo desligado. Comente cada linha do programa.

2-) Faa o desenho de um microcontrolador, alimentado com uma tenso de 5 V, que tem um led ligado no pino 0 daporta B e um led ligado no pino 0 da porta A. Os leds devem ligar quando tiver nvel lgico 1 no referido pino.

3-) Escreva um programa para fazer com que os leds do exerccio anterior pisquem a uma freqncia de 2 Hz cada um. Otempo que os leds ficam ligados deve ser igual ao tempo que ficam desligados e quando um led estiver ligado o outro deveestar desligado. Comente cada linha do programa.

4-) Escreva um programa para acionar os leds do circuito do exerccio 2 de acordo com a seguinte lgica.a-) Pisca 3 vezes o led da porta A a uma freqncia de 1/3 Hz.b-) Espera 1 segundo.c-) Pisca 3 vezes o led da porta B a uma freqncia de 1/3 Hz.d-) Espera 1 segundo.e-) Pisca 5 vezes os dois leds simultaneamente a uma freqncia de 4 Hz.f-) Espera 2 segundos.g-) Volta para o item a.OBS: O tempo ligado igual ao tempo desligado. Comente cada linha do programa.

5-) Escreva um programa para acionar os leds do circuito do exerccio 2 de acordo com a seguinte lgica.a-) Pisca 4 vezes alternadamente os leds das portas A e B (quando um est ligado o outro est desligado) a umafreqncia de 0,2 Hz.b-) Espera 1 segundo.c-) Pisca 3 vezes simultaneamente os leds das portas A e B a uma freqncia de 3 Hz.d-) Espera 3 segundo.e-) Volta para o item a.OBS: O tempo ligado igual ao tempo desligado. Comente cada linha do programa.

6-) Em cdigo Morse o sinal SOS produzido atravs de 3 bips curtos, 3 bips longos e 3 bips curtos novamente. Faa umprograma para reproduzir em um buzzer conectado no pino 0 da porta B o sinal SOS. O tempo de durao dos bipscurtos deve ser de 100 ms e os bips longos 200 ms. O tempo ligado deve ser igual ao tempo desligado. O tempo entrecada sequncia de 3 bips deve ser de 400 ms. Entre 1 SOS e outro, esperar 1,5 s. Comente cada linha do programa.

1) void main() { trisb = 0; while(1) { portb = 1; | delay_ms(500);| 4X portb = 0; | delay_ms(500);| delay_ms(4500);

portb = 1; delay_ms(250); portb = 0; 6X delay_ms(250);

delay_ms(2750);

} }

3)void main() { trisb=0; trisa=0; while(1) { portb=0; delay_ms(250); porta=1; delay_ms(250); portb=1; delay_ms(250); porta=0; delay_ms(250); } }

4) void main() { trisb=0; trisa=0; while(1) { Porta.f0 = 1; delay_ms(1500); 3X porta.f0 = 0; delay_ms(1500);delay_ms(1000); Portb.f0 = 1; delay_ms(1500); 3X portb.f0 = 0; delay_ms(1500);delay_ms(1000); porta.f0 = 1; portb.f0 = 1; delay_ms(125); 5x porta.f0 = 0; portb.f0 = 0; delay_ms(125);delay_ms(3000); }}

5)void main() { trisb=0; trisa=0; while(1) { porta=1; portb=0; delay_ms(2500); 4X porta=0; portb=1; delay_ms(2500); delay_ms(1000);

porta=1; portb=1; delay_ms(166); porta=0; 3X portb=0; delay_ms(166); delay_ms(3000); }}

6)void main() { trisb=0; while(1) { portb=1; delay_ms(100); 3X portb=0; delay_ms(100);

delay_ms(400); portb=1; delay_ms(200); 3X portb=0; delay_ms(200);

delay_ms(400); portb=1; delay_ms(100); 3X portb=0; delay_ms(100); delay_ms(1500); }}

Capitulo 415-) Dado o circuito da figura 9, faa um programa para piscar 3 vezes, simultaneamente, os leds 0 e 2 a umafreqncia de 2 Hz, espera 3 segundos e pisca 4 vezes, alternadamente, os leds 1 e 3 a uma freqncia de 1 Hz,espera 2 segundos e recomea o ciclo. O tempo que cada led fica ligado igual ao tempo em que ele fica desligado.Faa o programa de duas formas:a-) Utilizando o acesso individual aos pinos da porta B.b-) Colocando na porta B um valor (em binrio, decimal ou hexadecimal) para ligar o led correto.

16-) Deseja-se comandar a ligao dos leds conectados nos pinos da porta B da figura 9 atravs da chave colocada nopino 0 da porta A. Faa um programa que coloque no pino 0 da porta B, durante um segundo o mesmo nvel lgico dopino 0 da porta A, espera 1 segundo e coloca no pino 1 da porta B o mesmo nvel lgico do pino 0 da porta A, espera mais1 segundo e repete para o pino 2 da porta B e assim sucessivamente, depois volta para o pino 0 da porta B.

17-) Dado o circuito da figura 10, faa um programa que coloque no pino 0 da porta B o mesmo nvel lgico presente no pino 0 daporta A, espera 1 segundo e coloca no pino 0 da porta B o mesmo nvel lgico do pino 1 da porta A, e assim por diante, at o pino 4da porta A quando ento volta para o pino 0 da porta A recomeando o ciclo.18-) Faa o programa que corresponde ao fluxograma da figura 11.

19-) Considere que o programa do exerccio anterior foi gravado em um microcontrolador PIC. Descreva ofuncionamento do circuito.

20-) Faa um programa para ligar os 8 leds conectados na porta B de um microcontrolador PIC na seguintesequncia: liga os leds 0 e 7, espera 1s, desliga os leds 0 e 7 e liga os leds 1 e 6, espera 1s, desliga os leds 1 e 6 eliga os leds 2 e 5, espera 1s, desliga os leds 2 e 5 e liga os leds 3 e 4, espera 1s, desliga os leds 3 e 4 e liga os leds 2e 5, espera 1s, desliga os leds 2 e 5 e liga os leds 1 e 6, espera 1s, desliga os leds 1 e 6 e reinicia o ciclo.

21-) Faa um programa para ligar os 8 leds conectados na porta B de um microcontolador PIC de forma seqencial,ou seja, liga o led 0, espera 1s, desliga o led 0 e liga o led 1, espera 1s, desliga o led 1 e liga o led 2 e assim pordiante at o led 7.

22-) Faa um programa para ligar os 8 leds conectados na porta B de um microcontolador PIC de forma seqencial,ou seja, liga o led 7, espera 1s, desliga o led 7 e liga o led 6, espera 1s, desliga o led 6 e liga o led 5 e assim pordiante at o led 7.Figura 10

23-) Combine os programas dos exerccios anteriores para fazer um seqencial que ligue os leds 0 a 7 e depois de 6a 1, novamente de 0 a 7 e assim por diante. Cada led deve ficar ligado durante 1 segundo.

24-) Dado o circuito abaixo, faa o programa de um contador de 0 a F. Cada algarismo deve ser apresentado nodisplay durante 1s.25-) Faa um programa que, inicialmente posicione o eixo de um motor de passo na posio mostrada na figura 6,aps 5s o eixo do motor deve girar 180 no sentido horrio com passos de 45 e durao de 250 ms, espera 3s, gira180 em sentido contrrio com passos de 45 e durao de 500 ms, pra, espera 5s, gira novamente o eixo 180 nosentido horrio com passos de 45 e durao de 250 ms e assim por diante.

26-) O pino 0 da porta B de um microcontrolador PIC16F628A utilizado para fazer o acionamento de um motor decorrente contnua com excitao independente. A velocidade do motor proporcional ao valor mdio da tensoaplicada no induzido do motor que est mostrada na figura abaixo. Sabendo-se que o perodo da forma de onda de 60 ms, escreva um programa que faa este motor girar a uma velocidade igual a 2/3 da velocidade mxima..14)a) void main() { trisb.f0 = 0; trisb.f1 = 0; trisb.f2 = 0; trisb.f3 = 0; while (1) { portb.f0 = 1; delay_ms(1000); portb.f0 = 0; portb.f1 = 1; delay_ms(1000); portb.f1 = 0; portb.f2 = 1; delay_ms(1000); portb.f2 = 0; portb.f3 = 1; delay_ms(1000); portb.f3 = 0; }}

b) void main() { trisb = 0; while(1) { portb = 1; delay_ms(1000); portb = 2; delay_ms(1000); portb = 4; delay_ms(1000); portb = 8; delay_ms(1000); }}

15)a)void main() {trisb.f0 = 0;trisb.f1 = 0;trisb.f2 = 0;trisb.f3 = 0;while(1){portb.f0 = 1;portb.f2 = 1;delay_ms(250);portb.f0 = 0;portb.f2 = 0;delay_ms(250);portb.f0 = 1;portb.f2 = 1;delay_ms(250);portb.f0 = 0;portb.f2 = 0;delay_ms(250);portb.f0 = 1;portb.f2 = 1;delay_ms(250);portb.f0 = 0;portb.f2 = 0;delay_ms(250);delay_ms(3000);

portb.f1 = 1;portb.f3 = 0;delay_ms(500);portb.f1 = 0;portb.f3 = 1;delay_ms(500);portb.f1 = 1;portb.f3 = 0;delay_ms(500);portb.f1 = 0;portb.f3 = 1;delay_ms(500);portb.f1 = 1;portb.f3 = 0;delay_ms(500);portb.f1 = 0;portb.f3 = 1;delay_ms(500);portb.f1 = 1;portb.f3 = 0;delay_ms(500);portb.f1 = 0;portb.f3 = 1;delay_ms(500);portb.f3 = 0;delay_ms(2000);}}

b) void main() { trisb = 0; while (1) { portb = 5; delay_ms(250); portb = 0; delay_ms(250); portb = 5; delay_ms(250); portb = 0; delay_ms(250); portb = 5; delay_ms(250); portb = 0; delay_ms(250); delay_ms(3000); portb = 2; delay_ms(500); portb = 8; delay_ms(500); portb = 2; delay_ms(500); portb = 8; delay_ms(500); portb = 2; delay_ms(500); portb = 8; delay_ms(500); portb = 2; delay_ms(500); portb = 8; delay_ms(500); portb = 0; delay_ms(2000); }}16)void main() {trisa.f0 = 1;trisb = 0;while (1){portb.f0 = porta.f0;delay_ms(1000);portb.f1 = porta.f0;delay_ms(1000);portb.f2 = porta.f0;delay_ms(1000);portb.f3 = porta.f0;delay_ms(1000);}}

17)void main() { trisa = 15; trisb = 0; while (1){ portb.f0 = porta.f0; delay_ms(1000); portb.f0 = porta.f1; delay_ms(1000); portb.f0 = porta.f2; delay_ms(1000); portb.f0 = porta.f3; delay_ms(1000); }}18)void main() {trisb = 0;trisa = 15;while(1){portb.f3 = porta.f0;delay_ms(1000);portb.f2 = porta.f1;delay_ms(1000);portb.f1 = porta.f2;delay_ms(1000);portb.f0 = porta.f3;delay_ms(1000);}}

20)void main() {trisb = 0;while (1){portb.f0 = 1;portb.f7 = 1;delay_ms(1000);portb.f0 = 0;portb.f7 = 0;portb.f1 = 1;portb.f6 = 1;delay_ms(1000);portb.f1 = 0;portb.f6 = 0;portb.f2 = 1;portb.f5 = 1;delay_ms(1000);portb.f2 = 0;portb.f5 = 0;portb.f3 = 1;portb.f4 = 1;delay_ms(1000);portb.f3 = 0;portb.f4 = 0;portb.f2 = 1;portb.f5 = 1;delay_ms(1000);portb.f2 = 0;portb.f5 = 0;portb.f1 = 1;portb.f6 = 1;delay_ms(1000);portb.f1 = 0;portb.f6 = 0;}

}

21)void main() {trisb = 0;while (1){portb.f0 = 1;delay_ms(500);portb.f0 = 0;delay_ms(500);portb.f1 = 1;delay_ms(500);portb.f1 = 0;delay_ms(500);portb.f2 = 1;delay_ms(500);portb.f2 = 0;delay_ms(500);portb.f3 = 1;delay_ms (500);portb.f3 = 0;delay_ms(500);portb.f4 = 1;delay_ms (500);portb.f4 = 0;delay_ms (500);portb.f5 = 1;delay_ms (500);portb.f5 = 0;delay_ms (500);portb.f6 = 1;delay_ms (500);portb.f6 = 0;delay_ms(500);portb.f7 = 1;delay_ms (500);portb.f7 = 0;delay_ms (500);}}

22)

trisb=0;while (1){portb.f7=1;delay_ms (500);portb.f7=0;delay_ms (500);portb.f6=1;delay_ms (500);portb.f6=0;delay_ms (500);portb.f5=1;delay_ms (500);portb.f5=0;delay_ms (500);portb.f4=1;delay_ms (500);portb.f4=0;delay_ms (500);portb.f3=1;delay_ms (500);portb.f3=0;delay_ms (500);portb.f2=1;delay_ms (500);portb.f2=0;delay_ms (500);portb.f1=1;delay_ms (500);portb.f1=0;delay_ms (500);portb.f0=1;delay_ms (500);portb.f0=0;delay_ms (500);

}}

23) void main() {trisb = 0;while(1){portb.f0=1;delay_ms(500);portb.f0=0;delay_ms(500);portb.f1=1;delay_ms(500);portb.f1=0;delay_ms(500);portb.f2=1;delay_ms(500);portb.f2=0;delay_ms(500);portb.f3=1;delay_ms(500);portb.f3=0;delay_ms(500);portb.f4=1;delay_ms(500);portb.f4=0;delay_ms(500);portb.f5=1;delay_ms(500);portb.f5=0;delay_ms(500);portb.f6=1;delay_ms(500);portb.f6=0;delay_ms(500);portb.f7=1;delay_ms(500);portb.f7=0;delay_ms(500);portb.f6=1;delay_ms(500);portb.f6=0;delay_ms(500);portb.f5=1;delay_ms(500);portb.f5=0;delay_ms(500);portb.f4=1;delay_ms(500);portb.f4=0;delay_ms(500);portb.f3=1;delay_ms(500);portb.f3=0;delay_ms(500);portb.f2=1;delay_ms(500);portb.f2=0;delay_ms(500);portb.f1=1;delay_ms(500);portb.f1=0;delay_ms(500);}

}

24)

void main(){trisb = 0;while(1){portb = 0b11101110;delay_ms (1000);portb = 0b00101000;delay_ms (1000);portb = 0b11001101;delay_ms (1000);}}

25)

Capitulo 51-) Escreva um programa para ligar o led da figura 1 se pelo menos uma das duas chaves for pressionada.

2-) Escreva um programa para ligar o led da figura 1 se apenas uma das chaves for pressionada. Se nenhumachave for pressionada ou, se as duas chaves forem pressionadas simultaneamente, o led deve ser desligado.Carregando-se o microcontrolador da figura 1 com este programa, o circuito funcionar como uma chave paralela.

3-) Escreva um programa, utilizando o operador lgico NOT (~), para ligar o led da figura 1 se a chave 0 estiveraberta e deslig-lo se a chave estiver fechada.

4-) Escreva um programa para ligar o led da figura 1 somente se as duas chaves estiverem abertas.

5-) Escreva um programa para desligar o led da figura 1 se apenas uma das chaves estiver fechada.

6-) Escreva um programa para piscar o led da figura 1 a uma frequncia de 2 Hz, com tempo ligado igual ao tempodesligado, utilizando o operador lgico NOT (~).

7-) Considere que foram colocadas mais duas chaves no circuito da figura 1, uma no pino 2 e outra no pino 3 da porta A.Faa um programa para ligar o led 0 se as chaves 0 e 1 estiverem fechadas ou as chaves 2 e 3 estiverem fechadas.

8-) Em relao ao circuito do exerccio anterior, faa um programa para ligar o led 0 se a chave 0 estiver fechada ouas chaves 1 e 2 estiverem fechadas ou a chave 3 estiver fechada.

9-) Em relao ao circuito do exerccio 7, faa um programa para ligar o led 0 se a chave 0 ou a chave 1estiverfechada e a chave 2 ou a chave 3 estiver fechada. No se esquea que o operador AND tem prioridade em relaoao operador OR.

10-) Em relao ao circuito do exerccio 7, faa um programa para ligar o led 0 se as chaves 0 e 2 estiverem abertase as chaves 1 e 3 estiverem fechadas. Sugesto: Construa a tabela verdade e utilize o mtodo soma de produtos.

11-) Refaa o exemplo 3 invertendo o sentido de ligao dos leds, ou seja, primeiro liga o led 7, depois o 6 e assimpor diante. Utilize o operador >> (deslocamento direita).

12-) Combine os programas do exemplo 3 e do exerccio anterior e faa um sequencial para ligar os leds 0 a 7 edepois de 6 a 1, novamente de 0 a 7, e assim por diante.1)void main() {trisb.f0 = 0;trisa = 6;portb = 0;cmcon = 7;while(1){portb.f0 = porta.f2|porta.f1;}

}

2)void main() { portb = 0; trisa = 6; trisb.f0 = 0; cmcon = 7; while (1) { portb.f0 = porta.f1^porta.f2; }}

3)void main() { trisb.f0 = 0; trisa = 6; portb = 0; cmcon = 7; while(1) { portb.f0 = ~porta.f1 & porta.f2; }}

4)void main() { trisb.f0 = 0; trisa = 6; portb = 0; cmcon = 7; while(1) { portb.f0 = ~porta.f1 & ~porta.f2; }}

5)void main() { trisb.f0 = 0; trisa = 6; portb = 0; cmcon = 7; while(1) { portb.f0 = ~(porta.f1 ^ porta.f2);}}

6)void main() { trisb.f0 = 0; trisa = 6; portb = 0; cmcon = 7; while(1) { portb.f0 = porta.f1; delay_ms(500); portb.f0 = ~porta.f1; delay_ms(500); }}

7)void main() { trisb.f0 = 0; trisa = 0b11110; portb = 0; cmcon = 7; while(1) { portb.f0 = ~(porta.f1&porta.f2) | ~(porta.f3&porta.f4) }

}

8)void main(){Trisb.f0 = 0;Trisa = 0b11110;Cmcon = 7;While (1)Portb = 0;{Portb.f0 = (porta.f0) | (porta.f1 & porta.f2) | (porta.f3)}}

9)Void main(){Trisb.f0 = 0;Trisa = 15;Cmcon = 7;While (1)Portb = 0;{Portb.f0 = (porta.f0 | porta.f1) & (porta.f2 | porta.f3)}}10)

Void main(){Trisb.f0 = 0;Trisa = 15;Cmcon = 7;Portb = 0;While (1){Portb = (~porta.f0 & ~porta.f2) & (porta.f1 & porta.f3)}}

11)Void main(){Trisb = 0;Portb = 0;While (1){Portb = 0b10000000;Delay_ms(500);

Portb = portb>>1 6XDelay_ms(500)

} }co