Mikrocontrollerprogrammierung in Assembler und C - für die Mikrocontroller der 8051-Familie - Simulation unter Multisim

von: Herbert Bernstein

MITP Verlags GmbH & Co. KG, 2013

ISBN: 9783826683138 , 368 Seiten

Format: PDF, OL

Kopierschutz: Wasserzeichen

Windows PC,Mac OSX Apple iPad, Android Tablet PC's Online-Lesen für: Windows PC,Mac OSX,Linux

Preis: 2,99 EUR

Mehr zum Inhalt

Mikrocontrollerprogrammierung in Assembler und C - für die Mikrocontroller der 8051-Familie - Simulation unter Multisim


 

Cover

Cover

Titel

Titel

Impressum

Impressum

Inhaltsverzeichnis

5

Einleitung

13

Mikrocontroller-8051-Familie und AT89C51

27

1.1 Einführung

27

1.1.1 Unterschiede in der Familie 8051

29

1.1.2 Vom Einchip-Mikrocontroller 8048 zur 8051-Familie

31

1.1.3 Bussysteme

35

1.1.4 Programmierung in Assemblersprache

36

1.1.5 Speicheradressierung

39

1.1.6 Unterprogramme und die Verwendung des Stacks für die Adressierung

42

1.1.7 Register des Mikrocontrollers 8051

43

1.2 Oszillator- und Taktgeberschaltung

48

1.3 Aufbau und Betrieb der Ports

52

1.3.1 Eingangspuffer und Ausgangstreiber

52

1.3.2 E/A-Struktur

55

1.3.3 Schreiben in einen Port

56

1.3.4 Read-Modify-Write-Merkmale

57

1.3.5 Programmierung einer Eingabeoperation

58

1.3.6 Zugriff auf externe Speicher

69

1.3.7 Signal PSEN

73

1.3.8 Signal ALE

73

1.4 Zeitgeber und Zähler im 8051

75

1.5 Serielle Schnittstelle

81

1.5.1 Betriebsarten des seriellen Ports

82

1.5.2 Senden und Empfangen von Informationen

84

1.5.3 Datenverkehr in Multiprozessorsystemen

87

1.5.4 Baudraten (Übertragungsraten)

89

1.6 Interrupt-Verarbeitung

90

1.6.1 Interrupt-Register

92

1.6.2 Prioritäten der Interruptfolge

94

1.6.3 Externe Interrupt-Quellen

95

1.7 Einzelschrittbetrieb

96

1.8 Rücksetzen des 8051

97

1.9 Betriebsarten mit reduzierter Leistungsaufnahme

98

1.10 Speicherorganisation und Adressierungsarten

101

1.11 Boole’scher Prozessor

106

1.12 CMOS-Mikrocontroller-Familie AT89C51

106

1.12.1 Schneller CPU-Kern im AT89C51

107

1.12.2 Interner Programmspeicher und interner Datenspeicher

108

1.12.3 Taktquelle

109

1.12.4 Power-Management-Betriebsarten

112

1.13 Programmierung des 8751

115

1.13.1 Programmierung des EPROM im 8751

115

1.13.2 Programmsicherung

117

1.13.3 Programmierung des AT89C51

118

Befehlsvorrat der Mikrocontroller- Familie 8051

121

2.1 Adressierungsarten

122

2.1.1 Datentransport

122

2.1.2 Arithmetische Operationen

123

2.1.3 Logische Operationen

125

2.2 Definition der Befehle

127

Praktische Beispiele in Assembler

137

3.1 Programmierung von Mikrocontrollern

137

3.1.1 Assemblerprogrammierung

138

3.1.2 Editoren

140

3.1.3 Cross-Assembler

141

3.1.4 Emulatoren und Stand-alone Debug-Stationen

143

3.1.5 Einstellungen für den Mikrocontroller 8051

145

3.1.6 Entwicklungshilfen für die Simulation in Multisim

146

3.2 Beispiele für Systemerweiterungen

150

3.2.1 Ein- und Ausgabe von Informationen

150

3.2.2 Ansteuerung einer Glühlampe

151

3.2.3 Ansteuerung von zwei Leuchtdioden durch zwei Taster

153

3.2.4 Eingabe durch DIL-Schalter und Ausgabe mittels Bar-Anzeige

153

3.2.5 UND-Verknüpfung mit zwei DIL-Schaltern

154

3.2.6 ODER-Verknüpfung mit zwei DIL-Schaltern

156

3.2.7 Exklusiv-ODER-Verknüpfung mit zwei DIL-Schaltern

157

3.2.8 Komplementiere Akkumulator

158

3.2.9 NAND-Verknüpfung mit zwei DIL-Schaltern

159

3.2.10 NOR-Verknüpfung mit zwei DIL-Schaltern

160

