William Sandqvist Programmet onoffred.c.

Slides:



Advertisements
Liknande presentationer
Relationsoperatorer Java/C# C/C++ Visual Basic FORTRAN PASCAL ORACLE
Advertisements

Anders Sjögren Lagringsklasser •en variabel i C har två attribut –type( int, float, char..... ) –lagringsklass( auto, extern, register, static ) •lagringsklassens.
Programstruktur: C för enchipsdatorer
Många studenter använder en LCD-display till sin programmeringsuppgift
Funktioner och programorganisation
Föreläsning 3 Lista Array/länkad lista Lista implementerad som länkad lista Inlämningsuppgifter.
William Sandqvist Störskydd William Sandqvist
Föreläsning 3 Repetition Operatorer Styrstrukturer Deklaration och anrop av metoder.
Minnesteknologier Teknologi Accesstid Kostnad $/GB SRAM 1 ns 1000 DRAM
Operatorer.
PICKit2 programmer-to-go
Föreläsning 2 Datastrukturer Abstrakta datastrukturer Stack
SmartCard laborationen
William Sandqvist Varför använda en liten 8-bitars processor när det finns billiga kraftfulla 32-bitars? William Sandqvist
Välkommen Vahid Mosavat
Föreläsning 2 Primitiva datatyper Variabler och konstanter Tilldelning Inläsning Operatorer Villkorssatsen if Slingor: while och for.
Realtidsprog. - Anders Arvidsson1 Realtidsprogrammering En introduktion – Implementering (med exempel från PIC)
Flödeskontroll Satser i ett program utförs en och en efter varandra. Detta kallas sekvensiell flödeskontroll. Ofta är det dock nödvändigt att modifiera.
Programmering B PHP Lektion 2
Anders Sjögren Selektion i C ”vägval” if och switch - satserna.
William Sandqvist Funktion som byter plats på två variabler /* swap1.c first attempt at a swaping function */ /* from Stephen Prata, C Primer.
Variabler: Datatyp - grundläggande : int, double, char, boolean eller
Pointers. int a=5; int f(int b) { a--; b++; return b; } int main() { int a=3; printf("%d,",f(a)); printf("%d",a); return 0; }
Styrteknik: Binära tal, talsystem och koder D3:1
Föreläsning 2 Kort Översikt Över Javaspråket. Källkodsformat Unicode används åäöμψζ tillåtna Inte alla miljöer klarar av det Källkod Bytekod Java VM för.
Några småsaker switch break, continue, goto Kommentarer.
Deklarera en struct som kan användas för att representera en rät linje Använd den I main för att deklarera en variabel som du initierar så att den representerar.
Internet A Javaskript.
Anders Sjögren Mer om datatyper. Anders Sjögren const det finns ett elegantare sätt att skapa konstanter i C än sättet med makro som vi använt tidigare.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 3 ( ) INNEHÅLL: -Jämförelseoperatorer -Villkorssatser -Logiska operatorer.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 3 ( ) INNEHÅLL: -Jämförelseoperatorer -Villkorssatser -Logiska operatorer.
Modulär programutveckling
1 Föreläsning 5 Programmeringsteknik och Matlab 2D1312/2D1305 Repetition Metoder Array API och klassen ArrayList.
William Sandqvist Databuffer Omvandlar mellan olika storlekar på dataobjekt Anpassar mellan olika dataöverföringshastigheter Databuffer.
William Sandqvist PIC PIC (Peripheral Interface Computer) är en datorkrets med ”allt i ett”. Prog Mem. Programminnet är 2048 instruktioner.
Föreläsning 1 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
William Sandqvist Melodispelaren Denna demonstrationslaboration visar, steg för steg, hur man skriver ett kort program i programspråket.
Problemlösningsmetodik
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 3 ( ) INNEHÅLL: -Tabeller -Villkorssatser -Repetitionssatser.
William Sandqvist C-programmering ID120V Stack och Kö William Sandqvist
William Sandqvist Polling och Interrupt Antag att Du sitter i en skön fåtölj och läser en bok. Plötsligt blir Du avbruten av att telefonen.
Anders Sjögren Selektion i C ”vägval” if och switch - satserna.
Föreläsning 4 programmeringsteknik och Matlab 2D1312/ 2D1305
William Sandqvist PIC-programmeringsmiljön i skolan Datorerna i skolans labsalar är centralt underhållna. Du har inte rättigheter att installera.
Din rapport ? Beskriv din applikation.
William Sandqvist Melodispelaren Denna demonstrationslaboration visar, steg för steg, hur man skriver ett kort program i programspråket.
William Sandqvist ReadModifyWrite-problemet PORTB = 0; PORTB.0 = 1; PORTB = PORTB; Vilket värde har portpinnen RB1 nu ? Förmodligen ”1”,
OOP F13:1 Marie Olsson OOP Objekt-orienterad programmering Föreläsning 13 Repetition variabler, selektion och iteration.
OOP F2:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 2 Deklaration och tilldelning Programsatser Tilldelning Input/Output Selektion.
Anders Sjögren Deklarationsområde och funktioner.
William Sandqvist Flera saker samtidigt? /* Blink1: 1s ON - 1s OFF */ /* Blink2: 0,2s ON - 0,2s OFF - 1s ON - 1s OFF */
William Sandqvist DA-omvandling, oftast PWM.
William Sandqvist Binärkod och Graykod 7 Bitars Kodskiva för avkodning av vridningsvinkel. Skivans vridnings-vinkel finns tryckt som binära.
F2 1 Programmeringsteknik, 4p vt-00 Kommentarer Allt mellan /* och */ Varje kommentar byts ut mot en blank av kompilatorn /* Exempel på uttryck, tilldelningsoperatorn.
William Sandqvist Är Du bra på for-loopar? Ge triangelns höjd: 12 1> * > *** > *****
William Sandqvist Funktionsbibliotek När man utvecklat en funktion så långt att den är "färdigutvecklad" kan man lika gärna spara den på.
William Sandqvist PWM Sinusoidal Hur tillverkar man en sinusformad spänning? En PWM-signal kan ge en sinusapproximation. Efter filtrering.
Kronljusströmställaren 0, 1, 2, 3
-Repetition -Variabler -Primitiva typer (+ boolean) -Operatörer +, ++, --, -Typ konvertering -Wrapper klasser -Jämförelse operatörer,(==, =,,!=, !) -String.
Mer om operatorer logiska operatorer bit-operatorer adress-operatorn ”komma”-operatorn punkt - operatorn.
1 Föreläsning 2 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
-Repetition -Variabler -Primitiva typer (+ boolean) -Operatörer +, ++, --, -Typ konvertering -Wrapper klasser -Jämförelse operatörer,(==, =,,!=, !) -String.
OOP&M - teori1 OOP&M – Föreläsning 5 kap 8-13 Operatorer,typkonvertering, booleska operatorer, if och else.
Anders Sjögren Mer om datatyper. Anders Sjögren const det finns ett elegantare sätt att skapa konstanter i C än sättet med makro som vi använt tidigare.
OOP&M - teori1 OOP – Föreläsning 7 (Sista oop I) Konstruktioner för att hantera upprepningar Kapitel 11.
Anders Sjögren Operatorer. Anders Sjögren Operand(er)
DA-omvandling, oftast PWM William Sandqvist En DA-omvandlare tar stor plats på processor- chippet. Den vanligaste DA-lösningen är i stället.
Mer om operatorer logiska operatorer bit-operatorer adress-operatorn ”komma”-operatorn punkt - operatorn.
KPP053, HT2015 MATLAB, Föreläsning 4
Iteration – Repetitionssats - while
Presentationens avskrift:

William Sandqvist Programmet onoffred.c

William Sandqvist Strukturdiagram

William Sandqvist Processorns konfiguration Javascript på webben! #pragma config |= 0x3fB0

William Sandqvist Först definitionerna: /* onoffred.c */ #define ON 1 #define OFF 0 #include "16F628.h" #pragma config |= 0x3f90 #pragma bit RB0 #pragma bit RB1

