hi leute,
ich versuch gerade ein protokoll zwischen meinem pc und einem kleinen gerät rauszufinden.
Das Gerät ist am lpt-port angeschlossen.
Eigentlich ist es ganz leicht, weil der computer an das gerät nichts sendet, sondern nur das gerät an den computer und zwar nur mit einer datenleitung bzw. nur an einem pin des lpt.
zwischen meinem pc und dem gerät hängt mein pic, der alles aufzeichen soll, aber irgendwie stimmt da was nicht.
die software zu dem gerät aufm pc liesst die daten die vom dem gerät gesendet wurden und überprüft ob diese richtig gesendet wurden.
jetzt hängt mein pic dazwischen und alles was von dem gerät reinkommt am RC5 gibt er am RD5 wieder zum pc aus. es wird alles richtig übertragen.
jetzt sollte der pic die daten, die in der ram gespeichert wurden nochmal an den pc übertragen, aber jetzt sind die daten die am pc ankommen nicht mehr vollständig bzw. total falsch.
woran kann das liegen. der code ist eigentlich ziemlich einfach aufgebaut
der pic soll nichts anderes machen als die zustände vom gerät annehmen und dann speichern und dann einfach zum pc weiterleiten.
also das annehmen der zustände und weiterleiten funktioniert sicher, weil die daten am pc richtig ankommen.
aber ob der pic diese zustände in der ram richtig ablegt, dass weiss ich nicht.
dann soll der pic die gespeicherten zustände aus der ram an den pc senden.
also ich weiss jetzt nicht ob der pic die zustände nicht speichert oder ob die zustände richtig gespeichert werden aber falsch gesendet werden.
Code:
.
.
.
movlw D'48'
movwf cablep6
movwf cablenp6
movlw D'1'
movwf count
movwf multicount
lfsr FSR0,0x70
main
btfss PORTC,5 ; TESTE LEITUNG OB AUS
movlw D'48'
btfsc PORTC,5 ; TESTE LEITUNG OB AUS
movlw D'49'
movwf cablenp6 ; SPEICHERE ZUSTAND
xorwf cablep6,0 ; ÜBERPRÜFE ZUSTAND MIT ALTEM ZUSTAND
btfss STATUS,Z
call savepc6
btfsc PORTB,2 ; WENN GEDRÜCKT DANN DIE DATEN VOM RAM AN PC SENDEN
call sendpcstart
goto main
;######################################################
;######################################################
;######################################################
;######################################################
;savecablepc6 ZUSTÄNDE VOM GERÄT IN RAM SPEICHERN UND ZUM PC WEITERLEITEN
savepc6
movf cablenp6,0 ; ZUSTAND IN CPU
movwf cablep6
movwf POSTINC0 ; ZUSTAND IM RAM SPEICHERN
btfss cablep6,0
bcf PORTD,5 ; LEITUNG ZUM PC AUF LOW SETZEN
btfsc cablep6,0
bsf PORTD,5 ; LEITUNG ZUM PC AUF HIGH SETZEN
bcf STATUS,Z
incf count,1 ; ZUSTÄNDE ZÄHLEN
btfsc STATUS,Z ; FALLS ÜBERLAUF
incf multicount,1 ; ERHÖHEN
return
;######################################################
;######################################################
;######################################################
;######################################################
sendpcstart ; GESPEICHERTE ZUSTÄNDE VOM RAM ZUM PC LEITEN
movf count,0
movwf oldcount
movf multicount,0
movwf oldmulti
lfsr FSR0,0x70
sendpcc
btfss INDF0,0
bcf PORTD,5
btfsc POSTINC0,0
bsf PORTD,5
movlw .60
movwf loops
warte
nop
nop
nop
nop
nop
nop
nop
nop
decfsz loops,1
goto warte
decfsz count,1
goto sendpcc
decfsz multicount,1
goto setcount
movf oldcount,0
movwf count
movf oldmulti,0
movwf multicount
return
setcount
movlw D'255'
movwf count
goto sendpcc
wäre sehr dankbar für hilfreiche antworten
mfg
pitt
Lesezeichen