Title: chapter six transparency
1Chapter 7 Parallel I/O Ports
The 68HC11 Microcontroller
Han-Way Huang
Minnesota State University, Mankato
2Basic I/O Concepts
Peripheral devices Pieces of equipment that
exchange data with a computer. Examples include
switches, light-emitting diodes, cathode-ray
tube screens, printers, modems, keyboards, and
disk drives. Interface (peripheral) chip - A
chip whose function is to synchronize data
transfer between the CPU and I/O devices. - An
interface may consist of control registers,
status registers, data direction latches, and
control circuitry. - An interface chip has pins
that are connected to the CPU and I/O port pins
that are connected to the I/O devices. - Each
interface chip has a chip enable signal input or
inputs, when asserted, allow the interface chip
to react to the data transfer request. - Data
transfer between an I/O device and the CPU can be
proceeded bit-by-bit or in multiple bits.
3(No Transcript)
4I/O Schemes 1. Isolated I/O scheme - The
microprocessor has dedicated instructions for I/O
operations - The microprocessor has a separate
address space for I/O devices 2. Memory-mapped
I/O scheme - The microprocessor uses the same
instruction set for I/O operations - The I/O
devices and memory components are resident in the
same memory space
5I/O Transfer Synchronization The role of an
interface chip 1. Synchronizing data transfer
between CPU and interface chip. 2. Synchronizing
data transfer between interface chip and I/O
device.
6Synchronizing the Microprocessor and the
Interface Chip The polling method 1. for input
-- the microprocessor checks a status bit of the
interface chip to find out if the interface
chip has received new data from the input
device. 2. for output -- the microprocessor
checks a status bit of the interface chip to find
out if it can send new data to the interface
chip. The interrupt-driven method 1. for input
-- the interface chip interrupts the
microprocessor whenever it has received new data
from the input device. 2. for output -- the
interface chip interrupts the microprocessor
whenever it can accept new data from the
microprocessor.
7Synchronizing the Interface Chip and the I/O
Devices Brute-force method -- useful when the
data timing is unimportant 1. for input --
nothing special is done. The microprocessor
reads the interface chip and the interface chip
returns the voltage levels on the input port pins
to the microprocessor. 2. for output -- nothing
special is done. The interface chip places the
data that it received from the microprocessor
directly on the output port pins. The strobe
method -- a strobe signal is used to indicate
that data are stable on I/O port pins 1. for
input -- the interface chip latches the data into
its data register using the strobe signal. 2. for
output -- the interface chip places the data on
port pins that it received from the
microprocessor and asserts the strobe signal.
The output device latches the data using the
strobe signal. The handshake method -- used
when timing is crucial - two handshake signals
are used to synchronize the data transfer. One
signal, call it H1, is asserted by the interface
chip. The other signal, call it H2, is asserted
by the I/O device. - two handshake modes are
available -- pulse mode and interlocked mode.
8Input Handshake Protocol Step 1. The interface
chip asserts (or pulses) H1 to indicate its
intention to input data. Step 2. The input device
puts data on the data port pins and also asserts
(or pulses) the handshake signal H2. Step 3.
The interface chip latches the data and
de-asserts H1. After some delay, the input
device also de-asserts H2.
9Output Handshake Protocol Step 1. The interface
chip places data on the port pins and asserts (or
pulses) H1 to indicate that it has valid data to
be output. Step 2. The output device latches the
data and asserts (or pulses) H2 to acknowledge
the receipt of data. Step 3. The interface chip
de-asserts H1 following the assertion of H2. The
output device then de-asserts H2.
1068HC11 Parallel I/O Overview - The 68HC11A8 has
40 I/O pins that are arranged in five I/O
ports. - All I/O pins serve multiple
functions. - Ports A, B, and E with the exception
of port A pin 7 are fixed-direction inputs or
outputs. - Ports C and D are bi-directional I/O
pins under the control of their associated
data direction registers. - Port C, port B, the
STRA pin, and the STRB pin are used for strobed
and handshake parallel I/O, as well as for
general-purpose I/O. Port Registers - To input,
the 68HC11 reads from the port data register - To
output, the 68HC11 writes into the port data
register - All except port C have one data
register PORTA (at 1000) PORTB (at
1004) PORTC (at 1003) PORTCL (at
1005) PORTD (at 1008) PORTE (at 100A)
11Fixed Direction I/O (ports A, B, and E) To input
from an input port, execute a load instruction
with the port data register as the source
operand. For example, the following instruction
sequence reads a byte from port
E REGBAS equ 1000 I/O register block base
address PORTE equ 0A offset of port E data
register from REGBAS ldx REGBAS ldaa PORTE,X
To output a byte to an output port, write to the
port data register directly. For example, the
following instruction sequence outputs the value
38 to port B REGBAS equ 1000 I/O register
block base address PORTB equ 04 offset of port
B data register from REGBAS ldx REGBAS ldaa
38 staa PORTB,X
12Bi-directional I/O (Ports C and D) - Each pin of
ports C and D has an associated bit in a specific
data register and another in a data direction
register. - The primary direction of a pin is set
by its associated bit in the data direction
register. - When an output pin is read, the value
at the input to the pin driver is returned. - The
data direction registers are cleared by reset to
configure all bi-directional I/O pins
for input. - Before performing I/O operation to
these two ports, the software should set up
the data direction registers of these two ports.
13Example 7.1 Write an instruction sequence to
output the value CD to port D. Solution REGBAS
equ 1000 PORTD equ 08 DDRD equ 09 ldx REGBAS
ldaa 3F set up the directions of port D
pins staa DDRD,X ldaa CD output CD
to port D staa PORTD,X In C language,
DDRD 0x3F / configure port D for output
/ PORTD 0xCD / output data to port D /
14Parallel I/O Control Register (PIOC) - All
strobed mode I/O and handshake I/O are controlled
by this register
15Strobe Input Port C - Strobe mode I/O is
selected when the bit 4 of the PIOC register is
set to 0 and port C becomes a strobe input
port. - The bit 1 of the PIOC register selects
the active edge of the STRA pin. - The active
edge of the STRA signal latches the values of the
port C pins into the PORTCL register. - Reading
the PORTC register returns the current values on
the port C pins. - Reading the PORTCL register
returns the contents of the latched
PORTCL. - When enabled, the active edge of the
STRA signal will generate an interrupt to the
68HC11.
16Strobed Output Port B The strobe signal STRB is
pulsed for two E clock cycles each time there is
a write to port B.
17Port C Input Handshake Protocol
- STRA is a latch command asserted by an input
device (active edge is rising in the
figure). - STRB is a ready output driven by the
68HC11 (active high in the figure). - When ready
for accepting new data, the 68HC11 asserts (or
pulses) STRB pin. - The input device places data
on input port pins and asserts the STRA signal.
The active edge of STRA latches data into the
PORTCL register, sets the STAF flag in
PIOC register and de-asserts the STRB signal.
The de-assertion of STRB inhibits external
device from strobing new data into port C. - Not
until the 68HC11 reads PORTCL, new data cannot be
applied on port C pins.
18Port C Output Handshake Protocol
- STRA is an acknowledge input (driven by the
external device) - STRB is a ready output (driven
by the 68HC11) - In this figure, the active edge
of STRA is rising and the active level of STRB is
high. - The 68HC11 writes data into PORTCL and
then asserts STRB to indicates there are
valid data on port C pins - The external device
then asserts STRA to acknowledge the receipt of
data which will then cause STRB to be
de-asserted and the STAF flag to be set. - After
the de-assertion of STRB, STRA is also
de-asserted.
19Simple Input Devices switches, analog-to-digital
converter, keyboards, etc. Example 6.2 Connect
an 8-DIP switch to port E of the 68HC11 and read
a byte from it.
Solution REGBAS equ 1000 PORTE equ
0A LDX REGBAS LDAA PORTE,X . . . In
C include ltstdio.hgt main () char xx xx
PORTE
20Interfacing Parallel Ports to the Keyboard - A
keyboard is arranged as an array of switches,
which can be mechanical, membrane, capacitive,
or Hall-effect in construction. - In mechanical
switches, two metal contacts are brought together
to complete a circuit. - Mechanical switches have
a problem called contact bounce. A series of
pulses are generated because the switch
contacts do not come to rest immediately. - The
response time of the switch is several orders of
magnitude slower than that of a computer. - A
debouncing process is needed to solve the contact
bounce problem.
Keyboard input procedure Step 1. Keyboard
scanning to find out which key has been
pressed. Step 2. Key debouncing to make sure a
key was pressed. Step 3. Table lookup to find the
ASCII code of the key that has been pressed.
21- Keyboard Scanning Techniques
- - A keyboard with more than a few keys is often
arranged as a matrix of switches that - uses two decoding and selecting devices to
determine which key was pressed. - An example of 64-key keyboard is shown in
Figure 7.13. - - The MC14051 is an analog multiplexor and is
used to select the row. - - The 74LS138 selects the column.
- - PC5-PC3 select the row and PC2-PC0 select the
column to be scanned. - - X7-X0 are pulled up to 5 V by the pull-up
resistors. - - The decoder 74LS138 outputs are asserted low.
- - A pressed key will send a low to the X output
to the port C pin 7 and hence can be detected.
22- Keyboard Scanning Algorithm
- The basic algorithm is shown
- in Figure 7.14.
- Since we use port C pin 0 to 2
- to select the column and pin
- 3 to 5 to select the row, we
- can use the INC PORTC,X
- instruction to move to the
- next key. This is done in the
- program on next page.
23The program to scan the keyboard in Figure
7.13 Pins PC7 should be configured for input
while PC5-PC0 should be configured for
output. REGBAS equ 1000 base address of I/O
register block DDRC equ 07 offset of port C
data direction register from REGBAS KEYBD equ 03
port C is used as keyboard ldaa 3F set
up port C pin directions staa DDRC,X resetc
clr KEYBD,X start from row 0 and column
0 scan brclr KEYBD,X 80 debnce detect a
pressed key brset KEYBD,X 3F resetc need
to reset the row and column count inc KEYBD,X
check the next row or column bra scan end
24- Keyboard Debouncing
- The signal output from the key switch falls
- and rises a few times within a period of
- 5 ms as the contact bounces.
- A human being cannot press and release a
- key in less than 20 ms, a debouncer will
- recognize that the switch is closed/open
- after the voltage is low/high for 10 ms.
- - Both hardware and software debouncing
- techniques are available.
- Hardware debouncing techniques
- 1. Set-reset flip-flops
- 2. Non-inverting CMOS gates
- with high-input impedance
- 3. Integrating debouncers
25Software Debouncing Techniques The easiest
software debouncing technique is the wait-and-see
technique. After detecting a key switch has
been pressed, this technique simply wait for 10
ms and recheck the same key. REGBAS equ 1000
base address of the I/O register
block KEYBD equ 03 offset of PORTC from
REGBAS TEN_MS equ 2000 loop count for creating
10 ms delay debnce ldy REGBAS ldx TEN_MS wait
10ms nop wait for 10 ms nop dex
bne wait10ms ldaa KEYBD,X recheck the
pressed key bmi scan rescan the keyboard if
the key is not pressed jmp getcode the key
switch is indeed pressed end
26ASCII Code Table Lookup After the key has been
debounced, the keyboard should look up the ASCII
table and send the corresponding ASCII code to
the CPU. keytab FCC 0123456789 FCC ... .
. . FCC getcode LDX REGBAS LDAB KEYBD,X
CLRA ANDB 3f compute the address of the
ASCII code of the pressed ADDD keytab key
and leave it in X XGDX LDAA 0,X get
the ASCII code END
27Example 7.3 Write a C routine to read a character
from the keyboard. This routine will perform
keyboard scanning, debouncing, and ASCII code
lookup and return the ASCII code to the
caller. Solution char get_ascii () void
delay10ms () char tab64 . / ASCII
code table / char read_kb () char scanned,
pressed scanned 0 PORTC 0 while (1)
while (!scanned) if (PORTC 0X80) /
If key is not pressed / if ((PORTC 0x3F)
0x3F) / read row 7 and column 7
/ PORTC 0x00 / reset to row 0 column 0
/ else PORTC / scan the next key
/
28 else scanned 1 / detect a pressed key
/ delay10ms () / wait for 10 ms to
recheck the same key / if (!(PORTC
0x80)) return (get_ascii ()) / the key is
really pressed / else scanned
0 / the following subroutine use OC2
function to create a 10 ms delay / void
delay10ms () TFLG1 0x40 / clear OC2F
/ TOC2 TCNT 20000 / start an OC2
operation to create 10 ms delay / while
(!(TFLG1 0x40)) / wait until 10 ms is over
/ char get_ascii () char i i PORTC
0x3F / obtain the row and column number for
table lookup / return tabi
29Interfacing 68HC11 with a Keypad - People are
using 12- to 24-key keypad for many
applications. - An example of 16-key membrane
keypad is shown in Figure 7.16. The row selection
is shown in Table 7.4.
30Example 7.4 Write a C program to read a character
from the keypad shown in Figure 7.16. This
program will perform keypad scanning, debouncing,
and ASCII code lookup. Solution void wait_10ms (
) char get_key ( ) DDRC 0xF0 / configure
PC7-PC4 for output and PC3-PC0 for input
/ while (1) PORTC 0xE0 / prepare to scan
the row controlled by PC4 / if (!(PORTC
0x01)) wait_10ms ( ) if (!(PORTC
0x01)) return 0x30 / return ASCII code of 0
/ if (!(PORTC 0X02)) wait_10ms (
) if (!(PORTC 0x02)) return 0x31 /
return ASCII code of 1 /
31 if (!(PORTC 0X04)) wait_10ms ( ) if
(!(PORTC 0x04)) return 0x32 / return
ASCII code of 2 / if (!(PORTC 0X08))
wait_10ms ( ) if (!(PORTC
0x08)) return 0x33 / return ASCII code of 3
/ PORTC 0xD0 / set PC5 to low to scan
second row / if (!(PORTC 0X01))
wait_10ms ( ) if (!(PORTC
0x01)) return 0x34 / return ASCII code of 4
/ if (!(PORTC 0X02)) wait_10ms (
) if (!(PORTC 0x02)) return 0x35 /
return ASCII code of 5 /
32 if (!(PORTC 0X04)) wait_10ms ( ) if
(!(PORTC 0x04)) return 0x36 / return
ASCII code of 6 / if (!(PORTC 0X08))
wait_10ms ( ) if (!(PORTC
0x08)) return 0x37 / return ASCII code of 7
/ PORTC 0xB0 / set PC6 to low to scan
the third row / if (!(PORTC 0X01))
wait_10ms ( ) if (!(PORTC
0x01)) return 0x38 / return ASCII code of 8
/ if (!(PORTC 0X02)) wait_10ms (
) if (!(PORTC 0x02)) return 0x39 /
return ASCII code of 8 /
33 if (!(PORTC 0X04)) wait_10ms ( ) if
(!(PORTC 0x04)) return 0x41 / return
ASCII code of A / if (!(PORTC 0X08))
wait_10ms ( ) if (!(PORTC
0x08)) return 0x42 / return ASCII code of B
/ PORTC 0x70 / set PC7 to low to scan
the fourth row / if (!(PORTC 0X01))
wait_10ms ( ) if (!(PORTC
0x01)) return 0x43 / return ASCII code of C
/ if (!(PORTC 0X02)) wait_10ms (
) if (!(PORTC 0x02)) return 0x44 /
return ASCII code of D /
34 if (!(PORTC 0X04)) wait_10ms ( ) if
(!(PORTC 0x04)) return 0x45 / return
ASCII code of E / if (!(PORTC 0X08))
wait_10ms ( ) if (!(PORTC
0x08)) return 0x46 / return ASCII code of F
/
35Simple Output Devices A Single Light-Emitting
Diode (LED) - An LED will illuminate when it is
forward biased and has enough current flowing
through it. - The current required to light an
LED brightly ranges from a few mA to more than
ten mA. - The voltage drop across a
forward-biased LED ranges from 1.7V to more
than 2 V. - The voltage drop across the LED with
10 mA current flowing through it is assumed to
be 1.7V in this chapter. - In Figure 7.17, the
74HC04 has an high output 4.9V and a low output
0.1V. A high applied to the input of 74HC04
will light the LED. - The 68HC11 does not have
the current capability to drive the LED. A chip
like the 74HC04 is needed to provide the
required current capability.
36Example 7.5 Use the 68HC11 port B pins PB3, PB2,
PB1, and PB0 to drive blue, green, red, and
yellow LEDs. Light the blue LED for 2 s, then the
green LED for 4 s, then the red LED for 8 s, and
finally the yellow LED for 16 seconds. Repeat
this operation forever. Solution The circuit is
shown in Figure 7.18.
- To light the blue LED, output 08 to port
B. - To light the green LED, output 04 to port
B. - To light the red LED, output 02 to port
B. - To light the yellow LED, output 01 to port
B. - The required time can be created
by repeating the following delay loop for 20,
40, 80, and 160 times ldx 20000 tenth_s nop
nop dex bne tenth_s
37regbas equ 1000 portb equ 04 org
00 lt_tab fcb 20,08,40,04,80,02,160,01 org
C000 loop ldy lt_tab next ldab 0,Y get
the repetition count ldaa 1,Y get the light
pattern iny iny ldx regbas staa
portb,X pt_lp ldx 20000 tenth_s nop nop de
x bne tenth_s decb bne pt_lp cpy
lt_tab8 reach the table end? bne
next bra loop end
The Program
38The Seven-Segment Display - A seven-segment
display consists of seven LED segments (a, b, c,
d, e, f, and g). - A seven-segment display can be
found in common-cathode or common-anode type.
39Driving the seven-segment displays with the
68HC11 parallel ports
- A segment requires 10 mA to be lighted
brightly. - A buffer chip like 74ALS244 can be
used to boost the 68HC11s current
capability. - The 74ALS244 has a 3V output when
it is high and a 0.2V output when it is
low. - For the circuit shown in Figure 7.20,
a segment will have a current of 13 mA when it
is lighted. - To display a BCD digit, an
appropriate value must be written to the port
register. The value is listed in Table
7.6. - When multiple digits are to be
displayed, the multiplexing technique is often
used to reduce the number of port pins required.
40Using Multiplexing Method to Display Multiple BCD
Digits
- The 2N2222 can sink 100-300 mA of current and
can handle the maximum current (91 mA) flowing
into the collector from the common cathode. - To
light seven-segment display 5, send out the
segment pattern to port B and output the value
20 to port D. - To light display 4, send out
the segment pattern to port B and output the
value 10 to port D. - etc.
41How the Multiplexing Method Works - To light the
display 5,,0, the corresponding value to be
written into port D are 20, 10, 08, 04,
02, and 01 respectively. For example, the
following instruction sequence will display the
digit 6 on the display 3 REGBAS equ 1000
base address of I/O register block PORTB equ 04
offset of PORTB from REGBAS PORTD equ 08
offset of PORTD from REGBAS DDRD equ 09
offset of DDRD from REGBAS six equ 7D
segment pattern of 6 third equ 08 value to
allow display 3 to light output equ 3F org
C000 ldx REGBAS ldaa output configure
port D for output staa ddrd,X ldaa six
send the segment pattern of 6 to port
B staa PORTB,X ldaa third select
display 3 to be lighted staa PORTD,X en
d
42In C language, DDRD 0x3F PORTB
0x5F PORTD 0x08 Principle of Multiplexing
multiple displays Persistence of vision. As
long as one and only one display is lighted and
then turned off for a short period of time
within one second all digits will appear to be
lighted simultaneously.
43Example 7.6 Display 123456 on the six
seven-segment displays shown in Figure
7.21. Solution The first step is to build a
table of segment patterns (to port B) and display
selection values (to port D).
This Table can be set up by the following
assembler directives org 00 display FCB 0
6,20 FCB 5B,10 FCB 4F,08 FCB 66,04
FCB 6D,02 FCB 7D,01
44Algorithm for Displaying Multiple Digits Using
Time Multiplexing Technique
45regbas equ 1000 PORTB equ 04 PORTD equ
08 DDRD equ 09 output equ 3F org
00 display fcb 06,20 fcb 5B,10 fcb
4F,08 fcb 66,04 fcb 6D,02 fcb
7D,01 org C000 ldx regbas ldaa
output staa ddrd,X forever ldy
display next ldaa 0,Y ldx regbas staa
PORTB,X
ldaa 1,Y staa PORTD,X iny iny ldx
200 loop to delay for 1 ms again nop no
p dex bne again cpy
display12 end of table? beq forever bra
next light the next display end
46C language version include lthc11.hgt char
display 62 0x30, 0x20, 0x6D, 0x10,
0x79, 0x08, 0x33, 0x04, 0x5B, 0x02,
0x5F, 0x01 void delay_1ms ( ) main (
) int i while (1) for (i 0 i lt 6
i) PORTB displayi0 PORTD
displayi1 delay_1ms ( ) void
delay_1ms ( ) TFLG1 0x40 / clear OC2F
flag / TOC2 TCNT 2000 while (!(TFLG1
0x40))
47Liquid Crystal Displays (LCD) - An LCD must be
activated in order to be lighted. - The LCD type
of display that is most common today allows
light to pass through it when it is
activated. - The LCD displays are organized as
segments for displaying digits or
characters. - Activation of a segment requires a
low-frequency bipolar excitation voltage of
30-1000 Hz. - When a voltage is placed
across the segment, an electric field is set up
which aligns the crystals in the liquid. This
alignment allows the light to pass through. - A
segment which is not aligned will reflect the
light. - The LCD has very high contrast and can
be seen extremely well in very bright light.
- The main problem of LCD is that it
requires light source in dim or dark area
because it produces no light of its own.
48Optrex DMC-20434 LCD Kit - 4 ? 20 LCD kit that
uses Hitachi HD44780 as its display
controller. - Can be used with all demo boards
manufactured by Axiom Manufacturing. - DB7-DB0
are used to exchange data with the
microcontroller. - E pin is the enable signal to
the LCD. - RS selects the signal to be
accessed. - In CMD-11A8, the address B5F0 is
assigned to the control register and the address
B5F1 is assigned to data register.
49The Setup of the DMC-20434 LCD kit - All LCD
kits need to be set up before they can be
used. - To set up the LCD kit, we need to write
appropriate commands into the command
register. - Commands for the LCD kit are listed
in table 7.8.
50Program to initialize the DMC-20434 LCD
kit lcd_cmd EQU B5F0 lcd_init PSHX LDX lcd_c
md BRSET 0,X 80 LDAA 3C STAA 0,X set
4 ? 20 display BRSET 0,X 80 wait until LCD
is ready LDAA 01 STAA 0,X clear display
and move cursor to home BRSET 0,X 80
LDAA 0F STAA 0,X turn on
display BRSET 0,X 80 LDAA 06 STAA 0,X
set cursor increment, shift off BRSET 0,X 80
LDAA 14 STAA 0,X set cursor shift
right BRSET 0,X 80
51 LDAA 02 STAA 0,X BRSET 0,X 80
PULX RTS In C language, we need to add the
following two lines to the hc11.h file in the
ImageCraft C compiler so that we can use LCD_CMD
and LCD_DAT to access the registers of the LCD
kit define LCD_CMD (unsigned char volatile
)(0xB5F0) define LCD_DAT (unsigned char
volatile )(0xB5F1)
52The C language version of the LCD kit
initialization function void lcd_init (
) while (LCD_CMD 0x80) / wait while LCD is
busy / LCD_CMD 0x3C / set 4 ? 20 display
/ while (LCD_CMD 0x80) LCD_CMD 0x01 /
clear display and set cursor to home / while
(LCD_CMD 0x80) LCD_CMD 0x0F / display
cursor, and cursor blink on / while (LCD_CMD
0x80) LCD_CMD 0x06 / set cursor increment,
shift off / while (LCD_CMD 0x80) LCD_CMD
0x14 / set cursor shift right / while
(LCD_CMD 0x80) LCD_CMD 0x02 / move cursor
to home / while (LCD_CMD 0x80)
53Output Data on the DMC-20434 LCD Kit - The
DMC-20434 does not display alphanumeric data in
sequential order due to its internal line
wrapping. - Without line adjustment, the LCD kit
will display the first 20 characters in the first
line, the second 20 characters in the third
line, the third 20 characters in the second line,
and the fourth 20 characters in the fourth
line. - The following subroutine outputs one
character to the LCD kit and performs line
adjustment LCD_CMD EQU B5F0 LCD command
register address LCD_DAT EQU B5F1 LCD data
register address lcdputch2lcd STAA LCD_DAT
output 1 character to the LCD kit lcdlp LDAA LCD_C
MD read next character position BMI lcdlp
test if busy and wait if true CMPA 13 test
for line 1 wrap BEQ lcd1 if match, correct
line wrap CMPA 53 test for line 2
wrap BEQ lcd2 if match, correct line
wrap CMPA 27 test for line 3
wrap BEQ lcd3 if match , correct line
wrap RTS
54 correct line 1 wrap from line 3 to line
2 lcd1 LDAA 40 load line 2 start
position ORAA 80 set command
bit STAA LCD_CMD write to display RTS
correct line 2 wrap from line 4 to line
3 lcd2 LDAA 14 load line 3 start
position ORAA 80 set command
bit STAA LCD_CMD write to display RTS
correct line 3 wrap from line 2 to line
4 lcd3 LDAA 54 load line 4 start
position ORAA 80 set command
bit STAA LCD_CMD write to display RTS
this is the program to output a string pointed by
Y and terminated by a NULL character putstr2lcd LD
AA 0,Y BEQ done JSR putch2lcd INY BRA puts
tr2lcd done RTS
55C Language Version of LCD Output Functions void
putch2lcd (char ch) LCD_DAT ch while
(LCD_CMD 0x80) if (LCD_CMD 0x13)
LCD_CMD 0x40 0x80 / correct line 1
wrap from line 3 to line 2 / while (LCD_CMD
0x80) if (LCD_CMD 0x53) / correct
line 2 wrap from line 4 to line 3 / LCD_CMD
0x14 0x80 while (LCD_CMD 0x80) if
(LCD_CMD 0x27) / correct line 3 wrap from
line 2 to line 4 / LCD_CMD 0x54
0x80 while (LCD_CMD 0x80)
56void putstr2lcd (char ptr) while (ptr)
putch2lcd (ptr) ptr
57Digital to Analog Converter - D/A conversion is
required when a digital code must be converted to
an analog signal. - A general D/A converter
consists of a network of precision resistors,
input switches, and level shifters that activate
the switches that convert a digital code to an
analog voltage or current. - D/A converters have
a fixed or variable reference voltage , which can
be generated either internally or
externally. - The reference voltage determines
the switching threshold of the precision switches
that form the impedance network that controls
the value of the output signal. - Fixed reference
D/A converts have current or voltage output
values that are proportionally to the digital
input. - Multiplying D/A converters produce an
output signal that is proportional to the product
of a varying reference level and a digital code.
58Interfacing to the D/A Converter Using the 68HC11
Output Ports - The AD557 is an 8-bit D/A
converter that produces an output voltage
proportional to the digital input code. - The
AD557 can operate with a 5V supply. - Output
range is 0V to 2.55V when operated as shown in
Figure 6.23. - Vout (decimal equivalent of
input code) 0.01 V
59AD557 Input latch operation - Data input can be
latched or transparent without being
latched. - The CS and CE signals together control
the latching of input data.
The AD557 can be used to generate analog
waveforms as illustrated in the next example. It
takes 1 ms to complete the conversion of one
sample.
60Example 7.8 Use the 68HC11 port B and an AD557 to
generate a sawtooth waveform. Solution The
circuit connection is shown in Figure 7.28.
The program is in the following regbas equ
1000 PORTB equ 04 org C000 ldx
regbas clr PORTB,X again inc PORTB,X bra
again end In C language, include
lthc11.hgt main ( ) PORTB 0 while (1)
POTB
61Example 7.9 Using the circuit in Figure 7.28 to
generate the waveform shown in Figure 7.29.
Solution REGBAS EQU 1000 PORTB EQU 04 ORG C0
00 LDY REGBAS start CLR PORTB,Y output
0V JSR delay_1ms wait for 1 ms LDAA 100
output 1 V JSR delay_1ms LDAA 200 output
2 V JSR delay_1ms BRA start
delay_1ms LDX 200 again NOP NOP DEX BNE aga
in RTS
62The C Program to Generate the waveform shown in
Figure 7.29. include lthc11.hgt void delay_1ms (
) main ( ) while (1) PORTB 0 / output
0 V / delay_1ms ( ) / wait for 1 ms
/ PORTB 100 / output 1 V / delay_1ms (
) PORTB 200 / output 2 V / delay_1ms (
) return 0 void delay_1ms ( ) TFLG1
0x40 / clear OC2F flag / TOC2 TCNT 2000
/ start an OC2 operation with 1 ms delay
/ While (!(TFLG1 0x40)) / wait for 1 ms /
63- Centronics Printer Interface
- Signals
- D7-D1 data pins.
- BUSY printer busy signal (output from printer)
- PE printer error (asserted high).
- SLCT printer on-line (output from printer)
- DATA STROBE An input to the printer. Data is
latched into the printer by this signal. - ACKNLG Printer acknowledges the receipt of
data using this signal.
Centronics printer timing requirements
64Interface a Centronics printer to the 68HC11 port
C
- Configure port C as follows
- 1. Set port C for output, i.e., write the value
FF - into DDRC.
- 2. Program PIOC to set the following parameters
- pulse mode handshake output
- no STRA interrupt
- falling edge of STRA as the active edge
- STRB is active low
- normal port C pins
-
- Write the value 1C into PIOC.
The timing requirements are satisfied
Data hold time (with respect to DATA STROBE) is
at least 2 E clock cycles ( 1 ms at 2 MHz).
This is greater than the 100 ns requirement.
Data setup time is period of E 2 - tPWD tDEB
325 ns gt 50 ns (required)
65For the following subroutines, use these constant
declarations regbas equ 1000 base address
of I/O register block DDRC equ 07 offset of
DDRC from regbas PIOC equ 02 offset of PIOC
from regbas PORTCL equ 05 offset of PORTCL
from regbas PORTE equ 0A offset of PORTE
from regbas output equ FF value to set port
C as an output port Write a routine to
initialize the Centronics printer in Figure 7.32.
prt_init psha pshx ldx regbas brset
PORTE,X 40 dont go if printer
error brclr PORTE,X 80 dont go if
printer not on-line ldaa output configure
port C for output staa DDRC,X ldaa
1C initialize PIOC staa PIOC,X
pulx pula rts
66Write subroutines to print a character and a
string using polling method The subroutine
prt_char outputs the character in
A. prt_char BRCLR PIOC,X 80 wait until
the STAF bit is set to 1 STAA PORTCL,X
print the character in A RTS The subroutine
prt_str outputs the string pointed to by index
register Y. The index register X contains the
base address of the I/O register block. The
string is terminated by a NULL character. prt_str
PSHA next LDAA 0,Y get the next
character BEQ quit is this the end of the
string? JSR prt_char print the current
character INY move the string pointer BRA
next quit PULA RTS
67Write subroutines to print a character and a
string using interrupt-driven method prt_str1
enable the interrupt and then wait for the
printer interrupt until the whole string is
printed. prt_char1 print the character in A
and also move the string pointer Y. Set up the
interrupt vector table ORG FFF2 FDB
prt_char1 prt_str1 BSET PIOC,X 40 enable
STRA interrupt CLI again LDAA 0,Y wait
for printer interrupt BNE again is this end
of the string BCLR PIOC,X 40 disable STRA
interrupt SEI disable all interrupt RTS pr
t_char1 STAA PORTCL,X print the
character INY move the string
pointer TSX STY 5,X also update the saved
version of Y RTI
68C Language Version of the Printer Routines void
prt_init ( ) while ((PORTE 0x40) (!(PORTE
0x80))) DDRC 0xFF PIOC 0x1C /
polling method version / void prt_char (char
ch) while (!(PIOC 0x80))) PORTCL
ch / polling method version / void prt_str
(char ptr) while(ptr) prt_char
(ptr) ptr
69Interrupt-Driven Method Printer Routines - The
subroutine prti_str enable printer interrupt and
then stay in a wait loop to wait for
printer interrupt. - The printer interrupt
service routine (prti_char) outputs the character
pointed by Y. - The base address of I/O register
block is passed in X. - Interrupt vector table
entry for STRA interrupt must be set up
properly. prti_str BSET PIOC,X 40 enable STRA
interrupt CLI again LDAA 0,Y wait for
interrupt BNE again reach the end of the
string? BCLR PIOC,X 40 disable STRA
interrupt SEI RTS prti_char STAA PORTCL,X I
NY TSX STY 5,X update the Y value in the
stack RTI
70C Language Version of the Interrupt-Driven
Printer Functions - The pointer to the string to
be output is defined as a global variable char
ptr void prti_str ( ) PIOC 0x40 /
enable STRA interrupt / INTR_ON ( ) while
(ptr) / wait for interrupt / PIOC
0xBF / disable STRA interrupt / INTR_OFF (
) / STRA interrupt service routine
/ pragma interrupt_handler prti_char ( ) void
prti_char () PORTCL ptr
71The i8255 Programmable Peripheral Interface
(PPI) - In expanded mode, both port B and port C
are not available for I/O functions. - A possible
solution to this problem is to add an parallel
interface chip such as i8255 to the
68HC11. - The Intel i8255 has three 8-bit
ports port A, B, and C. - Signals A1-A0 select
the registers within the PPI as follows
72Operation of the i8255 - When the msb is 1, the
control register defines the operation mode.
Otherwise it sets or clears a selected
bit. - i8255 has three modes mode 0, mode 1,
and mode 2.
73Mode 0 (basic input and output) - There are two
8-bit ports and two 4-bit ports. - Any port can
be input or output. - Outputs are
latched. - Inputs are not latched. - 16 different
input/output configurations are possible in this
mode. - No handshake is required. - Data are
simply written into or read from a specified port.
74Mode 1 (Strobed Input/Output) - Port A and B use
the lines of port C to generate or accept
handshake signals required in this
mode. - Port A, B, and C are divided into two
groups. Each group consists of one 8-bit port
and one 4-bit control/data port. The 8-bit data
port can be input or output. The 4-bit port is
used for control and status of the 8-bit data
port. - Port C pin functions are shown in Table
7.10
75Mode 1 Input Timing - When the input buffer is
not full, the input device places data on input
port pins and pulses the STB signal. - The
falling edge of STB latches data into the input
port data register and sets the input
buffer full flip-flop. - The PPI asserts the
interrupt request signal INTR and the CPU reads
the data in the interrupt service routine. After
the data is read, the input buffer full flag is
cleared.
76Mode 1 Output Timing - When the output buffer is
not full and the CPU is interrupted, the CPU
writes data to the i8255. For a delay of tWB
after the rising edge of the WR signal, data
appears on i8255 port pins. - The OBF signal is
asserted by the write operation. The falling edge
of the OBF latches data into the output device
and the output device asserts the ACK signal to
acknowledge the receipt of data.
77Mode 2 (Strobed bi-directional bus I/O) - This
mode provides a means for communication with
peripheral device or structure on a single 8-bit
bus for both transmitting and receiving
data. - Only port A is used. Port A becomes an
8-bit bi-directional bus port whereas 5 bits
(PC3-PC7) of port C are used as control
port. - Functions of port C pins are shown in
Table 7.11.
78Mode 2 Signal Transactions
79Mode 2 Data Output Polling approach - The
software tests the OBF signal to determine
whether the output buffer is empty. If it
is, the data is written out. - The external
circuitry also monitors OBF signal to decide if
the microprocessor has sent new data to the
i8255. As soon as OBF is detected to be low, the
output device sends back the ACK signal to
remove data from the output buffer. - The low
level of the ACK signal causes the OBF signal to
go high and enables the three- state output
buffer so that data can be read. Interrupt-driven
approach - The software first enables the
i8255 interrupt. When the output buffer is empty,
it generates an interrupt to the CPU. The CPU
outputs a byte to the i8255 in the interrupt
service routine. - The byte written to the
i8255 causes the OBF signal to go low, which
informs the output device to latch data. - The
output device asserts the ACK signal to
acknowledge the receipt of data, which
causes the OBF signal to become inactive.
80Mode 2 Data Input Polling approach - The
software tests the IBF signal to determine if
data have been strobed into the buffer. - If IBF
is low, the input device places data on port A
pins and asserts the STB signal to strobe data
into the input buffer. After this, the IBF signal
goes high. - When the user program detects that
the IBF signal is high, it reads the data from
the input buffer. The IBF signal goes low after
the data is read. Interrupt-driven
approach - The software first enables the i8255
to interrupt the CPU. - When the IBF is low, the
input device places data on the port pins and
asserts the STB signal to strobe data into the
input buffer. - After data are strobed into the
input buffer, the IBF signal is asserted and an
interrupt is generated. - The CPU reads the data
from the input buffer when executing the
interrupt service routine. - Reading data brings
the IBF signal to low, which further causes the
STB signal to go high.
81- The i8255 on the CMD-11A8 Demo board
- - Four bytes are assigned to the i8255 on the
CMD-11A8 demo board - 1. B5F4 port A register
- 2. B5F5 port B register
- 3. B5F6 port C register
- 4. B5F7 control register
- Example 7.12 Configure the i8255 on the CMD-11A8
to operate in mode 0 - Port A for input
- Port B for output
- Upper port C for input
- Lower port C for output
- Solution
- Bit 7 set to 1 to choose mode select LDX
B5F4 - Bit 6 5 set to 0 to configure port A to mode
0 LDAA 98 - Bit 4 set to 1 to configure port A for
input STAA 3,X - Bit 3 set to 1 to configure upper port C for
input
82Example 7.14 Use the auxiliary port of the
CMD-11A8 demo board to drive 4 seven-segment displ
ays. Use port A of the i8255 to drive the segment
pattern and use the upper four bits of port B of
the i8255 to drive the display select signals.
Write a program to display 1999. Solution - The
circuit is shown in Figure7.39. - Configure i8255
to mode 0. - Configure port A and B for
output. - Write the value 80 into the register.
83PPI_BAS EQU B5F4 i8255 port A data register
address INIT_VAL EQU 80 value to initialize
i8255 PA EQU 0 offset of port A from
PPI_BAS PB EQU 1 offset of port B from
PPI_BAS ORG 2000 LDAA INIT_VAL forever LDY
distab next LDX PPI_BAS LDAA 0,Y STAA PA,X
send out the digit pattern LDAB 1,Y STAA PB,
X send out the select value INY INY LDX 2
00 1 ms delay again NOP NOP
DEX BNE again CPY
distab8 BEQ forever BRA next
84distab FCB 30,08 FCB 7B,04 FCB 7B,02 F
CB 7B,01 In C language, we need to add the
following statements to the hc11.h file so that
we can use labels to reference i8255
registers define PPI_PA (unsigned char
volatile )(0xB5F4) define PPI_PB (unsigned
char volatile )(0xB5F5) define
PPI_PC (unsigned char volatile
)(0xB5F6) define PPI_CMD (unsigned char
volatile )(0xB5F7)
85include lthc11.hgt char distab 42 0x30,
0x08, 0x7B, 0x04, ox7B, 0x02, 0x7B,
0x01 void wait_1ms ( ) main ( ) PPI_CMD
0x80 / initialize the i8255 control register
/ while (1) for (i 0 i lt 4 i)
PPI_PA distabi0 / output segment
pattern / PPI_PB distabi1 / send out
digit select / wait_1ms ( ) return
0 / create 1 ms delay / void wait_1ms (
) TFLG1 0x40 / clear OC2F flag / TOC2
TCNT 2000 while (!(TFLG1 0x40))
86The 68HC24 Port Replacement Unit - In the early
years of the 68HC11, the amount of on-chip EPROM
or EEPROM that can be implemented onto the
microcontroller chip is very limited. - The
software of the target embedded product was to be
placed in the on-chip ROM. - During the product
development stage, software need to be modified
many times. The expanded mode must be chosen
and external EPROM must be used so that software
can be modified and tested. - Ports B and C,
which were needed in the final product, were lost
in the expanded mode during the product
development phase. - The port replacement unit
68HC24 was designed to regain ports B and C so
that the products can be evaluated and
tested. - After the design had been tested and
evaluated to be satisfactory, the software in the
external EPROM could be moved into the internal
ROM without modification as long as the
external EPROM and internal ROM occupied the same
memory space. - The signals and an example of the
68HC24 application is shown in Figure 7.38.
87VDD
68HC11
68HC24
IRQ
IRQ
AS
AS
PB0-PB7
AD0-AD7
PC0-PC7
STRA
STRB
CS
PB3
PC0-PC7
A12-A15
PB4-PB7
E
E
R/W
R/W
RESET
RESET
from reset circuit
Figure 7.38 Circuit connecting the 68HC11 and the
68HC24