chapter six transparency by HC120727143420

VIEWS: 5 PAGES: 87

									                            The 68HC11 Microcontroller




Chapter 7: Parallel I/O Ports


  The 68HC11 Microcontroller


         Han-Way Huang

Minnesota State University, Mankato




                            H. Huang Transparency No.7-1
                                                         The 68HC11 Microcontroller


Basic 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.


                                                         H. Huang Transparency No.7-2
                                                                              The 68HC11 Microcontroller




      Address Bus
                          Address
                          decoder

                                                                 From input         To output
                                                                   device            device



                          R/W CE               CE              CE                 CE
                                                                interface          interface
                            RAM               ROM                chip 1              chip 2


Microprocessor

                                                    Data Bus


                 Figure 7.1 A simple computer with RAM, ROM, and input and output ports




                                                                              H. Huang Transparency No.7-3
                                                         The 68HC11 Microcontroller


I/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




                                                         H. Huang Transparency No.7-4
                                                                                 The 68HC11 Microcontroller


I/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.



                                                                 handshake or
                              Control signals                    strobe signal    I/O device
             Microprocessor                     Interface chip                    electronics
                              (such as R/W or
                                 interrupt)
                   Data Bus




                                 Data Bus

                                  Figure 7.2 The role of an interface chip




                                                                                 H. Huang Transparency No.7-5
                                                                    The 68HC11 Microcontroller


Synchronizing 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.




                                                                    H. Huang Transparency No.7-6
                                                                      The 68HC11 Microcontroller


Synchronizing 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.



                                                                      H. Huang Transparency No.7-7
                                                                    The 68HC11 Microcontroller


Input 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.

                   H1


                  Data                                 Valid Data


                   H2

                                     (a) Interlocked


                   H1



                   Data                          Valid Data

                   H2

                                     (b) Pulse mode

                                Figure 7.3 Input Handshakes



                                                                    H. Huang Transparency No.7-8
                                                                  The 68HC11 Microcontroller

Output 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.
                   H1


                  Data                Valid Data



                   H2
                                     (a) Interlocked



                   H1


                  Data             Valid Data



                   H2
                                     (b) Pulse Mode

                            Figure 7.4 Output Handshaking



                                                                  H. Huang Transparency No.7-9
                                                                  The 68HC11 Microcontroller


68HC11 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)


                                                                  H. Huang Transparency No.7-10
                                                                   The 68HC11 Microcontroller


Fixed 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




                                                                   H. Huang Transparency No.7-11
                                                                    The 68HC11 Microcontroller


Bi-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.




                                                                    H. Huang Transparency No.7-12
                                                               The 68HC11 Microcontroller


Example 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 */




                                                               H. Huang Transparency No.7-13
                                                                                             The 68HC11 Microcontroller

Parallel I/O Control Register (PIOC)

- All strobed mode I/O and handshake I/O are controlled by this register
                   7        6        5       4        3        2       1        0
                                                                                         PIOC
                 STAF     STAI CWOM HNDS            OIN      PLS     EGA     INVB      at $1002
   value after     0        0        0       0        0       U        1        1
      reset
                 STAF: Strobe A flag. This bit is set when a selected edge occurs on the
                       STRA signal.
                 STAI: Strobe A interrupt enable. When the STAF and STAI bits are
                       both equal to 1, a hardware interrupt request will be made to the
                       CPU.
                 CWOM: Port C wired-or mode.
                       0: All port C outputs are normal CMOS outputs.
                       1: All port C outputs act as open-drain outputs.
                 HNDS: Handshake/simple strobe mode select
                       0: simple strobe mode
                       1: handshake mode
                 OIN:  Output/input handshake
                       0: input handahske
                       1: output handshake
                 PLS:  Pulse/interlocked handshake operation
                       0: interlocked handshake selected
                       1: pulse handshake selected
                 EGA: Active edge for STRA
                       0: falling edge
                       1: rising edge
                 INVB: Invert STRB
                       0: STRB active low
                       1: STRB active high
                                   Figure 7. 5 PIOC register




                                                                                             H. Huang Transparency No.7-14
                                                                          The 68HC11 Microcontroller


Strobe 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.


                       ST RA                   tIH
                                         tIS
                      PORT C


                      tIS: input setup time (60 ns at 2 MHz)
                      tIH: input hold time (100 ns at 2 MHz)
              Figure 7.7 Port C strobed input timing (Redrawn with permission of
                          Motorola)




                                                                          H. Huang Transparency No.7-15
                                                                                       The 68HC11 Microcontroller


Strobed Output Port B

The strobe signal STRB is pulsed for two E clock cycles each time there is a
write to port B.

                                    MCU write to P ORT B


          E
                                            tPWD


          PORT B previous port data                        new port data
                                                               tDEB

          ST RB                                                       for 2 E cycles

          tPWD: peripheral data write delay time
          tDEB: E fall to ST RB valid delay time

         Figure 7.8 Port B strobe output timing (Redrawn with permission of
                     Motorola)




                                                                                       H. Huang Transparency No.7-16
                                                                                   The 68HC11 Microcontroller

