MENÜ English Ukrainian Russisch Startseite

Kostenlose technische Bibliothek für Bastler und Profis Kostenlose technische Bibliothek


ENZYKLOPÄDIE DER FUNKELEKTRONIK UND ELEKTROTECHNIK
Kostenlose Bibliothek / Schemata von radioelektronischen und elektrischen Geräten

Was ist PIC? Enzyklopädie der Funkelektronik und Elektrotechnik. Enzyklopädie der Funkelektronik und Elektrotechnik

Kostenlose technische Bibliothek

Lexikon der Funkelektronik und Elektrotechnik / Mikrocontroller

Kommentare zum ArtikelKommentare zum Artikel

Einführung. PIC16CXX sind 8-Bit-Mikrocontroller mit RISC-Architektur, hergestellt von Microchip Technology. Diese Familie von Mikrocontrollern zeichnet sich durch niedrigen Preis, geringen Stromverbrauch und hohe Geschwindigkeit aus.

Mikrocontroller verfügen über ein integriertes EEPROM-Programm und Daten-RAM und sind in 18- und 28-Pin-Gehäusen erhältlich.

PIC-OTPs sind einmalig vom Benutzer programmierbare Controller, die für vollständig getestete und vollständige Produkte entwickelt wurden, die keinen weiteren Codeänderungen unterliegen. Diese Controller sind in günstigen Kunststoffgehäusen mit einem voreingestellten externen Oszillatortyp erhältlich – Quarz oder RC.

Für das Debuggen von Programmen und das Prototyping steht eine Version von Controllern mit UV-Löschung zur Verfügung. Diese Controller ermöglichen eine große Anzahl von Schreib-/Löschzyklen und haben eine sehr kurze Löschzeit – normalerweise 1–2 Minuten.

Allerdings ist der Preis solcher Controller deutlich höher als bei einmal programmierbaren Controllern, sodass sich der Einbau in Serienprodukte nicht lohnt.

Für Produkte, deren Programm sich ändern kann oder variable Teile, Tabellen, Kalibrierungsparameter, Tasten usw. enthält, steht ein elektrisch lösch- und umprogrammierbarer PIC16C84-Controller zur Verfügung. Es enthält außerdem ein elektrisch programmierbares Daten-ROM. Dies ist genau der Controller, den wir für Experimente verwenden werden.

Um diesen Artikel optimal nutzen zu können, benötigen Sie einen IBM PC-kompatiblen Personalcomputer, ein Programmiergerät, das an den parallelen Anschluss des Computers angeschlossen ist, einen PIC16C84-Chip, eine Entwicklungsplatine, 8 LEDs mit Widerständen, ein +5-V-Netzteil und ein Sockel für den Chip.

Wir werden kleine Programmteile für den PIC tippen, sie zusammensetzen, in den Chip schreiben und dann das Ergebnis an den LEDs beobachten. Wir werden in diesem Artikel die grundlegenden MICROCHIP-Mnemoniken verwenden, damit Sie andere Anwendungsbeispiele und Auflistungen im Embedded Control Handbook einfacher verwenden können.

PIC16CXX-FAMILIE Wir beginnen eine detaillierte Beschreibung der PIC-Mikroschaltungsfamilie mit den Merkmalen und Vorteilen, die diese Mikrocontroller von anderen unterscheiden. Für Informationssicherheitsanwendungen verfügt jeder PIC über ein Sicherheitsbit, das programmiert werden kann, um das Lesen von Programmcode und Daten-ROM zu verhindern. Beim Programmieren wird zunächst der Programmcode geschrieben, auf Korrektheit der Aufzeichnung überprüft und anschließend das Privacy-Bit gesetzt. Wenn Sie versuchen, eine Mikroschaltung mit gesetztem Privacy-Bit zu lesen, werden beim PIC16C5X die höheren 8 Bits des Codes als 0 gelesen und die unteren 4 Bits sind die verschlüsselten 12 Bits des Befehls. Bei PIC16C84 werden in ähnlicher Weise die 7 höchstwertigen Bits als Nullen gelesen und die 7 niedrigstwertigen Bits stellen die verschlüsselten 14 Befehlsbits dar. Das elektrisch programmierbare Daten-ROM PIC16C84 kann nicht gelesen werden, wenn das Sicherheitsbit gesetzt ist. Abbildung 1 zeigt alle derzeit produzierten Mikrocontroller und gibt ihre kurzen Eigenschaften. (Abbildung auf Seite 2-1) Mikrocontroller der PIC-Familie verfügen über ein sehr effizientes Befehlssystem, das aus nur 35 Anweisungen besteht. Alle Anweisungen werden in einem Zyklus ausgeführt, mit Ausnahme von bedingten Verzweigungen und Anweisungen, die den Programmzähler ändern, die in zwei Zyklen ausgeführt werden. Ein Befehlsausführungszyklus besteht aus 2 Taktperioden. Bei einer Frequenz von 4 MHz beträgt die Befehlsausführungszeit also 4 μs. Jeder Befehl besteht aus 1 Bits, aufgeteilt in einen Operationscode und einen Operanden (Manipulation mit Registern, Speicherzellen und Direktdaten ist möglich). Das Befehlssystem der PIC14CXX-Mikrocontroller ist in Abbildung 16 dargestellt. (Tabelle 2 auf Seite 7.2-2) Die hohe Geschwindigkeit der Befehlsausführung im PIC wird durch die Verwendung einer Dual-Bus-Harvard-Architektur anstelle der herkömmlichen Einzelbus-Von-Neumann-Architektur erreicht die Architektur. Die Harvard-Architektur basiert auf einer Reihe von Registern mit separaten Bussen und Adressräumen für Anweisungen und Daten. Ein Registersatz bedeutet, dass alle Softwareobjekte, wie z. B. E/A-Ports, Speicherorte und Timer, physisch implementierte Hardwareregister sind.

Der Datenspeicher (RAM) für PIC16CXX hat eine Breite von 8 Bit, der Programmspeicher (PROM) hat eine Breite von 12 Bit für PIC16C5X und 14 Bit für PIC16CXX. Durch die Verwendung der Harvard-Architektur können Sie eine Hochgeschwindigkeitsleistung bei Bit-, Byte- und Registeroperationen erzielen. Darüber hinaus ermöglicht die Harvard-Architektur die Pipeline-Ausführung von Anweisungen, wenn die aktuelle Anweisung gleichzeitig ausgeführt und die nächste gelesen wird. In der traditionellen Von-Neumann-Architektur werden Befehle und Daten über einen gemeinsamen oder gemultiplexten Bus übertragen, wodurch die Möglichkeiten des Pipelining eingeschränkt werden. Abbildung 3 zeigt ein Blockdiagramm der Dual-Bus-Struktur des PIC16CXX. (Abbildung B auf Seite 2-536) Wie Sie sehen können, ähneln die internen physischen und logischen Komponenten des PIC16CXX denen aller anderen Mikrocontroller, mit denen Sie bisher gearbeitet haben. Daher ist das Schreiben von Programmen für den PIC nicht schwieriger als für jeden anderen Prozessor. Logik und nur Logik...

Die Harvard-Architektur und die große Befehlsbreite ermöglichen es natürlich, den Code für den PIC deutlich kompakter zu gestalten als für andere Mikrocontroller und die Geschwindigkeit der Programmausführung deutlich zu erhöhen.

PIC REGISTER SET Alle Softwareobjekte, mit denen der PIC arbeiten kann, sind physische Register. Um zu verstehen, wie der PIC funktioniert, müssen Sie verstehen, welche Register er hat und wie man mit jedem von ihnen arbeitet. Abbildung 4 zeigt alle Register des PIC16C84. (Abbildung 3.7.1 auf Seite.

2-541) Beginnen wir mit einer Reihe von Betriebsregistern. Dieser Satz besteht aus einem Register für indirekte Adressierung (f0), einem Timer-/Zählerregister (f1), einem Programmzähler (f2), einem Statuswortregister (f3), einem Auswahlregister (f4) und E/A-Registern (f5). , f6).

Es ist unbedingt erforderlich, dass Sie die Verwendung dieser Register verstehen, da sie den Großteil der programmierbaren Objekte des Mikrocontrollers darstellen. Da wir vor allem verstehen müssen, „wie man steuert“ und nicht, „wie es intern gemacht wird“, haben wir sehr einfache Beispiele beigefügt, die die mögliche Verwendung jedes Registers zeigen.

f0...INDIREKTES ADRESSIERUNGSREGISTER IND0 Das indirekte Adressierungsregister f0 existiert physisch nicht. Es verwendet das Auswahlregister f4, um indirekt eines der 64 möglichen Register auszuwählen.

Jeder Befehl, der f0 verwendet, greift tatsächlich auf das Datenregister zu, auf das f4 zeigt.

f1...TIMER-/ZÄHLERREGISTER TMR0 Das Timer-/Zählerregister TMR0 kann wie jedes andere Register geschrieben und gelesen werden. TMR0 kann durch ein externes Signal erhöht werden, das an den RTCC-Pin angelegt wird, oder durch eine interne Frequenz, die der Befehlsfrequenz entspricht.

Der Hauptzweck eines Timers/Zählers besteht darin, die Anzahl externer Ereignisse zu zählen und die Zeit zu messen. Ein Signal von einer externen oder internen Quelle kann auch mithilfe eines im PIC integrierten programmierbaren Teilers vorgeteilt werden.

f2...PROGRAMMZÄHLER PCL Der Programmzähler (PC) wird verwendet, um eine Folge von Adressen von Programm-ROM-Zellen zu generieren, die 14-Bit-Anweisungen enthalten. Der PC verfügt über eine 13-Bit-Kapazität, wodurch Sie 8Kx14 ROM-Zellen direkt ansprechen können. Für den PIC16C84 sind jedoch physikalisch nur 1K-Zellen verfügbar. Die unteren 8 Bits des PCs können über das f2-Register geschrieben und gelesen werden, die höheren 5 Bits werden aus dem PCLATCH-Register geladen, das die Adresse 0Ah hat.

f3...STATUSWORT-REGISTER Das Statuswort-Register ähnelt dem PSW-Register, das in den meisten Mikroprozessoren zu finden ist. Es enthält die Übertrags-, Dezimal- und Nullbits sowie die Aktivierungsmodusbits und Paging-Bits.

f4...FSR-AUSWAHLREGISTER Wie bereits erwähnt, dient das FSR-Auswahlregister in Verbindung mit dem indirekten Adressierungsregister f0 zur indirekten Auswahl eines der 64 möglichen Register. Physisch werden 36 Benutzer-RAM-Register verwendet, die sich an den Adressen 0Ch–2Fh befinden, und 15 Serviceregister, die sich an verschiedenen Adressen befinden.

f5, f6... I/O-REGISTER PORTA, PORTB Die Register f5 und f6 entsprechen den beiden I/O-Ports, die auf dem PIC16C84 verfügbar sind. Port A verfügt über 5 Bits PA4-PA0, die über das TRISA-Register mit der Adresse 85h individuell als Ein- oder Ausgänge programmiert werden können. Port B verfügt über 8 Bit PB7-PB0 und wird über das TRISB-Register mit der Adresse 86h programmiert. Job 1 im TRIS-Registerbit programmiert das entsprechende Portbit als Eingang. Beim Lesen eines Ports wird der unmittelbare Zustand des Ausgangs gelesen; beim Schreiben auf einen Port erfolgt das Schreiben in das Pufferregister.

f8, f9... EPROM-REGISTER EEDATA, EEADR PIC16C84 verfügt über ein eingebautes elektrisch umprogrammierbares ROM mit einer Größe von 64 Bytes, das mithilfe des EEDATA-Datenregisters und des EEADR-Adressregisters gelesen und geschrieben werden kann. Das Schreiben eines neuen Bytes dauert etwa 10 ms und wird durch einen eingebauten Timer gesteuert. Die Steuerung des Schreibens und Lesens erfolgt über das EECON1-Register, das die Adresse 88h hat. Für zusätzliche Kontrolle über die Aufzeichnung verwenden Sie das EECON2-Register, das die Adresse 89h hat.

ALLGEMEINE ZWECKREGISTER Allzweckregister sind statisches RAM, das sich an den Adressen 0Ch–2Fh befindet. Insgesamt können im PIC16C84 36 RAM-Zellen verwendet werden.

SPEZIALREGISTER W, INTCON, OPTION Schauen wir uns zum Schluss noch die speziellen PIC-Register an. Dazu gehören das Arbeitsregister W, das in den meisten Befehlen als Akkumulatorregister verwendet wird, sowie die Register INTCON und OPTION. Das INTCON-Interrupt-Register (Adresse 0Bh) dient zur Steuerung von Interrupt-Modi und enthält Interrupt-Freigabebits aus verschiedenen Quellen und Interrupt-Flags. Das OPTION-Modusregister (Adresse 81h) wird zum Einstellen der Signalquellen für Vorteiler und Timer/Zähler sowie zum Einstellen des Teilungsverhältnisses des Vorteilers, der aktiven Flanke des Signals für RTCC und des Interrupt-Eingangs verwendet. Darüber hinaus können mit dem OPTION-Register Lastwiderstände für als Eingänge programmierte Port-B-Bits aktiviert werden.

WATCH-TIMER WDT Der Watchdog-Timer WDT wurde entwickelt, um katastrophale Folgen durch zufällige Programmfehler zu verhindern. Es kann auch in Anwendungen im Zusammenhang mit der Zeitmessung verwendet werden, beispielsweise als Detektor für verpasste Impulse. Die Idee bei der Verwendung eines Watchdog-Timers besteht darin, ihn regelmäßig unter der Kontrolle eines Programms oder eines externen Einflusses zurückzusetzen, bevor sein Timeout abläuft und der Prozessor zurückgesetzt wird. Wenn das Programm normal läuft, sollte der CLRWDT-Watchdog-Reset-Befehl regelmäßig ausgeführt werden, um ein Zurücksetzen des Prozessors zu verhindern. Wenn der Mikroprozessor versehentlich über das Programm hinausgeht (z. B. aufgrund starker Störungen im Stromversorgungskreis) oder in einem Teil des Programms hängen bleibt, wird der Befehl zum Zurücksetzen des Watchdog-Timers höchstwahrscheinlich nicht innerhalb einer ausreichenden Zeit ausgeführt und a Es erfolgt ein vollständiger Prozessor-Reset, der alle Funktionen initialisiert. Register und das System in einen betriebsbereiten Zustand versetzen.

Der Watchdog-Timer im PIC16C84 benötigt keine externen Komponenten und läuft auf einem eingebauten RC-Oszillator, und die Erzeugung stoppt auch dann nicht, wenn keine Prozessortaktrate vorhanden ist. Die typische Watchdog-Timer-Periode beträgt 18 ms. Sie können einen Prescaler an den Watchdog-Timer anschließen und dessen Periode auf bis zu 2 Sekunden erhöhen.

Eine weitere Funktion des Watchdog-Timers besteht darin, den Prozessor aus einem Energiesparmodus einzuschalten, in den der Prozessor mit dem SLEEP-Befehl geschaltet wird. In diesem Modus verbraucht der PIC16C84 sehr wenig Strom – etwa 1 µA. Der Wechsel von diesem Modus in den Betriebsmodus kann entweder durch ein externes Ereignis per Tastendruck, durch Auslösen eines Sensors oder durch einen Watchdog-Timer erfolgen.

TAKTGENERATOR Für Mikrocontroller der PIC-Familie können vier Arten von Taktgeneratoren verwendet werden: XT Quarzresonator HS Hochfrequenz-Quarzresonator LP Mikroverbrauchs-Quarzresonator RC RC-Kette Die Art des verwendeten Taktgenerators wird im Anwendungsprozess der Programmierung festgelegt die Mikroschaltung. Wenn die Optionen XT, HS und LP angegeben sind, wird ein Quarz- oder Keramikresonator oder eine externe Taktquelle an die Mikroschaltung angeschlossen, und wenn die Option RC angegeben ist, werden ein Widerstand und ein Kondensator angeschlossen. Natürlich ist ein Keramik- und insbesondere ein Quarzresonator viel genauer und stabiler, aber wenn keine hohe Zeitgenauigkeit erforderlich ist, kann die Verwendung eines RC-Generators die Kosten und Abmessungen des Geräts reduzieren.

RESET-SCHALTUNG Mikrocontroller der PIC-Familie verwenden eine interne Power-On-Reset-Schaltung in Kombination mit einem Generator-Start-Timer, wodurch in den meisten Situationen auf einen herkömmlichen Widerstand und Kondensator verzichtet werden kann.

Schließen Sie einfach den MCLR-Eingang an eine Stromquelle an. Wenn beim Einschalten der Stromversorgung Impulsgeräusche oder Überspannungen auftreten können, ist es besser, einen Vorwiderstand von 100–300 Ohm zu verwenden. Wenn die Leistung sehr langsam ansteigt (langsamer als 70 ms) oder Sie mit sehr niedrigen Taktraten arbeiten, müssen Sie eine herkömmliche Rücksetzschaltung aus Widerständen und Kondensatoren verwenden.

VON DER THEORIE ZUR PRAXIS...

Wir haben uns kurz mit den Hauptelementen der PIC-Mikrocontroller-Familie vertraut gemacht. Kommen wir nun zu den praktischen Übungen.

Wir werden kurze Programme schreiben, sie zusammensetzen, in eine Mikroschaltung schreiben und sehen, was passiert.

Dazu benötigen wir folgende Dinge: - PIC16C84-Chip; - MPALC-Assembler; - PROPIC-Programmierer; - Stromversorgung DC oder AC 18-36 V; - Steckbrett mit Anzeigegerät.

Das schematische Diagramm des Anzeigegeräts, das wir verwenden werden, um die Funktionsweise der wichtigsten PIC16C84-Befehle zu demonstrieren, ist in Abbildung 5 dargestellt. (Sie müssen zeichnen) Wie Sie sehen können, besteht das Gerät lediglich aus 8 LEDs mit Strombegrenzung Widerstände und Frequenzeinstellelemente. Jeder Pin der PIC-Mikrocontroller-Familie kann eine LED ohne zusätzliche Verstärker direkt steuern.

Was ist PIC?

Beginnen wir mit einer Beschreibung des Basiscodes, der in unseren Beispielen verwendet wird. Wenn Sie mit dem Schreiben von Code für Ihr Projekt beginnen, sollte der Header-Abschnitt (der gesamte Code bis zur Zeile mit dem ORG 0-Ausdruck) die Besonderheiten Ihrer Anwendung berücksichtigen. Der Header-Abschnitt definiert logische Namen für alle im Projekt verwendeten Ressourcen – Ports, Bit- und Byte-Variablen und Register. Unser Header legt auch die I/O-Ports fest, sodass alle Bits der Ports A und B nach Ausführung der folgenden Befehle als Ausgänge gesetzt werden: MOVLW INITA MOVWF TRISA MOVLW INITB MOVWF TRISB Beim Einschalten setzt der PIC16C84 alle Bits von Ports A und B als Eingang und startet die Ausführung des Programms ab Adresse 000h. Der Basiscode ist in Abbildung 6 dargestellt. (muss zeichnen) Etwas in der Art: ; Beispiel für Basiscode für das Demoprogramm; LISTE P=16C84, E=2 ; ; Kopfbereich; ; Beschreibung der Betriebsregister TMR0 EQU 01h PC EQU 02h STATUS EQU 03h FSR EQU 04h ; E/A-Register CNTRLPORT EQU 05h DATAPORT EQU 06h ; RAM-Zellen SCRATCH EQU 0Ch DIGIT EQU 0Dh ; Registerbits STATUS C EQU 0h DC EQU 1h Z EQU 2h PD EQU 3h TO EQU 4h RP EQU 5h ; Steuerregister TRISA EQU 85h TRISB EQU 86h ; Initialisierungswörter für Ein-/Ausgabe-Ports INITA EQU B'00000000' INITB EQU B'00000000' ; ; Arbeitsbereich; ; Beginn des ausführbaren Codes ORG 0 GOTO BEGIN ; ORG 100h BEGIN MOVLW INITA MOVWF TRISA MOVLW INITB MOVWF TRISB ; ; Fügen Sie hier den Beispielcode ein. ENDE ; Sehen Sie sich bei Bedarf Abbildung 4 noch einmal an, während wir den zugrunde liegenden Code besprechen. Erstens werden alle Zeilen, die mit dem Zeichen „;“ beginnen, vom Assembler als Kommentare wahrgenommen. Fahren wir mit dem TMR0-Ausdruck fort. Wir haben dem Assembler mitgeteilt, dass jedes Mal, wenn das Wort TMR0 angetroffen wird, es durch den Wert 01h (01 hexadezimal) ersetzt werden muss. Das Wort „EQU“ bedeutet Gleichheit. Daher haben wir TMR0 den Wert 1h zugewiesen. Wie aus Abbildung 4 ersichtlich ist, hat das TMR0-Register tatsächlich die Adresse 1h. Sie können 01h jedes Mal verwenden, wenn Sie das TMR0-Register ansprechen möchten, aber das Debuggen wird viel schwieriger, da Sie immer bedenken müssen, dass 01h RTCC bedeutet. Möglicherweise haben Sie auch Daten gleich 01h. Durch die Verwendung symbolischer Namen werden Mehrdeutigkeiten vermieden und der Quelltext leichter lesbar. Sie können auch Ausdrücke zum Definieren der PC-, STATUS- und FSR-Register sehen. Der PC-Name entspricht der Registeradresse 02h, der STATUS-Name entspricht der Registeradresse 03h, der FSR-Name der Registeradresse 04h usw. Wir legen auch Namen für die I/O-Ports fest, CNTRLPORT (05h) und DATAPORT (06h). RAM-Zellen können auch Namen haben. Wir haben die Namen „SCRATCH“ für die Zelle mit der Adresse 0Ch und „DIGIT“ für die Zelle mit der Adresse 0Dh gewählt. Wenn Sie diesen Text bis zum Ende lesen, werden Sie feststellen, dass wir nirgends PC direkt verwenden, obwohl dieser Name definiert ist. Das ist kein Fehler – Sie können Namen definieren und sie dann nicht verwenden, obwohl Sie natürlich keinen Namen verwenden können, wenn er nicht zuvor definiert wurde. Machen Sie sich darüber keine allzu großen Sorgen – die Aufgabe des Assemblers besteht darin, den Text zu überprüfen, um sicherzustellen, dass alle Regeln erfüllt sind, und Sie erhalten Fehlermeldungen, wenn etwas nicht übereinstimmt. Sie können nicht nur Register benennen, sondern auch einzelne Bits innerhalb von Registern. Beachten Sie den Abschnitt, der das STATUS-Register einstellt. Abbildung 7 zeigt, woraus das STATUS-Register besteht. (Abbildung 3.9.1 auf Seite 2-544) Dem Symbol C wird der Wert 0h zugewiesen, da C bzw. CARRY das Nullbit des Statusworts STATUS ist. Jedes Mal, wenn wir das CARRY-Bit (Bit 0) überprüfen müssen, verwenden wir das vordefinierte Zeichen „C“. Jedes Mal, wenn wir auf Bit 2 oder das NULL-Bit zugreifen möchten, verwenden wir das Zeichen „Z“ anstelle von 02h. Sie können den kompletten Aufbau der Registerbits definieren, auch wenn Sie dann nicht alle davon nutzen. Jetzt ist uns klar, wie Register beschrieben werden, und wir können mit dem ausführbaren Code fortfahren. Bevor wir mit der Codeausführung beginnen, müssen wir den Ausdruck ORG auf 0 setzen. Dies ist ein Hinweis für den Assembler, dass der diesem Ausdruck folgende Code bei der EEPROM-Adresse Null beginnt. Der Ausdruck „ORG“ wird verwendet, um Codesegmente an verschiedenen Adressen innerhalb der EEPROM-Größe zu platzieren. Ein weiterer ORG-Ausdruck wird vor dem BEGIN-Label platziert, das die Adresse 100h hat, wie durch den ORG-100h-Ausdruck angegeben. Ausführbarer Code muss mit der END-Direktive enden, was bedeutet, dass dieser Direktive keine ausführbaren Befehle folgen. Beim Einschalten wechselt der PIC16C84 zur Adresse 000h. Der erste Befehl, der vom Prozessor ausgeführt wird, ist der Befehl GOTO BEGIN, der die Steuerung an Adresse 100h überträgt und die weitere Arbeit von dieser Adresse aus fortgesetzt wird. BEGIN ist ein vom Benutzer wählbarer Labelname (Labels müssen immer an der ersten Zeilenposition beginnen), den der Assembler als Adressreferenz verwendet. Während des Betriebs bestimmt der Assembler die Position des BEGIN-Labels und merkt sich, dass die Label-Adresse ersetzt wird, wenn dieser Name erneut angetroffen wird. Die Befehle CALL und GOTO verwenden Beschriftungen für Referenzen im Quelltext. Schauen wir uns nun die folgenden Befehle an, die vom Prozessor ausgeführt werden. Der Befehl MOVLW INITA lädt das Arbeitsregister W mit dem dem Namen INITA zugewiesenen Wert. Dieser Wert wird im Header angegeben und entspricht B'00000000', also 00h. Die Zeichen B' bedeuten, dass die Daten im Binärformat vorliegen. Sie könnten an derselben Stelle 0 (dezimal) oder 0h (hexadezimal) schreiben und das gleiche Ergebnis erhalten. Die binäre Darstellung ist in Fällen praktischer, in denen eine Operation mit Bits in einem Register erwartet wird. Der folgende MOVWF TRISA-Befehl lädt den Wert aus dem W-Arbeitsregister in das TRISA-Port-A-Konfigurationssteuerregister. Das Setzen eines Bits dieses Registers auf 0 gibt an, dass das entsprechende Bit von Port A ein Ausgang ist. In unserem Fall werden alle Bits von Port A durch Ausgänge gesetzt. Beachten Sie, dass Port A nur 5 Bits hat und die höchsten 3 Bits des in das TRISA-Register geschriebenen Werts, das ebenfalls 5 Bits hat, nicht verwendet werden. Wenn wir beispielsweise das niedrigstwertige Bit von Port A als Eingang festlegen wollten, würden wir den INITA-Wert im Registerbeschreibungsabschnitt auf B'00000001' setzen. Wenn wir während des Programmablaufs die Belegung einzelner Portbits neu definieren müssen, beispielsweise bei der bidirektionalen Übertragung, dann ist es am bequemsten, alle notwendigen Konfigurationswörter im Beschreibungsabschnitt festzulegen, wie wir es für INITA und INITB getan haben. Die nächsten beiden Befehle MOVLW INITB und MOVWF TRISB definieren die Konfiguration von Port B. Wir könnten Geld sparen, wenn wir den MOVLW-INITB-Befehl nicht schreiben würden, da in unserem Fall auch INITB 0h ist. Wir haben dies jedoch nicht getan, da es zu schwer erkennbaren Fehlern führen könnte, wenn wir später die Zuweisung eines Bits ändern müssen. Anstatt nur ein Bit in einem Port zu ändern, ändern sich zwei Bits mit derselben Nummer in zwei Ports. Daher ist es nicht ratsam, solche Einsparungen vorzunehmen, bis das Programm fertig ist, obwohl solche Wiederholungen am Ende, in der Phase der Codeoptimierung, entfernt werden können. Was haben wir bereits getan? 1. Mithilfe der EQU-Zeilen teilten wir dem Assembler mit, welche symbolischen Namen wir verwenden würden. 2. Wir haben den Reset-Vektor auf die Adresse 000h gesetzt. 3. Wir setzen die Startadresse der Programmausführung vom BEGIN-Label auf Adresse 100h. 4. Wir haben alle Bits der Ports A und B als Ausgänge konfiguriert. Jetzt können wir Beispielcode zwischen dem Kopf und dem Ende unseres Basiscodes anstelle der auskommentierten Zeile „Beispielcode hier einfügen“ einfügen. Wir werden diese Zeile durch echte Befehle ersetzen, das resultierende Programm zusammenstellen, es in den Mikroschaltkreis schreiben, den Mikroschaltkreis auf ein Steckbrett mit einem Anzeigegerät verschieben und sehen, was passiert. ERSTES PROGRAMM Für das erste Programm benötigen wir nur drei Befehle: MOVLW k MOVWF f GOTO k Diese Befehle haben wir bereits im Header unseres Basiscodes verwendet. Der MOVLW-Befehl lädt ein Byte-Literal oder eine Konstante in das W-Arbeitsregister. Der folgende MOVWF-Befehl überträgt ein Byte vom Arbeitsregister W in das angegebene Register f. Der GOTO-Befehl überträgt die Steuerung an die Adresse k. Das folgende Programm schreibt den Wert 01010101 in das Arbeitsregister W und gibt seinen Inhalt dann an Port B aus. Nach dem Start dieses Programms sehen Sie vier LEDs leuchten. MOVLW B'01010101' ;01010101 in Register W laden MOVWF DATAPORT ;W in Port B (DATAPORT) schreiben GOTO $ ;Endlosschleife Die Assembler-Direktive „$“ bedeutet den aktuellen Wert des Programmzählers (PC). Daher bedeutet der Befehl GOTO $, dass wir dorthin gehen, wo wir uns gerade befinden. Dieser Zyklus ist endlos, weil es keine Möglichkeit (außer einer Unterbrechung) gibt, ihn zu verlassen. Der Befehl GOTO $ wird häufig verwendet, um Code beim Debuggen anzuhalten. MONTAGE Wir werden den MPALC-Makro-Assembler verwenden, da er von MICROCHIP kostenlos vertrieben wird und alle von uns benötigten Funktionen enthält. Wenn Sie lieber einen anderen Assembler verwenden möchten, verwenden Sie dessen Beschreibung, um unser Programm zusammenzustellen. Die Befehlszeile zum Ausführen des MPALC-Makro-Assemblers ist sehr einfach: MPALC <source_text> [options] wobei <source_text> der Name der Datei ist, die den Quelltext enthält, der zusammengestellt werden muss, und es kann eine ganze Reihe von Optionen geben. Eine vollständige Beschreibung der Optionen liefert der Assembler mit der Option /?. Zunächst müssen wir keine einzige Option angeben. Das Einzige, was wir noch tun müssen, ist die Art des Prozessors anzugeben, für den unser Programm geschrieben ist, und die Art der Fehler, die der Assembler erzeugen soll. Dies geschieht mit der Assembler-Direktive LIST (Abb. 6). Die Standardquelldateierweiterung ist .ASM. Eine andere Erweiterung muss explizit angegeben werden. Nehmen Sie also die Datei EXAMPLE.ASM, die den in Abbildung 6 gezeigten Text enthält, und führen Sie den Assembler aus: MPALC EXAMPLE Als Ergebnis des Assemblers werden Dateien mit den folgenden Erweiterungen erstellt: * OBJ-Objektdatei * LST-Listendatei * ERL-Fehler und Warndatei * SYM-Symboldatei Die Objektdatei wird im Hexadezimalformat erstellt und enthält den Code, der auf den Chip geschrieben werden muss. Die Listing-Datei enthält eine vollständige Auflistung des Programms zusammen mit dem Boot-Code. Die Fehler- und Warndatei zeichnet alle Fehler und Warnungen auf, die während des Montageprozesses auftreten. Sie sind auch in der Listungsdatei vorhanden. Die in die Symboldatei geschriebene Tabelle symbolischer Labels ist für die weitere Arbeit mit dem Debugger gedacht. Nach der Verarbeitung unseres Programms hätte der Assembler die Meldung „Vom Assembler wurden keine Fehler gefunden“ ausgeben müssen, was bedeutet, dass keine Fehler gefunden wurden. Die Fehlerdatei sollte nicht erstellt worden sein. Wenn Ihr Assembler Fehlermeldungen erzeugt oder die Dateien EXAMPLE.OBJ, EXAMPLE.LST und EXAMPLE.SYM nicht erstellt wurden, überprüfen Sie noch einmal, ob Sie alles richtig gemacht haben. PROGRAMMIERUNG Jetzt haben Sie eine Objektdatei EXAMPLE.OBJ, die auf den Chip geschrieben werden muss. Die Aufnahme erfolgt mit einem Programmiergerät und dem PROPIC-Programm. Die Befehlszeile zum Starten des PROPIC-Programms ähnelt der Zeile zum Starten des Assemblers: PROPIC <object_file> [options] wobei <object_file> der Name der vom Assembler erstellten Objektdatei ist und die Optionen den Aufzeichnungsmodus im festlegen Chip. Die Liste der Optionen wird mit dem /? angezeigt. Wie beim Assembler müssen wir zunächst keine einzige Option angeben. Nehmen Sie das Programmiergerät und schließen Sie sein Kabel an den Druckeranschluss an (an den ersten Druckeranschluss, wenn Ihr Gerät über 2 oder 3 Druckeranschlüsse verfügt).

Was ist PIC? Was ist PIC?

Nehmen Sie eine Stromquelle mit 18...36 V Gleich- oder Wechselstrom, die einen Strom von bis zu 100 mA liefern kann, und schließen Sie sie an das Programmiergerät an. Bereiten Sie den PIC16C84-Chip vor, aber stecken Sie ihn noch nicht in den Programmiersockel. Jetzt können Sie den Programmierer starten:

PROPIC-BEISPIEL { Hier müssen Sie einfügen, wie das Programmierprogramm funktioniert. } Jetzt haben Sie einen programmierten Mikroschaltkreis und können sehen, wie er funktioniert. TESTEN

Nehmen Sie ein Steckbrett und bauen Sie darauf den in Abbildung 5 gezeigten Schaltkreis zusammen. Dieser Schaltkreis enthält keine kritischen Teile. Alle Widerstände können eine Abweichung vom Nennwert von +-30 % aufweisen, LEDs – alle mit einem Nennstrom von nicht mehr als 10 mA. Um den PIC16C84-Chip zu installieren, verwenden Sie den Sockel. Um unsere Schaltung mit Strom zu versorgen, können Sie dasselbe Netzteil verwenden, das Sie beim Programmieren der Mikroschaltung verwendet haben. Sie können auch ein 5-V-Labornetzteil verwenden. In diesem Fall werden der Stabilisator KR142EH5A, die Diodenbrücke und der Elektrolytkondensator nicht benötigt und eine Spannung von 5 V wird an Punkt 2 des Stromkreises angelegt.

Überprüfen Sie nach dem Zusammenbau der Schaltung sorgfältig, ob alles richtig zusammengebaut ist, die LEDs in der richtigen Polarität installiert sind und die Stromversorgung der Mikroschaltung an den richtigen Beinen und in der richtigen Polarität erfolgt. Nehmen Sie den programmierten Chip, stecken Sie ihn in die Buchse auf dem Steckbrett und schalten Sie den Strom ein. Es sollten 4 LEDs aufleuchten (nacheinander). Ihr erstes Programm funktioniert! PIC-BEFEHLSATZ

Nachdem Sie nun gelernt haben, wie man ein Programm zusammenstellt, es in eine Mikroschaltung schreibt und auf einem Steckbrett testet, können wir mit der Beschreibung des gesamten Befehlssatzes für die PIC-Mikrocontrollerfamilie fortfahren. Wir werden uns weiterhin auf den PIC16C84 konzentrieren, obwohl fast alles, worüber wir sprechen werden, auch für andere Mikrocontroller der PIC-Familie gilt. Im Verlauf der Beschreibung werden wir kurze Programme verfassen, um besser zu verstehen, wie bestimmte Befehle funktionieren. Sie können diese Programme in den Basiscode einfügen, sie zusammensetzen, in eine Mikroschaltung schreiben und durch Einfügen der Mikroschaltung in ein Steckbrett sehen, wie sie funktioniert. Wenn Ihnen beim nächsten Punkt alles absolut klar ist, müssen Sie es nicht versuchen, sondern gehen direkt zum nächsten Punkt über. NEIN

Beginnen wir unsere Beschreibung mit dem NOP-Befehl. Die Ausgabe dieses Befehls ist schwer zu erkennen, da er nichts bewirkt. Diese Anweisung wird normalerweise in Zeitverzögerungsschleifen oder zur Feinabstimmung der Ausführungszeit eines bestimmten Programmabschnitts verwendet. CLRW

Dieser Befehl löscht das Arbeitsregister W. Fügen wir unserem Beispiel eine Zeile hinzu und sehen wir, dass alle LEDs aufleuchten.

MOVLW B'01010101' ;01010101 in Register W laden

CLRW ;Register W löschen

MOVWF DATAPORT ;schreibe W auf Port B (DATAPORT)

GOTO $ ;Endlosschleife CLRF f

CLRF macht für jedes Register das, was CLRW für das Arbeitsregister W macht. Der folgende Befehl setzt Port B auf 0h.

CLRF DATAPORT ;löschen Sie Port B (DATAPORT) SUBWF f,d ADDWF f,d

Subtrahieren Sie das Arbeitsregister W von einem beliebigen Register f. Dieser Befehl setzt außerdem die Flags CARRY, DIGIT CARRY und ZERO im STATUS-Register. Nach der Ausführung des Befehls können Sie diese Attribute überprüfen und feststellen, ob das Ergebnis Null, positiv oder negativ ist. Das Symbol d nach dem Komma gibt die Adresse an, an der das Ergebnis des Befehls abgelegt wird. Wenn d=0, wird das Ergebnis im Arbeitsregister W abgelegt, und wenn d=1, wird das Ergebnis in das im Befehl verwendete Register f geschrieben.

In unserem Beispiel wird der Wert 0FFh in das SCRATCH-Register und der Wert 01h in das W-Register geladen. Anschließend wird der SUBWF-Befehl ausgeführt und das Ergebnis auf den LEDs angezeigt.

MOVLW 0FFh ;0FFh in Register W laden

MOVWF SCRATCH ;den Inhalt von W in das SCRATCH-Register laden

MOVLW 01h ;01h in Register W laden

SUBWF SCRATCH,0 ;Subtraktion durchführen Die LEDs sollten 11111110 anzeigen, wobei 1 einer dunklen LED und 0 einer leuchtenden LED entspricht.

Der Befehl ADDWF funktioniert genauso, indem er das Arbeitsregister W zu einem beliebigen Register f hinzufügt und die gleichen Eigenschaften festlegt. Das folgende Beispiel demonstriert die Funktionsweise des ADDWF-Befehls.

MOVLW 0h ;0 in Register W laden

MOVWF SCRATCH ;den Inhalt von W in das SCRATCH-Register laden

MOVLW 1h ;01h in Register W laden

ADDWF SCRATCH,0 ;Addition durchführen Die LEDs sollten 00000001 anzeigen.

Bitte beachten Sie, dass dem Wert FFh im Subtraktionsbeispiel eine „0“ vorangestellt ist. Das Symbol „0“ im Assembler bedeutet, dass es sich um eine Zahl und nicht um eine Bezeichnung handelt. Wenn es kein Symbol 0 gäbe, würde der Assembler nach einem Label mit dem Namen FFh suchen, das in diesem Programm nicht existiert, und dementsprechend würde ein Fehler auftreten. Das Zeichen „h“ nach dem Wert 0FF bedeutet, dass der Wert im Hexadezimalformat angegeben wird. SUBLW k ADDLW k

Diese beiden Befehle funktionieren genauso wie die oben beschriebenen, mit der Ausnahme, dass die Operation zwischen dem Arbeitsregister W und der im Befehl angegebenen Bytekonstante ausgeführt wird. Der Befehl SUBLW subtrahiert das Arbeitsregister W von der Konstante k und der Befehl ADDLW addiert das Arbeitsregister W zur Konstante k. Diese Befehle setzen auch die Flags CARRY, DIGIT CARRY und ZERO. Das Ergebnis des Befehls wird im Arbeitsregister W abgelegt. Das folgende Beispiel verringert SCRATCH um 5.

MOVLW 0FFh ;0FFh in Register W laden

MOVWF SCRATCH ;den Inhalt von W in das SCRATCH-Register laden

SUBLW 05h ;5 vom Arbeitsregister subtrahieren

MOVWF SCRATCH ;neuen Inhalt laden SCRATCH Die LEDs sollten 11111010 anzeigen. DECF f,d INCF f,d

Der DECF-Befehl verringert das angegebene Register um 1 und INCF erhöht das angegebene Register um 1. Das Ergebnis kann zurück in das angegebene Register (für d=1) oder in das Arbeitsregister W (für d=0) gestellt werden. Als Ergebnis der Ausführung dieser Befehle kann das ZERO-Attribut im STATUS-Register gesetzt werden. Hier ist ein Beispiel für die Verwendung dieser Befehle:

MOVLW 0FFh ;0FFh in Register W laden

MOVWF SCRATCH ;den Inhalt von W in das SCRATCH-Register laden

DECF SCRATCH,0 ;SCRATCH um 1 verringern

In diesem Beispiel wird SCRATCH von 0 auf 1 erhöht.

CLRF SCRATCH ;SCRATCH löschen

INCF SCRATCH,0 ;SCRATCH um 1 erhöhen IORWF f,d ANDWF f,d XORWF f,d

Diese drei Anweisungen führen die logischen Operationen ODER, UND und EXKLUSIV-ODER aus. Die logische Additionsoperation OR wird am häufigsten zum Setzen einzelner Bits in Registern verwendet. Diese Bits werden dann durch eine logische Multiplikation UND-Operation gelöscht. Wenn eine EXKLUSIV-ODER-Operation an identischen Bits durchgeführt wird, ist das Ergebnis 0. Daher wird die EXKLUSIV-ODER-Operation häufig verwendet, um den Status (gesetzt oder gelöscht) bestimmter Bits in zu überprüfen ein Register. Mit dem folgenden Verfahren wird Bit 1 an Port B mithilfe des IORWF-Befehls gesetzt:

CLRF DATAPORT ;Port B löschen

MOVLW B'00000010' ;Maske im Register W setzen

IORWF DATAPORT,1 ;Bits in Port B mit Maske W setzen

GOTO $ ;Endlosschleife Die LEDs sollten 00000010 anzeigen. Jetzt setzen wir 2 Bits mit dem ANDWF-Befehl zurück:

MOVLW B'11111111' ;0FFh in Register W laden

MOVWF DATAPORT ;alle Bits in Port B setzen

MOVLW B'00000101' ;Maske im Register W setzen

ANDWF DATAPORT,1 ;Bits in Port B mit Maske W löschen

GOTO $ ;Endlosschleife Die LEDs sollten 00000101 anzeigen.

Nehmen wir an, wir haben das SCRATCH-Register verwendet und möchten wissen, ob es dem Wert 04h entspricht. Dies ist ein praktischer Fall für die Verwendung des XORWF-Befehls:

MOVLW 04h ;04h in Register W laden

MOVWF SCRATCH ;Register W in SCRATCH laden

XORWF SCRATCH,0 ;Gleichheit von W und SCRATCH prüfen Da SCRATCH und W gleich sind, ist das Ergebnis der XORWF-Operation Null (alle LEDs leuchten). Das STATUS-Register setzt das NULL-Bit, das das reale Programm dann prüfen und verarbeiten kann. IORLW k ANDLW k XORLW k

Diese drei Befehle führen dieselben Aktionen aus wie ihre oben beschriebenen Gegenstücke, mit der Ausnahme, dass die Operation zwischen dem Arbeitsregister W und der im Befehl angegebenen Maske ausgeführt wird. Das Ergebnis des Befehls wird im Arbeitsregister W abgelegt. Beispiel:

MOVLW 0FFh ;0FFh in Register W laden

ANDLW 040h ;das 6. Bit verlassen Die LEDs zeigen 01000000 an.

MOVLW 10h ;10h in Register W laden

IORLW 09h ;Bits 0 und 3 setzen Die LEDs zeigen 00011001 an.

MOVLW B'00100000' ;40h in Register W laden

XORLW B'11111111' ;invertieren W Die LEDs zeigen 11011111. MOVF f,d

Dieser Befehl wird hauptsächlich verwendet, um ein Register in das Arbeitsregister W (d=0) zu übertragen. Wenn Sie d=1 setzen, lädt dieser Befehl das Register in sich selbst, aber das NULL-Bit im STATUS-Register wird entsprechend dem Inhalt des Registers gesetzt. Zum Beispiel möchten wir das SCRATCH-Register 0Fh laden und dann das SCRATCH-Register in das Arbeitsregister W laden.

MOVLW 0Fh ;0Fh in Arbeitsregister W laden

MOVWF SCRATCH ;Register W in SCRATCH laden

CLRW ;löschen W

MOVF SCRATCH,0 ;SCRATCH in Register W laden Wenn wir während der Programmausführung das SCRATCH-Register auf Null prüfen möchten, können wir den folgenden Befehl ausführen:

MOVF SCRATCH,1 Das NULL-Bit des STATUS-Registers wird gesetzt, wenn die Bedingung wahr ist (SCRATCH = 0h). COMF f,d

Dieser Befehl invertiert jedes gegebene Register. Bei d=0 wird das Ergebnis in das Arbeitsregister W eingetragen, bei d=1 wird der Inhalt des angegebenen Registers invertiert. Als Beispiel invertieren wir den Wert 01010101:

MOVLW B'01010101' ;01010101 in Register W laden

MOVWF SCRATCH ;Register W in SCRATCH laden

COMF SCRATCH,0 ;SCRATCH invertieren Die LEDs zeigen 10101010. DECFSZ f,d INCFSZ f,d

Sobald Sie etwas Erfahrung mit dem PIC-Assembler haben, werden Sie diese Befehle sehr häufig verwenden. Wenn d=1, verringert sich der DECFSZ-Befehl um eins, und INCFZ erhöht das angegebene Register um eins und überspringt den nächsten Befehl, wenn das Register Null wird. Wenn d=0, wird das Ergebnis in das W-Register geschrieben und der nächste Befehl wird übersprungen, wenn das Arbeitsregister W Null wird. Mit diesen Befehlen werden Zeitverzögerungen, Zähler, Schleifen usw. generiert. Hier ist ein typisches Beispiel für die Verwendung einer Schleife: START

MOVLW 0FFh ;Lade FFh in Register W

MOVWF SCRATCH ;W-Register in SCRATCH LOOP laden

DECFSZ SCRATCH,1 ;SCRATCH um 1 verringern

GOTO LOOP ;und gehe zurück bis = 0

MOVF DIGIT ;Laden Sie das DIGIT-Register nach W

MOVWF DATAPORT ;Ausgabe an LEDs

DECF DIGIT,1 ;Register DIGIT um 1 verringern

GOTO START ;zum Anfang gehen Dadurch blinken die LEDs in unterschiedlichen Frequenzen. Die LED der unteren Stufe blinkt am häufigsten und die LED der oberen Stufe blinkt am wenigsten. Bei einer Taktfrequenz von 4 MHz beträgt die Blinkfrequenz der höherwertigen LED etwa 8 Hz und jede weitere blinkt doppelt so oft. Lassen Sie uns nun herausfinden, wie wir es gemacht haben. Der DECFSZ-Befehl arbeitet hier in einer Verzögerungsschleife, die aus zwei Befehlen besteht – DECFSZ und GOTO LOOP. Da wir zuvor das SCRATCH-Register mit dem Wert 0FFh geladen haben, wird diese Schleife 255 Mal ausgeführt, bis SCRATCH Null wird. Bei einer Taktfrequenz von 4 MHz ergibt dies eine Verzögerung von 1 µs/Befehl * 2 Befehle * 255 = 510 µs. Wir haben vorab nichts in das DIGIT-Register geschrieben, es könnte also dort ein beliebiger Wert stehen, der beim ersten Durchgang an die LEDs ausgegeben wird. Dann wird das DIGIT-Register um 1 verringert und der Zyklus wird von Anfang an wiederholt. Dadurch durchläuft das DIGIT-Register alle Werte in 256 Zyklen, d.h. in ca. 130 ms.

Der gleiche Code kann mit dem Befehl INCFSZ verwendet werden und den in das SCRATCH-Register geladenen Wert von FFh ​​auf 0h ersetzen. Die LEDs blinken auf die gleiche Weise, wenn Sie den DECF-Befehl durch den INCF-Befehl ersetzen. SWAPF f,d

Dieser Befehl tauscht Nibbles in jedem Register aus. Wie bei anderen Befehlen wird das Ergebnis bei d=0 in das Arbeitsregister W geschrieben und bei d=1 verbleibt es im Register. Hier ist ein einfaches Beispiel für die Verwendung dieses Befehls:

MOVLW B'00001111' ;0Fh in Register W laden

MOVWF SCRATCH ;Register W in SCRATCH laden

SWAPF SCRATCH,0 ;Nibbles ändern LEDs zeigen 11110000 an. RRF f,d RLF f,d

Im PIC-Assembler gibt es zwei Schiebebefehle: Rechtsverschiebung über das CARRY-Bit eines beliebigen RRF-Registers und Linksverschiebung über das CARRY-Bit eines beliebigen RRF-Registers. Wie bei anderen Befehlen wird das Schiebeergebnis bei d=0 in das W-Register geschrieben und bei d=1 verbleibt es im Register. Schiebeanweisungen werden zur Durchführung von Multiplikations- und Divisionsoperationen, zur seriellen Datenübertragung und für andere Zwecke verwendet. In allen Fällen wird das aus dem 8-Bit-Register verschobene Bit in das CARRY-Bit im STATUS-Register geschrieben, und das CARRY-Bit wird abhängig von der Richtung der Verschiebung an das andere Ende des Registers geschrieben. Beim Verschieben nach links wird RLF CARRY in das niedrigstwertige Bit des Registers geschrieben, und beim Verschieben nach rechts wird RRF CARRY in das höchstwertige Bit des Registers geschrieben.

CLRF STATUS ;STATUS-Register löschen

MOVLW 0FFh ;0FFh in Register W laden

MOVWF SCRATCH ;Register W in SCRATCH laden

RRF SCRATCH,0 ;nach rechts verschieben Die LEDs sollten 01111111 anzeigen, da CARRY in das höchstwertige Bit geladen wird. Jetzt verschieben wir es nach links:

CLRF STATUS ;STATUS-Register löschen

MOVLW 0FFH ;0FFh in Register W laden

MOVWF SCRATCH ;Register W in SCRATCH laden

RLF SCRATCH,1 ;nach links verschieben Die LEDs sollten 11111110 anzeigen. BCF f,b BSF f,b

Die Befehle zum Löschen des BCF-Bits und zum Setzen des BSF-Bits werden verwendet, um mit einzelnen Bits in Registern zu arbeiten. Parameter b bezeichnet die Nummer des Bits, mit dem die Operation ausgeführt wird, und kann Werte von 0 bis 7 annehmen. Versuchen wir, die LED mit dem BCF-Befehl einzuschalten:

MOVLW 0FFh ;0FFh in Register W laden

MOVWF DATAPORT ;LEDs ausschalten

BCF DATAPORT,7 ;Bit 7 in Port B löschen

GOTO $ ;Schleife für immer Dadurch wird die LED entsprechend Bit 7 eingeschaltet. Denken Sie daran, dass wir ähnliche Dinge mit einer Maske und dem Befehl ANDWF gemacht haben. Der Unterschied besteht darin, dass die Befehle ANDWF und IORWF die vorläufige Bildung einer Maske und deren Speicherung in einem Register erfordern, gleichzeitig aber mehrere Bits gleichzeitig setzen oder löschen können. Die BCF- und BSF-Befehle arbeiten mit nur einem Bit. Darüber hinaus verändern die BCF- und BSF-Anweisungen das Statusregister STATUS nicht und werden daher häufig in Fällen verwendet, in denen keine nachträgliche Überprüfung des Statusregisters erforderlich ist. BTFSC f,b BTFSS f,b

Die bedingten Sprungbefehle BTFSC und BTFSS prüfen den Zustand eines bestimmten Bits in einem beliebigen Register und überspringen je nach Ergebnis den nächsten Befehl oder nicht. Der BTFSC-Befehl überspringt den Befehl, wenn das angegebene Bit gelöscht ist, und der BTFSS-Befehl überspringt den Befehl, wenn es gesetzt ist. Hier ist ein einfaches Beispiel:

MOVLW 0FFh ;0FFh in Register W laden

MOVWF DATAPORT ;LEDs ausschalten

MOVLW B'00000001' ;01h in Register W laden

MOVWF SCRATCH ;W-Register in SCRATCH LOOP laden

BTFSS CNTRLPORT,0 ;überprüfe Bit 0 in CNTRLPORT

GOTO LOOP ;warten bis Bit 0 gesetzt ist

BCF DATAPORT,7 ;LED einschalten

GOTO $ ;Schleife für immer In diesem Beispiel wird Bit 0 von Port A (Pin 17 des Chips) überprüft und die LED eingeschaltet, wenn dieser Pin auf High gesetzt ist. Versuchen Sie in diesem Beispiel, BTFSS durch BTFSC zu ersetzen. Die LED leuchtet auf, wenn Bit 0 von Port A auf Low geht.

Zuvor haben wir die Möglichkeit erwähnt, Statusbits im STATUS-Register zu überprüfen. Dies geschieht auch mit den Befehlen BTFSS und BTFSC:

;Prüfung des CARRY-Bits

BTFSS STATUS,C ;wenn C gesetzt ist, überspringe GOTO

GOTO WHERE_EVER ; Das NULL-Bit wird auf die gleiche Weise überprüft:

;Prüfung des NULL-Bits

BTFSS STATUS,Z ;wenn Z gesetzt ist, überspringe GOTO

GOTO WHERE_EVER ; Man kann mit Sicherheit sagen, dass Sie diese Beispiele sehr oft verwenden werden. CALL k RETURN

Diese beiden Befehle sind für die Arbeit mit Unterprogrammen konzipiert. Der CALL-Befehl wird verwendet, um zu einem Unterprogramm an der im Befehl angegebenen Adresse zu wechseln, und der RETURN-Befehl wird verwendet, um von einem Unterprogramm zurückzukehren. Beide Befehle werden in 2 Zyklen ausgeführt. Die Adresse, an der sich der CALL-Befehl befand, wird in speziell organisierten Registern, dem sogenannten Stack, gespeichert. Auf diese Register kann nicht zugegriffen werden und sie werden nur für Unterprogrammaufrufe und -rückgaben verwendet. Stapeltiefe, d.h. die Anzahl der Sonderregister beträgt 8. Daher können vom Hauptprogramm aus nicht mehr als 8 verschachtelte Unterprogrammaufrufe erfolgen. Nach der Rückkehr aus dem Unterprogramm wird die Ausführung mit dem nächsten Befehl nach CALL fortgesetzt. Das W-Register und das STATUS-Register werden beim Aufruf eines Unterprogramms nicht gespeichert, sodass sie bei Bedarf an separaten Speicherorten gespeichert werden können. Hier ist ein einfaches Beispiel für die Verwendung einer Unterroutine: START

BSF DATAPORT,7 ;LED ausschalten

CALL TURNON ;Unterprogramm aufrufen

GOTO START ;gehe zum Anfang TURNON

BCF DATAPORT,7 ;LED einschalten

RETURN ;Rückkehr vom Unterprogramm Als Ergebnis blinkt die LED mit einer Frequenz von etwa 150 kHz. RETLW k RETFIE

Es gibt zwei weitere Befehle, die für die Rückkehr aus Unterprogrammen konzipiert sind. Der RETLW-Befehl gibt die in diesem Befehl angegebene Konstante im Arbeitsregister W zurück und der RETFIE-Befehl ermöglicht Interrupts. Der RETLW-Befehl wird häufig zum Erstellen von Wertetabellen verwendet. Das Arbeitsregister W soll den Offset vom Tabellenanfang enthalten. Anschließend können Sie mit folgender Vorgehensweise an das gewünschte Element gelangen:

MOVLW 02h ;Offset setzen

CALL SHOWSYM ;Unterprogramm aufrufen

MOVWF DATAPORT ;Tabellenelement an Port B ausgeben

GOTO $ ;Schleife für immer SHOWSYM

ADDWF PC ;Tabellenoffset berechnen

RETLW 0AAh ;1. Tabellenelement

RETLW 0BBh ;2. Tabellenelement

RETLW 0CCh ;3. Element der Tabelle Die LEDs sollten 10111011 anzeigen. SPEZIELLE BEFEHLE

Wir müssen nur zwei spezielle Befehle erwähnen – CLRWDT und SLEEP. Der Befehl CLRWDT soll den Watchdog-Timer zurücksetzen, dessen Zweck wir bereits besprochen haben. Dieser Befehl muss in solchen Programmabschnitten vorhanden sein, dass die Programmausführungszeit zwischen zwei benachbarten CLRWDT-Befehlen den Watchdog-Timer nicht überschreitet. Der SLEEP-Befehl soll den Prozessor in den Energiesparmodus versetzen. Nach Ausführung dieses Befehls wird der Taktgenerator des Prozessors abgeschaltet und der Prozessor kann entweder durch den Reset-Eingang, durch die Betätigung eines Watchdog-Timers oder durch einen Interrupt wieder in den Betriebsmodus geschaltet werden. ABSCHLUSS

Dieser Artikel erhebt keinen Anspruch auf eine vollständige Beschreibung der Fähigkeiten des PIC16C84-Mikrocontrollers. Dazu sollten Sie die technische Beschreibung lesen. Auch um alle Funktionen des MPALC-Assemblers, Makrobefehle, Optionen usw. zu verstehen. Es wird für Sie nützlich sein, sein Handbuch zu lesen. Um alle erforderlichen Optionen richtig einzustellen, sollten Sie die Anweisungen zur Verwendung des Programmiergeräts lesen. Beispiele für den Einsatz von Mikrocontrollern bieten Ihnen eine solide Grundlage für eigenständige Projekte. Bei Fragen können Sie sich an das regionale Support-Center für MICROCHIP-Produkte unter der Adresse Moskau, Rubtsovskaya-Damm wenden. 3 Büro 502, Tel. (095)-263-9930 Sie stehen Ihnen jederzeit für die Beantwortung all Ihrer Fragen zur Verfügung. Neue Softwareversionen, Anwendungsbeispiele und Hilfeinformationen zum regionalen BBS erhalten Sie auch unter der Rufnummer (095)-162-8405

AD-Mikro-BBS

Veröffentlichung: N. Bolschakow, rf.atnn.ru

Siehe andere Artikel Abschnitt Mikrocontroller.

Lesen und Schreiben nützlich Kommentare zu diesem Artikel.

<< Zurück

Neueste Nachrichten aus Wissenschaft und Technik, neue Elektronik:

Das höchste astronomische Observatorium der Welt wurde eröffnet 04.05.2024

Die Erforschung des Weltraums und seiner Geheimnisse ist eine Aufgabe, die die Aufmerksamkeit von Astronomen aus aller Welt auf sich zieht. In der frischen Luft der hohen Berge, fernab der Lichtverschmutzung der Städte, enthüllen die Sterne und Planeten ihre Geheimnisse mit größerer Klarheit. Mit der Eröffnung des höchsten astronomischen Observatoriums der Welt – dem Atacama-Observatorium der Universität Tokio – wird eine neue Seite in der Geschichte der Astronomie aufgeschlagen. Das Atacama-Observatorium auf einer Höhe von 5640 Metern über dem Meeresspiegel eröffnet Astronomen neue Möglichkeiten bei der Erforschung des Weltraums. Dieser Standort ist zum höchstgelegenen Standort für ein bodengestütztes Teleskop geworden und bietet Forschern ein einzigartiges Werkzeug zur Untersuchung von Infrarotwellen im Universum. Obwohl der Standort in großer Höhe für einen klareren Himmel und weniger Störungen durch die Atmosphäre sorgt, stellt der Bau eines Observatoriums auf einem hohen Berg enorme Schwierigkeiten und Herausforderungen dar. Doch trotz der Schwierigkeiten eröffnet das neue Observatorium den Astronomen vielfältige Forschungsperspektiven. ... >>

