Presentation laddar. Vänta.

Presentation laddar. Vänta.

MC68HC12 Digital och Datorteknik – EDA451 2009/2010 1 EDA 451 - Digital och Datorteknik 2009-2010 MC68HC12, Arbetsbok för MC12 CPU12 Reference Guide Ur.

Liknande presentationer


En presentation över ämnet: "MC68HC12 Digital och Datorteknik – EDA451 2009/2010 1 EDA 451 - Digital och Datorteknik 2009-2010 MC68HC12, Arbetsbok för MC12 CPU12 Reference Guide Ur."— Presentationens avskrift:

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

2 MC68HC12 Digital och Datorteknik – EDA /2010 n Vilka operationer kan utföras ? –Instruktionsgrupper n Hur lagras operanderna förutom i minnet ? –Korttidslagring n Hur nås operander i minnet? –Adresseringssätt n Vilka typer/storlekar av operander kan hanteras ? –Generella/speciella register, registerstorlek Instruktionsuppsättning 2 ”ISA” – Instruction Set Architecture

3 MC68HC12 Digital och Datorteknik – EDA /2010 Instruktionsgrupper 3 EXEMPEL: Motorola (Freescale) MC68X00/Coldfire  Data movement  Program (Flow) control  Integer arithmetic  Floating-point arithmetic  Logical operations  Bit manipulation  System control  Cache maintenance PowerPC  Load/Store  Program (Flow) control  Integer arithmetic  Floating-point arithmetic  Processor control  Synchronization  Miscellanous Motorola (Freescale) MC68HC12  Load/Store  Data movement  Program (Flow) control  Integer arithmetic  Logical operations  Bit manipulation  System control FLEX  Load/Store  Data movement  Program (Flow) control  Integer arithmetic/test  Logical operations  Shift/rotate  Stack operations

4 MC68HC12 Digital och Datorteknik – EDA /2010 Korttidslagring, Stack/Ackumulator/Register 4 Stack PUSHB PUSHC ADD POPA Exempel: Kodning av operationen A = B + C Ackumulator LOADB ADDC STOREA Register LOADR1,B LOADR2,C ADDR3,R1,R2 STOREA,R3 Dessutom existerar ”mellanting” av dessa. Exempel: B5500, HP3000/70... Exempel: PDP8, R6502 MC68HC12 FLEX... Exempel (CISC): IBM360, DEC PDP11/VAX MC68x00 Intel Pentium... Mest namnkunnigt exempel: Intel 8086 (-186/-286/-386/-486) Exempel (RISC): PowerPC, MIPS, SPARC...

5 MC68HC12 Digital och Datorteknik – EDA /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”

6 MC68HC12 Digital och Datorteknik – EDA /2010 EXEMPEL - Registermaskiner 6 Motorola (Freescale) MC68X00/Coldfire PowerPC Zilog Z80

7 MC68HC12 Digital och Datorteknik – EDA /2010 EXEMPEL Ackumulator – Intel 80xx EAX EBX ECX EDX ESI EIP EFLAGS CODE STACK DATA AHAL A X BHBL CHCL DHDL SI IP FLAGS CS SS DS ES B X C X D X EDI DI EBP BP ESP SP FS GS 015 BC ACCUMULATOR STACK POINTER 8080/ DE HL BC PROGRAM COUNTER INCREMENTER/DECREMENTER 8086 ACCUMULATOR BASE ACCUMULATOR STACK POINTER BASE POINTER SOURCE INDEX DESTINATION INDEX INSTRUCTION POINTER STATUS FLAGS CODE SEGMENT DATA SEGMENT STACK SEGMENT EXTRA SEGMENT AHAL A X BHBL CHCL DHDL SP BP SI DI IP FLAGS H FLAGS L CS DS SS ES B X C X D X