Port C Input Handshake Protocol
                                                                     Read
                                                                    PORTCL

              E        "READY"
                                          tDEB

            STRB
                                   tAES

           STRA                     tIH
                             tIS

          PORTC

                   tDEB: E fall to STRB delay
                   tAES: STRA asserted to E fall
                   tIS: port C data setup time
                   tIH: port C data hold time
            Figure 7.9 Port C Interlocked input handshaking (Redarwn with permission of Motorola)

- 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.


                                                                                   H. Huang Transparency No.7-17
                                                                                     The 68HC11 Microcontroller


Port C Output Handshake Protocol
                              WRIT E
                             PORT CL


         E
                                        tP W D

     PORT C
                                                        tDEB            "READY"
                                                                                         tDEB

       ST RB
                                                                                  tAES


       ST RA

      tP W D: Peripheral data write delay time, 150 ns max (at 2 MHz)
      tDEB: E fall to ST RB delay, 225 ns (at 2 MHz)
      tAES: ST RA asserted to E fall setup time, 0 ns (at 2 MHz)

         Figure 7.10 Port C interlocked output handshake timing (Redrawn with permission of Motorola)

- 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.

                                                                                     H. Huang Transparency No.7-18
                                                                         The 68HC11 Microcontroller


Simple 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                                                         VCC


            LDX #REGBAS                                                            10K
                                              SW DIP-8
            LDAA PORTE,X
                                                                                      PE0
            .                                                                         PE1
            .                                                                         PE2
            .                                                                         PE3 68HC11
                                                                                      PE4
In C
                                                                                      PE5
#include <stdio.h>                                                                    PE6
main ()                                                                               PE7
{
   char xx;                          Figure 7.11 Connecting a set of eight DIP switches to port E of the 68HC11
   …
   xx = PORTE;
   …
}
                                                                         H. Huang Transparency No.7-19
                                                                               The 68HC11 Microcontroller

Interfacing 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.

                       VCC                                  5 to 20 ms
                                         H



                             to computer L

                                                           Active low output
                              Figure 7.12 Contact bounce

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.


                                                                               H. Huang Transparency No.7-20
                                                                                    The 68HC11 Microcontroller

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.


                        10K each
                                                            MC14051
                                                       X7
                                                       X6
                   5V                                  X5      inhibit         68HC11
                                                       X4
                                                       X3          X          PC7
                                                       X2          C          PC5
                                                       X1          B          PC4
                                                       X0          A          PC3


                                             C                                PC2
                                   74LS138   B                                PC1
                                             A                                PC0

                                             Figure 7.13 Keyboard structure


                                                                                    H. Huang Transparency No.7-21
                                                                       The 68HC11 Microcontroller



Keyboard Scanning Algorithm                                            Start

                                                                       i=0
- The basic algorithm is shown                                         j=0
  in Figure 7.14.
- Since we use port C pin 0 to 2                                                         yes     Keyboard
                                                                Is key(i,j) pressed?             debouncing
  to select the column and pin
  3 to 5 to select the row, we                                            no

  can use the INC PORTC,X                   j=j+1
                                                        no
                                                                      j = 7?
  instruction to move to the
                                                                           yes
  next key. This is done in the
  program on next page.                    i=i+1        no            i = 7?
                                           j=0
                                                                          yes
                                                                       i=0
                                                                       j=0


                                   Figure 7.14 Flowchart for keyboard scanning for the circuit in Figure 7.13




                                                                       H. Huang Transparency No.7-22
                                                               The 68HC11 Microcontroller


The 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




                                                               H. Huang Transparency No.7-23
                                                                              The 68HC11 Microcontroller



                                                VDD
Keyboard Debouncing                                                 Set
                                                                R                 Q        Q
- The signal output from the key switch falls                       Reset                                   Set
                                                                                               Rese
  and rises a few times within a period of                      R                              t
  5 ms as the contact bounces.                                      (a) Set-reset latch
- A human being cannot press and release a      VDD
                                                                              R
  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.                           4050                        Vout
- Both hardware and software debouncing
  techniques are available.                                         (b) CMOS gate debouncer

                                                 VDD
Hardware debouncing techniques                  R
                                                                          H
                                                                Vout
1. Set-reset flip-flops                                     C
                                                                                                      T hreshold level

2. Non-inverting CMOS gates                                               L
                                                                                      Switch closed
   with high-input impedance
                                                                     (c) Integrating RC circuit debouncer
3. Integrating debouncers
                                                      Figure 7.15 Hardware debouncing techniques




                                                                              H. Huang Transparency No.7-24
                                                                  The 68HC11 Microcontroller


Software 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
wait10ms 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




                                                                  H. Huang Transparency No.7-25
                                                               The 68HC11 Microcontroller


ASCII 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




                                                               H. Huang Transparency No.7-26
                                                            The 68HC11 Microcontroller


Example 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 tab[64] = {….};          /* 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 */
          }


                                                            H. Huang Transparency No.7-27
                                                             The 68HC11 Microcontroller

          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 tab[i];
}

                                                             H. Huang Transparency No.7-28
                                                                           The 68HC11 Microcontroller


Interfacing 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.

     68HC11

         PC7
                                                           PC7      PC6      PC5     PC4         Selected keys
         PC6
                                                           1          1       1        0    0,    1,   2,   and 3
         PC5                                               1          1       0        1    4,    5,   6,   and 7
         PC4                                               1          0       1        1    8,    9,   A,   and B
                                                           0          1       1        1    C,    D,   E,   and F
         PC3                               3   7   B   F
                                                                 Table 7.4 Sixteen-key keypad row selections
         PC2                               2   6   A   E
         PC1                               1   5   9   D
         PC0                               0   4   8   C
                                  10K


                            VCC
      Figure 7.16 Sixteen-key keypad connected to 68HC11




                                                                           H. Huang Transparency No.7-29
                                                        The 68HC11 Microcontroller


Example 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 */
        }




                                                        H. Huang Transparency No.7-30
                                                    The 68HC11 Microcontroller


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 */
}



                                                    H. Huang Transparency No.7-31
                                                  The 68HC11 Microcontroller


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 */
}



                                                  H. Huang Transparency No.7-32
                                                  The 68HC11 Microcontroller


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 */
}



                                                  H. Huang Transparency No.7-33
                                                   The 68HC11 Microcontroller


        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 */
        }
    }
}




                                                   H. Huang Transparency No.7-34
                                                                       The 68HC11 Microcontroller


Simple Output Devices

A Single Light-Emitting Diode (LED)

- An LED will illuminate when it is forward
  biased and has enough current flowing through it.                                5V
- 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.                                                300 
                                                                       74HC04
- The voltage drop across the LED with 10 mA
  current flowing through it is assumed to be
                                                       Figure 7.17 A simple LED connected to a CMOS inverter
  1.7V in this chapter.                                         through a current-limiting resistor
- 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.




                                                                       H. Huang Transparency No.7-35
                                                              The 68HC11 Microcontroller


Example 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,                                         5V          5V        5V   5V
  output $08 to port B.                     68HC11
                                                              blue     green      red yellow
- To light the green LED,
  output $04 to port B.
- To light the red LED,                               74HC04         300      300     300  300 
                                                PB3
  output $02 to port B.                                              74HC04
                                                PB2
- To light the yellow LED,                                                     74HC04
                                                PB1
  output $01 to port B.                                                                74HC04
- The required time can be created by           PB0

  repeating the following delay loop
  for 20, 40, 80, and 160 times:                      Figure 7.18 LEDs circuit connection


          ldx #20000
tenth_s   nop
          nop
          dex
          bne tenth_s

                                                              H. Huang Transparency No.7-36
                                              The 68HC11 Microcontroller

               regbas    equ $1000
The Program:
               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
                         dex
                         bne tenth_s
                         decb
                         bne pt_lp
                         cpy #lt_tab+8 ; reach the table end?
                         bne next
                         bra loop
                         end

                                              H. Huang Transparency No.7-37
                                                                                 The 68HC11 Microcontroller


The 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.

                a               a         b       c        d        e      f        g    h

            f        b
                g

            e        c
                         h
                d

         (a) seven-segment
             display                                           common cathode
                                         (b) Common-cathode seven-segment display

                                                                  Common anode




                                a         b       c        d        e      f        g    h

                                              (c) Common-anode seven-segment display

                             Figure 7.19 Seven-segment displays




                                                                                 H. Huang Transparency No.7-38
                                                                       The 68HC11 Microcontroller

Driving the seven-segment displays with the 68HC11 parallel ports
                                                68HC11
- A segment requires 10 mA to be                                                 100  each
  lighted brightly.                                                                                     a
                                                        PB6                                   a
- A buffer chip like 74ALS244 can                       PB5                                   b f
                                                                                                            b
  be used to boost the 68HC11’s current                 PB4                                   c




                                                                       74ALS24
                                                                                                        g
                                                        PB3                                    d
  capability.                                           PB2                                    e e       c
- The 74ALS244 has a 3V output when it is




                                                                       4
                                                        PB1                                    f
  high and a 0.2V output when it is low.                PB0                                    g
                                                                                                    d
                                                                                              common cathode
- For the circuit shown in Figure 7.20, a
  segment will have a current of 13 mA when
                                                 Figure 7.20 Driving a single seven-segment display
  it is lighted.
