Sei sulla pagina 1di 7

//..................librerias......................................................................................

#include <xc.h>

#include <stdio.h>

#include <string.h>

//....................conf_fusibles................................................................................

#pragma config OSC = XT // Oscillator Selection bits (XT oscillator)

#pragma config PWRT = ON // Power-up Timer Enable bit (PWRT enabled)

#pragma config BOR = OFF // Brown-out Reset Enable bit (Brown-out Reset disabled)

#pragma config WDT = OFF // Watchdog Timer Enable bit (WDT disabled (control is placed on
the SWDTEN bit))

#pragma config LVP = OFF // Low Voltage ICSP Enable bit (Low Voltage ICSP disabled)

#define _XTAL_FREQ 4000000

//..............variables globales y prototipos de funcion.........................................................

unsigned char buffer[40];

unsigned int num=0;

void conf_puertos(void);

void ini_LCD(void);

void enable(void);

void dato_LCD(unsigned char dato);

void ins_LCD(unsigned char dato);

void write(unsigned char tam);

unsigned char A=0;

unsigned int x=0;


void conf_puertos(void);

void conf_ADC(void);

unsigned int conv_ADC(unsigned char canal);

//..............codigo principal................................................................

void main(void) {

//.........................conf perifericos.................................................

conf_puertos();

ini_LCD(); //inicializa la LCD

conf_puertos();

conf_ADC();

sprintf(buffer,"CONVERSOR AN/DIG");

write(strlen(buffer));

ins_LCD(192);

sprintf(buffer,"Universidad Ecci");

write(strlen(buffer));

for(num=0;num<10;num++){

__delay_ms(100);

//.........................bucle.............................................................

while (1) {

__delay_ms(1000);
ins_LCD(1);

sprintf(buffer,"Tem:",unsigned int conv_ADC);

write(strlen(buffer));

ins_LCD(192);

sprintf(buffer,"Gas:");

write(strlen(buffer));

x=conv_ADC(6);

LATD=x>>2;

LATC=x<<6;

__delay_ms(50);

x=conv_ADC(3);

LATD=x>>2;

LATC=x<<6;

//......................funciones............................................................

void conf_puertos(void) {

TRISD = 0x00; // puerto D de salida

LATD = 0; // limpia puerto D

PORTD = 0; // limpia puerto D

TRISA = 0xFF; // puerto A de salida

LATA = 0; // Limpia puerto A

PORTA = 0; // Limpia puerto A


ADCON1 = 0x06; //Puerto A digital

TRISB= 0x00;; // puerto B de entrada

LATB= 0x00;; // limpiar puerto B

PORTB= 0x00;; // limpiar puerto B

TRISE= 0x03;

LATE=0;

PORTE= 0;

//...................ini_LCD....................................

void ini_LCD (void)

__delay_ms(20); // delay 20 ms

PORTD=0x30; // VALOR DE INICIALIZACION

enable();

__delay_ms(5); // delay 5 ms

PORTD=0x30; // VALOR DE INICIALIZACION

enable();

__delay_ms(1); // delay 1 ms

PORTD=0x30; // VALOR DE INICIALIZACION

enable();

PORTD=0b00111000; // Function set 8 bits - 2 lineas - 5*8

enable();
PORTD=0b00001000; // display off

enable();

PORTD=0b00000001; // display clear

enable();

PORTD=0b00000110; // entry mode set - incrementa la posicion del cursor

enable();

PORTD=0b00001110; // display on/off control - LCD on - cursor on - blink off

enable();

//...................enable....................................

void enable (void)

PORTBbits.RB2=1; // enable en alto

__delay_ms(1);

PORTBbits.RB2=0; // enable en bajo

//...................dato....................................

void dato_LCD(unsigned char dato)

PORTBbits.RB1=0; //R/W en 0

PORTBbits.RB0=1; //RS en 1 (envia dato)

PORTD=dato; //dato a publicar


enable();

__delay_ms(2); //tiempo de ejecucion

//...................instruccion..................................

void ins_LCD(unsigned char dato)

PORTBbits.RB1=0; //R/W en 0

PORTBbits.RB0=0; //RS en 0 (envia instruccion)

PORTD=dato; //dato a publicar

enable();

__delay_ms(2); //tiempo de ejecucion

void write(unsigned char tam){

unsigned char i;

for(i=0;i<tam;i++){

dato_LCD(buffer[i]);

void conf_ADC(void){

ADCON0=0b00000001;

ADCON1=0;

unsigned int conv_ADC(unsigned char canal){

unsigned int temp=0;

if(canal>7){
return 0;

}else{

canal<<=3;

ADCON0&=0xC7;

ADCON0|=canal;

__delay_us(50);

GO=1;

while(GO==1){}

ADRESL>>=6;

temp=ADRESH;

temp<<=2;

temp|=ADRESL;

return temp;

sprintf(buffer,"Tem:",temp);

write(strlen(buffer));

Potrebbero piacerti anche