DataMuseum.dk

Presents historical artifacts from the history of:

CP/M

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about CP/M

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download

⟦a9aff2c4c⟧ RcTekst

    Length: 54400 (0xd480)
    Types: RcTekst
    Names: »LÆRER.WP«

Derivation

└─⟦be08f6879⟧ Bits:30003899/Brug_pæren_lærer-tekst.imd Brug pæren Rev. 1.0 (Piccolo)
    └─⟦this⟧ »LÆRER.WP« 

RcTekst


╱04002d4e0a00060000000002084e31400000000000000000000000000000000000000000000000000c16202a343e48525c66707a848e98ff04╱

════════════════════════════════════════════════════════════════════════
↓
┆14┆┆b3┆┆b0┆"BRUG PÆREN"                                     LÆRERTEKST   Side ┆0b┆↲

╱04002d4e0a00060000000002194131400000000000000000000000000000000000000000000000001d27313b454f59636d77818b959fa9ff04╱

╱04002d4e0a00060000000002084e31400000000000000000000000000000000000000000000000000c16202a343e48525c66707a848e98ff04╱
↓
↲
↲
↲
┆b0┆┆b0┆MAPPEN:↲
_________________________________________↲
↲
↲
    LÆRERTEKSTEN:↲
... programmeringsprincip for lyspanelet↲
... funktionsprincip for lyspanelet↲
... lærer-vejledning til↲
    undervisningsmaterialet↲
... program-dokumentation for↲
    diskettens programmer↲
↲
↲
    ELEVTEKSTEN:↲
... teori↲
... opgaver     (een løsning)↲
... problemer   (flere løsninger)↲
... tabeller↲
... arbejdsark  (hjælp til løsninger)↲
↲
↲
    TEKNISK TILLÆG:↲
... datablad for lyspanel↲
... tilslutning af lyspanel til ↓
┆1f┆┆1f┆┆1f┆┆1f┆forskellige↲
    microdatamatfabrikater↲
↲
_________________________________________↲
↲
↲
┆b0┆DISKETTEN:↲
_________________________________________↲
↲
↲
    Disketten indeholder programmer ↲
┆1f┆┆1f┆┆1f┆┆1f┆skrevet i COMAL80 til:↲
... elevbrug ved opgaveløsning↲
... lærerbrug ved fremstilling af opgaver↲
 ┆1f┆┆1f┆┆1f┆på printer.↲
... løsningseksempler til alle ↲
 ┆1f┆┆1f┆┆1f┆opgaver/problemer i elevteksten↲
↲
_________________________________________↲
↲
↲
┆b0┆LYSPANELET:↲
_________________________________________↲
↲
↲
Lyspanelet består af en boks med en ↓
vandret række med 8 lamper, samt 4 ↓
lyskurve: To med  3 lamper (rød-gul-grøn) ↓
og to med 2  lamper (rød-grøn).   ↓
Lamperne kan styres fra micro┄datamaten ↓
ved hjælp af simple programmer, her  ↓
COMAL80-programmer, via en  parallelport ↓
med 8-10 bit. ↲
↲
_________________________________________↲