- To display a BCD digit, an appropriate
                                                                  Segments
  value must be written to the port register.   BCD                                        Corresponding
                                                digit     a   b    c    d    e     f   g    Hex Number
  The value is listed in Table 7.6.
                                                 0       1    1    1    1    1     1   0          $7E
- When multiple digits are to be displayed,      1       0    1    1    0    0     0   0          $30
  the multiplexing technique is often used to    2       1    1    0    1    1     0   1          $6D
                                                 3       1    1    1    1    0     0   1          $79
  reduce the number of port pins required.       4       0    1    1    0    0     1   1          $33
                                                 5       1    0    1    1    0     1   1          $5B
                                                 6       1    0    1    1    1     1   1          $5F
                                                 7       1    1    1    0    0     0   0          $70
                                                 8       1    1    1    1    1     1   1          $7F
                                                 9       1    1    1    1    0     1   1          $7B
                                                     T able 7.6 BCD to seven-segment decoder



                                                                       H. Huang Transparency No.7-39
                                                                                                The 68HC11 Microcontroller

  Using Multiplexing Method to Display Multiple BCD Digits

                                                         #5                #4                         #0
                             100                    a               a                .   .   . a
                                             .       b             . b                .   .   . b
                                             .                     .
                                     100    .                     .
                                                     g               g
                     74ALS244                                                         .   .   . g
              P B6    P B5       P B0                        common         common                     common
                                                             cathode        cathode                    cathode
                                        R
                               PD5                   2N2222




                                                                                                       IMAX = 70 mA
                                                         R               2N2222
                 68HC11        PD4               .
                                                 .
                                                 .                         R
                               PD0                                                                  2N2222


                     Figure 7.21 Port B and port D together drive six seven-segment displays


- 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.



                                                                                                H. Huang Transparency No.7-40
                                                                The 68HC11 Microcontroller

How 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 ;            “
                      end


                                                                H. Huang Transparency No.7-41
                                                             The 68HC11 Microcontroller


In 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.




                                                             H. Huang Transparency No.7-42
                                                                           The 68HC11 Microcontroller



Example 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).
                  Seven-segment      Displayed                  Port D
                                                    Port B
                     display         BCD digit
                       #5                 1          $30         $20
                       #4                 2          $6D         $10
                       #3                 3          $79         $08
                       #2                 4          $33         $04
                       #1                 5          $5B         $02
                       #0                 6          $5F         $01
                     Table 7.7 Table of display patterns for example 7.6


 This Table can be set up by the following
 assembler directives:
           org       $00
   display FCB       $06,$20
           FCB       $5B,$10
           FCB       $4F,$08
           FCB       $66,$04
           FCB       $6D,$02
           FCB       $7D,$01


                                                                           H. Huang Transparency No.7-43
                                                                          The 68HC11 Microcontroller



Algorithm for Displaying Multiple Digits Using Time Multiplexing Technique



                                            Start


                                   Y       address of display



                              Write the byte at Y to port B
                              Write the byte at Y+1 to port D


                                       Increment Y by 2
                                         Wait for 1 ms


                        no
                                       Y = display + 12?

                                                yes

                  Note: display is the label of the display table
              Figure 7.22 T ime-multiplexed seven-segment display algorithm




                                                                          H. Huang Transparency No.7-44
                                          The 68HC11 Microcontroller


regbas    equ   $1000
PORTB     equ   $04
PORTD     equ   $08
DDRD      equ   $09
output    equ   $3F

          org   $00               ldaa 1,Y
display   fcb   $06,$20           staa PORTD,X
          fcb   $5B,$10           iny
          fcb   $4F,$08           iny
          fcb   $66,$04           ldx #200 ; loop to delay for 1 ms
          fcb   $6D,$02   again   nop      ;           “
          fcb   $7D,$01           nop      ;           “
                                  dex      ;           “
          org $C000               bne again            ;          “
          ldx #regbas             cpy #display+12 ; end of table?
          ldaa #output            beq forever
          staa ddrd,X             bra next ; light the next display
forever   ldy #display            end
next      ldaa 0,Y
          ldx #regbas
          staa PORTB,X


                                          H. Huang Transparency No.7-45
                                                            The 68HC11 Microcontroller


C language version

#include <hc11.h>
char display [6][2] = {{0x30, 0x20}, {0x6D, 0x10}, {0x79, 0x08}, {0x33, 0x04},
               {0x5B, 0x02}, {0x5F, 0x01}};