3.2.11 Inklusiv-ODER-Verknüpfung mit zwei DIL-Schaltern

160

3.3 Arithmetische Befehle

161

3.3.1 INR-Befehl

162

3.3.2 DEC-Befehl

163

3.3.3 ADD-Befehl (Tetradenaddition)

163

3.3.4 SUBB-Befehl (Tetradensubtraktion)

166

3.3.5 Dezimalkorrektur bei der Addition

167

3.3.6 Multipliziere Akkumulator mit Register B

168

3.3.7 Dividiere Akkumulator durch Register B

169

3.4 Registeranweisungen

169

3.4.1 Rotieren des Akkumulators nach links

170

3.4.2 Rotieren des Akkumulators nach rechts

171

3.4.3 Rotieren des Akkumulators durch das Carrybit nach links

171

3.4.4 Rotieren des Akkumulators durch das Carrybit nach rechts

172

3.4.5 Vertausche Register mit Akkumulator

173

3.5 Befehle zur internen Datenübertragung

174

3.5.1 Übertragung vom Register nach Akkumulator

174

3.5.2 Laden eines Registers aus dem Speicher

175

3.5.3 Laden eines Registers aus der Peripherie

177

3.5.4 Unmittelbares Laden und Speichern eines Registers

178

3.5.5 Abspeichern eines Registers im Speicher und in der Peripherie

179

3.6 Logik-Analysator

180

3.6.1 Analog-Digital-Wandler am Logik-Analysator

182

3.6.2 Digital-Analog-Wandler am Logik-Analysator

185

3.6.3 Sägezahngeneratoren mit Mikrocontroller

186

3.6.4 Mikrocontroller mit AD-Wandler

188

3.6.5 Mikrocontroller mit AD- und DA-Wandler

189

3.7 Programmierung der Ein- und Ausgänge

191

3.7.1 Programmierung der Eingänge

191

3.7.2 Schnittstelle für externen Zähler (0 bis 99)

192

3.7.3 Schnittstelle für zwei 8-Bit-AD-Wandler

193

3.7.4 Mikrocontroller mit 16-Bit-AD-Wandler

195

3.7.5 Einfache Schnittstelle für 8-Bit-Ausgabe

196

3.7.6 Zwei 8-Bit-DA-Wandler am 8051

197

3.7.7 16-Bit-DA-Wandler am 8051

198

3.7.8 Externe synchrone Vorwärts-/Rückwärtszähler

199

3.7.9 Einfacher Ein-/Ausgangsbetrieb

200

3.7.10 UND-Verknüpfungen mit Ein-/Ausgangsbetrieb

201

3.7.11 AD- und DA-Wandlersystem

203

3.8 Externe Speichereinheiten

205

3.8.1 Adressierung eines externen Datenspeichers mit 2 Kbyte

205

3.8.2 Adressierung eines externen Datenspeichers mit 4 Kbyte

209

3.8.3 Adressierung eines externen 8-Kbyte-Datenspeichers

212

3.8.4 Adressierung eines externen 8-Kbyte-Befehlsspeichers

213

3.8.5 Adressierung eines externen 8-Kbyte-Daten- und 8-Kbyte-Befehlsspeichers

214

3.8.6 Stackpointer

215

3.9 BCD-Arithmetik

219

3.9.1 BCD-Addition

221

3.9.2 BCD-Subtraktion

222

3.9.3 Bildung eines Zehnerkomplements

224

3.9.4 Multiplikation

225

3.9.5 Division

226

3.10 Sprungbefehle und Programmschleifen

227

3.10.1 Bedingte Sprünge für Bytes und Bits

229

3.10.2 »if else«-Abfragen

230

3.11 Zeitgeber und Zähler

233

3.11.1 8-Bit-Zähler mit externem Taktgenerator und Bargraphen

235

3.11.2 16-Bit-Zähler mit externem Taktgenerator und Bargraphen

237

3.11.3 Zähler mit internem Taktgenerator

238

3.11.4 Zähler mit Oszilloskop

239

3.11.5 LED-Blinker

242

3.12 Interrupt-Steuerungen

244

3.12.1 Interrupt-gesteuerter LED-Blinker

249

3.12.2 Interrupt-gesteuerter AD-Wandler

251

3.12.3 AD-Wandler mit Speicherung der Daten

252

3.12.4 Digitalvoltmeter mit zwei 7-Segment-Anzeigen

253

3.12.5 Rauschspannungsmessung mit Digitalvoltmeter

254

3.12.6 Ampelsteuerungen

257

3.13 Serielle Schnittstelle

260

3.13.1 Sender für serielle Daten

263

3.13.2 Mikrocontroller und Terminal

265

3.13.3 Ausgabe durch die serielle Schnittstelle

267

3.14 Schaltbeispiele

268

3.14.1 Hexadezimal-zu-Dezimal-Konverter

