Hallo An die C Hirschen... (bin noch Anfänger) Ist es in C möglich (verwende Codevision-Umgebung) die Pins 2,3,4,5 von Port C als EINE Variable anzusprechen (Nibble)? Oder muss ich mit einer Maske die unbenötigten maskieren??? Danke
Hallo Marcel, Port C (8 Bit?) auslesen: c <-- Port C 2 mal rechts shiften und maskieren: c = (c>>2)&0x0F Jetzt liegen die Pinwerte 2,3,4,5 als eine Variable vor. Grüße Oliver
Hallo Oliver Ich möchte nicht auslesen, sondern ausgeben. Und wenn ich die 4Bit auf den ganzen Port mit 8Bit schreiben würde, wären die Bits 0-3 gesetzt anstatt Bit 2-5. Ich suche irgendwas in der Form von: #define BCD_Output [PORTC.2;PORTC.3;PORTC.4;PORTC.5] Vielleicht könnte ich selbst einen Datentyp definieren (#typedef) aber ich weiss nicht, was ich schreiben soll...
Ich weiss nicht, wie Du Deine Ports in C ansprichst, aber so müßte es gehen: PortC = PortC | (Deine_Variable&0xF)<<2 Deine_Variable enthält den Wert(low nibble). High Nibble wird ausgeblendet und alles an die Bitstelle 2 bis 5 verschoben.
@Oliver So ist es aber leider nicht möglich eine 0 auszugeben, wenn der Portpin vorher auf einer 1 stand.
Stimmt! Hüftschuß: PortC = (PortC&0xC3) | (Deine_Variable&0xF)<<2 Muß aber irgendwie eleganter gehen!? Denke noch mal darüber nach
Hi Marcel, um das Maskieren wirst du wohl nicht herumkommen; schreib dir doch einfach ein Makro. Weiß gerade nicht, ob CV mit dieser Terminologie arbeitet, aber so ungefähr wird es gehen: #define LCD_PORT(X) PORTC = ((PINC&0xC3)|X) Beim GCC: #define LCD_PORT(X) outp((inp(PINC)&0xC3)|X,PORTC) Gruß Olaf
hi, probier doch mal ein bisschen inline assebler und bastel dir was mit SBI und CBI (set bit in I/o register und das gleiche mit clear) beispielfetzen: asm volatile("cbi portc, 0") // setzt pb0 <- 0 asm volatile("sbi portc, 1") // setzt pb1 <- 1 natürlich noch ne nette funktion und ne schleife und ein par ifs und viele klammern drumbasteln (asm ist eben doch unkomplizierter ;D) ich hab wirklich keine ahnung, obs so geht, aber meiner meinung nach wärs ein möglicher ansatz :D
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.