Das ist ein primitives Beispielprogramm für einen PIC10F202.
Das Programm läuft auch auf dem PIC10F200.
Wenn man das Semikolon vor einer im Quelltext auskommentierten (und
mit einem entsprechenden Kommentar versehenen) Zeile entfernt, dann
lässt
sich das Programm auch auf PIC10F204/206 benutzen.
Schaltung
Der PIC10F202 ist mit Betriebsspannung (5 V) versorgt:
Im nebenstehenden Bild verwende ich eine 8-polige DIL-Ausführung des PIC. Natürlich geht auch ein 6-Pin-SMD-Variante im SOT-Gehäuse. |
Besonderheiten
Dieses Beispiel dient der Vorstellung der 12-Bit-PICs.
OSCCAL
Im Unterschied zu den 14- und 16- Bit PICs, starten die 12-Bit-PICs
nach dem Reset (z.B. Power-on) mit der Programmabarbeitung nicht an der
Adresse 0x00, sondern auf der allerletzten FLASH-Adresse. Dort steht
(wenn
die Brennersoftware fehlerfrei funktionierte) ein MOVLW-Befehl,
der den für diesen PIC ausgemessenen individuellen OSCCAL-Wert
nach
w
lädt.
Danach springt der PIC zur Adresse 0x00, und beginnt mit der
Abarbeitung
des eigentlichen Programms. Als erstes sollte man nun den Kalibrierwert
aus
w
in das Register OSCCAL schreiben, um den Oszillator
damit auf 4 MHz zu kalibrieren.
; Beginn des Programmcodes
org 0x0000 |
Da normalerweise die Brennsoftware sich um den MOVLW-Befehl an der
letzten
FLASH-Adresse kümmert, kann man so tun, als ob der PIC einfach bei
0x00 zu arbeiten beginnt, und den Kalibrierwert in w
trägt.
Falls ein PIC aber absolut nicht funktionieren will, kann es sein,
dass durch einenn Brennerfehler auf der letzten FLASH-Adresse etwas
falsches
steht, und der PIC dadurch nicht richtig arbeiten kann.
Variablen/Symbole
Zum Festlegen von Symbolen benutze ich in diesem Beispiel die
Anweisungen
'cblock - endc'.
Das Definieren vieler Speicherzellen (als Variablen) mit EQU-Befelen
ist umständlich. In diesem Programm benötige ich die
Zählvariablen
loops und loops2, die jeweils ein Byte im RAM benötigen. Mit
EQU-Befehlen
könnte man sie wie folgt definieren:
; Variablen festlegen
loops equ
0x10
; timer für wait |
Es geht aber auch einfacher mit den Befehlen cblock und endc:
; Variablen festlegen ab 10h
cblock 0x10 |
Mit cblock beginnt die Definition von Symbolen (Variablen),
die
hinter cblock angegebene Adresse ist die Adresse für die
erste
Variable. Danach werden die Bezeichner aller benötigter Variable
zeilenweise
aufgelistet. Der Assembler reserviert für alle diese Variablen
jeweils
ein Byte Speicherplatz.
Man kann auch mehrere Variablen auf einer Zeile definieren, dann sind
die einzelnen Namen durch ein Komma zu trennen.
Benötigt eine Variable mehr als ein Byte, dann hat dem
Variablennamen
unmittelbar ein Doppelpunkt und die Bytezahl zu folgen (z.B. loops:2).
Der Befehl endc beendet die Variablendefinition.
Bei nur 2 Variablen lohnt sich cblock eigentlich noch nicht, aber wenn man 20 Variablen festlegen muss, wird der Vorteil deutlich.
Programmablauf
Programmlisting
list p=10f202 ;*********************************************************************** ;* Pinbelegung ;* ---------------------------------- ;* GP: 0 > LED mit 1 kOhm Vorwiderstand ;* 1 - ;* 2 - ;* 3 - ;* ;*********************************************************************** ; ;sprut (zero) Bredendiek 05/2005 ; ; Blinklicht mit PIC10F202 am Pin GP0 ; ; Prozessor 10F202 (oder 10F200) ; ; Prozessor-Takt 4 MHz intern ; ; ;*********************************************************************** ; Includedatei für den 10F202 einbinden #include <p10f202.inc> ; Configuration festlegen:
__CONFIG _CP_OFF & _WDT_OFF & _MCLRE_OFF ;***********************************************************************
cblock 0x10 #define LED GPIO,0 ;*******************************************************
org 0x0000 movwf OSCCAL ; Oszillator kalibrieren
movlw b'00001110' ; GP0 output
; bcf CMCON0,CMPON ; Comparator off nur bei 10F204/206 ;*******************************************************
;*******************************************************
; die top-Schleife verzögert 1
ms = 250
x 4µs
end |