48
Mikrocontroller-Praxis PIC18 Heiko Böhmer Stand: 27.04.15

Mikrocontroller-Praxis PIC18 Architektur PIC18 Überblick Gruppe - Datenbus (bit) Familie Instr.-Set (bit) I/O-Pins Derivate Baseline 8 PIC10, PIC12, PIC16 12 4..32 19 Midrange 8 PIC12,

  • Upload
    buidat

  • View
    222

  • Download
    3

Embed Size (px)

Citation preview

Page 1: Mikrocontroller-Praxis PIC18 Architektur PIC18 Überblick Gruppe - Datenbus (bit) Familie Instr.-Set (bit) I/O-Pins Derivate Baseline 8 PIC10, PIC12, PIC16 12 4..32 19 Midrange 8 PIC12,

Mikrocontroller-Praxis

PIC18

Heiko Böhmer

Stand: 27.04.15

Page 2: Mikrocontroller-Praxis PIC18 Architektur PIC18 Überblick Gruppe - Datenbus (bit) Familie Instr.-Set (bit) I/O-Pins Derivate Baseline 8 PIC10, PIC12, PIC16 12 4..32 19 Midrange 8 PIC12,
Page 3: Mikrocontroller-Praxis PIC18 Architektur PIC18 Überblick Gruppe - Datenbus (bit) Familie Instr.-Set (bit) I/O-Pins Derivate Baseline 8 PIC10, PIC12, PIC16 12 4..32 19 Midrange 8 PIC12,

Inhaltsverzeichnis1 Einführung.....................................................................................................................................1

2 Architektur PIC18..........................................................................................................................3

3 Softwareentwicklung.....................................................................................................................9

3.1 Assemblerprogrammierung.................................................................................................10

3.2 C-Compiler...........................................................................................................................13

3.3 Debugger.............................................................................................................................15

4 Hardwareentwicklung – Single-Chip-System...............................................................................16

5 I/O-Ports......................................................................................................................................19

5.1 Digitale Ein-/Ausgangssignale.............................................................................................19

5.2 Analoge Eingangssignale....................................................................................................20

6 Mikrocontroller-Interface-Techniken............................................................................................22

6.1 Parallele Schnittstellen.........................................................................................................22

6.2 Serielle Schnittstellen...........................................................................................................27

7 Enhanced Universal Synchronous Asynchronous Receiver Transmitter (EUSART)...................28

8 Master Synchronous Serial Port (MSSP)....................................................................................31

8.1 Serial-Peripheral-Interface-Bus (SPI)..................................................................................31

8.2 Inter-Integreated-Circuit-Bus (I²C).......................................................................................37

9 Interrupt-System..........................................................................................................................40

10 Ergänzungen.............................................................................................................................44

III

Page 4: Mikrocontroller-Praxis PIC18 Architektur PIC18 Überblick Gruppe - Datenbus (bit) Familie Instr.-Set (bit) I/O-Pins Derivate Baseline 8 PIC10, PIC12, PIC16 12 4..32 19 Midrange 8 PIC12,
Page 5: Mikrocontroller-Praxis PIC18 Architektur PIC18 Überblick Gruppe - Datenbus (bit) Familie Instr.-Set (bit) I/O-Pins Derivate Baseline 8 PIC10, PIC12, PIC16 12 4..32 19 Midrange 8 PIC12,

1 EinführungBedeutung der Mikrocontrollertechnik anhand typischer Anwendungen

• KFZ-Elektronik (ABS, ASR, Airbag, Klimaanlage, Autoradio, Wegfahrsperre)• Kommunikationstechnik (Telefon, Fax)• Konsumer-Elektronik (weiße und schwarze Ware)• Industrie (Sensorik, Steuerungstechnik, Regler, Antriebstechnik)• PC-Technik (Maus, Tastatur, Monitor)• Sicherheitstechnik (Smart-Cards)• Medizintechnik

Übersicht Mikrocontrollerhersteller

• viele Anwendungen = viele Anbieter = viele Architekturen

Bild 1.1: Mikrocontroller-Vielfalt

Allgemeiner Aufbau und Arbeitsweise eines Mikrorechnersystems

Bild 1.2: Aufbau eines Mikrorechnersystems

Bild 1.3: Aufbau der CPU

1

Microchip:PIC12/PIC16/PIC18/PIC24/dsPIC/PIC32

Atmel:AVR8/AVR32/8051

Infineon:8051/C166/TriCore

NXP Semiconductors:8051/ARM7/ARM9/Cortex-M0/Cortex-M3

Renesas:RL78/78K0/78K0R/R8C/SuperH/V850/RX

Freescale:S08/S12/ColdFire/Cortex-M4

ST Microelectronics:STM8/ST7/STM32

Fujitsu Microelectronics:F²MC-8/F²MC-16/FR 32bit

Toshiba Electronics:TLSC 870/TLCS 900/ARM9/Cortex-M3

weitere Hersteller:Texas Instruments/Zilog/Silicon Laboratories/Maxim/Energy Micro/Samsung/Epson/...

Central Processing Unit(CPU) Speicher Input/Output

Adress-BusSteuer-BusDaten-Bus

CPU

Rechenwerk Steuerwerk

Arithmetic Logic Unit (ALU) Ablaufsteuerung mit Befehls-Dekoder

Systembus

Daten-Register

Adress-Register

Programm-Counter

Instruction-Register

Page 6: Mikrocontroller-Praxis PIC18 Architektur PIC18 Überblick Gruppe - Datenbus (bit) Familie Instr.-Set (bit) I/O-Pins Derivate Baseline 8 PIC10, PIC12, PIC16 12 4..32 19 Midrange 8 PIC12,

Bild 1.4: Funktionsweise der Ablaufsteuerung

Bild 1.5: Aufbau von Speicher- und Input-/Output-Komponenten

2

Programm-Counter = 0

Increment Program-Counter

Befehl holen

Befehl dekodieren

Befehl ausführen

Adress-Bus

Steuer-Bus(RD, WR, CS)

Wort

Daten-Bus

Adresse 1Adresse 0

Page 7: Mikrocontroller-Praxis PIC18 Architektur PIC18 Überblick Gruppe - Datenbus (bit) Familie Instr.-Set (bit) I/O-Pins Derivate Baseline 8 PIC10, PIC12, PIC16 12 4..32 19 Midrange 8 PIC12,

2 Architektur PIC18Überblick

Gruppe - Datenbus (bit) Familie Instr.-Set (bit) I/O-Pins DerivateBaseline 8 PIC10, PIC12, PIC16 12 4..32 19Midrange 8 PIC12, PIC16 14 4..54 62Enhanced-Midrange 8 PIC12, PIC16 14 6..53 46High Performance 8 PIC18 16 16..85 212High Performance 16 PIC24F 16 12..85 114High Performance 16 PIC24H/E 16 13..85 65High Performance 16 dsPIC30F 16 12..68 24High Performance 16 dsPIC33F/E 16 13..85 154High Performance 32 PIC32 32/16 51/53/85 113

Summe: 809

Tabelle 2.1: PIC-Familien (Quelle: www.microchip.com, September 2014)

• Die 8-Bit-Familie PIC17 wurde abgekündigt.

CPU-Architektur

Bild 2.1: CPU, interne Busse PIC18F

Bild 2.2: Stack- und Programmspeicherzugriff

3

Central Processing Unit(CPU)

DB (16)AB (21-1)SB (1)

DatenspeicherInput/OutputProgrammspeicher

DB (8)AB (12)SB (2)

PC

Stack Level 1

Stack Level 31

:::

Reset Vektor

High Pri. Interrupt Vektor

21 bit

8 bit

000000H

000008H

1FFFFFH

Low Pri. Interrupt Vektor000018H

Stack PointerSTKPTR<4:0>

Top-of-Stack Register(TOSU TOSH TOSL)

Page 8: Mikrocontroller-Praxis PIC18 Architektur PIC18 Überblick Gruppe - Datenbus (bit) Familie Instr.-Set (bit) I/O-Pins Derivate Baseline 8 PIC10, PIC12, PIC16 12 4..32 19 Midrange 8 PIC12,

FFFH TOSU FDFH INDF2 FBFH CCPR1H F9FH IPR1FFEH TOSH FDEH POSTINC2 FBEH CCPR1L F9EH PIR1FFDH TOSL FDDH POSTDEC2 FBDH CCP1CON F9DH PIE1FFCH STKPTR FDCH PREINC2 FBCH CCPR2H F9CHFFBH PCLATU FDBH PLUSW2 FBBH CCPR2L F9BH OSCTUNEFFAH PCLATH FDAH FSR2H FBAH CCP2CON F9AHFF9H PCL FD9H FSR2L FB9H F99HFF8H TBLPTRU FD8H STATUS FB8H BAUDCON F98HFF7H TBLPTRH FD7H TMR0H FB7H PWM1CON F97HFF6H TBLPTRL FD6H TMR0L FB6H ECCP1AS F96H TRISEFF5H TABLAT FD5H T0CON FB5H CVRCON F95H TRISDFF4H PRODH FD4H FB4H CMCON F94H TRISCFF3H PRODL FD3H OSCCON FB3H TMR3H F93H TRISBFF2H INTCON FD2H HLVDCON FB2H TMR3L F92H TRISAFF1H INTCON2 FD1H WDTCON FB1H T3CON F91HFF0H INTCON3 FD0H RCON FB0H SPBRGH F90HFEFH INDF0 FCFH TMR1H FAFH SPBRG F8FHFEEH POSTINC0 FCEH TMR1L FAEH RCREG F8EHFEDH POSTDEC0 FCDH T1CON FADH TXREG F8DH LATEFECH PREINC0 FCCH TMR2 FACH TXSTA F8CH LATDFEBH PLUSW0 FCBH PR2 FABH RCSTA F8BH LATCFEAH FSR0H FCAH T2CON FAAH F8AH LATBFE9H FSR0L FC9H SSPBUF FA9H EEADR F89H LATAFE8H WREG FC8H SSPADD FA8H EEDATA F88HFE7H INDF1 FC7H SSPSTAT FA7H EECON2 F87HFE6H POSTINC1 FC6H SSPCON1 FA6H EECON1 F86HFE5H POSTDEC1 FC5H SSPCON2 FA5H F85HFE4H PREINC1 FC4H ADRESH FA4H F84H PORTEFE3H PLUSW1 FC3H ADRESL FA3H F83H PORTDFE2H FSR1H FC2H ADCON0 FA2H IPR2 F82H PORTCFE1H FSR1L FC1H ADCON1 FA1H PIR2 F81H PORTBFE0H BSR FC0H ADCON2 FA0H PIE2 F80H PORTA

Bild 2.3: Übersicht Spezialfunktionsregister (SFR) PIC18F4520

4

Page 9: Mikrocontroller-Praxis PIC18 Architektur PIC18 Überblick Gruppe - Datenbus (bit) Familie Instr.-Set (bit) I/O-Pins Derivate Baseline 8 PIC10, PIC12, PIC16 12 4..32 19 Midrange 8 PIC12,

Bit 7Bit 6Bit 5

nicht implementiert

Bit 4 N R/WX

Negative bit (bei arithmetischen Operationen mit Zweierkomplement)1 = Ergebnis war negativ0 = Ergebnis war positiv

bit 3 OV R/WX

Overflow bit (Überlauf-Bit bei Vorzeichen-Arithmetik)1 = Überlauf aufgetreten0 = kein Überlauf aufgetreten

Bit 2 Z R/WX

Zero Bit1 = Ergebnis arithmetischer oder logischer Operation war gleich Null0 = Ergebnis arithmetischer oder logischer Operation war ungleich Null

Bit 1 DC R/WX

Digit carry/borrow bit (Überlauf-Bit zwischen den Operanden-Nibbeln für ADD- und SUBB-Operationen)1 = Überlauf aufgetreten0 = kein Überlauf aufgetreten

Bit 0 C R/WX

Carry/borrow bit (Überlauf-Bit für ADD- und SUBB-Operationen, Zwi-schenspeicher für Schiebe-Operationen)1 = Überlauf aufgetreten0 = kein Überlauf aufgetreten

Tabelle 2.2: SFR STATUS

Bild 2.4: Datenspeicherzugriff über direkte und indirekte Adressierung

5

07

direkte Adressierung indirekte Adressierung

0

***

Bank 0 GPR

Bank 1 GPR

Bank 15 SFR

000H0FFH100H1FFH

F00HFFFH

Opcode-BestandteilBSR3 070

FSRnLFSRnH3

INDFn

1a-Bit

07Opcode-Bestandteil

0a-Bit

POSTINCnPOSTDECnPREINCnPLUSWn

Page 10: Mikrocontroller-Praxis PIC18 Architektur PIC18 Überblick Gruppe - Datenbus (bit) Familie Instr.-Set (bit) I/O-Pins Derivate Baseline 8 PIC10, PIC12, PIC16 12 4..32 19 Midrange 8 PIC12,

Befehlssatz

• Befehlsaufbau: Opcode (Mnemonic) gefolgt von Operandenf: Register im Register-File (GPR, SFR)k: Konstante (literal - 4; 8; 12 oder 16 bit)d: Zielregister (destination), d=0: dest.=W, d=1: dest.=fb: Bit-Stelle in Register (f.b)a: RAM access bit, a=0: Zugriff auf Access Banks: Fast Call/Return mode select bit, s=1: fast moden: FSRn

Mnemonic Beschreibung StatusTransferoperationen

MOVF f, d, a Move f (d=0: f ⇒ W; d=1: f ⇒ f) Z, NMOVFF fs, fD Move fs to fD

MOVWF f, a Move W to f (W ⇒ f)MOVLW k Move literal to W (k ⇒ W)MOVLB k Move literal to BSR<3:0>LFSR n, k Move literal to FSRnSWAPF f, d, a Swap nibbles in fPUSH Increment STKPTR<4:0>, TOS = PC+2POP Decrement STKPTR<4:0>Logische Operationen

ANDWF f, d, a AND W with f Z, NANDLW k AND literal with W Z, NIORWF f, d, a Incl. OR W with f Z, NIORLW k Incl. OR literal with W Z, NXORWF f, d, a Excl. OR W with f Z, NXORLW k Excl. OR literal with W Z, NCLRF f, a Clear f ZSETF f, a Set f ( f = FFH)COMF f, d, a Compement f Z, NArithmetische Operationen

ADDWF f, d, a Add W and f alleADDWFC f, d, a Add W, f and C alleADDLW k Add literal and W alleSUBFWB f, d, a Subtract f from W (W - f) with Burrow alleSUBWF f, d, a Subtract W from f (f – W) alleSUBWFB f, d, a Subtract W from f (f – W) with Burrow alleSUBLW k Subtract W from literal (k – W) alleDECF f, d, a Decrement f (f – 1) alleINCF f, d, a Increment f (f + 1) alleNEGF f, a Negation im Zweierkomplement (bitweise inv. +1) alleMULWF f, a Multiply WREG with fMULLW k Multiply literal with WREGDAW Decimal Adjust W (BCD-Operation) CSchiebeoperationen

RLCF f, d, a Rotate Left f through Carry C, Z, NRLNCF f, d, a Rotate Left f without Carry Z, NRRCF f, d, a Rotate Right f through Carry C, Z, NRRNCF f, d, a Rotate Right f without Carry Z, NBit-Operationen

BCF f, b, a Bit Clear f.bBSF f, b, a Bit Set f.bBTG f, b, a Bit Toggle f.b

6

Page 11: Mikrocontroller-Praxis PIC18 Architektur PIC18 Überblick Gruppe - Datenbus (bit) Familie Instr.-Set (bit) I/O-Pins Derivate Baseline 8 PIC10, PIC12, PIC16 12 4..32 19 Midrange 8 PIC12,

Mnemonic Beschreibung StatusOperationen für Programmverzweigungen

GOTO k Go to addressCALL k, s Call subroutineRCALL k Relative CallRETURN s Return from SubroutineRETLW k Return with literal in WRETFIE s Return from interruptBTFSC f, b, a Bit Test f.b, Skip if ClearBTFSS f, b, a Bit Test f.b, Skip if SetDECFSZ f, d, a Decrement f, Skip if ZeroINCFSZ f, d, a Increment f, Skip if ZeroDCFSNZ f, d, a Decrement f, Skip if Not ZeroICFSNZ f, d, a Increment f, Skip if Not ZeroCPFSEQ f, a Compare f with W, Skip if f = WCPFSGT f, a Compare f with W, Skip if f > WCPFSLT f, a Compare f with W, Skip if f < WTSTFSZ f, a Test f, Skip if ZeroBC k Branch relative if CarryBNC k Branch relative if Not CarryBN k Branch relative if NegativeBNN k Branch relative if Not NegativeBOV k Branch relative if OverflowBNOV k Branch relative if Not OverflowBZ k Branch relative if ZeroBNZ k Branch relative if Not ZeroBRA k Branch relative unconditionallySonstige Operationen

NOP No OperationCLRWDT Clear Watchdog Timer /TO, /PDSLEEP Go into standby mode /TO, /PDRESET Software device resetProgramm-Speicher Lese-/Schreib-Operationen

TBLRD* Table ReadTBLRD*+ Table Read with post-incrementTBLRD*- Table Read with post-decrementTBLRD+* Table Read with pre-incrementTBLWT* Table WriteTBLWT*+ Table Write with post-incrementTBLWT*- Table Write with post-decrementTBLWT+* Table Write with pre-increment

Tabelle 2.3: Assembler-Befehlssatz

7

Page 12: Mikrocontroller-Praxis PIC18 Architektur PIC18 Überblick Gruppe - Datenbus (bit) Familie Instr.-Set (bit) I/O-Pins Derivate Baseline 8 PIC10, PIC12, PIC16 12 4..32 19 Midrange 8 PIC12,

Bild 2.5: Befehls-Pipeline

Überblick On-Chip-Peripherie

Bild 2.6: On-Chip-Peripherie PIC18F4520

8

Oszillatortakt

Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4

Fetch Instr. nExecute Instr. n

DI RD PD WD

Q1 Q2 Q3 Q4

Fetch Instr. n+1Execute Instr. n+1

DI RD PD WD

Program Counter PC PC+1 PC+2

Fetch Instr. n+2

DI: Decode InstructionRD: Read DataPD: Processing DataWD: Write Data

CPUProgrammspeicher

(32 KB Flash)Datenspeicher

(1536 Byte RAM)

PORTA .. PORTEbis zu 36 I/O-Pins

Parallel Slave Port

8x8 HardwareMultiplizierer

Timer0/1/2, Timer3(1x8 Bit, 3x16 Bit)

Interner OszillatorPLL

256 ByteEEPROM

Low Voltage DetectSynchronousSerial PortUSART

A/D-Wandler(10 Bit)

Interrupt-Controller

Power-on ResetPower-up Timer

Brown-out ResetWatchdog Timer

Oszillator Start-upTimer

In-Circuit-Serial-Progr./Debugging

Low-VoltageProgramming

Komparator-ModulSpannungsreferenz

Compare/Capture/PWM-Module 1/2

Page 13: Mikrocontroller-Praxis PIC18 Architektur PIC18 Überblick Gruppe - Datenbus (bit) Familie Instr.-Set (bit) I/O-Pins Derivate Baseline 8 PIC10, PIC12, PIC16 12 4..32 19 Midrange 8 PIC12,

3 Softwareentwicklung

Bild 3.1: Entwicklungszyklus für Mikrocontrollersoftware

Bild 3.2: Übersetzungsvorgang

Bild 3.3: Allgemeine Struktur eines Mikrocontrollerprogramms

9

Projekt anlegen

Quelldateien anlegen, Quelltexte editieren

Übersetzen

Syntax-Fehler

logischeFehler

Debuggen

Maschinenprogramm

testprog.asm/testprog.c(Quell-Datei)

ASSEMBLER/COMPILER

testprog.mcp(Projekt-Datei)

testprog.hex(Intel-Hex-Datei)

testprog.map(MAP-Datei)

testprog.cof(Symbol-und Debug-Datei)

p18f4520.inc/p18f4520.h(Include/Header-Datei)

LINKER

18f4520_g.lkr(Linker-Script-Datei)

testprog.o(Objekt-Datei)

Initialisierung

Endlosschleife

ISR1 ISRn

Page 14: Mikrocontroller-Praxis PIC18 Architektur PIC18 Überblick Gruppe - Datenbus (bit) Familie Instr.-Set (bit) I/O-Pins Derivate Baseline 8 PIC10, PIC12, PIC16 12 4..32 19 Midrange 8 PIC12,

3.1 AssemblerprogrammierungDirektiven zur Arbeit mit Symbolen für Assemblerkonstanten

EQU, SET, CONSTANT, VARIABLE, CBLOCK, ENDC

Makro-Direktiven MACRO, ENDM, LOCAL, EXITM, EXPAND NOEXPANDDirektiven zur Erzeugung von Kon-stanten im nichtflüchtigen Speicher

DA, DATA, DB, DW, DE, DT, FILL

