Hallo
Ik kom er even niet goed uit
Het progr. werkt goed maarrrr.
er wordt elk 3 sec. 3 byte aan data verstuurt
deze ontvang ik en ga daar mee werk
daarna wacht die weer dat ie data ontvangt en wacht eerst op een start byte.
als deze 50 is dan mogen de 2 byte binnen komen
tot zover geen probleem.
er komt ook een alarm in en reset knop
als die net wacht als de data voorbij is wacht ie 3 sec.
en dat duurt vrijlang om te wachten voordat de reset knop
heeft iemand een mooie oplossing voormij
hier een deel van het progr.
START:
Waarde = HRSin , {5000 , TimeOut} 'wacht +/- 10 sec op een signal geen sign. naar timeout
If Waarde <> 50 Then GoTo START
HSerIn 8000 , TimeOut , [Str VarX] 'Vult de Array met 2byte
DelayMS 50
Var1en2 = (VarX[1]*256) + VarX[0]
OpTelling:
AanTal = 0
TempWord = Var1en2
For Tel = 1 To 16
If TempWord & 1 = 1 Then AanTal = AanTal + 1
TempWord = TempWord >> 1
Next
If AanTal <> AanTalOud Then GoSub Alarm
AanTalOud = AanTal
OpDisplay:
Cls
Print At 1,1, Dec VarX[0]," + ",Dec VarX[1]," = ",Dec Var1en2
Print At 2,1, "Aantal = ",Dec AanTal
Print At 2,16, Dec Y
DelayMS 1000
GoTo START
TimeOut:
Cls
Print At 1,1, "Geen Data"
DelayMS 100
GoTo START
SparkyGSX
Een manager is iemand die denkt dat negen vrouwen in één maand een kind kunnen maken
Interrupts gebruiken (al dan niet in Picbasic), of een korte timeout gebruiken om de data en een loop maken om de data binnen te halen.
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Oke
Hartelijk dank voor het snelle reageren
ben inderdaad toch weer met die interrups de hele middag bezig geweest
en daar snap ik toch niet veel van
bijna alles heb ik van dit forum gehaald
maar het werkt wel.
het voorbeeld staat hieronder
alleen de timeout werkt nu niet meer
is daar nog een mogelijkheid voor
en Arco die PIR1.RCIF ga ik ook nog proberen
START:
INTCON.7 = 1 ; Enable Global Interrupts
INTCON.6 = 1 ; Enable Peripheral Interrupts
PIE1.5 = 1 ; Enable UART Rx Interrupt
ON_INTERRUPT GoTo INT ; If there is UART activity: goto INT
GoTo MAIN ; Skip INT, goto main program
INT:
;HSerIn , 1000 , TimeOut , [Received] ;werkt niet
HSerIn [Received]
Value[0] = Value[1] ; zet ontvangen waarde in de array
Value[1] = Value[2] ; en schuif al aanwezige waarden door
Value[2] = Received
If Value[0] = 50 Then
Var1en2 = (Value[2]*256) + Value[1]
EndIf
GoTo START ; Goto start so INT will be used again
MAIN:
Cls
X = X + 1
Print At 1,1, Dec Value[1]," + ",Dec Value[2]," = ",Dec Var1en2
Print At 2,1, "X = ",Dec X
DelayMS 500
GoTo MAIN
TimeOut:
Y = Y + 1
Cls
Print At 1,1, "Geen Data"
DelayMS 100
GoTo START
End
Ik ben eruit hoor
het werkt als een trein
dit is het geworden
op of aanmerkingen zijn welkom
Cls
Print At 1,1, "Test"
Print At 2,1, "Programma"
DelayMS 3000
START:
INTCON.7 = 1 ; Enable Global Interrupts
INTCON.6 = 1 ; Enable Peripheral Interrupts
PIE1.5 = 1 ; Enable UART Rx Interrupt
ON_INTERRUPT GoTo INT ; If there is UART activity: goto INT
GoTo HoofdProg
INT:
HSerIn [Waarde]
PIR1.5 = 0
GeenData = 0 ;Just to be sure: Clear the Interrupt flag
VarX[0] = VarX[1] ; zet ontvangen waarde in de array
VarX[1] = VarX[2] ; en schuif al aanwezige waarden door
VarX[2] = Waarde
If VarX[0] = 50 Then
Var1en2 = (VarX[2]*256) + VarX[1]
EndIf
GoTo START ; Goto start so INT will be used again
HoofdProg:
If GeenData = 1 Then
GeenDataTel = GeenDataTel + 1
Else
GeenDataTel = 0
GeenData = 1
EndIf
If GeenDataTel > 10 Then GoTo TimeOut
Cls
X = X + 1
Print At 1,1, Dec VarX[1]," + ",Dec VarX[2]," = ",Dec Var1en2
Print At 2,1, "X = ",Dec X
DelayMS 500
GoTo HoofdProg
TimeOut:
Cls
Print At 1,1, "Geen Data"
For Tel = 1 To 16
If Reset = 0 Then Break
Print At 2,1, Rep 255\Tel
DelayMS 500
Next
If Reset = 0 Then GoSub Herstel
If GeenData = 0 Then
GoTo HoofdProg
Else
GoTo TimeOut
EndIf
Herstel:
Zoemer = 0
DisplayLed = 1
Return
End