PIC 16F627 Port einlesen und in int schieben

Gast #4571503
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
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
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
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
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
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

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.