Direktiven zur Erzeugung relokati-bler Module

CODE, EXTERN, GLOBAL, PAGESEL, IDATA, UDATA, UDATA_ACS, UDATA_OVR, UDATA_SHR, RES, BAKISEL, BANKSEL, ACCESS_OVR, CODE_PACK, IDATA_ACS, PAGESELW

Direktiven zur bedingten Assemblie-rung

#DEFINE, #UNDEFINE, IFDEF, IFNDEF, IF, ELSE, ENDIF, WHILE, ENDW, ERROR, ERRORLEVEL, MESSG

Direktiven zur Steuerung der Lis-tingausgabe

LIST, NOLIST, PAGE, SPACE, TITLE, SUBTITLE

Sonstige Direktiven ORG, END, #INCLUDE, PROCESSOR, RADIX, CONFIG_ _MAXRAM, _ _BADRAM, _ _CONFIG, _ _IDLOCKS, _ _MAXROM, _ _BADROM

Tabelle 3.1: Übersicht Assemblerdirektiven

dezimal D'255'hexadezimal H'FF', 0xFF, 0FF (Default-Zahlensystem)oktal O'77'binär B'10110100'ASCII A'Y' (=D'89')

Tabelle 3.2: Zahlensysteme

Operator Beschreibung$, (, ) aktueller PC, Klammern!, -, ~ logisches Komplement, Zweier-Komplement, bitweise Komplementlow, high, upper liefert Bit 0..7, Bit 8..15, Bit 16..23 einer Assembler-Konst.*, /, % Multiplikation, Division, Rest+, - Addition, Subtraktion<<, >> Verschieben>=, >, <, <=, ==, != logische Vergleiche&, |, ^ bitweise AND, OR, XOR&&, || logisches AND, OR=, +=, −=, *=, /=, %=, <<=, >>=, &=, |=, ^=

Zuweisungen mit arithmetischen Operationen, Verschiebe- und Bit-Operationen

++, − − Inkrement, Dekrement

Tabelle 3.3: Operatoren

10

Page 15: Mikrocontroller-Praxis PIC18 Architektur PIC18 Überblick Gruppe - Datenbus (bit) Familie Instr.-Set (bit) I/O-Pins Derivate Baseline 8 PIC10, PIC12, PIC16 12 4..32 19 Midrange 8 PIC12,

Programmbeispiel: Assembler-Programmierung

#include "P18F4520.INC"

config OSC = ECIO6, WDT = OFF, PBADEN = OFF, LVP = OFF, PWRT = OFF

AnzQByte EQU D'16'

cblock 20Quelle: AnzQByteErgebnisLauf endc

Temp EQU 2FF

ORG 0

GOTO 10

ORG 10

MOVLB 2 ; Auswahl Bank 2 für direkte AdressierungCLRF Temp, BANKED ; Temp = 0, Zugriff über direkte AdressierungLFSR 0, Quelle ; FSR0 = H'20'MOVLW AnzQByte ; W = D'16'MOVWF Lauf, ACCESS ; Lauf = D'16', Zugriff über Access-BankCLRF WREG, ACCESS ; W = 0

Loop:ADDWF POSTINC0, W, ACCESS ; W = W + Variable, FSR0++BTFSC STATUS, C, ACCESS ; wenn kein Übertrag, nächsten Befehl überspr.INCF Temp, F, BANKED ; Übertrag aufaddierenDECFSZ Lauf, F, ACCESS ; Lauf = 0 ?GOTO Loop ; Schleife

MOVWF Ergebnis, ACCESS

RRCF Temp, F, BANKEDRRCF Ergebnis, F, ACCESSRRCF Temp, F, BANKEDRRCF Ergebnis, F, ACCESSRRCF Temp, F, BANKEDRRCF Ergebnis, F, ACCESSRRCF Temp, F, BANKEDRRCF Ergebnis, F, ACCESS

GOTO $

END

11

Page 16: Mikrocontroller-Praxis PIC18 Architektur PIC18 Überblick Gruppe - Datenbus (bit) Familie Instr.-Set (bit) I/O-Pins Derivate Baseline 8 PIC10, PIC12, PIC16 12 4..32 19 Midrange 8 PIC12,

Software-Entwurf und Dokumentation

Bild 3.4: Elemente eines Programmflussplanes

Häufig gebrauchte Programmstrukturen

Bild 3.5: Bedingte Programmverzweigung If-Then

Bild 3.6: Bedingte Programmverzweigung If-Then-Else

• weitere Programmstrukturen:• Schleifen (anfangsgeprüft, endgeprüft, for-to-next)• Selektive Programmverzweigung (CASE-Strukturen)

12

UP Ausgabe Var3 = Var1 + Var2

Programmverzweigung

Var = 0 ?

Start/Ende Anweisungsblock

ja

nein

Flussrichtungs-pfeil

LED an

Taste = 1 ?

ja

neinBTFSC PORTB, Taste, ACCESSCALL LED_an :

LED1 an

Taste = 1 ?

ja

nein

LED2 an

BTFSC PORTB, Taste, ACCESSGOTO Led1_anBSF PORTC, LED2, ACCESSGOTO End_Tst_Taste

Led1_an:BSF PORTC, LED1, ACCESS

End_Tst_Taste::

Page 17: Mikrocontroller-Praxis PIC18 Architektur PIC18 Überblick Gruppe - Datenbus (bit) Familie Instr.-Set (bit) I/O-Pins Derivate Baseline 8 PIC10, PIC12, PIC16 12 4..32 19 Midrange 8 PIC12,

3.2 C-Compiler

if-then-else-Programmverzweigung if (var == 25) var = 1;else var = var + 1;

selektive Programmverzweigung switch (code) case 0: var = 100; break; case 1: var = 200; break; default: var = 300;

anfangsgeprüfte Schleife while (var != 0) count++;

endgeprüfte Schleife do count++;while (wert < 80);

for-to-next-Schleife for (lauf = 1; lauf <= 10; lauf++) var1 = var2 / 20;

Bildung von Blöcken

Tabelle 3.4: Kontrollstrukturen

8-Bit-Ganzzahl ohne Vorzeichen unsigned char

8-Bit-Ganzzahl mit Vorzeichen char

16-Bit-Ganzzahl ohne Vorzeichen unsigned int, unsigned short

16-Bit-Ganzzahl mit Vorzeichen int, short

24-Bit-Ganzzahl ohne Vorzeichen unsigned short long

24-Bit-Ganzzahl mit Vorzeichen short long

32-Bit-Ganzzahl ohne Vorzeichen unsigned long

32-Bit-Ganzzahl mit Vorzeichen long

32-Bit-Fließpunktzahl float, double

Tabelle 3.5: Elementare Datentypen des C-Compilers MPLAB C18

13

Page 18: Mikrocontroller-Praxis PIC18 Architektur PIC18 Überblick Gruppe - Datenbus (bit) Familie Instr.-Set (bit) I/O-Pins Derivate Baseline 8 PIC10, PIC12, PIC16 12 4..32 19 Midrange 8 PIC12,

( ) [ ] -> . Klammern, Zugriff auf Felder und Strukturen

! ~ ++ -- + - * & (type) sizeof

logische Negation, Einer-Komplement, Increment, Decrement, Vorzeichen, Dereferenzierung, Adresse, Typumwandlung, sizeof

* / % Multiplikation, Division, ganzzahliger Rest

+ - Addition, Subtraktion

<< >> Verschiebeoperatoren

< <= > >= Vergleichsoperatoren: kleiner/größer

== != Vergleichsoperatoren: gleich, ungleich

& bitweise AND

^ bitweise XOR

| bitweise OR

&& logisch AND

|| logisch OR

?: Konditional-Ausdruck

= += -= ... Zuweisung, Zuweisung kombiniert weiterem Operator

, Komma-Operator

Tabelle 3.6: Operatoren geordnet nach Prioritäten (höchste Priorität ganz oben)

Pragma-Schlüsselwort Erläuterung

interrupt, interruptlow Definition von Interrupt-Funktionen

udata, idata, romdata, code, tmpdata

Änderung der Einstellungen zur Ablage von Code und Daten in Sections

varlocate Anzeige der Section oder Bank von Variablen

config Definition der Konfigurations-Register

Tabelle 3.7: Compilerspezifische Pragma-Direktiven

Programmbeispiele: Variablendeklarationen

// direkte Adressierung von funktionslokalen Variablen im Access-RAM#pragma udata access my_access/*******************************************************************/char func1(static near char loc_var1, static near char loc_var2) return (loc_var1 & loc_var2);#pragma udata

const char no_number[ ] = "keine Zahl\r\n"; // Anlegen einer String-Konstanten im Datenspeicherconst rom char zeilenumbruch[ ] = "\r\n"; // Anlegen einer String-Konstanten im Codespeicher

// Anlegen eines Pointers auf eine String-Konstante im Codespeicherconst char rom * no_number = "keine Zahl\r\n";

// Funktionsdeklaration mit Pointer auf eine String-Konstante im Codespeicher als Parametervoid send_string_rom(const char rom * str);

// Funktionsdeklaration mit Pointer auf eine String-Konstante im Datenspeicher als Parametervoid send_string_ram(const char str[ ]);

// Achtung !! auch folgende String-Konstante wird im Codespeicher abgelegt (ohne 'rom')// wird dieser Pointer an send_string_ram übergeben erfolgt keine Fehlermeldungconst char * no_number = "keine Zahl\r\n";

14

Page 19: Mikrocontroller-Praxis PIC18 Architektur PIC18 Überblick Gruppe - Datenbus (bit) Familie Instr.-Set (bit) I/O-Pins Derivate Baseline 8 PIC10, PIC12, PIC16 12 4..32 19 Midrange 8 PIC12,

Software-Entwurf und Dokumentation

Bild 3.7: Struktogramm-Elemente

3.3 Debugger

15

AktionAktionsblock

Aktion1 Aktion2

?nein

Verzweigung

Aktion1 Aktion2 Aktion3

X = ?1 2 sonst

Mehrfachverzweigung

Aktion

wiederhole, solange Bedingung erfülltanfangsgeprüfteSchleife

Aktion

wiederhole, solange Bedingung erfüllt

endgeprüfteSchleife

ja

Page 20: Mikrocontroller-Praxis PIC18 Architektur PIC18 Überblick Gruppe - Datenbus (bit) Familie Instr.-Set (bit) I/O-Pins Derivate Baseline 8 PIC10, PIC12, PIC16 12 4..32 19 Midrange 8 PIC12,

4 Hardwareentwicklung – Single-Chip-System

