Stap 5: De Code uitgelegd
; Morse-code bestaat uit
; stippen, dat kort knippert;
; streepjes, die lange knippert, drie keer zo lang als een stip;
; en spaties, die perioden waarin het licht is zijn weg.
; spaties zijn er in verschillende lengtes:
; In een brief, puntjes en streepjes worden gescheiden door een
; afstand die dezelfde lengte als een punt.
; brieven worden gescheiden door een afstand de dezelfde lengte als een streepje.
; En woorden worden gescheiden door een afstand vijf keer zo lang als een punt.
;
; De code: (meer of minder. Het is een lange tijd sinds de Boy Scouts)
; A .- * B -... * C -.-. * D -..
; E. * F .. -. * G --. * H ....
; I .-. * J .--- * K -.- * L .-..
; M -- * N -. * O --- * P .--.
; Q --.- * R .-. * S ... * T -
; U... - * V ...- * W .-- * X -.. -
; Y -.-- * Z --..
;
;
Opmerkingen in PIC-assembler (dat is de taal waarin dit programma is geschreven) start met een puntkomma karakter, en tot het einde van de lijn. Opmerkingen zijn bedoeld voor de volgende persoon die op de code werkt, en geven geen eigenlijk geen instructies aan de microcontroller. Dus vertellen deze tabel van Morse code brief waarden niet de computer iets. De instructies voor de computer komt verder naar beneden.
Wanneer de microcontroller begint, begint het gaan door de instructies op locatie nul beginnen. In dit programma, zal de instructies vanaf lijn 45 worden gelegd op locatie nul, vanwege de org 0 op lijn 44. (In Kladblok vindt u genummerde lijnen trekken van het menu bewerken en klikt u op de Goto Line. Kladblok wordt uitgeschakeld Goto Line als wordwrap is ingeschakeld; Als Goto Line lijkt niet te werken (wordt grijs weergegeven) pull-down menu Opmaak en klik wordwrap.)
org 0; reset van vector
Start:
goto belangrijkste
org 4; interruptvector
retfie; niets doen
belangrijkste:
banksel TRISIO; Selecteer bank 1, waar TRISIO is opgeslagen.
movlw 0; instellen van GP0-GP5-alle uitgangen.
movwf TRISIO
banksel GPIO; Selecteer bank 0, GPIO gebruiken
BCF GPIO, 2;; LED uitschakelen
lus:
oproep letterF
oproep S
oproep letterC
oproep afstand
goto lus
Het stukje over TRISIO is initialisatie instellen van de microcontroller. Om volledig te begrijpen, zou u moeten lezen via het gegevensblad voor de PIC12F683.
Het programma gaat door middel van de instructie op elke lijn, dan verplaatst naar de volgende regel, tenzij de instructie een goto, oproep, return of retfie is
Het is logisch om te concluderen dat de lijn oproep letterF de microcontroller veroorzaakt te knipperen een F in Morse code. Het is ook waar, maar de reden is is waar is dat een blok code benoemde letterF() al is gedefinieerd in dit programma. Dat blok ziet er zo uit:
; De code voor F is... -.
letterF:
oproep stip
oproep stip
oproep dash
oproep stip
oproep afstand
terugkeer
Aangezien de inhoudsopgave brieven vertelt ons dat de letter F... -. het is weer logisch om te geloven dat dat is wat deze code doet--vertelt de microcontroller aan eerste flits een stip, dan een stip, dan een streepje, enz. Nogmaals, het is ook waar, maar nogmaals, omdat we passende code elders in het programma hebben. Bijvoorbeeld, hebben we:
stip:
BSF GPIO, 2;; LED inschakelen
Bel dotTime;; een beetje wachten
BCF GPIO, 2;; LED uitschakelen
Bel dotTime;; een beetje wachten
terugkeer
De dikke darm suggereert dat dit de definitie van punt is; dat klopt, en slechts één definitie is toegestaan voor een symbool in een programma. We kunnen het zo vaak als we, maar willen gebruiken.
We moeten weten dat GPIO bit 2 is verbonden met pin 5, dat is waar we de LED verbonden om zin van dit. Als GPIO bit 2 is ingesteld op 1, heeft pin 5 5 volt op. Wanneer we de waarde 0 verzenden door de GPIO pin 2, verandert de spanning op de pin 0 volt. De namen van de pinnen op het circuit schema wijzen op dit.
Dus is een stip geflitst door het aanzetten van de LED, wachten een tijdje, dan het uitschakelen en een tijdje wachten. We moeten een wachttijd na de stip te houden van de flitsen unreadably samen worden uitgevoerd, en dat is wat de dotTime code doet.
De namen van de verschillende PIC12F683 pinnen en registers zijn verborgen binnen een bestand die wij op de top van het programma in de lijn
#include < p12F683.H >
Het blok dotTime ziet er als volgt
dotTime:
Bel vertraging;; een beetje wachten
terugkeer
vertraging is nog een ander blok van code, waarschijnlijk de meest ingewikkelde in dit programma:
; programma variabelen definiëren. Deze toevallig in bank 0
Ik equ 0x20
j equ 0x21
k equ 0x22
vertraging:; vertragingen ~ 1 seconde op een 4MHz klok
movlw 5
movwf i; maakt gebruik van een geïdentificeerdc geneste lus
Bovenaan paginaIk: clrf j
topj: clrf k
topk: incfsz k, 1; graaf tot 256
goto topk; binnenste lus is 3 cycli
incfsz j, 1
goto topj
decfsz i, 1
goto topi
terugkeer
u zou moeten een programmeur de code in de chip programmeren.