neu bei PIC, das ist etwas verwirrend.
Für den Schalter usart sollten wir den ANSEL-Registrierer löschen, um ihn als digitale E / A zu erstellen, damit nur wir 0 oder 1 von diesem Pin lesen können?,
Das Datenblatt sagt, wenn wir einen bestimmten Pin als analogen Eingang festlegen und wenn dieser Pin gelesen wird, wird 0 zurückgegeben. Was ist also die Notwendigkeit von ANSEL und wann zu aktivieren
Wenn ich völlig falsch bin, vergib mir bitte und erkläre es mir, danke
Sie sollten das ANSEL-Bit für jeden Pin auf High setzen, für den Sie die analoge Funktion verwenden möchten. Andernfalls stellen Sie ihn niedrig ein, um die digitale Funktion zu verwenden.
Wenn Sie es niedrig lassen und analoge Funktionalität benötigen, funktioniert es überhaupt nicht.
Wenn Sie es hoch lassen, funktioniert der digitale Ausgang in diesem speziellen Chip immer noch, aber der Pin zeigt Null an. Wenn dies ein Chip ohne die LAT-Funktion ist, führt eine Lese-Modifizier-Schreib-Anweisung zu einem fehlerhaften Betrieb.
Wenn Sie beispielsweise 0xFF an den Port schreiben und das ANSEL-Bit, das Bit 1 entspricht, 1 ist, werden alle Pins tatsächlich hoch gehen. Wenn ich jedoch versuche, Bit 0 auf 0 zu setzen (eine Read-Modify-Write-Anweisung - BCF in Assemblersprache), damit der Port auf 0xFE gehen soll, gehen beide Bits 0 und 1 auf Null (0xFC), weil die Anweisung schreibt den von Bit 1 gelesenen Wert zurück . Dies ist normalerweise sehr unerwünscht - es ändert sich ein wenig, das Sie nicht ändern wollten.
Hier ist die Maschinenzyklusaktivität eines BCF-Befehls in einem Midrange-PIC:
Im Zyklus Q2 wird das Register (in diesem Fall ein Port) gelesen, das gewünschte Bit gelöscht und dann in dasselbe Register zurückgeschrieben.
Im obigen Beispiel wäre die Maschinensprache-Anweisung zum Löschen von Bit 0 von PORTA:
BCF PORTA, 0
Ein Compiler fügt den Anweisungen in Maschinensprache eine Ebene hinzu, aber wenn er kein Schattenregister implementiert (was die Dinge verlangsamt, so dass es wahrscheinlich ein unerwünschter Standard wäre), besteht das RMW-Problem.
Ich bin kein Experte für PICs, aber es ist üblich, dass Pins je nach ausgewählter Funktion unterschiedliche Eingangsschaltungen haben.
Um ein analoges Signal bestmöglich zu erhalten, können Pins in einen analogen Modus geschaltet werden. Sie verwenden diesen Modus in Verbindung mit einem Analog-Digital-Wandler (um mehr als nur eine 1 oder 0 zu lesen) oder einem Digital-Analog-Wandler, wenn Sie eine andere Spannung als VDD oder VSS ausgeben möchten.
Auch werden die Signale in Ihrem Mikrocontroller je nach gewählter Funktion unterschiedlich geroutet.
Für jede digitale Funktion an einem Pin müssen Sie ihn auf den digitalen Modus (den normalen Modus) einstellen.
Sehr hilfreich, um zu verstehen, wie der jeweilige Mikrocontroller die Pin-Funktionen implementiert, sind normalerweise irgendwo im Datenblatt angegeben (entweder im GPIO-Teil oder in einem eigenen Abschnitt).
Für einen PIC12(L)F1571 sieht es so aus :
Was uns zeigt, dass NOT ANSEL mit einem UND zum digitalen Eingang der Pins verwendet wird. Wenn also ANSEL 1 ist, wird das NOT es zu einer 0 machen und das UND wird zu einer 0 führen, unabhängig von der Spannung am Eingang.
Sie fragen sich vielleicht, warum sie das so machen. Es gibt ein paar Gründe, die mir einfallen (ich entwerfe keine Mikrocontroller, daher weiß ich es nicht genau):
masternone
Spehro Pefhany
Spehro Pefhany