/MCLR, VPP RE3 1 40 RB7 KBI3, PGDAN0 RA0 2 39 RB6 KBI2, PGCAN1 RA1 3 38 RB5 KBI1, PGM

AN2, VREF-, CVREF RA2 4 37 RB4 KBI0, AN11AN3, VREF+ RA3 5 36 RB3 CCP2, AN9

T0CKI,C1OUT RA4 6 35 RB2 INT2, AN8AN4, /SS, HLVDIN, C2OUT RA5 7 34 RB1 INT1, AN10

AN5, /RD RE0 8 33 RB0 INT0, FLT0, AN12AN6, /WR RE1 9 32 VDD

AN7, /CS RE2 10 31 VSS

VDD 11 30 RD7 PSP7, P1DVSS 12 29 RD6 PSP6, P1C

CLKI, OSC1 RA7 13 28 RD5 PSP5, P1BCLKO, OSC2 RA6 14 27 RD4 PSP4

T1OSO, T13CKI RC0 15 26 RC7 RX, DTT1OSI, CCP2 RC1 16 25 RC6 TX, CK

CCP1, P1A RC2 17 24 RC5 SDOSCK. SCL RC3 18 23 RC4 SDI, SDA

PSP0 RD0 19 22 RD3 PSP3PSP1 RD1 20 21 RD2 PSP2

Bild 4.1: Pinbelegung Mikrocontroller PIC18F4520 im DIP40-Gehäuse

Bild 4.2: geregelte Spannungsversorgung 5V

Bild 4.3: Auswahl Taktversorgung

16

Primärer Takt externer Taktgenerator

Quarz/Keramik-Oszillator R/C-Oszillator

Sekundärer Takt (T1OSC) Quarz-Oszillator 32,768 kHz

Interner Haupt-Oszillator-Takt 8 MHz-Oszillator

Interner RC-Oszillator-Takt 31 kHz-Oszillator

:256

:64

:32

:16

:8

:4

:24 MHz

2 MHz

1 MHz

500 kHz

250 kHz

125 kHz

31 kHz

8 MHz

PLLfOUT = 4 • fIN

7805

+

47µF 0,1µF

I OGND

9V

0,1µF

5V

VSS

VDD

Page 21: Mikrocontroller-Praxis PIC18 Architektur PIC18 Überblick Gruppe - Datenbus (bit) Familie Instr.-Set (bit) I/O-Pins Derivate Baseline 8 PIC10, PIC12, PIC16 12 4..32 19 Midrange 8 PIC12,

Externe Oszillatorschaltungen

Bild 4.4: Quarz-/Keramik-Oszillator

Bild 4.5: externer Oszillator

Bild 4.6: RC-Oszillator

17

PIC

OSC1

OSC2

RC

C

XTAL

PIC

OSC1

OSC2

OUTGND

NC VDD

XTAL

VDD

1

7

14

8

PIC

OSC1

OSC2

VDD

fOSC

/4

R

C

Page 22: Mikrocontroller-Praxis PIC18 Architektur PIC18 Überblick Gruppe - Datenbus (bit) Familie Instr.-Set (bit) I/O-Pins Derivate Baseline 8 PIC10, PIC12, PIC16 12 4..32 19 Midrange 8 PIC12,

Reset-System

Bild 4.7: a) externer Reset-Taster, b) externe Power-On-Reset-Schaltung

Bild 4.8: Zeitverlauf Power-On

Offset

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

01 IESO FCMEN - - FOSC3 FOSC2 FOSC1 FOSC002 - - - BORV1 BORV0 BOREN1 BOREN0 /PWRTEN03 - - - WDTPS3 WDTPS2 WDTPS1 WDTPS0 WDTEN05 MCLRE - - - - LPT1OSC PBADEN CCP2MX06 /DEBUG XINST - - - LVP - STVREN08 - - - - CP3 CP2 CP1 CP009 CPD CPB - - - - - -0A - - - - WRT3 WRT2 WRT1 WRT00B WRTD WRTB WRTC - - - - -0C - - - - EBTR3 EBTR2 EBTR1 EBTR00D - EBTRB - - - - - -

Tabelle 4.1: Übersicht Konfigurations-Register PIC18F4520 (Adress-Offset ab 0x300000)

18

PIC

/MCLR

VDD

R < 40kΩ

PIC

/MCLR

VDD

R

R1≥ 1kΩ

VDD

D

C

VDD

/MCLR

interne Power-On-Erkennung

interner Reset

TPWRT

TOST

TPLL

Page 23: Mikrocontroller-Praxis PIC18 Architektur PIC18 Überblick Gruppe - Datenbus (bit) Familie Instr.-Set (bit) I/O-Pins Derivate Baseline 8 PIC10, PIC12, PIC16 12 4..32 19 Midrange 8 PIC12,

5 I/O-Ports

5.1 Digitale Ein-/Ausgangssignale

Bild 5.1: Beschaltung digitaler I/O-Ports

Programmbeispiel: I/O-Ports

#include <p18f4520.h>

#pragma config OSC = ECIO6, WDT = OFF, PBADEN = OFF, LVP = OFF, PWRT = OFF

void main(void) LATC = 0; // Ausgangssignale = LOW TRISC = 0; // PORTC = Output while(1) if (PORTBbits.RB0 == 0) LATC = 0; // oder PORTC = 0; else LATC = 0xFF; // oder PORTC = 0xFF;

19

RB0

VDD

4,7kΩ

470Ω

RCx (x=0..7)

470Ω

LED

Page 24: Mikrocontroller-Praxis PIC18 Architektur PIC18 Überblick Gruppe - Datenbus (bit) Familie Instr.-Set (bit) I/O-Pins Derivate Baseline 8 PIC10, PIC12, PIC16 12 4..32 19 Midrange 8 PIC12,

5.2 Analoge Eingangssignale

Bild 5.2: Interner Aufbau A/D-Wandler

ADCS2:ADCS0 PeriodendauerADC-Takt (TAD)

fOSC_max

000 2 TOSC 2,86 MHz100 4 TOSC 5,71 MHz001 8 TOSC 11,43 MHz101 16 TOSC 22,86 MHz010 32 TOSC 40 MHz110 64 TOSC 40 MHzx11 ca. 1,2µs (RC-Osz.) 1 MHz, Sleep

Tabelle 5.1: Einstellmöglichkeiten ADC-Takt

Bit 7Bit 6

--

R0

nicht implementiert

Bit 5Bit 4Bit 3Bit 2

CHS3CHS2CHS1CHS0

R/W0

Analog Channel Select0000..1100 entspricht AN0..AN12

Bit 1 GO/DONE R/W0

A/D Conversion Status1 = AD-Wandlung läuft (Setzen dieses Bit startet AD-Wandlung, Bit wird am Ende der Wandlung per Hardware gelöscht)0 = AD-Wandler gestoppt

Bit 0 ADON R/W0

A/D On1 = AD-Wandler eingeschaltet0 = AD-Wandler ausgeschaltet (keine Stromaufnahme des ADC)

Tabelle 5.2: SFR ADCON0

20

ADC-Takt

AN0AN1AN2AN3AN4

AN12

CHS3:CHS0

CHOLD

Sampling Switch

VDD

VSS

VCFG1:VCFG0

ADCS2:ADCS0GO/DONE

ADON

ein/aus

Start/Ende

VREF+

VREF-

10 Bit ADC

Takt

ADRESH / ADRESLVAIN Ergebnis

Ende ADIF

10

ADFM

: :

TACQACQT2:ACQT0

Page 25: Mikrocontroller-Praxis PIC18 Architektur PIC18 Überblick Gruppe - Datenbus (bit) Familie Instr.-Set (bit) I/O-Pins Derivate Baseline 8 PIC10, PIC12, PIC16 12 4..32 19 Midrange 8 PIC12,

Bit 7Bit 6

--

nicht implementiert

Bit 5Bit 4

VCFG1VCFG0

R/W0

Reference Voltage Configuration11 = AN2 → VREF- / AN3 → VREF+

00 = VSS → VREF- / VDD → VREF+

Bit 3Bit 2Bit 1Bit 0

PCFG3PCFG2PCFG1PCFG0

R/W

0000oder0111

A/D Port Configuration Control

PCFG

AN

12

AN

11

AN

10

AN

9

AN

8

AN

7

AN

6

AN

5

AN

4

AN

3

AN

2

AN

1

AN

0

000x A A A A A A A A A A A A A0010 A A A A A A A A A A A A A0011 D A A A A A A A A A A A A0100 D D A A A A A A A A A A A0101 D D D A A A A A A A A A A0110 D D D D A A A A A A A A A0111 D D D D D A A A A A A A A1000 D D D D D D A A A A A A A1001 D D D D D D D A A A A A A1010 D D D D D D D D A A A A A1011 D D D D D D D D D A A A A1100 D D D D D D D D D D A A A1101 D D D D D D D D D D D A A1110 D D D D D D D D D D D D A1111 D D D D D D D D D D D D D

Tabelle 5.3: SFR ADCON1

Bit 7 ADFM R/W0

A/D Result Format Select1 = rechtsbündig (6 höchstwertige Bit von ADRESH = 0)0 = linksbündig (6 niederwertigste Bit von ADRESL = 0)

Bit 6 - nicht implementiert

Bit 5Bit 4Bit 3

ACQT2ACQT1ACQT0

R/W0

A/D Acquisition Time Select000 = 0 TAD

001 = 2 TAD

010 = 4 TAD

011 = 6 TAD

100 = 8 TAD

101 = 12 TAD

110 = 16 TAD

111 = 20 TAD

Bit 2Bit 1Bit 0

ADCS2ADCS1ADCS0

R/W0

A/D Conversion Clock Select000 = fOSC/2001 = fOSC/8010 = fOSC/32011 = fRC

100 = fOSC/4101 = fOSC/16110 = fOSC/64111 = fRC

Tabelle 5.4: SFR ADCON2

21

Page 26: Mikrocontroller-Praxis PIC18 Architektur PIC18 Überblick Gruppe - Datenbus (bit) Familie Instr.-Set (bit) I/O-Pins Derivate Baseline 8 PIC10, PIC12, PIC16 12 4..32 19 Midrange 8 PIC12,

6 Mikrocontroller-Interface-Techniken

6.1 Parallele Schnittstellen

Bild 6.1: Anschluss eines statischen RAM 8K x 8Bit (z.B. Cypress CY6264) an einen Mikrocontroller mit Intel-kompatiblen Steuerbus

22

Mikrocontroller mitIntel-kompatiblemSteuerbus

A0

A12

AD0

AD7

A8

A12

74HC373 CY6264D0

D7

Q0

Q7LE/OE

