eda 451 - digital och datorteknik 2009-2010 mc68hc12, arbetsbok för mc12 cpu12 reference guide

61
MC68HC12 Digital och Datorteknik – EDA451 2009/2010 1 EDA 451 - Digital och Datorteknik 2009-2010 MC68HC12, Arbetsbok för MC12 CPU12 Reference Guide Ur innehållet: Historik Översikt, ”single-chip-computer” DG256 Programmerarens bild (Exempel)

Upload: ceri

Post on 10-Jan-2016

34 views

Category:

Documents


1 download

DESCRIPTION

EDA 451 - Digital och Datorteknik 2009-2010 MC68HC12, Arbetsbok för MC12 CPU12 Reference Guide Ur innehållet: Historik Översikt, ”single-chip-computer” DG256 Programmerarens bild (Exempel). Instruktionsuppsättning. ”ISA” – Instruction Set Architecture. Vilka operationer kan utföras ? - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: EDA 451 - Digital och Datorteknik 2009-2010 MC68HC12,  Arbetsbok för MC12 CPU12 Reference Guide

MC68HC12

Digital och Datorteknik – EDA451 2009/2010

1

EDA 451 - Digital och Datorteknik2009-2010

MC68HC12, Arbetsbok för MC12CPU12 Reference Guide

Ur innehållet:HistorikÖversikt, ”single-chip-computer” DG256Programmerarens bild(Exempel)

Page 2: EDA 451 - Digital och Datorteknik 2009-2010 MC68HC12,  Arbetsbok för MC12 CPU12 Reference Guide

MC68HC12

Digital och Datorteknik – EDA451 2009/2010

Vilka operationer kan utföras ? – Instruktionsgrupper

Hur lagras operanderna förutom i minnet ?– Korttidslagring

Hur nås operander i minnet?– Adresseringssätt

Vilka typer/storlekar av operander kan hanteras ?– Generella/speciella register, registerstorlek

Instruktionsuppsättning

2

”ISA” – Instruction Set Architecture

Page 3: EDA 451 - Digital och Datorteknik 2009-2010 MC68HC12,  Arbetsbok för MC12 CPU12 Reference Guide

MC68HC12

Digital och Datorteknik – EDA451 2009/2010

Instruktionsgrupper

3

EXEMPEL:

Motorola (Freescale)MC68X00/ColdfireData movementProgram (Flow) controlInteger arithmeticFloating-point arithmeticLogical operationsBit manipulationSystem controlCache maintenance

PowerPC

Load/StoreProgram (Flow) controlInteger arithmeticFloating-point arithmeticProcessor controlSynchronizationMiscellanous

Motorola (Freescale)MC68HC12Load/StoreData movementProgram (Flow) controlInteger arithmeticLogical operationsBit manipulationSystem control

FLEXLoad/StoreData movementProgram (Flow) controlInteger arithmetic/testLogical operationsShift/rotateStack operations

Page 4: EDA 451 - Digital och Datorteknik 2009-2010 MC68HC12,  Arbetsbok för MC12 CPU12 Reference Guide

MC68HC12

Digital och Datorteknik – EDA451 2009/2010

Korttidslagring, Stack/Ackumulator/Register

4

Stack

PUSH BPUSH CADDPOP A

Exempel:Kodning av operationen A = B + C

Ackumulator

LOAD BADD CSTORE

A

Register

LOAD R1,BLOAD R2,CADD R3,R1,R2STORE A,R3

Dessutom existerar ”mellanting” av dessa.

Exempel:B5500,HP3000/70...

Exempel:PDP8,R6502MC68HC12FLEX...

Exempel (CISC):IBM360,DEC PDP11/VAXMC68x00Intel Pentium...

Mest namnkunnigt exempel: Intel 8086 (-186/-286/-386/-486)

Exempel (RISC):PowerPC,MIPS,SPARC...

Page 5: EDA 451 - Digital och Datorteknik 2009-2010 MC68HC12,  Arbetsbok för MC12 CPU12 Reference Guide

MC68HC12

Digital och Datorteknik – EDA451 2009/2010

Register – programmerarens bild

5

Stackmaskiner: Har som regel inga ”synliga”register

Ackumulatormaskiner:Har oftast flera register men med dedikerad användning:Exempel: ”Ackumulator”, ”Indexregister”

Registermaskiner: Generellt användbara register.Exempel: ”Dataregister”, ”Adressregister”, ”Flyttalsregister”

Page 6: EDA 451 - Digital och Datorteknik 2009-2010 MC68HC12,  Arbetsbok för MC12 CPU12 Reference Guide

MC68HC12

Digital och Datorteknik – EDA451 2009/2010

EXEMPEL - Registermaskiner

6

Motorola (Freescale)MC68X00/Coldfire

PowerPC

Zilog Z80

Page 7: EDA 451 - Digital och Datorteknik 2009-2010 MC68HC12,  Arbetsbok för MC12 CPU12 Reference Guide

MC68HC12

Digital och Datorteknik – EDA451 2009/2010

EXEMPEL Ackumulator – Intel 80xx

7

80386

EAX

EBX

ECX

EDX

ESI

EIP

EFLAGS

CODE

STACK

DATA

AH ALA X

BH BL

CH CL

DH DL

SI

IP

FLAGS

CS

SS

DS

ES

B X

C X

D X

31 16 15 8 7 0

EDIDI

EBPBP

ESPSP

0151631

FS

GS

015

B C

ACCUMULATOR

STACK POINTER

8080/808507

015

07815

D E

H L

B C

PROGRAM COUNTER

INCREMENTER/DECREMENTER

8086

ACCUMULATOR

BASE

ACCUMULATOR

ACCUMULATOR

STACK POINTER

