Você está na página 1de 22

Capitulo 2

1-) 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 da
porta 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. O
tempo que os leds ficam ligados deve ser igual ao tempo que ficam desligados e quando
um led estiver ligado o outro deve
estar 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 uma
freqncia 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 um
programa para reproduzir em um buzzer conectado no pino 0 da porta B o sinal SOS.
O tempo de durao dos bips
curtos deve ser de 100 ms e os bips longos 200 ms. O tempo ligado deve ser igual ao
tempo desligado. O tempo entre
cada 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);|
portb = 0;

4X

delay_ms(500);|

delay_ms(4500);

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

delay_ms(2750);

}
}

6X

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);
porta.f0 = 0;
portb.f0 = 0;
delay_ms(125);
delay_ms(3000);
}
}

5x

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;
portb=0;
delay_ms(166);

delay_ms(3000);
}

3X

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 4
15-) Dado o circuito da figura 9, faa um programa para piscar 3 vezes, simultaneamente,
os leds 0 e 2 a uma
freqncia 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 no
pino 0 da porta A. Faa um programa que coloque no pino 0 da porta B, durante um
segundo o mesmo nvel lgico do
pino 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 mais
1 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 da
porta 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 4
da 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 o
funcionamento do circuito.
20-) Faa um programa para ligar os 8 leds conectados na porta B de um
microcontrolador PIC na seguinte

sequncia: 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 e
liga 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 2
e 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 por
diante 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 por
diante 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 6
a 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 no
display 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, gira
180 em sentido contrrio com passos de 45 e durao de 500 ms, pra, espera 5s, gira
novamente o eixo 180 no
sentido 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 de
corrente contnua com excitao independente. A velocidade do motor proporcional ao
valor mdio da tenso
aplicada 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 5
1-) 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 nenhuma
chave 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 estiver
aberta 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 tempo
desligado, 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 ou
as 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 1estiver
fechada e a chave 2 ou a chave 3 estiver fechada. No se esquea que o operador AND
tem prioridade em relao
ao 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 abertas
e 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 assim
por 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 e
depois 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
Delay_ms(500)
}}
co

6X