BSF instruktionen?

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
jeken
Inlägg: 3
Blev medlem: 17 februari 2008, 15:37:22
Ort: Borlänge

BSF instruktionen?

Inlägg av jeken »

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?

Kod: Markera allt

#include <p16F690.inc>
     __config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _BOR_OFF & _IESO_OFF & _FCMEN_OFF)
     org 0
Start:
     banksel TRISC       ; select bank 1
     clrf    TRISC
     banksel PORTC       ; select bank 0
     movlw   b'00001111'
     movwf   PORTC
     ;bsf     PORTC,0     ;kill LED DS1
     end
[/list]
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Står i databladet.
Kapitlet om PORTs, bara att läsa.
Användarvisningsbild
vfr
EF Sponsor
Inlägg: 3515
Blev medlem: 31 mars 2005, 17:55:45
Ort: Kungsbacka

Inlägg av vfr »

Tips: Läs om RMW (Read/Modify/Write) och dom problem som kan uppstå med liknande instruktioner.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Speciellt den lilla gråa ruten med ett tydligt "Note !" i fet stil.
Den finns där av en anledning... :-)
jeken
Inlägg: 3
Blev medlem: 17 februari 2008, 15:37:22
Ort: Borlänge

Inlägg av jeken »

Tack så mycket för era svar nu förstår jag och har fått det att fungera. Har precis införskaffat en PICkit2 och har börjat botanisera lite.
bos
Inlägg: 2314
Blev medlem: 24 februari 2007, 23:29:15
Kontakt:

Inlägg av bos »

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.
Tottish
Inlägg: 847
Blev medlem: 30 juni 2007, 19:11:37
Ort: Oslo, Norge

Inlägg av Tottish »

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...

Vad har jag missat?

MVH
/Tottish
Användarvisningsbild
Icecap
Inlägg: 26659
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

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.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> så længa alla portens pinnar ær outputs?

Det är inte det som är problemet!

*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...) :-)
Tottish
Inlägg: 847
Blev medlem: 30 juni 2007, 19:11:37
Ort: Oslo, Norge

Inlägg av Tottish »

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. =)

MVH
/Tottish
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

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.
bos
Inlägg: 2314
Blev medlem: 24 februari 2007, 23:29:15
Kontakt:

Inlägg av bos »

Nu hittade jag dokumentet jag tänkte länka till tidigare:

http://ww1.microchip.com/downloads/en/d ... 33023a.pdf

Läs FAQ 4 på sidan 158 (page 9-18). Där står det klart och tydligt med ett bra exempel.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Ä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.
jeken
Inlägg: 3
Blev medlem: 17 februari 2008, 15:37:22
Ort: Borlänge

Inlägg av jeken »

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!!... :wink:
Användarvisningsbild
Swech
EF Sponsor
Inlägg: 4750
Blev medlem: 6 november 2006, 21:43:35
Ort: Munkedal, Sverige (Sweden)
Kontakt:

Inlägg av Swech »

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.



Swech
Skriv svar