BASE POINTER

SOURCE INDEX

DESTINATION INDEX

INSTRUCTION POINTER

STATUS FLAGS

CODE SEGMENT

DATA SEGMENT

STACK SEGMENT

EXTRA SEGMENT

AH ALA X

BH BL

CH CL

DH DL

SP

BP

SI

DI

IP

FLAGSH FLAGSL

CS

DS

SS

ES

B X

C X

D X

07815

015

0

0

15

15

Page 8: EDA 451 - Digital och Datorteknik 2009-2010 MC68HC12,  Arbetsbok för MC12 CPU12 Reference Guide

MC68HC12

Digital och Datorteknik – EDA451 2009/2010

EXEMPEL - Ackumulator

8

ACCA ACCUMULATOR A

7 0

ACCB ACCUMULATOR B

7 0

IX INDEX REGISTER

15 0

PC PROGRAM COUNTER

15 0

SP STACK POINTER

15 0

I N Z V C

05

H CONDITION CODES REGISTER

Motorola 6800

A ACCUMULATOR A

7 0

Y

7 0

PCL PROGRAM COUNTER

15 0

S STACK POINTER

15 0

B D I Z C

07

1 PROCESSOR STATUS REG ’P’

Rockwell 6502

INDEX REGISTER Y

1

VN

X

7 0

INDEX REGISTER X

PCH

78

B 8-BIT ACCUMULATORS A AND B OR16-BIT DOUBLE ACCUMULATOR D

7 0

D

X INDEX REGISTER X

15 0

PC PROGRAM COUNTER

15 0

SP STACK POINTER

15 0

C

0

CONDITION CODES REGISTER

Motorola 68HC12

VZNIHXS

7

A

815

Y INDEX REGISTER Y

15 0

A ACCUMULATOR A

7 0

B ACCUMULATOR B

7 0

X INDEX REGISTER

7 0

PC PROGRAM COUNTER

7 0

SP STACK POINTER

7 0

N Z V C

03

CONDITION CODES REGISTER

FLEX

Page 9: EDA 451 - Digital och Datorteknik 2009-2010 MC68HC12,  Arbetsbok för MC12 CPU12 Reference Guide

MC68HC12

Digital och Datorteknik – EDA451 2009/2010

Programmerarens bild – datatyper/storlek

9

char(8)

shortint

(16)

longint

(32)

longint

(64)

floatingpoint(IEEE)

pointers

Coldfire V1 X X X 32 bit

PowerPC X X X X X

8086 X X 16/20 bit

80386 X X X 32 bit

68HC12 X X 16/20 bit

FLEX X 8 bit

Page 10: EDA 451 - Digital och Datorteknik 2009-2010 MC68HC12,  Arbetsbok för MC12 CPU12 Reference Guide

MC68HC12

Digital och Datorteknik – EDA451 2009/2010

Historik

10

1974

6800

68016809

68HC11

68HC12

68HC12S

68HC12SX

1978 1982 1986 1990 1994 1998 2002 2006

Page 11: EDA 451 - Digital och Datorteknik 2009-2010 MC68HC12,  Arbetsbok för MC12 CPU12 Reference Guide

MC68HC12

Digital och Datorteknik – EDA451 2009/2010

11

Freescale 68HCS12

HCS12 adressrum, IO och minne CPU12, klockor och räknare ”Random Access”- Minne

– RWM, FLASH, EEPROM Periferienheter

– Parallell Input/Output: – Seriell kommunikation– AD– PWM

Page 12: EDA 451 - Digital och Datorteknik 2009-2010 MC68HC12,  Arbetsbok för MC12 CPU12 Reference Guide

MC68HC12

Digital och Datorteknik – EDA451 2009/2010

12

HCS12DG256,blockdiagram

Page 13: EDA 451 - Digital och Datorteknik 2009-2010 MC68HC12,  Arbetsbok för MC12 CPU12 Reference Guide

MC68HC12

Digital och Datorteknik – EDA451 2009/2010

13

HCS12DG256, ”core”

Page 14: EDA 451 - Digital och Datorteknik 2009-2010 MC68HC12,  Arbetsbok för MC12 CPU12 Reference Guide

MC68HC12

Digital och Datorteknik – EDA451 2009/2010

14

HCS12DG256, ”core”

Spänningsregulatorer (flera olika spänningar används internt)

”Background Debug Mode” för test/avlusning

En kristall utgör bas för alla klockfrekvenser i systemet

Realtidsklocka och andra klockfunktioner

Programmerbara funktioner

Vi återkommer till detta i ”Maskinorienterad Programmering”

Page 15: EDA 451 - Digital och Datorteknik 2009-2010 MC68HC12,  Arbetsbok för MC12 CPU12 Reference Guide

MC68HC12

Digital och Datorteknik – EDA451 2009/2010

15

Primärminne

Icke flyktigt minneUpp till 256 Kbyte i ”minnesbankar”48 kB utan användning av ”bankar”4 kB EEPROM

Flyktigt minne12 kB RAM

Page 16: EDA 451 - Digital och Datorteknik 2009-2010 MC68HC12,  Arbetsbok för MC12 CPU12 Reference Guide

MC68HC12

Digital och Datorteknik – EDA451 2009/2010

16

FFFF

40003FFF

1000FFF4003FF

0

FLASH

RWM (”RAM”)

Synlig del av EEPROM

MCHCS12 Interna register

EXEMPEL, linjärt adressrum

Page 17: EDA 451 - Digital och Datorteknik 2009-2010 MC68HC12,  Arbetsbok för MC12 CPU12 Reference Guide

MC68HC12

Digital och Datorteknik – EDA451 2009/2010

17

FFFF

C000BFFF

80007FFF

40003FFF

