Pocket Sized morsekod Flasher (5 / 7 steg)
Steg 5: Koden förklaras
; Morsealfabetet består av
; prickar, korta blinkar;
; streck, långa blinkar, tre gånger så länge som en prick;
; och mellan fästpunkterna, som är perioder där ljuset är avstängd.
; inbördes avstånd finns i olika längder:
; I ett brev, prickar och streck är åtskilda av en
; avstånd som är av samma längd som en prick.
; bokstäverna är åtskilda med ett avstånd av samma längd som ett streck.
; Och orden skiljs åt av ett avstånd fem gånger så länge som en prick.
;
; Koden: (mer eller mindre. Det är en lång tid sedan 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 --..
;
;
Kommentarer i PIC assembler (som är det språk som programmet är skriven) börjar med ett semikolon tecken, och fortsätta till slutet av raden. Kommentarer är avsedda för nästa person som arbetar på koden, och faktiskt ge inte några instruktioner till mikrokontroller. Så berätta denna tabell med Morsealfabetet brev värden inte för datorn någonting. Instruktionerna till datorn visas längre ned.
När mikrokontroller startar upp, börjar det gå igenom instruktionerna börjar på plats noll. I detta program, kommer instruktionerna början på linje 45 placeras på plats noll, på grund av org 0 på linje 44. (I anteckningar, kan du hitta numrerade linjerna genom dra ner på Redigera-menyn och klicka på gå till raden. Anteckningar inaktiverar Goto linje om wordwrap aktiveras; om Goto linje inte verkar fungera (nedtonad) dra ner på Format-menyn, och unclick wordwrap.)
org 0; återställa vektor
Start:
gå till största
org 4. avbrottsvektor
retfie; gör ingenting
viktigaste:
banksel TRISIO; Välj bank 1, där TRISIO lagras.
movlw 0; ange GP0-GP5 alla utgångar.
movwf TRISIO
banksel GPIO; Välj bank 0, att använda GPIO
BCF GPIO, 2;; stänga av LED
slinga:
kalla letterF
samtal S
kalla letterC
ringa avstånd
goto loop
Lite om TRISIO är initiering att inrätta mikrokontroller. För att förstå det helt, skulle du behöva läsa igenom databladet för PIC12F683.
Programmet går igenom instruktionen på varje rad, då flyttar till nästa rad, om anvisningen inte är en goto, samtal, avkastning eller retfie
Det är logiskt att dra slutsatsen att linje samtalet letterF orsakar mikrokontroller att blinka ett F i morsekod. Det är också sant, men anledningen är är sant är det ett kodblock som heter letterF() har redan definierats i detta program. Som blockerar ser ut så här:
; Koden för F är... -.
letterF:
Ring dot
Ring dot
Ring dash
Ring dot
ringa avstånd
returnera
Eftersom tabellen brev berättar att bokstaven F är... -. igen är det logiskt att tro att det är vad denna kod gör--berättar mikrokontroller till första blixten en prick, då en prick, då en dash, etc. Igen, det är också sant, men återigen, eftersom vi har lämplig kod någon annanstans i programmet. Exempelvis har vi:
dot:
BSF GPIO, 2;; slå på LED
kallar dotTime;; vänta lite
BCF GPIO, 2;; stänga av LED
kallar dotTime;; vänta lite
returnera
Tjocktarmen tyder på att detta är definitionen av dot; Det är korrekt, och bara en definition är tillåtet för en symbol i ett program. Vi kan använda den så ofta som vi vill, men.
För att göra känsla av detta behöver vi veta att GPIO bit 2 är ansluten till stift 5, vilket är där vi ansluten LED. När GPIO bit 2 är satt till 1, har stift 5 5 volt på den. När vi skickar värdet 0 till GPIO stift 2, ändras spänningen på PIN-koden till 0 volt. Namnen på stiften på kretsen Schematisk antyder detta.
Så är en prick flashad av tända lampan, väntar en stund, sedan stänga av den och väntar en stund. Vi behöver en väntan efter pricken att hålla blixtar från kör förminskningen tillsammans, och det är vad dotTime koden gör.
Namnen på de olika PIC12F683 pins och register är gömd insida en fil som inkluderar vi högst upp i programmet i raden
#include < p12F683.H >
DotTime blocket ser ut så här
dotTime:
Ring dröjsmål;; vänta lite
returnera
förseningen är ännu ett annat block av kod, förmodligen de mest komplicerade i detta program:
; definiera programmet variabler. Detta råkar vara i bank 0
Jag equ 0x20
j equ 0x21
k equ 0x22
försening:; förseningar ~ 1 sekund på en 4MHz klocka
movlw 5
movwf i, använder en triply kapslade slinga
Topi: clrf j
topj: clrf Karlsson
Dolmabahç: incfsz k, 1; räkning till 256
gå till Dolmabahç; inre loop är 3 cykler
incfsz j, 1
gå till topj
decfsz i, 1
gå till topi
returnera
du skulle behöva en programmerare att programmet koden till chipet.