PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : 16f876 Ein und Ausgänge



grischan
04.04.2006, 14:01
Hallo vielleicht kann einer helfen

ich habe keine ahnung woran es liegen kann, noch sprut und ein paar tage Forum lesen haben mir nicht geholfen. 8-[

Ich habe ein pic 16f876 den ich mit einem velleman bord programmiere funktioniert auch alles, solange ich mich auf eine reine ausgabe beschränke.

nun wollte ich aber auf partA, B oder C ablesen ob diese high oder low sind, und dann dieses Bitmuster auf einem anderen Port wieder ausgeben.

hier der verwendete code


INPUT EQU H'23'


ORG 0
GOTO RESET



; **************************
; * main routine: *
; **************************

RESET

BSF STATUS,RP0
MOVLW B'11111111'
MOVWF TRISC
MOVLW B'00000000'
MOVWF TRISB
BCF STATUS,RP0

CLRF PORTB


RUECK MOVLW PORTC
MOVWF INPUT
MOVLW INPUT
MOVWF PORTB
GOTO RUECK

END


danke für eure hilfe, dürfte woll nicht so schwer sein

grischan

kalledom
04.04.2006, 15:48
Hallo grischan,
meine erste (Gegen-) Frage zielt auf Deine Hardware: haben die Eingangs-Pins einen PullUp-Widerstand ?

Dann zum Code:


RUECK
MOVLW PORTC ; Literal = Adresse von Port C nach W laden
MOVWF INPUT ; Port C Adresse in Variable INPUT speichern
MOVLW INPUT ; Literal = Adresse von Variable INPUT nach W laden
MOVWF PORTB ; INPUT Adresse an Port B ausgeben
GOTO RUECK

; Wie wäre es so:
RUECK
MOVFW PORTC ; Inhalt von Port C nach W laden
MOVWF INPUT ; Port C Zustand in Variable INPUT speichern
;MOVFW INPUT ; Inhalt von Variable INPUT nach W laden (warum ?)
MOVWF PORTB ; W / INPUT Inhalt an Port B ausgeben
GOTO RUECK

END


PS: Warum ist das Code-Feld so lang ?

grischan
04.04.2006, 16:30
an portc werden die eingänge einfach über schalter auf die vdd spannung gezogen. der eingang wird auch über leds kontrolliert.

danke für die schnelle antwort

kalledom
04.04.2006, 16:44
Digital-Eingänge brauchen einen definierten Pegel. Über einen Schaltkontakt bekommen sie nur einen Pegel bei geschlossenem Kontakt, jedoch keinen bei offenen Kontakt. Deshalb muß der Pegel für einen offenen Kontakt über einen Widerstand dem Eingang zugeführt werden (PullUp oder PullDown).

Hast Du die Software-Fehler erkannt ? Funktioniert jetzt Dein Programm ?

*Mario*
19.04.2006, 22:09
Hallo,

zusätzlich zu dem vorangegangenen noch eine kleine Bemerkung. Mircochip empfiehlt als ersten Befehl ein "nop" auszuführen. Bei MPLAB ist dazu auch eine vorlage dabei.
Also: ORG 0
nop
goto RESET
....

Gruß
Mario