PIC 16F627 Port einlesen und in int schieben

Gast #4571503
Lesenswert?
• ▲
▼
Hallo zusammen,

ich stehe vor einem kleinen Problem:

Ich möchte den Pegel an RB0 auslesen und in ein schieberegister 
schreiben bzw in bytes schieben.

Als test benutze ich grade die UART/RS232 um mir die einzelnen Pegel am 
PC auszugeben. Das funktioniert soweit mit dem folgenden code:
1
 int i;
2
    __delay_us(296);
3
    
4
    for(i=0; i<30; i++)
5
    {
6
        
7
        gelesen = RB0;
8
        printf("%i", gelesen); 
9
        __delay_us(600) ;
Das ergebnis eines leseprozesses sieht dann z.B. so aus:

0001111110011000 (11011110) 111000

Letztendlich interessieren mich nur die bit 17-24, die ich mal 
eingeklammert habe.
Ich hocke jetzt schon ein paar stunden dran und komme einfach nicht 
drauf. Wie bekomme ich diese 8 einzelen bits im richtigen moment in eine 
char oder int geschoben für weitere verarbeitung??

Ich würde mich sehr über eure hilfe freuen!

Gruß
Benjamin
Gast #4571525
Lesenswert?
• ▲
▼
Hallo,

das ist quasi der ganze quelltext, bzw. das was in der ISR 
steht(ausgelöst durch rb0/INTF.
Was noch fehlt ist
1
unsigned int gelesen= 0x00;

Der compiler ist der Microchip - XC8.

Gruß
Benjamin
Gast #4571540
Lesenswert?
• ▲
▼
Also keine Konifuration des UART?
gelesen ist was (8Bit)?
Wieviele Bits möchtest du denn Übertragen (die 8 Bit des RB0, oder 30 
Bit)?
Wie oft wilst du es Ausgeben?
TIP: füge noch eine CR/LF nach der Ausgabe zu, das macht es einfacher.
Das Senderegister sollte auch ein Flush haben.
#4571605
Lesenswert?
• ▲
▼
Da kann mann auch nur mit dem Kopf schütteln!

Wenn man das Eingangspost sich mal aufmerksam durchliest, steht da schon 
drin, daß....

kopfschüttel schrieb:
> Also keine Konifuration des UART?
... der UART des PCs quasi als Signalgenerator für ein Testpattern 
verwendet wird.
> gelesen ist was (8Bit)?
... gelesen ist der Pegel an RB0, also logisch nur ein Bit.
> Wieviele Bits möchtest du denn Übertragen (die 8 Bit des RB0, oder 30
> Bit)?
... ihn nur die eingeklammerten Bits 17..24 (also 8 Bit mittendrin) 
interessieren
> Wie oft wilst du es Ausgeben?
... er nichts ausgeben will, sondern einlesen.
> TIP: füge noch eine CR/LF nach der Ausgabe zu, das macht es einfacher.
... das sicher auch nichts hilft
> Das Senderegister sollte auch ein Flush haben.
... und wie gesagt nichts gesendet wird.
#4571666
Lesenswert?
• ▲
▼
Benjamin schrieb:
> Letztendlich interessieren mich nur die bit 17-24, die ich mal
> eingeklammert habe.
> Ich hocke jetzt schon ein paar stunden dran und komme einfach nicht
> drauf. Wie bekomme ich diese 8 einzelen bits im richtigen moment in eine
> char oder int geschoben für weitere verarbeitung??

Wenn dich nur die bits 17 bis 24 interessieren, warum dann die Anderen 
überhaupt abtasten?
1
char i, bits17_24;
2

3
delay(bis_in_die_Mitte_17ten_bits)
4
for(i=0; i<8; i++){
5
   bits17_24 << 1;
6
   bits17_24 |= RB0;
7
   delay(1_bit);
8
}
9
delay(bis_zum_ende);

Das mit den Delays ist natürlich nicht so optimal, wenn das Programm 
irgendwann auch noch was anderes tun soll. Besser wäre ein 
Timer-Interrupt, der mit den entsprechenden Zeiten konfiguriert wird.
Gast #4572437
Lesenswert?
• ▲
▼
Thomas E. schrieb:
> Da kann mann auch nur mit dem Kopf schütteln!
>
> Wenn man das Eingangspost sich mal aufmerksam durchliest, steht da schon
> drin, daß....
>
> kopfschüttel schrieb:
>> Also keine Konifuration des UART?
> ... der UART des PCs quasi als Signalgenerator für ein Testpattern
> verwendet wird.
>> gelesen ist was (8Bit)?
> ... gelesen ist der Pegel an RB0, also logisch nur ein Bit.
>> Wieviele Bits möchtest du denn Übertragen (die 8 Bit des RB0, oder 30
>> Bit)?
> ... ihn nur die eingeklammerten Bits 17..24 (also 8 Bit mittendrin)
> interessieren
>> Wie oft wilst du es Ausgeben?
> ... er nichts ausgeben will, sondern einlesen.
>> TIP: füge noch eine CR/LF nach der Ausgabe zu, das macht es einfacher.
> ... das sicher auch nichts hilft
>> Das Senderegister sollte auch ein Flush haben.
> ... und wie gesagt nichts gesendet wird.

1. Du hast in einem Punkt Recht, ich habe Überlesen das er die Bytes am 
PC
Ausgibt.

2. Dadurch meine Verwunderung sowie die folgenden Antworten und 
Ratschläge .....

Asche auf mein Haupt, weiter gehts....

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren