JALEdit

Fra Kommunikation-IT Holstebro HTX
Skift til: navigering, søgning

JALEdit er den editor vi bruger til at skrive programmer til PIC-en, og editoren binder faktisk det meste af udviklingsmiljøet sammen.

Formålet med JALEdit

Vi programmerer i sproget JAL. Derfor skal man have programmet JAL Edit. Der kan man skrive et program i formatet ”.jal”. Når man har skrevet sit program kan man så trykke ”compile” (eller F9) og derved laves en hex-fil. Det er denne fil PIC’en kan læse.

En JAL-fil er i princippet bare en almindelig .txt fil, men med typen .jal i stedet for. Grunden til at anvende denne specielle type er at windows så kan genkende fil-typen.

JAL

JAL hedder sproget vi bruger til at programmere PIC’en med. Strukturmæssigt ligner det Pascal, Turbopascal og tidlige versioner af Delphi. Programmet vi bruger til at skrive koden i, hedder JAL Edit, som er en fuld IDE (Integrated Development Enviroment) hvilket vil sige, at den ikke bare er en text editor, men at den også inkluderer en compiler, og en debugger.

JALEdit

Et program-eksempel

Vi vil nu beskrive hvordan man skriver et program til chippen, der får den til at tælle til 63 i et uendeligt loop, med forskellig hastighed, afhængig af om knappen er trykket på.

Grundlæggende definitioner

Man starter med at include biblioteket til den chip man arbejder med. Vi arbejder med PIC16F684. Grunden til at vi bruger include er, at ellers skulle vi til at skrive alle funktioner og procedure, man bruger når man skriver kode til den denne PIC, hver gang vi skulle skrive et nyt program. I stedet har vi det som en .jal-fil, som vi loader med include.

-- Chip def
include 16f684

Så skal man have defineret nogle informationer. Fx sætter vi clock-frekvensen til 4 MHz ved hjælp af syntaksen pragma.

-- Setup pic
pragma target clock 4_000_000
pragma target WDT DISABLED
pragma target OSC INTOSC_NOCLKOUT
pragma target PWRTE ENABLED
pragma target MCLR INTERNAL
pragma target CP DISABLED
pragma target CPD DISABLED
pragma target BROWNOUT ENABLED
pragma target IESO DISABLED
pragma target FCMEN DISABLED

Og til programmet skal vi også bruge en måde at lave forsinkelser på, så vi kan ændre hastigheden af tælle-funktionen, så vi loader også delay-biblioteket.

include delay

Så skal vi have fortalt den, at den kun skal bruge digitalt input og output.

enable_digital_io()                -- disable analog I/O (if any)

Programspecifikke definitioner

Og have forklaret den, at alle pins i de to ports skal bruges til output.

-- IO definitioner
porta_direction = all_output
portc_direction = all_output

Her reservere vi ordet kontakt ved at give det som alias til pin_A3, som vi derefter fortæller chippen skal være input. Så kan vi i stedet for at skrive pin_A3 bare skrive kontakt, hvilket er lidt nemmere at overskue. pin_A3_direction er en variabel fra 16f684-biblioteket, som vi loadede fra starten. Den er af typen bit og man bruger værdierne input eller output så det er nemmere at holde styr på. Når den er input kan man tjekke hvad pin_A3 er (høj/1 eller lav/0). Når den er output kan man selv bestemme hvad pin_A3 skal være (hvilket slet ikke ville give mening på det her print, så den defineres til input).

alias   kontakt is pin_A3
pin_A3_direction =  input

Variabler

Så erklærer vi en variabel af typen byte. En variabel kan man betragte som en kasse, som man kan putte information i. Fx kan man lave en variabel og putte informationen ”2” i. Så kan man hente den information igen. Der er flere typer af variabler. Der er bit og byte. Vi bruger typen byte, da en bit ikke kan indeholde nok information. Bit typen kan indeholde 2^1 booleske informationer (1 eller 0), hvorimod en byte kan indeholde 2^8. Vi skal bruge mindst 2^6 for at kunne teste 6 pins. Vi starter med at definere den som 0, så vi ved hvor vi har den. Man kan også definere konstanter. Konstanter er ligesom variable, bortset fra at de skal erklæres i starten, og de kan ikke ændres igen.

-- Variabler til programmet
var byte tal = 0

Main loop

Så kommer vi til vores hovedfunktion.

-- Main loop
forever loop
   if kontakt then
      delay_100ms(5)
   else
      delay_100ms(1)
   end if
   tal = tal + 1
   porta = tal
   portc = tal
end loop

Forever loop, betyder et uendeligt loop. Det bruger man, for så er PIC’en hele tiden i gang. Uden et forever loop vil den bare stoppe og ikke lave noget. Loopet gør også, at vi hele tiden kan tjekke variabler, og udføre kommandoer ud fra variablerne.

If--funktionen tjekker om kontakt (pin_A3) er høj (knappen bliver trykket på), og hvis den er skal der være en forsinkelse på 500ms, ellers skal den være på 100ms.

   if kontakt then
      delay_100ms(5)
   else
      delay_100ms(1)
   end if

I JAL, behøver man ikke skrive:

if variable == 1 then
 

Hvis den variable er en boolean (af typen bit), men kan kan i stedet nøjes med at skrive:

if variable then

Det er jo lige netop tilfældet her i vores kode hvor kontakt er en bit, nemlig et inputben, der kun kan tolkes som enten sandt eller falskt (den kan kun ses som høj eller lav - ikke noget imellem).

Så sætter vi vores variable tal til tal + 1, det vil sige at vi lægger 1 dens originale værdi. I JAL kan man bruge ”+” (plus), ”-” (minus), ”/” (divider), ”*” (gange) og ”%” (modulo, altså den rest der kommer, når man dividere to tal).

  tal = tal + 1

Til sidst udskriver vi resultatet til de to porte (som er forbundet til LED’erne) ved at give portene tallets værdi.

  porta = tal
  portc = tal

Efterfulgt af afslutningen på loopet.

end loop