hoe krijg ik dit in 2 bytes iedere bit een schakelaar

'
Device 16F876A ;Gebruik een 16F628A type
Config hs_osc , WDT_OFF, PWRTE_ON, LVP_OFF,
; Hier stond eerst nog een , aan het einde, dat mag niet!set xtal
Xtal = 8 ;Gebruik een kristal van 8, MH

;Hserial_Baud = 9600 ;Transmissiesnelheid van de data over de bus

Hserial_SPBRG = 12
Hserial_RCSTA = %10010000 ;Bit7:Enable serial port / Bit4:Continu ontvangen
Hserial_TXSTA = %00100000 ;Bit5:Transmitpin ingeschakeld
ADCON1 = 7
TRISA = %00111111
TRISB = %11111111
TRISC.0 = 1
TRISC.1 = 1

Symbol s1 = PORTB.0
Symbol s2 = PORTB.1
Symbol s3 = PORTB.2
Symbol s4 = PORTB.3
Symbol s5 = PORTB.4
Symbol s6 = PORTB.5
Symbol s7 = PORTB.6
Symbol s8 = PORTB.7
Symbol s9 = PORTA.0
Symbol s10 = PORTA.1
Symbol s11 = PORTA.2
Symbol s12 = PORTA.3
Symbol s13 = PORTA.4
Symbol s14 = PORTA.5
Symbol s15 = PORTC.0
Symbol s16 = PORTC.1
Symbol s17 = PORTC.2
DelayMS 3000

start:

If s1 = 1 Then
HSerOut [10] ; A rood
ElseIf s1 = 0 Then
HSerOut [11] ; B rood
EndIf

If s2 = 1 Then
HSerOut [12] ; A rood
ElseIf s2 = 0 Then
HSerOut [13] ; B rood
EndIf

If s3 = 1 Then
HSerOut [14] ; A rood
ElseIf s3 = 0 Then
HSerOut [15] ; B rood
EndIf

If s4 = 1 Then
HSerOut [16] ; A rood
ElseIf s4 = 0 Then
HSerOut [17] ; B rood
EndIf

If s5 = 1 Then
HSerOut [18] ; A rood
ElseIf s5 = 0 Then
HSerOut [19] ; B rood
EndIf

If s6 = 1 Then
HSerOut [20] ; A rood
ElseIf s6 = 0 Then
HSerOut [21] ; B rood
EndIf

If s7 = 1 Then
HSerOut [22] ; A rood
ElseIf s7 = 0 Then
HSerOut [23] ; B rood
EndIf

If s8 = 1 Then
HSerOut [24] ; A rood
ElseIf s8 = 0 Then
HSerOut [25] ; B rood
EndIf

If s9 = 1 Then
HSerOut [26] ; A rood
ElseIf s9 = 0 Then
HSerOut [27] ; B rood
EndIf

If s10 = 1 Then
HSerOut [28] ; A rood
ElseIf s10 = 0 Then
HSerOut [29] ; B rood
EndIf

If s11 = 1 Then
HSerOut [30] ; A rood
ElseIf s11 = 0 Then
HSerOut [31] ; B rood
EndIf

If s12 = 1 Then
HSerOut [32] ; A rood
ElseIf s12 = 0 Then
HSerOut [33] ; B rood
EndIf

If s13 = 1 Then
HSerOut [34] ; A rood
ElseIf s13 = 0 Then
HSerOut [35] ; B rood
EndIf

If s14 = 1 Then
HSerOut [36] ; A rood
ElseIf s14 = 0 Then
HSerOut [37] ; B rood
EndIf

If s15 = 1 Then
HSerOut [38] ; A rood
ElseIf s15 = 0 Then
HSerOut [39] ; B rood
EndIf

If s16 = 1 Then
HSerOut [40] ; A rood
ElseIf s16 = 0 Then
HSerOut [41] ; B rood
EndIf

DelayMS ;145

GoTo start

End

Da's niet zo moeilijk.
Je zet alle 'volgende' tests in een subroutine (voor 'start'). Dus vanaf 'if s1' tot en met 'if s16'.

In je 'main loop' ('start:') komt nu


if s17 = 1 then gosub [de subroutine]

Alleen wat je bedoelt met 'en dan wacht weer tot dat i weer hoog is' snap ik niet helemaal. is 'i' s17?

verder heb je nog steeds overtollige code
constructies als deze

If s1 = 1 Then
   HSerOut [10] ; A rood
ElseIf s1 = 0 Then
   HSerOut [11] ; B rood
EndIf

kunnen makkelijk worden gereduceerd naar

If s1 = 1 Then
   HSerOut [10] ; A rood
Else
   HSerOut [11] ; B rood
EndIf

Bij een bit is immers slechts 0 of 1 een geldige waarde.

hoe kan ik het voormekaar krijgen dat ik nu niet 2 bytes versent
voor die 16 srakelaars ,
maar 2 bytes en elke srakelaar aan een bit hang. dan verzent ik ook gelijk minder informatie en het kan sneller
hoe moet ik beginnen ,
kan iemend mijn een voorbeeld codegeven
zo dat ik dezen eens kan bekijken
avast bedankt

[Bericht gewijzigd door ricardo12345 op (89%)]