Hiho!
da das bei mir irgendwie nciht hinhaut mit dem senden eines Zeichens
über die serielle Schnittstelle, wollte ich mal fragen ob es nicht
vielleicht schon eine Lib in C gibt die ein Software UART bereitstellt.
Falls nicht vielleicht weiß ja jmd. warum bei mir folgender simpler Code
fehlschlägt: (Hyperterminal empfängt 'Ç' (ASCII 128), statt 'U' (ASCII
85).
//Include
#include <IO.H>
#include <IOM8.H>
//Funktionsprototypen
void delay417cycles(void);
int main(void)
{
outp(0x66,DDRD); // config Port D
while (1)
{
//Sende ein 'U'
sbi(PORTD, PIND5); //Start
delay833cycles();
cbi(PORTD, PIND5); //Bit1
delay833cycles();
sbi(PORTD, PIND5); //Bit2
delay833cycles();
cbi(PORTD, PIND5); //Bit3
delay833cycles();
sbi(PORTD, PIND5); //Bit4
delay833cycles();
cbi(PORTD, PIND5); //Bit5
delay833cycles();
sbi(PORTD, PIND5); //Bit6
delay833cycles();
cbi(PORTD, PIND5); //Bit7
delay833cycles();
sbi(PORTD, PIND5); //Bit8
delay833cycles();
cbi(PORTD, PIND5); //Stopp
delay833cycles();
}
}
void delay833cycles(void)
{
asm volatile
(
//-----------------------------
// delaying 828 cycles:
" ldi R17, 0x02" "\n\t"
"WGLOOP6: ldi R18, 0x89" "\n\t"
"WGLOOP7: dec R18 " "\n\t"
" brne WGLOOP7 " "\n\t"
" dec R17 " "\n\t"
" brne WGLOOP6 " "\n\t"
//-----------------------------
//delaying 3 cycles:
" ldi R17, 0x01" "\n\t"
"WGLOOP8: dec R17 " "\n\t"
" brne WGLOOP8 " "\n\t"
//-----------------------------
//delaying 2 cycles:
" nop " "\n\t"
" nop " "\n\t"
//=============================
:
:
);
}
Also eine Software-UART in C zu schreiben, geht nur, wenn man einen Timerinterrupt benutzt. Wenn man das Timing aber mit Delay-Loops machen will, geht das nur in Assembler, denn nur dann kann man die Instruktionen auszählen, um präzise Delays zu erzeugen. Peter
Hmm alles klar, aber gibts denn schon ein Software UART, welches man verwenden kann?
Also debuggt kriege ich meinen Code immer noch nicht. Es geht wohl wirklich nur über Timer, auch wenn mein Code schon sehr genau ausgemessen ist mit dem AVR-Studio. Ich werds nun wohl oder übel mal mit Timern probieren müssen. Ich habe nun schon mehrere Software UARTs die in Assembler geschrieben wurden gefunden, aber noch keinen in C. Hat das überhaupt schonmal jemand gemacht und kann hier mal seinen Code zur Verfügung stellen?
Hallo Benno Ist das vieleicht was für dich ? http://www.avrfreaks.net/phorum/read.php?f=2&i=4388&t=4388#4388
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.