Forum: Mikrocontroller und Digitale Elektronik Probleme beim PIC Programmieren


von Alexander E. (alex1203)


Lesenswert?

Hallo

Ich habe gerade begonnen mich mit PIC Programmierung zu befassen. Bei 
der Firma microchip kann man als Technikstudent gratis samples 
anfordern, wodurch ich nun meinen ersten PIC (16F88) erhalten habe. 
Dummerweise schaffe ich es nicht ein Port, das ich als Eingang definiert 
habe, auszulesen und am zweiten Port, das ich als Ausgang definiert 
habe, auszugeben.
Dafür habe ich folgendes Testprogramm geschrieben:


ZAEHLER1  equ  020h
ZAEHLER2  equ  021h
a  equ  D'60'

         movlw   B'0'
         tris    PORTB

start    movf    PORTA,0
        movwf    PORTB



        movlw    a
        movwf    ZAEHLER1
        movwf    ZAEHLER2
repeat decfsz    ZAEHLER2,1
         goto    repeat
        movlw    a
        movwf    ZAEHLER2
       decfsz    ZAEHLER1,1
         goto    repeat
         goto    start

end

mit diesem Programm will ich also bewirken, dass ein Bitmuster (das ich 
an PORTA lege) am PORTB wieder ausgegeben wird. Die Schleife dient nur 
als Zeitverzögerung. Lege ich nun aber einen als Eingang definierten Pin 
auf Vss (oder Vdd) so tut sich am PORTB nichts.

Kann mir wer verraten was ich dabei falsch mache??

mfg alex

von J. Franke (Gast)


Lesenswert?

Hallo,

grundsätzlich sehe ich im Quelltext keine Bankumschaltung und kein 
Configword. Ich würde erst mal die Grundlagen auf www.sprut.de empfehlen

Bankumschaltung ist notwendig weil das Trisx und das Portx Register in 
verschiedenen Bänken liegen.
Configword ist in fast allen Fällen ebenfalls notwendig zur Einstellung 
des Oszillators etc..

von Alexander Eder (Gast)


Lesenswert?

Hallo

Danke für die Antwort!
Ich habe schon auf sprut.de nachgesehen und einiges dazu gefunden. Durch 
den Befehl tris PORTX braucht man die Bänke nicht wechseln um die Ports 
als Ausgänge zu definieren (zumindest laut meinem Simulationsprogramm). 
Und nachdem sie ja standardmäßig als Eingänge definiert sind, habe ich 
mir gedacht ich braue mein Bitmuster nur an das entsprechende Port 
anlegen und kann dann schon darauf zugreifen!!

mfg alex

von Bernd R. (Firma: Promaxx.net) (bigwumpus)


Lesenswert?

Lese das Datenblatt des 16F88 und sieh Dir genau die Port-Pins an, ob 
sie nicht noch andere Funktionen haben.

Gerne ist der Comperator auf solche Pins gelegt und muß nach einem Reset 
abgeschaltet werden.

Auch muß man Pins, die sowohl analog als auch digital sein können, im 
ADC-Modul als digital definieren, weil sie sonst nicht ausgelesen werden 
können.

Viel Spaß beim intensiven Durchkauen des Datenblatts.

von Alexander E. (alex1203)


Lesenswert?

Tja, im Datenblatt ist wirklich alles zu finden! An das habe ich bisher 
noch nicht gedacht. Danke für den Hinweis.
...es haut auch schon hin.
Es hat eben genau an der ADC – Einstellung (im ADCON1 Register) gelegen.

mfg alex

von spanner (Gast)


Lesenswert?

ANSEL ist ein Register, in dem du (analog select) Bits setzen kannst.

Du musst das ANSEL-Register mit 0 beschreiben, wenn du digitale I/O Pins 
brauchst. Dann musst du die Tristate-Register beschreiben, welche die 
zugehörigen Portpins zwischen I oder O unterscheiden.


Das Config-word ist entweder in der Software zu beschreiben oder in der 
Entwicklungsumgebung möglich(z.B. MPLAB)

von Sigint 112 (sigint)


Lesenswert?


Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.