Serial software
Det grundlæggende omkring seriel kommunikation er beskrevet under seriel port.
serial_software.jal
Som de fleste generelle moduler, der er med i jalpack, så bygger det på at man sætter nogle ting op inden man includer filen, og så kan man anvende de procedurer der er i modulet
Softwaren ligger i jalpack/lib.
Ting der skal sættes op inden include
Inden man includer filen der definerer hvordan der skal kommunikeres, og som indeholder alle rutiner, så skal man sætte nogle ting op:
alias serial_sw_rx_pin is pin_a5 -- Serial Receive pin
alias serial_sw_tx_pin is pin_a4 -- Serial Transmit pin
pin_a5_direction = input -- Define input and output
pin_a4_direction = output
const serial_sw_baudrate = 9600
Pin definitionerne angive hvilken pin der skal modtages på, og hvilken pin der skal sendes på. Dette kan vælges helt frit. Man skal blot huske også at rette direction benene op.
Baud-rate (eller bits pr. sekund) kan vælges rimeligt frit. Hvis det sættes for hurtigt, så kan processoren få svært ved at følge med til tjekke for modtagelsen, og dermed virker modtagelsen ikke (man får startet inde midt i karakterer).
Anvendelse af modulet
Efter at have defineret tingene omkring porten, så skrives blot
-- Opsæning som beskrevet i andet afsnit
include serial_software
Herefter kan der sendes og modtages karakterer.
Modtagelse af karakterer
I main-loopet (forever-loopet) kan mansom følger:
if ser_sw_read(temp) then
-- Anvend den modtagne byte temp til noget fornuftigt
end if
Det er vigtigt at der tjekkes meget ofte i koden og få gang i modtagelsen. Hvis man f.x. kommunikerer med 1200 Baud vil man skulle tjekke mindst to gange i en startbit, altså minimum for hver 0,4 ms, da man ellers vil kunne komme forkert ind på en startbit.
På grund af denne begrænsning er der også en anden procedure der venter på starten af bitten:
ser_sw_read_wait(temp)
-- Anvend den modtagne byte temp til noget fornuftigt
Denne anvendelse ser måske enklere ud, men den har den store ulempe, at den låser indtil der kommer en karakter, og det endda med interruptet slået fra, så hvis der ikke kommer en karakter, vil den aldrig komme videre med resten af programmet.
Sending af karakterer
Det at sende en karakter er meget simpelt, da man blot skriver
serial_sw_write(char)
Sendingen vil ikke returnere inden hele byten er sendt afsted.
Sending og modtagelse som Pseudovariable
Der ligger også rutiner der implementerer sending og modtagelse, så det ligner variabler. Det anvendes på følgende måde:
serial_sw_data = Temp -- Sender variablen Temp
Temp = serial_sw_data -- Modtager en byte og placerer den i Temp
-- Gør noget fornuftigt med det modtagne
Temp = serial_sw_data -- Modtager en ny byte og placerer den i Temp
Man skal være opmærksom på at det ikke er normale variabler. Hver gang man læser i variablen, så læses der faktisk en ny byte fra den serielle indgang.
De har stadig samme ulemper, at programmet standser afviklingen indtil byten er sendt, og den stiller sig til at vente på der kommer en byte, og den låser hvis der ikke kommer en byte.
Moduler på Holstebro HTX | |||||||
---|---|---|---|---|---|---|---|
Tastaturer | Displays | AD-konvertering | I/O-ekspander | Serielt | Interface | Færdige | Andre |
RC-tast - AD-tast - M_tast | ALCD - LCD | ADC_holst - ADC mcp3201 - mcp3208 |
input - output | Seriel_holst - Serial hardware Serial hw int cts - Serial software |
Stepmotor - RFID RGB - RF-link - Afstand |
Humidity - Analog temp - Dig temp Accelerometer |
Rotary Encoder |
Oversigt over Hardware Moduler på Holstebro HTX