1000FFF4003FF

0

30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D

FLASH

FLASH

”Bankat” FLASHDx256

RWM (”RAM”)

Synlig del EEPROM

MCHCS12 Interna register

EXEMPEL, ”bankat” adressrum

Page 18: EDA 451 - Digital och Datorteknik 2009-2010 MC68HC12,  Arbetsbok för MC12 CPU12 Reference Guide

MC68HC12

Digital och Datorteknik – EDA451 2009/2010

18

FFFF

C000BFFF

80007FFF

40003C80

1000FFF4003FF

0

30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D

FLASH (monitor/debugger)

”Bankat” FLASHDx256

RWM (”RAM”)

Externt IO-gränssnitt

MCHCS12 Interna register

EXEMPEL, i laborationsdator MC12

FLASH (monitor/debugger)

Minne tillgängligt för ”användarprogram”

Page 19: EDA 451 - Digital och Datorteknik 2009-2010 MC68HC12,  Arbetsbok för MC12 CPU12 Reference Guide

MC68HC12

Digital och Datorteknik – EDA451 2009/2010

19

Periferikretsar i HCS12DG256

AD – Analog till Digital omvandling

ECT- Räknarkretsar för noggrann tidmätning

SCI – Asynkron seriekommunikation

Parallell In-Utmatning

PWM – Pulsbreddsmodulering

Etc…

Page 20: EDA 451 - Digital och Datorteknik 2009-2010 MC68HC12,  Arbetsbok för MC12 CPU12 Reference Guide

MC68HC12

Digital och Datorteknik – EDA451 2009/2010

20

HCS12DG256, ”core” Centralenhet CPU12

Page 21: EDA 451 - Digital och Datorteknik 2009-2010 MC68HC12,  Arbetsbok för MC12 CPU12 Reference Guide

MC68HC12

Digital och Datorteknik – EDA451 2009/2010

Registeruppsättning CPU12

21

B 8-BIT ACCUMULATORS A AND B OR16-BIT DOUBLE ACCUMULATOR D

7 0

D

X INDEX REGISTER X

15 0

PC PROGRAM COUNTER

15 0

SP STACK POINTER

15 0

C

0

CONDITION CODES REGISTERVZNIHXS

7

A

815

Y INDEX REGISTER Y

15 0

Page 22: EDA 451 - Digital och Datorteknik 2009-2010 MC68HC12,  Arbetsbok för MC12 CPU12 Reference Guide

MC68HC12

Digital och Datorteknik – EDA451 2009/2010

Adresseringssätt

22

Vi känner igen de flesta adresseringssätten i från FLEX.

Indexerade adresseringssätt kan även användas med register X,Y och SP ibland också med PC (PC-relativt)

Nytt här är också”Indirekt adressering”

Page 23: EDA 451 - Digital och Datorteknik 2009-2010 MC68HC12,  Arbetsbok för MC12 CPU12 Reference Guide

MC68HC12

Digital och Datorteknik – EDA451 2009/2010

23

Inherent

Maskinkod för instruktionen

Cykel för cykel beskrivning

Flaggpåverkan

Page 24: EDA 451 - Digital och Datorteknik 2009-2010 MC68HC12,  Arbetsbok för MC12 CPU12 Reference Guide

MC68HC12

Digital och Datorteknik – EDA451 2009/2010

24

Omedelbar (Immediate) 8-bit/16-bit

opr8i, 8-bitars konstant om 8-bitars register

Opr16i, 16-bitars konstant om 16-bitars register

Page 25: EDA 451 - Digital och Datorteknik 2009-2010 MC68HC12,  Arbetsbok för MC12 CPU12 Reference Guide

MC68HC12

Digital och Datorteknik – EDA451 2009/2010

25

Direkt (Direct Page)Absolut (Extented)

opr8a, kan enbart adressera intervallet 0000-00FF, anger minst signifikant byte av adressen

opr16a, kan adressera hela adressintervallet 0000-FFFF

Page 26: EDA 451 - Digital och Datorteknik 2009-2010 MC68HC12,  Arbetsbok för MC12 CPU12 Reference Guide

MC68HC12

Digital och Datorteknik – EDA451 2009/2010

26

PC-relativ (”BRANCH”-instruktioner) 8-bitars offset (-128..127) 9-bitars offset (-256..255) 16-bitars offset (-32768..32767)

Page 27: EDA 451 - Digital och Datorteknik 2009-2010 MC68HC12,  Arbetsbok för MC12 CPU12 Reference Guide

MC68HC12

Digital och Datorteknik – EDA451 2009/2010

27

Indexerade adresseringssätt: Register relativ, konstant

offset

Specialfall: n,PCRLDAA sym,PCRAntag PC pekar på nästa instruktion.Operanden är här PC-sym, jfr offsetberäkning för ”BRA”-instruktioner

Observera, ingen syntaktisk skillnad. Assemblator väljer effektivast kodning

Basregister kan vara något av: X,Y,SP,PCEXEMPEL:

LDAA 5,XSTAA 20,YLDAA sym,PCSTA off,SP...

Page 28: EDA 451 - Digital och Datorteknik 2009-2010 MC68HC12,  Arbetsbok för MC12 CPU12 Reference Guide

MC68HC12

Digital och Datorteknik – EDA451 2009/2010

28

Indexerade adresseringssätt: Auto pre- increment/decrement Auto post- increment/decrement

Basregister kan vara något av: X,Y,SPEXEMPEL:

LDAA 1,-XSTAA 4,Y-STAB 8,+SPLDAB 7,SP+...

Page 29: EDA 451 - Digital och Datorteknik 2009-2010 MC68HC12,  Arbetsbok för MC12 CPU12 Reference Guide

MC68HC12

