Microcontrollers PIC16F84. Inhoud

Maat: px
Weergave met pagina beginnen:

Download "Microcontrollers PIC16F84. Inhoud"

Transcriptie

1 Microcontrollers PIC16F84 Inhoud Korte handleiding Programmastructuren Het programmeermodel van de PIC16F84 Het statusregister I/O van de PIC16F84 Basisschema Looplicht met RC Oscillator In-Circuit Serial Programming van de PIC16F84 Teller met de PIC16F84 Eenvoudig ontwerp met de PIC16F84 De Timer TRM van de PIC16F84 Seriële communicatie met de PIC16F84 Interrupt met de PIC16F84 Sturing van een LCD display Gegevens voor het labo De instructieset van de PIC16F84 Special Function Registers MPLAB tutorial Luc Friant Academiejaar Editie (1/24)

2 Een korte Handleiding PIC16F84 Voor de volledigheid verwijzen we u naar de datasheets van Microchip! Beschouw deze korte handleiding als een basis om snel iets te weten te komen over deze microcontroller. Microprocessor MicroChip PIC16F84 eigenschappen -- 1.A2 A A3 A A4 O1.. --Oscillator Gnd/5V--..MC O ^ Gnd V -- 1.B B B1 B B2 B B3 B Eigenschappen van de PIC16F84: geheugenplaatsen voor programma-instrukties - 68 geheugenplaatsen voor tijdelijke opslag van gegevens - 64 geheugenplaatsen voor opslag van gegevens die ook behouden moeten blijven indien de voedingsspanning wegvalt. - maximaal 1MHz oscillator, 2.5 miljoen instrukties per seconde - 13 poorten (A-A4 + B-B7) die als 'input' of als 'output' ingesteld kunnen worden - Eenvoudig te programmeren (eventueel ook in de schakeling) Programmeren van de PIC16F84: -- 1.A2 A A3 A A4 O Gnd/13V--..MC O Gnd V -- 1.B B7.1 --DTR -- 1.B1 B6.1 --TxD TxD DTR Gnd -- 1.B2 B o o o o o -- 1.B3 B o o o o PIC16F84 COM-poort computer Sluit MC van de PIC aan op Gnd (-, min, V) van een spanningsbron. Sluit - van de PIC aan op Gnd van een spanningsbron. Sluit + van de PIC aan op 5V (4V-6V) van een spanningsbron. Sluit Gnd van de COM-poort aan op Gnd van een spanningsbron. Sluit TxD van de COM-poort aan op poort B6 van de PIC. Sluit DTR van de COM-poort aan op poort B7 van de PIC. Sluit MC van de PIC aan op 13V (12V-14V) van een spanningsbron. Start op de computer het programma voor het programmeren van de PIC. Wacht tot het programmeren voltooid is. Sluit MC van de PIC aan op Gnd van een spanningsbron. Handleiding PIC16F84-1