8 MC68HC12 Digital och Datorteknik – EDA /2010 EXEMPEL - Ackumulator 8 ACCA ACCUMULATOR A 70 ACCB ACCUMULATOR B 70 IX INDEX REGISTER 150 PC PROGRAM COUNTER 150 SP STACK POINTER 150 INZVC 05 H CONDITION CODES REGISTER Motorola 6800 A ACCUMULATOR A 70 Y 70 PCL PROGRAM COUNTER 150 S STACK POINTER 150 BDIZC 07 1 PROCESSOR STATUS REG ’P’ Rockwell 6502 INDEX REGISTER Y 1 VN X 70 INDEX REGISTER X PCH 78 B 8-BIT ACCUMULATORS A AND B OR 16-BIT DOUBLE ACCUMULATOR D 70 D X INDEX REGISTER X 150 PC PROGRAM COUNTER 150 SP STACK POINTER 150 C 0 CONDITION CODES REGISTER Motorola 68HC12 VZNIHXS 7 A 8 15 Y INDEX REGISTER Y 150 A ACCUMULATOR A 70 B ACCUMULATOR B 70 X INDEX REGISTER 70 PC PROGRAM COUNTER 70 SP STACK POINTER 70 NZVC 03 CONDITION CODES REGISTER FLEX

9 MC68HC12 Digital och Datorteknik – EDA /2010 Programmerarens bild – datatyper/storlek 9 char (8) short int (16) long int (32) long int (64) floating point (IEEE) pointers Coldfire V1XXX32 bit PowerPCXXXXX 8086XX16/20 bit 80386XXX32 bit 68HC12XX16/20 bit FLEXX8 bit

10 MC68HC12 Digital och Datorteknik – EDA /2010 Historik HC11 68HC12 68HC12S 68HC12SX

11 MC68HC12 Digital och Datorteknik – EDA / Freescale 68HCS12 n HCS12 adressrum, IO och minne n CPU12, klockor och räknare n ”Random Access”- Minne –RWM, FLASH, EEPROM n Periferienheter –Parallell Input/Output: –Seriell kommunikation –AD –PWM

12 MC68HC12 Digital och Datorteknik – EDA / HCS12DG256, blockdiagram

13 MC68HC12 Digital och Datorteknik – EDA / HCS12DG256, ”core”

14 MC68HC12 Digital och Datorteknik – EDA / 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”

15 MC68HC12 Digital och Datorteknik – EDA / Primärminne Icke flyktigt minne Upp till 256 Kbyte i ”minnesbankar” 48 kB utan användning av ”bankar” 4 kB EEPROM Flyktigt minne 12 kB RAM

16 MC68HC12 Digital och Datorteknik – EDA / FFFF FFF 1000 FFF 400 3FF 0 FLASH RWM (”RAM”) Synlig del av EEPROM MCHCS12 Interna register EXEMPEL, linjärt adressrum

17 MC68HC12 Digital och Datorteknik – EDA / FFFF C000 BFFF FFF FFF 1000 FFF 400 3FF A3B3C3D FLASH ”Bankat” FLASH Dx256 RWM (”RAM”) Synlig del EEPROM MCHCS12 Interna register EXEMPEL, ”bankat” adressrum

18 MC68HC12 Digital och Datorteknik – EDA / FFFF C000 BFFF FFF C FFF 400 3FF A3B3C3D FLASH (monitor/debugger) ”Bankat” FLASH Dx256 RWM (”RAM”) Externt IO-gränssnitt MCHCS12 Interna register EXEMPEL, i laborationsdator MC12 FLASH (monitor/debugger) Minne tillgängligt för ”användarprogram”

19 MC68HC12 Digital och Datorteknik – EDA / 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…

20 MC68HC12 Digital och Datorteknik – EDA / HCS12DG256, ”core” Centralenhet CPU12