Digital och Datorteknik – EDA451 2009/2010

29

Indexerade adresseringssätt: Register relativ, offset i ackumulator

Basregister kan vara något av: X,Y,SP,PCEXEMPEL:

LDAA A,XSTAA B,YSTAB D,SPLDAB D,PC...

Page 30: EDA 451 - Digital och Datorteknik 2009-2010 MC68HC12,  Arbetsbok för MC12 CPU12 Reference Guide

MC68HC12

Digital och Datorteknik – EDA451 2009/2010

30

Indexerade adresseringssätt: Indirekt

EXEMPEL:LDAA [D,X]STAA [sym,PCR]STAB [2,SP]LDAB [D,Y]...

Page 31: EDA 451 - Digital och Datorteknik 2009-2010 MC68HC12,  Arbetsbok för MC12 CPU12 Reference Guide

MC68HC12

Digital och Datorteknik – EDA451 2009/2010

Mnemonic Funktion OperationLDAA Load A (M)→ALDAB Load B (M)→BLDD Load D (M:M+1)1→A:BLDS Load SP (M:M+1)1→SPH:SPL

LDX Load index register X (M:M+1)1→XH:XL

LDY Load index register Y (M:M+1)1→YH:YL

LEAS Load effective address into SP Effective address→SPLEAX Load effective address into X Effective address→XLEAY Load effective address into Y Effective address→Y

Instruktionsgrupper

31

LOAD-instruktioner

STORE-instruktionerMnemonic Funktion OperationSTAA Store A (A)→MSTAB Store B (B)→MSTD Store D (A)→M, (B)→M+1STS Store SP SPH:SPL →M:M+1STX Store X XH:XL →M:M+1STY Store Y YH:YL →M:M+1

Mnemonic Funktion OperationMOVB Move byte (8 bitar) (M1)→M2

MOVW Move word (8 bitar) (M:M+1) 1→M:M+12

MOVE-instruktioner

Page 32: EDA 451 - Digital och Datorteknik 2009-2010 MC68HC12,  Arbetsbok för MC12 CPU12 Reference Guide

MC68HC12

Digital och Datorteknik – EDA451 2009/2010

32

Instruktioner för kopiering av registerinnehållMnemonic Funktion Operation

TAB Transfer A to Banm: Ekv. Med TFR A,B

(A)→B

TAP Transfer A to CCRanm: Ekv. Med TFR A,CCR

(A)→CCR

TBA Transfer B to A (B)→ATFR Transfer register to register (A,B,CCR,D,X,Y eller SP) →

(A,B,CCR,D,X,Y eller SP)TPA Transfer CCR to A

anm: Ekv. Med TFR CCR,A (CCR)→A

TSX Transfer SP to Xanm: Ekv. Med TFR SP,X

(SP)→X

TSY Transfer SP to Yanm: Ekv. Med TFR SP,Y

(SP)→Y

TXS Transfer X to SPanm: Ekv. Med TFR X,SP

(X)→SP

TYS Transfer Y to SPanm: Ekv. Med TFR Y,SP

(Y)→SP

Använd denna

Övriga finns här av ”kompatibilitetsskäl”

Mnemonic Funktion OperationEXG Exchange register to register (A,B,CCR,D,X,Y eller SP) ↔

(A,B,CCR,D,X,Y eller SP)XGDX Exchange D with X

anm: Ekv. Med EXG D,X - EXG X,D

(D) ↔ (X)

XGDY Exchange D with Yanm: Ekv. Med

EXG D,Y - EXG Y,D

(D) ↔ (Y)

Instruktioner för växling av registerinnehåll

Använd denna

Övriga finns här av ”kompatibilitetsskäl”

Mnemonic Funktion Operation

SEX Teckenutvidga 8 bitars operand (A,B,CCR) →(D,X,Y eller SP)

Instruktion för teckenutvidgning

Page 33: EDA 451 - Digital och Datorteknik 2009-2010 MC68HC12,  Arbetsbok för MC12 CPU12 Reference Guide

MC68HC12

Digital och Datorteknik – EDA451 2009/2010

Mnemonic Funktion OperationBSR Anrop av subrutin.

PC-relativ operandSP-2 SP

RetAdrL:RetAdrH M(SP):M(SP+1)

Adress PCBRA “Hopp” till adress.

PC-relativ operandAdress PC

CALL Anrop av subrutinAbsolut operand (20 bitar)

Anm: Användes vid programflödesändring mellan olika minnesbankar ($8000-

$BFFF)

SP-2 SPRetAdrL:RetAdrH

M(SP):M(SP+1)

Subrutinadress PCSP-1 SP

(PPAGE) M(SP)

PAGE PPAGESubrutinadress PC

JMP “Hopp” till address.Absolut operand

Subrutinadress PC

JSR Anrop av subrutinAbsolut operand

SP-2 SPRetAdrL:RetAdrH

M(SP):M(SP+1)

Subrutinadress PCRTC Återvänd från subrutin.

Returadress från STACK och PPAGE

M(SP) (PPAGE)SP+1 SP

M(SP):M(SP+1) PCH:PCL

SP+2 SPRTS Återvänd från subrutin.

Returadress från STACKM(SP):M(SP+1) PCH:PCL

SP+2 SP

33

Ovillkorlig programflödeskontroll

Page 34: EDA 451 - Digital och Datorteknik 2009-2010 MC68HC12,  Arbetsbok för MC12 CPU12 Reference Guide

MC68HC12

Digital och Datorteknik – EDA451 2009/2010

EXEMPEL - Modularisering

34

ORG $1000main: JSR initmain_loop: JSR read

JSR ...---BRA main_loop

init: ---RTS

read: ---RTS

Page 35: EDA 451 - Digital och Datorteknik 2009-2010 MC68HC12,  Arbetsbok för MC12 CPU12 Reference Guide

MC68HC12

Digital och Datorteknik – EDA451 2009/2010

35

Mnemonic Funktion OperationABA Addera B till A (A)+(B) → AABX Addera B till X

anm: Ekv. med LEAX B,X(X)+(B) → X

ABY Addera B till Y anm: Ekv. med LEAY B,Y

(Y)+(B) → Y

ADCA Addition med carry till A (A)+(M)+C → AADCB Addition med carry till B (B)+(M)+C → BADDA Addition till A (A)+(M) → AADDB Addition till B (B)+(M) → BADDD Addition till D (A:B) (D)+(M:M+1) →D

Instruktioner för addition

Instruktioner för subtraktionMnemonic Funktion Operation

SBA Subtrahera B från A (A)-(B) → ASBCA Subtrahera med borrow från A (A)-(M)-C → ASBCB Subtrahera med borrow från B (B)-(M)-C → BSUBA Subtrahera från A (A)-(M) → ASUBB Subtrahera från B (B)-(M) → BSUBD Subtrahera från D (A:B) (D)-(M:M+1) →D

Mnemonic Funktion OperationINC Incrementera i minnet (M)+$01 → MINCA Inkrementera A (A)+ $01 → AINCB Inkrementera B (B)+ $01 → BINS Inkrementera SP

anm: Ekv. med LEAS 1,SP(SP)+ $0001 → SP

INX Inkrementera X anm: Ekv. med LEAX 1,X

(X)+ $0001 → X

INY Inkrementera Yanm: Ekv. med LEAY 1,Y

(Y)+ $0001 → Y

Mnemonic Funktion OperationDEC Dekrementera i minnet (M)-$01 → MDECA Dekrementera A (A)- $01 → ADECB Dekrementera B (B)- $01 → BDES Dekrementera SP

anm: Ekv. med LEAS -1,SP(SP)- $0001 → SP

DEX Dekrementera X anm: Ekv. med LEAX -1,X

(X)- $0001 → X

DEY Dekrementera Yanm: Ekv. med LEAY -1,Y

(Y)- $0001 → Y

Page 36: EDA 451 - Digital och Datorteknik 2009-2010 MC68HC12,  Arbetsbok för MC12 CPU12 Reference Guide

MC68HC12

Digital och Datorteknik – EDA451 2009/2010

36

Instruktioner för logiska operationerMnemonic Funktion OperationANDA Bitvis “och” A med minnesinnehåll (A)(M) AANDB Bitvis “och” A med minnesinnehåll (B)(M) BANDCC Bitvis “och” CC med minnesinnehåll (CCR)(M) CCREORA Bitvis “exklusivt eller” A med

minnesinnehåll(A)(M) A

EORB Bitvis “exklusivt eller” B med minnesinnehåll

(B)(M) B

ORAA Bitvis “eller” A med minnesinnehåll (A)+(M) AORAB Bitvis “eller” B med minnesinnehåll (B)+(M) BORCC Bitvis “eller” CCR med minnesinnehåll (CCR)+(M) CCR

Mnemonic Funktion OperationCLC Nollställ carryflaggan i CCR 0 CCLI Nollställ avbrottsmask i CCR 0 ICLR Nollställ minnesinnehåll $00 MCLRA Nollställ A $00 ACLRB Nollställ B $00 BCLV Nollställ overflowflaggan I CCR 0 VCOM Ettkomplementera minnesinnehåll $FF-(M) MCOMA Ettkomplementera A $FF-(A) ACOMB Ettkomplementera B $FF-(B) ANEG Tvåkomplementera minnesinnehåll $00-(M) MNEGA Tvåkomplementera A $00-(A) ANEGB Tvåkomplementera B $00-(B) B

Unära operationer

EXEMPEL: Nollställ bit 7-bit 4 på adress $3000

LDAB $3000ANDB #%00001111STAB $3000

EXEMPEL: Ettställ bit 7 och bit 0 på adress $3000

LDAB $3000ORAB #%10000001STAB $3000

EXEMPEL: Invertera bit 2 och bit1 på adress $3000

LDAB $3000EORB #%00000110STAB $3000

Page 37: EDA 451 - Digital och Datorteknik 2009-2010 MC68HC12,  Arbetsbok för MC12 CPU12 Reference Guide

MC68HC12

Digital och Datorteknik – EDA451 2009/2010

37

Mnemonic Funktion OperationLSL Logiskt vänsterskift i

minnetLSLA Logiskt vänsterskift ALSLB Logiskt vänsterskift BLSLD Logiskt vänsterskift D

LSR Logiskt högerskift i minnetLSRA Logiskt högerskift ALSRB Logiskt högerskift B

LSRD Logiskt högerskift D

b0 b7 C 0

b0 b7 C 0

b0 b7 C

b0 b7 0

A B

b0 b7 C

b0 b7 0

A B

Logiska skiftoperationer

Exempel på användning:Multiplikation med 2, tal utan tecken.Division med 2, tal utan tecken.

Page 38: EDA 451 - Digital och Datorteknik 2009-2010 MC68HC12,  Arbetsbok för MC12 CPU12 Reference Guide

MC68HC12

Digital och Datorteknik – EDA451 2009/2010

38

Aritmetiska skiftoperationerMnemonic Funktion Operation

ASL Aritmetiskt vänsterskift i minnet

(ekv. med LSL)ASLA Aritmetiskt vänsterskift A

(ekv. med LSLA)ASLB Aritmetiskt vänsterskift B

(ekv. med LSLB)ASLD Aritmetiskt vänsterskift D

(ekv. med LSLD)

ASR Aritmetiskt högerskift i minnet