void delay_1ms ( );
main ( )
{
   int i;
   while (1) {
        for (i = 0; i < 6; i++) {
               PORTB = display[i][0];
               PORTD = display[i][1];
               delay_1ms ( );
        }
   }
void delay_1ms ( )
{
   TFLG1 = 0x40;                  /* clear OC2F flag */
   TOC2 = TCNT + 2000;
   while (!(TFLG1 & 0x40));
}


                                                            H. Huang Transparency No.7-46
                                                                           The 68HC11 Microcontroller


Liquid Crystal Displays (LCD)

- An LCD must be activated in order         - The main problem of LCD is that it requires
  to be lighted.                              light source in dim or dark area because it
- The LCD type of display that is             produces no light of its own.
  most common today allows light to
  pass through it when it is activated.
- The LCD displays are organized                                                       Segment          Frontplane
  as segments for displaying digits
  or characters.
- Activation of a segment requires a
  low-frequency bipolar excitation        Glass
  voltage of 30-1000 Hz.
- When a voltage is placed across
  the segment, an electric field is
                                                                                                       Backplane
  set up which aligns the crystals in             Liquid crystal
                                                                              Black cardboard backing
  the liquid. This alignment allows
  the light to pass through.                              Figure 7.23 A liquid crystal display (LCD)

- 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.

                                                                           H. Huang Transparency No.7-47
                                                                     The 68HC11 Microcontroller


Optrex 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
    assigned to data register.


DB7                              COM 16
                                                 LCDP (FRD7069)
DB0

      E         CONTROLLER       SEG 40
                    LSI                                    SEG 160
    R/W
                  HD44780
     RS
     VEE
     VCC                           4
                                              SEGMENT DRIVER x 4
     VSS

           Figure 7.24 Block diagram of the DMC-20434 LCD kit




                                                                     H. Huang Transparency No.7-48
                                                                         The 68HC11 Microcontroller

The 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.

                                Command                         Data     Time delay
            Clear display , set cursor to home                  $01       1.65 ms
            Set cursor to home                                  $02       1.65 ms
            Entry mode:
                     cursor decrement, shift off                $04        40 s
                     cursor decrement, shift on                 $05        40 s
                     cursor increment, shift off                $06        40 s
                     cursor increment, shift on                 $07        40 s
            Display control:
                     display, cursor, and cursor blink off      $08        40 s
                     display on, cursor and cursor blink off    $0C        40 s
                     display and cursor on, cursor blink off    $0E        40 s
                     display, cursor, and cursor blink on       $0F        40 s
            Cursor/D isp lay shift:
                     cursor shift left                           $10       40 s
                     cursor shift right                          $14       40 s
                     display shift left                          $18       40 s
                     display shift left                          $1C       40 s
            Display function (default 4x20)                      $3C       40 s
            Character generator RAM address set                $40-$7F     40 s
            Display RAM address set                            $80-$FF     40 s
                     (4 x 20 display = $80-$CF)

                            Table 7.8 Commands for D M C-20434 LCD Kit



                                                                         H. Huang Transparency No.7-49
                                                          The 68HC11 Microcontroller


Program to initialize the DMC-20434 LCD kit

lcd_cmd EQU $B5F0
lcd_init PSHX
         LDX #lcd_cmd
         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 *



                                                          H. Huang Transparency No.7-50
                                                            The 68HC11 Microcontroller


          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)




                                                            H. Huang Transparency No.7-51
                                                          The 68HC11 Microcontroller



The 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);
}




                                                          H. Huang Transparency No.7-52
                                                             The 68HC11 Microcontroller


Output 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 th
  fourth 20 characters in the fourth line.
- The following subroutine outputs one character to the LCD kit and performs line adjustmen

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_CMD           ; 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


                                                             H. Huang Transparency No.7-53
                                                           The 68HC11 Microcontroller

* 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 characte
putstr2lcd      LDAA 0,Y
                BEQ     done
                JSR     putch2lcd
                INY
                BRA     putstr2lcd
done            RTS

                                                           H. Huang Transparency No.7-54
                                                      The 68HC11 Microcontroller

C 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);
  }
}




                                                      H. Huang Transparency No.7-55
                               The 68HC11 Microcontroller


void putstr2lcd (char *ptr)
{
  while (*ptr) {
           putch2lcd (*ptr);
           ptr++;
  }
}




                               H. Huang Transparency No.7-56
                                                             The 68HC11 Microcontroller


Digital 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 for
  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.




                                                             H. Huang Transparency No.7-57
                                                                                          The 68HC11 Microcontroller


Interfacing 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



                                                                                                             +5 V
 Bit 8 (LSB)   1                 16 VOUT               Analog output
                                                                                                  0.1F
       Bit 7   2                 15 VOUT SENSE A

       Bit 6   3                 14 VOUT SENSE B               16      15      14        13          12        11  10 9
               4                                             VOUT                       GND GND               VCC CS CE
       Bit 5                     13 GND
                     AD557
       Bit 4   5                 12 GND
                                                            (LSB)                                                             (MSB)
       Bit 3   6                 11 +V CC
                                                               1          2         3         4          5          6     7          8
       Bit 2   7                 10     CS                   Bit    Bit       Bit       Bit        Bit        Bit       Bit    Bit
                                        CE                    8      7         6         5          4          3         2      1
