Picdem™ 17 demonstration board user’s guide – Arizona Picdem 17 User Manual
Page 58

PICDEM™ 17 Demonstration Board User’s Guide
DS39024B-page 52
2001 Microchip Technology Inc.
*
must check to see if the LCD controller is
*
busy before calling this routine. The address
*
is read from the character generator RAM or
*
the display data RAM depending on what the
*
previous SetxxRamAddr routine was called.
*******************************************************************
**/
unsigned char ReadAddrXLCD(void)
{
char data;
// Holds the data retrieved
from the LCD
#ifdef BIT8
// 8-bit interface
RW_PIN = 1;
// Set control bits for the
read
RS_PIN = 0;
DelayFor18TCY();
E_PIN = 1;
// Clock data out of the LCD
controller
DelayFor18TCY();
data = DATA_PORT;
// Save the data in the reg-
ister
E_PIN = 0;
RW_PIN = 0;
// Reset the control bits
#else
// 4-bit interface
RW_PIN = 1;
// Set control bits for the
read
RS_PIN = 0;
DelayFor18TCY();
E_PIN = 1;
// Clock data out of the LCD
controller
DelayFor18TCY();
#ifdef UPPER
// Upper nibble interface
data = DATA_PORT&0xf0;// Read the nibble into the upper nibble
of data
#else
// Lower nibble interface
data = (DATA_PORT<<4)&0xf0;// Read nibble to upper nibble of
data
#endif
E_PIN = 0;
// Reset the clock
DelayFor18TCY();
E_PIN = 1;
// Clock out the lower nib-
ble
DelayFor18TCY();
#ifdef UPPER
// Upper nibble interface
data |= (DATA_PORT>>4)&0x0f;// Read nibble to lower nibble of
data
#else
// Lower nibble interface
data |= DATA_PORT&0x0f;
// Read nibble to lower nib-
ble of data
#endif
E_PIN = 0;
RW_PIN = 0;
// Reset the control lines
#endif
return (data&0x7f);
// Return the address, Mask
off the busy bit
}