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 = 1TRISC.3 = 0
Dim value1 As Byte
Dim oldvalue1 As ByteSymbol 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 1If 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 2If s4 = 1 Then
HSerOut [16] ; A rood
ElseIf s4 = 0 Then
HSerOut [17] ; B rood
EndIf
;DelayMS 80If 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
EndIfIf 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 snelEndIf
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.
hadv
Just find out what you like and let it kill you
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.
hadv
Just find out what you like and let it kill you
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.