Serial hardware
Det grundlæggende omkring seriel kommunikation er beskrevet under seriel port.
serial_hardware.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
Her definerer man hvordan der skal kommunikeres.
pin_b5_direction = input -- Define input and output for RX and TX pins
pin_b7_direction = output
const serial_hw_baudrate = 9600
Pin definitionerne angive hvilken pin der skal modtages på, og hvilken pin der skal sendes på. Dette er processor-afhængigt, så man skal lige forbi databladet for at se hvordan man gør det. Dette eksempel er for en PIC16F690.
Baud-rate (eller bits pr. sekund) kan ikke vælges helt frit. Hvis det sættes for hurtigt, så kan baud-rate registrene ikke sættes præcist nok (afhænger også af clock-hastigheden), og dermed virker modulet ikke. Det kan også blive et problem at nå at hente alle karakterer.
Anvendelse af modulet
Når man har sat benene op og defineret baudrate, så skrives blot
-- Opsæning som beskrevet i andet afsnit
include serial_hardware
serial_hw_init() -- gennemfør opsætningen af UART'en
Dette sætter op, så man kan sende og modtage med den korrekte hastighed.
Herefter kan der sendes og modtages karakterer.
Modtagelse af karakterer
I main-loopet (forever-loopet) kan man modtage karakterer som følger:
if serial_hw_read(temp) then
-- Anvend den modtagne byte temp til noget fornuftigt
end if
Det er vigtigt at der tjekkes ofte i koden for ikke at miste noget i modtagelsen, hvis der kommer flere karakterer i træk. Hvis man f.x. kommunikerer med 1200 Baud vil man skulle tjekke med mindre end 8 ms mellemrum, da man ellers vil kunne miste en byte.
Sending af karakterer
Det at sende en karakter er meget simpelt, da man blot skriver
serial_hw_write(char)
Sendingen venter, hvis hele den foregående byte er sendt afsted.
Sending af word (to bytes)
Det at sende et word er lige så simpelt, da man blot skriver
serial_hw_write_word(0xFFFF)
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_hw_data = Temp -- Sender variablen Temp
Temp = serial_hw_data -- Modtager en byte og placerer den i Temp
-- Gør noget fornuftigt med det modtagne
Temp = serial_hw_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.
ADVARSEL - programmet standser afviklingen indtil der er modtaget en byte, fordi programmet 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