Forum: Mikrocontroller und Digitale Elektronik programm zu decodieren von rs232,bitte angucken


von Torsten A. (xman)


Lesenswert?

folgendes programm habe ich zusammengebastelt, um einen rs232 befehl zu 
decodieren.
baudrate 1200, 8datenbits und 1 stoppbit werden gesendet.irgendwie 
passiert da nichts??
ein bit ist 833µs lang. habe den timer so eingestellt, dass fast nach 
der hälfte der
bitlänge also 416µs ein overflow erzeugt wird.in der timer isr überprüfe 
ich nun
ob zu diesen zeitpunkten ein low oder highpegel anliegt,speichere dieses 
bit ab bis ich 8 bits
zusammenhabe.das externe interrupt benutze ich nur dazu, um das startbit 
zu erkennen
(fallende flanke) danach schalte ich die interruptfunktion aus, wenn die 
8 bits zusammen sind
dann wieder ein.

seht ihr im code bzw im gedankengang einen fehler??






Config Pinb.2 = Input
Config Timer0 = Timer , Prescale = 64
On Timer0 Tim0_isr
Config Int0 = Falling
On Int0 Getcode



Startwert = 204
Timer0 = Startwert

Enable Int0
Enable Timer0
Enable Interrupts

Bit_nummer = 0



Do

Lcd Zeichen
Wait 1
Cls

Loop




Enable Int0
End


Tim0_isr:

If Pinb.2 = 0 Then Daten = 0 Else Daten = 1
Bit_nummer = 0
Select Case Daten
Case 0:
Shift Temp_daten , Left
Incr bit_nummer
Case 1:
Shift Temp_daten , Left
Incr Temp_daten
Incr Bit_nummer
End Select

If Bit_nummer = 8 Then
Zeichen = Temp_daten
End If
Return


Getcode:
Start Timer0
Disable Int0
Return

von Karl H. (kbuchegg)


Lesenswert?

<Einschub>
Von der Codesammlung hierher verschoben und nach oben gebracht
</Einschub>

von Joerg X. (Gast)


Lesenswert?

@OP: gibt's Gründe warum du..
- den µC nicht angibst? (BASIC ?! gibt's für mehrere Typen...)
- du nicht die im Kompiler eingebauten Funktionen nimmst ? (IIRC. hat 
BASCOM Soft-UART-Routinen eingebaut, die Frage wäre nicht nötig wenn du 
den Compiler angegeben hättest)
- du keine UART-Hardware nimmst? (würde sich erübrigen, wenn du den µC 
angegeben hättest)

sry für die vielen Fragen, ich tu's nicht wieder ...
Jörg

von xman (Gast)


Lesenswert?

jungs ich weiss doch, dass es fertige befehle gibt, ich würd mir doch 
nicht die ganze mühe machen. ich benutze den atmega32,und den 8mhz 
quarz.
ich weiss nicht, ob man in der timer isr soviele befehle hintereinander 
ausführen lassen kann.

von Hannes L. (hannes)


Lesenswert?

xman wrote:
> jungs ich weiss doch, dass es fertige befehle gibt, ich würd mir doch
> nicht die ganze mühe machen. ich benutze den atmega32,und den 8mhz
> quarz.
> ich weiss nicht, ob man in der timer isr soviele befehle hintereinander
> ausführen lassen kann.

Dann nimm doch Befehle, von denen Du genau weißt, wie lange sie dauern 
und rechne mit, was Du der ISR für Arbeit aufbrummst. Im Datenblatt des 
jeweiligen AVRs steht jeweils eine Liste mit allen Befehlen, die der 
jeweilige AVR versteht, und deren Ausführungsdauer in Takten.

...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.