A13A14A15

ALE

/RD/WR

≥1 /CE1CE2/WE/OE

VCC

I/O0

I/O7

ALE

/RD

AD0 .. AD7

A8 .. A15

A0..A7 D0..D7

Lese-Zyklus

ALE

/WR

AD0 .. AD7

A8 .. A15

A0..A7 D0..D7

Schreib-Zyklus

Page 27: Mikrocontroller-Praxis PIC18 Architektur PIC18 Überblick Gruppe - Datenbus (bit) Familie Instr.-Set (bit) I/O-Pins Derivate Baseline 8 PIC10, PIC12, PIC16 12 4..32 19 Midrange 8 PIC12,

Bild 6.2: Anschluss ein statischen RAM 8K x 8Bit (z.B. Cypress CY6264) an einen Mikrocontroller mit Motorola-kompatiblen Steuerbus

23

Mikrocontroller mitMotorola-kompatiblemSteuerbus

A0

A12

AD0

AD7

A8

A12

74HC373 CY6264D0

D7

Q0

Q7LE/OE

A13A14A15

AS

ER/W

≥1 /CE1CE2/WE/OE

VCC

I/O0

I/O7

&&

&

AS

R/W

AD0 .. AD7

A8 .. A15

A0..A7 D0..D7

Lese-Zyklus

AS

AD0 .. AD7

A8 .. A15

A0..A7 D0..D7

Schreib-Zyklus

E

R/W

E

Page 28: Mikrocontroller-Praxis PIC18 Architektur PIC18 Überblick Gruppe - Datenbus (bit) Familie Instr.-Set (bit) I/O-Pins Derivate Baseline 8 PIC10, PIC12, PIC16 12 4..32 19 Midrange 8 PIC12,

Bild 6.3: Anschluß eines LCD-Moduls an einen PIC

Bild 6.4: Aufbau LCD-Display - 16 Zeichen x 2 Zeilen, 5x8 Punkte/Zeichen(Quelle: Datenblatt LCD-Module 162C Series, Firma Dispaytech Ltd. Hong Kong)

24

PIC

RD0..RD7RE0RE1RE2

LCD

D0..D7RSR/WE

Vdd

Vss

Vo10kΩ

330Ω

Page 29: Mikrocontroller-Praxis PIC18 Architektur PIC18 Überblick Gruppe - Datenbus (bit) Familie Instr.-Set (bit) I/O-Pins Derivate Baseline 8 PIC10, PIC12, PIC16 12 4..32 19 Midrange 8 PIC12,

Bild 6.5: Interner Aufbau LCD-Controller(Quelle: Datenblatt Display-Controller KS0070B, Firma Samsung)

Bild 6.6: Timing Schreibzugriff LCD-Modul(Quelle: Datenblatt LCD-Module 162C Series, Firma Dispaytech Ltd. Hong Kong)

25

Page 30: Mikrocontroller-Praxis PIC18 Architektur PIC18 Überblick Gruppe - Datenbus (bit) Familie Instr.-Set (bit) I/O-Pins Derivate Baseline 8 PIC10, PIC12, PIC16 12 4..32 19 Midrange 8 PIC12,

Tabelle 6.1: Timing-Spezifikation Schreibzugriff LCD-Modul(Quelle: Datenblatt LCD-Module 162C Series, Firma Dispaytech Ltd. Hong Kong)

Kommando RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 DauerDisplay Clear L L L L L L L L L H 1,64msReturn Home L L L L L L L L H X 1,64msEntry Mode Set L L L L L L L H I/D SH 42µsDisplay On/Off L L L L L L H D C B 42µsShift L L L L L H S/C R/L X X 42µsSet Function L L L L H DL N F X X 42µsSet CG RAM Addr L L L H CG RAM Addr 42µsSet DD RAM Addr L L H DD RAM Addr 42µsRead BF-Flag L H BF Address Counter 0µsWrite Data H L Data 46µsRead Data H H Data 46µs

I/D H: Cursor move direction Increase / L: Curcor move direction DecreaseSH H: Display is shifted / L: Display is not shiftedD H: Display On / L: Dispay OffC H: Cursor On / L: Cursor OffB H: Blinking On / L: Blinking OffS/C H: Display shift / L: Cursor MoveR/L H: Right shift / L: Left shiftDL H: 8-Bit-Interface / L: 4-Bit-InterfaceN H: 2 line display / L: 1 line displayF H: 5x10 dots / L: 5x7 dotsBF H: Busy / L: Ready

Tabelle 6.2: Steuer-Kommandos LCD-Modul

26

Page 31: Mikrocontroller-Praxis PIC18 Architektur PIC18 Überblick Gruppe - Datenbus (bit) Familie Instr.-Set (bit) I/O-Pins Derivate Baseline 8 PIC10, PIC12, PIC16 12 4..32 19 Midrange 8 PIC12,

6.2 Serielle SchnittstellenRS-232

Signal Erläuterung 25-polig 9-polig DTE DCETD Transmit Data 2 3 Output InputRD Receive Data 3 2 Input OutputGND Ground 7 5

Tabelle 6.3: Steckerbelegung RS-232 ohne Handshake-Signale

Bild 6.7: Elektrische Pegel RS-232

Bild 6.8: Datenrahmen RS-232

Bild 6.9: Anschluss RS-232-Leitungstreiber an PIC

27

High-Pegel EmpfängerHigh-Pegel Sender

Low-Pegel EmpfängerLow-Pegel Sender

U in V

25

53

-25

-5-3

-12

12

Sta

rtB

it0B

it1B

it2B

it3B

it4B

it5B

it6B

it7S

top

Ruh

e

Ruh

e

T1INT2INR1OUTR2OUT

C1+

C1-C2+

C2-

T1OUTT2OUT

R1INR2IN

VCC

V+V-

GND

MAX232APIC

TX

RX

100nF

100nF

100nF

100nF

VCC

Page 32: Mikrocontroller-Praxis PIC18 Architektur PIC18 Überblick Gruppe - Datenbus (bit) Familie Instr.-Set (bit) I/O-Pins Derivate Baseline 8 PIC10, PIC12, PIC16 12 4..32 19 Midrange 8 PIC12,

7 Enhanced Universal Synchronous Asynchronous Receiver Transmitter (EUSART)Asynchrone Betriebsart

Bild 7.1: Prinzip-Schaltbild UART-Kommunikation

Bild 7.2: USART in asynchroner Betriebsart

28

Sende-Schieberegister

Taktgenerator

UART 1

TXEmpfangs-Schieberegister

Empfangs-Schieberegister Sende-Schieberegister

Taktgenerator

TX

UART 2

RX

RX

TXREG

Daten-Bus

TXIF

TXIE&

Interrupt

Stop (Bit8) Bit7 Bit0• • • Start RC6/TX

Schiebe-Register Senden

TRMT

TX9D

TX9

Baud-Raten-Generator

SPBRG

BRGH

TXEN

SPENTakt

Stop(Bit8)Bit7Bit0 • • •Start

Schiebe-Register Empfang

Fehler-korrektur

Pin-Buffer

RC7/RX

FERR OERRRC9

16•Takt

RCREG RX9D

Daten-Bus

FIFO RCIF

RCIE&

Interrupt

Pin-Buffer

CREN

SPBRGHBRG16

Page 33: Mikrocontroller-Praxis PIC18 Architektur PIC18 Überblick Gruppe - Datenbus (bit) Familie Instr.-Set (bit) I/O-Pins Derivate Baseline 8 PIC10, PIC12, PIC16 12 4..32 19 Midrange 8 PIC12,

Bit 7 CSRC R/W0

Clock Source SelectASYNC: keine BedeutungSYNC: 1 = Master (Takt wird intern generiert)

0 = Slave (Takt wird extern zugeführt)Bit 6 TX9 R/W

09-bit Transmit Enable1 = 9-Bit-Sender0 = 8-Bit-Sender

Bit 5 TXEN R/W0

Transmit Enable1 = Sender eingeschaltet0 = Sender ausgeschaltet

Bit 4 SYNC R/W0

Synchronous Mode Select1 = Betriebsart Synchron0 = Betriebsart Asynchron

Bit 3 SENDB R/W0

Send Break CharacterASYNC: 1 = Sende Synchronisations-Break (LIN-Bus)

0 = Synchronisations-Break gesendetSYNC: keine Bedeutung

Bit 2 BRGH R/W0

Baud Rate Generator High Speed SelectASYNC: 1 = High Speed

0 = Low SpeedSYNC: keine Bedeutung

Bit 1 TRMT R1

Transmit Shift Register Status1 = TSR leer0 = TSR voll

Bit 0 TX9D R/W0

Bit 9 der Transmit-Daten

Tabelle 7.1: SFR TXSTA

Bit 7 SPEN R/W0

Serial Port Enable1 = RC7/RX/DT und RC6/TX/CK werden dem USART zugeordnet0 = RC7 und RC6 als normale I/O-Leitungen nutzbar

Bit 6 RX9 R/W0

9-Bit Receive Enable1 = 9-Bit-Empfänger0 = 8-Bit-Empfänger

Bit 5 SREN R/W0

Single Receive EnableASYNC: keine BedeutungSYNC: 1 = Single Receive Betriebsart eingeschaltet

0 = Single Receive Betriebsart ausgeschaltetBit 4 CREN R/W

0Continuous Receive Enable1 = Kontinuierlicher Empfang eingeschaltet0 = Kontinuierlicher Empfang ausgeschaltet

Bit 3 ADDEN R/W0

Address Detect Enable (nur relevant bei: RX9=1)ASYNC: 1 = Adresserkennung eingeschaltet

0 = RX9D kann per Software als Parität verwendet werdenSYNC: keine Bedeutung

Bit 2 FERR R0

Framing Error1 = Framing Error (Stop-Bit = 0)0 = kein Framing Error

Bit 1 OERR R0

Overrun Error1 = Overrun Error (RCREG wurde nicht gelesen)0 = kein Overrun Error

Bit 0 RX9D RX

Bit 9 der Empfangs-Daten

Tabelle 7.2: SFR RCSTA

29

Page 34: Mikrocontroller-Praxis PIC18 Architektur PIC18 Überblick Gruppe - Datenbus (bit) Familie Instr.-Set (bit) I/O-Pins Derivate Baseline 8 PIC10, PIC12, PIC16 12 4..32 19 Midrange 8 PIC12,

Bit 7 ABDOVF R/W0

Auto-Baud Acquisition Rollover Status1 = BRG-Überlauf ist aufgetreten (Auto Baud Rate Detect)0 = BRG-Überlauf ist nicht aufgetreten

Bit 6 RCIDL R1

