Håller på att programmera en 16F690 och kommer inte överenns med BSF instruktionen.
Om jag enablar "kill LED DS1" slocknar de övriga tre dioderna.
Varför blir det så det ska ju bara påverka bit 0?
Jag får gratulera till att du greppade det så snabbt. R-M-W-problemet hörde jag redan från början, men det tog mig nästan ett halvår att *riktigt* förstå vad det innebar.
Och jag har tydligen inte gjort det æn...
RMW fel borde væl egentligen inte kunna upptræda så længa alla portens pinnar ær outputs? (TRISx='00'h)
Just eftersom pinnens status då alltid ær lika med latchens...
Du har missat att pinnens status inte alltid ÄR lika med latchens värde!
Edit:
Scenario 1: en okunnig har monterat en NPN-transistor på utgången men ingen motstånd mellan pinnen och basen. Resultatet är att pinnen aldrig kommer över 0,7V = '0'. Det görs en RMW där den läsas som '0' och skrivs tillbaka som '0'.
Scenario 2: en maskincykel består av 4 st "kristallcykler" och utgången sätts på den siste cykel. Men på utgången är det en kapacitiv belastning också så den blir inte '1' sådär *PANG*, det tar en (kort) tid. En RMW-instruktion läser på första cykel, modifierar och skriver på resten så utgången hinner inte att stiga nog till att bli '1'. Placerar man en NOP mellan går det dock oftast alldeles utmärkt.
*Analoga* pinnar läses alltid som "0" oavsett om de är in eller utgångar.
Vilket är *exakt* vad den lilla gråa rutan i kapitlet om "PORTS" i databladet säger!
Vad är problemet ??
Det som Icecap beskriver är ett annat scenario som uppkommer p.g.a
av timingproblem och kapacitiva laster. Dock är analog-problemet vanligare
bland nybörjare (som tror att databladet inte behöver läsas...)
Ahaaa...
Letade efter en grå ruta som det stod om RMW-fel i (ej analoga funktioner) och tænkte att du (Sodjan) kanske hade ett annat datablad. Men då har det satt sig lite hårdare. =)
Lite beroende på PIC kanske, men det brukar stå något om att
alla analoga pinnar läses digitalt som "0". Och de pinnarna
blir alltså "nollade" om man kör BCF/BSF mot någon annan pinne.
Även den grå rutan på sidan 9-3 i samma dokument är bra och tydlig.
Ett annat kapitel som jag brukar rekomendera i samma dokument är
kapitel 29 "Instruktion Set". Mycket bättre exempel till varje instruktion
än de i databladen.
Tack till er alla för de fina tipsen. Nu börjar till och med hitta vad jag letar efter i dokumenten...BSF är solklart nu, det gäller att initsiera portarna på rätt sätt bara, så enkelt var det!!...
Generellt tips vad gäller portar
Man kan använda sig av en byte i ram för att mellanlagra sina portar.
Så man "grejar" med sin rambyte istället med BSF BCF mm och när man
är klar kopierar man ut den till porten.
På AVR kan man använda sig av något av de 32 registerna...
Detta tips kommer säkert att mottagas med "bättre att pilla direkt på porten, det går snabbare"
men ju större programmen blir destå bättre är detta tips, allra bäst är om man endast uppdaterar sina portar regelbundet i
sin huvudloop. med t.ex. 100Hz intervall.
Det absolut bästa är att göra en "virtuell" port, man lägger alltså upp
portens alla bitar i ramcellen/registret i den ordning man vill ha dem och
översätter till den riktiga portens bitar endast på ett ställe.
Ändrar man i hårdvaran behöver man då endast justera virtuell-riktig port översättaren och programmet funkar direkt utan att man måste leta igenom hela programmet efter alla referenser till porten.