Hallo. Ich hoffe den Thread gibts nicht schon irgendwo anders schon. Hab auf jeden Fall gesucht =) Also mein Problem sollte nicht zu schwierig sein. Ich Möchte einen Zahlenwert mittels RS232 von meinem µC (Atmega8535) an einen empfänger schicken. Hab mich schon ein bißchen durch das Datasheet durchgehangelt, bin aber nicht ganz schlüssig. Ich weiß, das ich das irgendwie mit UART machen muß, aber wie das genau aussehen soll (zB in C) kann ich mir nicht vorstellen. Speziel die Bautrate macht mir zu schaffen. Kennt ihr ein paar gute Tutorials dazu? MfG
Wow. Das ist mal ein richtig gutes Tutorial. Ich weiß ich greife mit dem Thema Schnittstelle in Bezug zu meinem µC Wissen schon weit vor, aber ich möchte gerne die Realisierbarkeit einer Idee testen. Unter "Senden einzelner Zeichen" in dem Tutorial hab ich noch ne Frage. UDR = 'x'; /* schreibt das Zeichen x auf die Schnittstelle */ Dabei kann 'x' nur ein Integer Wert sein, oder? Vielen Dank schon mal im Vorraus.
Hab das Tutorial gerade nicht ganz im Kopf (und bin zu faul zum nachlesen :-)) aber eigentlich müßtest du über die Schnittstelle nur 8Bit Werte übertragen können. Was du dann danach damit machst bzw. was du damit codiert hast, bleibt dir überlassen.
Ja, nur Byte-Werte kannste übertragen, ist aber kein Problem, zerlegste den Integer Wert in Bytes, schickste zum Empfänger, der sie wieder zusammensetzt
hier ein program für atmega8515,müsste gehen: Im Hyper terminal wird "TEST" angezeigt, für andere sachen zu übertragen genau so .include "m8515def.inc" .def temp = R16 .equ CLOCK = 8000000 .equ BAUD = 9600 .equ UBRRVAL = CLOCK/(BAUD*16)-1 .cseg .org 0x000 rjmp main .org 0x009 ; Interruptvektor for UART-Receive rjmp int_rxc main: ldi r16, LOW(RAMEND) ;Stack Pointer to top of RAM out SPL, r16 ldi r16, HIGH(RAMEND) out SPH, r16 ; Baudrate setup ldi temp, LOW(UBRRVAL) out UBRRL, temp ldi temp, HIGH(UBRRVAL) out UBRRH, temp ; Frame-Format: 8 Bit ldi temp, (1 << URSEL) | (1 << UCSZ1) | (1 << UCSZ0) out UCSRC, temp sbi UCSRB, RXCIE ; Interrupt by Receive sbi UCSRB, RXEN ; RX (Receive) activate sbi UCSRB,TXEN ; TX (Transmit) activate sei ; Interrupts global activate ldi r20,0x00 program: clr r21 ; gleich nachdem Einshalten "ATMEL UHF Demo Rader" anzeigen ldi ZL,LOW(2*lable) ldi Zh,HIGH(2*lable) ldi r17,0x04 ldi temp, 10 rcall serout ok: lpm r16,z adiw ZL,1 rcall serout dec r17 cpse r17,r20 rjmp ok ldi temp, 10 rcall serout ldi temp, 13 rcall serout serout: sbis UCSRA,UDRE ;Warten bis UDR für das nächste Byte bereit ist rjmp serout out UDR, temp ret ; Interruptroutine: wird ausgeführt sobald ein Byte über das UART empfangen wurde int_rxc: in r21, UDR ;rcall loop reti ;Interrupt beenden lable: .db"TEST",0
Ich weiß, schön langsam werd ich frech, aber hast das auch in ner Hochsprach wie c oder c++? =) Sry. Kenn mich mit Assembler leider noch nicht so gut aus. In C hab ich wenigstens schon mal ein paar einfach Programme für meinen µC geschrieben. Aber danke für die schnelle Antwort
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.