════════════════════════════════════════════════════════════════════════
↓
↲
↲
↲
┆b0┆FORORD:↲
_________________________________________↲
↲
↲
Datamaskiner anvendes til at løse mange ↓
forskellige problemer i samfundet. Man ↓
kan sige, at der er tale om mindst 3 ↓
principielt forskellige an┄ven┄del┄ses┄↓
områder:↲
↲
↲
┆b0┆(1)  ADMINISTRATION↲
┆b0┆(2)  AUTOMATISERING↲
┆b0┆(3)  KOMMUNIKATION↲
↲
↲
Emnet "AUTOMATISERING" kan deles i 3  ↓
del┄emner:↲
↲
┆b0┆(A)  STYRING┆f0┆     (data ud af micro'en)↲
┆b0┆(B)  MÅLING ┆f0┆     (data ind i micro'en)↲
┆b0┆(C)  REGULERING ┆f0┆     (data begge veje)↲
↲
↲
Hvis delemnet ┆b0┆"STYRING"┆f0┆ skal behandles i ↓
┆19┆┄┆81┆┄undervisningen på en konkret og virkelig┄↓
┆19┆┄┆81┆┄hedsnær måde, kræver det naturligvis at ↓
┆19┆┄┆81┆┄eleverne har mulighed for selv at arbejde ↓
┆19┆┄┆81┆┄med styring af et system udenfor selve ↓
┆19┆┄┆81┆┄datamaskinen. Det kræver desuden inter┄↓
┆19┆┄┆81┆┄face┄udstyr til sammenkobling af det ↓
┆19┆┄┆81┆┄eksterne udstyr og microdatamaten.↲
↲
↲
Til "BRUG PÆREN" hører et lyspanel med ↓
små pærer på frontpladen, der kan styres ↓
med f.eks. COMAL80-programmer. Lyspanelet ↓
indeholder desuden interface til pærerne ↓
så det direkte kan tilsluttes en micro┄↓
datamat.↲
↲
↲
Undervisningsmaterialet "BRUG PÆREN" skal ↓
derfor ses som en mulighed for, på en ↓
simpel og konkret måde, at behandle emnet ↓
┆b0┆"STYRING"┆f0┆ i den elementære datalære┄↓
┆19┆┄┆81┆┄undervis┄ning.↲
↲
↲
Uden assistance fra kolleger, i form af  ↓
afprøvning, ideer og kritik, var "BRUG ↓
PÆREN" ikke blevet lavet. ↲
↲
↲
Tak for hjælpen !↲
↲
↲
↲
                           CHRISTIAN WANG↲
                              ODENSE 1983↲
                                1. UDGAVE↲

════════════════════════════════════════════════════════════════════════
↓

╱04002d4e0a000600000000021449314000000000000000000000000000000000000000000000000018222c36404a545e68727c86909aa4ff04╱

╱04002d4e0a00060000000002194131400000000000000000000000000000000000000000000000001d27313b454f59636d77818b959fa9ff04╱
↓
↲
↲
↲
┆b0┆PRINCIPPET BAG PROGRAMMERINGEN AF LYSPANELET: ↲
_____________________________________________________↲
↲
Enhver microdatamat er udstyret med stik for ↓
tilkobling af forskelligt udstyr:↲
TASTATUR, PRINTER, SKÆRM, DISKSTATION, MODEM, m.m..↲
↲
Stikkene er forbundet til "IN/OUT"-kredsløb i data┄↓
maten. Disse "IN/OUT"-kredse sørger for trans┄mission ↓
af data ind og ud af datamaten.↲
↲
Der findes to typer "IN/OUT"-kredse. En type beregnet ↓
til ┆b0┆seriel┆f0┆ transmission, og en til ┆b0┆parallel┆f0┆ ↓
┆19┆┄┆82┆┄transmission. Begge typer er udstyret med kontrol┄↓
┆19┆┄┆82┆┄linier, der kan synkronisere datamatens databehandling ↓
┆19┆┄┆82┆┄med ind- og udgående datastrømme, såkaldt "handshake" ↓
┆19┆┄┆82┆┄signaler.↲
↲
"IN/OUT"-kredsene kan programmeres med to forskellige ↓
formål :↲
↲
(1) ┆b0┆KONTROL┆f0┆ af kredsenes funktioner, og↲
↲
(2) Transmission af ┆b0┆DATA┆f0┆ gennem kredsene.↲
↲
I forbindelse med undervisningsmaterialet ↲
"BRUG PÆREN" og det tilhørende LYSPANEL, benyttes ↓
┆b0┆PARALLELPORTEN til transmission af data ud af micro'en┆f0┆ ↓
┆19┆┄┆81┆┄til lyspanelet:↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
Hvis vi går ud fra, at LYSPANELET er tilsluttet en↲
┆b0┆8 BITS PARALLELPORT┆f0┆, så betyder det, at de 8 lamper på ↓
┆19┆┄┆81┆┄lyspanelet er forbundet med microdatamaten med hver ↓
┆19┆┄┆81┆┄sin ledning samt en stelforbindelse. Disse 8 ledninger ↓
┆19┆┄┆81┆┄kan programmeres til at have en elektrisk spænding på ↓
┆19┆┄┆81┆┄h.h.v. 0 Volt og ca. +4 Volt. Der er kun disse to ↓
┆19┆┄┆81┆┄muligheder: ┆b0┆LAV┆f0┆ og ┆b0┆HØJ┆f0┆ spænding, svarende til tallene ↓
┆19┆┄┆83┆┄"0" og "1" i det binære talsystem, totalsystemet.↲

════════════════════════════════════════════════════════════════════════
↓
↲
↲
↲
Ønsker man at tænde og slukke for lamperne på ↓
lyspanelet, skal man forestille sig hver lampe ↓
svarende til et ciffer i et binært tal. Hvis vi for ↓
eksempel sender det decimale tal 174 til parallel┄↓
porten, vil lamperne lyse svarende til 174 omsat til ↓
et 8-cifret binært tal:   ┆b0┆10101110┆f0┆   ,hvor cifret ↓
┆19┆┄┆81┆┄længst til højre er BIT(0), og cifret længst til ↓
┆19┆┄┆81┆┄venstre er BIT(7).↲
↲
Hvis man ønsker at tænde for en enkelt lampe ad ↓
gangen, skal disse tal benyttes:↲
↲
↲
↲
BIT:     BINÆR:              DECIMAL:↲
-------  ---------------     --------------↲
↲
BIT(0):  0 0 0 0 0 0 0 1  =    1  ( = 2^0 )↲
BIT(1):  0 0 0 0 0 0 1 0  =    2  ( = 2^1 )↲
BIT(2):  0 0 0 0 0 1 0 0  =    4  ( = 2^2 )↲
BIT(3):  0 0 0 0 1 0 0 0  =    8  ( = 2^3 )↲
BIT(4):  0 0 0 1 0 0 0 0  =   16  ( = 2^4 )↲
BIT(5):  0 0 1 0 0 0 0 0  =   32  ( = 2^5 )↲
BIT(6):  0 1 0 0 0 0 0 0  =   64  ( = 2^6 )↲
BIT(7):  1 0 0 0 0 0 0 0  =  128  ( = 2^7 )↲
↲
↲
↲
Alle bits sættes "HØJE" ved at sende det decimale tal ↓
255 (=128+64+32+16+8+4+2+1 ) til parallelporten !↲
↲
↲
Med hensyn til programmering af lyspanelet i COMAL80 ↓
henvises til afsnittet med programdokumentationen i ↓
lærervejledningen.↲

════════════════════════════════════════════════════════════════════════
↓
↲
↲
↲
┆b0┆PRINCIPPET BAG LYSPANELETS VIRKEMÅDE:↲
_____________________________________________________↲
↲
↲
Som nævnt leverer micro'en udgangsspændinger på enten ↓
0 volt (LAV spænding), eller ca. +4 volt (HØJ ↓
spænding). Strømstyrken på det "høje" signal fra ↓
parallelporten er imidlertid alt for lille til at ↓
tænde for en pære direkte. Signalet bruges derfor kun ↓
til at tænde for en afbryder, et elektronisk relæ, der ↓
åbner for en elektrisk strøm der er stærk nok til ↓
at få pæren til at lyse.↲
↲
------------------------------------------------------↲
↲
Når BIT(0) sættes LAV, forbinder relæet "L1" med      ↓
"+12 volt". Det betyder, at der er en elektrisk ↓
spænding på +12 volt på ┆b0┆begge┆f0┆ sider af pæren, altså ↓
┆19┆┄┆81┆┄ingen spændings-┆b0┆forskel┆f0┆, og den lyser derfor ikke: ↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
┆b0┆          BIT(0) LAV  =  BIT(0)-PÆREN SLUKKET !!↲
↲
------------------------------------------------------↲
↲
Når BIT(0) sættes HØJ, forbinder relæet "L1" med↓
"0 volt". Det betyder, at der er en spænding på 0 volt ↓
på den ene side af pæren, og en spænding på +6 volt på ↓
den anden side, og pæren lyser derfor:↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
┆b0┆          BIT(0) HØJ  =  BIT(0)-PÆREN TÆNDT !! ↲
↲
------------------------------------------------------↲
↲
Alle lamper på lyspanelet tænder og slukker efter ↓
dette princip.↲

════════════════════════════════════════════════════════════════════════
↓
↲
↲
↲
┆b0┆LÆRER-VEJLEDNING TIL UNDERVISNINGSMATERIALET:↲
_____________________________________________________↲
↲
↲
┆b0┆Formålet med "BRUG PÆREN" :↲
↲
┆b0┆(1)┆f0┆: At give eleverne viden om og færdigheder i ↓
┆19┆┄┆81┆┄anvendelse af datamaskinen til styring af en ydre ↓
┆19┆┄┆81┆┄enhed.↲
↲
┆b0┆(2)┆f0┆: At give eleverne færdigheder i at løse simple ↓
┆19┆┄┆81┆┄konkrete problemer af algoritmisk art ved hjælp af en ↓
┆19┆┄┆81┆┄microdatamat.↲
↲
┆b0┆(3)┆f0┆: At give eleverne viden om datamaskinens ↓
┆19┆┄┆81┆┄principielle opbygning og virkemåde.↲
↲
↲
┆b0┆Indhold: ↲
↲
.... BINÆRE OG DECIMALE TAL↲
.... ASCII-VÆRDIER↲
.... SKRIFT-TEGN↲
.... FUNKTIONS-TEGN (FUNKTIONS-TASTER)↲
.... TRANSMISSION AF DATA↲
.... STYRING AF LYSPANELET ("TÆND"/"SLUK")↲
.... "PAUSE"↲
.... "BLINKLYS"↲
.... "REAKTIONSTID"↲
.... "FYR"↲
.... "MORSE"↲
.... "LØBELYS"↲
.... "TÆLLE"↲
.... PORTE↲
.... INTERFACE↲
.... "TRAFIKLYS"↲
↲
↲
┆b0┆Nødvendigt udstyr til undervisningen:↲
↲
Mindst ┆b0┆EN┆f0┆ microdatamat med en parallelport med mindst ↓
┆19┆┄┆81┆┄8 bit, og helst 10 bit.↲
↲
Micro'en/micro'erne bør være udstyret med en diskette┄↓
station, og en printer.↲
↲
↲
┆b0┆Undervisningens organisering:↲
↲
Hver elev skal have et eksemplar af elevteksten.↲
↲
Elev-arbejdsarkene bør forefindes i klassen i ↓
et tilstrækkeligt antal, til at eleverne frit kan ↓
benytte dem når de har lyst.↲
↲
Eleverne bør arbejde sammen to og to, eller i lidt ↓
større grupper. ↲
↲
Hver gruppe bør have sin egen diskette.↲

════════════════════════════════════════════════════════════════════════
↓
↲
↲
↲
Eleverne bør ikke sidde og programmere ved data┄ma┄↓
skinerne. Programmeringsarbejdet bør foregå i grupper ↓
"pr. håndkraft", bl.a. ved hjælp af ar┄bejds┄arkene, der ↓
er udformet som en hjælp til opstilling af en struk┄↓
tur/algoritme for løsningen af de stillede opga┄↓
ver/problemer. Der bør foreligge en kladde til de ↓
forskellige programmer før indtastningen foretages.↲
↲
Ligeledes bør fejlfindingen kun i særlige tilfælde ↓
tillades ved datamaskinerne. Normalt bør fejlfinding ↓
foregå i grupperne "pr. håndkraft".↲
↲
Det er derfor en fordel hvis eleverne nemt kan lave ↓
printerudskrifter af programmerne.↲

════════════════════════════════════════════════════════════════════════
↓
↲
↲
↲
┆b0┆Bemærkninger til elevteksten:↲
↲
Opgave 1:↲
Programmet "tal" giver eleverne lejlighed til at se ↓
hvordan decimale tal kan bruges til at styre ↓
lyspanelets lamper. Lyspanelets vælger skal stå på ↓
"BITS" !↲
↲
Opgave 2, 3, 4, og 5:↲
Disse opgaver skal gennemarbejdes selvstændigt af ↓
eleverne. De skal eksperimentere sig frem til ↓
løsningerne. Det væsentlige ved arbejdet er de ↓
diskussioner der opstår mellem eleverne. Ikke ↓
mindst i forbindelse med opgave 5.↲
↲
Opgave 6:↲
Denne opgave kan udvides med arbejdsark nr. 1 hvis det ↓
ønskes.↲
↲
Opgave 7:↲
Denne opgave er identisk med de opgaver der kan ↓
udskrives på printeren ved hjælp af programmet ↓
"BINDECopg". Programmet er selvinstruerende, og er ↓
meget simpelt at bruge.↲
↲
Opgave 8:↲
Programmet "taster" giver eleverne lejlighed til at se ↓
hvordan der er knyttet et tal til alle tegn, både ↓
skrift-tegnene og funktions-tegnene.↲
↲
Opgave 9:↲
Side 9 og 10 er opbygget så man kan se at mange af ↓
tasterne på tastaturet har 2 eller 3 funktioner. Hvis ↓
der arbejdes med et udvidet tastatur, kan de specielle ↓
taster evt. undersøges ved hjælp af arbejdsark nr. 3, ↓
der i øvrigt kan bruges hvis der skal undersøges flere ↓
taster end der er mulighed for på side 9 og 10.↲
↲
Side 12 og 13:↲
Tabellerne på disse to sider kan skrives ud på ↓
printeren ved hjælp af programmerne "SKRIFTtegn" og ↓
"FUNKTtegn".↲

════════════════════════════════════════════════════════════════════════
↓
↲
↲
↲
┆b0┆Bemærkninger til elev-arbejdsarkene:↲
↲

════════════════════════════════════════════════════════════════════════
↓
↲
↲
↲
┆b0┆┆b0┆PROBLEM  "TÆND":↲
↲
↲
┆b0┆0010 // "tænd"↲
┆b0┆0020 OPEN FILE 1,"/17/PORT", WRITE ↲
┆b0┆0030 PRINT FILE 1: CHR$(255);↲
┆b0┆0040 CLOSE FILE 1↲
┆b0┆0050 END ↲
↲
┆b0┆0020:┆f0┆ Datastrøm nummer 1 åbnes til port 17 for skriv┄↓
┆19┆┄┆81┆┄ning (WRITE). D.v.s. at data til lyspanelet bliver ↓
┆19┆┄┆81┆┄sendt til port 17 via datastrøm nr. 1.↲
↲
┆b0┆0030:┆f0┆ CHR$(255) sendes via strøm nr.1 til port 17. ↓
┆19┆┄┆81┆┄Sætningen SKAL afsluttes med ";", da der ellers vil ↓
┆19┆┄┆81┆┄blive sendt en karakter-"vognretur", d.v.s. chr$(13) ↓
┆19┆┄┆81┆┄umiddelbart efter. CHR$(255), binært 11111111, bliver ↓
┆19┆┄┆81┆┄sendt ud af porten, så alle 8 bit går HØJ, og alle 8 ↓
┆19┆┄┆81┆┄lamper tændes.↲
↲
┆b0┆0040:┆f0┆ Datastrøm nr.1 lukkes. Hvis dette ikke bliver ↓
┆19┆┄┆81┆┄gjort, vil der opstå kørselsfejl næste gang programmet ↓
┆19┆┄┆81┆┄startes: Når sætning 20 prøver at åbne datastrømmen, ↓
┆19┆┄┆81┆┄der vil være åben i forvejen, og der vil komme en ↓
┆19┆┄┆81┆┄fejlmeddelelse. I dette tilfælde lukkes datastrømmen ↓
┆19┆┄┆81┆┄med komandoen ┆b0┆CLOSE┆f0┆.↲
↲
↲
------------------------------------------------------↲
↲
↲
┆b0┆PROBLEM "SLUK":↲
↲
↲
↲
0010 // "sluk"↲
0020 OPEN FILE 1,"/17/PORT", WRITE ↲
0030 PRINT FILE 1: CHR$(┆b0┆0┆f0┆);↲
0040 CLOSE FILE 1↲
0050 END ↲
↲
┆b0┆0030:┆f0┆ Her sendes CHR$(0), binært 00000000, til ↓
┆19┆┄┆81┆┄lyspanelet, og alle bits går LAV, hvorfor alle lamper ↓
┆19┆┄┆81┆┄slukkes.↲
↲
┆b0┆NB:┆f0┆ Problemet med den åbne datastrøm kan løses på en ↓
nem måde, selvom metoden kan karakteriseres som "en ↓
dårlig vane" i programmeringsmæssig henseende. Hvis ↓
alle programmer indledes med  en CLOSE-sætning, vil ↓
programmerne starte med at lukke alle datastrømme der ↓
måtte stå åbne i forvejen. Derefter kan OPEN-↓
sætningerne udføres uden problemer!↲
↲
Det må være op til den enkelte lærer at vurdere om det ↓
er OK at lære eleverne dette "fif". Pædagogisk set må ↓
det være i orden. Programmeringsmæssigt er metoden som ↓
sagt lidt "ulden".↲
↲
------------------------------------------------------↲

════════════════════════════════════════════════════════════════════════
↓
↲
↲
↲
┆b0┆PROBLEM  "PAUSE":↲
↲
↲
Den simpleste måde at lave en pause på er en REPEAT/ ↓
UNTIL-løkke med en tæller til at fastlægge pausens ↓
længde. Så må eleverne tage tid med et stopur og køre ↓
programmet nogle gange for at finde ud af hvor mange ↓
gennemløb der skal til pr. tidsenhed:↲
↲
┆b0┆0010 // "pause-a"↲
┆b0┆0020 n:=0↲
┆b0┆0030 REPEAT ↲
┆b0┆0040   n:=n+1↲
┆b0┆0050 UNTIL n=1000↲
┆b0┆0060 END ↲
↲
↲
"pause-aTID" er et lærerprogram der benytter micro'ens ↓
interne ur til måling af antallet af gennemløb.↲
↲
------------------------------------------------------↲
↲
"pause-b" og "pause-bTID" svarer til de to ovennævnte ↓
programmer. Her er blot anvendt en FOR/NEXT-løkke:↲
↲
┆b0┆0010 // "pause-b"↲
┆b0┆0020 FOR n:=1 TO 1000 DO↲
┆b0┆0030 NEXT n↲
┆b0┆0040 END ↲
↲
------------------------------------------------------↲
↲
Den bedste metode at lave en pause på, er naturligvis ↓
at benytte micro'ens interne ur, der kan aflæses fra ↓
et program ved at tildele en talvariabel urets ↓
aktuelle klokkeslet. "pause-c" udfører en pause på 1 ↓
sekund:↲
↲
┆b0┆0010 // "pause-c"↲
┆b0┆0020 start:=SYS(3)/50↲
┆b0┆0030 REPEAT ↲
┆b0┆0040   slut:=SYS(3)/50↲
┆b0┆0050 UNTIL slut-start>=1↲
┆b0┆0060 END ↲
↲
┆b0┆0020:┆f0┆ Talvariablen START tildeles en værdi svarende ↓
┆19┆┄┆81┆┄til det aktuelle sekund-tal. START anvendes til at ↓
┆19┆┄┆81┆┄gemme klokkeslettet ved pausens start. ┆b0┆SYS(3)┆f0┆ er en ↓
┆19┆┄┆82┆┄funktion der har funktionsværdien svarende til antal┄↓
┆19┆┄┆82┆┄let af lysnettets vekselstrøm-perioder siden micro'en ↓
┆19┆┄┆82┆┄blev tændt. Vekselstrømmen er på 50 perioder pr. se┄↓
┆19┆┄┆82┆┄kund. Hvis ┆b0┆START┆f0┆ skal tildeles en værdi svarende til ↓
┆19┆┄┆83┆┄antallet af ┆b0┆hele┆f0┆ sekunder, skal SYS(3) divideres med ↓
┆19┆┄┆84┆┄50!↲
↲
┆b0┆0040:┆f0┆ Talvariablen SLUT tildeles det aktuelle ↓
┆19┆┄┆81┆┄sekund-tal. ↲
┆19┆┄┆81┆┄↲
┆b0┆0030-0050:┆f0┆ I denne løkke gentages aflæsningen af uret ↓
┆19┆┄┆81┆┄med talvariablen SLUT indtil forskellen mellem SLUT og ↓
┆19┆┄┆81┆┄START er 1, altså 1 sekund.↲
↲
------------------------------------------------------↲

════════════════════════════════════════════════════════════════════════
↓
↲
↲
↲
I "pause-cTID1" kan pauselængden varieres.↲
↲
I "pause-cTID2" er pausen skrevt som en procedure der ↓
kaldes sådan: ┆b0┆EXEC pause(3.5)┆f0┆, hvilket svarer til en ↓
┆19┆┄┆81┆┄pause på 3,5 sekunder.↲
↲
------------------------------------------------------↲
↲
"PROC-pause" indeholder ┆b0┆kun┆f0┆ proceduren fra↲
"pause-cTID2":↲
↲
┆b0┆1000 PROC pause(sekunder)↲
┆b0┆1010   start:=SYS(3)/50↲
┆b0┆1020   REPEAT ↲
┆b0┆1030     slut:=SYS(3)/50↲
┆b0┆1040   UNTIL slut-start>=sekunder↲
┆b0┆1050 ENDPROC pause↲
↲
Denne procedure er gemt på disketten som en↲
LIST-fil. Den kan derfor hentes frem og ┆b0┆blandes┆f0┆ ind i ↓
┆19┆┄┆81┆┄de kommende programmer med ENTER komandoen. Så behøver ↓
┆19┆┄┆81┆┄man ikke at skrive proceduren forfra når den skal ↓
┆19┆┄┆81┆┄bruges.↲
↲
------------------------------------------------------↲

════════════════════════════════════════════════════════════════════════
↓
↲
↲
↲
┆b0┆PROBLEM  "BLINK":↲
↲
↲
Algoritmen for blink er simpel: Først skal lampen ↓
tændes - så skal der udføres en pause - så skal lampen ↓
slukkes - så skal der udføres en pause - så skal der ↓
begyndes forfra :↲
↲
┆b0┆0010 // "blink-a1"↲
┆b0┆0020 OPEN FILE 1,"/17/PORT", WRITE ↲
┆b0┆0030 REPEAT ↲
┆b0┆0040   PRINT FILE 1: CHR$(8);      .... TÆND↲
┆b0┆0050   FOR vent:=1 TO 500 DO       .... PAUSE↲
┆b0┆0060   NEXT vent↲
┆b0┆0070   PRINT FILE 1: CHR$(0);      .... SLUK↲
┆b0┆0080   FOR vent:=1 TO 500 DO       .... PAUSE↲
┆b0┆0090   NEXT vent↲
┆b0┆0100 UNTIL FALSE                   .... FORFRA↲
┆b0┆0110 CLOSE FILE 1↲
┆b0┆0120 END ↲
↲
┆b0┆0040:┆f0┆ Decimalt 8, binært 00001000, sendes til ↓
┆19┆┄┆81┆┄lyspanelet så BIT3-lampen, og kun denne, lyser.↲
er blevet tændt. ↲
↲
┆b0┆0050-0060:┆f0┆ Pause med FOR/NEXT-løkke.↲
↲
┆b0┆0070:┆f0┆ Decimalt 0, binært 00000000, sendes til ↓
┆19┆┄┆81┆┄lyspanelet så alle 8 lamper slukkes.↲
↲
┆b0┆0080-0090:┆f0┆ Pause med FOR/NEXT-løkke.↲
↲
┆b0┆0030-00100:┆f0┆ Løkke der gentager det enkelte blink. ↓
┆19┆┄┆81┆┄Løkken kan kun standes ved at trykke på ESCAPE, ↓
┆19┆┄┆81┆┄hvorfor linierne 0110 og 0120 aldrig bliver udført.↲
↲
------------------------------------------------------↲
↲
Her er FOR/NEXT-pausen udskiftet med proceduren↲
┆b0┆pause┆f0┆:↲
↲
0010 // "blink-a2"↲
0020 OPEN FILE 1,"/17/PORT", WRITE ↲
0030 REPEAT ↲
0040   PRINT FILE 1: CHR$(8);↲
┆b0┆0050   EXEC pause(0.5)↲
0060   PRINT FILE 1: CHR$(0);↲
┆b0┆0070   EXEC pause(0.5)↲
0080 UNTIL FALSE↲
0090 CLOSE FILE 1↲
0100 END ↲
0110 //↲
┆b0┆0120 PROC pause(sekunder)↲
┆b0┆0130   start:=SYS(3)/50↲
┆b0┆0140   REPEAT ↲
┆b0┆0150     slut:=SYS(3)/50↲
┆b0┆0160   UNTIL slut-start>=sekunder↲
┆b0┆0170 ENDPROC pause↲
↲
------------------------------------------------------↲

════════════════════════════════════════════════════════════════════════
↓
↲
↲
↲
I "blink-b1" og "blink-b2" blinker alle 8 lamper fordi ↓
det decimale tal ┆b0┆255┆f0┆ sendes til lyspanelet i stedet ↓
┆19┆┄┆81┆┄for ┆b0┆8┆f0┆:↲
↲
0010 // "blink-b2"↲
0020 OPEN FILE 1,"/17/PORT", WRITE ↲
0030 REPEAT ↲
0040   PRINT FILE 1: CHR$(┆b0┆255┆f0┆);↲
0050   EXEC pause(0.5)↲
0060   PRINT FILE 1: CHR$(0);↲
0070   EXEC pause(0.5)↲
0080 UNTIL FALSE↲
0090 CLOSE FILE 1↲
0100 END ↲
0110 //↲
0120 PROC pause(sekunder)↲
0130   start:=SYS(3)/50↲
0140   REPEAT ↲
0150     slut:=SYS(3)/50↲
0160   UNTIL slut-start>=sekunder↲
0170 ENDPROC pause↲
↲
------------------------------------------------------↲
↲
Problemet med at  ┆b0┆CLOSE FILE 1┆f0┆-sætningen  aldrig ↓
┆19┆┄┆81┆┄udføres, fordi programmet standses inde i ↓
┆19┆┄┆81┆┄REPEAT/UNTIL-løkken med ESCAPE-tasten, kan løses med ↓
┆19┆┄┆81┆┄at programmet standses med en anden tast end ESCAPE, ↓
┆19┆┄┆81┆┄for eksempel MELLEMRUM-tasten, den er nem at ramme, ↓
┆19┆┄┆81┆┄eller S-tasten for STOP.↲
↲
I "blink-c1" og "blink-c2" er problemet løst ved at ↓
der i bunden af REPEAT/UNTIL-løkken undersøges om der ↓
er blevet trykket på den valgte tast eller ej: ↲
↲
0010 // "blink-c2"↲
0020 OPEN FILE 1,"/17/PORT", WRITE ↲
0030 PRINT "STOP: TRYK PÅ MELLEMRUM-TASTEN !!"↲
0040 REPEAT ↲
0050   PRINT FILE 1: CHR$(255);↲
0060   EXEC pause(0.5)↲
0070   PRINT FILE 1: CHR$(0);↲
0080   EXEC pause(0.5)↲
0090 UNTIL ┆b0┆ORD(KEY$)=32┆f0┆↲
0100 CLOSE FILE 1↲
0110 END ↲
0120 //↲
0130 PROC pause(sekunder)↲
0140   start:=SYS(3)/50↲
0150   REPEAT ↲
0160     slut:=SYS(3)/50↲
0170   UNTIL slut-start>=sekunder↲
0180 ENDPROC pause↲
↲
┆b0┆0090:┆f0┆ Valget mellem disse to muligheder er nærmet↲
en smagssag:↲
↲
┆b0┆A:    0090 UNTIL KEY$=" " ↲
┆b0┆B:    0090 UNTIL ORD(KEY$)=32 ↲
↲
------------------------------------------------------↲

════════════════════════════════════════════════════════════════════════
↓
↲
↲
↲
NB:┆f0┆ Fra dette sted i teksten udelades listningen af ↓
┆19┆┄┆81┆┄proceduren "pause(sekunder)". Den forudsættes at være ↓
┆19┆┄┆81┆┄i alle de programmer hvor procedurekaldet↲
┆19┆┄┆81┆┄EXEC pause(X) forekommer !↲
↲
------------------------------------------------------↲
↲
I "blink-d1" er den konstante pauselængde udskiftet med ↓
variablen PAUSELÆNGDE, der tildeles en værdi i ↲
INPUT-sætningen:↲
↲
↲
0010 // "blink-d1"↲
0020 ant:=20↲
0030 PRINT CHR$(12)↲
0040 OPEN FILE 1,"/17/PORT", WRITE ↲
┆b0┆0050 INPUT "SKRIV PAUSELÆNGDEN I SEKUNDER: ": ↲
┆19┆┄┆81┆┄┆b0┆                                     pauselængde↲
0060 PRINT "STOP: TRYK PÅ MELLEMRUM-TASTEN !!"↲
0070 REPEAT ↲
0080   PRINT FILE 1: CHR$(255);↲
0090   EXEC pause(┆b0┆pauselængde┆f0┆)↲
0100   PRINT FILE 1: CHR$(0);↲
0110   EXEC pause(┆b0┆pauselængde┆f0┆)↲
0120 UNTIL ORD(KEY$)=32↲
0130 CLOSE FILE 1↲
0140 END ↲
↲
------------------------------------------------------↲
↲
Variationen i blinkhastigheden kan også defineres som ↓
en ændring af blinkfrekvensen, altså antal brink pr. ↓
sekund. I "blink-d2" tildeles BLINKFREKVENSEN en værdi ↓
i INPUT-sætningen, hvorefter pauselængden fastsættes i ↓
linie 0050, så lysperioden og mørkeperioden er lige ↓
lange for de enkelte blink:↲
↲
0010 // "blink-d2"↲
0020 PRINT CHR$(12)↲
0030 OPEN FILE 1,"/17/PORT", WRITE ↲
┆b0┆0040 INPUT "SKRIV ANTAL BLINK PR. SEKUND: ": ↲
┆19┆┄┆81┆┄┆b0┆                                blinkfrekvens↲
┆b0┆0050 pauselængde:=1/(blinkfrekvens*2)↲
0060 PRINT "STOP: TRYK PÅ MELLEMRUM-TASTEN !!"↲
0070 REPEAT ↲
0080   PRINT FILE 1: CHR$(255);↲
0090   EXEC pause(┆b0┆pauselængde┆f0┆)↲
0100   PRINT FILE 1: CHR$(0);↲
0110   EXEC pause(┆b0┆pauselængde┆f0┆)↲
0120 UNTIL ORD(KEY$)=32↲
0130 CLOSE FILE 1↲
0140 END ↲
↲
------------------------------------------------------↲

════════════════════════════════════════════════════════════════════════
↓
↲
↲
↲
I "blink-e" fastlægges lysperioden og mørkeperioden i ↓
to tildelingssætninger:↲
↲
0010 // "blink-e"↲
0020 PRINT CHR$(12)↲
0030 OPEN FILE 1,"/17/PORT", WRITE ↲
┆b0┆0040 lysperiode:=1↲
┆b0┆0050 mørkeperiode:=0.5↲
0060 PRINT "STOP: TRYK PÅ MELLEMRUM-TASTEN !!"↲
0070 REPEAT ↲
0080   PRINT FILE 1: CHR$(255);↲
0090   EXEC pause(┆b0┆lysperiode┆f0┆)↲
0100   PRINT FILE 1: CHR$(0);↲
0110   EXEC pause(┆b0┆mørkeperiode┆f0┆)↲
0120 UNTIL ORD(KEY$)=32↲
0130 CLOSE FILE 1↲
0140 END ↲
↲
------------------------------------------------------↲
↲
I "blink-f" kan lysperioden og mørkeperioden varieres:↲
↲
0010 // "blink-f"↲
0020 PRINT CHR$(12)↲
0030 OPEN FILE 1,"/17/PORT", WRITE ↲
┆b0┆0040 INPUT "SKRIV LYSPERIODEN   I SEKUNDER: ": ↲
┆19┆┄┆81┆┄┆b0┆                                      lysperiode↲
┆b0┆0050 INPUT "SKRIV MØRKEPERIODEN I SEKUNDER: ": ↲
┆b0┆                                      mørkeperiode↲
0060 PRINT "STOP: TRYK PÅ MELLEMRUM-TASTEN !!"↲
0070 REPEAT ↲
0080   PRINT FILE 1: CHR$(255);↲
0090   EXEC pause(┆b0┆lysperiode┆f0┆)↲
0100   PRINT FILE 1: CHR$(0);↲
0110   EXEC pause(┆b0┆mørkeperiode┆f0┆)↲
0120 UNTIL ORD(KEY$)=32↲
0130 CLOSE FILE 1↲
0140 END ↲
↲
------------------------------------------------------↲

════════════════════════════════════════════════════════════════════════
↓
↲
↲
↲
┆b0┆PROBLEM  "REAKTION":↲
↲
↲
Lamperne skal tændes et tilfældigt antal sekunder ↓
efter at programmet er startet, hvorefter lamperne ↓
skal slukkes når en tast bliver trykket ned:↲
↲
┆b0┆0010 // "reaktion-a"↲
┆b0┆0020 RANDOMIZE↲
┆b0┆0030 PRINT CHR$(12)↲
┆b0┆0040 OPEN FILE 1,"/17/PORT", WRITE ↲
┆b0┆0050 EXEC pause(RND(3,7))↲
┆b0┆0060 PRINT FILE 1: CHR$(255);↲
┆b0┆0070 REPEAT ↲
┆b0┆0080 UNTIL ORD(KEY$)<>0↲
┆b0┆0090 PRINT FILE 1: CHR$(0);↲
┆b0┆0100 CLOSE ↲
┆b0┆0110 END ↲
↲
┆b0┆0050┆f0┆: Her udføres en pause på mellem 3 og 7 sekunder, ↓
┆19┆┄┆81┆┄tilfældigt udtaget. ↲
↲
┆b0┆0060┆f0┆: Alle 8 lamper tændes.↲
↲
┆b0┆0070-0080┆f0┆: Her ventes der til en eller anden tast ↓
┆19┆┄┆81┆┄bliver trykket ned.↲
↲
┆b0┆0090┆f0┆: Alle lamper slukkes.↲
↲
------------------------------------------------------↲
↲
Nu skal der tages tid på hvor længe det varer fra ↓
lamperne bliver tændt, til der trykkes på en tast:↲
↲
0010 // "reaktion-b"↲
0020 RANDOMIZE↲
0030 PRINT CHR$(12)↲
0040 OPEN FILE 1,"/17/PORT", WRITE ↲
┆b0┆0050 DIM videre$ OF 10↲
┆b0┆0060 INPUT "TRYK <RETURN> NÅR DU ER KLAR !!": videre$↲
0070 EXEC pause(RND(3,7))↲
0080 PRINT FILE 1: CHR$(255);↲
┆b0┆0090 start:=SYS(3)/50↲
0100 REPEAT ↲
0110 UNTIL ORD(KEY$)<>0↲
┆b0┆0120 slut:=SYS(3)/50↲
0130 PRINT FILE 1: CHR$(0);↲
┆b0┆0140 reaktionstid:=slut-start↲
┆b0┆0150 PRINT "REAKTIONSTID: ";reaktionstid;" sek."↲
0160 CLOSE ↲
0170 END ↲
↲
┆b0┆0060┆f0┆: Her skal der trykkes på RETURN-tasten før ↓
┆19┆┄┆81┆┄reaktionsmålingen foretages. ┆b0┆videre$┆f0┆ er en dummy-↓
┆19┆┄┆82┆┄variabel der kun bruges til at standse program┄af┄vik┄↓
┆19┆┄┆82┆┄lingen indtil der trykkes på RETURN-tasten.↲

════════════════════════════════════════════════════════════════════════
↓
↲
↲
↲
┆b0┆0090 og 0120┆f0┆: Micro'ens interne ur aflæses i starten ↓
┆19┆┄┆81┆┄(┆b0┆start┆f0┆) og i slutningen (┆b0┆slut┆f0┆) af reaktionsperioden.↲
↲
┆b0┆0140┆f0┆: Reaktionstiden beregnes.↲
↲
┆b0┆0150┆f0┆: Reaktionstiden skrives på skærmen.↲
↲
------------------------------------------------------↲
↲
I "reaktion-c" er data-transmissionen til lyspanelet ↓
erstattet med CHR$(7), der får microen til at give et ↓
dyt eller et beep:↲
↲
0010 // "reaktion-c"↲
0020 PRINT CHR$(12)↲
0030 RANDOMIZE ↲
0040 DIM videre$ OF 10↲
0050 INPUT "TRYK <RETURN> NÅR DU ER KLAR !!": videre$↲
0060 EXEC pause(RND(3,7))↲
┆b0┆0070 PRINT CHR$(7)↲
0080 start:=SYS(3)/50↲
0090 REPEAT ↲
0100 UNTIL ORD(KEY$)<>0↲
0110 slut:=SYS(3)/50↲
0120 reaktionstid:=slut-start↲
0130 PRINT "REAKTIONSTID: ";reaktionstid;" sek."↲
0140 END ↲
↲
-----------------------------------------------------↲
↲
↲
Normalt er man hurtigere til at reagere på et lyd-↓
signal, end på et lys-signal. Men det er der jo ↓
mulighed for at undersøge med de to ovenstående ↓
programmer.↲

════════════════════════════════════════════════════════════════════════
↓
↲
↲
↲
┆b0┆PROBLEM "FYR":↲
↲
↲
Her er beskrevet "fyr-d" som en mulig løsning på ↓
problemet i elevteksten:↲
↲
┆b0┆0010 // "fyr-d"↲
┆b0┆0020 CLOSE ↲
┆b0┆0030 OPEN FILE 1,"/17/PORT", WRITE ↲
┆b0┆0040 PRINT FILE 1: CHR$(0);↲
┆b0┆0050 REPEAT ↲
┆b0┆0060   EXEC lys(4)↲
┆b0┆0070   EXEC mørke(2)↲
┆b0┆0080   EXEC isofaseblink(5,2)↲
┆b0┆0090   EXEC hurtigblink(20)↲
┆b0┆0100   EXEC gruppeblink(5,3)↲
┆b0┆0110 UNTIL ORD(KEY$)=32↲
┆b0┆0120 PRINT FILE 1: CHR$(0);↲
┆b0┆0130 CLOSE FILE 1↲
┆b0┆0140 END ↲
↲
┆b0┆0040┆f0┆: Her slukkes alle lamper der måtte være tændt før ↓
┆19┆┄┆81┆┄programmet blev startet.↲
↲
┆b0┆0060-0100┆f0┆: Her er selve fyrets karakteristik som ↓
┆19┆┄┆81┆┄procedurekald. ↲
↲
------------------------------------------------------↲
↲
┆b0┆EXEC lys(4)┆f0┆ tænder fyret i 4 sekunder:↲
↲
┆b0┆0160 PROC lys(sek)↲
┆b0┆0170   PRINT FILE 1: CHR$(255);↲
┆b0┆0180   EXEC pause(sek)↲
┆b0┆0190   PRINT FILE 1: CHR$(0);↲
┆b0┆0200 ENDPROC lys↲
↲
------------------------------------------------------↲
↲
┆b0┆EXEC mørke(2)┆f0┆ slukker fyret i 2 sekunder: ↲
↲
┆b0┆0220 PROC mørke(sek)↲
┆b0┆0230   PRINT FILE 1: CHR$(0);↲
┆b0┆0240   EXEC pause(sek)↲
┆b0┆0250 ENDPROC mørke↲
↲
------------------------------------------------------↲
↲
┆b0┆EXEC isofaseblink(5,2)┆f0┆ får fyret til at give 5 blink, ↓
┆19┆┄┆81┆┄hvor ┆b0┆hvert┆f0┆ blink består af en lysperiode og en ↓
┆19┆┄┆82┆┄mørkeperiode der er lige lange (=isofase), tilsammen 2 ↓
┆19┆┄┆82┆┄sekunder. ┆b0┆blinktid┆f0┆ er altså lysperioden + mørke┄↓
┆19┆┄┆83┆┄perioden:↲
↲
┆b0┆0270 PROC isofaseblink(antalblink,blinktid)↲
┆b0┆0280   FOR blink:=1 TO antalblink DO↲
┆b0┆0290     EXEC lys(blinktid/2)↲
┆b0┆0300     EXEC mørke(blinktid/2)↲
┆b0┆0310   NEXT blink↲
┆b0┆0320 ENDPROC isofaseblink↲
↲
------------------------------------------------------↲

════════════════════════════════════════════════════════════════════════
↓
↲
↲
↲
┆b0┆EXEC hurtigblink(20)┆f0┆ får fyret til at give 20 hurtige ↓
┆19┆┄┆81┆┄blink, d.v.s. 60 blink pr. minut. Lysperioden er lige ↓
┆19┆┄┆81┆┄så lang som mørkeperioden:↲
↲
┆b0┆0340 PROC hurtigblink(antalblink)↲
┆b0┆0350   FOR blink:=1 TO antalblink DO↲
┆b0┆0360     EXEC lys(0.5)↲
┆b0┆0370     EXEC mørke(0.5)↲
┆b0┆0380   NEXT blink↲
┆b0┆0390 ENDPROC hurtigblink↲
↲
------------------------------------------------------↲
↲
┆b0┆EXEC gruppeblink(5,3)┆f0┆ får fyret til at give 5 blink┄↓
┆19┆┄┆81┆┄grupper a' 3 blink. Lysperioden og mørkeperioden er ↓
┆19┆┄┆81┆┄begge på et halvt sekund, og pausen mellem grupperne ↓
┆19┆┄┆81┆┄er på 3 sekunder:↲
↲
┆b0┆0410 PROC gruppeblink(antalgrupper,antalgpblink)↲
┆b0┆0420   FOR gruppe:=1 TO antalgrupper DO↲
┆b0┆0430     FOR gpblink:=1 TO antalgpblink DO↲
┆b0┆0440       EXEC lys(0.5)↲
┆b0┆0450       EXEC mørke(0.5)↲
┆b0┆0460     NEXT gpblink↲
┆b0┆0470     EXEC pause(3)↲
┆b0┆0480   NEXT gruppe↲
┆b0┆0490 ENDPROC gruppeblink↲
↲
┆b0┆0430-460┆f0┆: Den enkelte blink-gruppe.↲
↲
┆b0┆0420-480┆f0┆: Antallet af blink-grupper.↲
↲
┆b0┆0470┆f0┆: Pausen mellem blink-grupperne.↲
↲
------------------------------------------------------↲
↲
Og her ┆b0┆PROC pause(X)┆f0┆:↲
↲
┆b0┆0510 PROC pause(sekunder)↲
┆b0┆0520   start:=SYS(3)/50↲
┆b0┆0530   REPEAT ↲
┆b0┆0540     slut:=SYS(3)/50↲
┆b0┆0550   UNTIL slut-start>=sekunder↲
┆b0┆0560 ENDPROC pause↲
↲
------------------------------------------------------↲
↲
↲
Programmet kan naturligvis udbygges efter ønske. I ↓
elevteksten er der eksempler på andre fyr-karakteri┆1e┆↲
stikker.↲

════════════════════════════════════════════════════════════════════════
↓
↲
↲
↲
┆b0┆PROBLEM "MORSE":↲
↲
↲
"SOS" ( ...---... ) kan laves efter "GØG-OG-GOKKE-↓
METODEN", altså med en "PRINT FILE"-sætning til hver ↓
prik/streg samt et procedurekald mellem alle ↓
prikker/streger. "morse-a" er lavet efter dette ↓
princip, som naturligvis er en besværlig løsning. ↓
Men det virker:↲
↲
┆b0┆0010 // "morse-a"↲
┆b0┆0020 CLOSE ↲
┆b0┆0030 OPEN FILE 1,"/17/PORT", WRITE ↲
┆b0┆0040 REPEAT ↲
↲
Her kommer de tre prikker:↲
┆b0┆0060   PRINT FILE 1: CHR$(255);↲
┆b0┆0070   EXEC pause(0.2)↲
┆b0┆0080   PRINT FILE 1: CHR$(0);↲
┆b0┆0090   EXEC pause(0.2)↲
┆b0┆0100   PRINT FILE 1: CHR$(255);↲
┆b0┆0110   EXEC pause(0.2)↲
┆b0┆0120   PRINT FILE 1: CHR$(0);↲
┆b0┆0130   EXEC pause(0.2)↲
┆b0┆0140   PRINT FILE 1: CHR$(255);↲
┆b0┆0150   EXEC pause(0.2)↲
┆b0┆0160   PRINT FILE 1: CHR$(0);↲
┆b0┆0170   EXEC pause(0.2)↲
┆b0┆0190   EXEC pause(1)↲
↲
Her kommer de tre streger:↲
┆b0┆0210   PRINT FILE 1: CHR$(255);↲
┆b0┆0220   EXEC pause(0.5)↲
┆b0┆0230   PRINT FILE 1: CHR$(0);↲
┆b0┆0240   EXEC pause(0.2)↲
┆b0┆0250   PRINT FILE 1: CHR$(255);↲
┆b0┆0260   EXEC pause(0.5)↲
┆b0┆0270   PRINT FILE 1: CHR$(0);↲
┆b0┆0280   EXEC pause(0.2)↲
┆b0┆0290   PRINT FILE 1: CHR$(255);↲
┆b0┆0300   EXEC pause(0.5)↲
┆b0┆0310   PRINT FILE 1: CHR$(0);↲
┆b0┆0320   EXEC pause(0.2)↲
┆b0┆0340   EXEC pause(1)↲
↲
Og her er så tre prikker igen:↲
┆b0┆0360   PRINT FILE 1: CHR$(255);↲
┆b0┆0370   EXEC pause(0.2)↲
┆b0┆.↲
o.s.v.↲
↲
Og til sidst afslutningen på programmet:↲
┆b0┆0510 UNTIL ORD(KEY$)=32↲
┆b0┆0520 PRINT FILE 1: CHR$(0);↲
┆b0┆0530 CLOSE ↲
┆b0┆0540 END ↲
↲
------------------------------------------------------↲

════════════════════════════════════════════════════════════════════════
↓
↲
↲
↲
"morse-b" er en løsning på det samme problem. Her er ↓
der lavet en procedure til hhv. en prik og en streg:↲
↲
↲
┆b0┆0010 // "morse-b"↲
┆b0┆0020 CLOSE ↲
┆b0┆0030 OPEN FILE 1,"/17/PORT", WRITE ↲
┆b0┆0040 PRINT FILE 1: CHR$(0);↲
┆b0┆0050 REPEAT ↲
┆b0┆0070   EXEC prik(3)↲
┆b0┆0080   EXEC mellemrum(1)↲
┆b0┆0090   EXEC streg(3)↲
┆b0┆0100   EXEC mellemrum(1)↲
┆b0┆0110   EXEC prik(3)↲
┆b0┆0120   EXEC mellemrum(7)↲
┆b0┆0140 UNTIL ORD(KEY$)=32↲
┆b0┆0150 PRINT FILE 1: CHR$(0);↲
┆b0┆0160 CLOSE ↲
┆b0┆0170 END ↲
↲
┆b0┆0190 PROC mellemrum(antal)↲
┆b0┆0200   FOR n:=1 TO antal DO EXEC pause(0.2)↲
┆b0┆0210 ENDPROC mellemrum↲
↲
┆b0┆0230 PROC prik(antal)↲
┆b0┆0240   FOR priknr:=1 TO antal DO↲
┆b0┆0250     PRINT FILE 1: CHR$(255);↲
┆b0┆0260     EXEC pause(0.2)↲
┆b0┆0270     PRINT FILE 1: CHR$(0);↲
┆b0┆0280     EXEC pause(0.2)↲
┆b0┆0290   NEXT priknr↲
┆b0┆0300 ENDPROC prik↲
┆b0┆↲
┆b0┆0320 PROC streg(antal)↲
┆b0┆0330   FOR stregnr:=1 TO antal DO↲
┆b0┆0340     PRINT FILE 1: CHR$(255);↲
┆b0┆0350     EXEC pause(0.5)↲
┆b0┆0360     PRINT FILE 1: CHR$(0);↲
┆b0┆0370     EXEC pause(0.2)↲
┆b0┆0380   NEXT stregnr↲
┆b0┆0390 ENDPROC streg↲
↲
↲
┆b0┆0070-0120┆f0┆: Her "kaldes" prikkerne og stregerne hver ↓
┆19┆┄┆81┆┄for sig. ┆b0┆EXEC mellemrum(1)┆f0┆ svarer til mellemrum mellem ↓
┆19┆┄┆82┆┄prikkerne og stregerne i og mellem bogstaverne, og ↓
┆19┆┄┆82┆┄┆b0┆EXEC mellemrum(7)┆f0┆ svarer til mellemrum mellem ordene.    ↲
↲
┆b0┆0190-0210┆f0┆: Et mellemrum svarer blot til en pause på ↓
┆19┆┄┆81┆┄0.2 sekunder.↲
↲
┆b0┆0230-0300┆f0┆: En prik består af en lysperiode på 0.2 ↓
┆19┆┄┆81┆┄sekunder og en mørkeperiode på 0.2 sekunder.↲
↲
┆b0┆032-0390┆f0┆: En streg består af en lysperiode på 0.5 ↓
┆19┆┄┆81┆┄sekunder og en mørkeperiode på 0.2 sekunder.↲
↲
Lys- og mørkeperioderne bør selvfølgelig fastlægges ↓
efter elevernes egne ønsker.↲

════════════════════════════════════════════════════════════════════════
↓
↲
↲
↲
I "morse-c" er muligheden for at variere morse-↓
hastigheden tilføjet. Her er "normalhastigheden" sat ↓
til 100%. Hvis hastigheden skal halveres, skal der ↓
således indtastes  ┆b0┆50┆f0┆  for 50%, og ┆b0┆200┆f0┆ for at fordoble ↓
┆19┆┄┆82┆┄hastigheden, d.v.s. 200%:↲
↲
Her er selve programmets struktur afspejlet i ↓
procedurekaldene:↲
↲
┆b0┆0010 // "morse-c"↲
┆b0┆0020 EXEC åbne_port↲
┆b0┆0030 EXEC ind_hastighed↲
┆b0┆0040 EXEC blink↲
┆b0┆0050 EXEC lukke_port↲
┆b0┆0060 END ↲
↲
------------------------------------------------------↲
↲
Her åbnes port 17, og lamperne slukkes:↲
↲
┆b0┆0080 PROC åbne_port↲
┆b0┆0090   CLOSE ↲
┆b0┆0100   OPEN FILE 1,"/17/PORT", WRITE ↲
┆b0┆0110   PRINT FILE 1: CHR$(0);↲
┆b0┆0120 ENDPROC åbne_port↲
↲
------------------------------------------------------↲
↲
Her indtastes blink-hastigheden:↲
↲
┆b0┆0140 PROC ind_hastighed↲
┆b0┆0150   PRINT CHR$(12)↲
┆b0┆0160   INPUT "SKRIV HASTIGHED (normal=100%): ": ↲
┆19┆┄┆81┆┄┆b0┆                                         hastighed↲
┆b0┆0170   mellemrumlængde:=0.2/hastighed x 100↲
┆b0┆0180   priklængde:=0.2/hastighed x 100↲
┆b0┆0190   streglængde:=0.5/hastighed x 100↲
┆b0┆0200 ENDPROC ind_hastighed↲
↲
------------------------------------------------------↲
↲
Og her udføres selve blink-sekvensen ligesom i↲
"morse-b":↲
↲
┆b0┆0220 PROC blink↲
┆b0┆0230   REPEAT ↲
┆b0┆0240     EXEC prik(3)↲
┆b0┆0250     EXEC mellemrum(1)↲
┆b0┆0260     EXEC streg(3)↲
┆b0┆0270     EXEC mellemrum(1)↲
┆b0┆0280     EXEC prik(3)↲
┆b0┆0290     EXEC mellemrum(7)↲
┆b0┆0300   UNTIL ORD(KEY$)=32↲
┆b0┆0310 ENDPROC blink↲
↲
------------------------------------------------------↲

════════════════════════════════════════════════════════════════════════
↓
↲
↲
↲
Til sidst slukkes lamperne og datastrømmen lukkes:↲
↲
┆b0┆0330 PROC lukke_port↲
┆b0┆0340   PRINT FILE 1: CHR$(0);↲
┆b0┆0350   CLOSE ↲
┆b0┆0360 ENDPROC lukke_port↲
↲
------------------------------------------------------↲
↲
↲
↲
Procedurerne ┆b0┆prik┆f0┆, ┆b0┆streg┆f0┆ og ┆b0┆pause┆f0┆ er som i programmet ↓
┆19┆┄┆83┆┄"morse-b".↲

════════════════════════════════════════════════════════════════════════
↓
↲
↲
↲
"morse-d" blinker navnet ┆b0┆OLE┆f0┆ (/---/.-.././). Her blot proceduren ↓
┆19┆┄┆81┆┄┆b0┆blink┆f0┆:↲
↲
┆b0┆0240 PROC blink↲
┆b0┆0250   REPEAT ↲
┆b0┆0260     // ---------------↲
┆b0┆0270     EXEC streg(3)           .... O ↲
┆b0┆0280     EXEC mellemrum(5)↲
┆b0┆0290     // ---------------↲
┆b0┆0300     EXEC prik(1)            .... L ↲
┆b0┆0310     EXEC streg(1)↲
┆b0┆0320     EXEC prik(2)↲
┆b0┆0330     EXEC mellemrum(5)↲
┆b0┆0340     // ---------------↲
┆b0┆0350     EXEC prik(1)            .... E↲
┆b0┆0360     EXEC mellemrum(5)↲
┆b0┆0370     // ---------------↲
┆b0┆0380     EXEC mellemrum(5)↲
┆b0┆0390     // ---------------↲
┆b0┆0400   UNTIL ORD(KEY$)=32↲
┆b0┆0410 ENDPROC blink↲
↲
------------------------------------------------------↲
↲
↲
Det skal nævnes, at morseprogrammerne er svære, ↓
┆19┆┄┆81┆┄og det vil ikke være forkert at springe dem over hvis ↓
┆19┆┄┆82┆┄elevernes forudsætninger eller interesse ikke slår ↓
┆19┆┄┆83┆┄til.↲
↲
"morse-e", på næste side, er for eksempel i overkanten ↓
af hvad eleverne må forventes at kunne klare.↲

════════════════════════════════════════════════════════════════════════
↓
↲
↲
↲
"morse-e" er et løsningsforslag til et "generelt" ↓
morseprogram, hvor der blot skal indtastes en tekst på ↓
skærmen og trykkes <RETURN>. Det er absolut i ↓
overkanten hvad sværhedsgraden angår. ↲
↲

╱04002d4e0a00060000000002074d31400000000000000000000000000000000000000000000000000b151f29333d47515b656f79838d97ff04╱

╱04002d4e0a000600000000021449314000000000000000000000000000000000000000000000000018222c36404a545e68727c86909aa4ff04╱
↓
┆b0┆0010 // "morse-e"↲
┆b0┆0020 dec:=255↲
┆b0┆0030 CLOSE ↲
┆b0┆0040 OPEN FILE 1,"/17/PORT", WRITE ↲
┆b0┆0050 DIM morsetegn$(96) OF 10,tekst$ OF 80↲
┆b0┆0060 FOR tegn:=97 TO 122 DO READ morsetegn$(tegn-96)↲
↲
┆b0┆0070 DATA ".-","-...","-.-.","-..",".","..-.","--.","....","..",".---"↲
┆b0┆0080 DATA "-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-"↲
┆b0┆0090 DATA "..-","...-",".--","-..-","-.--","--.."↲
↲
┆b0┆0110 INPUT "SKRIV TEKST: ": tekst$↲
┆b0┆0120 PRINT ↲
┆b0┆0130 INPUT "SKRIV HASTIGHED (100=normal): ": hastighed↲
↲
┆b0┆0140 FOR tegnnr:=1 TO LEN(tekst$) DO↲
┆b0┆0150   morsetegnnr:=ORD(tekst$(tegnnr:tegnnr))-96↲
┆b0┆0160   FOR signal:=1 TO LEN(morsetegn$(morsetegnnr)) DO↲
┆b0┆0170     IF morsetegn$(morsetegnnr,signal:signal)="." THEN EXEC prik↲
┆b0┆0180     IF morsetegn$(morsetegnnr,signal:signal)="-" THEN EXEC streg↲
┆b0┆0190   NEXT signal↲
┆b0┆0200   EXEC pause(1/hastighed x 100)↲
┆b0┆0210 NEXT tegnnr↲
↲
┆b0┆0230 PROC prik↲
┆b0┆0240   PRINT FILE 1: CHR$(255)↲
┆b0┆0250   EXEC pause(0.25/hastighed x 100)↲
┆b0┆0260   PRINT FILE 1: CHR$(0);↲
┆b0┆0270   EXEC pause(0.2/hastighed x 100)↲
┆b0┆0280 ENDPROC prik↲
↲
┆b0┆0300 PROC streg↲
┆b0┆0310   PRINT FILE 1: CHR$(255);↲
┆b0┆0320   EXEC pause(0.6/hastighed x 100)↲
┆b0┆0330   PRINT FILE 1: CHR$(0);↲
┆b0┆0340   EXEC pause(0.2/hastighed x 100)↲
┆b0┆0340 ENDPROC streg↲

╱04002d4e0a00060000000002144a314000000000000000000000000000000000000000000000000018222c36404a545e68727c86909aa4ff04╱

╱04002d4e0a00060000000002074d31400000000000000000000000000000000000000000000000000b151f29333d47515b656f79838d97ff04╱
↓
↲
┆b0┆0060-0090┆f0┆: Her tildeles tekstvariablen ┆b0┆morsetegn$┆f0┆ de ↓
┆19┆┄┆82┆┄enkelte morsetegns udseende læst fra DATA-sætningerne.↲
↲
┆b0┆0110┆f0┆: Her tildeles ┆b0┆tekst$┆f0┆ den ønskede tekst.↲
↲
┆b0┆0160-0190┆f0┆: Her udføres de enkelte morsesignaler, altså ↓
┆19┆┄┆81┆┄de enkelte prikker og streger.↲
↲
┆b0┆0140-0210┆f0┆: Her udføres de enkelte bogstaver, der består ↓
┆19┆┄┆81┆┄af et eller flere morsesignaler (=prikker og streger).↲
↲
┆b0┆0200┆f0┆: Her udføres mellemrummmene mellem de enkelte ↓
┆19┆┄┆81┆┄bogstaver.↲
↲
Som det kan ses, kræver denne opgave, at eleverne er ↓
fortrolige med variable med index, samt del-strenge. Så ↓
opgaven er god hvis der er et par skrappe elever der ↓
mangler lidt udfordring.↲

════════════════════════════════════════════════════════════════════════
↓
↲
↲
↲
┆b0┆PROBLEM "LØBELYS":↲
↲
↲
I "løb-a1" er anvendt "GØG-OG-GOKKE-METODEN", idet ↓
hvert gennemløb består at 8 "PRINT FILE"-sætninger. ↓
Lyset løber kun ┆b0┆en┆f0┆ gang fra venstre mod højre:↲
↲
┆b0┆0010 // "løb-a1"↲
┆b0┆0020 OPEN FILE 1,"/17/PORT", WRITE ↲
┆b0┆0030 PRINT FILE 1: CHR$(1);↲
┆b0┆0040 EXEC pause(0.3)↲
┆b0┆0050 PRINT FILE 1: CHR$(2);↲
┆b0┆0060 EXEC pause(0.3)↲
┆b0┆0070 PRINT FILE 1: CHR$(4);↲
┆b0┆0080 EXEC pause(0.3)↲
┆b0┆0090 PRINT FILE 1: CHR$(8);↲
┆b0┆0100 EXEC pause(0.3)↲
┆b0┆0110 PRINT FILE 1: CHR$(16);↲
┆b0┆0120 EXEC pause(0.3)↲
┆b0┆0130 PRINT FILE 1: CHR$(32);↲
┆b0┆0140 EXEC pause(0.3)↲
┆b0┆0150 PRINT FILE 1: CHR$(64);↲
┆b0┆0160 EXEC pause(0.3)↲
┆b0┆0170 PRINT FILE 1: CHR$(128);↲
┆b0┆0180 EXEC pause(0.3)↲
┆b0┆0190 CLOSE FILE 1↲
┆b0┆0200 END ↲
↲
------------------------------------------------------↲
↲
Problemet bør løses på en mere elegant måde, nemlig med en ↓
FOR/NEXT-løkke, hvor et gennemløb kan udtrykkes ↓
simpelt rent matematisk: 2 opløftet til en potens ↓
svarende til bit-nummeret, altså  2 i nulte (=1), 2 i ↓
første (=2), 2 i anden (=4), 2 i tredie (=8), ... ↓
o.s.v..↲
↲
I "løb-a2" er det gjort sådan:↲
↲
┆b0┆0010 // "løb-a2"↲
┆b0┆0020 OPEN FILE 1,"/17/PORT", WRITE ↲
┆b0┆0030 FOR n:=0 TO 7 DO↲
┆b0┆0040   PRINT FILE 1: CHR$(2^n);↲
┆b0┆0050   EXEC pause(0.3)↲
┆b0┆0060 NEXT n↲
┆b0┆0070 CLOSE FILE 1↲
┆b0┆0080 END ↲
↲
------------------------------------------------------↲
↲
I "løb-b" er FOR/NEXT-løkken lagt ind i en "REPEAT-↓
UNTIL"-løkke, for at få gennemløbet gentaget indtil ↓
der trykkes på mellemrum-tasten:↲
↲
┆b0┆0040 REPEAT ↲
0050   FOR bit:=0 TO 7 DO↲
0060     PRINT FILE 1: CHR$(2^bit);↲
0070     EXEC pause(0.3)↲
0080   NEXT bit↲
┆b0┆0090 UNTIL ORD(KEY$)=32↲
↲
------------------------------------------------------↲

════════════════════════════════════════════════════════════════════════
↓
↲
↲
↲
I "løb-c" er tilføjet muligheden for at variere ↓
blinkfrekvensen:↲
↲
0010 // "løb-c"↲
0020 OPEN FILE 1,"/17/PORT", WRITE ↲
┆b0┆0030 PRINT "SKRIV LYSPERIODEN"↲
┆b0┆0040 PRINT "I SEKUNDER"↲
┆b0┆0050 INPUT "FOR HVER PÆRE: ": lysperiode↲
0060 PRINT ↲
0070 PRINT "STOP: TRYK PÅ MELLEMRUM-TASTEN !!"↲
0080 REPEAT ↲
0090   FOR bit:=0 TO 7 DO↲
0100     PRINT FILE 1: CHR$(2^bit);↲
0110     EXEC pause(┆b0┆lysperiode┆f0┆)↲
0120   NEXT bit↲
0130 UNTIL ORD(KEY$)=32↲
0140 PRINT FILE 1: CHR$(0);↲
0150 CLOSE FILE 1↲
0160 END ↲
↲
------------------------------------------------------↲
↲
I "løb-d" gennemløbes FOR/NEXT-løkken med et ↓
negativt STEP, svarende til at BIT-7 pæren begynder og ↓
BIT-0 pæren slutter hvert gennemløb:↲
↲
┆b0┆0090   FOR bit:=7 TO 0 STEP -1 DO↲
┆b0┆0100     PRINT FILE 1: CHR$(2^bit);↲
┆b0┆0110     EXEC pause(lysperiode)↲
┆b0┆0120   NEXT bit↲
↲
------------------------------------------------------↲
↲
I "løb-e1" er det talvariablen ┆b0┆ DECTAL┆f0┆ der sendes til ↓
┆19┆┄┆81┆┄lyspanelet. ┆b0┆DECTAL┆f0┆ forøges i FOR/NEXT-løkken med et ↓
┆19┆┄┆82┆┄tal svarende til hver lampes decimale tal, således at ↓
┆19┆┄┆82┆┄┆b0┆DECTAL┆f0┆ opsummerers. Bemærk at BIT-0 pæren forbliver ↓
┆19┆┄┆83┆┄tændt under programmets afvikling:↲
↲
┆b0┆0080 REPEAT ↲
┆b0┆0090   dectal:=0↲
┆b0┆0100   FOR bit:=0 TO 7 DO↲
┆b0┆0110     dectal:=dectal+2^bit↲
┆b0┆0120     PRINT FILE 1: CHR$(dectal);↲
┆b0┆0130     EXEC pause(lysperiode)↲
┆b0┆0140   NEXT bit↲
┆b0┆0150 UNTIL ORD(KEY$)=32↲
↲
------------------------------------------------------↲

════════════════════════════════════════════════════════════════════════
↓
↲
↲
↲
I "løb-e2" indledes FOR/NEXT-løkken med at 0 sendes ↓
til lyuspanelet så alle pærer slukkes, og der udføres ↓
en pause før pærerne begynder at lyse op. På denne ↓
måde slukkes også BIT-0 pæren i hver gennemløb:↲
↲
0080 REPEAT ↲
┆b0┆0090   PRINT FILE 1: CHR$(0);↲
┆b0┆0100   EXEC pause(lysperiode)↲
0110   dectal:=0↲
0120   FOR bit:=0 TO 7 DO↲
0130     dectal:=dectal+2^bit↲
0140     PRINT FILE 1: CHR$(dectal);↲
0150     EXEC pause(lysperiode)↲
0160   NEXT bit↲
0170 UNTIL ORD(KEY$)=32↲
↲
------------------------------------------------------↲
↲
"løb-e3" virker som "løb-e2". Her er den største 2-↓
talspotens blot 8 i stedet for 7. 2 opløftet til 8 er ↓
256, hvilket svarer til 100000000 binært. Der skal ↓
altså 9 bit til, hvor lyspanelet kun viser de 8 ↓
laveste bit. Igen lamper lyser derfor hvis 2 opløftet ↓
til 8. potens ( =256 )  sendes til lyspanelet:↲
↲
┆b0┆0090   FOR bit:=0 TO 8 DO↲
┆b0┆0100     PRINT FILE 1: CHR$(2^bit-1);↲
┆b0┆0110     EXEC pause(lysperiode)↲
┆b0┆0120   NEXT bit↲
↲
------------------------------------------------------↲
↲
Hvis man ønsker at lyset skal løbe fra højre mod ↓
venstre er "løb-e4" måske en nærliggende løsning - ↓
men den duer ┆b0┆IKKE┆f0┆ !! Her er det nemlig en slukket pære ↓
┆19┆┄┆81┆┄der "løber", og ikke en tændt:↲
↲
┆b0┆0090   FOR bit:=8 TO 0 STEP -1 DO↲
┆b0┆0100     PRINT FILE 1: CHR$(2^bit-1);↲
┆b0┆0110     EXEC pause(lysperiode)↲
┆b0┆0120   NEXT bit↲
↲
------------------------------------------------------↲
↲
"løb-e5" er en korrekt løsning, hvis lyset skal løbe ↓
fra højre mod venstre samtidig med at lysene skal ↓
"opsummeres":↲
↲
┆b0┆0090   FOR bit:=8 TO 0 STEP -1 DO↲
┆b0┆0100     PRINT FILE 1: CHR$(255-2^bit+1);↲
┆b0┆0110     EXEC pause(lysperiode)↲
┆b0┆0120   NEXT bit↲
↲
------------------------------------------------------↲

════════════════════════════════════════════════════════════════════════
↓
↲
↲
↲
I "løb-f" er det to FOR/NEXT-løkker der hver for sig ↓
får lyset til at løbe hhv. mod højre og mod venstre:↲
↲
0070 REPEAT ↲
┆b0┆0080   FOR bit:=0 TO 7 DO↲
┆b0┆0090     PRINT FILE 1: CHR$(2^bit);↲
┆b0┆0100     EXEC pause(lysperiode)↲
┆b0┆0110   NEXT bit↲
0120   PRINT FILE 1: CHR$(0);↲
0130   EXEC pause(lysperiode)↲
┆b0┆0140   FOR bit:=7 TO 0 STEP -1 DO↲
┆b0┆0150     PRINT FILE 1: CHR$(2^bit);↲
┆b0┆0160     EXEC pause(lysperiode)↲
┆b0┆0170   NEXT bit↲
0180   PRINT FILE 1: CHR$(0);↲
0190   EXEC pause(lysperiode)↲
0200 UNTIL ORD(KEY$)=32↲
↲
------------------------------------------------------↲
↲
"løb-g1", "løb-g2" og "løb-g3" er forslag til løsning ↓
af problemet med at man fra tastaturet skal kunne få ↓
lyset til at løbe hhv. mod højre og mod venstre.↲
↲
Her "løb-g2":↲
↲
┆b0┆0010 // "løb-g2"↲
┆b0┆0020 OPEN FILE 1,"/17/PORT", WRITE ↲
┆b0┆0030 DIM tast$ OF 1↲
┆b0┆0040 PRINT "STOP: TRYK PÅ MELLEMRUM-TASTEN !!"↲
┆b0┆0050 PRINT "SKRIV LYSPERIODEN"↲
┆b0┆0060 PRINT "I SEKUNDER"↲
┆b0┆0070 INPUT "FOR HVER PÆRE: ": lysperiode↲
↲
------------------------------------------------------↲
↲
Her er selve afviklingen af løbelyset. Det er proce┄↓
duren ┆b0┆løbelys┆f0┆ (se næste side) der får lyset til at ↓
┆19┆┄┆81┆┄løbe:↲
↲
┆b0┆0090 REPEAT ↲
↲
┆b0┆0100   tast$:=KEY$↲
↲
┆b0┆0110   IF tast$="v" OR tast$="V" OR tast$=CHR$(8) ↲
┆19┆┄┆81┆┄┆b0┆┆1f┆┆1f┆┆1f┆┆1f┆┆1f┆┆1f┆┆1f┆THEN EXEC løbelys(0,7,+1)↲
↲
┆b0┆0120   IF tast$="h" OR tast$="H" OR tast$=CHR$(24) ↲
┆19┆┄┆81┆┄┆b0┆┆1f┆┆1f┆┆1f┆┆1f┆┆1f┆┆1f┆┆1f┆THEN EXEC løbelys(7,0,-1)↲
↲
┆b0┆0130   IF tast$="s" OR tast$="S" OR tast$=" " ↲
┆19┆┄┆81┆┄┆b0┆┆1f┆┆1f┆┆1f┆┆1f┆┆1f┆┆1f┆┆1f┆THEN EXEC stands↲
↲
┆b0┆0140 UNTIL FALSE↲
↲
┆b0┆0150 END↲
↲
------------------------------------------------------↲

════════════════════════════════════════════════════════════════════════
↓
↲
↲
↲
┆b0┆EXEC løbelys(0,7,+1)┆f0┆ får lyset til at løbe fra BIT 0, ↓
┆19┆┄┆81┆┄d.v.s. venstre, mod BIT 7, altså højre. Modsvarende ↓
┆19┆┄┆81┆┄får ┆b0┆EXEC løbelys(7,0,-1)┆f0┆ lyset til at løbe den anden ↓
┆19┆┄┆82┆┄vej:↲
↲
┆b0┆0160 PROC løbelys(startværdi,slutværdi,stepværdi)↲
↲
┆b0┆0170   FOR bit:=startværdi TO slutværdi↲
┆19┆┄┆81┆┄┆b0┆       STEP stepværdi DO↲
↲
┆b0┆0180     PRINT FILE 1: CHR$(2^bit);↲
↲
┆b0┆0190     EXEC pause(lysperiode)↲
↲
┆b0┆0200   NEXT bit↲
↲
┆b0┆0210   PRINT FILE 1: CHR$(0);↲
↲
┆b0┆0220   EXEC pause(lysperiode)↲
↲
┆b0┆0230 ENDPROC løbelys↲
↲
------------------------------------------------------↲
↲
Hvis der trykkes på MELLEMRUM- eller S-tasten så ↓
udføres proceduren ┆b0┆stands┆f0┆, hvor lyset slukkes og ↓
┆19┆┄┆81┆┄datastrømmen lukkes:↲
↲
┆b0┆0320 PROC stands↲
┆b0┆0330   PRINT FILE 1: CHR$(0);↲
┆b0┆0340   CLOSE FILE 1↲
┆b0┆0350 ENDPROC stands↲
↲
------------------------------------------------------↲

════════════════════════════════════════════════════════════════════════
↓
↲
↲
↲
┆b0┆PROBLEM "TÆLLE":↲
↲
↲
"tælle-a" er et lille program der tæller binært. Der ↓
kan naturligvis kun tælles fra 0 til 255, da der kun ↓
er 8 bit/lamper på lyspanelet:↲
↲
┆b0┆0010 // "tælle-a"↲
┆b0┆0020 OPEN FILE 1,"/17/PORT", WRITE ↲
┆b0┆0040 FOR tal:=0 TO 255 DO↲
┆b0┆0050   PRINT FILE 1: CHR$(tal);↲
┆b0┆0060   EXEC pause(1/3)↲
┆b0┆0070 NEXT tal↲
┆b0┆0080 PRINT FILE 1: CHR$(0);↲
┆b0┆0090 CLOSE FILE 1↲
┆b0┆0100 END ↲
↲
------------------------------------------------------↲
↲
I "tælle-b" kan tællehastigheden varieres, idet ↓
brugeren selv bestemmer hvor lang tid hvert pause skal ↓
være.↲
↲
↲
0010 // "tælle-b"↲
0020 OPEN FILE 1,"/17/PORT", WRITE ↲
┆b0┆0030 INPUT "PAUSETID: ": tid↲
0040 FOR tal:=0 TO 255 DO↲
0050   PRINT FILE 1: CHR$(tal);↲
0060   EXEC pause(┆b0┆tid┆f0┆)↲
0070 NEXT tal↲
0080 PRINT FILE 1: CHR$(0);↲
0090 CLOSE FILE 1↲
0100 END ↲
↲
------------------------------------------------------↲

════════════════════════════════════════════════════════════════════════
↓
↲
↲
↲
┆b0┆PROBLEM  "BLINK-0/7":↲
↲
Dette program får BIT-0 og BIT-7 pærerne til at blinke ↓
på skift. Strukturen er den sammen som i et simpelt ↓
blink-program↲
↲
┆b0┆0010 // "blink-7/0"↲
┆b0┆0020 OPEN FILE 1,"/17/PORT", WRITE ↲
┆b0┆0030 REPEAT ↲
┆b0┆0040   PRINT FILE 1: CHR$(1);↲
┆b0┆0050   EXEC pause(0.5)↲
┆b0┆0060   PRINT FILE 1: CHR$(128);↲
┆b0┆0070   EXEC pause(0.5)↲
┆b0┆0080 UNTIL ORD(KEY$)=32↲
┆b0┆0090 PRINT FILE 1: CHR$(0);↲
┆b0┆0100 CLOSE FILE 1↲
┆b0┆0110 END ↲
↲
┆b0┆0040┆f0┆: Her lyser kun BIT-0 pæren.↲
↲
┆b0┆0060┆f0┆: Her lyser kun BIT-7 pæren↲
↲
------------------------------------------------------↲
↲
↲
┆b0┆PROBLEM "BLINK-A/B":↲
↲
↲
Her kommer så det første program der styrer de to ↓
ekstra bit. Port 17, som er en papallelport, består kun ↓
af 8 bit, og vi kan derfor ikke bruge den til de to ↓
ekstra bit. Nu skal ┆b0┆PORT 10┆f0┆ bruges. Det er ganske vist ↓
┆19┆┄┆81┆┄en seriel port, ligesom den printeren er tilsluttet, ↓
┆19┆┄┆81┆┄men den indeholder to bits der normalt bruges til ↓
┆19┆┄┆81┆┄kontrol-formål. De kan programmeres ligesom de 8 bit i ↓
┆19┆┄┆81┆┄port 17. Det forudsætter blot, at vi sender de decimale ↓
┆19┆┄┆81┆┄tal ┆b0┆24┆f0┆ og ┆b0┆5┆f0┆ i nævnte rækkefølge ┆b0┆umiddelbart før┆f0┆ det tal ↓
┆19┆┄┆84┆┄der sætter BIT-A og/eller BIT-B høje. ┆b0┆24┆f0┆ og ┆b0┆5┆f0┆ er ↓
┆19┆┄┆86┆┄karakterer der programmerer port 10, ┆b0┆0/2/128/130┆f0┆ er ↓
┆19┆┄┆87┆┄data der transmitteres ┆b0┆ud┆f0┆ af port 10!↲
↲
Der  er disse 4 muligheder for programmering af BIT-A ↓
og BIT-B:↲
↲
↲
DECIMAL TAL:       BIT-A:    BIT-B:↲
------------       ------    ------↲
↲
         0           LAV       LAV↲
         2           HØJ       LAV↲
       128           LAV       HØJ↲
 2+128=130           HØJ       HØJ↲
↲
------------       ------     ------↲

════════════════════════════════════════════════════════════════════════
↓
↲
↲
↲
"blink-A/B" får BIT-A og BIT-B pærerne til at blinke på ↓
skift:↲
↲
0010 // "blink-A/B"↲
0020 OPEN FILE 1,"/┆b0┆10┆f0┆/PORT", WRITE ↲
0030 REPEAT ↲
0040   PRINT FILE 1: ┆b0┆CHR$(24);CHR$(5);CHR$(2);┆f0┆↲
0050   EXEC pause(0.5)↲
0060   PRINT FILE 1: ┆b0┆CHR$(24);CHR$(5);CHR$(128);┆f0┆↲
0070   EXEC pause(0.5)↲
0080 UNTIL ORD(KEY$)=32↲
0090 PRINT FILE 1: ┆b0┆CHR$(24);CHR$(5);CHR$(0)┆f0┆;↲
0100 CLOSE FILE 1↲
0110 END ↲
↲
┆b0┆0020┆f0┆: Her åbnes port ┆b0┆10┆f0┆ for skrivning (WRITE).↲
↲
┆b0┆0040┆f0┆: Her bruges ┆b0┆24┆f0┆ og ┆b0┆5┆f0┆ til at "fortælle" port 10 at ↓
┆19┆┄┆83┆┄vi gerne vil programmere BIT-A og BIT-B, og derefter ↓
┆19┆┄┆83┆┄sender vi tallet ┆b0┆2┆f0┆, der sætter BIT-A høj, så BIT-A ↓
┆19┆┄┆84┆┄pæren lyser, og ┆b0┆kun┆f0┆ BIT-A pæren.↲
↲
┆b0┆0060┆f0┆: Her sendes 24 og 5 ligesom i linie 0040, og ↓
┆19┆┄┆81┆┄derefter sendes 128, der sætter BIT-B, og kun BIT-B, ↓
┆19┆┄┆81┆┄høj.↲
↲
┆b0┆0090┆f0┆: Her sendes 24 og 5, samt 0. Nullet sætter både ↓
┆19┆┄┆81┆┄BIT-A og BIT-B lave, så ingen af disse to pærer lyser.↲
↲
Den eneste forskel på at programmere de 8 bit fra port ↓
17, og de 2 bit fra port 10, er altså at port 17 kan ↓
programmeres direkte med det decimale tal der sætter de ↓
enkelte bits, hvorimod de decimale tal 24 og 5 skal ↓
sendes forud for ┆b0┆hver eneste┆f0┆ ændring af status på de to ↓
┆19┆┄┆81┆┄bit vi kalder for BIT-A og BIT-B.↲
↲
------------------------------------------------------↲
↲
↲
┆b0┆"tænd10"┆f0┆ og ┆b0┆sluk10"┆f0┆ er to små programmer der hhv. ↓
┆19┆┄┆82┆┄tænder og slukker BIT-A ┆b0┆og┆f0┆ BIT-B. De refererer ┆b0┆ikke┆f0┆ til ↓
┆19┆┄┆84┆┄elevteksten, men er rare at have på disketten. Så kan ↓
┆19┆┄┆84┆┄man blot skrive komandoen ┆b0┆run "tænd10"┆f0┆ eller ┆b0┆"run ↓
┆19┆┄┆86┆┄"sluk10"┆f0┆ hvis man ønsker at tænde eller slukke de to ↓
┆19┆┄┆86┆┄lamper.↲
↲
0010 // "tænd10"↲
0020 OPEN FILE 1,"/10/PORT", WRITE ↲
0030 PRINT FILE 1: CHR$(24);CHR$(5);CHR$(┆b0┆130┆f0┆);↲
0040 CLOSE FILE 1↲
0050 END ↲
↲
↲
0010 // "sluk10"↲
0020 OPEN FILE 1,"/10/PORT", WRITE ↲
0030 PRINT FILE 1: CHR$(24);CHR$(5);CHR$(┆b0┆0┆f0┆);↲
0040 CLOSE FILE 1↲
0050 END ↲
↲
------------------------------------------------------↲

════════════════════════════════════════════════════════════════════════
↓
↲
↲
↲
┆b0┆PROBLEM "TRAFIK":↲
↲
↲
Nu skal lyskurvene på lyspanelet bruges, og omskifteren ↓
skal derfor stå på "TRAFIK".↲
↲
I "trafik-a1" og "trafik-a2" er det ┆b0┆kun┆f0┆ to-lysene der ↓
┆19┆┄┆81┆┄skal programmeres. Det vil sige at både port 17 og port ↓
┆19┆┄┆81┆┄10 skal bruges i det samme program. Derfor skal der ↓
┆19┆┄┆81┆┄åbnes til begge porte. Den eneste forskel på↲
"trafik-a1" og "trafik-a2" er at det er lyskurv nr. 1 ↓
på lyspanelet der bruges i det ene program, og lyskurv nr. 2 der ↓
bruges i det andet:↲
↲
↲
┆b0┆0010 // "trafik-a1"↲
┆b0┆0020 OPEN FILE 1,"/17/PORT", WRITE ↲
┆b0┆0030 OPEN FILE 2,"/10/PORT", WRITE ↲
┆b0┆0040 REPEAT ↲
┆b0┆0050   PRINT FILE 1: CHR$(16);  ↲
┆b0┆0060   PRINT FILE 2: CHR$(24);CHR$(5);CHR$(0);  ↲
┆b0┆0070   EXEC pause(6)↲
┆b0┆0080   PRINT FILE 1: CHR$(0);  ↲
┆b0┆0090   PRINT FILE 2: CHR$(24);CHR$(5);CHR$(128);  ↲
┆b0┆0100   EXEC pause(4)↲
┆b0┆0110 UNTIL ORD(KEY$)=32↲
┆b0┆0120 CLOSE ↲
┆b0┆0130 END ↲
↲
↲
┆b0┆0020┆f0┆: Datastrøm nummer 1 til port 17 åbnes.↲
┆b0┆0030┆f0┆: Datastrøm nummer 2 til port 10 åbnes.↲
↲
┆b0┆0050┆f0┆: TÆND RØD(1), og få brøkdele af et sekund efter:↲
┆b0┆0060┆f0┆: SLUK GRØN(1)↲
↲
┆b0┆0070┆f0┆: Pause på 6 sekunder. Der er altså RØDT i 6 ↓
┆19┆┄┆81┆┄sekunder.↲
↲
┆b0┆0080┆f0┆: SLUK RØD(1), og få brøkdele af et sekund efter:↲
┆b0┆0090┆f0┆: TÆND GRØN(1)↲
↲
┆b0┆0100┆f0┆: Pause på 4 sekunder. Der er altså GRØNT i 4 ↓
┆19┆┄┆81┆┄sekunder.↲
↲
┆b0┆0120┆f0┆: Datastrømmene lukkes.↲
↲
------------------------------------------------------↲

════════════════════════════════════════════════════════════════════════
↓
↲
↲
↲
┆b0┆0010 // "trafik-a2"↲
┆b0┆0020 OPEN FILE 1,"/17/PORT", WRITE ↲
┆b0┆0030 OPEN FILE 2,"/10/PORT", WRITE ↲
┆b0┆0040 REPEAT ↲
┆b0┆0050   PRINT FILE 1: CHR$(8);  ↲
┆b0┆0060   PRINT FILE 2: CHR$(24);CHR$(5);CHR$(0);  ↲
┆b0┆0070   EXEC pause(6)↲
┆b0┆0080   PRINT FILE 1: CHR$(0);  ↲
┆b0┆0090   PRINT FILE 2: CHR$(24);CHR$(5);CHR$(2); ↲
┆b0┆0100   EXEC pause(4)↲
┆b0┆0110 UNTIL ORD(KEY$)=32↲
┆b0┆0120 CLOSE ↲
┆b0┆0130 END ↲
↲
┆b0┆0050┆f0┆: TÆND RØD(4)↲
┆b0┆0060┆f0┆: SLUK GRØN(4)↲
↲
┆b0┆0080┆f0┆: SLUK RØD(4)↲
┆b0┆0090┆f0┆: TÆND GRØN(4)↲
↲
------------------------------------------------------↲
↲
↲
"trafik-b" styrer de to 2-lys, og er således en ↓
kombination af de to foregående programmer:↲
↲
↲
┆b0┆0040 REPEAT ↲
┆b0┆0050   PRINT FILE 1: CHR$(8); ↲
┆b0┆0060   PRINT FILE 2: CHR$(24);CHR$(5);CHR$(128); ↲
┆b0┆0070   EXEC pause(6)↲
┆b0┆0080   PRINT FILE 1: CHR$(16);↲
┆b0┆0090   PRINT FILE 2: CHR$(24);CHR$(5);CHR$(2); ↲
┆b0┆0100   EXEC pause(4)↲
┆b0┆0120 UNTIL ORD(KEY$)=32↲
↲
┆b0┆0050┆f0┆: TÆND RØD(1)  + SLUK RØD(4) ↲
┆b0┆0060┆f0┆: SLUK GRØN(1) + TÆND GRØN(4)↲
↲
┆b0┆0080┆f0┆: SLUK RØD(1)  + TÆND RØD(4)↲
┆b0┆0090┆f0┆: TÆND GRØN(1) + SLUK GRØN(4)↲
↲
Den "grønne bølge" på lyskurv nr. 1 er på 4 sekunder. ↓
Den "grønne bølge" på lyskurv nr. 2 er på 6 sekunder.↲
↲
------------------------------------------------------↲

════════════════════════════════════════════════════════════════════════
↓
↲
↲
↲
"trafik-c1" og "trafik-c2" styrer hhv. lyskurv nr. 2 og ↓
lyskurv nr.3, altså ┆b0┆et┆f0┆ 3-lys:↲
↲
↲
┆b0┆"trafik-c1":↲
↲
0030 REPEAT ↲
┆b0┆0040   PRINT FILE 1: CHR$(128);     RØD(2)↲
0050   EXEC pause(6)↲
┆b0┆0060   PRINT FILE 1: CHR$(192);     RØD(2) + GUL(2)↲
0070   EXEC pause(2)↲
┆b0┆0080   PRINT FILE 1: CHR$(32);      GRØN(2)↲
0090   EXEC pause(4)↲
┆b0┆0100   PRINT FILE 1: CHR$(64);      GUL(2)↲
0110   EXEC pause(1)↲
0120 UNTIL ORD(KEY$)=32↲
↲
------------------------------------------------------↲
↲
↲
┆b0┆"trafik-c2":↲
↲
0010 // "trafik-c2"↲
0020 OPEN FILE 1,"/17/PORT", WRITE ↲
0030 REPEAT ↲
┆b0┆0040   PRINT FILE 1: CHR$(1);     RØD(3)↲
0050   EXEC pause(6)↲
┆b0┆0060   PRINT FILE 1: CHR$(3);     RØD(3) + GUL(3)↲
0070   EXEC pause(2)↲
┆b0┆0080   PRINT FILE 1: CHR$(4);     GRØN(3)↲
0090   EXEC pause(4)↲
┆b0┆0100   PRINT FILE 1: CHR$(2);     GUL(3)↲
0110   EXEC pause(1)↲
0120 UNTIL ORD(KEY$)=32↲
↲
------------------------------------------------------↲
↲
↲
"trafik-d" er en kombination af de to foregående ↓
programmer. Her styres altså begge 3-lys:↲
↲
↲
0030 REPEAT ↲
┆b0┆0040   PRINT FILE 1: CHR$(33);   RØD(3)+GRØN(2)↲
0050   EXEC pause(6)↲
┆b0┆0060   PRINT FILE 1: CHR$(67);   RØD(3)+GUL(3)+GRØN(2)↲
┆19┆┄┆81┆┄0070   EXEC pause(2)↲
┆b0┆0080   PRINT FILE 1: CHR$(132);  GRØN(3)+RØD(2)↲
0090   EXEC pause(4)↲
┆b0┆0100   PRINT FILE 1: CHR$(194);  GUL(3)+RØD(2)+GUL(2)↲
0110   EXEC pause(1)↲
0120 UNTIL ORD(KEY$)=32↲
↲
------------------------------------------------------↲

════════════════════════════════════════════════════════════════════════
↓
↲
↲
↲
I "trafik-e" er det igen de to 3-lys der styres. Her er ↓
sekvensen blot lavet så der er ┆b0┆rødt i begge trafik┄↓
┆19┆┄┆81┆┄retninger┆f0┆ i 1 sekund mellem skiftene:↲
↲
↲
0030 REPEAT ↲
┆b0┆0040   PRINT FILE 1: CHR$(33);   RØD(3)+GRØN(2)↲
0050   EXEC pause(6)↲
┆b0┆0060   PRINT FILE 1: CHR$(65);   RØD(3)+GUL(2)↲
0070   EXEC pause(3)↲
┆b0┆0080   PRINT FILE 1: CHR$(129);  RØD(3)+RØD(2)↲
0090   EXEC pause(2)↲
┆b0┆0100   PRINT FILE 1: CHR$(131);  RØD(3)+GUL(3)+RØD(2)↲
┆19┆┄┆81┆┄0110   EXEC pause(1)↲
┆b0┆0120   PRINT FILE 1: CHR$(132);  RØD(2)+GRØN(3)↲
0130   EXEC pause(10)↲
┆b0┆0140   PRINT FILE 1: CHR$(130):  RØD(2)+GUL(3)↲
0150   EXEC pause(3)↲
┆b0┆0160   PRINT FILE 1: CHR$(129);  RØD(2)+RØD(3)↲
0170   EXEC pause(2)↲
┆b0┆0180   PRINT FILE 1: CHR$(193);  RØD(2)+GUL(2)+RØD(3)↲
┆19┆┄┆81┆┄0190   EXEC pause(1)↲
0200 UNTIL ORD(KEY$)=32↲
↲
------------------------------------------------------↲

════════════════════════════════════════════════════════════════════════
↓
↲
↲
↲
I "trafik-f" styres ┆b0┆alle 4 lyskurve┆f0┆ på en gang:↲
↲
↲
0040 REPEAT ↲
┆b0┆0050   PRINT CHR$(7);↲
┆b0┆0060   PRINT FILE 1: CHR$(148);↲
┆b0┆0070   PRINT FILE 2: CHR$(24);CHR$(5);CHR$(2);↲
0080   EXEC pause(10)↲
┆b0┆0090   PRINT FILE 1: CHR$(156);↲
┆b0┆0100   PRINT FILE 2: CHR$(24);CHR$(5);CHR$(0);↲
0110   EXEC pause(3)↲
┆b0┆0120   PRINT FILE 1: CHR$(154);↲
0130   EXEC pause(3)↲
┆b0┆0140   PRINT FILE 1: CHR$(217);↲
0150   EXEC pause(2)↲
┆b0┆0160   PRINT FILE 1: CHR$(41);↲
┆b0┆0170   PRINT FILE 2: CHR$(24);CHR$(5);CHR$(128);↲
0180   EXEC pause(10)↲
┆b0┆0190   PRINT FILE 1: CHR$(57);↲
┆b0┆0200   PRINT FILE 2: CHR$(24);CHR$(5);CHR$(0);↲
0210   EXEC pause(3)↲
┆b0┆0220   PRINT FILE 1: CHR$(89);↲
0230   EXEC pause(3)↲
┆b0┆0240   PRINT FILE 1: CHR$(155);↲
0250   EXEC pause(2)↲
0260 UNTIL ORD(KEY$)=32↲
↲
↲
For at vise hvordan arbejdsarkene til lyskurvopgaverne ↓
kan bruges, vises på næste side hvordan en algoritme ↓
til "trafik-f" kan tagnes svarende direkte til ↓
programmet. Det er naturligvis de decimale tal, samt ↓
portene, der skal koncentreres om !↲
↲
------------------------------------------------------↲

════════════════════════════════════════════════════════════════════════
↓
↲
↲
↲
Endelig er der på næste side en listning af et ↓
"generelt" lyskurv program ┆b0┆"TRAFIK"┆f0┆, hvor alle lamper ↓
┆19┆┄┆81┆┄tændes og slukkes en efter en ved hjælp af EXEC-↓
┆19┆┄┆81┆┄sætninger. Det er proce┄durerne ┆b0┆tænd(lampe)┆f0┆ og ↓
┆19┆┄┆82┆┄┆b0┆sluk(lampe)┆f0┆ der kaldes.↲
↲
Programmet kan f.eks. bruges af de elever der har svært ↓
ved at programmere lyskurvene med deres ┆b0┆egne┆f0┆ COMAL80-↓
┆19┆┄┆81┆┄programmer. Fortæl dem at de blot skal bruge ↓
┆19┆┄┆81┆┄arbejdsarkene og derefter indsætte EXEC-sætningerne i ↓
┆19┆┄┆81┆┄toppen af programmet!↲
↲
┆b0┆"TRAFIK-1"┆f0┆ og ┆b0┆"TRAFIK-2"┆f0┆ er identiske med "TRAFIK".↲
↲
"TRAFIK-1" indeholder EXEC-sætninger svarende til at ↓
RØD(1) blinker:↲
↲
┆b0┆0010 // "TRAFIK-1"↲
┆b0┆0020 PROC blink↲
┆b0┆0030   EXEC tænd(rød1)↲
┆b0┆0040   EXEC pause(1)↲
┆b0┆0050   EXEC sluk(rød1)↲
┆b0┆0060   EXEC pause(1)↲
┆b0┆0070 ENDPROC blink↲
↲
------------------------------------------------------↲
↲
"TRAFIK-2" styrer et enkelt 3-lys:↲
↲
┆b0┆0010 // "TRAFIK-2"↲
┆b0┆0020 PROC blink↲
┆b0┆0030   EXEC tænd(rød2)↲
┆b0┆0040   EXEC pause(6)↲
┆b0┆0050   EXEC tænd(gul2)↲
┆b0┆0060   EXEC pause(2)↲
┆b0┆0070   EXEC sluk(rød2)↲
┆b0┆0080   EXEC sluk(gul2)↲
┆b0┆0090   EXEC tænd(grøn2)↲
┆b0┆0100   EXEC pause(6)↲
┆b0┆0110   EXEC sluk(grøn2)↲
┆b0┆0120   EXEC tænd(gul2)↲
┆b0┆0130   EXEC pause(3)↲
┆b0┆0140   EXEC sluk(gul2)↲
┆b0┆0150 ENDPROC blink↲
↲
------------------------------------------------------↲

════════════════════════════════════════════════════════════════════════
↓
↲
↲
┆b0┆"TRAFIK":↲

════════════════════════════════════════════════════════════════════════
↓
↲
┆1a┆┆1a┆ 1: CHR$(33); //RØD(3)+GRØN(2)↲
0050   EXEC pause(6)↲
┆b0┆0060   PRI FILE 1: CHR$(65);   RØD(3)+GUL(2)↲
0

Full view