You are on page 1of 11

********************************************************************************

*******
1)
PROGRAMA PARA RESETAR O MICRO E PISCAR O LED CASO NO PRESSIONE O BOTO DA PLA
CA
********************************************************************************
*******
#include "SanUSB1.h"
#pragma interrupt interrupcao //Tem que estar aqui ou dentro do firmware.c
void interrupcao(){
}
void main(){
clock_int_4MHz();
while(1)
{
if(!entrada_pin_e3){Reset();}//pressionar o boto para gravao
inverte_saida(pin_b7);
tempo_ms(500);
}
}
********************************************************************************
*******
1.1) Elaborem umprograma para piscar o LED do pino b7 uma vez a cada 1 segundo,
o LED
do pino b6 duas vezes a cada 0,5 segundos e o LED do pino b5 trs vezes a cada 0,1
segundos,
utilizando apenas as funes vistas at o momento.
Aps isto deve ser passado aos alunos o conceito de lao de repetio finito, como o
exemplo a seguir que usa a funo FOR.
********************************************************************************
*******

#include "SanUSB1.h"
#pragma interrupt interrupcao //Tem que estar declarado no firmware.c
void interrupcao(){ }
void main(){
int x;
clock_int_4MHz();
while (1){//LAO INFINITO
nivel_alto(pin_b7); //SAIDA ALTA NO PINO B7 - LED ACENDE
tempo_ms(1000); //ATRASO 0,5 SEG
nivel_baixo(pin_b7); //SAIDA BAIXA NO PINO B7 - LED APAGA
tempo_ms(1000); //ATRASO 0,5 SEG
for (x=0;x<2;x++) {//LAO DE REPETIO POR 2 VEZES
nivel_alto(pin_b6); //SAIDA ALTA NO PINO B6 - LED ACENDE
tempo_ms(500); //ATRASO 0,5 SEG
nivel_baixo(pin_b6); //SAIDA BAIXA NO PINO B6 - LED APAGA
tempo_ms(500); //ATRASO 0,5 SEG
}
for (x=0;x<3;x++){//LAO DE REPETIO POR 3 VEZES
nivel_alto(pin_b5); //SAIDA ALTA NO PINO B5 - LED ACENDE
tempo_ms(100); //ATRASO 0,5 SEG
nivel_baixo(pin_b5); //SAIDA BAIXA NO PINO B5 - LED APAGA
tempo_ms(100); //ATRASO 0,5 SEG

} } }

