Thought I'd initiate a (sort of at least) on-topic thread for a change... :) I've been using a PIC 16F84 in applications where I've needed many easily addressable I/O's. Though I've been mostly needing outputs (to drive many LEDs in a display panel, or twenty relays, or both at the same time), there have been times when I've needed extra digital inputs as well. For one system with 48 LEDs (actually 24 tri-color ones, so 48 outputs), 19 relays and 3 other outputs, I only need to dedicate two output pins on the PIC - the rest can be shared with other devices. I'm using RA3 as clock to a 74HC574 latch driving the I/O-bus, and RA1 as a sort of "bus strobe" - apparently with a longish distance between the latch and target ICs, the signals won't change simultaneously. So, I have seven address lines and a data line, and the strobe. The lowest address lines (A0-A2) go straight to as many 74HC259 addressable latches as needed; likewise for the data. The next logical decoding level is A3-A5, these go to two 74HC138 decoders. And the decoders, in turn, are selected by a combination of the strobe and A6 line. So, for example, the panel display only needs a 10-lead flat cable for data and power. A very good thing about this is that logic chips like 74HC259, 74HC138 etc. are very cheap, so it beats using I2C port expanders which seem to cost a lot. I can also do inputs by using a 74HC151 8-to-1 multiplexer, though I haven't tested it much yet. I can also do 8 extra outputs by using only one dedicated output on the PIC, with a single 74HC259. So... anyone see possible errors arising from this system? I've also heard about different methods, like shift registers; what else is available?