ASRA Aritmetiskt högerskift AASRB Aritmetiskt högerskift B

b0 b7 C 0

b0 b7 C

b0 b7 0

A B

b0 b7 C

Exempel på användning, högerskift:Division med 2, tal med tecken.

Page 39: EDA 451 - Digital och Datorteknik 2009-2010 MC68HC12,  Arbetsbok för MC12 CPU12 Reference Guide

MC68HC12

Digital och Datorteknik – EDA451 2009/2010

39

Instruktioner för rotation (carry-skift)

Mnemonic Funktion OperationROL Rotation vänster via carry i

minnetROLA Rotation vänster via carry

AROLB Rotation vänster via carry

BROR Rotation höger via carry i

minnetRORA Rotation höger via carry ARORB Rotation höger via carry B

b0 b7 C

b0 b7 C

Exempel på användning:Skiftoperationer på tal större än 8 bitar.

EXEMPEL: Skifta ett 32-bitars tal på adress $3000, 1 steg åt höger

LSR $3000ROR $3001ROR $3002ROR $3003

Page 40: EDA 451 - Digital och Datorteknik 2009-2010 MC68HC12,  Arbetsbok för MC12 CPU12 Reference Guide

MC68HC12

Digital och Datorteknik – EDA451 2009/2010

40

Instruktioner för jämförelser och testMnemonic Funktion Operation

CBA Jämför B med A (A)-(B)CMPA Jämför A med minne (A)-(M)CMPB Jämför B med minne (B)-(M)CPD Jämför D med minne (A:B)-(M:M+1)CPS Jämför SP med minne (SP)-(M:M+1)CPX Jämför X med minne (X)-(M:M+1)CPY Jämför Y med minne (Y)-(M:M+1)

Mnemonic Funktion OperationTST Testa minnesinnehåll (M)-$00TSTA Testa register A (A)-$00TSTB Testa register B (B)-$00

Page 41: EDA 451 - Digital och Datorteknik 2009-2010 MC68HC12,  Arbetsbok för MC12 CPU12 Reference Guide

MC68HC12

Digital och Datorteknik – EDA451 2009/2010

41

Mnemonic Funktion VillkorEnkla flaggtest

BCS “Hopp” om carry C=1BCC “Hopp” om ICKE carry C=0BEQ “Hopp” om zero Z=1BNE “Hopp” om ICKE zero Z=0BMI “Hopp” om negative N=1BPL “Hopp” om ICKE negative N=0BVS “Hopp” om overflow V=1BVC “Hopp” om ICKE overflow V=0

Test av tal utan teckenBHI Villkor: R>M C + Z = 0BHS Villkor: RM C=0BLO Villkor: R<M C=1BLS Villkor: RM C + Z = 1

Test av tal med teckenBGT Villkor: R>M Z + ( N V ) = 0BGE Villkor: RM N V = 0BLT Villkor: R<M N V = 1BLE Villkor: RM Z + ( N V ) = 1

Villkorlig programflödeskontroll

Page 42: EDA 451 - Digital och Datorteknik 2009-2010 MC68HC12,  Arbetsbok för MC12 CPU12 Reference Guide

MC68HC12

Digital och Datorteknik – EDA451 2009/2010

42

Mnemonic Funktion VillkorDBEQ Dekrementera innehåll i register.

“Hoppa” om resultatet = 0.(register: A,B,D,X,Y,SP)

(register) – 1 registerom(register)=0; “hoppa”;annars: nästa instruktion

DBNE Dekrementera innehåll i register. “Hoppa” om resultatet 0.

(register: A,B,D,X,Y,SP)

(register) – 1 registerom(register)0; “hoppa”;annars: nästa instruktion

IBEQ Inkrementera innehåll i register. “Hoppa” om resultatet = 0.(register: A,B,D,X,Y,SP)

(register) + 1 registerom(register)=0; “hoppa”;annars: nästa instruktion

IBNE Inkrementera innehåll i register. “Hoppa” om resultatet 0.

(register: A,B,D,X,Y,SP)

(register) + 1 registerom(register)0; “hoppa”;annars: nästa instruktion

TBEQ Testa innehåll i register. “Hoppa” om resultatet = 0.

(register: A,B,D,X,Y,SP)

om(register)=0; “hoppa”;annars: nästa instruktion

TBNE Testa innehåll i register. “Hoppa” om resultatet 0.

(register: A,B,D,X,Y,SP)

om(register)0; “hoppa”;annars: nästa instruktion

Instruktioner för räknande programslingor

Page 43: EDA 451 - Digital och Datorteknik 2009-2010 MC68HC12,  Arbetsbok för MC12 CPU12 Reference Guide

MC68HC12

Digital och Datorteknik – EDA451 2009/2010

Kontrollstrukturer

43

Villkor

Satser

NEJ

End

Then

JA

If

Sista ?

Satser

NEJ

JA

LOOP

UNTIL

NEJ

JA

Villkor

Satser 1

Satser 2

End

Then

Else

If

If( Villkor ) then ... if( Villkor ) then ...else ...end

loop...until( Villkor )

Villkor

Satser

End

Then

While

NEJ

JA

while( Villkor )loop

if(Villkor) { Satser;}

if(Villkor) { Satser1;}else{ Satser2;}

while(Villkor) { Satser;}

do{ Satser;} while(Villkor);

Page 44: EDA 451 - Digital och Datorteknik 2009-2010 MC68HC12,  Arbetsbok för MC12 CPU12 Reference Guide

MC68HC12

Digital och Datorteknik – EDA451 2009/2010

44

If (...) {...}”Rättfram” kodning...DipSwitch EQU $600HexDisp EQU $400

...TST DipSwitchBNE assignBRA end

