Föreläsningsanteckningar till Konstruktionsmetoder 981027 Jämförelse mellan 68705P3 och 16F84 externt MC68705P3 PIC16F84 I/O 20 13 Kapsling 28-pin DIL 18-pin DIL Drivförmåga på pinnar PortB 10mA Sink, 1.6mA Source 25mA Sink, 20mA Source Övriga 1.6mA Sink, 1.0mA Source Oscillator typer Externt eller kristall Externt, Kristall, RC-krets Oscillator frekvens Max 4.4MHz Max 20 MHz Spänningsmatning 4.75V - 5.25V 2.0V - 6.0V Strömförbrukning i Drift < 2mA vid 5V, 4MHz * Strömförbrukning i Standby <1uA vid 2V * * Ingen drivning på någon port t.ex lysdiod eller dyl. Jämförelse mellan 68705P3 och 16F84 internt (Se 16F84.pdf sid 8) Motorola: - von Neuman - CISC-arkitektur (Complex Instruction Set Computer) - Samma buss för operationskod och data - Instruktionen bestämmer hur många byte varje instruktion med dess operand skall uppta. - 1804 Bytes EPROM - 112 Bytes RAM - 1st 8-Bit Timer med Prescaler - Ingen WDT PIC: - Harvard - RISC-arkitektur (Reduced Instruction Set Computer) - Skillda bussar för operationskod och data. - Alltid 14 bitars bredd. - 1024 x 14 words EPROM - 68 Bytes RAM - 1st 8-Bit Timer med Prescaler - WDT-timer
Jämförelse mellan 68705P3 och 16F84 instruktionsset Motorola: 61 instruktioner -Har mer direkta instruktioner för jämförande operationer. -Tar mellan 2 och 11 cykler för att utföra en instruktion PIC: 35 instruktioner (Se 16F84.pdf sid 56) - Kräver lite Tips och Tricks för att utföra jämförande operationer - Samtliga instruktioner tar 1 cykel. Hopp tar 2 cykler. Jämförelse mellan ett program skrivet i 68705P3 och PIC16F84 Programförklaring: En jämförelse skall utföras mellan det inlästa värdet från respektive slinggivare, LEFT och RIGHT. Om LEFT = RIGHT skall de båda motorerna köras med full hastighet (MOTORHASTIGHET). Exempel för 68705P3 68705P3: LDA LEFT ; Laddar accumulatorn med LEFT 2 cykler 2 word CMP RIGHT ; Jämför LEFT med RIGHT 4 cykler 2 word BEQ PLATTAN ; Hoppa till PLATTAN om LEFT=RIGHT 4 cykler 2 word CLR MOTORHASTIGHET 4 cykler 1 word BRA SLUT 4 cykler 2 word PLATTAN: LDA $FF 2 cykler 2 word STA MOTORHASTIGHET 5 cykler 2 word SLUT: BRA SLUT 2 cykler 2 word Exempel för P16F84 P16F84: MOVFW LEFT ; Flytta LEFT till W-registeret 1 cykel 1 word XORWF RIGHT,W ; Jämför LEFT med RIGHT 1 cykel 1 word BTFSC Z ; Om LEFT=RIGHT blir Z=1 2 cykel 1 word GOTO PLATTAN 1 cykel 1 word CLRF MOTORHASTIGHET 1 cykel 1 word GOTO SLUT 1 cykel 1 word PLATTAN: MOVLW 0xFF 1 cykel 1 word MOVWF MOTORHASTIGHET 1 cykel 1 word SLUT: GOTO SLUT 1 cykel 1 word
En fördjupning i 16F84 (Se 16F84.pdf sid 8) Arkitekturen - Programminnet (Flash/ROM) och dataminnet (RAM) är separerat. - Programmbussen 14bitar. - Databussen 8 bitar. - Periferienheter så som PORTAR,TIMER etc. ligger på databussen. Instruktionsflödet (Se 16F84.pdf sid 10) PIC hämtar nästa instruktion under tiden som den förra utförs. Q1 Instruktionen hämtas, Den exekveras sedan under Q2, Q3, Q4 Q2 Data läses från RAM och skrivs sedan i Q4. Hopp instruktioner tar 2 cykler pga att processorn vet då inte vad nästa instruktion kommer att bli förrän instruktionen är utförd. Programminnets organisation (Se 16F84.pdf sid 11) PIC16F84 har en 13-bitars programräknare som kan adressera upp till 8K x 14 programminne. Dataminnets organisation (Se 16F84.pdf sid 13) Data minnet är uppdelat i 2 delar BANK0 och BANK1. BANK0 är SFR Special Function Register. Bank0 kontrollerar processorns ut enheter. Ex: Portar, Timer etc. Här ligger även användar RAM. BANK1 är GFR General Purpose Ram. Bank1 kontrollerar generella inställningar. EX: Inställning omen viss pinnen skall vara ut- eller ingång. I programmet hänsyn tas till om det register man har tänkt skriva till ligger i BANK0 eller 1.
Timer (Se 16F84.pdf sid 27) TMR0: 8 bitars räknare,skriv och läsbar, programmerbar prescaler, intern eller extern klockning PRESCALER: Delar klockan med 1:2,1:4,...,1:256 Sriv och läsbar: Timerns värde kan läsas som också kan laddas med ett visst värde. Intern och extern klockning: Timer kan klockas från intern oscillator eller från en utanför liggande pulsgivande krets. Watchdog Timer (WDT) (Se 16F84.pdf sid 51) WDT är självgående timer som klockas av en RC-oscillator. Det betyder att om clockan till processorn skulle stanna, kommer WDT att forsätta att fungera. När WDT timer har räknat alla sina bitar, kommer den att generera en WDT-timeout. Detta innebär en reset av processorn. Vad är vitsen med detta? Om ett fel uppstår i programmet, t ex processorn blir störd av utifrån kommande störningar, kommer WDT timer att efter tidigast 18ms att starta om processorn. Det gäller alltså att nollställa WDT med jämna mellanrum så att inte en omstart sker. TRISA och TRISB -register (Se 16F84.pdf sid 23) Bestämmer om en I/O-pin skall vara utgång eller ingång. 1 = Ingång, 0 = Utgång TRIS står här för tristate. Vilket betyder att när en etta skrivs till en bitpoistion i TRIS-registret kommer porten i ett hög-impedivt tillstånd och blir därmed en inport. PORTA, PORTB-register (Se 16F84.pdf sid 23) Register som håller det värde som för tillfället finns på I/O-pin Kan både läsas och skrivas. STATUS-register (Se 16F84.pdf sid 15) Status regsitret anger den arimetiska status från ALU:n. Här läser man ut Zero flagga, Carry, Digit, efter aritmetiska operationer. Val av bank görs här med hjälp av biten RP0. Reset status kan läsas ut av bitarna TO och PD. TO betyder att WDT-timer startar om processorn. PD visar att processorn är i standby-mode.
OPTION-register (Se 16F84.pdf sid 16) Kontrollerara viss hårvaruinställningar i processorn., så som: - Pull-ups på PORTB - Val av extern eller intern klockning av TMR0 - Om extern klockning är vald, går det att välja vilken flank som skall klocka TMR0. - Prescaler användning sätts här antingen för TMR0 eller WDT. - PRESCALE delning