********************************************************************************
2)
LED EXTERNO PISCAR E APAGAR
********************************************************************************
#include "SanUSB1.h"
#pragma interruptinterrupcao //Tem que estar declarado no firmware.c
void interrupcao(){}
void main(){
clock_int_4MHz();
if(entrada_pin_a1==0){
nivel_alto(pin_b6);
tempo_ms(2500);
nivel_baixo(pin_b6);
tempo_ms(2500);
}
}
********************************************************************************
3)
PISCAR 10 VEZES UM LED EXTERNO E DEPOIS APAGAR
********************************************************************************
*********
COM WHILE
*********
#include "SanUSB1.h"
#pragma interruptinterrupcao //Tem que estar declarado no firmware.c
void interrupcao(){}
void main(){
int a;

clock_int_4MHz();
while (1){
if(entrada_pin_a1==0){
a=0;
while (a<=9){
nivel_alto(pin_b6);
tempo_ms(500);
nivel_baixo(pin_b6);
tempo_ms(500);
a++;
}
}
}
}
********
COM FOR
********
#include "SanUSB1.h"
#pragma interruptinterrupcao //Tem que estar declarado no firmware.c
void interrupcao(){}
void main(){
int a;
clock_int_4MHz();
while (1){
if(entrada_pin_a1==0){
for (a=0;a<=9;a++){
nivel_alto(pin_b7);
tempo_ms(500);
nivel_baixo(pin_b7);
tempo_ms(500);
}
}
}
}
********************************************************************************
4)
PISCAR INFINITAMENTE UM LED EXTERNO
********************************************************************************
#include "SanUSB1.h"
#pragma interruptinterrupcao //Tem que estar declarado no firmware.c
void interrupcao(){}
void main(){
int a;
clock_int_4MHz();
while (1){
if(entrada_pin_a1==0){
a=0;

while (a>=0){
nivel_alto(pin_b6);
tempo_ms(500);
nivel_baixo(pin_b6);
tempo_ms(500);
a++;
}
}
}
}
********************************************************************************
5)
PISCAR INFINITAMENTE AO APERTAR UM BOTO E DESLIGAR AO APERTAR OUTRO BOTO
********************************************************************************
#include "SanUSB1.h"
#pragma interruptinterrupcao //Tem que estar declarado no firmware.c
void interrupcao(){}
int a=0;
void main(){
clock_int_4MHz();
while (1){
//while(a==0){}
if(!entrada_pin_b1){
a=1;
while (a==1){
nivel_alto(pin_b6);
tempo_ms(200);
nivel_baixo(pin_b6);
tempo_ms(200);
if (!entrada_pin_b2){
a=0;
nivel_baixo(pin_b6);
}
}
}
}
}
********************************************************************************
6)
PROGRAMA APERTA UM BOTO ACENDE UM LED E APERTA OUTRO BOTO PARA APAGAR.
********************************************************************************
#include "SanUSB1.h"
#pragma interrupt interrupcao
void interrupcao(){}
int b6;
void main(){
clock_int_4MHz();
while(1){
if(entrada_pin_a1==0){
nivel_alto(pin_b6);

linha:
if(entrada_pin_a2==0){
nivel_baixo(pin_b6);
}
else
{
goto linha;
}
}
}
}
********************************************************************************
7)
SEMAFORO
********************************************************************************
#include "SanUSB1.h"
#pragma interrupt interrupcao //Tem que estar aqui ou dentro do firmware.c
void interrupcao(){
}
void main(){
int a;
clock_int_4MHz();
while(1)
{
a=0;
while(a<=1) {
nivel_alto(pin_b7);
tempo_ms (5000);
nivel_baixo(pin_b7);
nivel_alto(pin_b5);
tempo_ms (2000);
nivel_baixo(pin_b5);
nivel_alto(pin_b3);
tempo_ms (3000);
nivel_baixo(pin_b3);
a++;
}
}
}
********************************************************************************
8)
DISPLAY CONTANDO 0 a 99 AUTOMTICO
********************************************************************************
#include "SanUSB1.h"
#pragma interrupt interrupcao //Tem que estar aqui ou dentro do firmware.c
void interrupcao(){ }
#byte port_b = 0xf81;//REGISTRO PORTA B
int setseg[] ={0x40, 0x79, 0x24, 0x30, 0x19, 0x12, 0x02, 0x78, 0x00, 0x10};//num
eros de 0 a 9 em hexadecimal para display ANODO COMUM
int i,z,dezena,unidade;
void main(){

clock_int_4MHz();
PORTB= 0b00000000;// Define os pinos da porta B como sada
TRISB=0x00; // porta B como sada.
while (1){
for(i=0;i<99;i++)//CONTA DE 00 A 99
{
for(z=0;z<15;z++){ //REPETE CADA NUMERO POR 15 VEZES POIS O DELAY CURTO E NAO DA
RIA TEMPO VER!
dezena=i/10;//PEGA SOMENTE O VALOR INTEIRO
//SE O NUMERO FOR 27, DEZENA=2 E UNIDADE=7
unidade=i%10;//PEGA SOMENTE O RESTO
nivel_alto(pin_a0); //SELECIONA O PRIMEIRO DISPLAY. OS DISPLAY NO FUNCIONAM SIMUL
TANEOS.
nivel_baixo(pin_a1);
PORTB=setseg[dezena]; //MOSTRA O VALOR DE DEZENA
tempo_ms(5);
nivel_alto(pin_a1); //SELECIONA O SEGUNDO DISPLAY
nivel_baixo(pin_a0);
PORTB=setseg[unidade];//MOSTRA O VALOR DE UNIDADE
tempo_ms(5);
}
}
}
}
********************************************************************************
9)
CONTA ATE 20 AUTOMATICAMENTE PRA NO 20 E RESETA COM UM BOTO
********************************************************************************
#include "SanUSB1.h"
#pragma interrupt interrupcao //Tem que estar aqui ou dentro do firmware.c
void interrupcao(){
}
#byte port_b = 0xf81;
int setseg[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10}; //Vetor com
10 //elementos que desenham de 0 a 9
int i, z, r=0, dezena, unidade; //ndice dezena,unidade (ponteiro)
void main ()
{
clock_int_4MHz();
PORTB= 0b00000000;
TRISB=0x00; // porta B como sada.
while(1)
{
if(entrada_pin_c0==0){
for(i=0;i<21;i++){
for(z=0;z<20;z++){
dezena=i/10; //dezena recebe o nmero inteiro da diviso por 10
unidade=i%10; //unidade recebe o resto da diviso por 10
nivel_alto(pin_a0); //pin_a0 aciona transistor do comum das dezenas
nivel_baixo(pin_a1);
//pin_a3 aciona transistor do comum das unidades
PORTB = setseg[dezena]; //A porta B recebe o desenho do nmero das dezenas apontad
o pela //varivel dezena

tempo_ms(10);
nivel_alto(pin_a1); //selecionei a unidade
nivel_baixo(pin_a0);
PORTB = setseg[unidade]; //A porta B recebe o desenho do nmero das unidades apont
ado //pela varivel unidade
tempo_ms(10);
r=0;
}
}
while (r==0){
nivel_alto(pin_a0); //pin_a0 aciona transistor do comum das dezenas
nivel_baixo(pin_a1);
//pin_a3 aciona transistor do comum das unidades
PORTB = setseg[dezena]; //A porta B recebe o desenho do nmero das dezenas apontad
o pela //varivel dezena
tempo_ms(10);
nivel_alto(pin_a1); //selecionei a unidade
nivel_baixo(pin_a0);
PORTB = setseg[unidade]; //A porta B recebe o desenho do nmero das unidades apont
ado //pela varivel unidade
tempo_ms(10);
if(entrada_pin_c1==0){
r=1;
i=0;
nivel_baixo(pin_a0);
nivel_baixo(pin_a1);
}
}
}
}
}
********************************************************************************
10)
CONTAR DE 0 A 20 PRESSIONANDO O BOTO E RESETA A QUALQUER MOMENTO
********************************************************************************
#include "SanUSB1.h"
#pragma interrupt interrupcao //Tem que estar aqui ou dentro do firmware.c
void interrupcao(){
}
#byte port_b = 0xf81;
int setseg[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10}; //Vetor com
10 //elementos que desenham de 0 a 9
int i, z, dezena, unidade; //ndice dezena,unidade (ponteiro)
void main ()
{
clock_int_4MHz();
PORTB= 0b00000000;
TRISB=0x00; // porta B como sada.
while(1)
{
if(entrada_pin_c1==0){i=0;}
if(entrada_pin_c0==0){

while(entrada_pin_c0==0) {}
i++;
if(i==21){i=0;}
}
dezena=i/10; //dezena recebe o nmero inteiro da diviso por 10
unidade=i%10; //unidade recebe o resto da diviso por 10
nivel_alto(pin_a0); //pin_a0 aciona transistor do comum das dezenas
nivel_baixo(pin_a1);
//pin_a3 aciona transistor do comum das unidades
PORTB = setseg[dezena]; //A porta B recebe o desenho do nmero das dezenas apontad
o pela //varivel dezena
tempo_ms(10);
nivel_alto(pin_a1); //selecionei a unidade
nivel_baixo(pin_a0);
PORTB = setseg[unidade]; //A porta B recebe o desenho do nmero das unidades apont
ado //pela varivel unidade
tempo_ms(10);
}
}
********************************************************************************
11)
DISPLAY DE 7 SEGMENTOS INICIALIZA COM 20 E DECRESCE
********************************************************************************
#include "SanUSB1.h"
#pragma interrupt interrupcao //Tem que estar aqui ou dentro do firmware.c
void interrupcao(){
}
int setseg[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10}; //Vetor com
10 //elementos que desenham de 0 a 9
int i=20, z, dezena, unidade; //ndice dezena,unidade (ponteiro)
void main ()
{
clock_int_4MHz();
PORTB= 0b00000000;// Define os pinos da porta B como sada
TRISB=0x00; // porta B como sada.
while(1)
{
if(!entrada_pin_c0){ //gira esquerda
while(!entrada_pin_c0) { } //enquanto boto estiver pressionado, no faz nada.
i--;//quando soltar boto, incrementa contagem
if(i==0) { i=20;} //se chegar no limite, reinicia contagem
}
// for(z=0;z<20;z++){
dezena=i/10; //dezena recebe o nmero inteiro da diviso por 10
unidade=i%10; //unidade recebe o resto da diviso por 10
nivel_alto(pin_a0); //aciona o a0 das dezenas
nivel_baixo(pin_a1);
//pin_a3 aciona transistor do comum das unidades
PORTB = setseg[dezena]; //A porta B recebe o desenho do nmero das dezenas apontad
o pela //varivel dezena
tempo_ms(10);
nivel_alto(pin_a1); //aciona o a1 das unidades

nivel_baixo(pin_a0);
PORTB = setseg[unidade]; //A porta B recebe o desenho do nmero das unidades apont
ado //pela varivel unidade
tempo_ms(10);
}
}
********************************************************************************
12)
DISPLAY DE 7 SEGMENTOS PARA DECREMENTAR AUTOMATICAMENTE
********************************************************************************
#include "SanUSB1.h"
#pragma interrupt interrupcao //Tem que estar aqui ou dentro do firmware.c
void interrupcao(){
}
int setseg[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10}; //Vetor com
10 //elementos que desenham de 0 a 9
int i=20, z, dezena, unidade; //ndice dezena,unidade (ponteiro)
void main ()
{
clock_int_4MHz();
PORTB= 0b00000000;// Define os pinos da porta B como sada
TRISB=0x00; // porta B como sada.
while(1)
{
//if(!entrada_pin_c0){ //gira esquerda
// while(!entrada_pin_c0) { } //enquanto boto estiver pressionado, no faz nada.
i--;//quando soltar boto, incrementa contagem
if(i==0) { i=20;} //se chegar no limite, reinicia contagem
for(z=0;z<20;z++){
dezena=i/10; //dezena recebe o nmero inteiro da diviso por 10
unidade=i%10; //unidade recebe o resto da diviso por 10
nivel_alto(pin_a0); //aciona o a0 das dezenas
nivel_baixo(pin_a1);
//pin_a3 aciona transistor do comum das unidades
PORTB = setseg[dezena]; //A porta B recebe o desenho do nmero das dezenas apontad
o pela //varivel dezena
tempo_ms(10);
nivel_alto(pin_a1); //aciona o a1 das unidades
nivel_baixo(pin_a0);
PORTB = setseg[unidade]; //A porta B recebe o desenho do nmero das unidades apont
ado //pela varivel unidade
tempo_ms(10);
}
}
}
********************************************************************************
13)
ESCREVER SENAI AS LETRAS MUDAM AO PRESSIONAR UM BOTO E RESETA POR OUTRO
********************************************************************************
#include "SanUSB1.h"
#pragma interrupt interrupcao //Tem que estar aqui ou dentro do firmware.c
void interrupcao(){
}