Receive Operation Idle Status1 = Empfänger ist nicht beschäftigt (Idle)0 = Empfänger ist aktiv

Bit 5 - R0

nicht implementiert

Bit 4 SCKP R/W0

Synchronous Clock Polarity SelectASYNC: keine BedeutungSYNC: 1 = Clock-Idle-Zustand ist High-Pegel

0 = Clock-Idle-Zustand ist Low-PegelBit 3 BRG16 R/W

016-bit Baud Rate Register Enable1 = 16-bit Baud Rate Generator (SPBRGH und SPBRG)0 = 8-bit Baud Rate Generator (nur SPBRG - Kompatibilitätsmodus)

Bit 2 - R0

nicht implementiert

Bit 1 WUE R/W0

Wake-up EnableASYNC: 1 = Auto-Wake-up eingeschaltet

0 = kein Auto-Wake-up eingeschaltetSYNC: keine Bedeutung

Bit 0 ABDEN R/W0

Auto-Baud Detect Enable bitASYNC: 1 = Auto-Baud Detect für nächstes Zeichen ein (55H)

0 = Auto-Baud Detect ausgeschaltetSYNC: keine Bedeutung

Tabelle 7.3: SFR BAUDCON: BAUD RATE CONTROL REGISTER

SYNC BRG16 BRGH = 0 (Low Speed) BRGH = 1 (High Speed)0 0 BR = FOSC/(64(SPBRG+1)) BR = FOSC/(16(SPBRG+1))0 1 BR = FOSC/(16(SPBRGH:SPBRG+1)) BR = FOSC/(4(SPBRGH:SPBRG+1))1 0 BR = FOSC/(4(SPBRG+1)) -1 1 BR = FOSC/(4(SPBRGH:SPBRG+1)) -

Tabelle 7.4: Konfiguration des Baud-Raten-Generators (BR..Baud-Rate)

30

Page 35: Mikrocontroller-Praxis PIC18 Architektur PIC18 Überblick Gruppe - Datenbus (bit) Familie Instr.-Set (bit) I/O-Pins Derivate Baseline 8 PIC10, PIC12, PIC16 12 4..32 19 Midrange 8 PIC12,

8 Master Synchronous Serial Port (MSSP)

8.1 Serial-Peripheral-Interface-Bus (SPI)

Bild 8.1: Prinzip-Schaltbild SPI-Schnittstelle

Bild 8.2: Prinzip-Schaltbild SPI-Schnittstelle mit 2 Slaves

Bild 8.3: MSSP in SPI-Masterbetriebsart

31

MOSI

8-Bit Schieberegister 8-Bit SchieberegisterMISO

TaktgeneratorSCK

/CEPort-Pin RxxMaster Slave

MOSI

8-Bit Schieberegister 8-Bit SchieberegisterMISO

TaktgeneratorSCK

/CEPort-Pin RB1

Master

Slave1

Port-Pin RB28-Bit Schieberegister

/CE Slave2

SSPM0

SSPBUF

SSPM1 SSPM2 SSPM3

CKE CPOLTaktgenerator

Daten-Bus

Schieberegister

SSPEN

RC5/SDO

RC4/SDI

RC3/SCK

BFWCOL

Page 36: Mikrocontroller-Praxis PIC18 Architektur PIC18 Überblick Gruppe - Datenbus (bit) Familie Instr.-Set (bit) I/O-Pins Derivate Baseline 8 PIC10, PIC12, PIC16 12 4..32 19 Midrange 8 PIC12,

Bild 8.4: SPI Master Timing (CPHA = 0)(Quelle: Motorola Technical Data MC68HC908AB32 - Rev. 1.0)

Bild 8.5: SPI Master Timing (CPHA = 1)(Quelle: Motorola Technical Data MC68HC908AB32 - Rev. 1.0)

32

Page 37: Mikrocontroller-Praxis PIC18 Architektur PIC18 Überblick Gruppe - Datenbus (bit) Familie Instr.-Set (bit) I/O-Pins Derivate Baseline 8 PIC10, PIC12, PIC16 12 4..32 19 Midrange 8 PIC12,

Bild 8.6: SPI Master Timing (CKE = 0)(Quelle: PICmicro 18C MCU Family Reference Manual)

Bild 8.7: SPI Master Timing (CKE = 1)(Quelle: PICmicro 18C MCU Family Reference Manual)

33

Page 38: Mikrocontroller-Praxis PIC18 Architektur PIC18 Überblick Gruppe - Datenbus (bit) Familie Instr.-Set (bit) I/O-Pins Derivate Baseline 8 PIC10, PIC12, PIC16 12 4..32 19 Midrange 8 PIC12,

Bit 7 SMP R/W0

SampleSPI Master Mode1 = Eingangsdaten werden am Ende der Ausgabe-Zeit abgetastet0 = Eingangsdaten werden in der Mitte der Ausgabe-Zeit abgetastetSPI Slave Modemuss gelöscht werdenI²C Mode1 = Slew rate control ausgeschaltet0 = Slew rate control eingeschaltet

Bit 6 CKE R/W0

SPI Clock Edge SelectSPI Mode1 = Daten werden mit der ersten Flanke eines Taktzyklus gelesen0 = Daten werden mit der zweiten Flanke eines Taktzyklus gelesenI²C Mode1 = Eingangspegel sind konform zur SMBUS-Spezifikation0 = Eingangspegel sind konform zur I²C-Spezifikation

Bit 5 D/A R0

Data/Address (nur I²C Mode)1 = letztes empfangenes oder gesendetes Byte war ein Datum0 = letztes empfangenes oder gesendetes Byte war eine Adresse

Bit 4 P R0

Stop (nur I²C Mode)1 = ein Stop-Bit wurde als letztes erkannt0 = kein Stop-Bit wurde als letztes erkannt

Bit 3 S R0

Start (nur I²C Mode)1 = ein Start-Bit wurde als letztes erkannt0 = kein Start-Bit wurde als letztes erkannt

Bit 2 R/W R0

Read/Write information (nur I²C Mode)I²C Slave-Mode1 = Read0 = WriteI²C Master-Mode1 = Sendung ist in Bearbeitung0 = Sendung ist nicht in Bearbeitung

Bit 1 UA R0

Update Address (nur 10-Bit I²C Mode)1 = Adresse im Register SSPADD müsste erneuert werden0 = Adresse muß nicht erneuert werden

Bit 0 BF R0

Buffer Full StatusEmpfang (SPI Mode und I²C Mode)1 = Empfang abgeschlossen, SSPBUF ist voll0 = Empfang noch nicht abgeschlossenSenden (nur I²C Mode)1 = Datensendung in Bearbeitung, SSPBUF ist voll0 = Datensendung ist abgeschlossen

Tabelle 8.1: SFR SSP Status Register: SSPSTAT

34

Page 39: Mikrocontroller-Praxis PIC18 Architektur PIC18 Überblick Gruppe - Datenbus (bit) Familie Instr.-Set (bit) I/O-Pins Derivate Baseline 8 PIC10, PIC12, PIC16 12 4..32 19 Midrange 8 PIC12,

Bit 7 WCOL R/W0

Write Collision Detect1 = SSPBUF wurde beschrieben, während das vorherige Wort noch

gesendet wurde (bzw. im I²C-Master-Mode während die I²C- Bedingungen nicht gültig waren)

0 = keine KollisionBit 6 SSPOV R/W

0Receive OverflowSPI Mode1 = im Slave-Mode wurde ein neues Byte empfangen, während

SSPBUF noch die vorherigen Daten enthielt; im Master-Mode wird SSPOV nicht gesetzt

0 = kein ÜberlaufI²C Mode1 = ein Byte wurde empfangen, während SSPBUF noch die vorherigen

Daten enthielt; im Sende-Mode ohne Bedeutung0 = kein Überlauf

Bit 5 SSPEN R/W0

Synchronous Serial Port Enable1 = Freigabe des SSP0 = SSP gesperrt

Bit 4 CKP R/W0

Clock PolaritySPI Mode1 = Ruhezustand des Taktsignal ist High-Pegel0 = Ruhezustand des Taktsignal ist Low-PegelI²C Slave Mode1 = Freigabe Takt0 = Takt Low halten (Takt dehnen, Einhaltung Data-Setup-Time)I²C Master Modeungenutzt

Bit 3Bit 2Bit 1Bit 0

SSPM3SSPM2SSPM1SSPM0

R/W0

SSP Mode0000 = SPI Master-Mode, Takt = fOSC/40001 = SPI Master-Mode, Takt = fOSC/160010 = SPI Master-Mode, Takt = fOSC/640011 = SPI Master-Mode, Takt = Timer2-Output/20100 = SPI Slave-Mode, mit /SS-Pin-Steuerung0101 = SPI Slave-Mode, ohne /SS-Pin-Steuerung0110 = I²C Slave-Mode, 7-Bit-Adresse0111 = I²C Slave-Mode, 10-Bit-Adresse1000 = I²C Master-Mode, Takt = fOSC/(4*(SSPADD+1))1011 = I²C Master-Mode (Firmware), Slave inaktiv1110 = I²C Slave-Mode, 7-Bit-Adresse mit Start/Stop-Bit-Interrupt1111 = I²C Slave-Mode, 10-Bit-Adresse mit Start/Stop-Bit-Interrupt1001, 1010, 1100, 1101 = reserviert

Tabelle 8.2: SSP Control Register: SSPCON1

35

Page 40: Mikrocontroller-Praxis PIC18 Architektur PIC18 Überblick Gruppe - Datenbus (bit) Familie Instr.-Set (bit) I/O-Pins Derivate Baseline 8 PIC10, PIC12, PIC16 12 4..32 19 Midrange 8 PIC12,

Beispiel Ansteuerung eines Single-Port-I/O-IC

Bild 8.8: Single-Port-I/O-IC mit SPI-Schnittstelle

Bit 7Bit 6

ID1ID0

Chip Identify

Bit 5 RS Register Select1 = Datenrichtungsregister ausgewählt0 = Datenregister ausgewählt

Bit 4 R/W Read/Write1 = Schreibzugriff0 = Lesezugriff

Bit 3Bit 2

DF1DF0

Data Format (nur bei Schreibzugriff von Bedeutung)0X = Daten werden direkt in ausgewähltes Register geschrieben10 = Datenbyte dient als Maske, Bits mit Wert 1 in Maske bewirken ein Lö-

schen der korrespondierenden Bits im ausgewählten Register11 = Datenbyte dient als Maske, Bits mit Wert 1 in Maske bewirken ein

Setzen der korrespondierenden Bits im ausgewählten RegisterBit 1Bit 0