3 Indien twee spanningsbronnen (batterijen, trafo's) gebruikt worden om de spanning van 5V en 13V te verkrijgen, dan moeten de Gnd (-, min, V) van de spanningsbronnen met elkaar verbonden te zijn. Testen van de PIC: -- 1.A2 A A3 A A4 O1.. --Oscillator Gnd/5V--..MC O ^ Gnd V -- 1.B B B1 B B2 B B3 B Sluit het linker pootje van de oscillator aan op O1, het rechter pootje op O2 en het middelste pootje op Gnd (-, min, V) van de batterij. Sluit - van de PIC aan op Gnd van de batterij. Sluit + van de PIC aan op 4-6V (5V) van de batterij. Sluit MC van de PIC aan op Gnd van de batterij om de PIC te 'resetten'. Sluit MC van de PIC aan op 4-6V (5V) van de batterij om de PIC te starten. Sluit naar wens (via weerstanden) schakelaars, LED's of andere electronica aan op de poorten A-A4 en B-B7 (maximale stroom 5 ma). Test of de PIC in alle mogelijk voorkomende situaties juist reageert. Schrijven van een programma voor de PIC: Het programma wordt geschreven in Mnemonic. Dit zijn engelstalige afkortingen die elk een instruktie aangeven. Een voorbeeld: #Lbl_a movlw &h2 ;Getal 2 naar Werkregister. movwf CNT ;Getal uit werkregister naar register CNT. incf CNT,f ;Getal in register CNT met 1 verhogen. In de eerste kolom kan een label gezet worden waar het programma vanaf een andere plaats naar toe moet springen. In de tweede kolom staat de instruktie. In de derde kolom staat een getal, een geheugen-adres, of een programma-adres (label uit de eerste kolom). In de vierde kolom kan (na ;) verklarende tekst worden neergezet zodat het programma eenvoudiger te begrijpen is. Elke kolom moet door een spatie of een TAB van elkaar gescheiden zijn. In het programma kunnen labels (namen) gebruikt worden voor getallen en geheugen-adressen zodat het programma gemakkelijker te lezen en begrijpen is. Aan het begin van het programma moet opgegeven worden welke labels gebruikt worden en welk getal (register-adres) aan een label verbonden is. Handleiding PIC16F84-2

4 Een label kan altijd beginnen met '#'. Dit is niet strikt noodzakelijk. Dit wordt alleen in deze korte handleiding toegepast. Voorbeeld: #w equ &h ;Resultaat naar werkregister. #f equ &h1 ;Resultaat naar geheugen. #TM1 equ &h12 ;TM1 staat voor het getal &h12=18. #TEL equ &hc ;TEL staat voor het register op adres &hc. Stel dat je op geheugen-adres &hc een teller bijhoudt, en je wilt de teller met 1 verhogen. Je kunt dan schrijven 'incf &hc,1'. Bij het lezen van het programma denk je dan telkens weer: 'wat gebeurde er ook al weer in adres &hc'. Schrijf je 'incf #TEL,#f', dan weet je direkt: 'TEL (Teller) = TEL (Teller) + 1'. Voorbeeld van een eenvoudig programma: ;Proj1.ASM ;Blinking LEDs ;Green and red LEDs of port RB blinking ;author: www ;processor: PIC 16F84 ;assembler: MPASM.EXE by MicrochiP ;modules used: pp-bus, pp-ctr, pp-mon ; ;Beschrijving van de hardware processor 16f84 ;Processor type... org 27 ;fuse settings: de b'1111' ;CP=off, PWRTE=enable; WDT=disable ;bit1,: 11 =RC-Oscillator ; 1 =XT-Oscillator ; w equ ;Working register address f equ 1 ;File register address portb equ 6 ;RB port trisb equ 86 ;TRISB Register status equ 3 ;Status Register RP equ 5 ;Status Reg. Bit 5 ; org ;Reset Vector goto _main ;Program start address ;**************************** Main program ********************************** org 5 _main clrf portb ;portb = bsf status,rp ;select Bank 1 clrf trisb ;trisb = (output) bcf status,rp ;select Bank movlw b'1111' ;load constant in W-Reg. movwf portb ;copy to portb (LEDs) m1 swapf portb,f ;swap portb nibbles goto m1 ;endless loop end ;end program ;********************************** END ************************************* BELANGRIJK! : Bij het optreden van een interrupt (zie verder bij poort A en poort B, bij TIMER en bij INTCON) springt het programma altijd naar programma-adres &h4. De instrukties die reageren op een interrupt moeten dus altijd beginnen op adres &h4, en bij de start van het programma moet het programma hier altijd overheen springen. Het begin van het programma kan er dan zo uitzien zoals in bovenstaand voorbeed. Handleiding PIC16F84-3

5 In tegenstelling tot de meeste computers worden de gegevens in de PIC niet in hetzelfde geheugen opgeslagen. De PIC heeft een geheugen voor het programma (Flash), een geheugen voor tijdelijke opslag van gegevens (RAM) en een geheugen voor blijvende opslag van gegevens (EE-Memory). Adres &h van het programma-geheugen is dus niet hetzelfde als adres &h voor opslag van gegevens. Het programma-geheugen kan alleen tijdens het programmeren beschreven worden. Het geheugen voor tijdelijke opslag van gegevens is alleen toegankelijk tijdens het uitvoeren van het programma. Het geheugen voor blijvende opslag van gegevens (EE-Memory)zowel tijdens het programmeren als tijdens het uitvoeren van het programma toegankelijk. Tijdens het programmeren kan het EE-Memory al van inhoud voorzien worden. In de lijst met instrukties worden een aantal aanduidingen gebruikt: #Label is een zelf bedacht stukje tekst. Het kan dus ook #Test zijn, of #Lamp. Als achter een instruktie #Label staat, dan moet ergens anders in het programma #Label in de eerste kolom staan. &h12 is een hexadecimaal getal. Dit getal is een voorbeeld. In plaats van &h12 kan ook een ander getal ingevuld worden. Het moet echter wel altijd een hexadecimaal getal zijn (en beginnen met &h). #REG is een zelf bedachte naam voor een geheugenplaats, bijvoorbeeld #UUR, #MIN, #SEC, #TEL, #CON. #d geeft aan waar het resultaat van de bewerking naar toe moet. Als #d =, dan gaat het resultaat naar het werkregister, als #d = 1, dan gaat het resultaat naar het met #REG aangeduidde geheugen-adres. Meestal wordt in het begin van een Mnemonic-programma aangegeven dat de aanduiding #w gebruikt wordt voor en de aanduiding #f voor 1, zodat op de plaats van #d de aanduiding #w of #f komt te staan. Dit kan ook worden opgelost door de speudomnemonische code #include <P16f84.INC> In de verklarende tekst achter de instrukties wordt met W (WorkRegister) het werkregister aangeduid en met F (FileRegister) de geheugenplaats die in de instruktie met #REG aangeduid is. TO, PD, Z, DC en C zijn aanduidingen van bits in het StatusRegister, dat verderop beschreven wordt. Handleiding PIC16F84-4

6 Instrukties van de PIC16F84 : NOP CLRWDT SLEEP ;No OPeration. ;Deze instruktie doet niets. De uitvoering van deze ; instruktie kost wel tijd en kan daarom gebruikt ; worden om een vertraging in het programma aan te ; brengen (.5 microseconde bij 8 MHz oscillator). ; Wijzigt in het Statusregister : Niets. ;Clear WatchDog Timer. ; Wist de 'WatchdogTimer'. Als er situaties kunnen ; optreden waarin het programma in een oneindige lus ; terrecht komt, dan kan deze timer het programma ; daar met een interrupt uit halen. ; Wijzigt in het Statusregister : TO, PD. ;Sleep. ; De processor gaat slapen. De uitvoering van ; instrukties wordt gestopt tot het optreden van een ; interrupt door verandering van de spanning op ; een Input-poort. Gedurende de slaapstand is het ; stroomverbruik van de processor zeer gering. ; Wijzigt in het Statusregister : TO, PD CALL #Label ;Call subroutine ; Aanroep van de procedure met label '#Label' ; (het programma springt naar de regel met #Label ; en onthoudt vanaf welke regel het gesprongen is). ; Wijzigt in het Statusregister : Niets. RETURN ;Return from subroutine. ; Afsluiten van een procedure. Het programma gaat ; verder met de instruktie na de instruktie CALL ; waarmee de procedure aangeroepen was. ; Wijzigt in het Statusregister : Niets. RETLW &h12 ;Move Literal to W and Return from subroutine. ; Afsluiten van een procedure. Het programma gaat ; verder met de instruktie na de instruktie CALL ; waarmee de procedure aangeroepen was. Bovendien ; krijgt het 'Workregister' het getal achter de ; instruktie RETLW. Zo kan een procedure informatie ; teruggeven aan het hoofdprogramma (W = &h12). ; Wijzigt in het Statusregister : Niets. RETFIE ;Return from subroutine and Enable interrupts. ; Afsluiten van de procedure die door een interrupt ; aangeroepen was. Tijdens de uitvoering van de ; procedure worden andere interrupts geblokkeerd. ; Door de instruktie RETFIE wordt een interrupt-bit ; teruggezet zodat interrupts weer toegestaan zijn. ; Wijzigt in het Statusregister : Niets. GOTO #Label ;Goto adress #Label. ; Springen naar de regel met label '#Label'. ; Wijzigt in het Statusregister : Niets. CLRW ;Clear W. ; W =. ; Wijzigt in het Statusregister : Z. CLRF #REG ;Clear F. ; F =. ; Wijzigt in het Statusregister : Z. MOVF #REG,#d ;Move F (Copy F). ; Als d= : W = F. ; Als d=1 : F = F. ; Het lijkt onzinnig een kopie van F naar F te maken, ; maar het kan gebruikt worden om te bepalen of de ; inhoud van F nul is. Handleiding PIC16F84-5

7 ; Wijzigt in het Statusregister : Z. MOVLW &h12 ;Move Literal to W. ; W = &h12. ; Wijzigt in het Statusregister : Niets. MOVWF #REG ;Move W to F (Kopie W to F). ; F = W. ; Wijzigt in het Statusregister : Niets. SWAPF #REG,#d ;Swap nibbles in F. ; Verwisselt in F bits 7-4 met bits 3-. ; Als d= : W = Swap F ; Als d=1 : F = Swap F. ; Wijzigt in het Statusregister : Niets. ADDLW &h12 ;ADD Literal and W. ; W = W + &h12. ; Wijzigt in het Statusregister : C, DC, Z. SUBLW &h12 ;Subtract W from Literal. ; W = &h12 - W (Verwarrend. Bij instruktie SUBWF ; is het 'SUB W from F' zodat je hier zou ; verwachten 'SUB Literal from W'. Helaas is het ; andersom.) ; Wijzigt in het Statusregister : C, DC, Z. ADDWF #REG,#d ;ADD W and F. ; Als d= : W = W + F. ; Als d=1 : F = W + F. ; Wijzigt in het Statusregister : C, DC, Z. SUBWF #REG,#d ;Subtract W from F. ; Als d= : W = F - W. ; Als d=1 : F = F - W. ; Wijzigt in het Statusregister : C, DC, Z. INCF #REG,#d ;Increment F. ; Als d= : W = F + 1. ; Als d=1 : F = F + 1. ; Wijzigt in het Statusregister : Z. INCFSZ #REG,#d ;Increment F, Skip if Zero. ; Als d= : W = F + 1 ; Als d=1 : F = F + 1 ; Als het resultaat nul is, dan wordt de volgende ; instruktie als NOP-instruktie uitgevoerd (lijkt ; overgeslagen te worden) ( = ). ; Wijzigt in het Statusregister : Niets. DECF #REG,#d ;Decrement F. : Als d= : W = F - 1 ; Als d=1 : F = F - 1 ; Wijzigt in het Statusregister : Z. DECFSZ #REG,#d ;Decrement F, Skip if Zero ; Als d= : W = F - 1 ; Als d=1 : F = F - 1 ; Als het resultaat nul is, dan wordt de volgende ; instruktie als NOP-instruktie uitgevoerd (lijkt ; overgeslagen te worden). ; Wijzigt in het Statusregister : Niets. RLF #REG,#d ;Rotate Left F trough Carry. ; Schuift alle bits een plaats naar links (F * 2), ; bit C van het Statusregister komt in bit, ; bit 7 komt in bit C van het Statusregister. ; Als d= : W = F * 2. ; Als d=1 : F = F * 2. ; Wijzigt in het Statusregister : C. RRF #REG,#d ;Rotate Right F trough Carry ; Schuift alle bits een plaats naar rechts (F / 2), ; bit C van het Statusregister komt in bit 7, Handleiding PIC16F84-6

8 ; bit komt in bit C van het Statusregister. ; Als d= : W = F / 2. ; Als d=1 : F = F / 2. ; Wijzigt in het Statusregister : C. ANDLW &h12 ;AND Literal with W. ; W = W AND &h12. ; Wijzigt in het Statusregister : Z. ANDWF #REG,#d ;AND W with F. ; Als d= : W = W AND F. ; Als d=1 : F = W AND F. ; Wijzigt in het Statusregister : Z. IORLW &h12 ;Inclusive OR Literal with W. ; W = W IOR &h12. ; Wijzigt in het Statusregister : Z. IORWF #REG,#d ;Inclusive OR W with F. ; Als d= : W = W IOR F. ; Als d=1 : F = W IOR F. ; Wijzigt in het Statusregister : Z. XORLW &h12 ;Exclusive OR Literal with W. ; W = W XOR &h12. ; Wijzigt in het Statusregister : Z. XORWF #REG,#d ;Exclusive OR W with F. ; Als d= : W = W XOR F. ; Als d=1 : F = W XOR F. ; Wijzigt in het Statusregister : Z. COMF #REG,#d ;Complement of F. ; Als d= : W = Complement van F. ; Als d=1 : F = Complement van F. ; Wijzigt in het Statusregister : Z. BCF #REG,#b ;Bit Clear F. ; Bit b in 'Fileregister' F wordt. ; Wijzigt in het Statusregister : Niets. BSF #REG,#b ;Bit Set F. ; Bit b in 'Fileregister' F wordt 1. ; Wijzigt in het Statusregister : Niets. BTFSC #REG,#b ;Bit Test F, Skip if Clear. ; Als bit b in 'Fileregister' F is, dan wordt ; de volgende instruktie als NOP-instruktie ; uitgevoerd (lijkt overgeslagen te worden). ; Wijzigt in het Statusregister : Niets. BTFSS #REG,#b ;Bit Test F, Skip if Set. ; Als bit b in 'Fileregister' F 1 is, dan wordt ; de volgende instruktie als NOP-instruktie ; uitgevoerd (lijkt overgeslagen te worden). ; Wijzigt in het Statusregister : Niets. Handleiding PIC16F84-7

9 De eerste adressen (registers) van het beschrijfbare geheugen (RAM) zijn gereserveerd voor speciale taken. De instelling van bit 5 van het StatusRegister is daarbij van belang. Als bit 5 van het StatusRegister is: dan is bank geselecteerd adres &h : IND. Geen echt register. Indirekt adresseren via FSR. adres &h1 : TMR. Teller (instrukties of spanningswisselingen op B). adres &h2 : PCL. Laagste 8 bits van het programma-adres. adres &h3 : STATUS. Status Register. adres &h4 : FSR. File Select Register, in samenwerking met IND (&h). adres &h5 : PORT A. Lezen/Schrijven Input/Output-poort A. adres &h6 : PORT B. Lezen/Schrijven Input/Output-poort B. adres &h7 : Wordt niet gebruikt en is niet te gebruiken. adres &h8 : EEDATA. Data voor het EE-Memory. adres &h9 : EEADR. Adres voor het EE-Memory. adres &ha : PCLATCH. Hoogste 5 bits van het programma-adres. adres &hb : INTCON. Instellen interrupts. adres &hc : Dit adres tot en met adres &h2f is vrij te gebruiken Als bit 5 van het StatusRegister 1 is: dan is bank1 geselecteerd adres &h8 : Indirekt adres (bit 5 heeft op dit adres geen invloed) adres &h81 : OPTION (Instellen opties) adres &h82 : PCL (bit 5 heeft op dit adres geen invloed) adres &h83 : STATUS (bit 5 heeft op dit adres geen invloed) adres &h84 : FSR (bit 5 heeft op dit adres geen invloed) adres &h85 : TRISA (Instellen Input/Output poort A) adres &h86 : TRISB (Instellen Input/Output poort B) adres &h87 : Wordt niet gebruikt en is niet te gebruiken adres &h88 : EECON1 (Instellingen voor EE-Memory) adres &h89 : EECON2 (Instellingen voor EE-Memory) adres &h8a : PCLATCH (bit 5 heeft op dit adres geen invloed) adres &h8b : INTCON (bit 5 heeft op dit adres geen invloed) adres &h8c : &h8c t/m &h2f (bit 5 heeft op deze adressen geen invloed) : aders &h8c tot en met &haf zijn hetzelfde als bank De registers (geheugen-adressen) in het RAM : TMR (#TMR = &h1) In register OPTION kan ingesteld worden of de Timer de wisselingen van hoog naar laag of laag naar hoog op poort A4 moet tellen, of het aantal instrukties dat is uitgevoerd. Bovendien kan in het OPTION register een faktor ingesteld worden. Als bijvoorbeeld de instrukties geteld worden en de ingestelde factor is 2, dan gaat de Timer elke twee instrukties een stapje verder. Met een oscillator van 8MHz duurt elke instruktie.5 microseconde, elke twee instrukties 1 microseconde, zodat elke stap van de Timer een verlopen tijd van 1 microseconde aangeeft. PCL (#PCL = &h2) Het programma-adres, ofwel het adres van de uit te voeren instruktie. Als het programma in de PIC start, begint het programma op adres &h. Als een interrupt optreed dan springt het programma naar adres &h4. Bij de instruktie CALL, RETURN, RETFIE, RETLW en GOTO wordt de inhoud van de PCL en PCLATCH automatisch gewijzigd. Door zelf de PCL te wijzigen kan naar een ander adres in het programma gesprongen worden. Dit is echter oppassen. De PCL bevat 8 bits, de Handleiding PIC16F84-8

10 PCLATCH is niet te beschrijven, er kan dus alleen binnen een blok van 256 adressen gesprongen worden. STATUS (#STR = &h3) bit 7 : Wordt niet gebruikt, moet blijven bit 6 : Wordt niet gebruikt, moet blijven bit 5 : selectie van bank of bank1 bit 4 : TO = 1 na 'power-up', CLRWDT of SLEEP instruktie TO = als WatchDogTimer van 255 naar is gegaan bit 3 : PD = 1 na 'power-up' of CLRWDT instruktie PD = na SLEEP instruktie bit 2 : Z = 1 als het resultaat van een bewerking is Z = als het resultaat van een bewerking niet is bit 1 : DC = 1 na Carry van bit 4 naar 5 of van bit 5 naar 4 DC = als geen Carry tussen bit 4 en 5 opgetreden is bit : C = 1 als resultaat optelling >255 of aftelling < C = als resultaat optelling <=255 of aftelling >= FSR (#FSR = &h4) Indirekte register adressering (in samenwerking met register IND = &h) Stel dat je 5 registers wilt wissen. Dan kun je het volgende doen: clrf &hc ;Wist adres &hc clrf &hd ;Wist adres &hd clrf &he ;Wist adres &he en zo voor elk adres een instruktie, 5 instrukties in totaal. Het gaat beter via de indirekte adressering: movlw &hc ;Adres eerste te wissen register movwf #FSR ;naar FileSelectRegister. movlw &h32 ;Instellen van een teller, movwf #CNT ;5 adressen te wissen. #Wissen ;Sprong-adres. clrf #IND ;Wist het register waarvan het adres in FSR staat. incf #FSR,#f ;Volgende adres in register FSR instellen. decfsz #CNT,#f ;Aftellen van 5 naar : indien nul, GOTO ;overslaan. goto #Wissen ;Terug naar het label #Wissen.??? ;De volgende instrukties van het programma. In totaal zijn nu 8 instrukties gebruikt in plaats van 5. PORTA (#CPA = &h5) De bits in dit adres geven aan of de spanning op de pennen van poort A hoog (=1) of laag (=) zijn. Bit geeft de spanning op pen A, bit 1 geeft de spanning op pen A1, enzovoort. Alleen de eerste 5 bits worden gebruikt (Poort A heeft 5 pennen). In register TRISA kan ingesteld worden of een pen als 'Input' of als 'Output' gebruikt wordt. Stel dat pen A3 als Output is ingesteld en je wilt de spanning hoog of laag maken zonder de andere Output-pennen van Poort A te wijzigen. Dan gebruik je de instrukties 'bsf' en 'bcf' : bsf #CPA,&h3 ;Spanning op A3 hoog (#CPA = &h5, &h3 = bit 3 = A3). bcf #CPA,&h3 ;Spanning op A3 laag (#CPA = &h5, &h3 = bit 3 = A3). Handleiding PIC16F84-9

11 Als je wilt testen of de spanning op een Input-pen hoog of laag is, dan kun je gebruik maken van 'btfss' of 'btfsc'. Stel dat je naar een subroutine met de naam #Test wilt springen als de spanning op pen A3 hoog is, dan gebruik je de volgende instrukties: btfsc #CPA,&h3 ;Testen of de spanning op A3 hoog is (#CPA = &h5). call #Test ;Aanroepen #Test als A3=1, overslaan als A3=.??? ;Verder gaan met het programma. Pen A4 heeft nog een speciale mogelijkheid. Je kunt instellen dat de Timer (TMR) het aantal keren telt dat de spanning op pen A4 van hoog naar laag of van laag naar hoog is gegaan. Je kunt bijvoorbeeld een kwartsklokje uit elkaar halen en de elektronica die elke seconde een puls geeft op A4 aansluiten. De Timer telt dan de seconden, zodat de PIC zeer nauwkeurig de tijd bij kan houden. PORTB (#CPB = &h6) De bits in dit adres geven aan of de spanning op de pennen van poort B hoog (=1) of laag (=) zijn. Bit geeft de spanning op pen B, bit 1 geeft de spanning op pen B1, enzovoort. In register TRISB kan ingesteld worden of een pen als 'Input' of als 'Output' gebruikt wordt. Poort B heeft een aantal speciale mogelijkheden. Voor pen B kan ingesteld worden dat een interrupt optreedt als de spanning van hoog naar laag of van laag naar hoog gaat. Voor pennen B4 t/m B7 kan ingesteld worden dat een interrupt optreed als de spanning op een van die pennen wijzigt. Bovendien kan ingesteld worden dat de spanning van een niet aangesloten pen hoog is. Dat is handig als je een schakelaar aansluit op een pen. Is de schakelaar open, dan is de spanning hoog. Is de op V aangesloten schakelaar dicht, dan is de spanning laag. (sluit de schakelaar bij voorkeur aan via een weerstand van 1K, ook al hoeft dat niet bij een 'input'-poort. Mocht door een foutje in het programma de poort waarop de schakelaar aangesloten is niet ingesteld zijn als 'input' maar als 'output', dan raakt de PIC tenminste niet beschadigt.) Zie verder bij het INTCON en het OPTION register. EEDATA (#EED = &h8) Voor schrijven in EE-Memory: Plaats in EEDATA de te schrijven waarde en in EEADR het gewenste adres, geef vervolgens de schrijf opdracht. Voor lezen uit het EE-Memory: Schrijf in EEADR het gewenste adres en geef de lees opdracht, lees vervolgens uit EEDATA de uit het EE-Memory op adres EEADR gelezen waarde. Zie EECON1 en EECON2. EEADR (#EEA = &h9) Voor schrijven in EE-Memory: Plaats in EEDATA de te schrijven waarde en in EEADR het gewenste adres, geef vervolgens de schrijf opdracht. Voor lezen uit het EE-Memory: Schrijf in EEADR het gewenste adres en geef de lees opdracht, lees vervolgens uit EEDATA de uit het EE-Memory op adres EEADR gelezen waarde. Zie EECON1 en EECON2. PCLATCH (&ha) Hoogste 5 bits van het programma-adres. Niet te lezen, niet te beschrijven. Handleiding PIC16F84-1

12 INTCON (#ICR = &hb) bit 7 : 1 = interrupts toegestaan (instelling na RETFIE) = interrupte niet toegestaan (instelling na een interrupt) bit 6 : 1 = interrupt als schrijven in EE-Memory voltooid is = geen interrupt als schrijven in EE-Memory voltooid is bit 5 : 1 = interrupt als TMR van 255 naar gaat = geen interrupt als TMR van 255 naar gaat bit 4 : 1 = interrupt als spanning op B wijzigt (zie bit 6 in OPTION) = geen interrupt als spanning op B wijzigt bit 3 : 1 = interrupt als spanning op B4-B7 wijzigt = geen interrupt als spanning op B4-B7 wijzigt bit 2 : 1 = TRM is van 255 naar gegaan = TMR is niet van 255 naar gegaan dit bit moet in het programma gewist worden (BCF #INT,&h2) voordat opnieuw getest kan worden of TRM van 255 naar is gegaan bit 1 : 1 = interrupt op B opgetreden = geen interrupt op B opgetreden bit : 1 = de spanning op een pennetje van B4-B7 is gewijzigt = de spanning op de pennejtes van B4-B7 is niet gewijzigt Het programma springt bij een interrupt altijd naar adres &h4. Als interrupts toegestaan zijn (bit 7 = 1), dan moet vanaf dat adres een aantal instrukties in het programma opgenomen zijn die bepalen wat er gedaan moet worden. Die instrukties kunnen aan bit 2,1, zien wat voor interrupt opgetreden is. Aangezien het programma altijd begint op adres &h, moet voor adres &h4 een GOTO instruktie staan die de programma-teller over de interrupt afhandelings instrukties heen laat springen naar het werkelijke begin van het programma. OPTION (#OPT = &h1 met bit 5 van het statusregister op 1) bit 7 : 1 = interne weerstandjes op poort B aangesloten zodat de spanning op niet aangesloten pennen hoog is. = geen interne weerstandjes aangesloten bit 6 : 1 = interrupt als de spanning op B van laag naar hoog gaat = interrupt als de spanning van B van hoog naar laag gaat zie bit 4 van INTCON bit 5 : 1 = TMR spanningwisselingen op A4 laten tellen = TMR het aantal uitgevoerde instrukties laten tellen bit 4 : 1 = Als bit 5 = 1, TMR=TMR+1 als A4 van hoog naar laag gaat = Als bit 5 = 1, TMR=TMR+1 als A4 van laag naar hoog gaat bit 3 : 1 = Timer-factor gebruiken voor de WatchDogTimer = Timer-factor gebruiken voor TMR bit 2- : instellen van de Timer-factor. Voor de TMR geldt: = 1:2, 1 = 1:4, 1 = 1:8, 11 = 1:16, 1 = 1:32 11 = 1:64, 11 = 1:128, 111 = 1:256 (Als de Timer het aantal uitgevoerde instrukties telt, en de factor is voor de Timer ingesteld op 2, dan gaat de Timer elke 2 instrukties een stap verder) TRISA (#CPA = &h5 met bit 5 van het statusregister op 1) Instellen Input/Output poort A. Een 1 is Input en een Output. Als je van poort A pennen A en A1 als Input wilt instellen en de overige als Output, dan gaat dat met de volgende instrukties: Handleiding PIC16F84-11

13 bsf #STR,&h5 ;bit 5 van het statusregister op 1 zetten (#STR = &h3) movlw &h3 ;11 = &h3 (A1 en A Input, overige Output) movwf #CPA ;Instellen poort A (#CPA = &h5) bcf #STR,&h5 ;bit 5 van het statusregister op terugzetten TRISB (#CPB = &h6 met bit 5 van het statusregister op 1) Zie TRIS A EECON1 (#EC1 = &h8 met bit 5 van het statusregister op 1) bit 7 : Altijd bit 6 : Altijd bit 5 : Altijd bit 4 : 1= Schrijven in EE-Memory voltooid (Interruptbit: Wis in programma) = Schrijven in EE-Memory niet voltooid of niet begonnen bit 3 : 1= Schrijven onderbroken door interrupt MCLR of WDT = Schrijven niet onderbroken bit 2 : 1= Schrijven in EE-Memory toegestaan = Schrijven in EE-Memory niet toegestaan bit 1 : 1= Schrijven gestart (zet bit op 1 om schrijven te starten) = Schrijven voltooid (bit wordt door PIC gewist) bit : 1= Lezen in EE-Memory gestart (zet bit op 1 om lezen te starten) = Lezen in EE-Memory voltooid (bit wordt door PIC gewist) Voor lezen en schrijven in EE-Memory moeten een aantal instrukties in vaste volgorde uitgevoerd worden. ;Lezen EE-Memory movlw &h5 ;Te lezen adres in EE-Memory movwf #EEA ;naar EEA (bit 5 van STR = ). bsf #STR,&h5 ;Bank 1 instellen (bit 5 van STR = 1). bsf #EED,&h ;Lezen starten. bcf #STR,&h5 ;Bank instellen (bit 5 van STR = ). movf #EED,#w ;Gelezen byte uit EED naar W. ;Schrijven EE-datamemory movlw &h5 ;Te beschrijven adres in movwf #EEA ;EE-Memory naar EEA (STR,&h5 = ). movlw &h12,#w ;(of bijvoorbeeld movf #REG,#w) Te schrijven movwf #EED ;getal naar EED. bcf #ICR,&h7 ;Interrupts uitschakelen. bsf #STR,&h5 ;Bank 1 instellen (bit 5 van STR = 1). bsf #EED,&h2 ;Schrijven toestaan. movlw &h55 ;Deze vier instrukties zijn noodzakelijk movwf #EEA ;en kunnen niet achterwege gelaten worden. movlw &haa ; - movwf #EEA ; - bsf #EED,&h1 ;Start schrijven. bcf #STR,#R ;Bank instellen (bit 5 van STR = ). bsf #ICR,&h7 ;Interrupts inschakelen (toestaan). De waarde uit EEDATA is pas in het EE-Memory geschreven als bit 4 van EECON1 1 geworden is. Wees erop bedacht dat dit een groot aantal instrukties kan duren. Als je een volgend getal gaat schrijven voor de voorgaande schrijfopdracht is voltooid, dan komen in het EE-Memory niet de waarden die je verwacht. Wacht met een volgende schrijfopdracht tot bit 4 in EECON1 1 geworden is, en maak het bit voor je de volgende schrijfopdracht geeft. Handleiding PIC16F84-12

14 EECON2 (&h9 met bit 5 van het statusregister op 1) Dit adres wordt gebruikt voor het schrijven in het EE-Memory. Lezen van dit byte geeft altijd &h. Configuratie bits Deze speciale bits zijn alleen in te stellen tijdens het programmeren van de PIC. De instelling kan in het Mnemonic-programma opgegeven worden met de instruktie CFG. Als de instelling niet opgegeven is, dan wordt de standaard instelling gebruikt. bit 13-4 : 1 = Geheugen niet onleesbaar maken (standaard) = Geheugen onleesbaar maken (beschermen programmacode) bit 3 : 1 = 'Power-Up' timer uigeschakeld bit 2 = 'Power-Up' timer ingeschakeld (standaard) : 1 = WatchDogTimer ingeschakeld = WatchDogTimer uitgeschakeld (standaard) bit 1- : 11 = RC oscillator 1 = HS oscillator (High Speed: standaard) 1 = XT oscillator = LP oscillator Handleiding PIC16F84-13

15 Programmastructuren Het programmeren op assemblerniveau wordt al gauw zeer onoverzichtelijk, ondanks de hulp van symbolische instructies en adressen. Een flinke stap vooruit is het opzetten van afgezonderde stukken programma, die een afgeronde en duidelijk herkenbare taak hebben. Een belangrijke vorm daarvan is de subroutine. Een dergelijk subprogramma kan op simpele wijze worden uitgevoerd vanaf willekeurige plaatsen in het "hoofdprogramma". De voordelen van een modulaire opbouw van een programma worden verderop wat diepergaand besproken. Subroutines We bekijken het volgende stukje programma: movf temp1,w movwf temp3 movf temp2,w movwf temp1 movf temp3,w movwf temp2 Het gaat hier om het verwisselen van twee bytes in het geheugen, temp1 en temp2, temp3 is en hulp register. Het zou een onderdeel kunnen zijn van een sorteerprogramma. Het geheugen zelf heeft daarvoor geen vaardigheden. De processor moet er intensief aan te pas komen. Er worden hier twee move instructies gebruikt. Daarna worden de inhouden van A en B kruiselings teruggezet in het geheugen. De situatie, die zich hier voordoet is rijp voor het afzonderen van deze handelingen in een subprogramma. Wellicht kan dit ook in breder verband worden gebruikt. Een sprekend begin is het vervangen van de vier instructies door slechts één operatie en wel de "subroutinesprong":... call Verwissel... <--- Hier staat: Call on label Verwissel. De assembler geeft hier uiteraard ondersteuning door een voor zich zelf sprekende label toe te laten. De vervangen regels zijn elders in de sourcecode terug te vinden: Verwissel: movf temp1,w ; movwf temp3 movf temp2,w movwf temp1 movf temp3,w movwf temp2 return Duidelijk is hier een toevoeging te zien in de vorm van een Return from Subroutine. Dit is nodig om de processor een aanwijzing te geven voor het "terugkeren" naar het "hoofdprogramma". De executie moet worden vervolgd achter de call-instructie; zie pijl. Alleen dan krijgen we een bruikbare opzet van het afzonderen van een stuk programma. Let wel: call en return zijn instructies, waarvoor de processor standaard handelingen in huis heeft. Het is belangrijk om te kunnen doorzien wat er precies gebeurt tijdens een subroutine call. Als we het blokschema van de microcontroller bekijken dan zien we dat de programcounter met een 8 level stackregister verbonden is. Het stackregister bestaat hier uit acht 13 bits registers, waarin de inhoud van de programcounter gezet kan worden. Dit kan overigens niet door de gebruiker zelf direct met een movf gedaan worden. Tijdens de call instructie wordt de huidige waarde +1(de plaats waar het programma verder moet gaan na de subroutine) van de programcounter in een register van de stack gezet. De inhoud van de programcounter hangt af van de plaats waar de subroutine zich in de programmemory bevindt. (Hier de plaats waar de subroutine Verwissel staat) Programmastructuren blz. 1

16 Als de return-instructie op het einde van de subroutine aangeroepen wordt, wordt automatisch de inhoud van de stack weer in de programcounter gezet. Als er een subroutine aanroep binnen een subroutine plaatsvindt, zal op dat moment weer de inhoud van de Programcounter op de stack gezet worden. Nu zal echter de volgende plaats van de stack gebruikt worden. Bij een return zal eerst deze weer in de programcounter teruggezet worden volgens het Last In, First Out principe. (LIFO) Subroutines kunnen op deze manier een zogenaamde geneste structuur krijgen, en wel met een diepte van 8. De structuur kan hier netjes bewaard blijven. Het is dan ook zeer aan te raden geen goto instructies te gebruiken, en zeker niet binnen subroutines! Ook bij interrupt routines, wordt deze constructie toegepast. De instructies die de stack beïnvloeden zijn call, return, retlw en retfie. Modulaire opbouw van een programma De subroutine is een concept, dat past in een modulaire opbouw van programmatuur. Modulair werken heeft grote voordelen. Te noemen zijn: 1. Modulaire programma's zijn overzichtelijker en beter te begrijpen Grote en/of ingewikkelde programma's zijn niet bepaald overzichtelijk. Hierin kan verbetering worden gebracht door zulke programma's te verdelen in stukken. De stukken worden uiteraard bij voorkeur zo gekozen, dat ze elk een bepaald afgerond deel van het probleem oplossen. Een dergelijk deelprogramma wordt wel een module genoemd. De techniek heet modulair programmeren. Een module kan op zichzelf weer onderverdeeld zijn in andere modulen, etc. Zo kan er een hiërarchie van hoofd- en submodulen ontstaan: Probleem Deelprobleem A Actie A1 Actie A2 Deelprobleem B Actie B1 Invoer Actie In1 onder voorwaarde Anders actie In2 Verwerking Actie Verw1 Actie Verw2 Uitvoer Deelprobleem C Interactie Responsie Uitvoer De indeling heeft alles te maken met top-down ontwerpen. Eerst is er een globaal beeld van de doelstelling van een opdracht. Dan worden onderdelen bestudeerd en stapsgewijs geraffineerd. 2. Een modulair programma kan eenvoudiger worden ontworpen en getest. Een module is eenvoudiger te beschrijven en foutvrij te maken ("debuggen") dan een volledig programma. Een deelprobleem is beter te doorzien en kan op zichzelf worden vertaald naar een flowdiagram of een structogram. Van daaruit kan dan het module worden ontworpen en beheerst. Het is op die wijze gemakkelijker om ook de juiste tests op het gerede product toe te passen. Eerst op module-niveau en vervolgens hoger in de hiërarchie. Programmastructuren blz. 2

17 3. Modulaire programma's zijn gemakkelijker te wijzigen. Een module kan gemakkelijk worden losgemaakt uit het geheel om elders (al of niet hetzelfde programma) te worden hergebruikt. Iets dergelijks geldt ook voor het vervangen door een ander veranderd, verbeterde module. Als een module is opgezet als een zelfstandig en afgesloten programma onderdeel, dan hoeft niet het hele programma te worden onderzocht om na te gaan of de wijziging gevolgen heeft op onverwachte plaatsen in het programma. Zolang de specificatie van de inkomende gegevens en van de uitgaande resultaten van de module maar niet verandert! De verbindingen tussen de diverse modulen noemt men ook wel de interface. De interface moet goed worden vastgelegd. Er moet nauwkeurig worden omschreven, waar elk module zijn gegevens vandaan haalt en waar de uitvoergegevens moeten worden opgeborgen. Een stap verder gaat Object Oriented Programming. Hierbij worden gegevens uitgewisseld via boodschappen onder een overkoepelend programma (het Operating System) en blijven de gegevens overigens in "eigen beheer", zodat ze minder kwetsbaar worden voor foutief gebruik elders. OOP houdt uiteraard nog wel wat meer in. Zo is de opzet zodanig, dat gemakkelijk varianten zijn te maken van een module met zijn eigenschappen als erfgoed. Deze manier van programmeren valt verder buiten het bestek van deze cursus. 4. Aan een modulair programma kan gemakkelijk door meer personen worden gewerkt. Elke ontwerper kan één of meer modulen voor zijn rekening nemen. Daarbij is het natuurlijk wel zaak, dat de modulen goed worden gedocumenteerd. Van modulen, die in meerdere programma's kunnen worden gebruikt kunnen "bibliotheek"-exemplaren worden aangelegd. Denk bijvoorbeeld aan standaard input- en outputroutines. Toevoeging aan een hoofdprogramma kan op assemblerniveau gebeuren, door de sourcetekst toe te voegen alvorens te assembleren. Een andere mogelijkheid is het al vast vertalen van de module voordat het in de bibliotheek wordt opgenomen. Er komt dan een stuk softwaregereedschap aan te pas om deze reeds vertaalde modulen te koppelen met andere. We spreken in dit verband van een Linker. Het spreekt vanzelf, dat een dergelijke Linker de nodige kruislingse gegevensverbindingen moet "oplossen". 5. De voortgang van de ontwikkeling is beter te controleren. Men kan eenvoudig zien welke modulen al gereed zijn en welke nog speciale aandacht nodig hebben. Bij voorkeur worden ze afzonderlijk testbaar gemaakt. Niet helemaal gratis Modulaire programma's kosten extra executietijd en (soms) extra geheugenruimte. Doorgaans is er enige extra code nodig voor het zelfstandig opereren van een module. Zo moet er op worden gelet, dat er geen registerinhouden zoekraken, doordat registers worden gebruikt, die ook al buiten de module bezet waren. Een simpele oplossing is het op de stack stapelen van de informatie (en het naderhand herstellen!). Zie ook onder "Overdracht van gegevens". Een en ander kost wel tijd en maakt het programma als geheel langer. Uiteraard werkt meermalig gebruik van een module weer gunstig op de lengte van een programma. Overdracht van gegevens We zullen in het hier volgende het begrip module even vereenzelvigen met het begrip subroutine, hoewel het zeer wel denkbaar is, dat de modulaire structuur van een programma niet alleen op subroutines is gebaseerd. In het algemeen moeten bij het aanspreken van subroutines bepaalde gegevens worden overgeheveld van en naar de subroutine. Om dit uit te werken veranderen we het eerder gebruikte verwisselprogramma een beetje. De opzet was als volgt: Programmastructuren blz. 3

18 Hoofdprogramma:... call Verwissel... <--- Subroutine: Verwissel: movf temp1, ; movwf temp3 movf temp2, movwf temp1 movf temp3, movwf temp2 return Dit functioneert niet erg flexibel. De starre adressering laat nauwelijks hergebruik toe. Dit kan aanzienlijk worden verbeterd door de adressen van de te verwisselen getallen door te geven via een geschikt register. In de PIC 16F84 worden hiervoor de registers FSR (pointer) en het INDF register gebruikt. Deze laten indirecte adressering toe. We bekijken nu hoe het programma eruit komt te zien: Hoofdprogramma: org h ; startup address = movlw x7 movwf x23 movlw x9 movwf x24 start movlw x23 ; benoem het eerste register welke movwf FSR ; in het FSR pointerregister komt te staan call verwissel2 ; verwissel inhoud van x23 en x24 goto start subroutine: verwissel2 movf INDF, movwf temp3 incf FSR movf INDF, decf FSR movwf INDF movf temp3, incf FSR movwf INDF return ; move de inhoud van het register waar naar gewezen wordt naar het w-register ; Bewaar de inhoud van het eerste register in temp3 ; Hoog de pointer 1 op ; verlaag de pointer om nar het vorige adres te wijzen ; de inhoud van het w-register naar de plaats waar de pointer aanwijst ; laad de inhoud het temp3 register in het w-register ; de pointer weer naar het tweede register ; de inhoud van W naar het tweede register Advies : tik het programma in en bekijk de simulatie.( open het Stack Window, en het File Register Window) Samenvatting In dit hoofdstuk is het nut van modulair programmeren aan de orde geweest. In dit kader is de nadruk vooral gevallen op het gebruik van subroutines. Macro's en Objecten zijn om verschillende redenen alleen met name genoemd. Een belangrijke plaats heeft de overdracht van gegevens van en naar sub- programma s ingenomen. Programmastructuren blz. 4

19 Het programmeermodel van de PIC16F84 Om een microcomputer te doorgronden moet men kennis hebben van de soorten, maten en mogelijkheden van de beschikbare registers in de processor. We noemen dat het programmeermodel. Verder is het nodig om te weten wat de spelregels zijn bij het adresseren van het geheugen, de adresseringstechnieken. In deze cursus is gekozen voor de Microtech PIC16F84 microcontroller. Het is niet alleen een microcontroller maar ook enkele standaard componenten van een microprocessorsysteem zijn reeds aan boord van de chip. De chip is verder zeer toegankelijk, eenvoudig, goedkoop en heeft een goede gratis ontwikkelomgeving. Van de processor zijn de diverse registers gegeven en een Arithmetic & Logic Unit. De ALU is getekend in de vorm van een tweetal operandregisters en een resultaatregister W. Er kunnen met de ALU operaties worden uitgevoerd op 8-bits operanden. Het gaat dus om een 8-bit microcontroller. Via enkele interne bussen worden allerlei transporten geregeld, waarbij bedacht moet worden dat vrijwel alle registers verbindingen hebben met deze bussen. De programcounter is een 13-bits register, dat wordt gebruikt om in het geheugen een plaats aan te wijzen, waar code te vinden is, die de processor nodig heeft om de eerstvolgende processtappen te kunnen ondernemen. De processor stelt de adresbus overeenkomstig de inhoud van de programcounter in en verwacht binnen een vastgestelde tijd een reactie van het geheugen in de vorm van een codebyte op de databus. De programcounter bevat steeds het adres van de volgende uit te voeren instructie. Het programmeermodel van de PIC16F84 blz 1

20 De memorymap van de PIC16F84 Er zijn twee blokken memory in de PIC16F84, het datamemory en het programmemory. Elk geheugen heeft zijn eigen bus, zodat er tegelijkertijd met de verschillende gedeelten gewerkt kunnen worden. In het data memory kan je weer twee delen onderscheiden: SFR Special Function Registers GPR General Purpose RAM Enkele Special Function Registers, zoals het statusregister, PortA, PortB etc, zullen nog uitgebreid behandeld worden. Het GPR kan vrij gebruikt worden. Daarnaast is er nog een stuk EEPROM. Hierin kunnen bijvoorbeeld meetwaarden of tabellen in opgenomen worden die niet verloren mogen gaan als de spanning niet aanstaat. Het EEPROM gedeelte is indirect gemaped in de memory MAP. Hiertoe is er een indirecte EEPROM pointer aanwezig (EEADR, x9). Deze werkt op een soortgelijke wijze als het FSR (Zie hoofdstuk 7. van de datasheet) Program memory De PIC16F84 heeft een 13-bit, door de programcounter aangewezen 124 x 14 bits breed geïmplementeerd memory geheugen. (h-3ffh) Van de 8K die adresseerbar is, is er 1K effectief adresseerbaar. Er zijn twee bijzondere plaatsen in dat geheugen. Ten eerste de resetvector: Bij een reset wordt de programcounter op h gezet zodat daar het programma start. Daarnaast is nog de zogenaamde interruptvector. Als er een interrupt onstaat dat zal de programcounter met 4h gevuld worden en zal het programma daar verder gaan. De interruptverwerking wordt verder in deze cursusbesproken. Het programmeermodel van de PIC16F84 blz 2

21 Data memory map Het data memory is opgedeeld in twee zogenaamde banken. Om bepaalde registers te bereiken moet er van bank gewisseld worden. De adressen 8h CFh kunnen niet zonder meer geadresseerd worden. De adresdecoder wijst alleen de onderste 7 bits aan. Daarnaast is er nog een bit (RP=bit 5)in het zogenaamde STATUS register die aanwijst welke bank gebruikt wordt. Deze bit vormt de achtste bit van het adres. De registers OPTION, TRISA, TRISB, EECON1 en EECON2 zijn de enige registers waarvoor eigenlijk naar BANK 2 geswitched moet worden. Alle andere registers kunnen zowel met het hoogste bitje (RP in STATUS) 1 of bereikt worden. Het aangeven van adres Ch of 8Ch zal hetzelfde geheugen (= register) aanwijzen. De instructies MOVF en MOVWF kunnen waarden van en naar de registerfiles ( f ) in het geheugen schrijven. Het programmeermodel van de PIC16F84 blz 3

22 Het statusregister Het status register bevat de rekenkundige status van de ALU, de RESET en een bitje welke aangeeft welke data memory bank geselecteerd is. Zoals alle registers kan ook het statusregister het doel van een instructie zijn. Niet alle bits van het statusregister zijn bedoeld om te manipuleren. De bits b3 (/PD) en b4(/to) kunnen alleen uitgelezen worden. In de instructieset kun je zien welke instructies het status register kunnen beïnvloeden. CLRF STATUS zal dus niet alle bitjes maken. Het resultaat zou wel worden zodat het zerobitje (Z = b2) 1 wordt. Dit is verwarrend en is niet aan te raden te doen. Bij voorkeur wordt gebruik gemaakt BCF,BSF SWAPF en MOVWF om met het statusregister te bewerken. Het statusregister blz. 1

23 Oefening. 1. Ga de inhoud van het Statusregister na, voor elke stap van het programma. Wanneer wordt voor het eerst de Z-bit geset? Als het programma loopt met de klokfrequentie van 4 MHz wat is dan de frequentie van het Z- bit? (ga dit na met MPLAB) PortA equ x5 ; PortA RAM address LED equ x4 ; PortA RA1 = bit 1 for LED TrisA equ x85 ; TRISA RAM address RP equ x5 Status equ x3 ; Status RAM address temp equ x1 ; org h ; startup address = bsf Status,RP ; set RP for RAM page 1 clrf TrisA ; all PortA = outputs bcf Status,RP ; set RP for RAM page movlw x3 movwf temp start movf temp, movwf PortA decf temp goto start end 2. Welke bits in het statusregister kunnen worden beïnvloed door de instructie ADDWF? 3. Waarom kunnen deze bits door deze instructie beïnvloed worden? 4. Hoe kunnen deze bits beïnvloed worden? 5. Welke instructies beïnvloeden het Z-bitje, en wanneer doen ze dat? Het statusregister blz. 2

24 De I/O van de PIC16 F84 De I/O Van de PIC16F84 is wat anders georganiseerd dan van de gebruikelijke processoren. Dit komt omdat de chip erg gericht is op simpele I/O. De PIC16F84 heeft 2 I/O poorten, PORTA en PORTB. Sommige pennen van deze I/O hebben ook de mogelijkheid tot andere functies, en zijn daartoe gemultiplext. PORTA is een 5 bits bi-directionele poort, PORTB is een 8 bits bi-directionele poort. We zullen beide poorten uitvoerig behandelen. PORTA van de PIC16F84 N sper N 1 geleid P geleid P 1 sper TRIS P N Data Bus I/O PIN input 1 sper sper IN (V) VSS input 1 sper sper 1 IN (5V) VDD output sper geleid out L (V) VSS output geleid sper 1 out H (5V) VDD BLOCK DIAGRAM OF PINS RA3:RA Voor het besturen van de pinnen van PORTA zijn twee registers van belang, ten eerste het register PORTA en het datadirectionregister TRISA. PORTA bestaat uit 5 D-latches waar de data naar toe geschreven kan worden vanuit de processor, zodat er op de desbetreffende pinnen RA- RA4, een waarde komt te staan. Het register kan de data ook buiten de chip naar binnen halen en als input dienen. De afzonderlijke pinnen RA-RA4 kunnen als input of als output geprogrammeerd worden. De richting (input of output) kan worden bepaald door het TRISA register. Als een bit van het TRISA register geset wordt ( =1) dan wordt de corresponderende PORTA pin een input. De corresponderende outputbuffer wordt dan in een hoge impedantie gezet. In de resetfase staan alle I/O pinnen voor de veiligheid als input geconfigureerd. Zie bovenstaande figuur. De poorten worden aangestuurd door de TRIS latch. Deze krijgt zijn data van de databus. Wanneer de TRIS latch op 1 staat wordt de and-poortingang een en zal de N- CMOS transistor hoogohmig worden. De data van de datalatch wordt op deze manier niet doorgegeven. Een dergelijk verhaal geldt ook voor de P-CMOS transistor. Ga dit zelf na en gebruik bovenstaande tabellen. In dit geval zullen beide transistoren in een hoogohmige toestand staan zodat de I/O pin geschikt is voor input. De I/O van de PIC16F84 blz. 1

25 Als de TRIS-Latch op staat dan is via /Q van deze latch de And-poort open en de OR poort laat dan ook de data aan de P-CMOS transistor door. In de inputmode (TRIS = 1 ) komt de data via de inputbuffer op een andere latch die uitgelezen kan worden op de databus. Het één en ander wordt begeleid door Read (RD PORT en RD TRIS ) en Write signalen (WR port WR Tris) BLOCK DIAGRAM PIN RA4 Een uitzondering is op het bovenstaand vormt RA4. Deze heeft een zogenaamde schmitt Trigger input en een open drain output. De Smitt trigger ingang is geschikt voor ingangssignalen met meer kans op storing. Bij deze ingang ligt het Hoog -> Laag drempel gewoonlijk beduidend lager dan de Laag-> Hoog drempel. Dit noemen we hysteresis. De lage drempel ligt 2.VDD en de hoge bij.48 VDD. De open Drain output is active-low dat betekent dat de uitgang naar getrokken. Er moet extern een weerstand aangebracht worden naar de VDD. Dit soort uitgangen kunnen parallel geschakeld worden. De uitgang die de lijn naar (laag) trekt is dan bepalend voor de logische waarde van de lijn. In bovenstaande figuur is voor deze pin het blokschema opgenomen. Ga de werking na. voorbeeld: initialisatie PORTA BCF STATUS, RP ; CLRF PORTA ; Initialize PORTA by clearing output data latches BSF STATUS, RP ; Select Bank 1 MOVLW xcf ; Value used to initialize data direction MOVWF TRISA ; Set RA<3:> as inputs ; RA<5:4> as outputs ; TRISA<7:6> are always read as ''. De I/O van de PIC16F84 blz. 2

26 PORTB van de PIC16F84 BLOCK DIAGRAM OF PINS RB7:RA4 BLOCK DIAGRAM OF PINS RB3:RA PORTB is een 8-bits brede bi-directionele poort. Deze poort ziet er wat anders uit dan PORTA. De basisfuncties van I/O zijn ongeveer gelijk. De pinnen RB4-RB7 kunnen als ze als input geconfigureerd staan, een interrupt genereren. Alle pinnen hebben ook nog een zwakke interne PULL-up. Een controle bit in het OPTION register, de bit /RBPU hiervan kan de weak pull-up actief maken. Gebruikelijk is het om extern de pull-up weerstanden aan te sluiten. In dit geval kan dit door de weak pullup actief te maken. Deze wordt gevormd door een MOS transistor die zich bij inschakelen als een weerstand gaat gedragen. De weak pull-up wordt uitgeschakeld al de pin als uitgang geschakeld wordt of bij de power- on Reset. Het TRISB register is het datadirection register van PORTB. Een 1 in een latch van dit register betekend dat de pin als input geconfigureerd staat en de outputbuffer een hoge impedantie heeft. Een in het TRISB register zorgt voor een configuratie als uitgang. De pinnen RB4-RB7 hebben een iets andere configuratie als die van PORTA. Er is een schakeling om bij een verandering van de pin op de ingang, een interrupt te laten genereren. De verandering kan worden gedetecteerd door de schakeling met de twee latches en de exor. Bij een actieve RD Port zal de bovenste latch gedisabled worden zodat deze zijn oude (vorige) waarde behoud. De uitgang van de beide latches worden vergeleken in de EXOR schakeling, en als dit ongelijk zijn zal het RBIF bitje (bit van het INTCON register) geset worden. Deze interrupt kan het device uit de SLEEP mode halen. De interrupt kan gereset worden door: - Schrijf of leesactie naar PORTB - Clear van de de RBIF flag De I/O van de PIC16F84 blz. 3

27 Voorbeeld initialisatie PORTB CLRF PORTB ; Initialize PORTB by ; setting output ; data latches BSF STATUS, RP ; Select Bank 1 MOVLW xcf ; Value used to ; initialize data ; direction MOVWF TRISB ; Set RB<3:> as inputs ; RB<5:4> as outputs ; RB<7:6> as inputs De I/O van de PIC16F84 blz. 4

28 Basisschema De diode zorgt dat de lading van C weg kan vloeien als de spanning (VDD) wegvalt Ontkoppelen van de voeding RC kring zorgt ervoor dat bij het opzetten van de spanning (VDD) de /MCLR-pin enkele ms. laag blijft ; ;Beschrijving van de hardware processor 16f84 ;Processor type... org 27 ;fuse settings: de b'111' ;CP=off, PWRTE=enable; WDT=disable ;bit1,: 11 =RC-Oscillator ; 1 =XT-Oscillator ;

29 Looplicht met RC oscillator +5V 1k 1k 17 16c84 RA 14 VDD RB/INT 6 +5V 1nF R2 4k7 D5 1N4148 P1 1k R6 4k RA1 RA2 RA3 RA4/TOCKI /MCLR RB1 RB2 RB3 RB4 RB RC Clock OSC1/CLKIN RB6 OSC2/CLKOUTRB Reset C7 1nF C6 1nF VSS 5 ; ;Beschrijving van de hardware processor 16f84 ;Processor type... org 27 ;fuse settings: de b'1111' ;CP=off, PWRTE=enable; WDT=disable ;bit1,: 11 =RC-Oscillator ; 1 =XT-Oscillator ;

30 d:\school\microc~1\sources\proj1.asm Page 1 Printed 9:48 6 Sep 4 1 ;Proj1.ASM 2 ;Blinking LEDs 3 ;Green and red LEDs of port RB blinking 4 ;author: www 5 ;processor: PIC 16F84 6 ;assembler: MPASM.EXE by MicrochiP 7 ;modules used: pp-bus, pp-ctr, pp-mon 8 ; processor 16f84 ;Processor type org 27 ;fuse settings: 12 de b'1111' ;CP=off, PWRTE=enable; WDT=disable 13 ;bit1,: 11 =RC-Oscillator 14 ; 1 =XT-Oscillator 15 ; w equ ;Working register address 17 f equ 1 ;File register address 18 portb equ 6 ;RB port 19 trisb equ 86 ;TRISB Register 2 status equ 3 ;Status Register 21 RP equ 5 ;Status Reg. Bit 5 22 ; org ;Reset Vector 24 goto _main ;Program start address ;**************************** Main program ********************************* _main clrf portb ;portb = 29 bsf status,rp ;select Bank 1 3 clrf trisb ;trisb = (output) 31 bcf status,rp ;select Bank movlw b'1111' ;load constant in W-Reg. 34 movwf portb ;copy to portb (LEDs) 35 m1 swapf portb,f ;swap portb nibbles 36 goto m1 ;endless loop end ;end program 39 4 ;********************************** END ************************************

31 d:\school\microc~1\sources\proj11.asm Page 1 Printed 9:51 6 Sep 4 1 ;Proj11.ASM 2 ;Running light on port RB, left direction 3 ;author: www 4 ;processor: PIC 16F84 5 ;assembler: MPASM.EXE by MicrochiP 6 ;modules used: pp-bus, pp-ctr, pp-mon 7 ; processor 16f84 ;processor type org 27 ;fuse settings: 11 de b'1111' ;CP=off, PWRTE=enable; WDT=disable. 12 ;bit1,: 11 =RC-Oscillator 13 ; 1 =XT-Oscillator 14 ; w equ ;Working Register address 16 f equ 1 ;File register address 17 portb equ 6 ;RB port 18 trisb equ 86 ;TRISB Register 19 status equ 3 ;Status Register 2 RP equ 5 ;Status Reg. Bit 5 21 ; org ;Reset vector 23 goto _main ;Program start address ;**************************** Main program ******************************** _main clrf portb ;portb = 28 bsf status,rp ;select Bank 1 29 clrf trisb ;trisb = (output) 3 bcf status,rp ;select Bank movlw b'1' ;load constant in W-Reg 34 m1 movwf portb ;copy to portb (LED) 35 rlf portb,w ;left shift 36 goto m1 ;jump to m1 (endless loop) end ;end program 39 4 ;********************************** END ************************************ 41 42

32 In-Circuit Serial Programming met de PIC 16x84. Principe Programmeerbare componenten zijn er hoe langer hoe meer voor bedoeld om "in-circiut geprogrammeerd te worden. Het proces noemt men ook wel code downloading, dat houdt in dat de desbetreffende chip simpelweg is verbonden met een bus die bestaat uit vier of vijf draden. In dit opzicht zijn de "isp"-chips van Lattice welbekende voorbeelden, en er verschijnen telkens nog meer van zulke IC's. Verschillende leden van de PIC-familie kunnen geprogrammeerd of hergeprogrammeerd worden terwijl ze op de toepassingsprint blijven zitten en de voeding er niet eens af hoeft. Deze IC's worden omgeschakeld naar de programmeermode door de reset-pen (/MCLKR, pen4) hoog te maken, gewoonlijk met een spaning tussen 12V en 14V. Vanaf dat moment werkt RB6 (pen12) als CLOCK-ingang terwijl RB7(pen13) veranderd is in een DATAinput/output-aansluiting. De voedingspootjes van de PIC, Vdd (pen14) en Vss (pen5) behouden hun normale functie, dus zij voeren de normale PICvoedingsspanning toe met een nominale waarde van 5V, alle andere aansluitingen zijn uitgeschakeld. Zie TB16 van Microchip In deze toestand kan men de PIC programmeren, uitlezen en zelfs wissen, door alleen maar in een serieel formaat te communiceren via de DATA-lijn. Dit doet in feite sterk denken aan de manier waarop seriële EEPROM's werken. Het schema De PIC wordt aangesloten op een seriële poort van de PC waarbij de voeding "geleend" kan worden uit de RS232-interface. Het schema voldoet niet aan de strenge Microchip- sepc's. Voor de programmeerspanning wordt gebruik gemaakt van TxD-lijn van de COM-poort van de PC. Deze benadering elimineert de behoefte aan een externe voeding of zelfs een batterij. Ofschoon een van de TxD-lijn afgeleide voeding met gebruikmaking van een 78L5 spanningsstabilisator geen probleem heeft met het maken van een "schone" 5V, vereist de 12V die nodig is voor de /MCLR-pen het gebruik van een echte RS323-poort, waarvan de spanning wisselt tussen minstens plus en minus 12V. De zenerdiodes D2 & D3 zorgen ervoor dat de spanning op de pennen 12 & 13 beperkt blijven tot 5V. Gratis programmeer-software. NTPicprog: ICPROG.EXE: In-Circuit Serial Programming met de PIC 16x84

33 In-Circuit Serial programming D1 1N4148 R2 1K R1 1K R3 1K D4 12V D2 5V6 D3 5V6 RTS TxD CTS DTR GND C2 1n C1 22µ16V CLK DATA RA RA1 RA2 RA3 RA4/TOCKI OSC1/CLKIN OSC2/CLKOUT VSS VDD RB/INT RB1 RB2 RB3 RB4 RB5 RB6 RB7 16c84 /MCLR L

34 Teller met de PIC 16F84 +5V CLK 17 16c84 RA 14 VDD RB/INT 6 +5V dp +5V 4k7 1N RA1 RA2 RA3 RB1 RB2 RB c d e a 1nF Reset MHz nF 33pF 33pF RA4/TOCKI /MCLR OSC1/CLKIN OSC2/CLKOUTRB7 VSS 5 RB4 RB5 RB g f a b g dot b a an f g HDN1131 common anode display dp c an d e ; ;Beschrijving van de hardware processor 16f84 ;Processor type... org 27 ;fuse settings: de b'111' ;CP=off, PWRTE=enable; WDT=disable ;bit1,: 11 =RC-Oscillator ; 1 =XT-Oscillator ;

35 d:\school\microc~1\7-segt\7-segtel.asm Page 1 Printed 7:54 6 Sep 4 1 list p=16f84 2 #include <P16f84.INC> 3 ;******************************************************************* 4 ;decimale teller op 7-segment display 5 ;RA input clk 6 ;******************************************************************* 7 ;Special features of the CPU page 35 8 org 27 ;fuse settings 9 de b'11' ;CP=off PWRTE=disable; WDT=disable 1 ;bit1,: 11=RC-oscillator 11 ; 1=XT-oscillator 12 ;******************************************************************* 13 count equ 8 ;counter 14 RA equ ;bit of PORTA 15 ;******************************************************************* 16 ;PORTA input PORTB output 17 ;******************************************************************* 18 org 19 start bsf STATUS,RP ;bank1 2 movlw 1fh ;PORTA input 21 movwf TRISA 22 clrf TRISB ;PortB output 23 bcf STATUS,RP ;bank 24 ;******************************************************************* 25 ;main 26 ;******************************************************************* 27 main clrf count 28 loop btfss PORTA,RA ;test RA 29 goto InCount 3 goto loop 31 ; 32 InCount incf count,f ;increment count 33 movlw xa ;count=ah? 34 xorwf count,w 35 btfsc STATUS,Z 36 goto plus6 37 ; 38 out movf count,w 39 call optbl 4 movwf PORTB 41 Debounce 42 btfss PORTA,RA 43 goto Debounce 44 goto loop 45 ; 46 plus6 movlw x6 47 addwf count,f 48 bcf count,4 49 goto out 5 ; 51 optbl addwf PCL,F ;berekende jump voor table look-up 52 retlw b'1' ;hex 53 retlw b'11111' ;hex1 54 retlw b'11' ;hex2 55 retlw b'11' ;hex3 56 retlw b'111' ;hex4 57 retlw b'11' ;hex5 58 retlw b'1' ;hex6 59 retlw b'1111' ;hex7 6 retlw b'' ;hex8 61 retlw b'1' ;hex9 62 end

36 Eenvoudig ontwerp met de PIC16F84 +5V D1 1N47 +UB IC1 +5V VDC 785 C4 47µ 16V C1 1nF +5V C5 47µ 25V C1 1n C2 1n C3 47µ 25V R1 1k5 D5 S6 DB9 Com-poort PC RTS TxD CTS DTR R3 1K GND CLK R4 1K DATA R5 1K D4 12V R2 4k7 S1 S2 Reset D5 1N4148 C6 1nF P1 1k R6 4k7 S3 C6 1nF RC CLOCK input MHz C8 33pF C9 33pF c84 IC2 VDD RA RB/INT RA1 RA2 RA3 RA4/TOCKI /MCLR 14 OSC1/CLKIN OSC2/CLKOUT VSS 5 RB1 RB2 RB3 RB4 RB5 RB6 RB S4 13 S5 DATA CLK D2 5,6V D3 5,6V R7 1K5 R8 1K5 R9 1K5 R1 1K5 R11 1K5 R12 1K5 R13 1K5 R14 1K5 D6 D7 D8 D9 D1 D11 D12 D13 b a an f g HDN1131 common anode display dp c an d e Output

37 De Timer TMR van de PIC 16F84 In microprocessorsystemen komen over het algemeen één of meerdere timers voor. Ze kunnen voor een tijdbasis vormen van dingen die met een bepaalde regelmaat moeten gebeuren. Voorbeelden hiervan zijn het scannen van een toetsenbord, de timing van seriële verbinding, of het updaten van een klok. De PIC16F84 heeft ook een interne timer. De mogelijkheden van deze timer zijn redelijk uitgebreid en een bestudering van de mogelijkheden is dan ook op zijn plaats. De mogelijkheden zijn: 8 bit Timer/counter Schrijfbaar, en ook leesbaar Een 8 bit software programmeerbare prescaler ( voor deler) Bestuurbaar door een interne of externe klok Interrupt generatie bij een overflow van FFh naar h Reagerend op een opgaande of neergaande flank van de externe klok Het volgende blokschema laat een overzicht zien: De timer mode. De timer mode wordt geselecteerd door in het OPTION_REG bitje 5 op te zetten. Dan wordt het timer register (TMR) elke instructiecycle 1 opgehoogd. (zonder de prescaler) Als er naar het timerregister geschreven wordt, dan zal het ophogen twee cycles vertraagd worden. De countermode. Deze mode wordt geselecteerd door in het OPTION_REG bit5 op 1 te zetten. In deze mode zal het TMR register opgehoogd worden bij een opgaande of neergaande flank van de RA4/TCKI pin. De exor schakeling met TSE source select bit ( uit het OPTION_REG, bit 4) bepaald of het de opgaande flank of de neergaande flank is. Je kunt deze exor als programmeerbare inverter (wel of niet inverteren) zien. De prescaler. De prescaler kan gebruikt worden voor zowel de timer als de watchdog timer. Deze keuze kan in software gedaan worden door het PSA (OPTION_REG bitje 3). Bij een wordt de prescaler voor de timer geselecteerd. In het OPTION_REG bit,1,2 wordt de deelfactor van de prescaler bepaald (1:2 1:4 1:8 1:16 1:32 1:64 1:128 1:256) De Timer TMR van de PIC 16F84 blz. 1

38 De TMR Interrupt De TMR interrupt wordt gegenereerd wanneer de timer een overflow heeft van FFh naar h. Deze overflow zet het TIF bit (INTCON bitje 2). Bit 5 van dit register is het enable/disable register. TIF moet weer op gezet worden voordat er weer een enable op de timerinterrupt gedaan kan worden. De timer interrupt kan de processor niet uit de sleep mode halen. Timing. De volgende figuren laten de timing zien in de verschillende modes. De Timer TMR van de PIC 16F84 blz. 2

39 TIMER MODULE EN TMR REGISTER Fosc 8 bit register Fosc f = 256 Fosc 4 TMR 8 bit register f = Fosc Fosc 4 TMR 8 bit register Fosc f = Preset van8h..ff 128 = 8H De frequentie is verdubbeld X2 = 256/128 Fosc 4 Programmable Prescaler 256 f = f = x Fosc Fosc TMR 8 bit register f = Fosc prescalefactor De periode T in sec. is 1/f Fosc Prescaler f T HZ 5,56E-4 sec HZ 1,11E HZ 2,22E HZ 4,44E keren tellen dat de TMR is afgelopen ,5 HZ 8,89E ,25 HZ 1,78E-2 = ,125 HZ 3,56E ,625 HZ 7,11E ,3125 HZ 1,42E-1 Samenvatting van Timer

40 d:\school\microc~1\timer\t.asm Page 1 Printed 9:39 6 Sep 4 1 list p=16f84 2 #include <P16f84.INC> 3 ;******************************************************************* 4 ;Testprogramma van TIMER 5 ;Clk from Fosc/4 6 ;Time over then inc PORTB 7 ;******************************************************************* 8 ;Special features of the CPU page 35 9 org 27 ;fuse settings 1 de b'11' ;CP=off PWRTE=disable; WDT=disable 11 ;bit1,: 11=RC-oscillator 12 ; 1=XT-oscillator 13 ;******************************************************************* 14 ;Labels 15 ;******************************************************************* 16 ;Init Timer 17 ;******************************************************************* 18 org 19 start bsf STATUS,RP ;bank1 2 movlw b' ' ;TCS op clk from Fosc/4 21 movwf OPTION_REG 22 clrw ;PORTB output 23 movwf TRISB ; 24 bcf STATUS,RP ;bank 25 ;******************************************************************* 26 ;main 27 ;******************************************************************* 28 clrf PORTB ;reset PORTB 29 main btfss INTCON,TIF 3 goto main 31 bcf INTCON,TIF 32 incf PORTB,F 33 goto main 34 end

41 d:\school\microc~1\1sec\1sec.asm Page 1 Printed 9:42 6 Sep 4 1 list p=16f84 2 #include <P16f84.INC> 3 ;******************************************************************* 4 ;Elke seconde PORB inc. zonder interrupt 5 ;Clk from Fosc/4 6 ;Time over then inc PORTB 7 ;f=18432hz 8 ;******************************************************************* 9 ;Special features of the CPU page 35 1 org 27 ;fuse settings 11 de b'11' ;CP=off PWRTE=disable; WDT=disable 12 ;bit1,: 11=RC-oscillator 13 ; 1=XT-oscillator 14 ;******************************************************************* 15 ;Labels 16 Count1 equ ch ;18432/4*256*8*225=1sec 17 Time1 equ D'225' ;prescaler op 8 18 ;******************************************************************* 19 ;Init Timer 2 ;******************************************************************* 21 org 22 start bsf STATUS,RP ;bank1 23 movlw b'1111' ;TCS op clk from Fosc/4 24 movwf OPTION_REG 25 clrw ;PORTB output 26 movwf TRISB ; 27 bcf STATUS,RP ;bank 28 ;******************************************************************* 29 ;main 3 ;******************************************************************* 31 clrf PORTB ;reset PORTB 32 ; 33 main movlw Time1 34 movwf Count1 35 ; 36 back btfss INTCON,TIF 37 goto back 38 bcf INTCON,TIF 39 decfsz Count1 4 goto back 41 incf PORTB,F 42 goto main 43 end

42 Seriële communicatie met de PIC16x84 +5V Reset 1nF N k MHz nF 33pF 33pF 16c84 RA RA1 RA2 RA3 RA4/TOCKI /MCLR 14 OSC1/CLKIN VDD RB/INT VSS RB1 RB2 RB3 RB4 RB5 RB OSC2/CLKOUTRB7 5 C1 1µF C2 1µF TxD TTL RxD TTL V- C VCC 1 C1+ V+ 3 C1- C2- GND C3 1µF C4 1µF TxD RS232 2DB9 RxD RS232 3DB9 5DB9 ; ;Beschrijving van de hardware processor 16f84 ;Processor type... org 27 ;fuse settings: de b'111' ;CP=off, PWRTE=enable; WDT=disable ;bit1,: 11 =RC-Oscillator ; 1 =XT-Oscillator ;

43 e:\elektr~1.nu\microc~1\2elmct~1\picdat~1\opgave\xample\serie.asm Page 1 Printed 1:58 6 Sep 4 1 list p=16f84 2 #include <P16f84.INC> 3 ;********************************************************************** 4 ;ascii-code wordt serieel verzonden via RB 5 ;48 bps, no parity, 8 databits, twee stopbits 6 ;de ascii-code zit in register ascii 7 ;register teller is het aantal bits 8 ;TMR wordt gebruikt als timer voor de wachtlus wait 9 ;1/48 bps = 28,3 microsec. wachten 1 ;eerst een startbit = 11 ;dan 8 databits 12 ;dan 3 stopbits ;Fosc = 1,8432 MHz 14 ;ICL 232 wordt gebruikt voor het omzetten van TTL naar RS ;********************************************************************** 16 teller equ ch 17 ascii equ dh 18 ; 19 org h ;Reset Vector 2 goto Start 21 ; 22 org 5h ;Beginning of program EPROM 23 Start bsf STATUS,RP ;bank 24 bcf TRISB, ;RB output 25 bcf OPTION_REG,TCS ;TMR via interne klok Fosc/4, zonder presca 26 bcf STATUS,RP ;bank 1 27 ; 28 begin 29 movlw "A" ;karakter A als ascii-kode 3 movwf ascii ;ascii-kode steken in ascii 31 ; 32 movlw H'8' ;8 bits overzenden 33 movwf teller 34 ; 35 bcf PORTB, ;startbit 36 call wait 37 nop 38 nop 39 nop 4 ; 41 zendt 42 movf ascii,w ;zenden van het karakter 43 movwf PORTB 44 call wait 45 rrf ascii,f 46 decfsz teller,f ;het zijn 8 bits 47 goto zendt 48 ; 49 bsf PORTB, ;3 stopbits 5 call wait 51 bsf PORTB, 52 call wait 53 bsf PORTB, 54 call wait 55 ; 56 goto begin 57 ; 58 wait 59 movlw xb ;28 microsec. wachten 6 movwf TMR 61 test btfss INTCON,TIF 62 goto test 63 bcf INTCON,TIF 64 return 65 ; 66 end

44 Interrupts Het onderwerp interrupts wordt hier behandeld in samenhang met de hardware van de PIC16F84. De chip kent verschillende interne en externe bronnen, die functioneel in staat zijn om de processor uit zijn "normale" werk te halen ("het onderbreken") om dan een specifiek stukje machinecode te laten afwerken Structuur van een interrupt Programma Interrupt ISR Goto Programma RTI Bovenstaande figuur geeft het principe van het interrupt mechanisme weer. De verticale lijn links stelt de reeks instructies voor, die de processor afwerkt in het kader van een programma. Er zijn twee stukken te herkennen, die zich normaal gesproken in verschillende delen van de adresruimte zullen bevinden. Het ene is aangegeven met "Programma" en stelt de één of andere applicatie voor, die actief is. Het andere stuk staat daar ook in zoverre los van, dat het niet vanuit Programma wordt aangeroepen. De bedrijfssituatie is zó, dat de processor hardwarematig een signaal binnen krijgt en dan overgaat tot een proces, dat leidt tot onderbreking van Programma. Er volgt een sprong naar een specifiek stukje programma "Interrupt Service Routine" (ISR), nadat de inhoud van de programcounter op het moment van de onderbreking in RAM is opgeborgen. Dit gebeurt op aanwijzing van een stackpointer (een adres in een daartoe bestemd processor-register). Het proces vertoont grote gelijkenis met een subroutinesprong. Er zijn echter kleine verschillen, die te maken hebben met voorrangs-regelingen. De ISR is ingericht voor een passend antwoord aan de veroorzaker van de interrupt. In vele gevallen is dit een support chip. De service wordt afgerond met een proces, dat volgt op een RETFIE-instructie en dat leidt tot de voortgang van het onderbroken programma. Net als bij een subroutinesprong wordt daarbij het retouradres van de stack teruggehaald. Interrupt met de PIC16F84 blz.1

45 Interrupt met de PIC16F84 De PIC 16F84 geeft 4 interruptbronnen : Externe interrupt op RB/INT pin TMR overflow interrupt PORTB change interrupts (pin RB7, RB6, RB5 en RB4) Data EEPROM write complete interrupt Het interrupt controlregiser INTCON (xb) legt de verschillende interrupts verzoeken in de zogenaamde flag-bits vast. Het register heeft ook individuele en globale interrupt enable bits. Hiermee kan worden vastgesteld op een bepaalde interrupt wel of niet tot een actie in de processor leidt. De global interrupt enable bit GEI (INTCON7) zorgt ervoor dar er een interrupt wel( 1 ) of niet ( ) toegestaan is. De individuele interrupts kunnen afzonderlijk wel of niet doorgelaten worden. Bovenstaande figuur laat de schakeling hiervoor zien: Als er een interrupt zich aandient, dan wordt eerst de GIE bit gereset om alle andere interrupts tegen te houden. Het terugkeeradres wordt op de stack gezet, zoals bij de aanroep van een subroutine. De Program Counter (PCL) wordt gevuld met 4h. Bij een externe interrupt is de exacte duur van de reactie afhankelijk van het moment waarop de interrupt ontstaat. De tijd waarop je merkt dat er een interrupt is duur 3 tot 4 instructiecyclussen. Het maakt overigens niet uit of het een 1 of 2 cyclusinstructie was waarmee de processor bezig was. In de ISR (Interrupt Service Routine) moet worden uitgezocht door een controle van de bits (interrupt falg bits) in het INTCON welke interrupt er is ontstaan. Dit is Polling. De interrupt flag bit(s) moeten gereset worden voordat er weer interrupts toegelaten worden. Anders ontstaat er een oneindige rij met interrupt request, wat in de praktijk betekent dat de stack vol loopt en er ondoorzichtige dingen kunnen gebeuren. De INT interrupt Een externe interrupt op RB/INT-pin is flankgevoelig. Of dit een opgaande of neergaande flank moet zijn hangt af van bit 6 van het OPTION-REG.. Als de desbetreffende flank is gedetecteerd wordt de INTF-bit van het INTCON-REG. geset. Deze moet op het einde van de ISR terug softwarematig worden gereset! De interrupt kan geënabled worden door INTE van het INTCON-REG. te setten. De processor kan softwarematig in een zogenaamde sleep toestand gezet worden. Met behulp van een verandering op RBO/INT-pin kan de processor wakker worden om de bijbehorende ISR uit te voeren. Interrupt met de PIC16F84 blz.2

46 De TMR interrupt De timer TMR kan een interrupt veroorzaken als hij overloopt van FFh naar H. De TIF (INCON2) wordt dan geset. Deze moet op het einde van de ISR terug softwarematig worden gereset! De enable/disable wordt gedaan door TIE (INCON5) te setten of te resetten. Port RB interrupt. Een DC-verandering van één van de pinnen PORTB<:4> zet de flagbit RBIF (INTCON). RBIE (INTCON3) zorgt voor de enable/disable van de interrupt. Om een DE-verandering op een I/O pin als interrupt te herkennen moet deze ten minste één cyclus lang zijn. Context saving gedurende interrupts. In tegenstelling tot nogal wat andere processoren worden de belangrijkste registers zoals hier het W- register en het STATUS-register niet op stack gezet tijdens de interrupt. Dit zul je met onderstaande software zelf moeten doen. ;******************************************************************* ;Interruptservicesubroutine ;******************************************************************* IRQ movwf W_TEMP ;Copy W to TEMP register swapf STATUS,W ;Swap status to be saved into W movwf STATUS_TEMP ;Save status to STATUS_TEMP register ; polling btfss INTCON,TIF ;Pollingroutine goto RETFIT ;Test from where IRQ is comming bcf INTCON,TIF ISR... ;Interrupt Service Routoine... ;should cinfiger Bank as required... RETFIT swapf STATUS_TEMP,W end movwf STATUS swapf W_TEMP,F swapf W_TEMP,W retfie ;Swap nibbles in Status_TEMP register ;and place result into W ;Move W into STATUS register ;(sets bank to original state) ;Swap nibbles in W_TEMP and place ;result in W_TEMP ;Swap nibbles in W_TEMP and place ;result into W De RETFIE instructie zorgt ervoor dat de IRQ verlaten wordt, de GIE-bit wordt gezet, zodat er weer interrupts toegelaten wordt. Software polling Bij software polling heeft de processor voor een aantal interruptbronnen een gemeenschappelijke interruptaansluiting. Doorgaans is dit een pen, die met een laag niveau actief is. De interruptprocedure is in grote lijnen gelijk aan het hier boven geschreven systeem van de PIC16F84. Er is geen informatie beschikbaar t.a.v. de identiteit van de aanvrager. Er is een gemeenschappelijke ISR, die doorgaans begint met het aftasten van de mogelijke interruptaanvragers, die daartoe moeten beschikken over leesbare flags. Dit proces wordt aangeduid met software-polling. Interrupt met de PIC16F84 blz.3

47 d:\school\microc~1\irq_te~1\irqtemp.asm Page 1 Printed 7:52 6 Sep 4 1 list p=16f84 2 #include <P16f84.INC> 3 ;******************************************************************* 4 ;Template for appl. under IRQ 5 ;******************************************************************* 6 ;Special features of the CPU page 35 7 org 27 ;fuse settings 8 de b'11' ;CP=off PWRTE=disable; WDT=disable 9 ;bit1,: 11=RC-oscillator 1 ; 1=XT-oscillator 11 ;******************************************************************* 12 org h ;zet de vetoren juist 13 goto main ;vector van het hoofdprogramma main 14 ; 15 org 4h ;vector van IRQ 16 goto IRQ 17 ;******************************************************************* 18 ;Labels 19 W_TEMP equ OCh 2 STATUS_TEMP 21 equ Dh 22 ;******************************************************************* 23 Init return 27 ;******************************************************************* 28 ;hoofdprogramma 29 ;******************************************************************* 3 main call Init ;******************************************************************* 35 ;Interruptservicesubroutine 36 ;******************************************************************* 37 IRQ movwf W_TEMP ;Copy W to TEMP register 38 swapf STATUS,W ;Swap status to be saved into W 39 movwf STATUS_TEMP ;Save status to STATUS_TEMP register 4 ; 41 polling btfss INTCON,TIF ;Pollingroutine 42 goto RETFIT ;Test from where IRQ is comming 43 bcf INTCON,TIF 44 ISR... ;Interrupt Service Routoine ;should cinfiger Bank as required RETFIT swapf STATUS_TEMP,W ;Swap nibbles in Status_TEMP register 48 ;and place result into W 49 movwf STATUS ;Move W into STATUS register 5 ;(sets bank to original state) 51 swapf W_TEMP,F ;Swap nibbles in W_TEMP and place 52 ;result in W_TEMP 53 swapf W_TEMP,W ;Swap nibbles in W_TEMP and place 54 ;result into W 55 retfie 56 end

48 d:\school\microc~1\irq1s\irqsec.asm Page 1 Printed 9:44 6 Sep 4 1 list p=16f84 2 #include <P16f84.INC> 3 ;******************************************************************* 4 ;1 sec. under INTERRUPT WITH TIMER T 5 ;******************************************************************* 6 ;Special features of the CPU page 35 7 org 27 ;fuse settings 8 de b'11' ;CP=off PWRTE=disable; WDT=disable 9 ;bit1,: 11=RC-oscillator 1 ; 1=XT-oscillator 11 ;******************************************************************* 12 org h ;zet de vetoren juist 13 goto main ;vector van het hoofdprogramma main 14 ; 15 org 4h ;vector van IRQ 16 goto IRQ 17 ;******************************************************************* 18 ;Labels 19 W_TEMP equ Ch 2 STATUS_TEMP equ Dh 21 Count1 equ Eh 22 Time1 equ D'225' 23 ;******************************************************************* 24 Init bsf STATUS,RP ;bank1 25 movlw b'1111' ;TCS op clk from Fosc/4 26 movwf OPTION_REG 27 clrw ;PORTB output 28 movwf TRISB ; 29 3 movlw b'11' ;IRQ from T 31 movwf INTCON 32 bcf STATUS,RP ;bank 33 movlw Time1 34 movwf Count1 35 return 36 ;******************************************************************* 37 ;hoofdprogramma 38 ;******************************************************************* 39 main call Init 4 Back goto Back 41 ;******************************************************************* 42 ;Interruptservicesubroutine 43 ;******************************************************************* 44 IRQ movwf W_TEMP ;Copy W to TEMP register 45 swapf STATUS,W ;Swap status to be saved into W 46 movwf STATUS_TEMP ;Save status to STATUS_TEMP register 47 ; 48 polling btfss INTCON,TIF ;Pollingroutine 49 goto RETFIT ;Test from where IRQ is comming 5 bcf INTCON,TIF 51 ; 52 ISR decfsz Count1 ;Interrupt Service Routoine 53 goto RETFIT ;should cinfiger Bank as required 54 incf PORTB,F 55 ; 56 movlw Time1 57 movwf Count1 58 ; 59 RETFIT swapf STATUS_TEMP,W ;Swap nibbles in Status_TEMP register 6 ;and place result into W 61 movwf STATUS ;Move W into STATUS register 62 ;(sets bank to original state) 63 swapf W_TEMP,F ;Swap nibbles in W_TEMP and place 64 ;result in W_TEMP 65 swapf W_TEMP,W ;Swap nibbles in W_TEMP and place 66 ;result into W 67 retfie 68 end

49 LCD display met de PIC 16F84 +5V +5V +5V 4k7 1N c84 RA RA1 RA2 14 VDD RB/INT RB1 RB D D1 D2 LCD VDD V VSS K 2 RA3 RB3 9 1 D3 1nF MHz RA4/TOCKI /MCLR OSC1/CLKIN RB4 RB5 RB D4 D5 D6 15 OSC2/CLKOUTRB D7 Reset 1nF 33pF 33pF VSS 5 RS R/W E

50 LCD (4line) display met de PIC 16F84 +5V +5V +5V 4k7 1N c84 RA RA1 RA2 14 VDD RB/INT RB1 RB D D1 D2 LCD 2 VDD 3 V 1 VSS 1K 2 RA3 RB3 9 1 D3 1nF MHz RA4/TOCKI /MCLR OSC1/CLKIN RB4 RB5 RB D4 D5 D6 15 OSC2/CLKOUTRB D7 Reset 1nF 33pF 33pF VSS 5 RS R/W E

51 HD4478U (LCD-II) (Dot Matrix Liquid Crystal Display Controller/Driver) ADE (Z) '99.9 Rev.. Description The HD4478U dot-matrix liquid crystal display controller and driver LSI displays alphanumerics, Japanese kana characters, and symbols. It can be configured to drive a dot-matrix liquid crystal display under the control of a 4- or 8-bit microprocessor. Since all the functions such as display RAM, character generator, and liquid crystal driver, required for driving a dot-matrix liquid crystal display are internally provided on one chip, a minimal system can be interfaced with this controller/driver. A single HD4478U can display up to one 8-character line or two 8-character lines. The HD4478U has pin function compatibility with the HD4478S which allows the user to easily replace an LCD-II with an HD4478U. The HD4478U character generator ROM is extended to generate dot character fonts and dot character fonts for a total of 24 different character fonts. The low power supply (2.7V to 5.5V) of the HD4478U is suitable for any portable battery-driven product requiring low power dissipation. Features 5 8 and 5 1 dot matrix possible Low power operation support: 2.7 to 5.5V Wide range of liquid crystal display driver power 3. to 11V Liquid crystal drive waveform A (One line frequency AC waveform) Correspond to high speed MPU bus interface 2 MHz (when V CC = 5V) 4-bit or 8-bit MPU interface enabled 8 8-bit display RAM (8 characters max.) 9,92-bit character generator ROM for a total of 24 character fonts 28 character fonts (5 8 dot) 32 character fonts (5 1 dot) 1

52 HD4478U Pin Functions Signal No. of Lines I/O Device Interfaced with Function RS 1 I MPU Selects registers. : Instruction register (for write) Busy flag: address counter (for read) 1: Data register (for write and read) R/W 1 I MPU Selects read or write. : Write 1: Read E 1 I MPU Starts data read/write. DB4 to DB7 4 I/O MPU Four high order bidirectional tristate data bus pins. Used for data transfer and receive between the MPU and the HD4478U. DB7 can be used as a busy flag. DB to DB3 4 I/O MPU Four low order bidirectional tristate data bus pins. Used for data transfer and receive between the MPU and the HD4478U. These pins are not used during 4-bit operation. CL1 1 O Extension driver Clock to latch serial data D sent to the extension driver CL2 1 O Extension driver Clock to shift serial data D M 1 O Extension driver Switch signal for converting the liquid crystal drive waveform to AC D 1 O Extension driver Character pattern data corresponding to each segment signal COM1 to COM16 16 O LCD Common signals that are not used are changed to non-selection waveforms. COM9 to COM16 are non-selection waveforms at 1/8 duty factor and COM12 to COM16 are non-selection waveforms at 1/11 duty factor. SEG1 to SEG4 4 O LCD Segment signals V1 to V5 5 Power supply Power supply for LCD drive V CC V5 = 11 V (max) V CC, GND 2 Power supply V CC : 2.7V to 5.5V, GND: V OSC1, OSC2 2 Oscillation resistor clock When crystal oscillation is performed, a resistor must be connected externally. When the pin input is an external clock, it must be input to OSC1. 8

53 HD4478U Function Description Registers The HD4478U has two 8-bit registers, an instruction register (IR) and a data register (DR). The IR stores instruction codes, such as display clear and cursor shift, and address information for display data RAM (DDRAM) and character generator RAM (CGRAM). The IR can only be written from the MPU. The DR temporarily stores data to be written into DDRAM or CGRAM and temporarily stores data to be read from DDRAM or CGRAM. Data written into the DR from the MPU is automatically written into DDRAM or CGRAM by an internal operation. The DR is also used for data storage when reading data from DDRAM or CGRAM. When address information is written into the IR, data is read and then stored into the DR from DDRAM or CGRAM by an internal operation. Data transfer between the MPU is then completed when the MPU reads the DR. After the read, data in DDRAM or CGRAM at the next address is sent to the DR for the next read from the MPU. By the register selector (RS) signal, these two registers can be selected (Table 1). Busy Flag (BF) When the busy flag is 1, the HD4478U is in the internal operation mode, and the next instruction will not be accepted. When RS = and R/W = 1 (Table 1), the busy flag is output to DB7. The next instruction must be written after ensuring that the busy flag is. Address Counter (AC) The address counter (AC) assigns addresses to both DDRAM and CGRAM. When an address of an instruction is written into the IR, the address information is sent from the IR to the AC. Selection of either DDRAM or CGRAM is also determined concurrently by the instruction. After writing into (reading from) DDRAM or CGRAM, the AC is automatically incremented by 1 (decremented by 1). The AC contents are then output to DB to DB6 when RS = and R/W = 1 (Table 1). Table 1 Register Selection RS R/W Operation IR write as an internal operation (display clear, etc.) 1 Read busy flag (DB7) and address counter (DB to DB6) 1 DR write as an internal operation (DR to DDRAM or CGRAM) 1 1 DR read as an internal operation (DDRAM or CGRAM to DR) 9

54 HD4478U 2-line display (N = 1) (Figure 4) Case 1: When the number of display characters is less than 4 2 lines, the two lines are displayed from the head. Note that the first line end address and the second line start address are not consecutive. For example, when just the HD4478 is used, 8 characters 2 lines are displayed. See Figure 5. When display shift operation is performed, the DDRAM address shifts. See Figure 5. Display position DDRAM address (hexadecimal) Figure 4 2-Line Display Display position DDRAM address For shift left For shift right Figure 5 2-Line by 8-Character Display Example 11

55 HD4478U Case 2: For a 16-character 2-line display, the HD4478 can be extended using one 4-output extension driver. See Figure 6. When display shift operation is performed, the DDRAM address shifts. See Figure 6. Display position DDRAM address A BC D E F A 4B4C 4D 4E 4F HD4478U display Extension driver display For shift left A BC D E F A 4B4C 4D 4E 4F 5 For shift right A BC D E A 4B4C 4D 4E Figure 6 2-Line by 16-Character Display Example 12

56 HD4478U Reset Function Initializing by Internal Reset Circuit An internal reset circuit automatically initializes the HD4478U when the power is turned on. The following instructions are executed during the initialization. The busy flag (BF) is kept in the busy state until the initialization ends (BF = 1). The busy state lasts for 1 ms after V CC rises to 4.5 V. 1. Display clear 2. Function set: DL = 1; 8-bit interface data N = ; 1-line display F = ; 5 8 dot character font 3. Display on/off control: D = ; Display off C = ; Cursor off B = ; Blinking off 4. Entry mode set: I/D = 1; Increment by 1 S = ; No shift Note: If the electrical characteristics conditions listed under the table Power Supply Conditions Using Internal Reset Circuit are not met, the internal reset circuit will not operate normally and will fail to initialize the HD4478U. For such a case, initial-ization must be performed by the MPU as explained in the section, Initializing by Instruction. Instructions Outline Only the instruction register (IR) and the data register (DR) of the HD4478U can be controlled by the MPU. Before starting the internal operation of the HD4478U, control information is temporarily stored into these registers to allow interfacing with various MPUs, which operate at different speeds, or various peripheral control devices. The internal operation of the HD4478U is determined by signals sent from the MPU. These signals, which include register selection signal (RS), read/ write signal (R/W), and the data bus (DB to DB7), make up the HD4478U instructions (Table 6). There are four categories of instructions that: Designate HD4478U functions, such as display format, data length, etc. Set internal RAM addresses Perform data transfer with internal RAM Perform miscellaneous functions 23

57 HD4478U Normally, instructions that perform data transfer with internal RAM are used the most. However, autoincrementation by 1 (or auto-decrementation by 1) of internal HD4478U RAM addresses after each data write can lighten the program load of the MPU. Since the display shift instruction (Table 11) can perform concurrently with display data write, the user can minimize system development time with maximum programming efficiency. When an instruction is being executed for internal operation, no instruction other than the busy flag/address read instruction can be executed. Because the busy flag is set to 1 while an instruction is being executed, check it to make sure it is before sending another instruction from the MPU. Note: Be sure the HD4478U is not in the busy state (BF = ) before sending an instruction from the MPU to the HD4478U. If an instruction is sent without checking the busy flag, the time between the first instruction and next instruction will take much longer than the instruction time itself. Refer to Table 6 for the list of each instruc-tion execution time. Table 6 Instructions Code Execution Time (max) (when f cp or Instruction RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB Description f OSC is 27 khz) Clear display Return home Entry mode set Display on/off control Cursor or display shift Function set Set CGRAM address Set DDRAM address Read busy flag & address 1 Clears entire display and sets DDRAM address in address counter. 1 Sets DDRAM address in address counter. Also returns display from being shifted to original position. DDRAM contents remain unchanged. 1 I/D S Sets cursor move direction and specifies display shift. These operations are performed during data write and read. 1 D C B Sets entire display (D) on/off, cursor on/off (C), and blinking of cursor position character (B). 1 S/C R/L Moves cursor and shifts display without changing DDRAM contents. 1 DL N F Sets interface data length (DL), number of display lines (N), and character font (F). 1 ACG ACG ACG ACG ACG ACG Sets CGRAM address. CGRAM data is sent and received after this setting. 1 ADD ADD ADD ADD ADD ADD ADD Sets DDRAM address. DDRAM data is sent and received after this setting. 1 BF AC AC AC AC AC AC AC Reads busy flag (BF) indicating internal operation is being performed and reads address counter contents ms 37 µs 37 µs 37 µs 37 µs 37 µs 37 µs µs 24

58 HD4478U Table 6 Instructions (cont) Code Execution Time (max) (when f cp or Instruction RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB Description f OSC is 27 khz) Write data to CG or DDRAM Read data from CG or DDRAM Note: 1 Write data Writes data into DDRAM or CGRAM. 1 1 Read data Reads data from DDRAM or CGRAM. I/D = 1: Increment I/D = : Decrement S = 1: Accompanies display shift S/C = 1: Display shift S/C = : Cursor move R/L = 1: Shift to the right R/L = : Shift to the left DL = 1: 8 bits, DL = : 4 bits N = 1: 2 lines, N = : 1 line F = 1: 5 1 dots, F = : 5 8 dots BF = 1: Internally operating BF = : Instructions acceptable DDRAM: Display data RAM CGRAM: Character generator RAM ACG: CGRAM address ADD: DDRAM address (corresponds to cursor address) AC: Address counter used for both DD and CGRAM addresses 37 µs t ADD = 4 µs* 37 µs t ADD = 4 µs* Execution time changes when frequency changes Example: When f cp or f OSC is 25 khz, µs = 4 µs 25 indicates no effect. * After execution of the CGRAM/DDRAM data write or read instruction, the RAM address counter is incremented or decremented by 1. The RAM address counter is updated after the busy flag turns off. In Figure 1, t ADD is the time elapsed after the busy flag turns off until the address counter is updated. Busy signal (DB7 pin) Busy state Address counter (DB to DB6 pins) A A + 1 t ADD Note: t ADD depends on the operation frequency t ADD = 1.5/(f cp or f OSC ) seconds Figure 1 Address Counter Update 25

59 HD4478U Instruction Description Clear Display Clear display writes space code 2H (character pattern for character code 2H must be a blank pattern) into all DDRAM addresses. It then sets DDRAM address into the address counter, and returns the display to its original status if it was shifted. In other words, the display disappears and the cursor or blinking goes to the left edge of the display (in the first line if 2 lines are displayed). It also sets I/D to 1 (increment mode) in entry mode. S of entry mode does not change. Return Home Return home sets DDRAM address into the address counter, and returns the display to its original status if it was shifted. The DDRAM contents do not change. The cursor or blinking go to the left edge of the display (in the first line if 2 lines are displayed). Entry Mode Set I/D: Increments (I/D = 1) or decrements (I/D = ) the DDRAM address by 1 when a character code is written into or read from DDRAM. The cursor or blinking moves to the right when incremented by 1 and to the left when decremented by 1. The same applies to writing and reading of CGRAM. S: Shifts the entire display either to the right (I/D = ) or to the left (I/D = 1) when S is 1. The display does not shift if S is. If S is 1, it will seem as if the cursor does not move but the display does. The display does not shift when reading from DDRAM. Also, writing into or reading out from CGRAM does not shift the display. Display On/Off Control D: The display is on when D is 1 and off when D is. When off, the display data remains in DDRAM, but can be displayed instantly by setting D to 1. C: The cursor is displayed when C is 1 and not displayed when C is. Even if the cursor disappears, the function of I/D or other specifications will not change during display data write. The cursor is displayed using 5 dots in the 8th line for 5 8 dot character font selection and in the 11th line for the 5 1 dot character font selection (Figure 13). B: The character indicated by the cursor blinks when B is 1 (Figure 13). The blinking is displayed as switching between all blank dots and displayed characters at a speed of 49.6-ms intervals when f cp or f OSC is 25 khz. The cursor and blinking can be set to display simultaneously. (The blinking frequency changes according to f OSC or the reciprocal of f cp. For example, when f cp is 27 khz, /27 = ms.) 26

60 HD4478U Cursor or Display Shift Cursor or display shift shifts the cursor position or display to the right or left without writing or reading display data (Table 7). This function is used to correct or search the display. In a 2-line display, the cursor moves to the second line when it passes the 4th digit of the first line. Note that the first and second line displays will shift at the same time. When the displayed data is shifted repeatedly each line moves only horizontally. The second line display does not shift into the first line position. The address counter (AC) contents will not change if the only action performed is a display shift. Function Set DL: Sets the interface data length. Data is sent or received in 8-bit lengths (DB7 to DB) when DL is 1, and in 4-bit lengths (DB7 to DB4) when DL is.when 4-bit length is selected, data must be sent or received twice. N: Sets the number of display lines. F: Sets the character font. Note: Perform the function at the head of the program before executing any instructions (except for the read busy flag and address instruction). From this point, the function set instruction cannot be executed unless the interface data length is changed. Set CGRAM Address Set CGRAM address sets the CGRAM address binary AAAAAA into the address counter. Data is then written to or read from the MPU for CGRAM. 27

61 HD4478U Table 11 8-Bit Operation, 8-Digit 1-Line Display Example with Internal Reset Step Instruction No. RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB Display Operation 1 Power supply on (the HD4478U is initialized by the internal reset circuit) 2 Function set 1 1 * * 3 Display on/off control Entry mode set Write data to CGRAM/DDRAM Write data to CGRAM/DDRAM H_ HI_ Initialized. No display. Sets to 8-bit operation and selects 1-line display and 5 8 dot character font. (Number of display lines and character fonts cannot be changed after step #2.) Turns on display and cursor. Entire display is in space mode because of initialization. Sets mode to increment the address by one and to shift the cursor to the right at the time of write to the DD/CGRAM. Display is not shifted. Writes H. DDRAM has already been selected by initialization when the power was turned on. The cursor is incremented by one and shifted to the right. Writes I. 7 8 Write data to CGRAM/DDRAM Entry mode set Write data to CGRAM/DDRAM 1 1 HITACHI_ HITACHI_ ITACHI _ Writes I. Sets mode to shift display at the time of write. Writes a space. 4

62 HD4478U Initializing by Instruction If the power supply conditions for correctly operating the internal reset circuit are not met, initialization by instructions becomes necessary. Refer to Figures 23 and 24 for the procedures on 8-bit and 4-bit initializations, respectively. Power on Wait for more than 15 ms after V CC rises to 4.5 V Wait for more than 4 ms after V CC rises to 2.7 V RS R/W DB7 DB6 DB5 1 DB4 DB3DB2 DB1 DB 1 * * * * BF cannot be checked before this instruction. Function set (Interface is 8 bits long.) Wait for more than 4.1 ms RS R/W DB7 DB6 DB5 1 DB4 DB3 DB2 DB1 DB 1 * * * * BF cannot be checked before this instruction. Function set (Interface is 8 bits long.) Wait for more than 1 µs RS R/W DB7 DB6 DB5 1 DB4 1 DB3 DB2 DB1DB * * * * BF cannot be checked before this instruction. Function set (Interface is 8 bits long.) RS R/W DB7 DB6 DB5 1 DB4 1 DB3 N 1 DB2 DB1 DB F * * 1 I/D 1 S BF can be checked after the following instructions. When BF is not checked, the waiting time between instructions is longer than the execution instuction time. (See Table 6.) Function set (Interface is 8 bits long. Specify the number of display lines and character font.) The number of display lines and character font cannot be changed after this point. Display off Display clear Entry mode set Initialization ends Figure 23 8-Bit Interface 45

63 HD4478U Power on Wait for more than 15 ms after V CC rises to 4.5 V Wait for more than 4 ms after V CC rises to 2.7 V RS R/W DB7 DB6 DB5 DB4 1 1 BF cannot be checked before this instruction. Function set (Interface is 8 bits long.) Wait for more than 4.1 ms RS R/W DB7 DB6 DB5 DB4 1 1 BF cannot be checked before this instruction. Function set (Interface is 8 bits long.) Wait for more than 1 µs RS R/W DB7 DB6 DB5 DB4 1 1 BF cannot be checked before this instruction. Function set (Interface is 8 bits long.) RS R/W DB7 N 1 DB6 F 1 DB5 DB4 1 1 * * 1 I/D S BF can be checked after the following instructions. When BF is not checked, the waiting time between instructions is longer than the execution instuction time. (See Table 6.) Function set (Set interface to be 4 bits long.) Interface is 8 bits in length. Function set (Interface is 4 bits long. Specify the number of display lines and character font.) The number of display lines and character font cannot be changed after this point. Display off Display clear Initialization ends Entry mode set Figure 24 4-Bit Interface 46

64 d:\school\microc~1\sources\proj5.asm Page 1 Printed 9:53 6 Sep 4 1 ;Proj5.asm 2 ;Text on LCD, 1 line 3 ;press Switch1 to start 4 ;author: www 5 ;processor: PIC 16F84 6 ;assembler: MPASM.EXE by MicrochiP 7 ;modules used: pp-bus, pp-ctr, pp-key, pp-lcd 8 ; processor 16f84 ;Processor type org 27 ;fuse settings: 12 de b'111' ;CP=off, PWRTE=enable; WDT=disable. 13 ;bit1,: 11 =RC-Oscillator 14 ; 1 =XT-Oscillator 15 ; w equ ;Working-Register address 17 f equ 1 ;File-Register address 18 Z equ 2 ;Zero-Bit 19 porta equ 5 ;RB port 2 portb equ 6 ;RB port 21 trisa equ 85 ;TRISA Register 22 trisb equ 86 ;TRISB Register 23 status equ 3 ;Status Register 24 RP equ 5 ;Status Reg. Bit 5 25 pcl equ 2 ;Program Counter Low 26 _switch1 equ ;Switch1, input RA 27 _LCD_E equ 2 ;LCD enable, RA2 28 _LCD_RS equ 3 ;LCD register select, RA3 29 _time_1 equ c ;Register for time loop.1ms 3 _time4ms equ d ;Register for time loop 4ms 31 _counter equ e ;character counter 32 ; org ;Reset vector 34 goto _main ;Start address 35 ; Initialise Ports _portinit clrf porta ;porta = 38 clrf portb ;portb = 39 bsf status,rp ;select Bank 1 4 movlw b'1' ;b'1' in W 41 movwf trisa ;copy W to trisa 42 ;RA is input (Switch1) 43 clrf trisb ;trisb = (output) 44 bcf status,rp ;select Bank 45 return ; ; Initialise LCD _lcdinit bcf porta,_lcd_rs ;reset RS-bit 51 movlw b'11' ;LCD initialise 52 call _w2lcd ;write command to LCD 53 call _4ms ;wait 4ms 54 movlw b'11' ;LCD Initialise 55 call _w2lcd ;write command to LCD 56 movlw b'11' ;LCD Initialise 57 call _w2lcd ;write command to LCD 58 movlw b'11' ;Function Set 59 ;db4=1 > 8 bit data 6 ;db3= > Display 1 line 61 ;db2= > 5*8dots 62 call _w2lcd ;write command to LCD 63 movlw b'1111' ;Display Control 64 ;db2=1 > display on 65 ;db1=1 > cursor on 66 ;db=1 > cursor doesn't blink 67 call _w2lcd ;write command to LCD 68 movlw b'1' ;clear display 69 call _w2lcd ;write command to LCD 7 return ; ; writes byte in W to LCD

65 d:\school\microc~1\sources\proj5.asm Page 2 Printed 9:53 6 Sep 4 74 _w2lcd movwf portb ;copy W to portb 75 bsf porta,_lcd_e ;set enable bit 76 bcf porta,_lcd_e ;reset enable bit 77 clrf portb ;portb = ; time loop approx. 1 mys (delay for LCD) 8 81 _1mys movlw d'25' ;d'25' in W 82 movwf _time_1 ;copy W to _time_1 83 m1 decf _time_1,f ;decrement _time_1 84 btfss status,z ;if Zero Bit in Status Register = 1 85 ;skip next instruction 86 goto m1 ; 87 return ; ; time loop approx. 4 ms _4ms movlw d'4' ;d'4' in W, 4 x 1mys = 4ms 92 movwf _time4ms ;copy W to _time4ms 93 m2 call _1mys ;wait 1mys 94 decf _time4ms,f ;decrement _time4ms 95 btfss status,z ;if Zero Bit in Status Register = 1 96 ;skip next instruction 97 goto m2 ; 98 return ; 99 1 ; text to W register _text addwf pcl,f ;Add W to Prog.Counter Low 13 retlw "H" ;result in f 14 retlw "e" ;after the 5th jump all text is read 15 retlw "l" ; 16 retlw "l" ; 17 retlw "o" ; ;**************************** main ********************************* _main call _portinit ;initialise ports 112 call _lcdinit ;initialise display 113 m3 btfss porta,_switch1 ;if Switch1 on porta = ;skip next instruction 115 goto m1 ;wait for key press 116 bsf porta,_lcd_rs ;switch to LCD data mode 117 movlw d'5' ;d'5' in W, number of characters 118 movwf _counter ;W to _counter 119 m4 movf _counter,w ;_counter to W 12 sublw d'5' ;subtract d'5' from W 121 call _text ;get character 122 movwf portb ;copy W byte to portb 123 call _w2lcd ;and write to LCD 124 decfsz _counter ;decrement _counter 125 ;if _counter =, skip next instruction 126 goto m4 ;get next character 127 m5 bcf porta,_lcd_rs ;clear LCD register select 128 goto m5 ;endless loop end ; 131 ;********************************** END ************************************ 132

66 d:\school\microc~1\sources\proj51.asm Page 1 Printed 9:54 6 Sep 4 1 ;Proj51.asm 2 ;Text display on LC-Display, 2-lines 3 ;press switch2 to Start, switch1 to Reset 4 ;author: www 5 ;processor: PIC 16F84 6 ;assembler: MPASM.EXE by MicrochiP 7 ;modules used: pp-bus, pp-ctr, pp-key, pp-lcd 8 ; processor 16f84 ;Processor type org 27 ;fuse settings: 12 de b'111' ;CP=off, PWRTE=enable; WDT=disable. 13 ;bit1,: 11 =RC-Oscillator 14 ; 1 =XT-Oscillator 15 ; w equ ;Working-Register address 17 f equ 1 ;File-Register address 18 Z equ 2 ;Zero-Bit 19 porta equ 5 ;RB port 2 portb equ 6 ;RB port 21 trisa equ 85 ;TRISA Register 22 trisb equ 86 ;TRISB Register 23 status equ 3 ;Status Register 24 RP equ 5 ;Status Reg. Bit 5 25 pcl equ 2 ;Program Counter Low 26 _switch1 equ ;switch1, input RA 27 _switch2 equ 1 ;switch2, input RA1 28 _LCD_E equ 2 ;LCD-Enable, RA2 29 _LCD_RS equ 3 ;LCD register select, RA3 3 _time_1 equ c ;Register for time loop,1ms 31 _time4ms equ d ;Register for time loop 4ms 32 _nrchrs equ e ;character counter 33 ; org ;Reset vector 35 goto _main ;Program Start address ; Initialise ports _portinit clrf porta ;porta = 4 clrf portb ;portb = 41 bsf status,rp ;select Bank 1 42 movlw b'11' ;write b'1' to W-Register 43 movwf trisa ;RA/1 are inputs 44 clrf trisb ;trisb = (output) 45 bcf status,rp ;select Bank 46 return ;end subroutine ; Initialise LC-Display _lcdinit bcf porta,_lcd_rs ;RS-Bit low 51 movlw b'11' ;LCD Initialise 52 call _w2lcd ; 53 call _4ms ;wait _4ms 54 movlw b'11' ;LCD Initialise 55 call _w2lcd ; 56 movlw b'11' ;LCD Initialise 57 call _w2lcd ;jump to UP _w2lcd 58 movlw b'111' ;Function Set 59 ;db4=1 > 8 bit data 6 ;db3=1 > Display 2 lines 61 ;db2= > 5*8dots 62 call _w2lcd ; 63 movlw b'111' ;Display Control 64 ;db2=1 > display on 65 ;db1=1 > cursor on 66 ;db= > cursor doesn't blink 67 call _w2lcd ; 68 movlw b'1' ;clear display 69 call _w2lcd ; 7 return ;end subroutine ; write content of w to lcd

67 d:\school\microc~1\sources\proj51.asm Page 2 Printed 9:54 6 Sep 4 74 _w2lcd movwf portb ;copy W-Reg. to portb 75 bsf porta,_lcd_e ;toggle enable 76 bcf porta,_lcd_e ;toggle enable 77 clrf portb ;portb = ; Time loop, approx. 1 mys (delay for LCD) 8 81 _1mys movlw d'25' ;d'25' in W-Register 82 movwf _time_1 ;copy W to register _time_1 83 m1 decf _time_1,f ;decrement Reg. _time_1 84 btfss status,z ;if Zero Bit in Status Register = 1 85 ;skip next instruction 86 goto m1 ;jump to m1 87 return ;end subroutine ; Time loop approx. 4 ms (delay for LCD) _4ms movlw d'4' ;d'4' in W-Register 92 movwf _time4ms ;copy W to _time4ms 93 m2 call _1mys ; delay 1mys 94 decf _time4ms,f ;decrement _time4ms 95 btfss status,z ;if Zero Bit in Status Register = 1 96 ;skip next instruction 97 goto m2 ;jump to m2 98 return ;end subroutine 99 1 ; move LCD-Cursor to first line, leftmost position _lcdline1 movlw b'1' ;b'1' in W-Register 13 movwf portb ;copy W-Reg. to portb 14 call _w2lcd ;jump to _w2lcd 15 return ;end subroutine ; move LCD-Cursor to second line, leftmost position _lcdline2 movlw b'11' ;b'11' in W-Register 19 movwf portb ;copy W to portb 11 call _w2lcd ;write to LCD 111 return ;end subroutine ; output text to LCD _txt2lcd bsf porta,_lcd_rs ;switch to LCD Data Mode 117 m3 movf _nrchrs,w ;copy _nrchrs to W-Register 118 call _text ;write last character 119 iorlw ; 12 btfsc status,z ;if Zero Bit in Status Register = 121 ;skip next instruction 122 goto m4 ;jump to m4 123 call _w2lcd ;jump to _w2lcd 124 incf _nrchrs,f ;increment _nrchrs 125 goto m3 ;jump to m3 126 m4 bcf porta,_lcd_rs ;reset RS-Bit 127 return ;end subroutine ; reads next character into W-Register _text addwf pcl,f ;Add Prog.Counter Low to W-Reg. den 132 ;result in f 133 dt "Hello ", ;Text1 (define table) 134 dt "World...", ;Text2 (Assembler directive) ;**************************** Main program ********************************* _main call _portinit ;initialise ports 139 call _lcdinit ;lcd init 14 m5 btfss porta,_switch2 ;if switch2 porta = ;skip next instruction 142 goto m5 ;jump to m5 143 clrf _nrchrs ;clear File_Register _counter 144 ;(=start Text1) 145 call _txt2lcd ;send text to LCD 146 m6 btfsc porta,_switch2 ;if switch2 porta =

68 d:\school\microc~1\sources\proj51.asm Page 3 Printed 9:54 6 Sep ;skip next instruction 148 goto m6 ;jump to m6 149 call _lcdline2 ;get second line 15 movlw d'17' ;d'17' in W-Register 151 movwf _nrchrs ;W to Register _nrchrs (=start Text2) 152 call _txt2lcd ;write second line 153 m7 btfss porta,_switch1 ;if switch1 porta = ;skip next instruction 155 goto m7 ;jump to m7 156 movlw b'1' ;clear display 157 call _w2lcd ; 158 goto m5 ;_ end ;end program 161 ;********************************** END ************************************* 162

69 A A B B C C D D E E F F G G H H C9 27n C8 27n C7 1n C12 1n C11 1n 1k5 1k5 1k5 1k5 1k5 1k5 1k5 1k5 1k5 1k5 1k5 1k5 D2 D19 D18 D17 D16 D15 D14 D13 D12 1k5 PICee-ontwikkelsysteem C1 1n C6 1n C5 1n C16 47µ 16V C3 1n IC4 PIN7 IC4 PIN14 K4 K3 P2 IC1 IC2 T2 T3 BC547 BC547 T1 D22 D21 S4 Light S3 RESET S8 IC3 X1 BC547 R3 4k7 4x1N4148 R31 27ohm +UB +UB R33 3k3 R6 1k P1 1k IC4D IC4C IC4A IC4B DB9 K2 CTS TxD RTS DTR S1 C15 47µ 16V R1 1k R8 1k D5 1N4148 D2 1N4148 R13 12k R12 1k C4 22p L11µH R14 1ohm R11 47ohm R9 47ohm IC4=74HCT125 R7 1K R6 1k R4 1k R3 1k VDC D1 1N47 C13 47µ 25V C1 1n C2 1n C14 47µ 25V R1 1k5 D7 D6 D4 D3 S7 S6 R34 4k7 R35 4k7 S5 S1 S2 R2 4k7 RC CLOCK R32 27ohm D11 D1 D9 D8 LCD Module R23 33ohm LCD CONTRAST 1k S9 LCD-E R24 4k7 R29 R28 R27 R26 R25 R22 R21 R2 R19 R18 R17 R16 R15 Vss VDD VEE RS R/W E D D1 D2 D3 D4 D5 D6 D7 A1 K1 +5V +5V a1 a2 a3 a4 a5 a6 a7 a8 a9 a1 a11 a12 a13 a14 a15 a16 a17 a18 a19 a2 a21 a22 a23 a24 a25 a26 a27 a28 a29 a3 a31 a32 +5V +5V V GND VCC CUR LIM ANODE COL OUT FREQC SUBS CAT C. IN INH E OUT S.V.R EN EN EN V + +5V EN V RA RA1 RA2 RA3 RA4/TOCKI OSC1/CLKIN OSC2/CLKOUT VSS VDD RB/INT RB1 RB2 RB3 RB4 RB5 RB6 RB7 16c84 /MCLR V +5V +5V

70 De Layout PICee-ontwikkelsysteem Layout

71

72

73 De instructieset van de PIC16F84 Het is niet de bedoeling hier alle instructies uit te gaan leggen. Hiertoe verwijs ik naar de datasheet. Wel is er het één en ander te vertellen over de instructieset. De instructieset is gegroepeerd in drie basisgroepen; Byte georiënteerde operaties Bit georiënteerde operaties Constante (Literal) en Control operaties. We zien in de eerste groep bewerkingen die op een register (f) gedaan worden. De instructies spreken voor zich. De NOP (No operation) instructie doet niets en, maar kost 1 machinecycle. Deze kan gebruikt worden om bijvoorbeeld precieze timing te krijgen. De tweede groep bestaat uit twee bewerkingen van een bit in een register, setten of resetten. De overige twee testen of een bepaald bitje of 1 is en springt dan, wel of niet over de volgende instructie, zoals in een vorige paragraaf te zien was. De derde groep bestaat voornamelijk uit instructies die een bewerking van een register met een constante doet. In deze groep vallen de control instructies op zoals CALL, GOTO, RETURN, RETLW en RETFIE. Deze laatste instructie zal bij het hoofdstuk over interrupts weer naar voren komen. De instructies CALL en RETURN zorgen voor het gebruik van Subroutines. Ook hier komen we op terug in het hoofdstuk over programmastructuren. De instructie GOTO geeft een onvoorwaardelijke sprong aan. Waarheen gesprongen moet worden wordt bepaald door de constante (k) die meegegeven wordt. Hiermee wordt de PC (Program Counter) bit 1 tot gevuld. De instructie is enkele 2 cycli instructie. De meeste instructies spreken voor zichzelf, maar in het begin is het verstandig de instructieset en de instructie descriptions (datasheet hoofdstuk 9.1) voor de exacte omschrijving steeds te raadplegen. Advies: We raden aan deze instructieset in de datasheet 9. eens goed door te nemen. De instructieset van de PIC16F84 blz. 1

74

75

76

77

78

79

80

81

82

83

84

85

86

87

ES1 Project 1: Microcontrollers

ES1 Project 1: Microcontrollers ES1 Project 1: Microcontrollers Les 5: Timers/counters & Interrupts Timers/counters Hardware timers/counters worden in microcontrollers gebruikt om onafhankelijk van de CPU te tellen. Hierdoor kunnen andere

Nadere informatie

Mechatronica Inleiding tot de PIC microcontroller. Kristof Goris VUB-MECH-R&MM

Mechatronica Inleiding tot de PIC microcontroller. Kristof Goris VUB-MECH-R&MM Mechatronica Inleiding tot de PIC microcontroller Kristof Goris VUB-MECH-R&MM 30 januari 2006 Inhoudsopgave 1 Inleiding 2 1.1 Wat is Mechatronica?...................... 2 1.2 Wat is een Microcontroller?...................

Nadere informatie

Mechatronica Inleiding tot de PIC microcontroller. Kristof Goris VUB-MECH-R&MM

Mechatronica Inleiding tot de PIC microcontroller. Kristof Goris VUB-MECH-R&MM Mechatronica Inleiding tot de PIC microcontroller Kristof Goris VUB-MECH-R&MM februari 2008 Inhoudsopgave 1 Inleiding 2 1.1 Wat is Mechatronica?...................... 2 1.2 Wat is een Microcontroller?...................

Nadere informatie

ES1 Project 1: Microcontrollers

ES1 Project 1: Microcontrollers ES1 Project 1: Microcontrollers Les 3: Eenvoudige externe hardware & hardware programmeren in C Hardware programmeren in C Inmiddels ben je al aardig op gang gekomen met het programmeren van microcontrollers.

Nadere informatie

Hoofdstuk 7. Computerarchitectuur

Hoofdstuk 7. Computerarchitectuur Hoofdstuk 7 Computerarchitectuur 1 controlebus CPU MEMORY I/O databus adresbus Figuur 71 Schematische opbouw van een computersysteem 8 Figuur 72 Een busverbinding Buslijn Out E A In Out E B In Out E C

Nadere informatie

De Arduino-microcontroller in de motorvoertuigentechniek (4)

De Arduino-microcontroller in de motorvoertuigentechniek (4) De Arduino-microcontroller in de motorvoertuigentechniek () E. Gernaat (ISBN 978-90-7930--6) De Atmel ATmega38/P microcontroller. Uitvoering De ATmega38 is een microprocessor van de Amerikaanse firma ATMEL

Nadere informatie

De Arduino-microcontroller in de motorvoertuigentechniek (2)

De Arduino-microcontroller in de motorvoertuigentechniek (2) De Arduino-microcontroller in de motorvoertuigentechniek (2) E. Gernaat (ISBN 978-90-79302-11-6) 1 Procescomputer 1.1 Microprocessoren algemeen De informatie-verwerking zoals is behandeld, is vrijwel geheel

Nadere informatie

ROBOTICS CCFZ 27/3/2010

ROBOTICS CCFZ 27/3/2010 Totaalplaatje robotbesturing De ingrediënten voor het programmeren van de racerobot hebben we nu behandeld. We kunnen een PIC processor programmeren. Het aansturen van een motor (gebruikmakend van de H

Nadere informatie

2 Algemene opbouw van een computersysteem

2 Algemene opbouw van een computersysteem Procescomputer E. Gernaat 1 Microprocessoren algemeen Informatie-verwerking zoals behandeld is momenteel vrijwel geheel overgenomen door microprocessoren. Wanneer we voortborduren op het idee van combinatorische

Nadere informatie

De AT90CAN microprocessor van ATMEL in de motorvoertuigentechniek (2)

De AT90CAN microprocessor van ATMEL in de motorvoertuigentechniek (2) De AT90CAN microprocessor van ATMEL in de motorvoertuigentechniek (2) Timloto o.s. / E. Gernaat / ISBN 978-90-79302-06-2 Op dit werk is de Creative Commens Licentie van toepassing. Uitgave: september 2012

Nadere informatie

De Arduino-microcontroller in de motorvoertuigentechniek (8)

De Arduino-microcontroller in de motorvoertuigentechniek (8) De Arduino-microcontroller in de motorvoertuigentechniek (8) E. Gernaat (ISBN 978-90-79302-11-6) 1 Assembly (Assembleertaal) 1.1 Inleiding De Arduino kan ook in assembleertaal (assembly) worden geprogrammeerd.

Nadere informatie

Hoe werkt een computer precies?

Hoe werkt een computer precies? Hoe werkt een computer precies? Met steun van stichting Edict Ben Bruidegom & Wouter Koolen-Wijkstra AMSTEL Instituut Universiteit van Amsterdam Overview Introductie SIM-PL Simulatietool voor werking computer

Nadere informatie

led 0 aan Opdracht: 1 Opdracht: 4

led 0 aan Opdracht: 1 Opdracht: 4 Opdracht: 1 Maak een set meetkabels zoals op foto blz.7 is aangegeven, lengte 60cm. Maak een programmeerkabel zoals op de foto van blz.5 is aangegeven. Houd je ook hier exact aan de kabel kleuren en posities

Nadere informatie

Meervoudige Smart-Card Duplicator. Gebruiksaanwijzing

Meervoudige Smart-Card Duplicator. Gebruiksaanwijzing Meervoudige Smart-Card Duplicator Gebruiksaanwijzing Project Specificaties De Smart Card Duplicating PCB is kan zes verschillende type smartcards lezen en schrijven, die allemaal gebaseerd zijn op de microchip

Nadere informatie

Inhoud vandaag. Interrupts. Algemeen ARM7 AIC

Inhoud vandaag. Interrupts. Algemeen ARM7 AIC Inhoud vandaag Interrupts Algemeen ARM7 AIC Interrupts Wat is een interrupt? Een interrupt is een onderbreking van de huidige bezigheden ten gevolge van een externe gebeurtenis, zodanig dat de bezigheden

Nadere informatie

AVR-DOPER MINI ASSEMBLAGE HANDLEIDING + LAYOUT. Geschreven door: Tom Vocke

AVR-DOPER MINI ASSEMBLAGE HANDLEIDING + LAYOUT. Geschreven door: Tom Vocke AVR-DOPER MINI ASSEMBLAGE HANDLEIDING + LAYOUT Geschreven door: Tom Vocke Datum: 28-09-2010 Inleiding: Dit document bevat alle hardware informatie betreffende de AVR-Doper mini. Het eerste deel zal zich

Nadere informatie

Tinyserir-RC5. Datasheet. Tinyserir-RC5 Page: 1 of 8

Tinyserir-RC5. Datasheet. Tinyserir-RC5 Page: 1 of 8 9600 bps RS-232 interface voor uitlezing van Ontvangen RC5 codes Led aanduiding bij ontvangst van Infrarood pulsen Led aanduiding goede werking Interne firmware Inwendige oscillator Weinig externe componenten

Nadere informatie

RAM geheugens. Jan Genoe KHLim. Situering RAM-geheugens. Geheugens. Halfgeleider Geheugens. Willekeurig toegankelijk geheugen

RAM geheugens. Jan Genoe KHLim. Situering RAM-geheugens. Geheugens. Halfgeleider Geheugens. Willekeurig toegankelijk geheugen Jan Genoe KHLim Situering RAM-geheugens Geheugens Halfgeleider Geheugens Serieel toegankelijk geheugen Willekeurig toegankelijk geheugen Read Only Memory ROM Random Access Memory RAM Statische RAM SRAM

Nadere informatie

B3C 70cm converter besturing. v1.0 2010 PE5PVB www.het bar.net pe5pvb@het bar.net

B3C 70cm converter besturing. v1.0 2010 PE5PVB www.het bar.net pe5pvb@het bar.net B3C 70cm converter besturing v1.0 2010 PE5PVB www.het bar.net pe5pvb@het bar.net Deze schakeling en de bijbehorende software mag niet worden gedupliceerd voor commerciële verkoop zonder uitdrukkelijke

Nadere informatie

Oefeningen Interpretatie I Reeks 6 : Registermachines

Oefeningen Interpretatie I Reeks 6 : Registermachines Oefeningen Interpretatie I Reeks 6 : Registermachines Deze oefeningenreeks behandelt het beschrijven van computationele processen aan de hand van registermachineprogrammaʼs. Registermachines manipuleren

Nadere informatie

Microcontrollers Introductie INLMIC Jesse op den Brouw INLMIC/2014-2015

Microcontrollers Introductie INLMIC Jesse op den Brouw INLMIC/2014-2015 Microcontrollers Introductie INLMIC Jesse op den Brouw INLMIC/2014-2015 Microcontroller Uit Wikipedia A microcontroller (sometimes abbreviated µc or uc) is a small computer on a single integrated circuit

Nadere informatie

In- en uitgangssignalen van microprocessoren

In- en uitgangssignalen van microprocessoren In- en uitgangssignalen van microprocessoren E. Gernaat 1 Overzicht signalen Informatie van en naar een microprocessor kan parallel of seriëel gebeuren. Bij parallel-overdracht zal elke lijn (draad) een

Nadere informatie

Van Poort tot Pipeline. Ben Bruidegom & Wouter Koolen-Wijkstra AMSTEL Instituut Universiteit van Amsterdam

Van Poort tot Pipeline. Ben Bruidegom & Wouter Koolen-Wijkstra AMSTEL Instituut Universiteit van Amsterdam Van Poort tot Pipeline Ben Bruidegom & Wouter Koolen-Wijkstra AMSTEL Instituut Universiteit van Amsterdam Van Poort tot Pipeline Pipeline processor One cycle machine Calculator File of registers Assembly

Nadere informatie

De CPU in detail Hoe worden instruc4es uitgevoerd? Processoren 28 februari 2012

De CPU in detail Hoe worden instruc4es uitgevoerd? Processoren 28 februari 2012 De CPU in detail Hoe worden instruc4es uitgevoerd? Processoren 28 februari 2012 Tanenbaum hoofdstuk 2 von Neumann - architectuur. Tanenbaum, Structured Computer Organiza4on, FiMh Edi4on, 2006 Pearson Educa4on,

Nadere informatie

ROBOTICS CCFZ 13/5/2009

ROBOTICS CCFZ 13/5/2009 ROBOTICS CCFZ Motorsturing Het is niet de bedoeling van onze programmeerwerkzaamheden om alleen maar een of meer lampjes te laten branden om ze daarna weer uit doen gaan. We willen een racerobot bouwen,

Nadere informatie

Digitale technieken Deeltoets II

Digitale technieken Deeltoets II Digitale technieken Deeltoets II André Deutz 11 januari, 2008 De opgaven kunnen uiteraard in een willekeurige volgorde gemaakt worden geef heel duidelijk aan op welke opgave een antwoord gegegeven wordt.

Nadere informatie

Opgave Tussentijdse Oefeningen Jaarproject I Reeks 4: Lcd Interface & Files

Opgave Tussentijdse Oefeningen Jaarproject I Reeks 4: Lcd Interface & Files Opgave Tussentijdse Oefeningen Jaarproject I Reeks 4: Lcd Interface & Files 1 Introductie In deze oefening zal je je LCD display leren aansturen. Je controleert deze display door er instructies naar te

Nadere informatie

De Arduino-microcontroller in de motorvoertuigentechniek (3)

De Arduino-microcontroller in de motorvoertuigentechniek (3) De Arduino-microcontroller in de motorvoertuigentechniek (3) E. Gernaat (ISBN 978-90-79302-11-6) 1 In- en uitgangssignalen van microprocessoren 1.1 Overzicht signalen Informatie van en naar een microprocessor

Nadere informatie

Proeftentamen in1211 Computersystemen I (NB de onderstreepte opgaven zijn geschikt voor de tussentoets)

Proeftentamen in1211 Computersystemen I (NB de onderstreepte opgaven zijn geschikt voor de tussentoets) TECHNISCHE UNIVERSITEIT DELFT Faculteit Informatietechnologie en Systemen Afdeling ISA Basiseenheid PGS Proeftentamen in1211 Computersystemen I (NB de onderstreepte opgaven zijn geschikt voor de tussentoets)

Nadere informatie

Getalformaten, timers en tellers

Getalformaten, timers en tellers Getalformaten, timers en tellers S_CU CU S PV R CV DEZ CV_BCD S_ODT S TV BI R BCD 1 pagina 1 Getalformaten (16 bits) PG CPU BCD W#16#296 Voorteken (+) 2 9 6 0 0 0 0 0 0 1 0 1 0 0 1 0 1 1 0 Positieve getallen

Nadere informatie

PIC Callgever Door PA1RUM

PIC Callgever Door PA1RUM PIC Callgever Door PA1RUM Aanleiding Tijdens de radiokampweek 2008 is deze callgever met veel enthousiasme gebouwd. Niet alleen omdat het een zeer eenvoudig en veelzijdig ontwerp is, maar ook omdat het

Nadere informatie

Microcontrollers Week 1 Introductie microcontroller Jesse op den Brouw INLMIC/2014-2015

Microcontrollers Week 1 Introductie microcontroller Jesse op den Brouw INLMIC/2014-2015 Microcontrollers Week 1 Introductie microcontroller Jesse op den Brouw INLMIC/2014-2015 Computersysteem Een systeem dat rekenkundige operaties, data manipulaties en beslissingen kan uitvoeren, aan de hand

Nadere informatie

VTI Sint-Laurentius De school voor Wetenschap, Techniek en Technologie Pr. Thuysbaertlaan 1 9160 Lokeren www.vti-lokeren.be info@vti-lokeren.

VTI Sint-Laurentius De school voor Wetenschap, Techniek en Technologie Pr. Thuysbaertlaan 1 9160 Lokeren www.vti-lokeren.be info@vti-lokeren. VTI Sint-Laurentius De school voor Wetenschap, Techniek en Technologie Pr. Thuysbaertlaan 1 9160 Lokeren www.vti-lokeren.be [email protected] GEÏNTEGREERDE PROEF Automatische schuifdeur Industriële informatie

Nadere informatie

Opgave Tussentijdse Oefeningen Jaarproject I Reeks 3: Tijd, licht en warmte

Opgave Tussentijdse Oefeningen Jaarproject I Reeks 3: Tijd, licht en warmte Opgave Tussentijdse Oefeningen Jaarproject I Reeks 3: Tijd, licht en warmte Voor deze oefeningenles heb je de handleiding van de uitgedeelde ARM processor nodig. Je kan deze vinden op de website van het

Nadere informatie

Stappenmotor Interface. Controller

Stappenmotor Interface. Controller Besturing In deze moderne tijd zal de besturing geheel elektrisch worden uitgevoerd. De bedoeling is dat er voor ieder afgaand spoor een wisseladres gebruikt worden. Dit betekend dan een reeks van 24 aansluitende

Nadere informatie

LocoServo Handleiding

LocoServo Handleiding LocoServo Handleiding HDM12 Disclaimer van Aansprakelijkheid: Het gebruik van alle items die kunnen worden gekocht en alle installatie-instructies die kunnen worden gevonden op deze site is op eigen risico.

Nadere informatie

De AT90CAN microprocessor van ATMEL in de motorvoertuigentechniek (3)

De AT90CAN microprocessor van ATMEL in de motorvoertuigentechniek (3) De AT90CAN microprocessor van ATMEL in de motorvoertuigentechniek (3) Timloto o.s. / E. Gernaat / ISBN 978-90-79302-06-2 Op dit werk is de Creative Commens Licentie van toepassing. Uitgave: september 2012

Nadere informatie

Het gehele systeem werkt volgens het Märklin-Motorola formaat en naar keuze ook DCC.

Het gehele systeem werkt volgens het Märklin-Motorola formaat en naar keuze ook DCC. Software Zoals eerder uit de beschrijving van de hardware naar voren is gekomen wordt het hart van de schakeling gevormd door een PIC van het type 16F628A. Deze is een vervanger van de populaire 16F84a

Nadere informatie

INHOUD. KHLim dep IWT MeRa 1/22

INHOUD. KHLim dep IWT MeRa 1/22 INHOUD 1.Aanmaken van een nieuw S7 project... 2 1.1 Openen van een nieuw project.... 2 1.2 invoegen van een S7 station... 2 1.3 openen van de hardware... 3 1.4 Invoegen van een Rack... 3 1.5 Downloaden

Nadere informatie

Thijs Assies. DMX-512 met een PICmicro

Thijs Assies. DMX-512 met een PICmicro Thijs Assies DMX-512 met een PICmicro 1. Wat is DMX-512? DMX-512 (afgekort DMX) Staat door Digital MultipleXed. En dit omschrijft eigenlijk de functie al: Het is een boel signalen Gemultiplexed op een

Nadere informatie

LocoIO Handleiding HDM08

LocoIO Handleiding HDM08 LocoIO Handleiding HDM08 Disclaimer van Aansprakelijkheid: Het gebruik van alle items die kunnen worden gekocht en alle installatie-instructies die kunnen worden gevonden op deze site is op eigen risico.

Nadere informatie

VANTEK Discovery set. N. B. De OPITEC bouwpakketten zijn gericht op het onderwijs. N991240#1

VANTEK Discovery set. N. B. De OPITEC bouwpakketten zijn gericht op het onderwijs. N991240#1 9 9 1. 2 4 0 VANTEK Discovery set N. B. De OPITEC bouwpakketten zijn gericht op het onderwijs. 1 Inhoudsopgave Binair rekenen Pulse en Countermodule blz. 3 Informatieverwerking Input en outputmodules blz.

Nadere informatie

scc = b) CD AB

scc = b) CD AB Computerarchitectuur en -organisatie (213030) Dinsdag 21 januari 2040, 13.30 17.00 uur 7 bladzijden met 8 opgaven 4 bladzijden met documentatie Let op: Vul het tentamenbriefje volledig in (d.w.z. naam,

Nadere informatie

De AT90CAN microprocessor van ATMEL in de motorvoertuigentechniek (4)

De AT90CAN microprocessor van ATMEL in de motorvoertuigentechniek (4) De AT90CAN microprocessor van ATMEL in de motorvoertuigentechniek (4) Timloto o.s. / E. Gernaat / ISBN 978-90-79302-06-2 Op dit werk is de Creative Commens Licentie van toepassing. Uitgave: september 2012

Nadere informatie

Inductiemeter via de parallelle poort

Inductiemeter via de parallelle poort K.T.A.1-Gent "De Lindenlei" Lindenlei 38 9000 Gent Tel: 09.225.33.04 en 09.225.43.42 Fax: 09.225.52.88 Geïntegreerde proef Inductiemeter via de parallelle poort Naam: Michaël Clinckspoor Richting: Industriële

Nadere informatie

Locobuffer Handleiding

Locobuffer Handleiding Locobuffer Handleiding HDM09 Disclaimer van Aansprakelijkheid: Het gebruik van alle items die kunnen worden gekocht en alle installatie-instructies die kunnen worden gevonden op deze site is op eigen risico.

Nadere informatie

Het koppelen van de Wago aan de AC500-eco via Modbus RTU. A quick start guide. Jaap Ruiten

Het koppelen van de Wago aan de AC500-eco via Modbus RTU. A quick start guide. Jaap Ruiten Het koppelen van de Wago 750-315 aan de AC500-eco via Modbus RTU. A quick start guide Jaap Ruiten Het koppelen van de Wago 750-315 aan een AC500-eco plc. Solar TPS 1 dinsdag 4 februari 2014 Inhoudsopgave

Nadere informatie

Technische Notities van PE1RRT

Technische Notities van PE1RRT Technische Notities van PE1RRT Experimenteren met de PIC Dit artikel is een vervolg op de vorige Technische Notities van Marc. Destijds is de architectuur van de PIC16F84 doorgelicht. Nu is het moment

Nadere informatie

18 Embedded systemen 1

18 Embedded systemen 1 18 Embedded systemen 1 r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15(pc) NZCV CPSR Figuur 18.1 ARM-programmeermodel Byte 0 Byte 1 Byte 2 Byte 3 Byte 3 Byte 2 Byte 1 Byte 0 Figuur 18.2 Endian conversie

Nadere informatie

Hoofdstuk 19. Embedded systemen

Hoofdstuk 19. Embedded systemen Hoofdstuk 19 Embedded systemen 1 r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15(pc) NZCV CPSR Figuur 19.1: ARM-programmeermodel. Byte 0 Byte 1 Byte 2 Byte 3 Byte 3 Byte 2 Byte 1 Byte 0 Figuur 19.2:

Nadere informatie

FORTH op de 80C535 processor met het ATS535 board.

FORTH op de 80C535 processor met het ATS535 board. FORTH op de 80C535 processor met het ATS535 board. ATS535 Het ATS535 board met 8052- ANS-Forth, is een product van de HCC Forth GG en Atelec Hoorn. Het board met de ingebouwde software is een uitstekend

Nadere informatie

12.1 Input/output-kaart IOK. Informatieblad 12 input/output-kaart versie 1.0. Beperking aansprakelijkheid

12.1 Input/output-kaart IOK. Informatieblad 12 input/output-kaart versie 1.0. Beperking aansprakelijkheid Beperking aansprakelijkheid De aansprakelijkheid van het bestuur van de HCCM is beperkt als omschreven in informatieblad 1 12 Input/output-kaarten De uitgangen van de input/output-kaart (IOK) hebben dezelfde

Nadere informatie

HANDLEIDING. Dit document beschrijft de installatie, configuratie en gebruik van de Netduino Plus 2 monitoring oplossing

HANDLEIDING. Dit document beschrijft de installatie, configuratie en gebruik van de Netduino Plus 2 monitoring oplossing 1 HANDLEIDING V2.0.2.0-2013 Dit document beschrijft de installatie, configuratie en gebruik van de Netduino Plus 2 monitoring oplossing Inhoudsopgave 2 Inhoudsopgave... 2 Inleiding... 3 Software installatie...

Nadere informatie

Technology, Innovation & Society Delft

Technology, Innovation & Society Delft Technology, Innovation & Society Delft VOORBLAD SCHRIFTELIJKE TOETSEN OPLEIDING TOETSCODE GROEP : ELEKTROTECHNIEK : MICPRG-sc1 : EQ1 TOETSDATUM : 25 JANUARI 2013 TIJD : 15.00 16.30 uur AANTAL PAGINA S

Nadere informatie

ES1 Project 1: Microcontrollers

ES1 Project 1: Microcontrollers ES1 Project 1: Microcontrollers Les 2: Architectuur ATmega32 en STK500 Door Hugo Arends, september 2012 Architectuur ATmega32 Een uitgebreide en gedetailleerde beschrijving van de ATmega32 microcontroller

Nadere informatie

GEÏNTEGREERDE PROEF. VTI Sint-Laurentius. Pakketweegschaal. Industriële informatie & communicatietechnologie SCHOOLJAAR 2010-2011.

GEÏNTEGREERDE PROEF. VTI Sint-Laurentius. Pakketweegschaal. Industriële informatie & communicatietechnologie SCHOOLJAAR 2010-2011. VTI Sint-Laurentius De school voor Wetenschap, Techniek en Technologie Pr. Thuysbaertlaan 1 9160 Lokeren www.vti-lokeren.be [email protected] GEÏNTEGREERDE PROEF Pakketweegschaal Industriële informatie

Nadere informatie

Sequentiële Logica. Processoren 24 november 2014

Sequentiële Logica. Processoren 24 november 2014 Sequentiële Logica Processoren 24 november 2014 Inhoud Eindige automaten Schakelingen met geheugen Realisatie van eindige automaten Registers, schuifregisters, tellers, etc. Geheugen Herinnering van week

Nadere informatie

Computerarchitectuur en netwerken. Memory management Assembler programmering

Computerarchitectuur en netwerken. Memory management Assembler programmering Computerarchitectuur en netwerken 2 Memory management Assembler programmering Lennart Herlaar 10 september 2018 Inhoud 1 Protectie: Hoe het O.S. programma s tegen elkaar kan beschermen modes memory management

Nadere informatie

2-KANAALS RF AFSTANDSBEDIENINGSSET

2-KANAALS RF AFSTANDSBEDIENINGSSET MODULES VM130 HANDLEIDING 2-KANAALS RF AFSTANDSBEDIENINGSSET WWW.VELLEMANPROJECTS.EU Inhoudstafel Beschrijving 3 Eigenschappen en technische gegevens 4 Instructies voor de zender 4 Instructies voor de

Nadere informatie

LocoServo Handleiding

LocoServo Handleiding LocoServo Handleiding HDM12 Disclaimer van Aansprakelijkheid: Het gebruik van alle items die kunnen worden gekocht en alle installatie-instructies die kunnen worden gevonden op deze site is op eigen risico.

Nadere informatie

2 Elementaire bewerkingen

2 Elementaire bewerkingen Hoofdstuk 2 Elementaire bewerkingen 19 2 Elementaire bewerkingen 1 BINAIRE GETALLEN In het vorige hoofdstuk heb je gezien dat rijen bits worden gebruikt om lettertekens, getallen, kleuren, geluid en video

Nadere informatie

PIC PROGRAMMEREN. Door H. Dorst, m.m.v. Joop van Schaik. Versie 13 mei 2009

PIC PROGRAMMEREN. Door H. Dorst, m.m.v. Joop van Schaik. Versie 13 mei 2009 PIC PROGRAMMEREN Door H. Dorst, m.m.v. Joop van Schaik. Versie 3 mei 29 Inleiding Het programmeren van een PIC processor gebeurt door het invoeren van instructies (opdrachten). De lijst instructies, de

Nadere informatie

Programmering Tiny45 voor de DCC locdecoder

Programmering Tiny45 voor de DCC locdecoder Programmering Tiny45 voor de DCC locdecoder Dit is een beschrijving voor het programmeren van de Tiny45 van de locdecoder. Voor de eerste programmering is een programmer voor Atmel AVR mikrocontrollers

Nadere informatie

Handleiding software USB PIC DEV. BOARD

Handleiding software USB PIC DEV. BOARD Handleiding software USB PIC DEV. BOARD V2.0 M.F. van Lieshout & J.G.W. Carpaij 21-03-2006 Handleiding software USB PIC DEV. BOARD Algemene informatie Hier volgt eerst wat algemene informatie over het

Nadere informatie

Hfdst. 2: COMBINATORISCH PROGRAMMEREN

Hfdst. 2: COMBINATORISCH PROGRAMMEREN 2.1. Basisinstructies: 2.1.1. Ja-functie: Indien je een normaal open schakelaar bedient, moet de lamp oplichten. Waarheidstabel: Booleaanse schrijfwijze: Q0.0 = I0.0 2.1.2. Niet-functie: Waarheidstabel:

Nadere informatie

2 Elementaire bewerkingen

2 Elementaire bewerkingen Hoofdstuk 2 Elementaire bewerkingen 17 2 Elementaire bewerkingen In dit hoofdstuk leer je hoe werken met binaire getallen en hexadecimale getallen omgezet wordt naar een decimaal getal en omgekeerd. Vervolgens

Nadere informatie

Werkbladen voor Arduino workshop 1

Werkbladen voor Arduino workshop 1 De aansluitingen van de Arduino Uno Werkbladen voor Arduino workshop 1 Arduino Arduino is een open-source ontwikkelbord, waarmee het eenvoudig is om informatica aan fysieke objecten te koppelen. Je kunt

Nadere informatie

Arduino CURSUS. door Willy - 09-juni-2017

Arduino CURSUS. door Willy - 09-juni-2017 Arduino CURSUS door Willy - [email protected], 09-juni-2017 OVERZICHT (1) OVERZICHT (2) Historiek Microcontroller (1) Microcontroller (2) Specificaties - Arduino UNO bord Specificaties - ATmega328P chip LET

Nadere informatie

Microcontrollers Labo

Microcontrollers Labo Microcontrollers Labo 8051 based microcontroller ADuC832 from Analog Devices 06/2016 Roggemans M. (MGM) LES 0 Testen en verdelen van de hardware FTP site overlopen Installeren van software om thuis te

Nadere informatie

De computer als processor

De computer als processor De computer als processor DE FYSIEKE COMPUTER Componenten van de computerconfiguratie Toetsenbord Muis Scanner Microfoon (Extern geheugen) Invoerapparaten Uitvoerapparaten Monitor Printer Plotter Luidspreker

Nadere informatie

VRIJ TECHNISCH INSTITUUT Burg.Geyskensstraat 11 3580 BERINGEN. De PLC geïntegreerd in de PC. Vak: Toegepaste informatica Auteur: Ludwig Theunis

VRIJ TECHNISCH INSTITUUT Burg.Geyskensstraat 11 3580 BERINGEN. De PLC geïntegreerd in de PC. Vak: Toegepaste informatica Auteur: Ludwig Theunis Burg.Geyskensstraat 11 3580 BERINGEN De PLC geïntegreerd in de PC. Vak: Toegepaste informatica Auteur: Ludwig Theunis Versie: vrijdag 2 november 2007 2 Toegepaste informatica 1 De Microprocessor Zowel

Nadere informatie

von-neumann-architectuur Opbouw van een CPU Processoren 1 december 2014

von-neumann-architectuur Opbouw van een CPU Processoren 1 december 2014 von-neumann-architectuur Opbouw van een CPU Processoren 1 december 2014 Herhaling: Booleaanse algebra (B = {0,1},., +, ) Elke Booleaanse functie f: B n B m kan met., +, geschreven worden Met Gates (electronische

Nadere informatie

Tentamen 17 augustus 2000 Opgaven Computerarchitectuur

Tentamen 17 augustus 2000 Opgaven Computerarchitectuur Tentamen 17 augustus 2000 Opgaven - 1 - Computerarchitectuur Tentamen Computerarchitectuur (213005) 17 augustus 2000 2 bladzijden met 5 opgaven 3 antwoordbladen Het raadplegen van boeken, diktaten of aantekeningen

Nadere informatie

Accelerometer project 2010 Microcontroller printje op basis van de NXP-LPC2368

Accelerometer project 2010 Microcontroller printje op basis van de NXP-LPC2368 Accelerometer project 2010 Microcontroller printje op basis van de NXP-LPC2368 Handleiding bij het gebruik van een microcontroller in het Accelerometerproject (Project II) Er zijn speciaal voor het Accelerometerproject

Nadere informatie

DMX-512 met een PICmicro. Thijs Assies Wat is DMX-512?

DMX-512 met een PICmicro. Thijs Assies Wat is DMX-512? DMX-512 met een PICmicro. Thijs Assies 2006. [email protected] Wat is DMX-512? DMX-512 (kortweg DMX) Staat door Digital MultipleXed. En dit omschrijft eigenlijk de functie al: Een boel signalen Digitaal

Nadere informatie

In deze mannual zal ik het voorbeeld van de Led cube gebruiken maar de principes zijn op alles toepasbaar.

In deze mannual zal ik het voorbeeld van de Led cube gebruiken maar de principes zijn op alles toepasbaar. Parallelle poort interface met Visual basic Waarom dit naslagwerk: Ik was zelf een beginner op dit vlak en heb dagen lopen zoeken naar correcte en up to date info inzake de aansturing van pc naar elektronica

Nadere informatie

n o F o r t h voor MSP430 Launchpad 1. Memory map Er zijn twee ROM gebieden (alle getallen zijn hex): , verdeeld in vier blokken van 40

n o F o r t h voor MSP430 Launchpad 1. Memory map Er zijn twee ROM gebieden (alle getallen zijn hex): , verdeeld in vier blokken van 40 n o F o r t h voor MSP430 Launchpad Albert Nijhof & Willem Ouwerkerk (29aug2012) 1. Memory map Er zijn twee ROM gebieden (alle getallen zijn hex): 1000-1100, verdeeld in vier blokken van 40 1000-1040 INFOD

Nadere informatie

assembleertaal F. Vonk versie

assembleertaal F. Vonk versie 2017 assembleertaal F. Vonk versie 1 8-8-2017 inhoudsopgave 1. inleiding... - 3-2. Zeer Eenvoudige Processor v2 (ZEP2)... - 4-3. de code, simulator en geheugen... - 6-4. optellen... - 11-5. vermenigvuldigen...

Nadere informatie

Bouwbeschrijving UniSAI

Bouwbeschrijving UniSAI Bouwbeschrijving UniSAI Print maken De layout heeft hele fijne sporen en daarom is fotografisch afdrukken de enige mogelijkheid. Voor het bewerken van de layout gebruik ik het programma Adobe Photoshop

Nadere informatie

De PIC Microcontroller

De PIC Microcontroller 1 De PIC Microcontroller Wat is het en wat kun je er mee? November 2010, v0.9 Lex Peters PE1CVJ Ben Emons PB2BN Dick Bronsdijk PA3HBS Inhoud presentatie 2 Waarom starten met een PIC Microcontroller? hoe

Nadere informatie

Mini Handleiding over Elektronica-onderdelen

Mini Handleiding over Elektronica-onderdelen Mini Handleiding over Elektronica-onderdelen Deze handleiding is speciaal geschreven voor kinderen vanaf 10 jaar. Op een eenvoudige manier en in begrijpelijke tekst leer je stapsgewijs wat elk elektronica-onderdeel

Nadere informatie

De CB channel controller TMS1022NL/NLL en TMS1023NL/NLL. ( Dit is een maskrom-programmed version van de Texas Instruments TMS1000 family)

De CB channel controller TMS1022NL/NLL en TMS1023NL/NLL. ( Dit is een maskrom-programmed version van de Texas Instruments TMS1000 family) De CB channel controller TMS1022NL/NLL en TMS1023NL/NLL ( Dit is een maskrom-programmed version van de Texas Instruments TMS1000 family) Ik begin even met een korte inleiding over de TMS1000. ( Wil je

Nadere informatie

Handleiding HCS VB5248

Handleiding HCS VB5248 Handleiding HCS VB5248 Analoge Uitgangsmodule met 8 uitgangen HCS Building Automation Kompasstraat 7a, 2901AM Capelle a/d IJssel Postbus 182, 2900AD Capelle a/d IJssel Tel. +31(0)10 458 00 00 Fax +31(0)10

Nadere informatie

Hardware High Speed Counters (HSC) dienen aangesloten te worden op de general-purpose inputs X0 t/m X7.

Hardware High Speed Counters (HSC) dienen aangesloten te worden op de general-purpose inputs X0 t/m X7. Datum : 27 november 2009 Aangemaakt door : Matthias FAQ 5 : Gebruik van High Speed Counters van de compact PLC (FX3u) Hardware High Speed Counters (HSC) dienen aangesloten te worden op de general-purpose

Nadere informatie

EM2 Microcontroller Project. LED cube

EM2 Microcontroller Project. LED cube EM2 Microcontroller Project LED cube Door: Dennis Koster Klas: Tc202 Studentnummer: 536496 Docent: Jan Derriks & Ruud Slokker Versie 1.0 (12-1-2009) Inhoudsopgave Inleiding 3 De onderdelen 4 t/ m 6 Het

Nadere informatie

Workshop Arduino voor beginners deel 2

Workshop Arduino voor beginners deel 2 Workshop Arduino voor beginners deel 2 Voor deze workshop is het van belang dat je deel 1 van de workshop hebt afgerond. In deze workshop zitten meerdere opdrachten die elkaar niet allemaal op hoeven te

Nadere informatie

Peripheral Interface Controllers. BRAC clubavond 5-105 PE2WDO

Peripheral Interface Controllers. BRAC clubavond 5-105 PE2WDO Peripheral Interface Controllers -10 PE2WDO Programma Introductie Wat is een PIC Wat heb je nodig om te beginnen Praktijkopdrachten: Voorbeeld met uitleg Opdrachten pag. 2 Wat is een PIC Programmable Intelligent

Nadere informatie

Het koppelen van de u-remote aan de AC500-eco via Modbus TCP. A quick start guide. Jaap Ruiten

Het koppelen van de u-remote aan de AC500-eco via Modbus TCP. A quick start guide. Jaap Ruiten Het koppelen van de u-remote aan de AC500-eco via Modbus TCP. A quick start guide Jaap Ruiten Het koppelen van Weidmüller u-remote aan een AC500-eco plc. Thema: u-remote Modbus TCP Bladzijde 1 Inhoudsopgave

Nadere informatie

informatica. hardware. overzicht. moederbord CPU RAM GPU architectuur (vwo)

informatica. hardware. overzicht. moederbord CPU RAM GPU architectuur (vwo) informatica hardware overzicht moederbord CPU RAM GPU architectuur (vwo) 1 moederbord basis van de computer componenten & aansluitingen chipset Northbridge (snel) Southbridge ("traag") bussen FSB/HTB moederbord

Nadere informatie

Geheugenbeheer. ICT Infrastructuren 2 december 2013

Geheugenbeheer. ICT Infrastructuren 2 december 2013 Geheugenbeheer ICT Infrastructuren 2 december 2013 Doelen van geheugenbeheer Reloca>e (flexibel gebruik van geheugen) Bescherming Gedeeld/gemeenschappelijk geheugen Logische indeling van procesonderdelen

Nadere informatie

Syncro AS. Analoge Brandmeldcentrale. Gebruikershandleiding. Man V1.0NL

Syncro AS. Analoge Brandmeldcentrale. Gebruikershandleiding. Man V1.0NL Syncro AS Analoge Brandmeldcentrale Gebruikershandleiding Man-1100 030209V1.0NL Index Section Page 1. Inleiding...2 2. Bediening...2 3.1 Bedieningsniveau 1...2 3.2 Bedieningsniveau 2...2 3. Alarmen...2

Nadere informatie

Zelf PIC's programmeren. Deel-1 KnipperLED (flashing LED)

Zelf PIC's programmeren. Deel-1 KnipperLED (flashing LED) Zelf PIC's programmeren Deel-1 KnipperLED (flashing LED) Het eerste project is het programmeren van een knipperende LED. Bij dit project gaat het vooral om ervaring op te doen met PIC-programmeren. We

Nadere informatie

SI-Profinet. Unidrive M200-M400 en Siemens S PLC (TIA portal)

SI-Profinet. Unidrive M200-M400 en Siemens S PLC (TIA portal) Omschrijving: In dit document wordt stap voor stap uitgelegd hoe met TIA portal de communicatie opgezet kan worden tussen een Siemens S7-500 PLC en een Unidrive M400 met V2 module. Dit document behandelt

Nadere informatie

Wat is Arduino? Arduino = microprocessor (Atmel)

Wat is Arduino? Arduino = microprocessor (Atmel) Intro tot Arduino Wat is Arduino? Volgens de website: Arduino is an open-source electronics prototyping platform based on flexible, easy-to-use hardware and software. It's intended for artists, designers,

Nadere informatie

Handleiding HCS VB5118

Handleiding HCS VB5118 Handleiding HCS VB5118 Digitale Ingangsmodule met 8 ingangen HCS Building Automation Kompasstraat 7, 2901AM Capelle a/d IJssel Postbus 182, 2900AD Capelle a/d IJssel Tel. +31(0)10 458 00 00 Fax +31(0)10

Nadere informatie

Hoofdstuk 3: Processen: Beschrijving en Besturing. Wat is een proces? Waarom processen? Wat moet het OS ervoor doen? Is het OS zelf een proces?

Hoofdstuk 3: Processen: Beschrijving en Besturing. Wat is een proces? Waarom processen? Wat moet het OS ervoor doen? Is het OS zelf een proces? Hoofdstuk 3: Processen: Beschrijving en Besturing Wat is een proces? Waarom processen? Wat moet het OS ervoor doen? Is het OS zelf een proces? 1 Wat is een proces? Een proces is een programma in uitvoering

Nadere informatie

Goedkope RS232. MSX Computer Magazine nummer 53- april Scanned, ocr ed and converted to PDF by HansO, 2001

Goedkope RS232. MSX Computer Magazine nummer 53- april Scanned, ocr ed and converted to PDF by HansO, 2001 Goedkope RS232 MSX Computer Magazine nummer 53- april 1992 Scanned, ocr ed and converted to PDF by HansO, 2001 Van huis uit zijn is de MSX computer voorzien van diverse aansluitingen, zoals de joystick

Nadere informatie

Onderwijseenheid INLMIC Inleiding microcontrollers

Onderwijseenheid INLMIC Inleiding microcontrollers Studiebelasting: 3 CP Kwartaal: EQ1.1, EQ3D.1 Verantwoordelijke docenten: J.E.J. op den Brouw, B. Kuiper Opbouw onderwijseenheid. OEdeel kwt sbu theo pract proj toetswijze bs INLMIC-co1 1 42 14 Meerkeuze

Nadere informatie