Hallo,
Is het mogelijk in mikrobasic om een bit van een poort, individueel te setten zonder de andere bits te beïnvloeden.
dim cnt as byte
cnt = 4
trisc = $ff
trisa = 0
trisd = 0
porta = 0
main:
while true
portd=%00111111
if portc.5 = 1 then 'toets wordt ingedrukt
while portc.5 = 1 wend
cnt = cnt - 1
porta.cnt = 1
cnt = cnt - 1
porta.cnt = 1
if cnt = 0 then cnt = 4 end if
end if
wend
end.Dus hier zou ik graag poorta bit 3 & 2 tegelijk geset hebben en 1 & 0 bij het opnieuw indrukken van de knop.
Via setbit(porta,cnt) gaat dit ook niet.
rew
four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
timmie
niet met me uitspraken(of opmerkingen) eens mail me.K8048 guide
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Op 9 juli 2009 16:03:10 schreef timmie:
PORTA.2 = 1 PORTA.3 = 1zou moeten werk zie helpfile
Ja dacht ik ook maar ik zit hier een segment aan te sturen en bij porta.3=1, cleart hij de andere bits. Ik heb het in proteus eens gesimuleerd maar daar was het net hetzelfde;(.
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Hoe los je dat dan hier simpel op? "A write to a port implies that the port pins are
read, the value is modified and then written to the port
data latch." ??
hadv
Just find out what you like and let it kill you
PORTA.4 is een open collector
Ik durf te wedden dat als je PORTA.3 gebruikt het wel werkt
Oftewel, pullup weerstand op PORTA.4
Het heeft dus niets te maken met de instructies, maar met de fysieke eigenschappen van deze pin.
@hadv, maar ik maak geen gebruik van porta.4.
Het moet overigens iets softwarematig zijn denk ik want wanneer ik dit typ:
portd=%00111111
if portc.5 = 1 then 'toets wordt ingedrukt
while portc.5 = 1 wend
cnt = cnt +1
if cnt = 1 then porta = 12 end if
if cnt = 2 then porta = 3 end if
if cnt = 2 then cnt = 0 end if
end ifwerkt alles wel en heb ik geen problemen met poorta. Ik denk dat die port.pin=waarde meer bedoeld is om iets is voor condities. Maar ik kan natuurlijk ook de bal misslaan...
mts plus
Life is waiting!
niet naar de poort schrijven naar naar de latch.
Welke pic gebruik je?
kijk eens of inline assembly het wel goed doet.
Dat zou dan met bsf porta,3 of bcf porta,3 moeten kunnen
Ik gebruik een PIC16F877A
, inline assembly vanaf "cnt = cnt - 1" tem "porta.cnt = 1".
...
DECF _cnt, 1
poortens_L_14:
MOVLW 1
MOVWF STACK_0
MOVF _cnt, 0
L_main_0:
BTFSC STATUS, Z
GOTO L_main_1
RLF STACK_0, 1
BCF STACK_0, 0
ADDLW 255
GOTO L_main_0
L_main_1:
MOVF STACK_0, 0
IORWF PORTA, 1
DECF _cnt, 1
poortens_L_16
MOVLW 1
MOVWF STACK_0
MOVF _cnt, 0
L_main_2:
BTFSC STATUS, Z
GOTO L_main_3
RLF STACK_0, 1
BCF STACK_0, 0
ADDLW 255
GOTO L_main_2
L_main_3:
MOVF STACK_0, 0
IORWF PORTA, 1
...En hoe schrijf je naar de latch zelf?
mts plus
Life is waiting!
houd eens een byte bij in je ram.
in deze byte doe je alle bewerkingen.
en deze byte zet je na iedere cyclus op de porta.
Ik zie zo 123 niet het lat register bij de 16f serie. werk zelf vaak met de 18f die heeft wat wel.
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Een 16F heeft geen LATx registers, je kunt zoals gezegd wel een shadow register bijhouden in RAM.
Of RMW gewoon vermijden door de poort output pinnen niet te zwaar te belasten 
Als je binnen de toegestane belastingsgrenzen blijft, heb je geen problemen...
hadv
Just find out what you like and let it kill you
Op 9 juli 2009 19:45:54 schreef Bv:
@hadv, maar ik maak geen gebruik van porta.4.
ik zie toch heel duidelijk staan
cnt = 4
en verderop
PORTA.cnt
En ik denk dat ik het al zie....
Je laat het portbit varieren in de while...wend lus.
Ik denk niet dat je compiler hier goed mee omgaat, want dynamische assignments van portbits heb ik nog niet gezien.
Kijk maar in de assembly die je zelf meelevert, alleen PORTA.1 wordt hier gebruikt.
Daarom werkt iets als porta = 12 wel, want dan gebruik je het hele byte.