1 | list p=16f887 ; der Prozessortyp wird festgelegt
|
2 | include "p16f887.inc" ; die include-Datei mit vielen Festlegungen wird geladen
|
3 | ; z.B. sind hier Standardnamen für wichtige
|
4 | ; Register und Bits festgelegt
|
5 |
|
6 | __CONFIG _CONFIG1, _LVP_OFF & _FCMEN_ON & _IESO_OFF & _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_ON & _PWRTE_ON & _WDT_OFF & _HS_OSC
|
7 | __CONFIG _CONFIG2, _WRT_OFF & _BOR21V
|
8 |
|
9 | W_TEMP Equ 0x20 ; Backup für Arbeitsregister
|
10 | STATUS_TEMP Equ 0x21 ; Backup für Statusregister
|
11 | PCLATH_TEMP Equ 0x22 ; Backup für PC
|
12 |
|
13 | org 0x00 ; die Startadresse nach Reset ist 0, hier startet der PIC
|
14 | goto main ; Sprung zum Hauptprogramm
|
15 |
|
16 |
|
17 | org 0x0004
|
18 | ; ___
|
19 | MOVWF W_TEMP ; |
|
20 | SWAPF STATUS,W ; |
|
21 | CLRF STATUS ; |
|
22 | MOVWF STATUS_TEMP ; +- Sichern der Umgebung des Hauptprogramms
|
23 | MOVF PCLATH, W ; |
|
24 | MOVWF PCLATH_TEMP ; |
|
25 | CLRF PCLATH ; ___|
|
26 |
|
27 | movlw 1 ; PORTD soll um 1 inkrementiert werden (1 ins working Register)
|
28 | addwf PORTD, 1 ; PORTD wird inkrementiert
|
29 |
|
30 |
|
31 | bcf PIR1, TMR1IF ; "Timer1 hat interrupt ausgelöst" zurücksetzen
|
32 | ; ___
|
33 | MOVF PCLATH_TEMP, W ; |
|
34 | MOVWF PCLATH ; |
|
35 | SWAPF STATUS_TEMP,W ; +- Umgebung des Hauptprogramms wiederherstellen
|
36 | MOVWF STATUS ; |
|
37 | SWAPF W_TEMP,F ; |
|
38 | SWAPF W_TEMP,W ; ___|
|
39 |
|
40 | retfie ; zurück ins Programm
|
41 |
|
42 |
|
43 | main
|
44 | bsf STATUS, RP0 ; In Bank 1 wechseln
|
45 | movlw B'00000000' ; 0 in Working Register schreiben
|
46 | movwf TRISD ; Working register (also 0) in TRISD schreiben -> Ausgang
|
47 | movlw B'00000000' ; 0 in Working Register schreiben
|
48 | movwf TRISB ; Working register (also 0) in TRISD schreiben -> Ausgang
|
49 | bcf STATUS, RP0 ; Wieder in Bank 0 wechseln
|
50 |
|
51 | bcf T1CON, TMR1CS ; Timer 1: Quarz als Quelle
|
52 |
|
53 | bcf T1CON, T1CKPS0 ; Prescaler auf 1
|
54 | bcf T1CON, T1CKPS1 ; Prescaler auf 1
|
55 |
|
56 | bsf INTCON, PEIE ; Interrupt für Pheripherie erlauben
|
57 | bsf STATUS, RP0 ; In Bank 1 wechseln
|
58 | bsf PIE1, TMR1IE ; Interrupt für Timer 1 (Pheripherie) aktivieren
|
59 | bcf STATUS, RP0 ; Wieder in Bank 0 wechseln
|
60 | bsf INTCON, GIE ; Globales enable Interrupt setzen
|
61 |
|
62 | loop
|
63 | movf TMR1L, 0
|
64 | movwf PORTB
|
65 | goto loop
|
66 |
|
67 | end ; das Ende des Programms
|