Presentation is loading. Please wait.

Presentation is loading. Please wait.

1 ECE 372 – Microcontroller Design Basic Assembly Programming for(j=0; j<10; j++) { // do something } For Loop Example: 1.Initialize J 2.Compare J to 10.

Similar presentations


Presentation on theme: "1 ECE 372 – Microcontroller Design Basic Assembly Programming for(j=0; j<10; j++) { // do something } For Loop Example: 1.Initialize J 2.Compare J to 10."— Presentation transcript:

1 1 ECE 372 – Microcontroller Design Basic Assembly Programming for(j=0; j<10; j++) { // do something } For Loop Example: 1.Initialize J 2.Compare J to 10 3.If Not Less than 10, 1.End Loop 4.Else 1.do something 2.Increment J 3.Repeat Loop (Step 2) Programming Steps: 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

2 2 ECE 372 – Microcontroller Design Basic Assembly Programming $4000$86LDAA immediate addressing $4001$00Value to be stored in A $4002$CMPA immediate addressing $4003$0ACompare Value 10 $4004$BGE (Branch if greater then or equal to zero) $4005$04PC=PC+2+Rel $4006$ADDA immediate addressing $4007$01Value to add to A $4008$Branch Always $4009$F8PC=PC+2+Rel … 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 How do we determine these values?

3 3 ECE 372 – Microcontroller Design HCS12 Instruction Set Summary Overview … … … …

4 4 ECE 372 – Microcontroller Design HCS12 Instruction Glossary

5 5 ECE 372 – Microcontroller Design HCS12 Opcode Table

6 6 ECE 372 – Microcontroller Design Basic Assembly Programming $4000$86LDAA immediate addressing $4001$00Value to be stored in A $4002$81CMPA immediate addressing $4003$0ACompare Value 10 $4004$2CBGE (Branch if greater then or equal to zero) $4005$04PC=PC+2+Rel $4006$8BADDA immediate addressing $4007$01Value to add to A $4008$20Branch Always $4009$F8PC=PC+2+Rel … 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

7 7 ECE 372 – Microcontroller Design Execution Time Analysis $4000$86LDAA immediate addressing1 $4001$00Value to be stored in A $4002$81CMPA immediate addressing1 $4003$0ACompare Value 10 $4004$2CBGE (Branch if greater then or equal to zero)3/1 $4005$04PC=PC+2+Rel $4006$8BADDA immediate addressing1 $4007$01Value to add to A $4008$20Branch Always3 $4009$F8PC=PC+2+Rel … How long does this loop take to execute? Cycles 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 Loop

8 8 ECE 372 – Microcontroller Design HCS12 Registers

9 9 ECE 372 – Microcontroller Design HCS12 Registers - Accumulators ldaa #$5 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

10 10 ECE 372 – Microcontroller Design HCS12 Registers - Accumulators ldaa #$50 ldab #$01 ldd #$0150 Is there any difference between the following assembly code examples? vs. ldd #$5001 vs. ldaa #$00 ldab #$0A ldd #10 vs. clra ldab #$0A vs.

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

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

13 13 ECE 372 – Microcontroller Design Time for Fun (or maybe not?) 1 1 2 23 3 4455

14 14 ECE 372 – Microcontroller Design MC9S12C Block Diagram

15 15 ECE 372 – Microcontroller Design MC9S12C Block Diagram Internal System Bus

16 16 ECE 372 – Microcontroller Design Instruction Execution Timing - Reset ECLK ADDR 15:0 R/W DATA 15:0 $FFFE $4000 $8600 $4000$86LDAA immediate addressing $4001$00Value to be stored in A $4002$81CMPA immediate addressing $4003$0ACompare Value 10 $4004$2CBGE (Branch if greater then or equal to zero) $4005$04PC=PC+2+Rel $4006$8BADDA immediate addressing $4007$01Value to add to A $4008$20Branch Always $4009$F8PC=PC+2+Rel $810A $4002 Triggered by Reset Read initial PC address Read ldaa instruction and immediate value

17 17 ECE 372 – Microcontroller Design Instruction Execution Timing – Initial Loop Execution ECLK ADDR 15:0 R/W DATA 15:0 $FFFE $4000 $8600 $4000$86LDAA immediate addressing $4001$00Value to be stored in A $4002$81CMPA immediate addressing $4003$0ACompare Value 10 $4004$2CBGE (Branch if greater then or equal to zero) $4005$04PC=PC+2+Rel $4006$8BADDA immediate addressing $4007$01Value to add to A $4008$20Branch Always $4009$F8PC=PC+2+Rel $810A $4002$4004 A = 0 $2C04 $4006 $8B01 Branch not taken, requires only 1 cycles A = 1

18 18 ECE 372 – Microcontroller Design Instruction Execution Timing – BRA Execution ECLK ADDR 15:0 R/W DATA 15:0 $4006$4008 $8B01 $4000$86LDAA immediate addressing $4001$00Value to be stored in A $4002$81CMPA immediate addressing $4003$0ACompare Value 10 $4004$2CBGE (Branch if greater then or equal to zero) $4005$04PC=PC+2+Rel $4006$8BADDA immediate addressing $4007$01Value to add to A $4008$20Branch Always $4009$F8PC=PC+2+Rel $20F8 $4002 $810A $4004 $2C04 Branch always (BRA) requires 3 cycles PC = $4008 + 2 + $F8(-8) = $4002 A = 1

19 19 ECE 372 – Microcontroller Design Instruction Execution Timing – Final Loop Execution ECLK ADDR 15:0 R/W DATA 15:0 $4002$4004 $810A $4000$86LDAA immediate addressing $4001$00Value to be stored in A $4002$81CMPA immediate addressing $4003$0ACompare Value 10 $4004$2CBGE (Branch if greater then or equal to zero) $4005$04PC=PC+2+Rel $4006$8BADDA immediate addressing $4007$01Value to add to A $4008$20Branch Always $4009$F8PC=PC+2+Rel $2C04 $4010 $???? PC = $4004 + 2 + $04 = $4010 A = 10 A>=10, Branch taken, requires 3 cycles


Download ppt "1 ECE 372 – Microcontroller Design Basic Assembly Programming for(j=0; j<10; j++) { // do something } For Loop Example: 1.Initialize J 2.Compare J to 10."

Similar presentations


Ads by Google