assign LDAB DipSwitchSTAB HexDisp

end:

if (DipSwitch != 0) HexDisp = Dipswitch;

BEQ “Hopp” om zero Z=1

Villkor

Satser

NEJ

End

Then

JA

If

BNE “Hopp” om ICKE zero Z=0

Page 45: EDA 451 - Digital och Datorteknik 2009-2010 MC68HC12,  Arbetsbok för MC12 CPU12 Reference Guide

MC68HC12

Digital och Datorteknik – EDA451 2009/2010

45

If (...) {...}

if (DipSwitch != 0) HexDisp = Dipswitch;

BEQ “Hopp” om zero Z=1

Villkor

Satser

NEJ

End

Then

JA

If

BNE “Hopp” om ICKE zero Z=0

Bättre kodning...DipSwitch EQU $600HexDisp EQU $400

...TST DipSwitchBEQ end

LDAB DipSwitchSTAB HexDisp

end:

Page 46: EDA 451 - Digital och Datorteknik 2009-2010 MC68HC12,  Arbetsbok för MC12 CPU12 Reference Guide

MC68HC12

Digital och Datorteknik – EDA451 2009/2010

If (...) {...} else { ...}

46

DipSwitch EQU $600HexDisp EQU $400

...LDAB DipSwitch...TSTBBEQ not_elseLDAB #0STAB HexDispBRA end

not_else: LDAB #1STAB HexDisp

end:

if (DipSwitch == 0)HexDisp = 1;

elseHexDisp = 0;

NEJ

JA

Villkor

Satser 1

Satser 2

End

Then

Else

If

BEQ “Hopp” om zero Z=1

Page 47: EDA 451 - Digital och Datorteknik 2009-2010 MC68HC12,  Arbetsbok för MC12 CPU12 Reference Guide

MC68HC12

Digital och Datorteknik – EDA451 2009/2010

47

If (...) {...} else { ...} DipSwitch EQU $600HexDisp EQU $400

...LDAB DipSwitch...TSTBBNE elseLDAB #1STAB HexDispBRA end

else: LDAB #0STAB HexDisp

end:

if (DipSwitch == 0)HexDisp = 1;

elseHexDisp = 0;

NEJ

JA

Villkor

Satser 1

Satser 2

End

Then

Else

If

BNE “Hopp” om ICKE zero Z=0

Page 48: EDA 451 - Digital och Datorteknik 2009-2010 MC68HC12,  Arbetsbok för MC12 CPU12 Reference Guide

MC68HC12

Digital och Datorteknik – EDA451 2009/2010

48

DipSwitch EQU $600HexDisp EQU $400

...LDAB DipSwitch...CMPB #5BHS thenLDAB #0STAB HexDispBRA end

then: LDAB #1STAB HexDisp

end:

if (DipSwitch >= 5)HexDisp = 1;

elseHexDisp = 0;

NEJ

JA

Villkor

Satser 1

Satser 2

End

Then

Else

If

If (...) {...} else { ...}

Test av tal utan teckenBHS Villkor: RM C=0

Test av tal med teckenBGE Villkor: RM N V = 0

Page 49: EDA 451 - Digital och Datorteknik 2009-2010 MC68HC12,  Arbetsbok för MC12 CPU12 Reference Guide

MC68HC12

Digital och Datorteknik – EDA451 2009/2010

49

while (...) {...}

while (DipSwitch != 0)HexDisp = 1;

HexDisp = 0;

Villkor

Satser 1

End

Then

While

NEJ

JA

DipSwitch EQU $600HexDisp EQU $400

...

while:LDAB DipSwitch...TSTBBEQ end_whileLDAB #1STAB HexDispBRA while

end_while:LDAB #0STAB HexDisp

BEQ “Hopp” om zero Z=1

Page 50: EDA 451 - Digital och Datorteknik 2009-2010 MC68HC12,  Arbetsbok för MC12 CPU12 Reference Guide

MC68HC12

Digital och Datorteknik – EDA451 2009/2010

50

while (...) {...}

Delay( unsigned int count ){ while (count > 0) count = count - 1;}

Villkor

Satser 1

End

Then

While

NEJ

JA

Delay: LDD ”count”Delay_loop:

NOP...NOP

SUBD #1 BHI Delay_loop

Delay_end: RTS

Test av tal utan teckenBHI Villkor: R>M C + Z = 0

Test av tal med teckenBGT Villkor: R>M Z + ( N V ) = 0

Page 51: EDA 451 - Digital och Datorteknik 2009-2010 MC68HC12,  Arbetsbok för MC12 CPU12 Reference Guide

MC68HC12

Digital och Datorteknik – EDA451 2009/2010

51

FördröjningDelay( unsigned int count ){ while (count > 0) count = count - 1;}

; Subrutin 'Delay'Delay: NOPDelay_loop: NOP

NOPSUBD #1 BHI Delay_loopRTS

Parameter ’count’ finns i register D vidanrop. Anm. count=0 är EJ TILLÅTET.

instruktion antal ggr.

NOP 1

NOP count

NOP count

SUBD #1 count

BHI count (”taken”)

BHI 1(not taken)

RTS 1

= NOP ( 1 + 2 count) + SUBD#1 ( count )+ BHIT ( count-1 ) + BHINT ( 1 ) + RTS ( 1 )= ?

Page 52: EDA 451 - Digital och Datorteknik 2009-2010 MC68HC12,  Arbetsbok för MC12 CPU12 Reference Guide

MC68HC12

Digital och Datorteknik – EDA451 2009/2010

52

(exekveringstider, dvs antal cykler, fås ur handboken...)

instruktion # cykler

NOP 1

SUBD #1 2

BHI 3/1

RTS 5

