d.caine schrieb:
> Haben mit Mühe das Programm in mp lab gemacht das ich als .txt Datei
> angehängt habe.
Ja, sieht noch ein bissel sehr anfängerig aus.
Mach dir beim Assemblerprogrammieren mit den PIC16Fxxx am besten eine
Art Vorlage, die du dann immer benutzt, etwa so:
(an den verwendeten Assembler notfalls anpassen)
INCLUDE P16F877.PIC
SEG CODE
; Fuse-Konfiguration
ORG 2007h
; DCBA9876543210
DATA 11111101000110b
; - 00=LP 01=XT 10=HS 11=RC
; --- 1=WDT enable
; ---- 0=PWTE enable
; ----- 00=prot.all
; 01=upper3/4prot
; 10=upper1/2prot
; 11=unprotected
(die Fuses hab ich grad nicht auswendig gelernt)
; ID-Konfiguration
ORG 2000h
DATA 1 ; na eben was du hier willst
DATA 2
DATA 3
DATA 4
; EEPROM-Vorgaben
ORG 2100h
MyByte: DATA irgendwas
MyStr: DATA 'hallihallo',0
; Code-Beginn
ORG 0
CLRF Status ; alle Flags (ohne Z) löschen
CLRF PCLATH
GOTO Start
ORG 4
; Interrupt-Routine
; =================
Interrupt:
MOVWF RetteW ; W retten
SWAPF Status,W ; Flags in W holen
.. hier kommt alles rein, was
die Interrupts behandelt
; Interrupt-Ende: Flags & W restaurieren
I.End: SWAPF RetteFlags,W ; gerettete Flags in W
MOVWF Status ; Flags restaurieren
SWAPF RetteW,F ; W restaurieren
SWAPF RetteW,W
RETFIE
Start:
hier schreib, was du halt brauchst
immerzu:
hier schreib, was der PIC immerzu tun soll
GOTO immerzu
END
Und nochwas: Rücke ein und benutze Ausdrücke. Also nicht so
MARKE2
DECFSZ 0x20,1 ;Wert 1 von Wert in 0x20 abziehen
sondern (ebenfalls wieder assemblerspezifisch)
SEG RAM
ORG 20h
MyCounter: DS 1
MyLongInt: DS 4
und dann im Code
Marke2: DECFSZ MyCounter,F
Wenn dein Assembler keine Segmente (SEG xxx) und Reservierung von
Speicherplatz (DS nn) versteht, dann mußt du leider mit
MyCounter: EQU 20h
MyLongInt: EQU 21h
zurechtkommen oder noch schlimmer
#define MyCounter 0x20
schreiben. Wenn dein Assembler nicht ,W und ,F versteht, dann
deklarierst du das dir lieber selber, denn damit wird der Code lesbarer
und für dich auch übersichtlicher.
Nochwas zur Hardware:
Gerade die 16Fxxx PIC's sind eigentlich sehr gutmütige Gesellen. Aber
man sollte an beide VCC-Beine je einen Stütz-Kondensator (z.B. 100 nF)
schalten und MCLR mit ca. 10 kOhm auf VCC ziehen und zugleich mit ca.
2.2 nF gegen GND abblocken. Ansonsten braucht der PIC natürlich einen
Takt, den man entweder per Quarz oder per Keramikschwinger macht. Zum
Programmieren ist es gut, RB3 dezent auf GND zu ziehen (10..22 kOhm),
damit er nicht aus Versehen in den LoVolt-Programmiermodus gerät. RB6
und RB7 kann man benutzen, wenn man sie als Ausgänge verwendet,
ansonsten sind Entkoppel-Widerstände nötig. PIC's haben starke Portpins,
also sollte man vermeiden, damit kapazitive Lasten (z.B. MOSFETS) damit
direkt zu treiben. Bei sowas ist ein Entkoppel-R nötig.
W.S.