268

3.14.2 Externer RAM-Controller

270

3.14.3 Testen von digitalen Mustern

271

3.14.4 Steuerung eines Förderbandes

273

3.14.5 Steuerung eines Flüssigkeitsbehälters

275

Programmierung in C

279

4.1 Arbeitsweise von C

280

4.1.1 Erstes Programm in C

280

4.1.2 Kommentare

281

4.1.3 Variablen

282

4.1.4 Datentypen

283

4.1.5 Hexadezimale und oktale Notation

284

4.1.6 Longinteger

284

4.1.7 Beispiele für bitorientierte Operationen

285

4.1.8 Programmbeispiele für logische Operationen

292

4.1.9 Programmbeispiele für Vergleichsoperationen

296

4.2 Manipulation einer Variablen

299

4.2.1 Operatoren

300

4.2.2 Standard-Operationen

300

4.2.3 Bit-Operatoren

300

4.2.4 Logische Operatoren

301

4.2.5 Zuweisungsoperatoren

302

4.2.6 Inkrement- und Dekrement-Operatoren

303

4.2.7 Programmbeispiele für arithmetische Operationen

304

4.3 Entscheidungen

309

4.3.1 »if«-Anweisung

310

4.3.2 »else if«-Anweisung

310

4.3.3 Programmbeispiele

311

4.3.4 Beispiele mit dem 8-Bit-AD-Wandler

313

4.3.5 Entscheidungsoperator

314

4.4 Programmschleifen

315

4.4.1 »for«-Anweisung

315

4.4.2 »while«-Anweisung

315

4.4.3 »do...while«-Schleife

316

4.4.4 »break«-Befehl

316

4.4.5 »continue«-Anweisung

317

4.4.6 »goto«-Anweisung

317

4.4.7 Vorzeitiges Verlassen einer Schleife

317

4.4.8 Programmbeispiele

317

4.5 Funktionen

322

4.5.1 Unterprogramme

322

4.5.2 Funktionsübergabe (return)

322

4.5.3 »exit«-Funktion

323

4.5.4 »void«-Vereinbarung

323

4.6 Speicherklassen

324

4.6.1 »auto«-Funktion

324

4.6.2 »static«-Funktion

324

4.6.3 »extern«-Funktion

325

4.6.4 »register«-Variable

325

4.6.5 Anwendungsbeispiele

326

4.7 Pointer-Funktionen

333

4.7.1 Zeigerfunktion

333

4.7.2 Array-Anweisungen

333

4.7.3 Funktionen und Zeiger

334

4.7.4 Zeiger auf Funktionen

334

4.7.5 Pointer-Zuweisungen

334

4.7.6 Anwendungsbeispiele

334

4.8 Strukturen und Unions

337

4.8.1 Was sind Strukturen?

337

4.8.2 Initialisierung von Strukturvariablen

338

4.8.3 Funktionen und Strukturen

338

4.8.4 Zeiger und Strukturen

338

4.8.5 Listen mit Strukturen

338

4.8.6 »unions«-Datentyp

339

4.8.7 Zeiger und Unions

339

4.8.8 Anwendungsbeispiele

339

4.9 Dateien und Files

342

4.9.1 Dateien

342

4.9.2 »stdio.h«-Datei

342

4.9.3 Standard-I/O-Operationen

343

4.9.4 »fopen«-Funktion

344

4.9.5 Anwendungsbeispiele

345

4.10 I/O-Funktionen

346

4.10.1 »scanf()«-Funktion

346

4.10.2 Formatierte »scanf«-Eingaben

347

4.10.3 Eingabe-Fehler bei »scanf«

347

4.10.4 »fprintf«-Funktion

348

4.10.5 »fscanf«-Funktion

348

4.10.6 »sprintf«-Funktion

348

4.10.7 »sscanf«-Funktion

349

4.10.8 »getchar«-Funktion

349

4.10.9 »putchar«-Funktion

349

4.10.10 »getc«-Funktion

349

4.10.11 »putc«-Funktion

350

4.10.12 »fgetc«-Funktion

350

4.10.13 »fputc«-Funktion

350

4.10.14 »gets«-Funktion

350

4.10.15 »puts«-Funktion

351

4.10.16 »fgets«-Funktion

351

4.10.17 »fputs«-Funktion

351

4.10.18 »ungetc«-Funktion

352

4.10.19 »fread«-Funktion

352

4.10.20 »fwrite«-Funktion

352

4.10.21 »feof«-Funktion

352

4.10.22 »rewind«-Funktion

353

4.10.23 »freopen«-Funktion

353

4.10.24 »fseek«-Funktion

353

4.10.25 »ftell«-Funktion

354

4.10.26 »fclose«-Funktion

354

4.10.27 Anwendungsbeispiele

354

Stichwortverzeichnis

359