CM1CM0

Compare Mode (Eingänge werden mit den korrespondierenden Bits im Datenregister verglichen)00 = mindestens eine Nichtübereinstimmung01 = in allen Bitpositionen Übereinstimmung10 = in keiner Bitposition Übereinstimmung11 = mindestens eine Übereinstimmung

Tabelle 8.3: Steuer-Byte CDP68HC68P1

Bild 8.9: Schreib-/Lesezugriff auf CDP68HC68P1

36

CDP68HC68P1

/CE

MOSI

MISO

SCK

ID0

ID1

D0..D7

MOSI ID1 ID0 RS R/W DF1 DF0 CM1 CM0 8-Bit-DatenwortMISO Z Z ID1 ID0 RS R/W DF1 C vorheriges 8-Bit-Datenwort

/CE

Schreib-Operation

Lese-Operation

MOSI ID1 ID0 RS R/W DF1 DF0 CM1 CM0 XXXXXXXXMISO Z Z ID1 ID0 RS R/W DF1 C 8-Bit-Datenwort

/CE

X = "don't care"Z = hochohmigC = Compare-Flag (wird gespeichet, wenn /CE aktiviert wird)

Page 41: Mikrocontroller-Praxis PIC18 Architektur PIC18 Überblick Gruppe - Datenbus (bit) Familie Instr.-Set (bit) I/O-Pins Derivate Baseline 8 PIC10, PIC12, PIC16 12 4..32 19 Midrange 8 PIC12,

8.2 Inter-Integreated-Circuit-Bus (I²C)

Bild 8.10: Prinzip-Schaltbild I²C-Bus

Bild 8.11: Pegel der Daten- und Takt-Leitung während der Datenübertragung

Bild 8.12: Vollständige Datenübertragung mit 7-Bit-Adressierung

THE I2C-BUS SPECIFICATION S.15/Fig. 11, 12

THE I2C-BUS SPECIFICATION S.15/Fig. 13

Bild 8.13: 10-Bit-Adressierung

37

SDA

8-Bit Schieberegister

TaktgeneratorSCL

Master

8-Bit Schieberegister

Slave1

8-Bit Schieberegister

Slave2

VDD2 x 1,8kΩ

SDA

SCL

S SDAunverändert

SDA-Änderung

erlaubtP

SDA

SCL

S P

1 82..7 9

ACK(Slave)

R/WAdresse

Takt-Verlängerung

91..8

ACK(Empfänger)

Daten

notacknow-ledge

11110XX 0S

write

A1 A2XXXXXXXX Data A Data A P

11110XX 0S

write

A1 A2XXXXXXXX 11110XX 1Sr

read

A3 Data A A PData

Page 42: Mikrocontroller-Praxis PIC18 Architektur PIC18 Überblick Gruppe - Datenbus (bit) Familie Instr.-Set (bit) I/O-Pins Derivate Baseline 8 PIC10, PIC12, PIC16 12 4..32 19 Midrange 8 PIC12,

Bit 7 GCEN R/W0

General Call Enable (I²C Slave-Mode)1 = Interrupt zulassen, wenn General-Call-Adresse empfangen0 = General-Call-Adresse ausgeschaltet

Bit 6 ACKSTAT R/W0

Acknowledge Status (I²C Master-Sende-Mode)1 = kein Acknowledge vom Slave empfangen0 = Acknowledge vom Slave empfangen

Bit 5 ACKDT R/W0

Acknowledge Data (I²C Master-Empfangs-Mode)1 = Not Acknowledge wird nach einem empfangenen Byte gesendet0 = Acknowledge wird nach einem empfangenen Byte gesendet

Bit 4 ACKEN R/W0

Acknowledge Sequence Enable (nur I²C Master-Empfangs-Mode)1 = Ausführung der Acknowledge Sequence0 = Ruhezustand

Bit 3 RCEN R/W0

Receive Enable (I²C Master-Mode)1 = Ausführung der Receive Sequence0 = Ruhezustand

Bit 2 PEN R/W0

Stop Condition Enable (I²C Master-Mode)1 = Ausführung der Stop Condition Sequence0 = Ruhezustand

Bit 1 RSEN R/W0

Repeated Start Condition Enable (I²C Master-Mode)1 = Ausführung der Repeated Start Condition Sequence0 = Ruhezustand

Bit 0 SEN R/W0

Start Condition Enable (I²C Master-Mode)1 = Ausführung der Start Condition Sequence0 = RuhezustandStretch Enable (I²C Slave-Mode)1 = Ausführung der Taktzeitverlängerung0 = keine Taktzeitverlängerung

Tabelle 8.4: SSP Control Register 2: SSPCON2

Bild 8.14: Mikrocontroller-Erweiterung am I²C-Bus

38

Page 43: Mikrocontroller-Praxis PIC18 Architektur PIC18 Überblick Gruppe - Datenbus (bit) Familie Instr.-Set (bit) I/O-Pins Derivate Baseline 8 PIC10, PIC12, PIC16 12 4..32 19 Midrange 8 PIC12,

Programmbeispiel: I²C-Funktionen

// Unterprogramm zum Schreiben eines Bytes über den I²C-Busvoidvoidvoidvoid write_i2c((((unsignedunsignedunsignedunsigned charcharcharchar address,,,, unsignedunsignedunsignedunsigned charcharcharchar value)))) PIR1bits....SSPIF ==== 0;;;; // reset SSPIF // *********** Start senden SSPCON2bits....SEN ==== 1;;;; whilewhilewhilewhile (!(!(!(!PIR1bits....SSPIF);););); // warte solange SSPIF = 0 PIR1bits....SSPIF ==== 0;;;; // reset SSPIF // *********** Adresse senden SSPBUF ==== address;;;; whilewhilewhilewhile (!(!(!(!PIR1bits....SSPIF);););); // warte solange SSPIF = 0 PIR1bits....SSPIF ==== 0;;;; // reset SSPIF // *********** Daten-Byte senden SSPBUF ==== ~~~~value;;;; whilewhilewhilewhile (!(!(!(!PIR1bits....SSPIF);););); // warte solange SSPIF = 0 PIR1bits....SSPIF ==== 0;;;; // reset SSPIF // *********** Stop senden SSPCON2bits....PEN ==== 1;;;; whilewhilewhilewhile (!(!(!(!PIR1bits....SSPIF);););); // warte solange SSPIF = 0 PIR1bits....SSPIF ==== 0;;;; // reset SSPIF

// Unterprogramm zum Lesen eines Bytes über den I²C-Busunsignedunsignedunsignedunsigned charcharcharchar read_i2c((((unsignedunsignedunsignedunsigned charcharcharchar address)))) unsignedunsignedunsignedunsigned charcharcharchar rec_byte;;;;

PIR1bits....SSPIF ==== 0;;;; // reset SSPIF // *********** Start senden SSPCON2bits....SEN ==== 1;;;; whilewhilewhilewhile (!(!(!(!PIR1bits....SSPIF);););); // warte solange SSPIF = 0 PIR1bits....SSPIF ==== 0;;;; // reset SSPIF // *********** Adresse senden SSPBUF ==== address;;;; whilewhilewhilewhile (!(!(!(!PIR1bits....SSPIF);););); // warte solange SSPIF = 0 PIR1bits....SSPIF ==== 0;;;; // reset SSPIF // *********** Byte empfangen SSPCON2bits....RCEN ==== 1;;;; whilewhilewhilewhile (!(!(!(!PIR1bits....SSPIF);););); // warte solange SSPIF = 0 rec_byte ==== SSPBUF;;;; PIR1bits....SSPIF ==== 0;;;; // reset SSPIF // *********** Not Acknowledge senden SSPCON2bits....ACKDT ==== 1;;;; SSPCON2bits....ACKEN ==== 1;;;; whilewhilewhilewhile (!(!(!(!PIR1bits....SSPIF);););); // warte solange SSPIF = 0 PIR1bits....SSPIF ==== 0;;;; // reset SSPIF // *********** Stop senden SSPCON2bits....PEN ==== 1;;;; whilewhilewhilewhile (!(!(!(!PIR1bits....SSPIF);););); // warte solange SSPIF = 0 PIR1bits....SSPIF ==== 0;;;; // reset SSPIF

returnreturnreturnreturn rec_byte;;;;

39

Page 44: Mikrocontroller-Praxis PIC18 Architektur PIC18 Überblick Gruppe - Datenbus (bit) Familie Instr.-Set (bit) I/O-Pins Derivate Baseline 8 PIC10, PIC12, PIC16 12 4..32 19 Midrange 8 PIC12,

9 Interrupt-System

Bild 9.1: Interrupt-Mechanismus

Bild 9.2: Interrupt-Quellen im Mikrocontroller PIC18F4520

40

Int-Vektor

Return-From-Int

Reg. sichern

Reg. wiederherst.

ISR

Hauptprogramm

RB0 oder

RB1 oder

RB2 oder

INT0IF

INT1IF

INT2IF

RB4 .. RB7 oder RBIF

TMR0IF

TMR1IF

TMR2IF

TMR3IF

CCP1IFRC2-Capt. od. Comp.

CCP2IFRC1-/RB3-Capt. od. Comp.

ADIFEnd of Conversion

Externer Interrupt 0

Externer Interrupt 1

Externer Interrupt 2

Port Change Interrupt

Timer 0 Überlauf

Timer 1 Überlauf

Timer 2 Periode

Timer 3 Überlauf

Compare/Capture 1

Compare/Capture 2

A/D Converter

PSPIFSchreib-/Lese-Operatiopn Parallel Slave Port

RCIFEmpfangs-Puffer voll EUSART Receive

TXIFSende-Puffer leer EUSART Transmit

SSPIFSenden/Empfang beendet Master Sync. Serial Port

OSCFIFFehler ext. Osz. Überwachung Oszillator

CMIFÄnderung Comp.-Ausgang Comparator

EEIFSchreib-Operation beendet EEPROM/Flash

BCLIFBus-Kollision I²C-Bus

HLVIFVDD-Überwachung High/Low-Voltage

Inte

rrup

t-A

ktiv

ieru

ng u

nd P

rioris

ieru

ng

Page 45: Mikrocontroller-Praxis PIC18 Architektur PIC18 Überblick Gruppe - Datenbus (bit) Familie Instr.-Set (bit) I/O-Pins Derivate Baseline 8 PIC10, PIC12, PIC16 12 4..32 19 Midrange 8 PIC12,

Bit 7 IPEN R/W0

Interrupt Priority Enable Flag1 = Interrupt-Prioritäten aktiviert0 = keine Interrupt-Prioritäten (PIC16-Kompatibilität)

