Volgens mij is het buffer niet direct een nadeel. Ik gebruik het nu alleen volgens mij (nog) niet.
Ben net weer even bezig geweest en heb voor mezelf een aantal belangrijke ontdekkingen gedaan:
- Wanneer HSerin wordt gebruikt (natuurlijk op poort RX), dan kan de poort voor het verzenden (TX) niet meer gebruikt worden als gewone i/o poort.
- Het commando WAIT overruled de timeout in HSERIN. Het programma blijft dus wachten op het 'wachtwoord' en trekt zich niets aan van de timeout.
Van eventuele interrupts begrijp ik nog te weinig om dit op te nemen in het programma.
code:
Device 16F628A
Config INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF
ALL_DIGITAL TRUE ;Alle ingangen digitaal
;Logische constanten
Symbol AAN = 0 ;Geinverteerd AAN
Symbol OFF = 0 ;UIT
Symbol On = 1 ;AAN
Symbol UIT = 1 ;Geinverteerd UIT
Symbol HOOG = 1 ;Hoog signaal
Symbol LAAG = 0 ;Laag signaal
;Poortnamen
Symbol Sensor1 = PORTB.4 ;Poort B4 is de eerste sensor
Symbol sensor2 = PORTB.5 ;Poort B5 is de tweede sensor
Symbol sensor3 = PORTB.6 ;Poort B6 is de derde sensor
Symbol Led1 = PORTB.0 ;Led om aan te geven of de sensor iets geregistreerd heeft
Symbol Led2 = PORTB.7 ;Led om aan te geven of de sensor iets geregistreerd heeft
Symbol Led3 = PORTB.3 ;Led om aan te geven of de sensor iets geregistreerd heeft
Symbol wachttijd = 100 ;Aantal ms voor timeout
Symbol baudrate = 2400 ;baudrate
; 76543210
PORTA = %00000000 ;Alle PORTA uitgangen uit (laag maken)
PORTB = %11111001 ;0,3,4,5,6,7 hoog
TRISB = %01110110 ;PoortB als input, behalve 0,3 en 7 voor de leds
PORTB_PULLUPS On
HSERIAL_BAUD = baudrate ;baudrate 2400
HSERIAL_RCSTA = %10010000 ;Enable serial port and continuous receive
HSERIAL_CLEAR=On ;heft eventuele ontvangst buffer overflow op
Dim waarde1 As Byte
Dim waarde2 As Byte
Dim waarde3 As Byte
Declare LCD_DTPIN = PORTA.0 ;lcd niet standaard aangesloten
Declare LCD_ENPIN = PORTA.7
Declare LCD_RSPIN = PORTA.6
DelayMS 500 ;Opstarten lcd
Cls
Ontvanger:
HSerIn wachttijd, Checkpoort, [Wait("oke"),waarde1,waarde2,waarde3] ;nadat "oke" ontvangen is de volgende waarde doorgeven
Print At 1,1, DEC3 waarde1, " ", DEC3 waarde2, " ", DEC3 waarde3 ;en deze op lcd scherm laten zien
GoTo Ontvanger
Checkpoort:
DelayMS 10
If sensor2=LAAG Then Led1=Led1^1 ;als sensor1 laag is, toggled led1
If Sensor1=LAAG Then Led2=Led2^1 ;als sensor2 laag is, toggled led2
Led3=Led3^1 ;toggled led3
GoTo Ontvanger
End
De zender stuurt iedere seconde 5 keer het wachtwoord 'oke' en daarna drie waarden. Deze worden door de ontvanger opgeslagen in waarde1, 2 en 3 en geprint op de lcd. Dit werkt goed.
Led3 laat ik togglen om te kijken of de sensors worden uitgelezen. Hiermee heb ik ontdekt dat als de zender uit staat HSERIN blijft wachten door WAIT.
Heeft iemand een idee (en het liefst een beetje voorbeeld code) hoe ik WAIT kan verwijderen en toch met een 'wachtwoord' de start van de dataontvangst kan herkennen?