Download presentation
Presentation is loading. Please wait.
1
Review: Interrupts & Timers
UBC104 Embedded Systems Review: Interrupts & Timers
2
Block Diagram UBC 104 Embedded Systems
3
Definition of ‘Interrupt’
Interrupts Definition of ‘Interrupt’ Event that disrupts the normal execution of a program and causes the execution of special instructions UBC 104 Embedded Systems
4
Interrupt Handling Code that deals with interrupts: Interrupt Handler or Interrupt Service Routines (ISRs) Possible code: void ISR(void) interrupt 1 { ++interruptcnt; } Interrupt number UBC 104 Embedded Systems
5
Interrupt Overheads Interrupt Latency Interrupt Termination
Interrupt arrives Complete current instruction Save essential register information Vector to ISR Save additional register information Execute body of ISR Restore other register information Return from interrupt and restore essential registers Resume task Interrupt Latency Interrupt Termination UBC 104 Embedded Systems
6
SFR Map – Timer UBC 104 Embedded Systems
7
Timer Code Initialization Start of Timer Interrupt Service Routine
void TimerInit(void) { T2CON = 0x04; // Load Timer 2 control register TH2 = 0xFC; // Load Timer 2 high byte RCAP2H = 0xFC; // Load Timer 2 reload capt. reg. high byte TL2 = 0x18; // Load Timer 2 low byte RCAP2L = 0x18; // Load Timer 2 reload capt. reg. low byte ET2 = 1; // Enable interrupt TR2 = 1; // Start Timer 2 running } void handleTimer2 (void) interrupt 5 { /* execute interrupt code */ Start of Timer Interrupt Service Routine UBC 104 Embedded Systems
8
Calculation of Register Settings
Oscillator = 24 MHz Timer clock= (24 / 12) MHz = 2 MHz Timer cycle = = 500ns Delay count = delay time / cycle time 1 ms / 500 ns = 2000 Base number= = = 6192 = 0x1830 2 MHz 1 UBC 104 Embedded Systems
9
Summary: Interrupts & Timers
Event that disrupts the normal execution of a program and causes the execution of special instructions Interrupt Latency: Time from event to execution of service routine Interrupt Response Time: Interrupt latency + Time for service routine Interrupt Termination: Time taken after interrupt service routine Timer: Counter that causes interrupt at overflow UBC 104 Embedded Systems
10
UBC104 Embedded Systems RS232 Communication
11
Overview Basics of serial communications RS232 details
8051-support for serial communication UBC 104 Embedded Systems
12
SFR Map – UART Registers
UBC 104 Embedded Systems
13
UART Registers UBC 104 Embedded Systems
14
Serial Interface Basics
Also called Universal Asynchronus Receiver/ Transmitter (UART) or after the I standards: RS232 (-C) or EIA232 UBC 104 Embedded Systems
15
Serial Interface Basics
also called Universal Asynchronus Receiver/ Transmitter (UART) or the relevant standards: RS232 (-C) or EIA232 2 Receive Data 3 Transmit Data 5 Signal Ground UBC 104 Embedded Systems
16
Typical 3-wire Interface
2 5 UBC 104 Embedded Systems
17
uController Pin-Out UBC 104 Embedded Systems
18
RS232 Signals Signals between +25V and -25V; some say ±15V
usually +12V to -12V UBC 104 Embedded Systems
19
RS232 Signals Signals between +25V and -25V; some say ±15V
usually +12V to -12V Logic ‘0’ Logic ‘1’ UBC 104 Embedded Systems
20
RS232 Signals Signals between +25V and -25V; some say ±15V
usually +12V to -12V UBC 104 Embedded Systems
21
RS232 Signals Signals between +25V and -25V; some say ±15V
usually +12V to -12V 8051 runs on 3V or 5V UBC 104 Embedded Systems
22
RS232 Signals Signals between +25V and -25V; some say ±15V
usually +12V to -12V 8051 runs on 3V or 5V Driver chip translates between voltages UBC 104 Embedded Systems
23
Valid Signals UBC 104 Embedded Systems
24
Valid Signals Figure courtesy of http://www.camiresearch.com
UBC 104 Embedded Systems
25
MCBx51 Board 3 2 TX0 RX0 UBC 104 Embedded Systems
26
Basic 3-Wire Connection of Machines
TXD RXD GND UBC 104 Embedded Systems
27
Basic 3-Wire Connection of Machines
TXD RXD GND What goes over these wires? UBC 104 Embedded Systems
28
RS-232 Frame Every RS-232 consists of: 1 start bit 8 data bits
1 stop bit (optional 1 parity bit) UBC 104 Embedded Systems
29
RS-232 Frame Every RS-232 consists of: 1 start bit 8 data bits
1 stop bit (optional 1 parity bit) Start D0 D1 D2 D3 D4 D5 D6 D7 Stop UBC 104 Embedded Systems
30
RS-232 Frame Every RS-232 consists of: ‘a’= 0x61 = 0110 0001
1 start bit 8 data bits 1 stop bit (optional 1 parity bit) ‘a’= 0x61 = Start D0 D1 D2 D3 D4 D5 D6 D7 Stop UBC 104 Embedded Systems
31
RS-232 Frame Every RS-232 consists of: ‘a’= 0x61 = 0110 0001
1 start bit 8 data bits 1 stop bit (optional 1 parity bit) ‘a’= 0x61 = Start D0 D1 D2 D3 D4 D5 D6 D7 Stop 1 UBC 104 Embedded Systems
32
RS-232 Frame Every RS-232 consists of: ‘a’= 0x61 = 0110 0001
1 start bit 8 data bits 1 stop bit (optional 1 parity bit) ‘a’= 0x61 = Start D0 D1 D2 D3 D4 D5 D6 D7 Stop 1 UBC 104 Embedded Systems
33
RS-232 Frame Every RS-232 consists of: ‘a’= 0x61 = 0110 0001
1 start bit 8 data bits 1 stop bit (optional 1 parity bit) ‘a’= 0x61 = Start D0 D1 D2 D3 D4 D5 D6 D7 Stop 1 UBC 104 Embedded Systems
34
RS-232 Frame Every RS-232 consists of: ‘a’= 0x61 = 0110 0001
1 start bit 8 data bits 1 stop bit (optional 1 parity bit) ‘a’= 0x61 = Start D0 D1 D2 D3 D4 D5 D6 D7 Stop 1 UBC 104 Embedded Systems
35
RS-232 Frame Every RS-232 consists of: ‘a’= 0x61 = 0110 0001
1 start bit 8 data bits 1 stop bit (optional 1 parity bit) ‘a’= 0x61 = Start D0 D1 D2 D3 D4 D5 D6 D7 Stop 1 UBC 104 Embedded Systems
36
Signal Timing ? 1 1 1 1 0 1 0 0 0 0 1 1 0 0 1 1 1 1 Start D0 D1 D2 D3
Stop ? UBC 104 Embedded Systems
37
Signal Timing (continued)
Start D0 D1 D2 D3 D4 D5 D6 D7 Stop ? bit period UBC 104 Embedded Systems
38
Baud Rate Baud specifies the inverse of the bit-period
e.g Baud = a bit-period of 1/9600 second = microseconds Typicall data rates: 75, 110, 300, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 33600, 56000, and (rarely) baud. UBC 104 Embedded Systems
39
Serial I/O with bare hands
#define BIT_PERIOD sendByte(unsigned char content) { unsigned char mask; mask= 1; P3.1= 0; // Start bit wait (BIT_PERIOD); for (i= 0; i<8; i++) { // Send content P3.1= (content&mask) ? 1 : 0; mask<= 1; } P3.1= 0; // Stop bit P3.1= 1; UBC 104 Embedded Systems
40
Serial I/O with bare hands
#define BIT_PERIOD sendByte(unsigned char content) { unsigned char mask; mask= 1; P3.1= 0; // Start bit wait (BIT_PERIOD); for (i= 0; i<8; i++) { // Send content P3.1= (content&mask) ? 1 : 0; mask<= 1; } P3.1= 0; // Stop bit P3.1= 1; UBC 104 Embedded Systems
41
Serial I/O with bare hands
You do not need to do this!!! #define BIT_PERIOD sendByte(unsigned char content) { unsigned char mask; mask= 1; P3.1= 0; // Start bit wait (BIT_PERIOD); for (i= 0; i<8; i++) { // Send content P3.1= (content&mask) ? 1 : 0; mask<= 1; } P3.1= 0; // Stop bit P3.1= 1; UBC 104 Embedded Systems
42
UART modes Mode 0: 8 data bits (LSB first) are transmitted/received at a fixed baud rate of 1/12 of the oscillator frequency. (synchronus mode) UBC 104 Embedded Systems
43
UART modes Mode 0: 8 data bits (LSB first) are transmitted/received at a fixed baud rate of 1/12 of the oscillator frequency. (synchronus mode) Mode 1: 10 bits are transmitted (through TXD) or received (through RXD): a start bit (0), 8 data bits (LSB first), and a stop bit (1) at a variable baud rate. UBC 104 Embedded Systems
44
UART modes Mode 0: 8 data bits (LSB first) are transmitted/received at a fixed baud rate of 1/12 of the oscillator frequency. (synchronus mode) Mode 1: 10 bits are transmitted (through TXD) or received (through RXD): a start bit (0), 8 data bits (LSB first), and a stop bit (1) at a variable baud rate. Mode 2: 11 bits are transmitted (through TXD) or received (through RXD): a start bit (0), 8 data bits (LSB first), a programmable 9th data bit, and a stop bit (1). On transmit, the 9th data bit (TB8 in SCON) can be assigned the value of 0 or 1 (for example, the parity bit (P, in the PSW) could be moved into TB8). On receive, the 9th data bit goes into RB8 in Special Function register SCON. The baud rate is programmable to either 1/32 or 1/64 the oscillator frequency. Mode 3: Mode 3 is the same as Mode 2 in all respects except the baud rate is variable. UBC 104 Embedded Systems
45
UART modes Mode 0: 8 data bits (LSB first) are transmitted/received at a fixed baud rate of 1/12 of the oscillator frequency. (synchronus mode) Mode 1: 10 bits are transmitted (through TXD) or received (through RXD): a start bit (0), 8 data bits (LSB first), and a stop bit (1) at a variable baud rate. Mode 2: 11 bits are transmitted (through TXD) or received (through RXD): a start bit (0), 8 data bits (LSB first), a programmable 9th data bit, and a stop bit (1). On transmit, the 9th data bit (TB8 in SCON) can be assigned the value of 0 or 1 (for example, the parity bit (P, in the PSW) could be moved into TB8). On receive, the 9th data bit goes into RB8 in Special Function register SCON. The baud rate is programmable to either 1/32 or 1/64 the oscillator frequency. Mode 3: Mode 3 is the same as Mode 2 in all respects except the baud rate is variable. Mode 0 Baud Rate = 12 Oscillator Frequency Mode 2 Baud Rate = 2 SMOD1 x 64 Oscillator Frequency Mode 1/3 Baud Rate = 2 SMOD1 x 32 Timer Overflow Rate UBC 104 Embedded Systems
46
SMOD1 SMOD1: Double Baud rate SMOD0: Enables framing error detection
UBC 104 Embedded Systems
47
Framing Error Detection
UBC 104 Embedded Systems
48
Timer 1 http://www.keil.com/c51/baudrate.asp
Timer Overflow Rate Mode 1/3 Baud Rate = 2 SMOD1 x 32 2 SMOD1 Oscillator Frequency Mode 1/3 Baud Rate = x 32 12 x [256 – TH1] 2 SMOD1 Oscillator Frequency [256 – TH1] = x 32 12 x Baud Rate 2 SMOD1 Oscillator Frequency TH1 = 256 – x 32 12 x Baud Rate UBC 104 Embedded Systems
49
Timer 1 Commonly Used BAUD Rates
UBC 104 Embedded Systems
50
SCON Documentation UBC 104 Embedded Systems
51
SCON & SBUF SCON controls the functionality of the UART device:
SM0&SM1 = Determine the mode SM2 = Multiprocessor Flag REN = Receive Enable Flag TB8/RB8 = Transmit/Receive Parity Flag TI/RI = Transmit/Receive Interrupt Flag SBUF is the transmit&receive buffer UBC 104 Embedded Systems
52
SBUF SBUF is actually two separate registers: a transmit buffer and a receive buffer register: When data is moved to SBUF, it goes to the transmit buffer where it is held for serial transmission; moving a byte to SBUF initiates the transmission. When data is moved from SBUF, it comes from the receive buffer. UBC 104 Embedded Systems
53
SBUF and TI/RI TRANSMITTER HALF RECEIVER HALF UBC 104 Embedded Systems
8 data SBUF 8 TI Stop bit Start bit Send 8-bit data Transmitter Buffer is empty 10 bit parallel to serial conversion Serial data transmit TRANSMITTER HALF 8 data bits start bit stop Tx bit 8 data SBUF 8 RI Start bit Stop bit Receive 8-bit data data is available 10 bit serial to parallel conversion Serial data receive RECEIVER HALF 8 data bits stop start Rx UBC 104 Embedded Systems
54
SBUF and Parity Bit in TB8/RB8
UBC 104 Embedded Systems
55
Timer 1 Example Set T1 for Mode 2 Load TH1 with the initial value
Set SCON for Mode 1 Start Timer1 Clear TI Load SBUF with the byte to be transferred Wait until TI becomes 1 Go back to Step5 for next byte TCON= 0x20; TH1= 0xF5; SCON|= 0x50; TR1= 1; TI= 0; do { SBUF= byte[i]; while (!TI); } while(more_bytes); UBC 104 Embedded Systems
56
Timer 1 Example (continued)
Set T1 for Mode 2 Load TH1 with the initial value Set SCON for Mode 1 Start Timer1 Clear RI Wait for byte to be received Copy received byte out of SBUF Return received byte TCON= 0x20; TH1= 0xF5; SCON|= 0x50; TR1= 1; RI= 0; while (!RI); result= SBUF; return SBUF; UBC 104 Embedded Systems
57
Possible Configurations
UBC 104 Embedded Systems
58
T2CON Documentation UBC 104 Embedded Systems
59
Timer 2 Commonly Used BAUD Rates
UBC 104 Embedded Systems
60
Timer 2 Calculation Mode 1/3 Baud Rate = (RCAP2H,RCAP2L) = 65535 –
Oscillator Frequency Mode 1/3 Baud Rate = 32 x [65536 – (RCAP2H, RCAP2L)] Oscillator Frequency (RCAP2H,RCAP2L) = – 32 x Baud Rate UBC 104 Embedded Systems
61
Timer2 Example Set T1 for Mode 2
Load RCAP high/low with the initial value Set SCON for Mode 1 Start Timer1 Clear TI Load SBUF with the byte to be transferred Wait until TI becomes 1 Go back to Step5 for next byte T2CON|= 0x30; RCAP2H = 0xFF; RCAP2L = 0xB2; SCON|= 0x50; TR2= 1; TI= 0; do { SBUF= byte[i]; while (!TI); } while(more_bytes); UBC 104 Embedded Systems
62
Internal Baud-Rate Generator
UBC 104 Embedded Systems
63
BDRCON UBC 104 Embedded Systems
64
Using BRL to Transmit Set T1 for Mode 2
Load TH1 with the initial value Set SCON for Mode 1 Start Timer1 Clear TI Load SBUF with the byte to be transferred Wait until TI becomes 1 Go back to Step5 for next byte BDRCON= 0x0E; BRL= 0xF5; SCON|= 0x50; BDRCON|= 0x10; TI= 0; do { SBUF= byte[i]; while (!TI); } while(more_bytes); UBC 104 Embedded Systems
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.