# ECE 372

Document Sample

```					          ECE 372 – Microcontroller Design
Basic Assembly Programming

For Loop Example:
for(j=0; j<10; j++)
{
// do something
}

Programming Steps:                     Assembly Code:
1.   Initialize J                            ldaa #0     ; Initialize j
Loop: cmpa #10    ; Compare j to 10
2.   Compare J to 10
bge EndLoop ; Else !(j<10)
3.   If Not Less than 10,                                ; do something
1. End Loop                             adda #1     ; Increment j
4.   Else                                    bra Loop    ; Repeat Loop
1.    do something                EndLoop:          ; do something else
2.    Increment J
3.    Repeat Loop (Step 2)

1
ECE 372 – Microcontroller Design
Basic Assembly Programming
Assembly Code:
ldaa #0     ; Initialize j
Loop: cmpa #10    ; Compare j to 10
bge EndLoop ; Else !(j<10)
; do something
adda #1     ; Increment j                          How do we determine
bra Loop    ; Repeat Loop                          these values?
EndLoop:          ; do something else

\$4000   \$86   LDAA immediate addressing
\$4001   \$00   Value to be stored in A
\$4002    \$    CMPA immediate addressing
\$4003   \$0A   Compare Value 10
\$4004    \$    BGE (Branch if greater then or equal to
zero)
\$4005   \$04   PC=PC+2+Rel
\$4007   \$01   Value to add to A
\$4008    \$    Branch Always
\$4009   \$F8   PC=PC+2+Rel
…                                                                      2
ECE 372 – Microcontroller Design
HCS12 Instruction Set Summary Overview

…

…
…

…

3
ECE 372 – Microcontroller Design
HCS12 Instruction Glossary

4
ECE 372 – Microcontroller Design
HCS12 Opcode Table

5
ECE 372 – Microcontroller Design
Basic Assembly Programming
Assembly Code:
ldaa #0     ; Initialize j
Loop: cmpa #10    ; Compare j to 10
bge EndLoop ; Else !(j<10)
; do something
adda #1     ; Increment j
bra Loop    ; Repeat Loop
EndLoop:          ; do something else

\$4000   \$86   LDAA immediate addressing
\$4001   \$00   Value to be stored in A
\$4002   \$81   CMPA immediate addressing
\$4003   \$0A   Compare Value 10
\$4004   \$2C   BGE (Branch if greater then or equal to
zero)
\$4005   \$04   PC=PC+2+Rel
\$4007   \$01   Value to add to A
\$4008   \$20   Branch Always
\$4009   \$F8   PC=PC+2+Rel
…                                                     6
ECE 372 – Microcontroller Design
Execution Time Analysis

How long does this loop take to execute?                       Cycles
\$4000   \$86   LDAA immediate addressing                         1
\$4001   \$00   Value to be stored in A
\$4002   \$81   CMPA immediate addressing                         1
\$4003   \$0A   Compare Value 10
\$4004   \$2C   BGE (Branch if greater then or equal to zero)    3/1
\$4005   \$04   PC=PC+2+Rel                                              Loop
\$4007   \$01   Value to add to A
\$4008   \$20   Branch Always                                     3
\$4009   \$F8   PC=PC+2+Rel
…

Loop Cycles = (1+1+1+3)*10 + (1+3)
Loop Cycles = 64 cycles
Core Clock = 4 MHz
Execution Time = 64 * 250 ns = 16000 ns
Execution Time = 16 us
7
ECE 372 – Microcontroller Design
HCS12 Registers

8
ECE 372 – Microcontroller Design
HCS12 Registers - Accumulators

   Accumulators
   Source and destination of arithmetic
operations
   A, B are 8-bit registers
   D is the combination of A and B
   Forms a 16-bit register
   A is the MSB and B is the LSB
   Used for 16-bit operations
ldaa #\$5

9
ECE 372 – Microcontroller Design
HCS12 Registers - Accumulators

Is there any difference between the following assembly code examples?
ldaa #\$50
ldab #\$01          vs.        ldd #\$0150      vs.      ldd #\$5001

ldaa #\$00                                              clra
ldab #\$0A          vs.        ldd #10         vs.      ldab #\$0A

10
ECE 372 – Microcontroller Design
HCS12 Registers - CCR

   Condition Code Register (CCR)
   C – Carry/Borrow
   Set when a carry occurs during addition or
a borrow occurs during subtraction

   O – Overflow
   Set in the event of an overflow during an
arithmetic operation

   Z – Zero
   Set when all the bits of the result are 0s

   N – Negative
   Shows the state of the MSB of the result
   N is most commonly used in two’s
complement arithmetic (more on this later)

   H – Half Carry
   Indicates a carry from accumulator A bit 3
during an addition operation
   DAA instruction uses the value of the H bit

11
ECE 372 – Microcontroller Design
HCS12 Registers - CCR

   Condition Code Register (CCR)
   S – Enable/Disable STOP instruction
   Clearing the S bit enables the STOP
instruction
   Setting the S bit will treat a STOP
instruction like a NOP

   I, X – Mask IRQ/XIRQ Interrupts
   More on these later

12
ECE 372 – Microcontroller Design
Time for Fun (or maybe not?)

1                 2       3

4          5          4   5

1                 2       3

13
ECE 372 – Microcontroller Design
MC9S12C Block Diagram

14
ECE 372 – Microcontroller Design
MC9S12C Block Diagram

Internal System Bus   15
ECE 372 – Microcontroller Design
Instruction Execution Timing - Reset
\$4000   \$86     LDAA immediate addressing
\$4001   \$00     Value to be stored in A
\$4002   \$81     CMPA immediate addressing
\$4003   \$0A     Compare Value 10
\$4004   \$2C     BGE (Branch if greater then or equal to
zero)
\$4005   \$04     PC=PC+2+Rel
\$4007   \$01     Value to add to A
\$4008   \$20     Branch Always
\$4009   \$F8     PC=PC+2+Rel

ECLK

R/W

ADDR15:0         \$FFFE        \$4000         \$4002

DATA15:0            \$4000         \$8600         \$810A

Triggered by Reset     PC address     and immediate value
16
ECE 372 – Microcontroller Design
Instruction Execution Timing – Initial Loop Execution
\$4000   \$86   LDAA immediate addressing
\$4001   \$00   Value to be stored in A
\$4002   \$81   CMPA immediate addressing
\$4003   \$0A   Compare Value 10
\$4004   \$2C   BGE (Branch if greater then or equal to
zero)
\$4005   \$04   PC=PC+2+Rel
\$4007   \$01   Value to add to A
\$4008   \$20   Branch Always
\$4009   \$F8   PC=PC+2+Rel

ECLK

R/W

ADDR15:0     \$FFFE         \$4000          \$4002         \$4004        \$4006

DATA15:0          \$4000        \$8600           \$810A        \$2C04        \$8B01

A = 0                                     A = 1
Branch not taken,
requires only 1 cycles
17
ECE 372 – Microcontroller Design
Instruction Execution Timing – BRA Execution
\$4000   \$86   LDAA immediate addressing
\$4001   \$00   Value to be stored in A
\$4002   \$81   CMPA immediate addressing
\$4003   \$0A   Compare Value 10
\$4004   \$2C   BGE (Branch if greater then or equal to
zero)
\$4005   \$04   PC=PC+2+Rel
\$4007   \$01   Value to add to A
\$4008   \$20   Branch Always
\$4009   \$F8   PC=PC+2+Rel

ECLK

R/W
PC = \$4008 + 2 + \$F8(-8) = \$4002

ADDR15:0     \$4006           \$4008                                      \$4002      \$4004

DATA15:0          \$8B01           \$20F8                                    \$810A      \$2C04

A = 1
Branch always (BRA)
requires 3 cycles
18
ECE 372 – Microcontroller Design
Instruction Execution Timing – Final Loop Execution
\$4000     \$86    LDAA immediate addressing
\$4001     \$00    Value to be stored in A
\$4002     \$81    CMPA immediate addressing
\$4003     \$0A    Compare Value 10
\$4004     \$2C    BGE (Branch if greater then or equal to
zero)
\$4005     \$04    PC=PC+2+Rel
\$4007     \$01    Value to add to A
\$4008     \$20    Branch Always
\$4009     \$F8    PC=PC+2+Rel

ECLK

R/W
PC = \$4004 + 2 + \$04 = \$4010

ADDR15:0        \$4002         \$4004                                  \$4010

DATA15:0             \$810A        \$2C04                                 \$????

A = 10
A>=10, Branch taken,
requires 3 cycles
19

```
DOCUMENT INFO
Shared By:
Categories:
Tags:
Stats:
 views: 1 posted: 11/24/2011 language: English pages: 19
How are you planning on using Docstoc?