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.

Schema      JAL code      HEX file


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
 

En belangrijke opmerking bij

  pragma target OSC INTOSC_NOCLKOUT ;interne oscillator/osc pinnen beiden IO
 
De interne oscillator werkt op 8 MHz. In ons voorbeeld willen we die op
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

JALEdit de editor om JAL code te schrijven
JALlib de bibliotheken (en voorbeelden) en de compiler
MPLab IDE de ontwikkel- en PicProgrammeromgeving
Microchip de site van de PIC's
JalList Hulp en hopen voorbeelden