21 MC68HC12 Digital och Datorteknik – EDA /2010 Registeruppsättning CPU12 21 B 8-BIT ACCUMULATORS A AND B OR 16-BIT DOUBLE ACCUMULATOR D 70 D X INDEX REGISTER X 150 PC PROGRAM COUNTER 150 SP STACK POINTER 150 C 0 CONDITION CODES REGISTER VZNIHXS 7 A 8 15 Y INDEX REGISTER Y 150

22 MC68HC12 Digital och Datorteknik – EDA /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”

23 MC68HC12 Digital och Datorteknik – EDA / Inherent Maskinkod för instruktionen Cykel för cykel beskrivning Flaggpåverkan

24 MC68HC12 Digital och Datorteknik – EDA / Omedelbar (Immediate) 8-bit/16-bit opr8i, 8-bitars konstant om 8-bitars register Opr16i, 16-bitars konstant om 16-bitars register

25 MC68HC12 Digital och Datorteknik – EDA / Direkt (Direct Page) Absolut (Extented) opr8a, kan enbart adressera intervallet FF, anger minst signifikant byte av adressen opr16a, kan adressera hela adressintervallet 0000-FFFF

26 MC68HC12 Digital och Datorteknik – EDA / PC-relativ (”BRANCH”-instruktioner)  8-bitars offset ( )  9-bitars offset ( )  16-bitars offset ( )

27 MC68HC12 Digital och Datorteknik – EDA / Indexerade adresseringssätt:  Register relativ, konstant offset Specialfall: n,PCR LDAAsym,PCR Antag 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,PC EXEMPEL: LDAA5,X STAA20,Y LDAAsym,PC STAoff,SP...

28 MC68HC12 Digital och Datorteknik – EDA / Indexerade adresseringssätt:  Auto pre- increment/decrement  Auto post- increment/decrement Basregister kan vara något av: X,Y,SP EXEMPEL: LDAA1,-X STAA4,Y- STAB8,+SP LDAB7,SP+...

29 MC68HC12 Digital och Datorteknik – EDA / Indexerade adresseringssätt:  Register relativ, offset i ackumulator Basregister kan vara något av: X,Y,SP,PC EXEMPEL: LDAAA,X STAAB,Y STABD,SP LDABD,PC...

30 MC68HC12 Digital och Datorteknik – EDA / Indexerade adresseringssätt:  Indirekt EXEMPEL: LDAA[D,X] STAA[sym,PCR] STAB[2,SP] LDAB[D,Y]...

31 MC68HC12 Digital och Datorteknik – EDA /2010 MnemonicFunktionOperation LDAA Load A(M)→A LDAB Load B(M)→B LDD Load D(M:M+1) 1 →A:B LDS Load SP(M:M+1) 1 →SP H :SP L LDX Load index register X(M:M+1) 1 →X H :X L LDY Load index register Y(M:M+1) 1 →Y H :Y L LEAS Load effective address into SPEffective address→SP LEAX Load effective address into XEffective address→X LEAY Load effective address into YEffective address→Y Instruktionsgrupper 31 LOAD-instruktioner STORE-instruktioner MnemonicFunktionOperation STAA Store A(A)→M STAB Store B(B)→M STD Store D(A)→M, (B)→M+1 STS Store SPSP H :SP L →M:M+1 STX Store XX H :X L →M:M+1 STY Store YY H :Y L →M:M+1 MnemonicFunktionOperation MOVB Move byte (8 bitar)(M 1 )→M 2 MOVW Move word (8 bitar)(M:M+1) 1 →M:M+1 2 MOVE-instruktioner

