How it works...

We define an ISR for interrupt line 4, which is triggered for serial port events:

void serial_isr() __interrupt(4)

The interrupt routine is invoked as soon as a full byte is received and stored in the Serial buffer register (SBUF). Our implementation of ISR just copies the received byte to the input/output port, that is, P0 :

P0 = SBUF;

Then, it resets the RI flag to enable the interrupt for the upcoming byte.

To make the interrupts work as expected, we configure both the serial port and the timer. First, the serial port is configured, as follows:

SCON = 0x50;

According to the preceding table, this means only the SM1 and REN bits of the Serial Control Register (SCON) are set to 1, resulting in the selection of communication mode 1. This is an 8-bit UARS with a baud rate defined via Timer 1. Then, it enables the receiver.

Since the baud rate is defined by Timer 1, the next step is to configure the timer, as follows:

TMOD = 0x20;

The preceding code configures Timer 1 to use mode 2, which is the 8-bit auto-reload mode.

Loading 0xFD into the TH1 register sets the baud rate to 9600 bps. Then, we enable Timer 1, serial interrupts, and all interrupts.

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset
3.147.42.168