Programa LDC Temperatura

Embed Size (px)

Citation preview

/* * File: main.c * Author: Arlindo Neto Montagnoli * * Created on March 18, 2013, 10:15 AM */#define __18F4520 //evita bug de ficar c/ marcas vermelhas#include #include #include #include #include #include #include #include #include #include //------------------------------------------------------------------------------#pragma config OSC = HS#pragma config PWRT = ON#pragma config WDT = OFF, WDTPS = 1#pragma config LVP = OFF#pragma config DEBUG = OFF#pragma config MCLRE = ON#pragma config CP0 = OFF,CP1 = OFF,CP2 = OFF,CP3 = OFF,CPB = OFF,CPD = OFF#pragma config WRT0 = OFF,WRT1 = OFF,WRT2 = OFF,WRT3 = OFF,WRTB = OFF,WRTC = OFF,WRTD = OFF#pragma config IESO=ON//------------------------------------------------------------------------------//------------------------------------------------------------------------------#define _XTAL_FREQ 20000000#define BAUDRATE 57600#define BRG_VAL (_XTAL_FREQ)/(16*BAUDRATE)-1#define clearXLCD() WriteCmdXLCD(0x01)#define linha1() WriteCmdXLCD(0x80)#define linha2() WriteCmdXLCD(0xC0)//------------------------------------------------------------------------------// Prottippo da Funes (Cabealho)void InitializeADC(void);void InitializeLCD(void);void DelayFor18TCY(void);void DelayPORXLCD(void);void DelayXLCD(void);int getADC(void);void InitializeUSART(void);void InitializePWM(void);void ConfigPIC(void);//------------------------------------------------------------------------------//Variveis globais#define MAX_CHAR 20char RXChar[MAX_CHAR];unsigned char cntChar =0;unsigned char flagString =0;//------------------------------------------------------------------------------void interrupt Interrupcao(){ if (PIR1bits.RCIF) //check USART { PIR1bits.RCIF = 0; RXChar[cntChar]=ReadUSART(); if(cntChar>=(MAX_CHAR-1)) RXChar[MAX_CHAR-1]='\0'; if( RXChar[cntChar]=='\0') { cntChar=0; flagString = 1; } else cntChar++; while(BusyUSART()); } /* else if (INTCONbits.TMR0IF) { INTCONbits.TMR0IF = 0; //Clear flag //... }*/}//------------------------------------------------------------------------------void InitializeLCD(void){ DelayPORXLCD(); OpenXLCD(FOUR_BIT & LINES_5X7); DelayPORXLCD(); WriteCmdXLCD(DON&CURSOR_OFF&BLINK_OFF); while(BusyXLCD());}//------------------------------------------------------------------------------void DelayFor18TCY(void){ __delay_us(10);//10 }//------------------------------------------------------------------------------void DelayPORXLCD(void) // minimum 15ms{ __delay_ms(20);//20 }//------------------------------------------------------------------------------void DelayXLCD(void) // minimum 5ms{ __delay_ms(10);//10 }//------------------------------------------------------------------------------void InitializeADC(void){TRISAbits.TRISA0 = 1;OpenADC( ADC_FOSC_8 & ADC_RIGHT_JUST & ADC_0_TAD, ADC_CH0 & ADC_INT_OFF & ADC_VREFPLUS_VDD & ADC_VREFMINUS_VSS, 0b1011);SetChanADC(ADC_CH0);}//------------------------------------------------------------------------------int getADC(void){int adc;ConvertADC(); // Start conversionwhile( BusyADC() ); // Wait for ADC conversionadc = ReadADC(); // Read result and put in temp// CloseADC(); // Disable A/D converterreturn adc;}//----------------------------------------------------------------------------void InitializeUSART(void){ OpenUSART (USART_TX_INT_OFF & USART_RX_INT_ON & USART_ASYNCH_MODE & USART_EIGHT_BIT & USART_CONT_RX & USART_BRGH_HIGH,BRG_VAL );}//----------------------------------------------------------------------------void InitializePWM(void){char Periodo = 0xFF;OpenPWM1 (Periodo );}//------------------------------------------------------------------------------void ConfigPIC(void){ TRISAbits.RA0 = 1; TRISCbits.RC6 = 0; //TX pin set as output TRISCbits.RC7 = 1; //RX pin set as input RCONbits.IPEN = 0; // disable interrupt priority PIE1bits.RCIE = 1; // enable USART receive interrupt INTCONbits.PEIE = 1; // enable peripheral interrupts. INTCONbits.GIE = 1; // enable interrupts}//------------------------------------------------------------------------------void main(){ unsigned int adc; __delay_ms(30); ConfigPIC(); InitializeLCD(); InitializeADC(); //InitializeUSART(); //InitializePWM(); int adc_read; float lm; char teste; //adc_read = getADC(); //lm = adc_read/2; //sprintf (teste, "T = %f", lm); //linha1(); //putsXLCD(teste); while(1) { adc_read = getADC(); lm = adc_read*0.488; sprintf (teste, "T = %f", lm); linha1(); putsXLCD(teste);//Teste: Ecoa a string quando encontra o final '\0' if(flagString==1) { putsUSART(RXChar); flagString=0; } }}//----------------------------------------------------------------------------