Bit 1 (MSB)    8                 9
                                                   Figure 7.27 AD557 unipolar output configuration, 0 V to 2.55 V operation
         Figure 7.26 AD557 Pin Layout




                                                                                          H. Huang Transparency No.7-58
                                                                               The 68HC11 Microcontroller


AD557 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.



                               Table 7.9 AD557 input latch operation
                  Input                       D/A converter          Latch
                   data   CE         CS           data             condition

                    0      0          0             0              "transparent"
                    1      0          0             1              "transparent"
                    0                 0             0                 latching
                    1                 1             1                 latching
                    0      0                        0                 latching
                    1      0                        1                 latching
                    x      1          x       previous data           latching
                    x      x          1       previous data           latching




The AD557 can be used to generate analog waveforms as illustrated in the next example. It
takes 1 s to complete the conversion of one sample.




                                                                               H. Huang Transparency No.7-59
                                                                      The 68HC11 Microcontroller

Example 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                  68HC11                   AD557
                                                                             VOUT
                                      PB7           Bit 8           VOUT
          org $C000
                                      PB6           Bit 7 VOUT Sence A
          ldx #regbas
                                      PB5           Bit 6 VOUT Sence B
          clr PORTB,X
                                      PB4           Bit 5           GND
again     inc PORTB,X
                                      PB3           Bit 4           GND
          bra again
                                      PB2           Bit 3           VCC
          end
                                      PB1           Bit 2           CS
In C language,
                                      PB0           Bit 1           CE

#include <hc11.h>                    Figure 7.28 Using an AD557 to generate a sawtooth waveform
main ( )
{
   PORTB = 0;
   while (1) {
           POTB ++;
   }
}

                                                                      H. Huang Transparency No.7-60
                                                                         The 68HC11 Microcontroller


Example 7.9 Using the circuit in Figure 7.28 to generate the waveform shown in Figure 7.29.


                    2V
                    1V

                         1 ms   1 ms    1 ms    1 ms    1 ms    1 ms
                            Figure 7.29 Another periodic waveform



Solution:
REGBAS      EQU    $1000                                            delay_1ms   LDX #200
PORTB       EQU    $04                                              again       NOP
            ORG    $C000                                                        NOP
            LDY    #REGBAS                                                      DEX
start       CLR    PORTB,Y             ; output 0V                              BNE again
            JSR    delay_1ms           ; wait for 1 ms                          RTS
            LDAA   #100                ; output 1 V
            JSR    delay_1ms
            LDAA   #200                ; output 2 V
            JSR    delay_1ms
            BRA    start




                                                                         H. Huang Transparency No.7-61
                                                         The 68HC11 Microcontroller


The C Program to Generate the waveform shown in Figure 7.29.

#include <hc11.h>
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 */
}


                                                         H. Huang Transparency No.7-62
                                                                                    The 68HC11 Microcontroller


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
                      PE


                    SLCT


                    D7 - D1
                                           50 ns (minimum)
                                                                           100 ns (minimum)
              DAT A ST ROBE

                     Busy


                   ACKNLG                                                       4 s

                     Figure 7.31 Centronics printer interface timing requirements


                                                                                    H. Huang Transparency No.7-63
                                                                               The 68HC11 Microcontroller


  Interface a Centronics printer to the 68HC11 port C

                                      Centronics            Configure port C as follows:
         68HC11                        interface
                 PC6                D6
                 PC5
                                                            1. Set port C for output, i.e., write the value $FF
                                    D5
                 PC4                D4                         into DDRC.
                 PC3                D3                      2. Program PIOC to set the following parameters:
                 PC2
                 PC1
                                    D2
                                                            • pulse mode handshake output
                                    D1
                 PC0                D0                      • no STRA interrupt
               STRB                 DATA STROBE             • falling edge of STRA as the active edge
               STRA                 ACKNLG                  • STRB is active low
                 PE7                SLCT
                                                            • normal port C pins
                 PE6                PE

   Figure 7.32 Interfacing a Centronics printer to port C     Write the value $1C into PIOC.


The timing requirements are satisfied :
Data setup time is                     Data hold time (with respect to DATA STROBE)
period of E ÷ 2 - tPWD + tDEB          is at least 2 E clock cycles (= 1 s at 2 MHz). This
           = 325 ns > 50 ns (required) is greater than the 100 ns requirement.




                                                                               H. Huang Transparency No.7-64
                                                           The 68HC11 Microcontroller

For 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 * ; don’t go if printer error
           brclr PORTE,X $80 * ; don’t 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

                                                           H. Huang Transparency No.7-65
                                                             The 68HC11 Microcontroller


Write 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




                                                             H. Huang Transparency No.7-66
                                                              The 68HC11 Microcontroller


Write 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

prt_char1 STAA PORTCL,X           ; print the character
          INY                     ; move the string pointer
          TSX
          STY 5,X                          ; also update the saved version of Y
          RTI
                                                              H. Huang Transparency No.7-67
                                                  The 68HC11 Microcontroller


