Forum: Mikrocontroller und Digitale Elektronik Problem EXOR-Verknüpfung beim PIC (MPLAB + HI-Tech-Compiler)


von Nico (nico123)


Lesenswert?

Hallo Forengemeinde,

ich habe mich jetzt mal an den PICs (PIC16F648A) versucht und scheitere 
jetzt an einer einfachen EXOR-Verknüpfung.
Ich habe ein LED an Port A1 über einen Vorwiderstand an Masse. Der PIC 
läuft über den internen Oszillator. Normalerweise sollte die LED doch so 
blinken, tut sie aber nicht. Sie geht nur an und bleibt an.
Warum ist das so?
Setze und lösche ich den Port A1 mit 2 Befehlen funktioniert es.
Kennt der HI-TECH-Compiler in der freien LITE-Version kein EXOR?
Hier mal der Code:
1
#include <htc.h>
2
3
__CONFIG(FOSC_INTOSCIO & WDTE_OFF & PWRTE_ON & MCLRE_ON & BOREN_ON & LVP_ON & CPD_OFF & CP_OFF);
4
5
#define _XTAL_FREQ 48000
6
7
void main(void)
8
{
9
   OSCF = 0;                // Internal Oscillator = 48kHz
10
   TRISA = 0x00;            // PortA = output
11
12
   PORTA = 0x00;            // PORTA = aus
13
  
14
   while(1)
15
   {
16
      PORTA ^= 0x02;        // toggel LED
17
      __delay_ms(500);
18
   }
19
}

von waldi's (Gast)


Lesenswert?

PORTA ^= 0x02;
ist eine Kurzversion von:
PORTA = PORTA ^ 0x02;

Es wird also erst mal von PORTA gelesen. Da hast Du ja den 
entsprechenden Pin "über einen Vorwiderstand an Masse" gelegt. Es wird 
wohl für das interessante Bit immer eine 0 gelesen.

von Nico (nico123)


Lesenswert?

Ist das wirklich so?
Wenn ich den Port an habe ist der Ausgangstreiber an, d.h. doch dass 
auch 'ne 1 eingelesen wird und nicht die 0 über die LED+Vorwiderstand? 
Oder sehe ich das falsch?

von picuser (Gast)


Lesenswert?

Das ist die sog. IN/OUT-Falle bei den PICs

siehe http://sprut.de/electronic/pic/fallen/fallen.html#inout

von Nico (nico123)


Lesenswert?

Danke für den Link!
Mein Port ist aber auf Ausgang gesetzt, also sollte es keine Probleme 
machen.

von Jens (Gast)


Lesenswert?

Du hast sicherlich noch den Analogkomparator an. Schreibe mal ein CMCON 
= 0b111; an den Anfang deines Codes, dann lässt sich der PORTA beliebig 
für IO nutzen. Stichtwort "Analog-Falle".

Gruß
Jens

von Nico (nico123)


Lesenswert?

Das wars, ich danke dir Jens!
Warum ist denn der Comparator standardmäßig an? Da soll einer drauf 
kommen. :-)

von Jens (Gast)


Lesenswert?

Glaub mir, ich bin da auch zuerst reingefallen. Aber das vergisst du 
jetzt nie wieder ;-)

Auch wenn mensch vielleicht intuitiv erwarten würde, dass der Komparator 
standardmäßig aus ist.. Steht aber alles im Datenblatt.

Gruß
Jens

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.