int setseg[5]={0b00010010, 0b00000110, 0b00101011, 0b00001000, 0b11111001}; //Ve


tor com 5 elementos
int i=0, z, dezena, unidade; //ndice dezena,unidade (ponteiro)
void main ()
{
clock_int_4MHz();
PORTB= 0b00000000;// Define os pinos da porta B como sada
TRISB=0x00; // porta B como sada.
while(1)
{
if(!entrada_pin_c1){i=0;}
if(!entrada_pin_c0){ //gira esquerda
while(!entrada_pin_c0) { } //enquanto boto estiver pressionado, no faz nada.
i++; //quando soltar boto, incrementa contagem
if(i==5) { i=0;} //se chegar no limite, reinicia contagem
}
unidade=i%10; //unidade recebe o resto da diviso por 10
nivel_alto(pin_a1); //aciona o a1 das unidades
nivel_baixo(pin_a0);
PORTB = setseg[unidade]; //A porta B recebe o desenho do nmero das unidades apont
ado //pela varivel unidade
tempo_ms(10);
}
}
********************************************************************************
14)
NOME SENAI AUTOMTICO
********************************************************************************
#include "SanUSB1.h"
#pragma interrupt interrupcao //Tem que estar aqui ou dentro do firmware.c
void interrupcao(){
}
int setseg[5]={0b00010010, 0b00000110, 0b00101011, 0b00001000, 0b11111001}; //Ve
tor com 10 //elementos que desenham de 0 a 9
int i=0, z, dezena, unidade; //ndice dezena,unidade (ponteiro)
void main ()
{
clock_int_4MHz();
PORTB= 0b00000000;// Define os pinos da porta B como sada
TRISB=0x00; // porta B como sada.
while(1)
{
if(!entrada_pin_c1){i=0;}
i++;//quando soltar boto, incrementa contagem
if(i==5) { i=0;} //se chegar no limite, reinicia contagem
for(z=0;z<100;z++){
unidade=i%10; //unidade recebe o resto da diviso por 10
nivel_alto(pin_a1); //aciona o a1 das unidades
nivel_baixo(pin_a0);
PORTB = setseg[unidade]; //A porta B recebe o desenho do nmero das unidades apont
ado //pela varivel unidade
tempo_ms(10);
}
}
}

You might also like