Last active
December 29, 2015 11:58
-
-
Save jerivas/7666845 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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