Hola a todos, necesito ayuda con esto, estoy empezando con el mundillo de la electronica, y me he quedado pillado en este punto. Necesito hacer que con el pic18f2550 y a través de R232 me aparezcan en el terminal del Putty los datos que recoje el sensor de temperatura!
¿Alguien me puede ayudar con este asunto?
Tengo esto! Y a partir de esto tendría que hacerlo. ¿Alguna idea?
Si se necesita más información avisadme y la pondré!
Muchas gracias a todos de antemano!
¿Alguien me puede ayudar con este asunto?
Tengo esto! Y a partir de esto tendría que hacerlo. ¿Alguna idea?
Código:
/********************************************************************
Conversión A/D. Sin interrupciones. Consulta de estado.
Realizar un programa para el UVkit muestree la tensión en el potenciometro
conectado a la entrada AN2 y muestre el valor del mismo en la barra de leds
usando 8 bits (se ajustará el conversor para utilizar los bits de mayor peso)
y que avise cuando el valor de éste sea superior a 134 activando el bit de alarma
que corresponderá con el bit RC2.
Recordar que el reloj del sistema es de 48Mhz y que utilizaremos el
reloj interno de 1 MHz del conversor A/D.
********************************************************************/
#include <delays.h>
#include <p18f2550.h>
//These are your actual interrupt handling routines.
#pragma interrupt YourHighPriorityISRCode
void YourHighPriorityISRCode()
{
} //This return will be a "retfie fast", since this is in a #pragma interrupt section
#pragma interruptlow YourLowPriorityISRCode
void YourLowPriorityISRCode()
{
} //This return will be a "retfie", since this is in a #pragma interruptlow section
/** VECTOR REMAPPING ***********************************************/
#define REMAPPED_RESET_VECTOR_ADDRESS 0x1000
#define REMAPPED_HIGH_INTERRUPT_VECTOR_ADDRESS 0x1008
#define REMAPPED_LOW_INTERRUPT_VECTOR_ADDRESS 0x1018
extern void _startup (void); // See c018i.c in your C18 compiler dir
#pragma code REMAPPED_RESET_VECTOR = REMAPPED_RESET_VECTOR_ADDRESS
void _reset (void)
{
_asm goto _startup _endasm
}
#pragma code REMAPPED_HIGH_INTERRUPT_VECTOR = REMAPPED_HIGH_INTERRUPT_VECTOR_ADDRESS
void Remapped_High_ISR (void)
{
_asm goto YourHighPriorityISRCode _endasm
}
#pragma code REMAPPED_LOW_INTERRUPT_VECTOR = REMAPPED_LOW_INTERRUPT_VECTOR_ADDRESS
void Remapped_Low_ISR (void)
{
_asm goto YourLowPriorityISRCode _endasm
}
#pragma udata
volatile unsigned char valor, Umbral;
void leds(unsigned char c); // Declaración de procedimiento
#pragma code
void main()
{
Umbral= 134;
valor=0;
ADCON0=0b0001001; // Enciende A/D ADON=1 y selecciona el canal 2
ADCON1=0x0A; // Todos los bits de A son analógicos y los de B digitales
ADCON2=0b00100011; // ADFM=0; justificación izquierda
// ACQT2:ACQT0=100 => 8TAD tiempo de adquisicion (8 us)
// ADCS2:ADS0=011 => TAD= Trc (1/1Mhz)= 1 us
TRISA|=0x0F; // Porta A(3:0) de entrada y resto de salida
TRISCbits.TRISC2=0; // RC2 de salida
while (1)
{
ADCON0bits.GO_DONE=1; //Inicio
while (ADCON0bits.GO_DONE); //Consulta de estado
valor=ADRESH; //Lectura del valor descargado
if (valor > Umbral) PORTCbits.RC2=1; else PORTCbits.RC2=0; // Alarma
leds(valor); // Visualización
}
}//end main
/*Procedimiento de visualización en la barra de LEDs*/
void leds(unsigned char c)
{
ADCON1=0x0f;
TRISA&=0b11001111;
TRISB&=0b11000011;
TRISC&=0b11111000;
PORTAbits.RA4= (c&0b00000001)?1:0;
PORTAbits.RA5= (c&0b00000010)?1:0;
PORTBbits.RB2= (c&0b00000100)?1:0;
PORTBbits.RB3= (c&0b00001000)?1:0;
PORTBbits.RB4= (c&0b00010000)?1:0;
PORTBbits.RB5= (c&0b00100000)?1:0;
PORTCbits.RC0= (c&0b01000000)?1:0;
PORTCbits.RC1= (c&0b10000000)?1:0;
}
Si se necesita más información avisadme y la pondré!
Muchas gracias a todos de antemano!
Última edición: