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

Modulare Programmierung von Steuerungssystemen auf MCS48. Enzyklopädie der Funkelektronik und Elektrotechnik

Kostenlose technische Bibliothek

Lexikon der Funkelektronik und Elektrotechnik / Mikrocontroller

Kommentare zum Artikel Kommentare zum Artikel

Es ist bekannt, dass derselbe Mikrocontroller sowohl komplexe technologische Geräte als auch eine Haushaltskaffeemühle oder eine elektronische Uhr steuern kann. Die Anpassung an ein bestimmtes Objekt erfolgt durch Änderung des Mikrocontroller-Programms, die Hardware wird nahezu nicht beeinträchtigt. Dieser Artikel befasst sich mit Programmiertechniken für Mikrocontroller der MCS48-Serie, die in Steuerungssystemen für verschiedene Zwecke weit verbreitet sind. Seine wesentlichen Bestimmungen gelten auch für modernere Geräte.

Die Entwicklung und Modernisierung von Steuerungsprogrammen wird erheblich erleichtert, wenn diese modular aufgebaut sind. In diesem Fall kommt es beim Programmieren eines neuen Steuerungssystems (CS) nach dem Sammeln einiger Erfahrungen und vor allem einer eigenen Bibliothek debuggter Module darauf an, einige Module eines bereits vorhandenen und debuggten Programms zu ersetzen und es möglicherweise durch Fragmente zu ergänzen Berücksichtigen Sie die Merkmale eines bestimmten Systems.

Dieses Prinzip ist in der Struktur vieler Hochsprachen (PASCAL, C++) verankert und der Programmierer ist buchstäblich gezwungen, ihm zu folgen. Leider überwachen ASSEMBLER (auch für MCS48), obwohl sie dem Programmierer eine größere Freiheit bei der Auswahl von Werkzeugen und Methoden zur Lösung von Problemen bieten, in der Regel überhaupt nicht die Einhaltung der Programmierdisziplin. Dies führt häufig dazu, dass Programme erstellt werden, die so verwirrend sind, dass selbst ihre Autoren nach einiger Zeit nicht mehr herausfinden können, was getan wurde, geschweige denn, die debuggten Fragmente in anderen Programmen zu verwenden. Durch die bewusste Einhaltung allgemeiner modularer Konzepte wird die Programmierung von Mikrocontrollern deutlich einfacher und schneller. Ein Beispiel für ein typisches modulares Programm für ein Steuerungssystem ist in der Tabelle aufgeführt. Seine Syntax entspricht dem tabellarischen Assembler TASM in der Version für den 8048-Mikroprozessor.

Wie Sie sehen können, werden Konstanten am Anfang des Programmtextes durch EQU-Direktiven mit Namen und Werten versehen. Die Verwendung benannter Konstanten ist der direkten Angabe numerischer Werte in ausführbaren Prozessorbefehlen immer vorzuziehen. Beispielsweise wird die von einem der unten besprochenen Unterprogramme implementierte Zeitverzögerung durch drei Zahlen bestimmt. Sie werden durch die Konstanten N1, N2 und N3 angegeben. Wenn Sie die Verschlusszeit ändern müssen, reicht es aus, in den EQU-Anweisungen neue Werte anzugeben. Andernfalls müssten wir das gesamte Programm nach Anweisungen mit Operanden entsprechend diesen Nummern durchsuchen, entscheiden, ob sich diese jeweils auf eine Zeitverzögerung beziehen, und gegebenenfalls neue Werte angeben.

Offensichtlich sind solche Arbeiten zeitintensiv und oft nicht fehlerfrei. Was es besonders kompliziert macht, ist, dass einige Befehle möglicherweise nicht die gesamte Zahl, sondern beispielsweise deren High- oder Low-Byte verwenden. Der Assembler ist bereits in der Phase der Programmübersetzung in der Lage, einige Konstanten basierend auf den Werten anderer zu berechnen. Dieses Merkmal wird durch die Berechnung der High- (N3N) und Low- (N3L) Bytes der Zahl NXNUMX veranschaulicht.

Als nächstes reserviert das Programm Speicher für Variablen. Dies geschieht mit denselben EQU-Direktiven, die jedoch im Gegensatz zu den Beschreibungen von Konstanten nicht die numerischen Werte der Variablen angeben, sondern die Adressen der Speicherzellen, die sie belegen.

Modulare Programmierung von Steuerungen auf MCS48
(zum Vergrößern klicken)

Wenn es die ASSEMBLY zulässt, sollten Sie die Möglichkeit der Verwendung von Makroanweisungen nicht vernachlässigen. Jeder von ihnen ist wie ein neuer Befehl, der eine Operation ausführt, die nicht direkt vom Prozessorbefehlssystem vorgesehen ist. Bei der Beschreibung eines Makrobefehls gibt der Programmierer ihm einen Namen (natürlich nicht derselbe wie der Name eines der „echten“ Befehle) und gibt die erforderlichen Aktionen in Form einer Abfolge von Maschinenbefehlen an. Jedes Mal, wenn in einem Programm ein Makro auftritt, ersetzt das ASSEMBLY dieses durch die angegebene Sequenz. In diesem Beispiel werden zwei Makrobefehle verwendet. Einer von ihnen sendet den Inhalt des Akkumulators an die durch den Makroparameter angegebene Datenspeicherzelle, der andere sendet ihn zurück.

Nach dem Einschalten (oder dem Senden eines Reset-Signals) beginnt der Mikrocontroller mit der Ausführung des Programms ab Adresse Null. Der Befehl, bedingungslos zum eigentlichen Startpunkt des Programms (in diesem Fall zum START-Label) zu springen, wird normalerweise an diese Adresse geschrieben. Dies ist notwendig, da Hardware-Interrupts die Steuerung immer an die festen Adressen 3 und 7 übertragen (bei anderen Mikrocontroller-Typen können die Adressen anders sein, sie liegen aber immer noch am Anfang des Programmspeichers). Das Hauptprogramm muss Befehle „umgehen“, um einen bedingungslosen Übergang zu den entsprechenden Interrupt-Serviceroutinen zu ermöglichen, die sich an diesen Adressen befinden.

Der nächste Schritt besteht darin, die Betriebsmodi des Controllers festzulegen (z. B. Speicherbänke und Register auszuwählen) und Variablen und externe Geräte zu initialisieren. Ein typischer Fehler von Programmieranfängern besteht darin, anzunehmen, dass Variablen unmittelbar nach dem Start des Programms bereits bestimmte Werte haben. Dieses Missverständnis wird durch die Tatsache verstärkt, dass einige Hochsprachen (z. B. BASIC) allen Variablen automatisch den Anfangswert Null zuweisen. In ASSEMBLY-Sprachprogrammen (und vielen anderen Sprachen) muss der Programmierer sicherstellen, dass vor dem ersten Lesen des Werts einer Variablen bereits etwas in den ihr zugewiesenen Speicherort geschrieben wurde. Ein guter Programmierstil erfordert, dass Variablen gleich zu Beginn des Programms Anfangswerte zugewiesen werden. In diesem Fall erfolgt dies durch das Unterprogramm 1INIT.

Der Abschnitt zum Initialisieren externer Geräte sieht normalerweise aus wie ein sequentieller Aufruf von Unterprogrammen, die jeweils eines davon zurücksetzen (Analog-Digital-Wandler, LED-Anzeige, Drucktasten-Fernbedienung usw.) und beim Finalisieren leicht ersetzt werden können Verbesserung des Systems. Oft überprüfen dieselben Routinen die Funktionalität von Geräten.

Als nächstes treten die meisten Steuerprogramme in eine sich endlos wiederholende Hauptschleife ein, deren Ausführung nur zur Verarbeitung von Interrupts unterbrochen wird. Der Zyklus besteht aus Unterprogrammen zum Abfragen der Tastatur und anderer Sensoren, zum Überprüfen von Flags, die durch Interrupt-Verarbeitungs-Unterprogramme gesetzt werden (z. B. das Flag für den Ablauf eines bestimmten Zeitintervalls oder das Ende des Betriebs eines Analog-Digital-Wandlers). Verarbeitung eingehender Informationen gemäß einem vorgegebenen Steueralgorithmus, Ausgabe von Steueraktionen an Aktoren, Anzeige von Informationen über den Zustand des technologischen Prozesses auf einer Flüssigkristallanzeige oder anderen Indikatoren. Ein Ausstieg aus der Hauptschleife ist in der Regel nur in Notsituationen vorgesehen, beispielsweise wenn zur Beseitigung der Folgen eines Fehlers die Wiederholung der Initialisierung aller Variablen und externen Geräte sowie bei der Verarbeitung von Interrupts erforderlich ist.

Somit handelt es sich um ein Programm, das nach dem Baukastenprinzip aufgebaut ist und eine Reihe von Unterprogrammen darstellt. Wird in der neuen Steuerung beispielsweise eine andere Tastatur verwendet, reicht ein Austausch des BUTT-Unterprogramms aus. Damit ein solcher Austausch einfach und schmerzlos vonstatten geht, sollten bestimmte Regeln entwickelt und stets befolgt werden. Unterprogramme sollten nach Möglichkeit den Inhalt aller Controller-Register speichern, Quelldaten empfangen und Ergebnisse in denselben Registern und Speicherzellen erzeugen, dieselbe Zeichenkodierung verwenden usw.

Sie sollten dem natürlichen Wunsch entgegentreten (besonders bei Programmierern, die die ersten Schwierigkeiten überwunden haben und beginnen, sich wie Profis zu fühlen), das Programm zu vereinfachen, indem Sie sich von strengen Regeln lösen und nicht standardmäßige Techniken verwenden. Was auf den ersten Blick wie eine ungerechtfertigte Komplikation erscheint, wird vollständig kompensiert, indem das Debuggen und Überarbeiten des gesamten Programms erleichtert wird.

Schauen wir uns einige Funktionen von Unterprogrammen an. I NCREM und DECREM führen die in vielen Fällen erforderlichen Operationen aus, um eine 16-Bit-Binärzahl um einen bestimmten Betrag zu erhöhen oder zu verringern (ihre High- und Low-Bytes befinden sich in den Registern R6 bzw. R5). Die Konstanten, die das Inkrement definieren, werden am Anfang des Programms beschrieben.

Da jeder Mikrocontroller viel schneller arbeitet als technische Geräte, ist es sehr wichtig, eine Zeitverzögerung im Programm organisieren zu können. In diesem Fall wird der interne Zähler/Timer des Prozessors verwendet. Es hat eine begrenzte Kapazität und füllt sich in Millisekunden. Jeder Überlauf erzeugt eine Interrupt-Anfrage. Die Timer-Interrupt-Serviceroutine (TIME) zählt sie und weist bei Erreichen der angegebenen Anzahl dem FLT-Timeout-Flag einen einzelnen Wert zu. Alle Unterprogramme, deren Arbeit von der Zeit abhängt, müssen den Zustand dieses Flags analysieren. Dadurch ist es möglich, Verschlusszeiten von mehreren Sekunden und sogar Minuten zu realisieren.

Um mit dem Zählen eines neuen Intervalls zu beginnen, müssen Sie die Anfangswerte in die Arbeitszellen der TIME-Unterroutine eingeben und den Timer einschalten. Das Unterprogramm SET2M stellt beispielsweise eine Zeitverzögerung von 2 Minuten ein. Die Berechnung der Anfangswerte weist mehrere Feinheiten auf.

Es ist bekannt, dass bei Mikrocontrollern der MCS48-Serie dem Eingang des internen Zählers/Timers Impulse mit einer Frequenz zugeführt werden, die 480-mal niedriger ist als die Frequenz des Quarzoszillators. Beispielsweise ändert sich bei einer Quarzfrequenz von 7 MHz die im Zähler erfasste Zahl alle 480/7000000 = 0,00006857 s = 68,57 μs. Der Zähler läuft also in 68,57 -(256-N1) µs über (und es wird eine Interrupt-Anfrage generiert), wobei N1 die Zahl ist, die ursprünglich in den Zähler geschrieben wurde. Wenn Sie ab dieser Zahl jedes Mal eine neue Zählung starten, kommt es in 0,1 s (minimale Zeitverzögerung) N2 = 0,1 · 7000000/[1480 · (256-N1)] zu Überläufen.

Offensichtlich kann die gleiche Zeitverzögerung mit unterschiedlichen N1 und N2 erreicht werden, aber da diese Zahlen keine Bruchzahlen sein können, wird sie mit einem gewissen Fehler implementiert. Die Aufgabe besteht darin, ein Wertepaar auszuwählen, bei dem der Fehler minimal ist. Im betrachteten Fall ist die beste Option N1 = 13, N2 = 6. Durch Wiederholen des beschriebenen Vorgangs N2 = 3 Mal erhält man eine Zeitverzögerung von 1200 Minuten.

Für die Bearbeitung derselben Hardware-Interrupts in unterschiedlichen Programmbetriebsarten ist es häufig erforderlich, unterschiedliche Vorgehensweisen zu verwenden. Eine Möglichkeit, dies zu tun, wird durch die Unterroutine INTER veranschaulicht. Es analysiert den vom Hauptprogramm in der INTT-Zelle eingegebenen Interrupt-Typ-Code und ruft je nach Wert eine der Interrupt-Serviceroutinen ISR1 oder ISR2 auf. Beachten Sie, dass beide mit dem Befehl RET und nicht mit RETR enden. Es ist einfach, die Anzahl der Verarbeitungsmöglichkeiten zu erhöhen und sogar so zu gestalten, dass für einen bestimmten Codewert mehrere verschiedene Unterprogramme nacheinander aufgerufen werden.

Es ist überhaupt nicht notwendig, alle notwendigen Unterprogramme in eine Textdatei des Hauptprogramms zu schreiben. Module, die debuggt und wiederholt in verschiedenen Programmen verwendet wurden, können in separaten Dateien gespeichert und mithilfe von INCLUDE-Direktiven mit dem Hauptprogramm verbunden werden. Jede Include-Datei kann eine oder mehrere Routinen enthalten. Der Nachteil dieser Methode besteht darin, dass die Namen von Variablen, Konstanten und Labels in allen verwendeten Modulen nicht wiederholt werden sollten. Die Methode, Module separat zu übersetzen und dann auf Objektcodeebene zu kombinieren, die diesen Fehler nicht aufweist, wird von der TASM ASSEMBLY leider nicht unterstützt.

Autor: D. Ryschow, Wladimir

Siehe andere Artikel Abschnitt Mikrocontroller.

Lesen und Schreiben nützlich Kommentare zu diesem Artikel.

<< Zurück

Neueste Nachrichten aus Wissenschaft und Technik, neue Elektronik:

Eine neue Möglichkeit, optische Signale zu steuern und zu manipulieren 05.05.2024

Die moderne Welt der Wissenschaft und Technik entwickelt sich rasant und jeden Tag tauchen neue Methoden und Technologien auf, die uns in verschiedenen Bereichen neue Perspektiven eröffnen. Eine dieser Innovationen ist die Entwicklung einer neuen Methode zur Steuerung optischer Signale durch deutsche Wissenschaftler, die zu erheblichen Fortschritten auf dem Gebiet der Photonik führen könnte. Neuere Forschungen haben es deutschen Wissenschaftlern ermöglicht, eine abstimmbare Wellenplatte in einem Wellenleiter aus Quarzglas zu schaffen. Dieses auf der Verwendung einer Flüssigkristallschicht basierende Verfahren ermöglicht es, die Polarisation des durch einen Wellenleiter fließenden Lichts effektiv zu ändern. Dieser technologische Durchbruch eröffnet neue Perspektiven für die Entwicklung kompakter und effizienter photonischer Geräte, die große Datenmengen verarbeiten können. Die durch die neue Methode bereitgestellte elektrooptische Steuerung der Polarisation könnte die Grundlage für eine neue Klasse integrierter photonischer Geräte bilden. Dies eröffnet große Chancen für ... >>

