Ir ao conteúdo

Programação de microcontroladores PIC em C!


gerab

Posts recomendados

Postado

Programação de microcontroladores PIC em C!

Por favor me ajudem... estou ficando louco...

Todo o código abaixo funciona, menos a parte do conversor A/D...

 
#include <16f676.h> // Arquivo com instruções do PIC16F648
#device adc=8 // Inidica quantos Bits tem AD
#fuses INTRC_IO, NOWDT, NOPROTECT, PUT, BROWNOUT, NOMCLR
#use delay(clock=4000000)
char OP1, OP3, OP2, EST =0;
int valor;
void ligaOP1()
{
while(OP1)
{
EST=0;
if(valor<51) output_c(0b00001); // Verifica tensão para OP1
if(valor>=51 && valor<102) output_c(0b00010);
if(valor>=102 && valor<153) output_c(0b00110);
if(valor>=153 && valor<204) output_c(0b01110);
if(valor>=204 && valor<=255) output_c(0b11110);
output_low(PIN_A5); // Desliga LED indicando uso da OP3
output_high(pin_C0); // Liga LED indicando uso do OP1
output_high(PIN_A0); // Liga Relé do OP1
write_EEPROM(10,1);
if(input(PIN_A3)==1) EST=1;
if(input(PIN_A4)==1)
{
OP1=0;
}
}
}
void ligaOP2()
{
if(EST==0)
{
write_eeprom(10,2);
while(OP2)
{
output_high(pin_C0); // Liga LED indicando uso do OP1
output_high(PIN_A5); // Liga LED indicador do uso da OP3
output_low(PIN_A0); // Desliga Relé do OP1
delay_ms(2000); // Espera x milisegundos
OP1=1; // Faz ativar OP1
OP2=0; // Desliga Modo OP2
}
}
}

void ligaOP3()
{
while(OP3)
{
EST=0;
output_low(PIN_A0); // Desliga Relé do OP1
output_high(PIN_A5); // Liga LED indicador do uso da OP3
output_low(PIN_C0); // Desliga LED indicador do uso do OP1
write_eeprom(10,3);
if(input(PIN_A2)==1 || input(PIN_A3)==1)
{
OP3=0;
}
}
}
void main()
{
set_tris_a( 0b011110 ); // Setando saídas e entradas
output_low(pin_a0); // Desligando Relé
output_low(pin_a5); // Desligando LED Indicador OP1
setup_comparator( NC_NC_NC_NC ); // Desabilita os comparadores
output_c(0b00000000); //Desligando toda porta C
setup_adc_ports( SAN1 ); // Habilita entrada analógica para A1
setup_adc( ADC_CLOCK_INTERNAL ); // Habilita conversor A/D
set_adc_channel(1); // Seleciona Canal do ADC
delay_us(10); // Espera 10 microsegundos
valor=read_adc(); // Coloca a leitura de A1 em "valor"
if(read_eeprom(10)==1) OP1=1; // ******************************************
if(read_eeprom(10)==2) {OP2=1; EST=0;} // Verifica se existe memória da ultima opção
if(read_eeprom(10)==3) OP3=1; // ******************************************
while(TRUE)
{
if(input(PIN_A2)==1) {OP1=1; OP3=0; OP2=0;}
if(input(PIN_A3)==1) {OP1=0; OP3=0; OP2=1;}
if(input(PIN_A4)==1) {OP1=0; OP3=1; OP2=0;}
ligaOP1();
ligaOP2();
ligaOP3();
}
}

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!