= NOP ( 1 + 2 count) + SUBD#1 ( count )+ BHIT ( count ) + BHINT ( 1 ) + RTS ( 1 )= ?

= 1 ( 1 + 2 count) + 2 ( count )+ 3 ( count-1 ) + 1 ( 1 ) + 5 ( 1 )= 7 count + 4

Page 53: EDA 451 - Digital och Datorteknik 2009-2010 MC68HC12,  Arbetsbok för MC12 CPU12 Reference Guide

MC68HC12

Digital och Datorteknik – EDA451 2009/2010

53

Minimal/maximal fördröjning vid olika klockfrekvenser

Frekvens/cykeltid

Min.(’count’ = 1)

11 cykler

Max.(’count’ = $FFFF)

458749 cykler

4 MHz/250 ns.

2,75 s 115 ms

8 MHz/125 ns.

1,375 s 57,34 ms

16 MHz/62,5 ns.

687,5 ns 28,67 ms

25 MHz/40 ns.

440 ns 18,35 ms

MC12MC12

Page 54: EDA 451 - Digital och Datorteknik 2009-2010 MC68HC12,  Arbetsbok för MC12 CPU12 Reference Guide

MC68HC12

Digital och Datorteknik – EDA451 2009/2010

54

Exempel: Bestäm ’count’ för 10 ms fördröjning i ett MC12-system

Frekvens/cykeltid

Min.(’count’ = 1)

11 cykler

Max.(’count’ = $FFFF)

458749 cykler

8 MHz/125 ns.

1,375 s 57,34 msMC12MC12

Lösning:

114287

4125

10000000

10000000125)47(

10125)47(

count

nsnscount

msnscount

Uppskatta motsvarande fördröjning i simulatorn

... Tar c:a 14 sekunder

Page 55: EDA 451 - Digital och Datorteknik 2009-2010 MC68HC12,  Arbetsbok för MC12 CPU12 Reference Guide

MC68HC12

Digital och Datorteknik – EDA451 2009/2010

55

Om längre fördröjningar krävs måste ’Delay’-funktionen utföra fler instruktioner i varje slinga, exempelvis genom anrop av följande rutin:

; ; subrutin ’ADelay'ADelay: BSR ADelay1ADelay1: BSR ADelay2ADelay2: RTS

Hur många bytes kod motsvarar rutinen?Hur många klockcyklers fördröjning ger den?

Page 56: EDA 451 - Digital och Datorteknik 2009-2010 MC68HC12,  Arbetsbok för MC12 CPU12 Reference Guide

MC68HC12

Digital och Datorteknik – EDA451 2009/2010

56

do {...} while (...)

do{

HexDisp = 0;}while (DipSwitch >= 10);

DipSwitch EQU $600HexDisp EQU $400

...do:

MOVB #0,HexDisp

LDAB DipSwitchCMPB #10BHS do...

Sista ?

Satser

NEJ

JA

LOOP

UNTIL

Test av tal utan teckenBHS Villkor: RM C=0

Page 57: EDA 451 - Digital och Datorteknik 2009-2010 MC68HC12,  Arbetsbok för MC12 CPU12 Reference Guide

MC68HC12

Digital och Datorteknik – EDA451 2009/2010

EXEMPEL – ”memcopy0( from , to, size )”

57

Kan (informellt) kodas...memcopy0: LDAB ”size”

LDX ”from”LDY ”to”

memcopy0_loop: TSTBBEQ memcopy0_endLDAA 1,X+STAA 1,Y+DECBBRA memcopy0_loop

memcopy0_end: RTS

Page 58: EDA 451 - Digital och Datorteknik 2009-2010 MC68HC12,  Arbetsbok för MC12 CPU12 Reference Guide

MC68HC12

Digital och Datorteknik – EDA451 2009/2010

58

EXEMPEL – ”memcopy1( from , to, size )”

Kan (informellt) kodas...memcopy1: LDAB ”size”

LDX ”from”LDY ”to”

memcopy1_loop: TSTBBEQ memcopy1_endMOVB 1,X+,1,Y+DECBBRA memcopy1_loop

memcopy1_end: RTS

Page 59: EDA 451 - Digital och Datorteknik 2009-2010 MC68HC12,  Arbetsbok för MC12 CPU12 Reference Guide

MC68HC12

Digital och Datorteknik – EDA451 2009/2010

59

EXEMPEL – ”memcopy2( from , to, size )”

Kan (informellt) kodas...memcopy2: LDAB ”size”

LDX ”from”LDY ”to”

memcopy2_loop: SUBB #1BMI memcopy2_endMOVB B,X,B,YBRA memcopy2_loop

memcopy2_end: RTS

Page 60: EDA 451 - Digital och Datorteknik 2009-2010 MC68HC12,  Arbetsbok för MC12 CPU12 Reference Guide

MC68HC12

Digital och Datorteknik – EDA451 2009/2010

60

EXEMPEL – ”memcopy3( from , to, size )”

Kan (informellt) kodas...memcopy3: LDAB ”size”

LDX ”from”LDY ”to”

memcopy3_loop: MOVB 1,X+,1,Y+DBNE B,memcopy3_loop

memcopy3_end: RTS

vad händer om ”size” är 0, vid anrop???

Page 61: EDA 451 - Digital och Datorteknik 2009-2010 MC68HC12,  Arbetsbok för MC12 CPU12 Reference Guide

MC68HC12

Digital och Datorteknik – EDA451 2009/2010

61

EXEMPEL – ”memcopy( from , to, size )”

memcopy: LDAB ”size”BEQ memcopy_endLDX ”from”LDY ”to”

memcopy_loop: MOVB 1,X+,1,Y+DBNE B,memcopy_loop

memcopy_end: RTS

En effektiv implementering....