Microprocessors and Interfacing: Programming and Hardware