Entdecken Sie eBooks
Kategorien
Entdecken Sie Hörbücher
Kategorien
Entdecken Sie Zeitschriften
Kategorien
Entdecken Sie Dokumente
Kategorien
PICkitTM 2 Beispielprogramme
PICkitTM 2 Beispielprogramme
Inhaltsverzeichnis PICkitTM 2 Starter Kit...............................................................................................2 Programmieren des Targets mit Software PICkitTM 2 Programmer..................2 Programmieren des Targets in der IDE MPLAB................................................ 4 Microcontroller Ein- und Ausgabe .............................................................................5 Setzen eines Digital Ausganges.............................................................................. 5 Lesen eines Digitalen Einganges.............................................................................6 Erfassen von Analogwerten.................................................................................... 7 Ereignisgesteuertes Programmieren............................................................................9 Digitale Eingnge - Interrupt on Port Change..................................................... 9 Zugriffe auf das EEPROM....................................................................................11 Zeitgeber................................................................................................................13 Zhler.................................................................................................................... 14 Komparator............................................................................................................15 Anhang......................................................................................................................16 Configuration Bits.................................................................................................16 Taktsignal..........................................................................................................16 Reset..................................................................................................................16 Die Datei P16F690.INC........................................................................................ 17 Das HEX-Format fr Images................................................................................ 24
Lothar Kerbl
26.11.2010
Seite 1 (24)
PICkitTM 2 Beispielprogramme
Lothar Kerbl
26.11.2010
Seite 2 (24)
PICkitTM 2 Beispielprogramme
Bild 1 Das stand alone Programm zur Kommunikation zwischen PC und PICkit2 und zur Programmierung eines Microcontrollers, der ber die serielle Programmierschnittelle angeschlossen ist.
Mit Import HEX kannst du eine Datei, die ein Image fr das Target System (Zielsystem) enthlt, in ein Editorfenster laden. Das im Editorfenster gezeigte Speicherabbild kannst du mit Write Device in das Target System bertragen. Umgekehrt kannst du mit Read Device den Inhalt des Programmspeichers des Target Systems in das Editorfenster laden. Den Inhalt des Editorfensters kannst du in einer HEX-Datei abspeichern. (Export HEX) Mit dem Befehl Programmer /Verify kannst du die Gleichheit der Programme im Target System und im Editorfensters berprfen.
Die Daten, die du in den Programmspeicher des Zielsystems bertrgst, werden dort in ein FLASH-EEPROM geschrieben. Das heit das Programm bleibt auch nach dem Abschalten der Versorgungsspannung am Zielsystem erhalten.
Lothar Kerbl
26.11.2010
Seite 3 (24)
PICkitTM 2 Beispielprogramme
Durch Einfgen der Datei P16F690.INC (Direktive #include) kannst du in deinem Source Code friendly names (wie STATUS, RP0,TRISIO,... verwenden !) Beachte die Gro- bzw. Kleinschreibung; vergleiche die in dieser Datei definierten friendly names mit den Angaben im Datenblatt der CPU 16F690 (z.B. Adressen der Special Function Registers....) Mit der __CONFIG Direktive definierst du den Inhalt der Configuration Bits. Diese Bits werden im Programmspeicher unter der Adresse 0x2007 gespeichert. Die Werte knnen whrend des Programmablaufes weder gelesen noch verndert werden. Was die einzelnen Einstellungen bedeuten, musst du in der Originaldokumentation nachlesen. Die einstellbaren Werte sind in der Datei P16F690.INC beschrieben. Die einzelnen Optionen bewirken durch & eine Und-Verknpfung der in der INC-Datei definierten Hexadezimal bzw. Binrwerte. (siehe dazu auch Anhang Configuration Bits) Beim Quickbuild werden in deinem Arbeitsverzeichnis ein Assemblerlisting und eine HEX-Datei erstellt. In der IDE stehen dir Funktionen zur Kommunikation mit dem angeschlossenen Target zur Verfgung.
Wenn die Verbindung zwischen Target und PC ber USB hergestellt ist, kannst du das Programm direkt aus der MPLAB IDE in das Target laden (Program Device). Durch Program Device wird das aktuelle Programm im Target System berschrieben. Mglicherweise wirst du zuvor Programmspeicherinhalt des Target Systems in eine HEX-Datei retten wollen. Das geschieht durch Programmer / Read Device und anschlieendes File / Export .
Lothar Kerbl
26.11.2010
Seite 4 (24)
PICkitTM 2 Beispielprogramme
Die Daten, die du in den Programmspeicher des Zielsystems bertrgst, werden dort in ein FLASH-EEPROM geschrieben. Das heit das Programm bleibt auch nach dem Abschalten der Versorgungsspannung am Zielsystem erhalten.
Aufgaben: Untersuche das entstehende HEX-File mit einem Editor und vergleiche es mit der Anzeige im Programm PICkit Programmer, mit dem Inhalt des Fensters Program Memory in der IDE und mit dem Ergebnis im Fenster Disassembly Listing in der MPLAB IDE. Im Disassembly Listing findest du einen Eintrag fr die Adresse 0x2007 wodurch ensteht dieser ? Lothar Kerbl 26.11.2010 Seite 5 (24)
PICkitTM 2 Beispielprogramme
Welche Unterschiede sind im HEX File, wenn die __CONFIG-Direktive nicht eingefgt wird ? Wie sieht das Flussdiagramm deines Programmes aus. Was bewirkt der letzte Befehl (GOTO Schleife), warum ist dieser Befehl notwendig ? Was geschieht, wenn anstelle der Direktive
ORG 0x00 ORG 0x10
die Direktive
verwendet wird ? Wird dadurch das Programm nach einem Reset an der Adresse 0x10 gestartet ?
Der Eingang RA3, (an dem ber einen Widerstand auch der Taster SW1 des Demo-Boards angeschlossen ist), kann vom Programmiergert (gesteuert durch die MPLAB-IDE oder durch die Software PICkit 2 Programmer) auf 0 oder 1 gesetzt werden. Wenn du die IDE MPLAB verwendest, dann musst du um den Ausgang hochohmimg zu machen im Menupunkt Programmer / Settings die Option 3-state on Release from Reset aktivieren. Du musst natrlich auch sicherstellen, dass tatschlich ein Release from Reset durchgefhrt wird . (Menpunkt Programmer / Release from Reset).
Lothar Kerbl
26.11.2010
Seite 6 (24)
PICkitTM 2 Beispielprogramme
bcf STATUS,RP0 ; Wahl der BANK "2" (Register ANSEL) movlw B'11110110' movwf ANSEL ; Port A wird als Eingang definiert, die unteren vier Bit von Port C werden als Ausgang definiert bcf STATUS,RP1 bsf STATUS,RP0 ; Wahl der Bank "1" (Register TRISA,TRISC) movlw B'11111111' movwf TRISA movlw B'11110000' movwf TRISC ; auf "OUTPUT" setzen ; ; Umspeichern der Eingangswerte (Potentiometer und Taster von PORT A) auf die LEDs (PORT C) bcf STATUS,RP1 bcf STATUS,RP0 ; Wahl der Bank "0" (Register PORTA, PORTC) Loop: movf movwf goto end PORTA,w PORTC Loop
Fragen Wie sieht das zugehrige Flussdiagramm aus ? Warum werden Abfrage und Ausgabe in einer Schleife ausgefhrt? Wie oft wird die Schleife in einer Sekunde ausgefhrt ? Wie sieht das ESB (die Charakteristik) eines Digitalausganges fr Ausgabewert 1 (Ausgangskennlinie) eines Digitalausganges fr Ausgabewert 0 (Ausgangskennlinie) eines Digitaleinganges (Stromaufnahme, Schaltschwelle bzw. Hysterese)
aus (Datenblatt bzw. Versuch)
Lothar Kerbl
26.11.2010
Seite 7 (24)
PICkitTM 2 Beispielprogramme
; ; ; Loop:
banksel ADCON0 movlw B'10000001' movwf ADCON0 ; definiere "right justified" ; Referenzspannung = VDD ; Kanal AN0 ; ADC enable
banksel ADCON0 bsf ADCON0,1 ; Starten des ADC durch Setzen des "GO"-Bits ADC_Warten: btfsc ADCON0,1 ; busy waiting, bis d. AD-Umsetzung beendet ist .. goto ADC_Warten ; ...solange das Bit "1" ist,luft die Umsetzung... ADC_Fertig: ; jetzt liegt das ADC-Ergebnis vor... movf ADRESH,w ; hchstwertige Bits der AD-Umsetzung (AD-Result) banksel PORTC movwf PORTC ; die hchstwertigen zwei Bits -> LEDs goto Loop ; .. erneut ADC-Umwandlung starten (Endlosschleife) end
Bei dem Befehl banksel (Bank selection) handelt es sich um ein sogenanntes Assemblermakro: Zur Auswahl einer Speicherbank mssen die beiden Bits RP0 und RP1 im STATUS-Register richtig gesetzt/gelscht werden (siehe die Programme zum Setzen und Lesen von Digitalen Ausgngen/Eingngen). Als Erleichterung fr den Programmierer knnen die dafr notwendigen beiden Befehle mit abgekrzter Schreibweise in den Assembler Source Code eingefgt werden. Auerdem muss der Programmierer nicht die geeignete Nummer der Registerbank nachschlagen. Im Assemblerlisting oder im Program Memory siehst du den tatschlich produzierten (Assembler) Code. Wie sieht das zu diesem Programm gehrige Flussdiagramm aus? Zwischen welchen Spannungswerten kann eine Eingangsspannung verarbeitet werden ? Welcher Strom wird von einem Digital(Analog)eingang aufgenommen ? Aus wievielen Stellen besteht das Ergebnis der AD-Umsetzung ? Wo wird dieses Ergebnis gespeichert ?
Lothar Kerbl
26.11.2010
Seite 8 (24)
PICkitTM 2 Beispielprogramme
Ereignisgesteuertes Programmieren
Digitale Eingnge - Interrupt on Port Change
Bei den ersten Microcontrollerprogrammen haben wir auf Interrupts verzichtet. Um Eingnge zu erfassen wurde die Umgebung in einer Endlosschleife dauernd abgefragt und im Kontext der Schleife wurden entsprechende Aktionen durchgefhrt. Anstelle einer dauernden Abfrage kann der Zustand der Umgebung auch durch Auslsen eines Unterbrechungsereignisses (Interrupt) und einer zugehrigen Interrupt Service Routine (ISR) vom Microcontroller bearbeitet werden. Aufgabe: Beim Drcken und Loslassen des Tasters soll ereignisgesteuert zwischen LED0 und LED1 umgeschalten werden.2
#include <p16F690.inc> __config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _BOR_OFF & _IESO_OFF & _FCMEN_OFF) ORG RESET: goto 0x0000 ;an dieser Adresse MUSS die RESET-Routine stehen STARTUP 0x0004 ;an dieser Adresse MUSS die ISR stehen ISR
ORG 0x0005 STARTUP: ; die folgenden Befehle werden nach dem RESET ausgefhrt. ; PORT A - Bit 0..3:"Digital I/O" Analog Funktion deaktivieren)... banksel ANSEL movlw B'11110000' movwf ANSEL ; Port A:Eingang; Port C: die unteren vier Bits: Ausgang ... banksel TRISA movlw B'11111111' movwf TRISA ; Port A ... "INPUT" movlw B'11110000' movwf TRISC ; Port C ... "OUTPUT" ; Interruptfunktionen definieren ... (INTCON ist in allen Bnken sichtbar) movlw B'00001000' ; GIE = 0, PEIE=0 ; T01E=0,INTE=0,RABIE=1; Flags lschen movwf INTCON ; "Interrupt on Change" fr RA3 und RA0 aktivieren... banksel IOCA movlw B'00001000' movwf IOCA ; Merker initialisieren ; 0x70..0x7F sind in allen Bnken gleich bcf 0x70,0 ; Merker wird spter bei jedem Interrupt "getoggelt"; ; LEDs initialisieren (LED leuchtet nach RESET) ... banksel PORTC movlw B'11110001' movwf PORTC ; ..auf Port C (LEDs) schreiben ;INTERRUPT FREIGEBEN bsf INTCON,GIE ; GIE = 1 ; Interrupts AKTIVIEREN
2
Du musst vor Ausfhrung dieses Programmes sicherstellen, dass die PICkit 2 - Hardware das Target den Reset am Eingang RA3 (/MCLR) freigibt (Programmer / Release from Reset) und in hochohmigen Zustand schaltet. (Programmer / Settings / 3state on Release from Reset )
Lothar Kerbl
26.11.2010
Seite 9 (24)
PICkitTM 2 Beispielprogramme
Schleife: ;ENDLOSSCHLEIFE sleep ; warten auf den Interrupt.... goto Schleife ; ... der Befehl NACH der ISR ;-----------------------ISR: ; das ist die Fortsetzung der INTERRUPTSERVICEROUTINE (ISR) ; der folgende Programmteil wird nur ausgefhrt, wenn durch GP3 ein ; Interrupt ausgelst wurde ; der Programmteil wird im Kontext der Interruptbearbeitung ausgefhrt btfss 0x70,0 ; Teste den "Toggle-Merker" goto IsZero ; IsOne: ; Merker ist gesetzt.... bcf 0x70,0 ; ... deshalb Merker lschen .... movlw B'11110100' ; LED-Muster einstellen ... goto Ausgabe IsZero: ; Merker ist gelscht... bsf 0x70,0 ; ... deshalb Merker setzen .... movlw B'11111000' ; LED-Muster einstellen ... Ausgabe: banksel PORTC movwf PORTC ; .. LED-Muster auf Port C schreiben ; Anstehende Interruptbedingung lschen (durch Zugriff auf Port A und RABIF:=0) movf PORTA bcf INTCON,RABIF ; erneutes Aktivieren des Interrupts RABIE:=1, GIE:=1 bsf INTCON,RABIE retfie ;damit wird automatisch GIE:=1 END
Wenn du anstelle mit dem Taster SW1 durch Aufprgen der Massepotentials auf Durch Prellen werden mehrere Interrupts den Pin RA3 den Interrupt auslst, kommt es oft vor, dass zweimal (oder sogar ausgelst. fter) umgeschalten wird. Der Grund ist Schalterprellen. Das bewirkt, dass beim Aufbringen bzw. Wegschalten des GND-Potentials mehrere aufeinanderfolgende Interrupts ausgelst werden. Jeder dieser Interrupts lst die Interrupt Service Routine (ISR) erneut aus und bewirkt damit einen Wechsel der aktivierten LED. Durch das Ausfhren einer ISR ist die Interruptbedingung noch nicht automatisch beseitigt. Wenn in einer ISR z.B. nur der Befehl RETFIE ausgefhrt wird, bleibt die Interruptbedingung bestehen, und die ISR wrde nach Ausfhren des Befehls RETFIE sofort wieder ausgefhrt werden. Der Befehl RETFIE setzt nmlich automatisch das GIE-Bit wieder auf 1 und damit sind aktivierte Interrupts wieder freigegeben. Die Interruptbedingung fr einen Interrupt on Port Change kann nur durch Zugriff auf das PORTA-Register und durch Rcksetzen des Interrupt Flags quittiert und damit zum Verschwinden gebracht werden. Das ist zum Beispiel durch folgende Befehle (die im Kontext der ISR ausgefhrt werden mssen) mglich:
movf bcf PORTA INTCON,RABIF ;Lesen oder Schreiben auf das Register GPIO ;Lschen des Interruptflags GPIF
Aufgabenstellungen: Wie lange dauert die Ausfhrung der ISR ? Zu wie viel Prozent ist die CPU zeitmig ausgelastet, wenn du annimmst, dass du zwei mal pro Sekunde den Taster bettigst. (Ausgelastet bedeutet, dass die ISR Routine ausgefhrt wird) Wie muss das Programm gendert werden, sodass nur ein Druck auf den Taster das Umschalten zwischen den beiden LEDs bewirkt. (Das Loslassen des Tasters soll ohne Wirkung bleiben)
Lothar Kerbl
26.11.2010
Seite 10 (24)
PICkitTM 2 Beispielprogramme
Wie muss das Programm gendert werden, sodass nur jeder zweite Druck auf den Taster das Umschalten zwischen den LEDs bewirkt. (Das Loslassen des Tasters soll ohne Wirkung bleiben)
ORG 0x0005 STARTUP: ; die folgenden Befehle werden nach dem RESET ausgefhrt. ; PORT A - Bit 0..3:"Digital I/O" Analog Funktion deaktivieren)... banksel ANSEL movlw B'11110000' movwf ANSEL movlw B'00000111' ; Port A:Eingang; Port C: die unteren vier Bits: Ausgang ... banksel TRISA movlw B'11111111' movwf TRISA ; Port A ... "INPUT" movlw B'11110000' movwf TRISC ; Port C ... "OUTPUT" ; LEDs ENTSPRECHEND PERMANENTEN "MERKER" im EEPROM initialisieren ... call SchreibeLED ; Interruptfunktionen definieren ; Interruptfunktionen definieren movlw B'00001000' ; GIE = movwf INTCON ; "Interrupt on Change" fr RA3 banksel IOCA movlw B'00001000' movwf IOCA bsf Schleife: sleep goto INTCON,GIE Schleife ... (INTCON ist in allen Bnken sichtbar) 0, PEIE=0 ; T01E=0,INTE=0,RABIE=1; Flags lschen aktivieren...
; GIE: = 1 ; Interrupts aktivieren ;ENDLOSSCHLEIFE ; warten auf den Interrupt.... ; ... der Befehl NACH der ISR
;-----------------------; INTERRUPTSERVICEROUTINE ; ISR: ; das ist die Fortsetzung der INTERRUPTSERVICEROUTINE (ISR) ; der folgende Programmteil wird nur ausgefhrt, wenn durch GP3 ein ; Interrupt ausgelst wurde call AendereMerker call SchreibeLED ; ; Interruptflags lschen (durch Lesen von PORT A RABIF:=0)... banksel PORTA movf PORTA bcf INTCON,RABIF ; retfie ; GIE wird durch RETFIE auf 1 gesetzt
Lothar Kerbl
26.11.2010
Seite 11 (24)
PICkitTM 2 Beispielprogramme
;----------------------------------------; UNTERPROGRAMME ; AendereMerker: ; der Inhalt der Speicherstelle 0x00 im EEPROM wird hochgezhlt ; ; Hinweis: Da diese Routine NUR im Kontext der ISR ausgefhrt wird, ; sind die Interrupts ohnenhin sicher gesperrt; "im Normalfall" mssten ; whrend des Schreibvorganges auf das EEPROM die Interrupts gesperrt werden. ; (siehe die kursiv gedruckten auskommentierten Zeilen ; ; Lesen des Inhalts.... banksel EEADR movlw 0x00 ; Adresse im EEPROM... movwf EEADR ; ..vorgeben banksel EECON1 ; lesender Zugriff auf den EEPROM Datenspeicher bcf EECON1,EEPGD bsf EECON1,RD ; ..Zugriffsart "Lesen" von EEPROM banksel EEDAT incf EEDAT ; Erhhen des EEPROM gespeicherten Wertes ; Zurckschreiben des invertierten Wertes in den EEPROM-Datenspeicher... banksel EECON1 bcf EECON1,EEPGD bsf EECON1,WREN ; bcf INTCON,GIE ; Interrupts "im Normalfall" ab nun sperren !!! movlw 0x55 ; "required uninterruptable sequence" movwf EECON2 ; "required uninterruptable sequence" movlw 0xAA ; "required uninterruptable sequence" movwf EECON2 ; "required uninterruptable sequence" bsf EECON1,WR ; "required uninterruptable sequence" START SCHREIBEN ; bsf INTCON,GIE ; Interrupts "im Normalfall" ab nun wieder zulassen !!! bcf EECON1,WREN ; ..erneutes Starten von Schreiben verhindern ; banksel PIR2 ; .. Peripheral Interrupt-Register Warten: ; "busy waiting" bis Schreibvorgang beendet ist btfss PIR2,EEIF ; Flag testen, ob Schreibvorgang fertig ist goto Warten ; ->das Flag ist noch nicht gesetzt .. FertigGeschrieben: bcf PIR1,EEIF ; das Flag muss gelscht werden RETURN ;-----SchreibeLED: ; je nach Inhalt des Merkers banksel EEADR movlw 0x00 movwf EEADR banksel EECON1 bsf EECON1,RD banksel EEDATA movf EEDATA,w banksel PORTC movwf PORTC return end
im EEPROM wird entspr. LED-Muster eingeschalten ;Lesen aus EEPROM (EEADR, EECON1,EEDATA) ; Adresse im EEPROM... ; ; ..Zugriff "Lesen" ; Inhalt der Speicherstelle des EEPROM ... ; .. auf PORTC schreiben
In diesem Programm wird im Kontext der Interrupt Service Routine (ISR) auf das Die Warteschleife wird etwa 5ms lang ausgefhrt EEPROM geschrieben. Dieser Schreibvorgang und damit die Warteschleife (busy waiting) - dauert sehr lang (laut Originaldokumentation typisch 5ms). Dementsprechend lang dauert auch die Ausfhrung der gesamten Interrupt Service Routine (ISR). Kontrollfrage: Busy Waiting: Welcher Anteil (in %) der Ausfhrungszeit der Interrupt Service Routine wird durch Warteschleife, bis ein busy waiting auf den Abschluss des EEPROM-Schreibvorganges Ereignis eintrifft verbraucht ? Lothar Kerbl 26.11.2010 Seite 12 (24)
PICkitTM 2 Beispielprogramme
Zeitgeber
Oft bentigst du einen einfachen Frequenzgenerator. Im folgenden Programm wird durch den Zeitgeber Timer0 in regelmigen Abstnden ein Interrupt ausgelst. Die Frequenz kannst du durch Verndern des Startwertes, den du in das Register TMR0 bzw. in den Prescaler schreibst, einstellen
#include <p16F690.inc> __config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _BOR_OFF & _IESO_OFF & _FCMEN_OFF) RESET: GOTO ORG INTERRUPT: GOTO STARTUP 0x0004 ;an dieser Adresse MUSS die ISR stehen ISR
Timer: Der Interrupt wird nach einer vorgegebenen Anzahl von internen Zeitschritten ausgelst.
ORG 0x0005 STARTUP: ; die folgenden Befehle werden nach dem RESET ausgefhrt. ;ADC-Funktion fr Pins AUSschalten (siehe Dokumentation) banksel ANSEL MOVLW B'00000000' ; kein Analog Eingang MOVWF ANSEL ; ; Richtung des bentigten Digital I/O definieren banksel TRISC MOVLW B'11110000' ; MOVWF TRISC ; .. und auf das Richtungsregister schreiben ; Interruptfunktionen definieren ... banksel OPTION_REG MOVLW B'11010110' ; -;-;interner Takt;-;Prescaler f.TMR0;Prescaler Rate MOVWF OPTION_REG ; .. in das Option Register schreiben ; Merker initialisieren ... clrf 0x70 ; Merker wird spter bei jedem Interrupt weitergezhlt bcf INTCON,T0IF ; Interrupt Flag lschen bsf INTCON,T0IE ; Interrupt aktivieren bsf INTCON,GIE ; Schleife: ;ENDLOSSCHLEIFE GOTO Schleife ; SLEEP wrde Timer0 deaktivieren... ;-----------------------ISR: ; das ist die Fortsetzung der INTERRUPTSERVICEROUTINE (ISR) ; der folgende Programmteil wird ausgefhrt, wenn durch den berlauf des Timer0 ; ein Interrupt ausgelst wurde incf 0x70 movf 0x70,w ; Inhalt des Merkers . banksel PORTC movwf PORTC ; auf die LED-Anzeige schreiben ; Interruptflags lschen und Interrupts wieder "aktivieren".... banksel TMR0 clrf TMR0 ; in das Timerregister schreiben bsf INTCON,T0IE ; bcf INTCON,T0IF RETFIE ; GIE=1 end
Du kannst in der ISR den Startwert fr den Zhler natrlich jedes Mal mit einem neuen Wert initialisieren. Insbesondere kannst du fr die beiden Flle Merker ist eine gerade Zahl und Merker ist eine ungerade Zahl verschiedene Werte vorsehen, die von anderen Programmteilen beeinflusst werden knnen. So kannst du durch Programmierung deinem ausgegebenen Digitalsignal verschiedene Eigenschaften verleihen: Lothar Kerbl 26.11.2010 Seite 13 (24)
PICkitTM 2 Beispielprogramme
PFM-Signal - Frequenzmoduliertes Signal PWM-Signal - Pulsweitenmoduliertes Signal PPM-Signal - Pulsphasenmoduliertes Signal (Signalfrequenz ist konstant !)
Aufgabe: Wie muss die ISR fr ein PFM, PWM und ein PPM-Signal programmiert werden? Welche Variable mssen dabei verwendet werden? Welche Grenzfrequenzen (Maximal, Minimal) und welche Auflsungen des Tastverhlnisses bzw. der Phasenlage eines PPM-Signales sind dabei jeweils erreichbar?
Zhler
Flanken am Eingang RA2/T0CKI knnen im Register TMR0 gezhlt werden; bei berlauf des Zhlers (bergang von 0xFF auf 0x00) wird ein Interrupt ausgelst. Der Anfangswert des Zhlers (TMR0) und ein Prescaler knnen gesetzt werden gesetzt werden.
#include <p16F690.inc> __config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _BOR_OFF & _IESO_OFF & _FCMEN_OFF) RESET: GOTO ORG INTERRUPT: GOTO STARTUP 0x0004 ISR ;an dieser Adresse MUSS die ISR stehen
Counter: Der Interrupt wird nach einer vorgegebenen Anzahl von externen Zhlereignissen ausgelst.
ORG 0x0005 STARTUP: ; die folgenden Befehle werden nach dem RESET ausgefhrt. ;ADC-Funktion fr Pins AUSschalten (siehe Dokumentation) banksel ANSEL MOVLW B'00000000' ; kein Analog Eingang MOVWF ANSEL ; ; Definition der Ausgnge (LEDs) banksel TRISC MOVLW B'11110000' ; MOVWF TRISC ; .. in das Richtungsregister schreiben ; Interruptfunktionen definieren ... banksel OPTION_REG MOVLW B'01110000' ;Pull-Up aktiv;-;EXTERNE ZHLPULSE; steigende Flanke;Prescaler f.TMR0;Prescaler Rate -> 1:1 MOVWF OPTION_REG ; .. in das Option Register schreiben ; Merker initialisieren ... clrf 0x70 ; Merker wird spter bei jedem Interrupt weitergezhlt banksel TMR0 ; Initialisieren des Zhlerregisters.. movlw 0xF8 ; ... noch 8 Zhlpulse bis berlauf FF->00 und ... movwf TMR0 ; ... damit zum Auslsen des Interrupts bcf INTCON,T0IF ; Interrupt Flag lschen bsf INTCON,T0IE ; Interrupt aktivieren bsf INTCON,GIE ; Schleife: ;ENDLOSSCHLEIFE GOTO Schleife ; SLEEP wrde Timer0 deaktivieren... ;-----------------------ISR: ; das ist die Fortsetzung der INTERRUPTSERVICEROUTINE (ISR) ; der folgende Programmteil wird ausgefhrt, wenn durch den berlauf des Registers TMR0 ; (0xFF-> 0x00) ein Interrupt ausgelst wurde incf 0x70 ; Merker weiterzhlen movf 0x70,w ; banksel PORTC movwf PORTC ; auf die LED-Anzeige schreiben ; Zhlerregister (wieder) auf den Startwert setzen... banksel TMR0 movlw 0xF8 ; ... noch 8 Zhlpulse bis zum berlauf FF->00... movwf TMR0 ; Interruptflags lschen und Interrupts wieder "aktivieren".... bsf INTCON,T0IE ; bcf INTCON,T0IF RETFIE ; GIE=1 end
Lothar Kerbl
26.11.2010
Seite 14 (24)
PICkitTM 2 Beispielprogramme
Welche Spannung an einem Digitaleingang wird als 0 erkannt, welche als 1? Welche Wirkung hat der Pull up Widerstand, der im OPTION_REG (RABPU) und in den Registern WPUA bzw. WPUB aktiviert werden kann? Wie (warum) vereinfacht sich die Ansteuerung eines Digitaleinganges, wenn ein interner Pull up Widerstand verwendet wird?
Komparator
Regler arbeiten meist als Zwei- oder Mehrpunktregler (mit oder ohne Hysterese). Eine solche Reglerfunktionen lsst sich durch die Komparatorfunktion des PIC Microcontrollers realisieren. Bei solchen diesen Reglern wird ein Digitaler Ausgang geschaltet, und zwar dann, wenn ein (analoger) Eingangswert eine Schaltschwelle berschreitet. Die Schaltschwelle kann durch einen weiteren (analogen) Eingangswert oder durch einen fest vorgegeben Wert definiert sein. Der PIC-Microcontroller kann diese Komparatorfunktion ausfhren, mit dem Auftreten des Schaltereignisses kann eine Interrupt Service Routine verbunden werden, der Schaltzustand kann direkt an einem Ausgang C1OUT bzw. C2OUT abgebildet werden kann. Beispiel Zweipunktregler mit Hysterese: Der Istwert wird durch die analoge Spannung (Analog Eingang 1 0..5V ) vorgegeben, die Schaltschwelle ist durch einen fixen Wert (entsprechend 3,0V) vorgegeben . Die Gesamtbreite der Hysterese soll 500 mV betragen. Die Hysterese ist symmetrisch zur Schaltschwelle und nicht vernderbar. Nach Reset ist der Ausgang bevorzugt ausgeschaltet3. Hinweis: Bei jedem Aufruf der ISR muss die Schaltschwelle entsprechend der Hysterese neu parametriert werden, bei einem Zweipunktregler ohne Hysterese (Hysteresebreite = 0) kann auf die Verwendung einer ISR verzichtet werden. Erweiterte Aufgabenstellung: Wie knnte man die Vorgabe der Schaltschwelle durch einen weiteren analogen Eingangswert verndern? Wie knnte man durch Druck auf einen Taster vorbergehend die Hysterese ausschalten (Zweipunktregler ohne Hysterese) Wie ist ein Dreipunktregler mit Hysterese zu programmieren? Welche Parameter mssen bei dieser Reglerart als Parameter bercksichtigt werden? Wie ist die ISR zu programmieren?
Dies gilt fr den Fall, dass der Istwert im Bereich der Hysterese um die Schaltschwelle liegt.
Lothar Kerbl
26.11.2010
Seite 15 (24)
PICkitTM 2 Beispielprogramme
Anhang
Configuration Bits
Ein Teil des Programmspeicherbereiches kann nicht mit ausfhrbarem Code belegt werden. (Adresse 0x2007) In diesem Bereich werden Grundeinstellungen fr die Arbeitsweise des Microcontrollers festgelegt. Zwei dieser Einstellungen betreffen die Verwendung des Taktsignales und die Behandlung der RESET-Funktion
Taktsignal Die umfangreiche Logik eines Microcontrollers kann nur als synchrones Schaltwerk entworfen und realisiert werden. Zu dessen Ansteuerung ist ein zentraler Takt notwendig, der auf verschiedene Arten zur Verfgung gestellt werden kann: 1. Der Microcontroller ist Teil einer umfangreicheren Schaltung und kann mit einem vorhandenen Takt versorgt werden. (external clock in-EC) 2. Um eine genau definierte Frequenz erzeugen zu knnen, kann die Frequenz durch ein frequenzbestimmendes Element und zwei Kondensatoren eingestellt werden. (crystal oscillator, ceramic resonator - LP, XT, HS) 3. Wenn die Frequenz fr die Arbeitsweise von untergeordneter Bedeutung ist, kann sie durch einen Kondensator und einen Widerstand vorgegeben werden (external Resistor/Capacitor RC) 4. Wenn man mit einer vorgegebenen Frequenz von 4MHz das Auslangen findet, kann man den internen 4 MHz Oszillator nutzen (internal oscillator INTOSC) Die Auswahl der Betriebsart, die natrlich mit der Beschaltung zusammenpassen muss, geschieht durch Vorgabe der Configuration Bits FOSC0, FOSC1, FOSC2
Reset Das Programm wird an der Adresse 0 gestartet, wenn eine der folgenden Bedingungen eintritt: 1. Power up Reset Wenn die Versorgungsspannung einen gewissen Wert berschreitet, wird das Programm an der Adresse 0 gestartet 2. Brown Out Wenn die Versorgungsspannung einen bestimmten Wert unterschreitet tritt der sog. Brown out Zustand ein. Wenn nach diesem Brown out Zustand die Versorgungsspannung wieder stabil ist, wird das Programm an der Adresse 0 begonnen. 3. Master Clear Durch das Eingangssignal MCLR kann ein Reset ausgelst werden
Lothar Kerbl
26.11.2010
Seite 16 (24)
PICkitTM 2 Beispielprogramme
4. Watch Dog Timer unabhngig von laufenden Programmen kann durch einen Watch Dog ein Programmabsturz erkannt und durch ein Reset beantwortet warden. Der Watch Dog wird durch die Befehle SLEEP und CLRWDT wieder nachgestellt. Um zu erkennen, welcher dieser Grnde den Programmstart ausgelst hat, muss der Inhalt des Power Control Registers (PCON) im Programmcode, der nach nach einem Reset erfolgt, berprft werden.
; This header file defines configurations, registers, and other useful bits of ; information for the PIC16F690 microcontroller. These names are taken to match ; the data sheets as closely as possible. ; Note that the processor must be selected before this file is ; included. The processor may be selected the following ways: ; ; ; ; ; 1. Command line switch: C:\ MPASM MYFILE.ASM /PIC16F690 2. LIST directive in the source file LIST P=PIC16F690 3. Processor Type entry in the MPASM full-screen interface
;========================================================================== ; ; Revision History ; ;========================================================================== ;1.00 10/12/04 Original ;========================================================================== ; ; Verify Processor ; ;========================================================================== IFNDEF __16F690 MESSG "Processor-header file mismatch. Verify selected processor." ENDIF ;========================================================================== ; ; Register Definitions ; ;========================================================================== W EQU H'0000' F EQU H'0001' ;----- Register Files-----------------------------------------------------INDF EQU H'0000' TMR0 EQU H'0001' PCL EQU H'0002' STATUS EQU H'0003' FSR EQU H'0004' PORTA EQU H'0005' PORTB EQU H'0006' PORTC EQU H'0007' PCLATH INTCON PIR1 PIR2 TMR1L TMR1H T1CON TMR2 T2CON SSPBUF SSPCON CCPR1L CCPR1H CCP1CON RCSTA TXREG RCREG PWM1CON ECCPAS EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU H'000A' H'000B' H'000C' H'000D' H'000E' H'000F' H'0010' H'0011' H'0012' H'0013' H'0014' H'0015' H'0016' H'0017' H'0018' H'0019' H'001A' H'001C' H'001D'
Lothar Kerbl
26.11.2010
Seite 17 (24)
PICkitTM 2 Beispielprogramme
ADRESH ADCON0 OPTION_REG TRISA TRISB TRISC PIE1 PIE2 PCON OSCCON OSCTUNE PR2 SSPADD MSK SSPMSK SSPSTAT WPU WPUA IOC IOCA WDTCON TXSTA SPBRG SPBRGH BAUDCTL ADRESL ADCON1 EEDAT EEDATA EEADR EEDATH EEADRH WPUB IOCB VRCON CM1CON0 CM2CON0 CM2CON1 ANSEL ANSELH EECON1 EECON2 PSTRCON SRCON
EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU
H'001E' H'001F' H'0081' H'0085' H'0086' H'0087' H'008C' H'008D' H'008E' H'008F' H'0090' H'0092' H'0093' H'0093' H'0093' H'0094' H'0095' H'0095' H'0096' H'0096' H'0097' H'0098' H'0099' H'009A' H'009B' H'009E' H'009F' H'010C' H'010C' H'010D' H'010E' H'010F' H'0115' H'0116' H'0118' H'0119' H'011A' H'011B' H'011E' H'011F' H'018C' H'018D' H'019D' H'019E'
;----- BANK 0 REGISTER DEFINITIONS ---------------------------------------;----- STATUS Bits -------------------------------------------------------IRP RP1 RP0 NOT_TO NOT_PD Z DC C EQU EQU EQU EQU EQU EQU EQU EQU H'0007' H'0006' H'0005' H'0004' H'0003' H'0002' H'0001' H'0000'
;----- INTCON Bits -------------------------------------------------------GIE PEIE T0IE INTE RABIE T0IF INTF RABIF EQU EQU EQU EQU EQU EQU EQU EQU H'0007' H'0006' H'0005' H'0004' H'0003' H'0002' H'0001' H'0000'
;----- PIR1 Bits ---------------------------------------------------------ADIF RCIF TXIF SSPIF CCP1IF T2IF TMR2IF EQU EQU EQU EQU EQU EQU EQU H'0006' H'0005' H'0004' H'0003' H'0002' H'0001' H'0001'
Lothar Kerbl
26.11.2010
Seite 18 (24)
PICkitTM 2 Beispielprogramme
T1IF TMR1IF
EQU EQU
H'0000' H'0000'
;----- PIR2 Bits ---------------------------------------------------------OSFIF C2IF C1IF EEIF EQU EQU EQU EQU H'0007' H'0006' H'0005' H'0004'
;----- T1CON Bits --------------------------------------------------------T1GINV TMR1GE T1CKPS1 T1CKPS0 T1OSCEN NOT_T1SYNC TMR1CS TMR1ON EQU EQU EQU EQU EQU EQU EQU EQU H'0007' H'0006' H'0005' H'0004' H'0003' H'0002' H'0001' H'0000'
;----- T2CON Bits --------------------------------------------------------TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 TMR2ON T2CKPS1 T2CKPS0 EQU EQU EQU EQU EQU EQU EQU H'0006' H'0005' H'0004' H'0003' H'0002' H'0001' H'0000'
;----- SSPCON Bits ------------------------------------------------------WCOL SSPOV SSPEN CKP SSPM3 SSPM2 SSPM1 SSPM0 EQU EQU EQU EQU EQU EQU EQU EQU H'0007' H'0006' H'0005' H'0004' H'0003' H'0002' H'0001' H'0000'
;----- CCP1CON Bits ------------------------------------------------------P1M1 P1M0 DC1B1 DC1B0 CCP1M3 CCP1M2 CCP1M1 CCP1M0 EQU EQU EQU EQU EQU EQU EQU EQU H'0007' H'0006' H'0005' H'0004' H'0003' H'0002' H'0001' H'0000'
;----- RCSTA Bits --------------------------------------------------------SPEN RX9 SREN CREN ADDEN FERR OERR RX9D EQU EQU EQU EQU EQU EQU EQU EQU H'0007' H'0006' H'0005' H'0004' H'0003' H'0002' H'0001' H'0000'
;----- PWM1CON Bits ------------------------------------------------------PRSEN PDC6 PDC5 PDC4 PDC3 PDC2 PDC1 PDC0 EQU EQU EQU EQU EQU EQU EQU EQU H'0007' H'0006' H'0005' H'0004' H'0003' H'0002' H'0001' H'0000'
;----- ECCPAS Bits -------------------------------------------------------ECCPASE ECCPAS2 ECCPAS1 ECCPAS0 PSSAC1 PSSAC0 PSSBD1 PSSBD0 EQU EQU EQU EQU EQU EQU EQU EQU H'0007' H'0006' H'0005' H'0004' H'0003' H'0002' H'0001' H'0000'
Lothar Kerbl
26.11.2010
Seite 19 (24)
PICkitTM 2 Beispielprogramme
;----- BANK 1 REGISTER DEFINITIONS ---------------------------------------;----- OPTION Bits -------------------------------------------------------NOT_RABPU INTEDG T0CS T0SE PSA PS2 PS1 PS0 EQU EQU EQU EQU EQU EQU EQU EQU H'0007' H'0006' H'0005' H'0004' H'0003' H'0002' H'0001' H'0000'
;----- TRISA Bits -------------------------------------------------------TRISA5 TRISA4 TRISA3 TRISA2 TRISA1 TRISA0 EQU EQU EQU EQU EQU EQU H'0005' H'0004' H'0003' H'0002' H'0001' H'0000'
;----- TRISB Bits -------------------------------------------------------TRISB7 TRISB6 TRISB5 TRISB4 EQU EQU EQU EQU H'0007' H'0006' H'0005' H'0004'
;----- TRISC Bits -------------------------------------------------------TRISC7 TRISC6 TRISC5 TRISC4 TRISC3 TRISC2 TRISC1 TRISC0 EQU EQU EQU EQU EQU EQU EQU EQU H'0007' H'0006' H'0005' H'0004' H'0003' H'0002' H'0001' H'0000'
;----- PIE1 Bits ---------------------------------------------------------ADIE RCIE TXIE SSPIE CCP1IE T2IE TMR2IE T1IE TMR1IE EQU EQU EQU EQU EQU EQU EQU EQU EQU H'0006' H'0005' H'0004' H'0003' H'0002' H'0001' H'0001' H'0000' H'0000'
;----- PIE2 Bits ---------------------------------------------------------OSFIE C2IE C1IE EEIE EQU EQU EQU EQU H'0007' H'0006' H'0005' H'0004'
;----- PCON Bits ---------------------------------------------------------ULPWUE SBOREN NOT_POR NOT_BOR EQU EQU EQU EQU H'0005' H'0004' H'0001' H'0000'
;----- OSCCON Bits -------------------------------------------------------IRCF2 IRCF1 IRCF0 OSTS HTS LTS SCS EQU EQU EQU EQU EQU EQU EQU H'0006' H'0005' H'0004' H'0003' H'0002' H'0001' H'0000'
Lothar Kerbl
26.11.2010
Seite 20 (24)
PICkitTM 2 Beispielprogramme
;----- SSPSTAT Bits -------------------------------------------------------SMP CKE D I2C_DATA NOT_A NOT_ADDRESS D_A DATA_ADDRESS P I2C_STOP S I2C_START R I2C_READ NOT_W NOT_WRITE R_W READ_WRITE UA BF EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU H'0007' H'0006' H'0005' H'0005' H'0005' H'0005' H'0005' H'0005' H'0004' H'0004' H'0003' H'0003' H'0002' H'0002' H'0002' H'0002' H'0002' H'0002' H'0001' H'0000'
;----- WPUA Bits --------------------------------------------------------WPUA5 WPUA4 WPUA2 WPUA1 WPUA0 EQU EQU EQU EQU EQU H'0005' H'0004' H'0002' H'0001' H'0000'
;----- IOC Bits --------------------------------------------------------IOC5 IOC4 IOC3 IOC2 IOC1 IOC0 EQU EQU EQU EQU EQU EQU H'0005' H'0004' H'0003' H'0002' H'0001' H'0000'
;----- IOCA Bits --------------------------------------------------------IOCA5 IOCA4 IOCA3 IOCA2 IOCA1 IOCA0 EQU EQU EQU EQU EQU EQU H'0005' H'0004' H'0003' H'0002' H'0001' H'0000'
;----- WDTCON Bits -------------------------------------------------------WDTPS3 WDTPS2 WDTPS1 WDTPS0 SWDTEN EQU EQU EQU EQU EQU H'0004' H'0003' H'0002' H'0001' H'0000'
;----- TXSTA Bits ------------------------------------------------------CSRC TX9 TXEN SYNC SENB BRGH TRMT TX9D EQU EQU EQU EQU EQU EQU EQU EQU H'0007' H'0006' H'0005' H'0004' H'0003' H'0002' H'0001' H'0000'
;----- SPBRG Bits ------------------------------------------------------BRG7 BRG6 BRG5 BRG4 BRG3 BRG2 BRG1 BRG0 EQU EQU EQU EQU EQU EQU EQU EQU H'0007' H'0006' H'0005' H'0004' H'0003' H'0002' H'0001' H'0000'
;----- SPBRGH Bits ------------------------------------------------------BRG15 BRG14 BRG13 EQU EQU EQU H'0007' H'0006' H'0005'
Lothar Kerbl
26.11.2010
Seite 21 (24)
PICkitTM 2 Beispielprogramme
;----- BAUDCTL Bits ------------------------------------------------------ABDOVF RCIDL SCKP BRG16 WUE ABDEN EQU EQU EQU EQU EQU EQU H'0007' H'0006' H'0004' H'0003' H'0001' H'0000'
;----- ADCON1 Bits -------------------------------------------------------ADCS2 ADCS1 ADCS0 EQU EQU EQU H'0006' H'0005' H'0004'
;----- BANK 2 REGISTER DEFINITIONS ---------------------------------------;----- WPUB Bits ---------------------------------------------------------WPUB7 WPUB6 WPUB5 WPUB4 EQU EQU EQU EQU H'0007' H'0006' H'0005' H'0004'
;----- IOCB Bits --------------------------------------------------------IOCB7 IOCB6 IOCB5 IOCB4 EQU EQU EQU EQU H'0007' H'0006' H'0005' H'0004'
;----- VRCON Bits --------------------------------------------------------C1VREN C2VREN VRR VP6EN VR3 VR2 VR1 VR0 EQU EQU EQU EQU EQU EQU EQU EQU H'0007' H'0006' H'0005' H'0004' H'0003' H'0002' H'0001' H'0000'
;----- CM1CON0 Bits ------------------------------------------------------C1ON C1OUT C1OE C1POL C1R C1CH1 C1CH0 EQU EQU EQU EQU EQU EQU EQU H'0007' H'0006' H'0005' H'0004' H'0002' H'0001' H'0000'
;----- CM2CON0 Bits ------------------------------------------------------C2ON C2OUT C2OE C2POL C2R C2CH1 C2CH0 EQU EQU EQU EQU EQU EQU EQU H'0007' H'0006' H'0005' H'0004' H'0002' H'0001' H'0000'
;----- CM2CON1 Bits ------------------------------------------------------MC1OUT MC2OUT T1GSS C2SYNC EQU EQU EQU EQU H'0007' H'0006' H'0001' H'0000'
;----- ANSELH Bits -------------------------------------------------------ANS11 ANS10 ANS9 ANS8 EQU EQU EQU EQU H'0003' H'0002' H'0001' H'0000'
Lothar Kerbl
26.11.2010
Seite 22 (24)
PICkitTM 2 Beispielprogramme
;----- BANK 3 REGISTER DEFINITIONS ---------------------------------------;----- EECON1 Bits -------------------------------------------------------EEPGD WRERR WREN WR RD EQU EQU EQU EQU EQU H'0007' H'0003' H'0002' H'0001' H'0000'
;----- PSTRCON Bits -------------------------------------------------------STRSYNC STRD STRC STRB STRA EQU EQU EQU EQU EQU H'0004' H'0003' H'0002' H'0001' H'0000'
;----- SRCON Bits ---------------------------------------------------------SR1 SR0 C1SEN C2REN PULSS PULSR EQU EQU EQU EQU EQU EQU H'0007' H'0006' H'0005' H'0004' H'0003' H'0002'
;========================================================================== ; ; RAM Definition ; ;========================================================================== __MAXRAM H'1FF' __BADRAM H'08'-H'09', H'1B' __BADRAM H'88'-H'89', H'91', H'9C'-H'9D' __BADRAM H'108'-H'109', H'110'-H'114', H'117', H'11C'-H'11D' __BADRAM H'188'-H'189', H'18E'-H'19C', H'19F'-H'1EF' ;========================================================================== ; ; Configuration Bits ; ;========================================================================== _FCMEN_ON _FCMEN_OFF _IESO_ON _IESO_OFF _BOR_ON _BOR_NSLEEP _BOR_SBODEN _BOR_OFF _CPD_ON _CPD_OFF _CP_ON _CP_OFF _MCLRE_ON _MCLRE_OFF _PWRTE_OFF _PWRTE_ON _WDT_ON _WDT_OFF _LP_OSC _XT_OSC _HS_OSC _EC_OSC _INTRC_OSC_NOCLKOUT _INTRC_OSC_CLKOUT _EXTRC_OSC_NOCLKOUT _EXTRC_OSC_CLKOUT _INTOSCIO _INTOSC _EXTRCIO _EXTRC LIST EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU H'3FFF' H'37FF' H'3FFF' H'3BFF' H'3FFF' H'3EFF' H'3DFF' H'3CFF' H'3F7F' H'3FFF' H'3FBF' H'3FFF' H'3FFF' H'3FDF' H'3FFF' H'3FEF' H'3FFF' H'3FF7' H'3FF8' H'3FF9' H'3FFA' H'3FFB' H'3FFC' H'3FFD' H'3FFE' H'3FFF' H'3FFC' H'3FFD' H'3FFE' H'3FFF'
Lothar Kerbl
26.11.2010
Seite 23 (24)
PICkitTM 2 Beispielprogramme
In dieser Datei wird der Inhalt des Programmspeichers fr das Target System beschrieben. Das Format, in dem der Speicherinhalt in dieser Datei angegeben ist, heit INTELHEX-Format. Das ist ein gebruchliches Format zur Darstellung und zum Transport von Images fr Mikroprozessorsysteme (und auch zur Darstellung von PROMInhalten). Jede Zeile ist folgendermaen aufgebaut. Doppelpunkt : am Beginn der Zeile Die Anzahl der zu ladenden Bytes als zweistellige HEX-Zahl Die Adresse4, an der die Daten im Target System zu laden sind Angabe ber die Art der Daten in der Zeile (normalerweise 00) Die Daten; d.h. der zu programmierende Inhalt des Programmspeichers wenn du in der IDE MPLAB dasselbe Programm geladen hast, sollten diese Daten mit der Anzeige Program Memory bereinstimmen. Den Inhalt des Programmspeichers kannst du auch mit dem Programm PICkit 2 Programmer berprfen. Beachte aber, dass die Adressierung in der HEXDatei byteweise erfolgt, whrend im Programmspeicher immer 14 Bit unter einer Adresse gespeichert sind. Prfsumme Beachte, dass auch fr die Programmierung der Configuration Bits eine eigene Zeile vorgesehen ist
: : : : : : : 10 10 10 10 10 10 02 0000 0010 0020 0030 0040 0050 400E 00 00 00 00 00 00 00 830100308A006328A00003088301AC00 0408AD000A08AE008A012B08AF000B19 8B1E16288312CD239F140B110B188B1D 212883123623013A031D20280130A106 0B1083120C1F582883160C1F57287F30 83121E020318402840301E02031C3828 D430 AC 4C D6 CA 0E 63 59
Wahrscheinlich fllt dir bei genauerem Vergleich auf, dass die Adressen in der HEX-Datei nicht mit der Adressierung im Programmspeicher bereinstimmen. Der Programmspeicher wird beim Programmieren - anders als bei der Programmausfhrung - mit einer Breite von 8 Bit gesehen. In der Datei sollte auch ein Eintrag fr das Configuration Word auf der Programmspeicheradresse 0x2007 (Programmieradresse 0x400E) vorgesehen sein.
Lothar Kerbl
26.11.2010
Seite 24 (24)