32 MC68HC12 Digital och Datorteknik – EDA / Instruktioner för kopiering av registerinnehåll MnemonicFunktionOperation TAB Transfer A to B anm: Ekv. Med TFR A,B (A)→B TAP Transfer A to CCR anm: Ekv. Med TFR A,CCR (A)→CCR TBA Transfer B to A(B)→A TFR 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 X anm: Ekv. Med TFR SP,X (SP)→X TSY Transfer SP to Y anm: Ekv. Med TFR SP,Y (SP)→Y TXS Transfer X to SP anm: Ekv. Med TFR X,SP (X)→SP TYS Transfer Y to SP anm: Ekv. Med TFR Y,SP (Y)→SP Använd denna Övriga finns här av ”kompatibilitetsskäl” MnemonicFunktionOperation EXG 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 Y anm: 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” MnemonicFunktionOperation SEX Teckenutvidga 8 bitars operand(A,B,CCR) → (D,X,Y eller SP) Instruktion för teckenutvidgning

33 MC68HC12 Digital och Datorteknik – EDA /2010 MnemonicFunktionOperation BSR Anrop av subrutin. PC-relativ operand SP-2  SP RetAdrL:RetAdrH  M (SP) :M (SP+1) Adress  PC BRA “Hopp” till adress. PC-relativ operand Adress  PC CALL Anrop av subrutin Absolut operand (20 bitar) Anm: Användes vid programflödesändring mellan olika minnesbankar ($8000- $BFFF) SP-2  SP RetAdrL:RetAdrH  M (SP) :M (SP+1) Subrutinadress  PC SP-1  SP (PPAGE)  M (SP) PAGE  PPAGE Subrutinadress  PC JMP “Hopp” till address. Absolut operand Subrutinadress  PC JSR Anrop av subrutin Absolut operand SP-2  SP RetAdrL:RetAdrH  M (SP) :M (SP+1) Subrutinadress  PC RTC Återvänd från subrutin. Returadress från STACK och PPAGE M (SP)  (PPAGE) SP+1  SP M (SP) :M (SP+1)  PC H :PC L SP+2  SP RTS Återvänd från subrutin. Returadress från STACK M (SP) :M (SP+1)  PC H :PC L SP+2  SP 33 Ovillkorlig programflödeskontroll

34 MC68HC12 Digital och Datorteknik – EDA /2010 EXEMPEL - Modularisering 34 ORG $1000 main:JSRinit main_loop:JSRread JSR BRAmain_loop init:--- RTS read:--- RTS

35 MC68HC12 Digital och Datorteknik – EDA / MnemonicFunktionOperation ABA Addera B till A(A)+(B) → A ABX 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 → A ADCB Addition med carry till B(B)+(M)+C → B ADDA Addition till A(A)+(M) → A ADDB Addition till B(B)+(M) → B ADDD Addition till D (A:B)(D)+(M:M+1) →D Instruktioner för addition Instruktioner för subtraktion MnemonicFunktionOperation SBA Subtrahera B från A(A)-(B) → A SBCA Subtrahera med borrow från A(A)-(M)-C → A SBCB Subtrahera med borrow från B(B)-(M)-C → B SUBA Subtrahera från A(A)-(M) → A SUBB Subtrahera från B(B)-(M) → B SUBD Subtrahera från D (A:B)(D)-(M:M+1) →D MnemonicFunktionOperation INC Incrementera i minnet(M)+$01 → M INCA Inkrementera A(A)+ $01 → A INCB Inkrementera B(B)+ $01 → B INS 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 Y anm: Ekv. med LEAY 1,Y (Y)+ $0001 → Y MnemonicFunktionOperation DEC Dekrementera i minnet(M)-$01 → M DECA Dekrementera A(A)- $01 → A DECB Dekrementera B(B)- $01 → B DES 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 Y anm: Ekv. med LEAY -1,Y (Y)- $0001 → Y