Steuern von Objekten mithilfe von Luftströmungen 04.05.2024

Die Entwicklung der Robotik eröffnet uns immer wieder neue Perspektiven im Bereich der Automatisierung und Steuerung verschiedener Objekte. Kürzlich präsentierten finnische Wissenschaftler einen innovativen Ansatz zur Steuerung humanoider Roboter mithilfe von Luftströmungen. Diese Methode verspricht, die Art und Weise, wie Objekte manipuliert werden, zu revolutionieren und neue Horizonte auf dem Gebiet der Robotik zu eröffnen. Die Idee, Objekte mithilfe von Luftströmungen zu steuern, ist nicht neu, doch die Umsetzung solcher Konzepte blieb bis vor Kurzem eine Herausforderung. Finnische Forscher haben eine innovative Methode entwickelt, die es Robotern ermöglicht, Objekte mithilfe spezieller Luftdüsen als „Luftfinger“ zu manipulieren. Der von einem Spezialistenteam entwickelte Algorithmus zur Luftstromregelung basiert auf einer gründlichen Untersuchung der Bewegung von Objekten im Luftstrom. Das Luftstrahl-Steuerungssystem, das mit speziellen Motoren ausgeführt wird, ermöglicht es Ihnen, Objekte zu lenken, ohne auf körperliche Anstrengung zurückgreifen zu müssen ... >>

Reinrassige Hunde werden nicht häufiger krank als reinrassige Hunde 03.05.2024

Die Sorge um die Gesundheit unserer Haustiere ist ein wichtiger Aspekt im Leben eines jeden Hundebesitzers. Allerdings wird allgemein davon ausgegangen, dass reinrassige Hunde im Vergleich zu Mischlingshunden anfälliger für Krankheiten sind. Neue Forschungsergebnisse unter der Leitung von Forschern der Texas School of Veterinary Medicine and Biomedical Sciences eröffnen eine neue Perspektive auf diese Frage. Eine vom Dog Aging Project (DAP) durchgeführte Studie mit mehr als 27 Begleithunden ergab, dass reinrassige und gemischte Hunde im Allgemeinen gleich häufig an verschiedenen Krankheiten leiden. Obwohl einige Rassen möglicherweise anfälliger für bestimmte Krankheiten sind, ist die Gesamtdiagnoserate in beiden Gruppen praktisch gleich. Der Cheftierarzt des Dog Aging Project, Dr. Keith Creevy, stellt fest, dass es mehrere bekannte Krankheiten gibt, die bei bestimmten Hunderassen häufiger auftreten, was die Annahme stützt, dass reinrassige Hunde anfälliger für Krankheiten sind. ... >>

Zufällige Neuigkeiten aus dem Archiv

Smartphone Poco X5 Pro 08.02.2023

Die Marke Poco, die dem chinesischen Unternehmen Xiaomi gehört, stellte die Smartphones Poco X5 und Poco X5 Pro vor. Neuerscheinungen gehören in die mittlere Preisklasse und bieten für viele Anwender ein attraktives Preis-Leistungs-Verhältnis.

Das Poco X5 Pro ist der Nachfolger des vor etwas mehr als einem Jahr vorgestellten Poco X4 Pro 5G Smartphones. Das wichtigste Upgrade gegenüber seinem Vorgänger ist die Verwendung eines 6-nm-Snapdragon-778G-Prozessors mit Adreno-642L-Grafik, der deutlich schneller ist als der Snapdragon-695-Chip des X4 Pro. Die RAM-Größe des neuen LPDDR4X-Smartphones beträgt 6 oder 8 GB, die Kapazität des UFS 2.2-Flash-Laufwerks 128 oder 256 GB. Auf dem Gerät läuft Android 12 mit MIUI 14 für Poco.

Außerdem erhielt das Smartphone ein verbessertes Display. Seine Hauptparameter sind die gleichen wie beim Modell Poco X4 Pro: Es handelt sich um ein 6,67-Zoll-AMOLED-Panel mit einer Auflösung von 2400 x 1080 Pixel (FHD +) und einer Bildwiederholfrequenz von 120 Hz. Anders als sein Vorgänger bietet das neue Produkt jedoch eine 10-Bit-Farbtiefe mit 100-prozentiger Abdeckung des DCI-P3-Farbraums. Die maximale Helligkeit des Displays beträgt 900 cd / m2, während ein PWM-Mechanismus mit einer Frequenz von 1920 Hz verwendet wird. Gorilla Glass 5 schützt das Display vor Kratzern.

Das Hauptkameramodul ist mit einem 108MP 1/1,52 Zoll Sensor ausgestattet, der durch ein 8MP Ultraweitwinkelmodul mit 120° Sichtfeld und einem 2MP Makrosensor ergänzt wird. Die Auflösung der Frontkamera beträgt 16 Megapixel.

Zu den Spezifikationen des Poco X5 Pro gehören auch Wi-Fi 6- und Bluetooth 5.2-Wireless-Adapter, ein IR-Modul, ein NFC-Chip, ein USB-C-Anschluss und eine 3,5-mm-Audiobuchse. Der 5000-mAh-Akku unterstützt das Laden mit 67 W.

Das Poco X5-Smartphone wiederum basiert auf einem Snapdragon 695-Chip zusammen mit 6 oder 8 GB RAM und einem Flash-Laufwerk mit einer Kapazität von 128 oder 256 GB. Der Speicher kann mit einem Kartensteckplatz auf bis zu 1 TB erweitert werden.

Das 5-Zoll-Display des Poco X6,67 hat eine FHD+-Auflösung und eine Bildwiederholfrequenz von 120 Hz. Das Display hat eine maximale Helligkeit von 1200 cd/m2 und bietet zudem eine 8-Bit-Farbdarstellung. Gorilla Glass 3 wird verwendet, um den Bildschirm vor Kratzern zu schützen.

Die Rückkamera des Smartphones umfasst einen 48-Megapixel-Hauptsensor, einen 8-Megapixel-Sensor mit Ultraweitwinkeloptik (118 °) und einen 2-Megapixel-Sensor für die Makrofotografie. Auf der Vorderseite befindet sich eine 13 MP Selfie-Kamera. Der Akku des Geräts hat die gleiche Kapazität wie das Poco X5 Pro, aber die Ladeleistung beträgt 33 W. Mit einem 33-W-Ladegerät dauert es jedoch nur 0 Minuten, um den Akku von 100 auf 68 % aufzuladen.

Die Poco X5-Spezifikationen umfassen auch Wi-Fi 5-Adapter, Bluetooth 5.1, eine 3,5-mm-Kopfhörer-Audiobuchse, einen IR-Transceiver und einen NFC-Chip.

Poco X5 6/128 GB kostet 250 US-Dollar, Poco X5 8/256 GB 300 US-Dollar. Das Poco X5 Pro beginnt bei 300 US-Dollar für das Basismodell mit 6/128 GB, während das Poco X5 Pro 8/256 GB 350 US-Dollar kostet.

Weitere interessante Neuigkeiten:

▪ Besiedlung der Venus

▪ Budget-Tracker mit Bluetooth zur Überwachung von Kindern

▪ Pilze können die Menschheit retten

▪ Satellit zur Erzeugung künstlicher Sternenfälle

▪ Tomaten produzieren Vitamin D

News-Feed von Wissenschaft und Technologie, neue Elektronik

 

Interessante Materialien der Freien Technischen Bibliothek:

▪ Bereich der Telefonie-Site. Artikelauswahl

▪ Sie lesen Klimych einen Artikel über Bestechungsgelder vor, und er nickt Peter verstohlen zu. Populärer Ausdruck

▪ Artikel Woher bekommen Schlangen ihr Gift? Ausführliche Antwort

▪ Artikel Melissa officinalis. Legenden, Kultivierung, Anwendungsmethoden

▪ Artikel Leistungsstarker Last-Optosimitor-Schalter. Enzyklopädie der Funkelektronik und Elektrotechnik

▪ Artikel Entfernte Verwandte des Kinos. physikalisches Experiment

Hinterlasse deinen Kommentar zu diesem Artikel:

Name:


E-Mail optional):


Kommentar:





Alle Sprachen dieser Seite

Startseite | Bibliothek | Artikel | Sitemap | Site-Überprüfungen

www.diagramm.com.ua

www.diagramm.com.ua
2000-2024