PIC 16F684 van knipperlicht naar... (pagina 1)
Eenvoudig voorbeeld om een ledje te laten knipperen.
Een ledje aangesloten op poort A0 knippert één seconde aan en daarna één seconde uit.
Het programma is opgebouwd uit enkele afgelijnde gedeelten.
Bovenaan staat als inleiding een gedeelte commentaar.
Dit commentaar heeft totaal geen nut voor de code; het dient alleen maar om de programmacode
wat overzichtelijk te maken.
In dit geval staat in het commentaar waartoe de code dient, op welke voorgaande code
het gebaseerd is en welke aanpassingen er zijn gedaan in die originele code.
Wanneer op een andere plaats commentaar geschreven staat (eigenlijk overal) is dit
telkens in de grijze kleur. Commentaar kan op elke plaats en wordt gebruikt om
één en ander duidelijk te maken.
;------------------------------------------------------------------------------- ;16F684_blink ; ;Led knipperlicht gebaseerd op: ; Title: Blink-a-led of the Microchip pic16f684 ; Author: Rob Hamerling, Copyright (c) 2008..2010, all rights reserved. ; ;Aangepast naar eigen noden: ; interne oscillator op 4MHz ; interne MCLR ;------------------------------------------------------------------------------- |
In het tweede gedeelte staan de includes. Dit zijn de bibliotheken die nodig zijn om het
programma te compileren en die voorgeschreven code bevatten.
In dit eenvoudig programma is slechts één bibliotheek nodig, namelijk die met de
definities en instellingen van de verschillende poorten en registers.
include 16f684 |
Het volgende gedeelte bevat de instellingen voor de processor (fuses)
en eventueel instellingen die voor de compiler nodig zijn.
pragma target clock 4_000_000 ;oscillator frequency pragma target OSC INTOSC_NOCLKOUT ;interne oscillator/osc pinnen beiden IO pragma target WDT disabled ;no watchdog pragma target MCLR internal ;reset internally |
Eén belangrijke opmerking bij
De interne oscillator werkt op 8 MHz. In ons voorbeeld willen we die op
pragma target OSC INTOSC_NOCLKOUT ;interne oscillator/osc pinnen beiden IO
4 MHz laten werken en dit gebeurt hier zonder extra instellingen.
De default waarde van OSCCON.IRCF staat op 110 en dat betekent dat de processor
standaard (na reset) op 4 MHz werk!
Het daarop volgende gedeelte bevat de instellingen die eigen zijn aan dit programma.
De led is aangesloten op pen A0 (pen 13 van de chip) en die pen zetten we als uitgang.
In de rest van het programma kunnen we verder verwijzen naar pin_A0 maar met een
naam die die zegt waarvoor de pin dient, wordt het programma overzichtelijker (vandaar
dat pin_A0 de alias 'led' krijgt).
enable_digital_io() ;alle pinnen digitale IO ;LED is via voorschakelweerstand aangesloten op pin A0 alias led is pin_A0 pin_A0_direction = output |
Het laatste gedeelte bevat het eigenlijke programma. Het (minuscule) programma speelt zich af
tussen de eeuwig durende lus beginnende met:
forever loop
en
end loop
De led wordt aangezet en dan wacht de processor één miljoen microseconden, zet de led uit
en wacht opnieuw één miljoen microseconden. Nadien keert het programma terug naar het begin
en de cyclus begint opnieuw (tot wanneer de stekker wordt uitgetrokken).
;------------------------------------------------------------------------------- forever loop ;LED aan led = on ;wacht 1 seconde _usec_delay(1_000_000) ;LED uit led = off ;wacht 1 seconde _usec_delay(1_000_000) end loop ;------------------------------------------------------------------------------- |
PIC 16F684 van knipperlicht naar... (pagina 2)
Links