Problem EXOR-Verknüpfung beim PIC (MPLAB + HI-Tech-Compiler)

OP #2150605
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
}
Gast #2150837
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.
Gast #2151548
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren