Here is an app note from Maxim describing how to implement level translation when faced with two systems that operate at different voltages. The article describes methods for accomplishing logic-level translation varying from very simple circuits using only a few discrete components, to circuits using a single dedicated IC.
Electronic design has changed considerably since the days when TTL and 5V CMOS were the dominant standards for logic circuits. The increasing complexity of modern electronic systems has led to lower voltage logic, which in turn can cause incompatibility between input and output levels for the logic families within a system. It is not unusual, for example, that a digital section operating at 1.8V must communicate with an analog subsection operating at 3.3V. This article examines the basics of logic operation and considers, primarily for serial-data systems, the available methods for translating between different domains of logic voltage.