Skip to content

Instantly share code, notes, and snippets.

@davidae1704
Last active December 29, 2015 11:58
Show Gist options
  • Save davidae1704/7666977 to your computer and use it in GitHub Desktop.
Save davidae1704/7666977 to your computer and use it in GitHub Desktop.
codigo para desafio 11 de laboratorio de microcontroladores
#include <p18f4550.h>
#include <xc.h>
#include "stdlib.h"
#pragma config FOSC=INTOSC_EC
#pragma config WDT=OFF
#pragma config PBADEN=OFF
#pragma config MCLRE=ON
#pragma config DEBUG=ON
#pragma config LVP=OFF
char msgInicio[]={10,'V','o','l','t','i','m','e','t','r','o',10,4};
char msgUnidad[]={9,'V','o','l','t','i','o','s',10,4};
unsigned char valor[6]=0x30;
char comparacion(unsigned int act, unsigned int prev);
void delay_ms(unsigned int y);
void configuracion();
float voltaje; char numero = 0x30; int i = 0;
unsigned int anterior = 0;
unsigned int lectura;
unsigned char nada[3]={'0',10,4};
void main()
{
configuracion();
//transmision de mensaje de inicio
i=0;
TXEN=1; //Habilitamos transmision
while(msgInicio[i] != 4)
{
TXREG=msgInicio[i]; // se almacenan los datos dyte por byte para ser transmitidos
while((TXIF==1)&&(TRMT==0)){;} //espera a que termine la transmision
i++;
}
TXEN=0; //se deshabilita la transmision
while(1)
{
ADCON0bits.ADON=1; //se activa el ADC
ADCON0bits.GO_DONE=1; //se inicia la conversion
while(ADCON0bits.GO_DONE==1){;}//espera a que GO/DONE pase a 0(fin de la conversion)
ADCON0bits.ADON=0; //se desacitva la conversion
itoa(valor, ADRES, 10);//transformacion del dato de la lectura del ADC a ASCII
//*************envio del dato medido por el ADC a traves del puerto RS232
if (RB0==0)
{
delay_ms(100);
//transmision de datos
i=0;
TXEN=1; //Habilitamos transmision
while(valor[i] !=4)
{
TXREG=valor[i]; // se almacenan los datos dyte por byte para ser transmitidos
while((!TXIF)&&(!TRMT)){;} //espera a que termine la transmision
i++;
valor[5]=4;
}
TXEN=0; //se deshabilita la transmision
//transmision de unidades
i=0; //reinicializa el puntero de conteo
TXEN=1; //Habilitamos transmision
while(msgUnidad[i] != 4)
{
TXREG=msgUnidad[i]; // se almacenan los datos dyte por byte para ser transmitidos
while((!TXIF)&&(!TRMT)){;} //espera a que termine la transmision
i++;
}
TXREG=0X20;
while((!TXIF)&&(!TRMT)){;} //espera a que termine la transmision
TXEN=0; //se deshabilita la transmision
TXREG=0X20;
while((!TXIF)&&(!TRMT)){;} //espera a que termine la transmision
}
}
}
void configuracion()
{
OSCCONbits.IRCF0=1;
OSCCONbits.IRCF1=1;
OSCCONbits.IRCF2=1; //8Mhz
LATA=0;
LATB=0;
LATC=0;
TRISA0=1; //RA0 como entrada
TRISB0=1; //RB0 como entrada
LATA=0;
LATB=0;
LATC=0;
TRISC7=1;
TRISC6=1;
//Configuracion de timer 0
T0CON=0x42; TMR0IF=0; TMR0IE=0;
//Seleccion de velocidad de comunicacion a 9600
SPBRG=51;
BRG16=0;
TXSTA=0x0C; //CSRC-TX9-TXEN-SYNC-SENDB-BRGH-TRMT-TX9D
// 0 0 0 0 1 1 0 0
RCSTA = 0x90;
BAUDCON = 0x00;
TXCKP=0; //Transmision no invertida
TXIE=0; //NO hay interrupcion
SPEN=1; //habilitamos puerto serial
RBPU=0; //habilitamos pull ups para puerto B
//Configuracion modulo ADC
TRISA0=1; //RA0 como entrada
ADCON0=0; //configuracion para usar RA0 como canal del ADC
ADCON1=0x0E; //configuracion para establecer RA0 como pin analógico y las referencias
ADCON2=0x10; //configuracion para establecer: frecuencia de trabajo, tiempo de adquisicion y
//justificacion del dato
CMCON=0X07;
return;
}
//rutina de retardo
void delay_ms(unsigned int y)
{
TMR0ON=1; //habilita el Timer0
while(y!=0)
{
TMR0L=0;
TMR0IF=0;
while(TMR0IF==0){;}
y--;
}
TMR0ON=0; //deshabilita el Timer0
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment