hallo
heb dezen coden die het wel doet maar ook weer niet
bij het inlezen van de value1. word er ge keken naar portb bij een verandering flits led je op portc.3 en loopt de lijst met s1 tot s8 af om hserout te verzende

als ik bij de hserout s9 er bij zet dan gaat het fout en doet i het niet meer led blijft heel snel knipperen ,

s1 hserout tot s16 hserout code werkt niet. de code
werkt wel als ik alleen s1 tot s8.hserout doet..
hoe kan ik nu porta. 00111111 en portb. 11111111 en portc 00000111
in 1 keer in lezen zo dat i ook de s9 tot s16 begrijpt

hier de code

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 16MH

;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
TRISC.2 = 1

TRISC.3 = 0

Dim value1 As Byte
Dim oldvalue1 As Byte

Symbol led = PORTC.3
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:

value1 = PORTB & 0xff ;lees port in (& 0xff zorgt voor dat alle 8 bits gelezen worden)
If value1 = oldvalue1 Then
; is aan nieuwe waarde gaat led aan,
; totdat nieuwe waarde gelijk is die van
; de vorige keer dan gaat led uit.
led = 0
Else
led = 1
DelayMS 1

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

;DelayMS 2

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

;;delayms 2

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

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

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

;delayms 2

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

;delayms 2;-----------------------

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 ; van af hier gaat het mis met meer s9 tot s17
;delayms 2 ; dan werkt de coden niet meer en de led flits ;alleen maar heel snel

EndIf

oldvalue1 = value1 ; De nieuwe waarde wordt bewaart
GoTo start

alvast bedankt gr richard

Misschien dat ik er overheen kijk, maar..
Waar lees jij portA en C?

Doe daar gewoon het zelfde als bij portB



Dim value_A As Byte
Dim oldValue_A As Byte 
Dim value_B As Byte
Dim oldValue_B As Byte 
Dim value_C As Byte
Dim oldValue_C As Byte 
 
While 1 =1
 
value_A = PORTA & 0xff
value_B = PORTB & 0xff
value_C = PORTC & 0xff
 
If value_A = oldValue_A AND value_B = oldValue_B AND value_C = oldValue_C Then
; is aan nieuwe waarde gaat led aan,
; totdat nieuwe waarde gelijk is die van 
; de vorige keer dan gaat led uit.
led = 0 
Else
led = 1
DelayMS 1
 
; If value_A = oldValue_A Then ; Dit scheelt tijd als je b.v alleen de gewijzigde knoppen sets wilt door zenden vis HSerOut
.... ; doe port A dingen
; end if
 
.... ; doe port B dingen
 
.... ; doe port C dingen
 
...
etc
 
WEND

Zijn er in jouw geval tussen standen.
Waarom niet


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

Waarom zou je een tweede berekening doen als je al eigenlijk het antwoord weet.

value_A = PORTA & 0xff

is zinloos. {waarde} AND 0xFF levert altijd {waarde}.

Waarom zou je een tweede berekening doen als je al eigenlijk het antwoord weet.

Hier heb ik ricardo al meerdere keren op gewezen (in verschillende draadjes) maar hij blijft volharden.
Het gaat trouwens ook wel eens fout

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

dit word gebruikt met een zendertje
if s1 = 1 then
hserout [1]
elseif s1 = 0 then
hserout [20]
endif

als ik zend met de code,, else
dan gebeurd het wel eens dat je code net niet word ondvangen en dan schakeld de lamp uit heel kort
met elseif moet er wat ondvangen voor dat er wat gebeurd
aners had ik dat echt gebruikt

ik ga even testen die code hier boven

Letterlijk staat er
"Als A is waar dan doe iets, anders als A is onwaar doe iets anders".
Aangezien A een boolean is en dus alleen maar waar / onwaar kan zijn is die constructie dubbelop.
Het volstaat om "Als A is waar dan doe iets, anders doe iets anders" te gebruiken.

Conclusie: elsif is in deze situatie totaal overbodig.

He he nouw het is gelukt
heel en heel erg bedankt Lord Anubis voor de coden ben er weer erg veel mee geholpen

ik snap hem nu ook nog
erg bedankt

Op 19 september 2011 14:30:43 schreef hadv:
[...]
is zinloos. {waarde} AND 0xFF levert altijd {waarde}.

Klopt, maar de TS moet deze zelf aanpassen naar de bits die hij wel gebruikt.

Maar doe het dan wel goed...

PORTA kent alleen bits 0-5, die zijn default input. Daar kun je een AND 0x1F op loslaten, maar het zal weinig effect hebben.
PORTB is in dit programma geheel input, deze 'AND'en is derhalve zinloos, zeker met 0xFF.
PORTC is gedeeltelijk geïnitialiseerd, default alle pennen input (0xFF). Daar een AND 0x07 op loslaten is dus zeker WEL nodig, anders kon je wel eens rotzooi krijgen.

3e topic over bijna hetzelfde stukje code:
http://www.circuitsonline.net/forum/view/98401
http://www.circuitsonline.net/forum/view/98429

Waarom kan je het niet in 1 topic houden? Slotje en waarschuwing, verder in http://www.circuitsonline.net/forum/view/98429 de rest gaat dicht.