William Sandqvist Använd C-skalet int main() { /* Init */ while (I1) { if (S1) /* Lightdiode ON */ else /* Lightdiode OFF */ } } int main() { /* Init */ TRISB = 0b ; while (I1) { if (S1) /* Lightdiode ON */ else /* Lightdiode OFF */ } } int main() { /* Init */ TRISB = 0b ; while (1) { if (S1) /* Lightdiode ON */ else /* Lightdiode OFF */ } } int main() { /* Init */ TRISB = 0b ; while (1) { if (contact == ON) /* Lightdiode ON */ else /* Lightdiode OFF */ } } int main() { /* Init */ TRISB = 0b ; while (1) { if (contact == ON) /* Lightdiode ON */ lightdiode = ON; else /* Lightdiode OFF */ } } int main() { /* Init */ TRISB = 0b ; while (1) { if (contact == ON) /* Lightdiode ON */ lightdiode = ON; else /* Lightdiode OFF */ lightdiode = OFF; } } void main() { /* Init */ TRISB = 0b ; while (1) { if (contact == ON) /* Lightdiode ON */ lightdiode = ON; else /* Lightdiode OFF */ lightdiode = OFF; } }

William Sandqvist Kompilera – Ladda ner koden

William Sandqvist Provkör Våra lysdioder har inbyggt ström- begränsnings- motstånd Det långa benet är pluspolen (Anod).

William Sandqvist Cc5x C char är 8 bitar unsigned 0…255 int är 8 bitar signed -128…0…+127 bit är en bit 0 eller 1. Åtta olika bitvariabler får plats i en Byte

William Sandqvist C:s Aritmetiska operatorer Modulo operatorn ("%") är förmodligen mindre känd än de övriga operatorerna. Den gör en heltals- division, och resultatet blir divisionens rest. Heltalsdivision: 22/3 = 7 Modulo, resten: 22%3 = * / %

Var tionde gång …... if (n%10==0) { printf(”You are number ten!\n"); n=n+1; }...

William Sandqvist Operatorer till vilkorsuttryck C har ingen Boolsk variabeltyp SANT/FALSKT utan använder heltalsvariabler till detta. För C är SANT alla heltal förutom 0 som är FALSKT!

William Sandqvist ( ”bit för bit” operatorer ) "bit för bit" operatorerna används för att "vaska ut" information om enskilda bitar i en variabel. Eftersom PIC-processorerna har bit-operationer kan man enkelt nå enskilda bitar direkt. Man har då mindre användning för "bit för bit" operationerna.

William Sandqvist Tilldelning Tilldelningsoperatorn ("=") låter en variabel bli lika med en annan. x = y; I C-språket kan man kombinera tilldelningsoperatorn med de aritmetiska operatorerna, ( eller "bit för bit" operatorerna ), till bekväma förkortningar, för att erhålla speciella tilldelningsoperatorer. Räknemaskiner hade förr ackumulerande tangenter +=, -=, /=, *=

William Sandqvist Increment och Decrement En vanlig uppgift i program är att öka eller minska en variabel med ett. Det går naturligtvis att göra med addition eller subtraktion, men de flesta processorer har även speciella, optimerade, instruktioner för detta. C-språket har därför Increment (öka med ett) och Decrement (minska med ett) -operatorer: x++ ; /* add 1 to x */ x-- ; /* subtract 1 from x */ Operatorerna kan även skrivas ++x och --x. Då utförs ökningen/minskningen av x innan variabeln används (annars efter). Med dessa fyra varianter kan programmeraren skräddarsy uttryck så att de blir så korta och effektiva som möjligt.

William Sandqvist Mer C ? Typiskt för C är användningen av så kallade pekare. Så långt arkitekturen tillåter, kan man använda pekare i sina PIC-program, men sanningen är att det inte finns speciellt mycket att peka på? -Mer om programspråket C kan man lära sig genom att tex. gå den fristående kvällskursen ID120V. Vägen till C Ulf Bilting / Jan Skansholm Studentlitteratur ISBN

William Sandqvist Pip för fem!

William Sandqvist Strukturdiagram

William Sandqvist Initiering Initiering: buzzer = OFF; TRISB = 0b ; /* RB0...RB3 in, RB5 out */ char tal = 0;

William Sandqvist Read hexcode tal.0 = PORTB.3; tal.1 = PORTB.2; tal.2 = PORTB.1; tal.3 = PORTB.0; Ledningsdragningen ger fel ordning mellan hex- bitarna och portbitarna. Det fixar programmet!

William Sandqvist Programmet pip för fem /* cmp5.c Buzz at binary "5" */ #include "16F628.h" #pragma config |= 0x3f90 #define ON 1 #define OFF 0 #pragma bit PORTB.5 void main( void) { buzzer = OFF; TRISB = 0b ; /* RB0-RB3 in, RB5 out */ char tal = 0; while( 1 ) { tal.0 = PORTB.3; tal.1 = PORTB.2; tal.2 = PORTB.1; tal.3 = PORTB.0; if( tal == 5 ) buzzer = ON; else buzzer = OFF; } } Utmaning: Pip för udda tal! Utmaning: Pip för A…F!

William Sandqvist Radiobutton … Att välja endast ett alternativ bland flera … if(a) b; else if(c) d; else f;

William Sandqvist C’s switch – case Switch( a ) { case 1: b = 5; break; case 2: b = 7; break; case 3: b = 10; break; default : b = 0; } a är en heltalsvariabel. Här sker omkodning mellan a och b. Break behövs för att inte alla efterföljande alternativen också ska utföras. Cc5x lägger ut mer effektiv kod för switch – case än för if – else if – else if – else

William Sandqvist while() och for() x = 0; while ( x < 5 ) { sum += x*2; x ++; } x = 0; do { sum += x*2; x ++; } while ( x < 5 ); Avbrottsvilkoret x<5 Det är do while – slingan som passar PIC-processorns instruktionsuppsättning bäst, for-loopen är för komplicerad. for ( x = 0 ; x < 5 ; x++ ) sum += x*2; Startvärde x =0 varje varv x++

William Sandqvist Kontaktstudsar ! Tänd/Släck lysdioden varannan tryckning (Toggle funktion). Problemet är att när man trycker, eller släpper, en mekanisk kontakt så studsar den ett tag mot kontaktytan innan den lägger sig till ro. PIC-processorn är så snabb att den kan uppfatta varje studs som en ”egen” kontakt-tryckning! Om en kontakt studsar mycket eller lite syns inte på utsidan!

William Sandqvist bounce.c programmet som driver dig till vansinne! void main( void) { TRISB = 0b ; /* RB0 out, RB1 in */ while(1) { while( button == OFF) ; /* wait for ON */ lightdiode = ! lightdiode; /* toggles light */ while( button == ON ) ; /* wait for OFF */ } } Programmet är endast användbart som slumpgenerator!

William Sandqvist Programmet debounce.c /* - delay 10 msec – (about 10 msec) */ for(i =0; i < 40; i++ ) /* 40 times */ for(j =0; j < 250; j++ ) /* count to 250 */ ;

William Sandqvist debounce.c void main( void) { char i, j; TRISB = 0b ; /* RB0 out, RB1 in */ while(1) { /* - wait for ON - */ while( button == OFF) ; lightdiode = ! lightdiode; /* toggles light */ /* - delay 10 msec - */ for(i =0; i < 40; i++ ) for(j =0; j < 250; j++ ) ; /* - wait for OFF - */ while( button == ON ) ; /* - delay 10 msec - */ for(i =0; i < 40; i++ ) for(j =0; j < 250; j++ ) ; } } Fördröjningsfunktion delay() ?

William Sandqvist C - Funktioner /* en funktionsdeklaration */ int differens( int, int);... x = differens( 15, 3); /* ett funktionsanrop */... /* funktionsdefinitionen */ int differens(int a, int b) { return a – b; } Vad blir x ? Först i programmet utanför main(). Funktionen anropas inifrån main(). Funktionsdefinitionen efter main() eller i egen fil.

William Sandqvist TIMER0 TIMER0 är en 8-bitars modulo 256-räknare som kan läsas/skrivas med program. Om biten TOCS i OPTION -registret är "0" så räknas var fjärde av processorns klockcykler ( Fosc/4 ). Om biten TOCS är "1" räknas de pulsflanker som inkommer på pinnen T0CKI. Med biten TOSE bestämmer man om det är positiva eller negativa "flanker" som ska räknas. Med biten PSA =0 kan man koppla in en prescaler, en frekvensdelare. Med den inkopplad räknas bara en bråkdel av de inkommande pulserna, och det tar då längre tid innan TIMER0 "räknar runt". Med bitarna PS2 PS1 PS0 ställer man in prescalerns delningstal.

William Sandqvist Delay-function Fördröjning 1…255 ms. /* Delays a multiple of 1 milliseconds at 4 MHz */ /* (16F628 internal clock) using the TMR0 timer */ void delay( char millisec) { OPTION = 2; /* prescaler divide by 8 */ do { TMR0 = 0; while ( TMR0 0); } För 10 ms fördröjning: delay(10);

William Sandqvist Längre tider … /* Delays a multiple of 10 milliseconds using the */ /* TMR0 timer Clock : 4 MHz => period T = 0.25 us */ /* 1 IS = 1 Instruction Cycle = 1 us error: 0.16 % */ void delay10( char n) { char i; OPTION = 7; do { i = TMR0 + 39; /* 256 microsec * 39 = 10 ms */ while ( i != TMR0) ; } while ( --n > 0); } delay10(250); ger 2,5 s fördröjning.

William Sandqvist Ändå längre tider … /* 255*2,55 c:a 11 min */ for(i = 0; i < 255; i++) delay10( 255 ); /* 255*255*2,55 c:a 2 dygn */ for(j = 0; j < 255; j++) for(i = 0; i < 255; i++) delay10( 255 ); Delay-funktionerna finns i filen delays.c. Placera en kopia av den filen i ditt arbetsbibliotek och ta med den i programmet: #include ”delays.c” Eller så tar man med en kopia av funktionen i sin programkod

William Sandqvist Utmaning Ändra programmet debounce.c så att det utnyttjar funktionen delay() i stället för for -slingorna på två ställen!