Bit 6 SBOREN R/W1

Software Brown-Out-Reset Enable Bit (BOREN1:BOREN0 = 01)1 = BOR aktiviert0 = BOR deaktiviert

Bit 5 - nicht implementiertBit 4 /RI R/W

1RESET Instruction Flag1 = RESET-Befehl nicht ausgeführt0 = RESET-Befehl ausgef. (muß per Software wieder gesetzt werden)

Bit 3 /TO R1

Watchdog Time-out Flag bit1 = Power-On, CLRWDT- oder SLEEP-Befehl0 = Watchdog-Timeout aufgetreten

Bit 2 /PD R1

Power-Down-Flag1 = Power-On oder CLRWDT-Befehl0 = SLEEP-Befehl

Bit 1 /POR R/W0

Power-On-Reset Flag1 = kein Power-On-Reset aufgetreten0 = Power-On aufgetreten (muß per Software wieder gesetzt werden)

Bit 0 /BOR R/W0

Brown-Out-Reset-Flag1 = kein Brown-Out-Reset aufgetreten0 = Brown-Out aufgetreten (muß per Software wieder gesetzt werden)

Tabelle 9.1: Reset Control Register – RCON

Bit 7 GIE/GIEH R/W0

Global Interrupt Enable/ Global Interrupt Enable High1 = erlaubt alle unmaskierten / hochprioren Interrupts (IPEN=0/1)0 = sperrt alle Interrupts

Bit 6 PEIE/GIEL

R/W0

Peripheral Interrupt Enable/ Global Interrupt Enable Low1 = erlaubt alle unmaskierten Peripherie-/niederprioren Int.(IPEN=0/1)0 = sperrt alle Peripherie-Interrupts/ niederprioren Interrupts

Bit 5 TMR0IE R/W0

Timer0 Interrupt Enable1 = erlaubt den Timer0-Überlauf-Interrupt0 = sperrt den Timer0-Überlauf-Interrupt

Bit 4 INT0IE R/W0

INT0 Interrupt Enable1 = erlaubt den externen Interrupt 00 = sperrt den externen Interrupt 0

Bit 3 RBIE R/W0

RB Interrupt Enable (Pegeländerung an RB<7:4>)1 = erlaubt den Interrupt bei Pegeländerung0 = sperrt den Interrupt bei Pegeländerung

Bit 2 TMR0IF R/W0

Timer0 Interrupt Flag (Timer0-Überlauf)1 = Timer0-Überlauf aufgetreten0 = Timer0-Überlauf nicht aufgetreten

Bit 1 INT0IF R/W0

INT0 Interrupt Flag1 = externer Interrupt 0 aufgetreten0 = externer Interrupt 0 nicht aufgetreten

Bit 0 RBIF R/WX

RB Interrupt Flag (Pegeländerung an RB<7:4>)1 = Pegeländerung an RB aufgetreten0 = Pegeländerung an RB nicht aufgetreten

Tabelle 9.2: Interrupt Control Register – INTCON

41

Page 46: Mikrocontroller-Praxis PIC18 Architektur PIC18 Überblick Gruppe - Datenbus (bit) Familie Instr.-Set (bit) I/O-Pins Derivate Baseline 8 PIC10, PIC12, PIC16 12 4..32 19 Midrange 8 PIC12,

Bit 7 /RBPU R/W1

RB Pull-up Enable1 = alle Pull-up-Widerstände an Port RB gesperrt0 = Pull-up-Widerstände an Port RB individuell durch Latch-Wert akt.

Bit 6 INTEDG0 R/W1

Interrupt Edge 01 = steigende Flanke INT0 ausgewählt0 = fallende Flanke INT0 ausgewählt

Bit 5 INTEDG1 R/W1

Interrupt Edge 11 = steigende Flanke INT1 ausgewählt0 = fallende Flanke INT1 ausgewählt

Bit 4 INTEDG2 R/W1

Interrupt Edge 21 = steigende Flanke INT2 ausgewählt0 = fallende Flanke INT2 ausgewählt

Bit 3 - nicht implementiertBit 2 TMR0IP R/W

1Timer0 Interrupt Priority1 = hohe Priorität0 = niedrige Priorität

Bit 1 - nicht implementiert

Bit 0 RBIP R/W1

RB Interrupt Priority1 = hohe Priorität0 = niedrige Priorität

Tabelle 9.3: Interrupt Control Register 2 – INTCON2

Bit 7 INT2IP R/W1

INT2 Interrupt Priority1 = hohe Priorität0 = niedrige Priorität

Bit 6 INT1IP R/W1

INT1 Interrupt Priority1 = hohe Priorität0 = niedrige Priorität

Bit 5 - nicht implementiertBit 4 INT2IE R/W

0INT2 Interrupt Enable1 = INT2 aktiviert0 = INT2 gesperrt

Bit 3 INT1IE R/W0

INT1 Interrupt Enable1 = INT1 aktiviert0 = INT1 gesperrt

Bit 2 - nicht implementiert

Bit 1 INT2IF R/W0

INT2 Interrupt Flag1 = Interrrupt aufgetreten0 = Interrrupt nicht aufgetreten

Bit 0 INT1IF R/W0

INT1 Interrupt Flag1 = Interrrupt aufgetreten0 = Interrrupt nicht aufgetreten

Tabelle 9.4: Interrupt Control Register 3 – INTCON3

42

Page 47: Mikrocontroller-Praxis PIC18 Architektur PIC18 Überblick Gruppe - Datenbus (bit) Familie Instr.-Set (bit) I/O-Pins Derivate Baseline 8 PIC10, PIC12, PIC16 12 4..32 19 Midrange 8 PIC12,

Bit 7 PSPIF R/W0

Parallel Slave Port Interrupt Flag1 = ein Lese- oder Schreibzugriff auf den PSP ist erfolgt0 = kein Lese- oder Schreibzugriff auf den PSP ist erfolgt

Bit 6 ADIF R/W0

A/D Converter Interrupt Flag1 = die A/D-Wandlung wurde abgeschlossen0 = die A/D-Wandlung ist noch nicht abgeschlossen

Bit 5 RCIF R/W0

USART Receive Interrupt Flag1 = im USART-Empfangs-Puffer (RCREG) steht ein Zeichen0 = der USART-Empfangs-Puffer ist leer

Bit 4 TXIF R/W0

USART Transmit Interrupt Flag1 = der USART-Sende-Puffer (TXREG) ist wieder leer0 = der USART-Sende-Puffer ist noch nicht leer

Bit 3 SSPIF R/W0

Synchronous Serial Port Interrupt Flag1 = ein Sende/Empfangs-Vorgang hat stattgefunden0 = kein Sende/Empfangs-Vorgang hat stattgefunden

Bit 2 CCP1IF R/W0

CCP1 Interrupt Flag1 = ein Timer1-Compare/Capture-Ereignis ist aufgetreten0 = kein Timer1-Compare/Capture-Ereignis ist aufgetreten

Bit 1 TMR2IF R/W0

Timer2 to PR2 Match Interrupt Flag1 = Timer2-Compare PR2 Reset-Ereignis ist aufgetreten0 = Timer2-Compare PR2 Reset-Ereignis ist nicht aufgetreten

Bit 0 TMR1IF R/W0

Timer1 Overflow Interrupt Flag1 = Timer1 Zählregister-Überlauf0 = kein Timer1 Zählregister-Überlauf

Tabelle 9.5: Peripheral Interrut Request Register 1 – PIR1

Bit 7 OSCFIF R/W0

Oscillator Fail Interrupt Flag1 = Fehler externe Takterzeugung, Umschaltung auf INTOSC0 = Takterzeugung OK

Bit 6 CMIF R/W0

Comparator Interrupt Flag1 = Umschaltung Comparator0 = keine Änderung Comparator-Zustand

Bit 5 - nicht implementiert

Bit 4 EEIF R/W0

EEPROM/Flash Interrupt Flag1 = EEPROM/Flash-Schreiboperation abgeschlossen0 = EEPROM/Flash-Schreiboperation nicht abgeschl. bzw. gestartet

Bit 3 BCLIF R/W0

Bus Collision Interrupt Flag1 = Bus-Kollision aufgetreten0 = keine Bus-Kollision aufgetreten

Bit 2 HLVDIF R/W0

High/Low Voltage Detect Interrupt Flag1 = High/Low-Spannungs-Bedingung eingetreten0 = keine High/Low-Spannungs-Bedingung eingetreten

Bit 1 TMR3IF R/W0

Timer3 Interrupt Flag1 = Timer3 Überlauf aufgetreten0 = kein Timer3 Überlauf aufgetreten

Bit 0 CCP2IF R/W0

CCP2 Interrupt Flag (im PWM-Mode ungenutzt)1 = Timer1-Capture/Compare-Ereignis aufgetreten0 = kein Timer1-Capture/Compare-Ereignis aufgetreten

Tabelle 9.6: Peripheral Interrut Request Register 2 – PIR2

43

Page 48: Mikrocontroller-Praxis PIC18 Architektur PIC18 Überblick Gruppe - Datenbus (bit) Familie Instr.-Set (bit) I/O-Pins Derivate Baseline 8 PIC10, PIC12, PIC16 12 4..32 19 Midrange 8 PIC12,

10 Ergänzungen

00 1 02 03 04 05 06 07NUL SOH STX ETX EOT ENQ ACK BEL

08 09 0A 0B 0C 0D 0E 0FBS HAT LF VT FF CR SO SI

10 11 12 13 14 15 16 17DLE DC1 DC2 DC3 DC4 NAK SYN ETB

18 19 1A 1B 1C 1D 1E 1FCAN EM SUB ESC FS GS RS US

20 21 22 23 24 25 26 27! " # $ % & '

28 29 2A 2B 2C 2D 2E 2F( ) * + , - . /

30 31 32 33 34 35 36 370 1 2 3 4 5 6 7

38 39 3A 3B 3C 3D 3E 3F8 9 : ; < = > ?

40 41 42 43 44 45 46 47@ A B C D E F G

48 49 4A 4B 4C 4D 4E 4FH I J K L M N O

50 51 52 53 54 55 56 57P Q R S T U V W

58 59 5A 5B 5C 5D 5E 5FX Y Z [ \ ] ^ _

60 61 62 63 64 65 66 67` a b c d e f g

68 69 6A 6B 6C 6D 6E 6Fh i j k l m n o

70 71 72 73 74 75 76 77p q r s t u v w

78 79 7A 7B 7C 7D 7E 7Fx y z | ~ DEL

Tabelle 10.1: Der ASCII-Zeichensatz

44