Skip to content

Instantly share code, notes, and snippets.

@jerivas
Last active December 29, 2015 11:58
Show Gist options
  • Save jerivas/7666845 to your computer and use it in GitHub Desktop.
Save jerivas/7666845 to your computer and use it in GitHub Desktop.
// Manda datos del ADC por el EUSART
// Entrada analogica en RA0
// David Escobar
// Angel Moreno
// Eduardo Rivas
#include "xc.h"
#include "stdlib.h"
#include "p18f4550.h"
//Directivas para activar los bits de configuracion
#pragma config FOSC = INTOSCIO_EC //Oscilador Interno, Puerto A RA6 activo,
#pragma config WDT = OFF //Watchdog timer apagado
#pragma config PBADEN = OFF //Parte baja del puerto B digitales
#pragma config MCLRE = ON //MCLRE Disponible
#pragma config DEBUG = ON //Modo de depuracion disponible
#pragma config LVP = OFF //Fuente de ISCP apagada
//Variables globales
unsigned char ascii_buffer[4] = '0'; //Representación ASCII de un entero
unsigned char i = 0; //Contador
unsigned int adc = 0; //Valor analogico ajustado
//Configuracion
void config() {
// Configurar OSCCON F=8MHz
IRCF0 = 1;
IRCF1 = 1;
IRCF2 = 1;
//Inicializar el ADC
ADCON0 = 0; //ADC en canal 0, apagado
ADCON1 = 0b00001110; //RA0 como entrada angalógica
ADCON2 = 0b10000000; //Tiempo de adquisición 0TAD y velocidad de Fosc/2
ADIE = 0; //Deshabilitar interrupción del ADC
ADON = 1; //Encender ADC
//Configurar EUSART
SPBRGH = 0; //FOSC/[16 (n + 1)]
SPBRG = 51; //((8000000/9600)/16)-1 = (833.33/16)-1 = 51
TXSTA = 0x2C;
RCSTA = 0x90;
BAUDCON = 0x00;
//Inicializar los puertos
PORTA = 0; //Limpiar PORTA
LATC = 0; //Limpiar PORTC
TRISA0 = 1; //PORTA0 como entrada (analogico)
TRISC6 = 0; //Tx como salida
TRISC7 = 1; //Rx como entrada
}
//Programa principal
void main() {
config(); //Ejecutar configuracion
while(1){ //Ejecutar perpetuamente
GO = 1; //Iniciar conversion
while(GO); //Esperar que termine la conversion
adc = ADRES*49/100; //Convertir a un valor entre 0 y 500
itoa(ascii_buffer, adc, 10); //Convertir el valor a cadena ASCII
if (adc < 100){ //Enviar '0' de relleno si es menor que 100
TXREG = '0';
while(!TRMT);
}
if (adc < 10){ //Enviar '0' de relleno si es menor que 10
TXREG = '0';
while(!TRMT);
}
i = 0;
while(ascii_buffer[i]){ //Ejecutar hasta hallar 0x00 (fin de cadena)
TXREG = ascii_buffer[i]; //Mandar byte por EUSART
while(!TRMT); //Esperar que termine la transmision
i++; //Pasar al siguient caracter
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment