cnandha19
Member level 3
I am getting adc values in LCD but output not came through UART
Code:
#include "Includes.h"
// Configuration word for PIC16F877
__CONFIG( FOSC_HS & WDTE_OFF & PWRTE_ON & CP_OFF & BOREN_ON
& LVP_OFF & CPD_OFF & WRT_ON & DEBUG_OFF);
#define BAUDRATE 9600 //bps
void InitUART(void)
{
TRISC6 = 1; // TX Pin
TRISC7 = 1; // RX Pin
SPBRG = ((_XTAL_FREQ/16)/BAUDRATE) - 1;
BRGH = 1; // Fast baudrate
SYNC = 0; // Asynchronous
SPEN = 1; // Enable serial port pins
CREN = 1; // Enable reception
SREN = 0; // No effect
TXIE = 0; // Disable tx interrupts
RCIE = 1; // Enable rx interrupts
TX9 = 0; // 8-bit transmission
RX9 = 0; // 8-bit reception
TXEN = 0; // Reset transmitter
TXEN = 1; // Enable the transmitter
}
// Main Function
void main(void)
{
unsigned char ch="ADC DATA ACQUISTION";
unsigned int x,y;
unsigned int ADC_value = 0;
unsigned int digit1, digit2, digit3, digit4;
InitADC(); // Initialize ADC
InitLCD(); // Initialize LCD
InitUART();
while(1)
{
ClearLCDScreen(); // Clear LCD screen
void SendByteSerially(unsigned char);
unsigned char ReceiveByteSerially(void);
void SendStringSerially(const unsigned char*);
ADC_value = GetADCValue(AN7); // Read ADC value from RE2(AN7) pin
__delay_ms(1000);
while(!TXIF); // wait for previous transmission to finish
TXREG = ADC_value;
__delay_ms(1000);
// SendStringSerially("ADC_value"); // Send string on UART
GIE = 1; // Enable global interrupts
PEIE = 1;
// ADC_value can have a value from 0 (0v) to 1023(5v) only.
// SO display 4 digits of ADC_value
digit1 = (unsigned int)(ADC_value/1000); // Calculate digit1 of ADC_value
digit2 = (unsigned int)((ADC_value - digit1*1000)/100); // Calculate digit2 of ADC_value
digit3 = (unsigned int)((ADC_value - (digit1*1000+digit2*100))/10); // Calculate digit3 of ADC_value
digit4 = (unsigned int)(ADC_value - (digit1*1000+digit2*100+digit3*10)); // Calculate digit4 of ADC_value
WriteDataToLCD(digit1+0x30); // Display digit1 of ADC_value on LCD
WriteDataToLCD(digit2+0x30); // Display digit2 of ADC_value on LCD
WriteDataToLCD(digit3+0x30); // Display digit3 of ADC_value on LCD
WriteDataToLCD(digit4+0x30); // Display digit4 of ADC_value on LCD
__delay_ms(500); // Half second delay before next reading
}
}