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
inti;
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
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.
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.
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
chari,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.
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....
Peter D. schrieb:> main.c:17: error: 'RRF' undeclared (first use in this function)
Na du bist mir aber ein Witzbold.
Bedenke mal, daß es sich hier um eine PIC16F627 handelt...
W.S.
Peter D. schrieb:> Du aber auch, auf eine C-Frage mit Assembler zu kommen.> "RRF PortB,W" ist keine gültige C-Syntax.
Ja, das sähe dann ungefähr so aus -> asm("RRF PortB,W");