Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
ich habe an Euch eine große Bitte: Kann jemand das folgende Programm (nur kurz!) testen?
Es müsste (besser: sollte!:) ) nach dem Laden blinken, dann 10 Zeilen mit a ... z zum PC senden.
Die Prog.-Frakmente stammen noch von der "Urversion".
Code:
/* test.c
Test zum Senden - asuro.h + -.c verkleinert und SerWrite(j) angepasst!
Programm soll 10 Zeilen mit a ... z senden.
SerWrite() enthaelt nur "wenn Speicher leer, dann senden"! */
#include "asuro.h"
int main(void)
{
unsigned char i, j;
Init();
for(i=0;i<200;i++)
{
for(j=0;j<20;j++) Sleep(0xFF);
StatusLED(RED);
for(j=0;j<20;j++) Sleep(0xFF);
StatusLED(GREEN);
}
UCSRB |= 0x08; // Sender ein
UCSRA |= 0x40; // 'clear' transmitter flag
for(i=1;i<11;i++)
{
for(j='a';j<='z';j++)
{
SerWrite(j);
}
SerWrite('\n');
SerWrite('\r');
}
while (!(UCSRA & 0x40))
; // warten bis Uebertragung fertig
UCSRB &= ~0x08; // Sender aus
StatusLED(YELLOW);
while(1)
;
return 0;
}
---------------
/* asuro.c */
#include "asuro.h"
volatile unsigned char count72kHz;
SIGNAL (SIG_OUTPUT_COMPARE2)
{
count72kHz ++;
}
void Init (void)
{
TCCR2 = (1 << WGM21) | (1 << COM20) | (1 << CS20);
OCR2 = 0x6E;
TIMSK |= (1 << OCIE2);
UCSRA = 0x00;
UCSRB = 0x00;
UCSRC = 0x86;
UBRRL = 0xCF;
DDRB = IRTX | LEFT_DIR | PWM | GREEN_LED;
DDRD = RIGHT_DIR | FRONT_LED | ODOMETRIE_LED | RED_LED;
TCCR1A = (1 << WGM10) | (1 << COM1A1) | (1 << COM1B1);
TCCR1B = (1 << CS11);
//ADCSRA = (1 << ADEN) | (1 << ADPS2) | (1 << ADPS1);
StatusLED(GREEN);
sei();
}
inline void StatusLED(unsigned char color)
{
if (color == OFF) {GREEN_LED_OFF; RED_LED_OFF;}
if (color == GREEN) {GREEN_LED_ON; RED_LED_OFF;}
if (color == YELLOW) {GREEN_LED_ON; RED_LED_ON;}
if (color == RED) {GREEN_LED_OFF; RED_LED_ON;}
}
void SerWrite(unsigned char data)
{
while(!(UCSRA & 0x20))
;
UDR = data;
}
void Sleep(unsigned char time72kHz)
{
count72kHz = 0;
while (count72kHz < time72kHz);
}
FirstTry.zip (enthält alle files) beigeschlossen!
Auswertung: Kommen _nicht_ alle Zeichen an, dann sollte man 'was ändern!:))
Vielen Dank schon 'mal im voraus!
cu Helmut
PS: Heute morgen konnte ich sehr über diverse Artikel lachen!
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,
interessant ist, dass ich ein ZIP-file mit reingestellt habe, das jetzt weg ist!?
Also nochmals das Ganze!
Vielleicht könnt Ihr bitte das ganz kurze Prog. 'mal testen.
Danke!
cu Helmut
Liste der Anhänge anzeigen (Anzahl: 1)
Hi Sternthaler,
Zitat:
ja, ich traue mich noch ...
Tolllll!:)
Zitat:
Auch ich konnte aus beiden Beiträgen downloaden.
Danke für die Rückmeldung! Aber Ihr wisst ja, so'n Newby weiß 'halt noch nicht alles ... !:(
Nun, zu mehr Erstem:
Zitat:
Note:
3. Some of the Status Flags are cleared by writing a logical one to them. *1*
Note that the CBI and SBI instructions will operate on all bits in the I/O Register,
writing a one back into any flag read as set, thus clearing the flag. *2*
The CBI and SBI instructions work with registers 0x00 to 0x1F only.
---------
Hier hört mein Englisch tatsächlich auf. Die weitere Erklärung von CBI und SBI mit 'read as set' kann ich tatsächlich nicht mehr umsetzen.
Zu *1*:
Verstehe ICH so: Normal ist, dass "Clear" *zurücksetzen auf Null bedeutet*, aber es gibt auch
den Fall, dass "Zurücksetzen" einfach *Schreiben einer Eins* bedeutet! (Die Du dann auch als solche lesen kannst: 'read as set'!)
Zu *2*:
CBI und SBI sind Maschinesprache-Befehle Clear - bzw. Set Bit im unteren Bereich (0x00 to 0x1F only) der IO-Register!
Zu *1* habe ich mein kleines Prog. ergänzt und lese das IO-Register "UCSRB" vor und nach dem "Clearen" aus! (Es muss natürlich heißen: "sollte", da ich das Prog. noch nicht testen kann!)
Code:
...
void b2h(byte d)
{ byte h=(d/16)+0x30;
if(h>0x39) h+=7;
SerWrite(h);
h=(d & 0x0f)+0x30;
if(h>0x39) h+=7;
SerWrite(h);
}
....
b2h(UCSRA);
SerWrite(' ');
UCSRA |= 0x40; // 'clear' transmitter flag
Sleep(0xFF);
b2h(UCSRA);
....
cu Helmut
Nachtrag:
Sorry, ich habe das Forum nicht besucht und dann gepostet, sondern verkehrt herum! !:(
So muss ich doch noch "nachtarocken"!
zu @damaltor:
hi damaltor,
Du hast das *1* "fast" besser beschrieben, als ich!:)
Das mit dem gelöschten Flag, wusste ich leider (noch!:)) nicht!
Aber mein kleines Prog. müsste das ja auch zeigen! (Ich will's morgen testen!)
zu @radbruch:
hi mic,
Deine Behauptung mit "=" kann ICH _nicht_teilen_: !:(
Wenn Du mit "=" eine Zuweisung machst, so wird die Variable mit diesem Wert belegt!
(Außer bei CBI, ..., also den Bit-Operatoren! Aber das schreibst man je in Assambler anders!)
Wenn man nun "|=" meint, so heißt das, dass die (vordere) Variable mit dem hinteren Wert
"geodert wird". Und wenn da nur ein Bit gesetzt ist, dann wird nur an _dieser_Stelle_ ein
Bit gesetzt! (Bei mehreren natürlich eben diese.)
"&= ~" ist das Gegentum dazu: hier löscht Du das im hinteren Teil als "Eins" gesetzte Bit,
bzw. mehrere!
cu Helmut
PS: bei b2h() (also Byte/Char to hex) sollte/könnte man noch "0x" davor senden.