- Akku Tests und Balkonkraftwerk Speicher         
Ergebnis 1 bis 10 von 12

Thema: Anfänger erbittet Hilfe(2)

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #2
    Erfahrener Benutzer Roboter-Spezialist Avatar von witkatz
    Registriert seit
    24.05.2006
    Ort
    NRW
    Alter
    54
    Beiträge
    553
    Blog-Einträge
    17
    Die Konfiguration der Portpins ist leider nicht allgemeingültig für alle PICs, da ist das Datenblatt dein A&O für I/O
    Der PIC16F877A z.B. hat keine Pullups am PortD. Also müssen Pullups extern angeschlossen oder auf dem Entwicklungsboard gejumpert werden. Auch hat der 877 keine LAT Register, man gibt also direkt auf PORT aus.

    Die Pullups der Ports, die welche haben werden über Flags in den SFR (special function register) aktiviert. Z.B. um die Pullups am PortB des PIC16F877A zu aktivieren wird das Flag nRBPU im Register OPTION_REG gelöscht. Der XC8 bringt für alle Register Definitionen und Strukturen mit Bitfeldern mit und so gibt es diverse Möglichkeiten auf die Register und auf die Flags zuzugreifen. Um das nRBPU Flas im OPTION _REG zu löschen fallen mir drei gleichwertige ein:
    Code:
        OPTION_REG &= ~(1 << _OPTION_REG_nRBPU_POSN);
        OPTION_REG &= ~_OPTION_REG_nRBPU_MASK;
        OPTION_REGbits.nRBPU = 0;
        nRBPU = 0;
    Auch beim Zugriff auf die I/O Pins gibt es diverse Möglichkeiten. Ich definiere mir meistens Labels für die Hardwarezuordnung und nutze die von XC8 fürs PORTD definierte Struktur PORTDbits mit Bitfeldern. Für die meisten Register definiert XC8 solche Strukturen mit ABCbits im Namen. Um nah an deinem Beispiel zu bleiben würde ich die Pins für Taster und LED mit Labeln benennen und so sähe das bei mir vielleicht aus
    Code:
    #include <xc.h>
    #define TasterLEDan PORTDbits.RD0
    #define TasterLEDaus PORTDbits.RD1
    #define LED4 PORTDbits.RD4
    
    void main(void) {
        TRISD = 0b00001111; // D0..D3 INPUT D4..D7 OUTPUT
        while(1){
            if(TasterLEDan == 0){
                LED4 = 1;
            }
            if(TasterLEDaus == 0){
                LED4 = 0;
            }
        }
    }
    Hier noch ein paar deutschsprachige Tutorials, die das Thema Benutzung der I/O Pins in C beleuchten:
    https://pic-projekte.de/blog/pic-c-t...ziell-fur-pic/
    http://www.hs-ulm.de/users/vschilli/.../uCquick-X.pdf -> s. Kapitel 3
    http://www.sprut.de/electronic/pic/c...isches.html#io

    *******
    Noch ein Nachtrag. Um nachzusehen, welche Definitionen für ein bestimmtes Register im XC8 vorliegen, schaue ich im entspr. Header nach. Dafür reicht ein STRG+Klick auf den Registernamen. Gebe z.B. im Quelltext PORTD ein, mach ein STRG+Klick drauf und schwups bist du z.B. im pic16f877a.h an der Stelle der für PORTD relevanten Definitionen. Nur die Bitdefinitionen wie RD0 und RD4 findet man an etwas anderer Stelle in der Headerdatei. Ob man in C PORTDbits.RD4 = 0 hinschreibt oder RD4 = 0 ist letztendlich Geschmacksache. Aus beidem wird im Assembler das gleiche BCF PORTD, 0x4

    Gruß
    witkatz
    Geändert von witkatz (29.03.2017 um 23:07 Uhr)

Ähnliche Themen

  1. [ERLEDIGT] PIC Neueinsteiger erbittet Hilfe
    Von oderlachs im Forum PIC Controller
    Antworten: 22
    Letzter Beitrag: 20.04.2016, 17:07
  2. hilfe Anfänger braucht hilfe beim start
    Von thomas3 im Forum Robby RP6
    Antworten: 26
    Letzter Beitrag: 20.09.2010, 21:07
  3. Anfänger Hilfe?
    Von Chimaira im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 2
    Letzter Beitrag: 15.01.2007, 16:50
  4. Hilfe für Anfänger :o)
    Von Sascha600xt im Forum C-Control II
    Antworten: 7
    Letzter Beitrag: 25.04.2006, 15:42
  5. AVR anfänger HILFE !!!
    Von khazad im Forum AVR Hardwarethemen
    Antworten: 3
    Letzter Beitrag: 17.11.2004, 20:44

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

fchao-Sinus-Wechselrichter AliExpress