36 MC68HC12 Digital och Datorteknik – EDA / Instruktioner för logiska operationer MnemonicFunktionOperation ANDA Bitvis “och” A med minnesinnehåll (A)  (M)  A ANDB Bitvis “och” A med minnesinnehåll (B)  (M)  B ANDCC Bitvis “och” CC med minnesinnehåll (CCR)  (M)  CCR EORA 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)  A ORAB Bitvis “eller” B med minnesinnehåll (B)+(M)  B ORCC Bitvis “eller” CCR med minnesinnehåll (CCR)+(M)  CCR MnemonicFunktionOperation CLC Nollställ carryflaggan i CCR 0  C CLI Nollställ avbrottsmask i CCR 0  I CLR Nollställ minnesinnehåll $00  M CLRA Nollställ A $00  A CLRB Nollställ B $00  B CLV Nollställ overflowflaggan I CCR 0  V COM Ettkomplementera minnesinnehåll $FF-(M)  M COMA Ettkomplementera A $FF-(A)  A COMB Ettkomplementera B $FF-(B)  A NEG Tvåkomplementera minnesinnehåll $00-(M)  M NEGA Tvåkomplementera A $00-(A)  A NEGB Tvåkomplementera B $00-(B)  B Unära operationer EXEMPEL: Nollställ bit 7-bit 4 på adress $3000 LDAB $3000 ANDB #% STAB $3000 EXEMPEL: Ettställ bit 7 och bit 0 på adress $3000 LDAB $3000 ORAB #% STAB $3000 EXEMPEL: Invertera bit 2 och bit1 på adress $3000 LDAB $3000 EORB #% STAB $3000

37 MC68HC12 Digital och Datorteknik – EDA / MnemonicFunktionOperation LSL Logiskt vänsterskift i minnet LSLA Logiskt vänsterskift A LSLB Logiskt vänsterskift B LSLD Logiskt vänsterskift D LSR Logiskt högerskift i minnet LSRA Logiskt högerskift A LSRB Logiskt högerskift B LSRD Logiskt högerskift D Logiska skiftoperationer Exempel på användning: Multiplikation med 2, tal utan tecken. Division med 2, tal utan tecken.

38 MC68HC12 Digital och Datorteknik – EDA / Aritmetiska skiftoperationer MnemonicFunktionOperation 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 A ASRB Aritmetiskt högerskift B Exempel på användning, högerskift: Division med 2, tal med tecken.

39 MC68HC12 Digital och Datorteknik – EDA / Instruktioner för rotation (carry-skift) MnemonicFunktionOperation ROL Rotation vänster via carry i minnet ROLA Rotation vänster via carry A ROLB Rotation vänster via carry B ROR Rotation höger via carry i minnet RORA Rotation höger via carry A RORB Rotation höger via carry B 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$3000 ROR$3001 ROR$3002 ROR$3003

40 MC68HC12 Digital och Datorteknik – EDA / Instruktioner för jämförelser och test MnemonicFunktionOperation 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) MnemonicFunktionOperation TST Testa minnesinnehåll(M)-$00 TSTA Testa register A(A)-$00 TSTB Testa register B(B)-$00

41 MC68HC12 Digital och Datorteknik – EDA / MnemonicFunktionVillkor Enkla flaggtest BCS “Hopp” om carryC=1 BCC “Hopp” om ICKE carryC=0 BEQ “Hopp” om zeroZ=1 BNE “Hopp” om ICKE zeroZ=0 BMI “Hopp” om negativeN=1 BPL “Hopp” om ICKE negativeN=0 BVS “Hopp” om overflowV=1 BVC “Hopp” om ICKE overflowV=0 Test av tal utan tecken BHI Villkor: R>MC + Z = 0 BHS Villkor: R  M C=0 BLO Villkor: RM Z + ( N  V ) = 0 BGE Villkor: R  MN  V = 0 BLT Villkor: R

42 MC68HC12 Digital och Datorteknik – EDA / MnemonicFunktionVillkor DBEQ Dekrementera innehåll i register. “Hoppa” om resultatet = 0. (register: A,B,D,X,Y,SP) (register) – 1  register om(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  register om(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  register om(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  register om(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

43 MC68HC12 Digital och Datorteknik – EDA /2010 Kontrollstrukturer 43 If( Villkor ) then... if( Villkor ) then... else... end loop... until( Villkor ) while( Villkor ) loop if(Villkor) { Satser; } if(Villkor) { Satser1; }else{ Satser2; } while(Villkor) { Satser; } do{ Satser; } while(Villkor);

44 MC68HC12 Digital och Datorteknik – EDA / If (...) {...} ”Rättfram” kodning... DipSwitchEQU$600 HexDispEQU$ TSTDipSwitch BNEassign BRAend assignLDABDipSwitch STABHexDisp end: if (DipSwitch != 0) HexDisp = Dipswitch; BEQ “Hopp” om zeroZ=1 BNE “Hopp” om ICKE zeroZ=0

45 MC68HC12 Digital och Datorteknik – EDA / If (...) {...} if (DipSwitch != 0) HexDisp = Dipswitch; BEQ “Hopp” om zeroZ=1 BNE “Hopp” om ICKE zeroZ=0 Bättre kodning... DipSwitchEQU$600 HexDispEQU$ TSTDipSwitch BEQend LDABDipSwitch STABHexDisp end:

46 MC68HC12 Digital och Datorteknik – EDA /2010 If (...) {...} else {...} 46 DipSwitchEQU$600 HexDispEQU$ LDABDipSwitch... TSTB BEQnot_else LDAB#0 STABHexDisp BRAend not_else:LDAB#1 STABHexDisp end: if (DipSwitch == 0) HexDisp = 1; else HexDisp = 0; BEQ “Hopp” om zeroZ=1

47 MC68HC12 Digital och Datorteknik – EDA / If (...) {...} else {...} DipSwitchEQU$600 HexDispEQU$ LDABDipSwitch... TSTB BNEelse LDAB#1 STABHexDisp BRAend else:LDAB#0 STABHexDisp end: if (DipSwitch == 0) HexDisp = 1; else HexDisp = 0; BNE “Hopp” om ICKE zeroZ=0

48 MC68HC12 Digital och Datorteknik – EDA / DipSwitchEQU$600 HexDispEQU$ LDABDipSwitch... CMPB#5 BHSthen LDAB#0 STABHexDisp BRAend then:LDAB#1 STABHexDisp end: if (DipSwitch >= 5) HexDisp = 1; else HexDisp = 0; If (...) {...} else {...} Test av tal utan tecken BHS Villkor: R  M C=0 Test av tal med tecken BGE Villkor: R  MN  V = 0

49 MC68HC12 Digital och Datorteknik – EDA / while (...) {...} while (DipSwitch != 0) HexDisp = 1; HexDisp = 0; DipSwitchEQU$600 HexDispEQU$ while: LDABDipSwitch... TSTB BEQend_while LDAB#1 STABHexDisp BRAwhile end_while: LDAB#0 STABHexDisp BEQ “Hopp” om zeroZ=1

50 MC68HC12 Digital och Datorteknik – EDA / while (...) {...} Delay( unsigned int count ) { while (count > 0) count = count - 1; } Delay:LDD”count” Delay_loop: NOP... NOP SUBD#1 BHIDelay_loop Delay_end:RTS Test av tal utan tecken BHI Villkor: R>MC + Z = 0 Test av tal med tecken BGT Villkor: R>M Z + ( N  V ) = 0

51 MC68HC12 Digital och Datorteknik – EDA / Fördröjning Delay( unsigned int count ) { while (count > 0) count = count - 1; } ; Subrutin 'Delay' Delay:NOP Delay_loop:NOP NOP SUBD#1 BHIDelay_loop RTS Parameter ’count’ finns i register D vid anrop. Anm. count=0 är EJ TILLÅTET. instruktionantal ggr. NOP1 count NOPcount SUBD #1count BHIcount (”taken”) BHI1 (not taken) RTS1 = NOP ( count) + SUBD#1 ( count ) + BHI T ( count-1 ) + BHI NT ( 1 ) + RTS ( 1 ) = ?

52 MC68HC12 Digital och Datorteknik – EDA / (exekveringstider, dvs antal cykler, fås ur handboken...) instruktion# cykler NOP1 SUBD #12 BHI3/1 RTS5 = NOP ( count) + SUBD#1 ( count ) + BHI T ( count ) + BHI NT ( 1 ) + RTS ( 1 ) = ? = 1 ( count) + 2 ( count ) + 3 ( count-1 ) + 1 ( 1 ) + 5 ( 1 ) = 7 count + 4

53 MC68HC12 Digital och Datorteknik – EDA / Minimal/maximal fördröjning vid olika klockfrekvenser Frekvens/ cykeltid Min. (’count’ = 1) 11 cykler Max. (’count’ = $FFFF) 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 ns28,67 ms 25 MHz/ 40 ns. 440 ns18,35 ms MC12

54 MC68HC12 Digital och Datorteknik – EDA / 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) cykler 8 MHz/ 125 ns. 1,375  s 57,34 ms MC12 Lösning: Uppskatta motsvarande fördröjning i simulatorn... Tar c:a 14 sekunder

55 MC68HC12 Digital och Datorteknik – EDA / 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 ADelay1 ADelay1: BSR ADelay2 ADelay2: RTS Hur många bytes kod motsvarar rutinen? Hur många klockcyklers fördröjning ger den?

56 MC68HC12 Digital och Datorteknik – EDA / do {...} while (...) do { HexDisp = 0; }while (DipSwitch >= 10); DipSwitchEQU$600 HexDispEQU$ do: MOVB#0,HexDisp LDABDipSwitch CMPB#10 BHSdo... Test av tal utan tecken BHS Villkor: R  M C=0

57 MC68HC12 Digital och Datorteknik – EDA /2010 EXEMPEL – ”memcopy0( from, to, size )” 57 Kan (informellt) kodas... memcopy0:LDAB”size” LDX”from” LDY”to” memcopy0_loop:TSTB BEQmemcopy0_end LDAA1,X+ STAA1,Y+ DECB BRAmemcopy0_loop memcopy0_end:RTS

58 MC68HC12 Digital och Datorteknik – EDA / EXEMPEL – ”memcopy1( from, to, size )” Kan (informellt) kodas... memcopy1:LDAB”size” LDX”from” LDY”to” memcopy1_loop:TSTB BEQmemcopy1_end MOVB1,X+,1,Y+ DECB BRAmemcopy1_loop memcopy1_end:RTS

59 MC68HC12 Digital och Datorteknik – EDA / EXEMPEL – ”memcopy2( from, to, size )” Kan (informellt) kodas... memcopy2:LDAB”size” LDX”from” LDY”to” memcopy2_loop:SUBB#1 BMImemcopy2_end MOVBB,X,B,Y BRAmemcopy2_loop memcopy2_end:RTS

60 MC68HC12 Digital och Datorteknik – EDA / EXEMPEL – ”memcopy3( from, to, size )” Kan (informellt) kodas... memcopy3:LDAB”size” LDX”from” LDY”to” memcopy3_loop:MOVB1,X+,1,Y+ DBNEB,memcopy3_loop memcopy3_end:RTS vad händer om ”size” är 0, vid anrop???

61 MC68HC12 Digital och Datorteknik – EDA / EXEMPEL – ”memcopy( from, to, size )” memcopy:LDAB”size” BEQmemcopy_end LDX”from” LDY”to” memcopy_loop:MOVB1,X+,1,Y+ DBNEB,memcopy_loop memcopy_end:RTS En effektiv implementering....


Ladda ner ppt "MC68HC12 Digital och Datorteknik – EDA451 2009/2010 1 EDA 451 - Digital och Datorteknik 2009-2010 MC68HC12, Arbetsbok för MC12 CPU12 Reference Guide Ur."

Liknande presentationer


Google-annonser