MPLAB PIC 16f877a 8 entradas Anlogicas com Interrupcao
834 palavras
4 páginas
#include "xc.h"#include <stdlib.h>
#define _XTAL_FREQ 4000000
#pragma config FOSC = XT, WDTE = OFF, PWRTE = OFF, BOREN = OFF, LVP = OFF
#pragma config CPD = OFF, WRT = OFF, CP = OFF #define LED1 PORTBbits.RB0
#define BOTAO PORTBbits.RB7
//Variáveis Globais de Controle. unsigned char Display1[5]; char *Display2; unsigned int distance, time, VAR; int result; float result1; int result_temp; float result1_temp;
char i=0; char b = 0;
void adc_config(){ ADCON1bits.PCFG3 = 0; //Entrada como analógica Vref+ = Vdd | Vref- Vss ADCON1bits.PCFG2 = 0; //Entrada como analógica Vref+ = Vdd | Vref- Vss ADCON1bits.PCFG1 = 0; //Entrada como analógica Vref+ = Vdd | Vref- Vss ADCON1bits.PCFG0 = 0; //Entrada como analógica Vref+ = Vdd | Vref- Vss ADCON1bits.ADFM = 1; //Dados justificado a direita ADCON1bits.ADCS2 = 0; //TAD = 2ms | Fosc/8 em 4Mhz ADCON0bits.ADCS1 = 0; //TAD = 2ms | Fosc/8 em 4Mhz ADCON0bits.ADCS0 = 1; //TAD = 2ms | Fosc/8 em 4Mhz ADCON0bits.ADON = 1; //Liga módulo de conversão PIE1bits.ADIE = 1; //// Interrupção do conversor A/D Habilitada. PIR1bits.ADIF = 0; // Limpa a Flag da Interrupção da Conversão A/D.
}
void set_canalad(int ch2, int ch1, int ch0){ ADCON0bits.CHS2 = ch2; ADCON0bits.CHS1 = ch1; ADCON0bits.CHS0 = ch0;
}
void ler_ad(){ __delay_us(40); //aguarda um tempo para iniciar a conversão ADCON0bits.GO_DONE = 1; // inicia a conversão //while(GO_DONE); //verifica o fim da versão
}
void USARTInit(long BaudRate, int Mode)
{
int BR = 0;
// Cálculo do valor para o registrador SPBRG para uma determinada velocidade em bps. if (Mode == 0) //Cálculo para baixa velocidade. { BR = (_XTAL_FREQ / (64 * BaudRate)) - 1; SPBRG = BR; } else //Cálculo para baixa velocidade. { BR = (_XTAL_FREQ / (16 * BaudRate)) - 1; SPBRG = BR; }
// Configuração do Registrador TXSTA. TXSTAbits.CSRC = 1; // Seleção MASTER/SLAVE para o Modo Síncrono. TXSTAbits.TX9 = 0; // Transmição de Dados em 8 Bits.