Primium Seneca-Tastatur 05.05.2024

Tastaturen sind ein fester Bestandteil unserer täglichen Arbeit am Computer. Eines der Hauptprobleme für Nutzer ist jedoch der Lärm, insbesondere bei Premium-Modellen. Doch mit der neuen Seneca-Tastatur von Norbauer & Co könnte sich das ändern. Seneca ist nicht nur eine Tastatur, es ist das Ergebnis von fünf Jahren Entwicklungsarbeit, um das perfekte Gerät zu schaffen. Jeder Aspekt dieser Tastatur, von den akustischen Eigenschaften bis hin zu den mechanischen Eigenschaften, wurde sorgfältig durchdacht und ausbalanciert. Eines der Hauptmerkmale von Seneca sind seine leisen Stabilisatoren, die das bei vielen Tastaturen auftretende Geräuschproblem lösen. Darüber hinaus unterstützt die Tastatur verschiedene Tastenbreiten, sodass sie für jeden Benutzer bequem ist. Obwohl Seneca noch nicht käuflich zu erwerben ist, ist die Veröffentlichung für Spätsommer geplant. Seneca von Norbauer & Co setzt neue Maßstäbe im Tastaturdesign. Ihr ... >>

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. ... >>

Zufällige Neuigkeiten aus dem Archiv

Jugend ist taub 05.06.2009

Physiologen des Instituts für Arbeitssicherheit in Lodz (Polen) kamen zu dem Schluss, dass etwa 10 Millionen Europäer von Hörverlust bedroht sind. Tatsache ist, dass viele, insbesondere Kinder und Jugendliche, Miniatur-MP3-Player mit hoher Lautstärke über Kopfhörer hören.

Wenn Sie nach fünf Jahren solcher Unterhaltung nur fünf Stunden pro Woche Musik mit einer Lautstärke von über 89 Dezibel hören, können Sie Ihr Gehör vollständig verlieren. Insgesamt wurden in Europa in den letzten Jahren 100 Millionen Player verkauft, und selektive Messungen haben gezeigt, dass etwa 10 % der jungen Leute exorbitante Lautstärken verwenden.

Nach einem neuen Gesetz in Europa dürfen Spieler nicht lauter als 100 Dezibel sein, aber es ist möglich, dass diese Grenze weiter gesenkt werden sollte.

Weitere interessante Neuigkeiten:

▪ HP EliteBook Folio-Notebook-PC

▪ Neues CC1100-basiertes HF-Modul kommt auf den Markt

▪ Neuigkeiten zur Mausanatomie

▪ Kaffee in Reagenzgläsern

▪ Chinesisches Analogon von GPS

News-Feed von Wissenschaft und Technologie, neue Elektronik

 

Interessante Materialien der Freien Technischen Bibliothek:

▪ Site-Bereich Ton- und Lautstärkeregler. Auswahl an Artikeln

▪ Artikel Eine Stimme, die in der Wildnis weint. Populärer Ausdruck

▪ Artikel Warum heißt es auf Englisch, dass ein positives Schwangerschaftstestergebnis das Kaninchen tot bedeute? Ausführliche Antwort

▪ Artikel Gasschweißgerät. Jobbeschreibung

▪ Artikel Akustischer Sensor für Weihnachtsbaumgirlande. Enzyklopädie der Funkelektronik und Elektrotechnik

▪ Artikel Kopfhörer. Enzyklopädie der Funkelektronik und Elektrotechnik

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