Zitat Zitat von Siro Beitrag anzeigen
was mache ich denn falsch ?, das kann doch nicht so kompliziert sein.....

Es wird mir wieder Mal nix anderes übrig bleiben als den gesamten Code in Assembler zu programmieren.
Was gibt es für einen Grund, hier Assembler zu verwenden? Seitdem es C für die PICS gibt, hab ich kein Assembler mehr verwendet. Und ich kann auch in deinem Code nichts erkennen, daß sich nicht in C formulieren lässt.

Wenn ich deinen Code richtig verstanden habe, soll er, ein Array von unsigned chars bitweise auf einem Port ausgeben.

Code:
#include <xc.h>
#include <stdint.h>

#define LED_COUNT 24
uint8_t LedArray[LED_COUNT];

void LedShiftOut(uint8_t *leds, int8_t count) {
    uint8_t one_byte;
    int8_t bit_count;

    while (count) {
        one_byte = *leds++; // next Byte
        for (bit_count = 0; bit_count < 8; bit_count++) {
            LATA5 = one_byte & 0x01; // lowest Bit
            one_byte >>= 1;
        }
        count--;
    }
}

void main(void) {
    LedShiftOut(LedArray, LED_COUNT);
    return;
}
Eigentlich ist das Ganze aber eine Aufgabe für das SPI Modul, wobei man MISO und CLK nicht verwendet.

Und zu deiner Frage mit
Code:
#define ZAEHLER 8
Der Compiler kennt ZAEHLER nicht, alle Zeilen, die mit einem # beginnen, werden vom Präprozessor bearbeitet. Die bekommt der Compiler garnicht zu sehen. Das "#define" tut das Gleiche, was "suchen und ersetzten" in deinem Editor macht, jedesmal vor dem Compilieren.

Wenn ich lese, was du hier in diesem Thread so schreibst, wirst du mit deinem Ansatz nicht wirklich glücklich werden. Entweder du schreibst alles in Assembler, wozu es IMHO keine Notwendigkeit gibt, oder du programmierst in C. Die Mischung ist eigentlich immer Pfusch und führt am Ende zu unwartbarem Code. Die Arduino-Leute sind noch einen Schritt weiter gegangen und verwenden C++.

MfG Klebwax