C 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++;
   }
}


                                                  H. Huang Transparency No.7-68
                                                              The 68HC11 Microcontroller


Interrupt-Driven Method Printer Routines

- The subroutine prti_str enable printer interrupt and then stay in a wait loop to wait for printe
  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
          INY
          TSX
          STY 5,X                 ; update the Y value in the stack
          RTI



                                                              H. Huang Transparency No.7-69
                                                             The 68HC11 Microcontroller


C 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++;
}



                                                             H. Huang Transparency No.7-70
                                                                                       The 68HC11 Microcontroller


The 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:


   A1 A0        port selected
                                                        Group                  Data            (8)
   0   0     port A                                       A                   Register                  Port A
   0   1     port B                                     Control                  A
   1   0     port C
   1   1     control (write only)
                                                                               Data            (4)
                                                                              Reg. C
                                     D7-D0                                                     (4)       Port C



                                       RD
                                                        Group                  Data            (8)
                                       WR
                                                          B                   Register                  Port B
                                       A1
                                                        Control                  B
                                       A0
                                    RESET
                                       CS

                                            Figure 7.33 Intel i8255 programmable peripheral interface




                                                                                       H. Huang Transparency No.7-71
                                                                           The 68HC11 Microcontroller



Operation of the i8255               Control Word
                             D7 D6 D5 D4 D3 D2 D1 D0
                                                                                   Group B
- When the msb is 1, the                                          Port C (lower): 1 = input, 0 = output
  control register defines                                        Port B: 1 = input; 0 = output
                                                                  Mode selection: 0 = mode 0; 1 = mode 1
  the operation mode.
  Otherwise it sets or                                                             Group A
  clears a selected bit.                                          Port C (upper): 1 = input, 0 = output
- i8255 has three modes:                                          Port A: 1 = input, 0 = output
                                                                  Mode selection: 00 = mode 0, 01 =
  mode 0, mode 1, and                                                            mode 1, 1x = mode 2
  mode 2.                                                         Mode select flag: 1 = active
                                       Figure 7.34 i8255 control register mode definition format


                                       Control Word
                              D7 D6 D5 D4 D3 D2 D1 D0

                                 x     x     x                        Bit set/reset: 1 = set, 0 = reset
                                     Don't
                                     care                             Bit Select
                                                                     012345        6   7
                                                                     010101        0   1B0
                                                                     001100        1   1B1
                                                                     000011        1   1B2


                                                                     Bit Set/Reset Flag: 0 = active
                                       Figure 7.35 i8255 control register bit set/reset format



                                                                           H. Huang Transparency No.7-72
                                                              The 68HC11 Microcontroller


Mode 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.




                                                              H. Huang Transparency No.7-73
                                                                                      The 68HC11 Microcontroller


Mode 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
                                   Table 7.10 Port C pin functions in mode 1

                                                     Pin Function
                 Pin
                        Port A as input    Port A as output Port B as input Port B as output
                              I/O                                 NA
                PC7                             OBF A                             NA
                              I/O                                 NA
                PC6                            ACK A                              NA
                             IBFA                                 NA
                PC5                              I/O                              NA
                             STBA                                 NA
                PC4                              I/O                              NA
                             INTR                                 NA
                PC3                            INTRA                              NA
                PC2            A                 NA              STBB           ACK B
                              NA                                 IBFB
                PC1                              NA                              OBF B
                              NA                                INTRB
                PC0                              NA                             INTRB
                              NA
                Note:
                 OBF X (X = A or B): Output buffer full flip-flop. The OBF will go low to
                       indicate that the CPU has written data out to the specified port.
                 ACK X: Acknowledge input. A low on this pin informs the i8255 that the
                       data from port A or B have been accepted.
                 INTRX: Interrupt request. A high on this pin can be used to interrupt the
                      CPU when an output device has accepted data transmitted by the CPU.
                 STBX: Strobe Input. A low on this input loads data into the input latch.
                 IBFX: Input buffer full. A high on this pin indicates that data have been
                      loaded into the input latch.


                                                                                      H. Huang Transparency No.7-74
                                                                       The 68HC11 Microcontroller


Mode 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 buffe
  full flip-flop.
- The PPI asserts the interrupt request signal INTR and the CPU reads the data in the interru
  service routine. After the data is read, the input buffer full flag is cleared.


                   STB

                              tSIB
                   IBF
                                               tSI
                                               T
                                                                     tRIB
                   INTR                                       tRIT
                    RD

                                                   tP H
              Input from
              peripheral
                                tP S

                           Figure 7.36 Mode 1 input timing diagram




                                                                       H. Huang Transparency No.7-75
                                                                        The 68HC11 Microcontroller


Mode 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 dat
  into the output device and the output device asserts the ACK signal to acknowledge the
  receipt of data.



                 WR

                                                                tAOB
                 OBF                    tW OB


                INT R          tW IT


                 ACK
                                       tW B
                                                           tA           tAI
               Output                                      K            T
                data

                             Figure 7.37 Mode 1 output timing diagram




                                                                        H. Huang Transparency No.7-76
                                                                                   The 68HC11 Microcontroller


Mode 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.
                                   Pin     Pin Function
                                   PC7          OBF A
                                   PC6          ACK A
                                   PC5           IBF A
                                   PC4          ST BA
                                   PC3          INT RA
                                   PC2            I/O
                                   PC1            I/O
                                   PC0            I/O

              Note.
               OBF A : Output buffer full. T he OBF will go low to indicate that the
                     CPU has written data out to port A.
               ACK A: Acknowledge input. A low on this pin enables the tri-state output
                     buffer of port A to send out data.
               INT RA: Interrupt request. A high on this pin can be used to interrupt the
                    CPU for both input or output.
               ST BA: Strobe Input. A low on this pin loads data into the input latch.
               IBFA: Input buffer full. A high on this pin indicates that data have been
                    loaded into the input latch.
                        T able 7.12 Port C pin functions in mode 2


                                                                                   H. Huang Transparency No.7-77
                                                                                    The 68HC11 Microcontroller


Mode 2 Signal Transactions

                              Data from
                             CPU to i8255

             WR
                                                                       tAOB

            OBF
                              tW OB

           INTR
                                                                       tA
                                                                       K
            ACK
                                                    tST

            STB
                                             tSIB
            IBF                                           tP H   tAD
                                                tP S                          tKD
         Peripheral
            bus
                                                                                              tRIB
            RD
                      data from peripheral                  Data from i8255
                            to i8255                         to peripheral
                                                                                 data from
                                                                               i8255 to CPU
                              Figure 7.38 i8255 Mode 2 signal transactions




                                                                                    H. Huang Transparency No.7-78
                                                            The 68HC11 Microcontroller


Mode 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 ba
    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 caus
    the OBF signal to become inactive.



                                                            H. Huang Transparency No.7-79
                                                            The 68HC11 Microcontroller


Mode 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 strob
  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 sig
  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.




                                                            H. Huang Transparency No.7-80
                                                     The 68HC11 Microcontroller


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
   Bit 2: set to 0 to configure port B to mode 0
   Bit 1: set to 0 to configure port B for output
   Bit 0: set to 0 to configure lower port C for output


                                                     H. Huang Transparency No.7-81
                                                                                    The 68HC11 Microcontroller


Example 7.14 Use the auxiliary port of the CMD-11A8 demo board to drive 4 seven-segment
displays. 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.
                                                      #3           #2          #1          #0
                                            100 a             a          a           a
                                                 b             b          b           b
                                            100 .             .          .           .
                                                 .             .          .           .
                                                 .             .          .           .
                                            100 g             g          g           g

                                                                                            common
                             74ALS244                                                        cathode
                        P A6 P A5    P A0     R         2N2222




                                                                                             Imax = 70 mA
                                      PC3
                                                                     2N2222
                                              R
                                      PC2
                             i8255                                               2N2222
                                              R
           D7-D0, RD,                 PC1
           CS, A1-A0
                                              R                                             2N2222
                                      PC0


                          Figure 7.39 Use port A and C of i8255 to drive four seven-segment displays



                                                                                    H. Huang Transparency No.7-82
                                                        The 68HC11 Microcontroller


PPI_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    #200        ; 1 ms delay
again      NOP                ; “
           NOP                ; “
           DEX                ; “
           BNE    again       ; “
           CPY    #distab+8
           BEQ    forever
           BRA    next


                                                        H. Huang Transparency No.7-83
                                                           The 68HC11 Microcontroller


distab     FCB      $30,$08
           FCB      $7B,$04
           FCB      $7B,$02
           FCB      $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)




                                                           H. Huang Transparency No.7-84
                                                            The 68HC11 Microcontroller


#include <hc11.h>
char distab [4][2] = {{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 < 4; i++) {
              PPI_PA = distab[i][0];             /* output segment pattern */
              PPI_PB = distab[i][1];             /* 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));
}


                                                            H. Huang Transparency No.7-85
                                                        The 68HC11 Microcontroller


The 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
  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 produ
  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.




                                                        H. Huang Transparency No.7-86
                                                The 68HC11 Microcontroller



                                                        VDD
68HC11                                 68HC24
      IRQ                        IRQ
      AS                         AS                           PB0-PB7
  PC0-PC7                        AD0-AD7                      STRA
      PB3                        CS                           STRB

  PB4-PB7                        A12-A15                      PC0-PC7
       E                         E
     R/W                         R/W
   RESET                         RESET
            from reset circuit


Figure 7.38 Circuit connecting the 68HC11 and the 68HC24




                                                H. Huang Transparency No.7-87

								
To top