Beispiel #1
0
void SWIHandler() 
{
	register char *reg_r0 asm ("r0");
	register unsigned int *reg_14 asm ("r14");

	switch( *(reg_14 - 1) & 0x00FFFFFF) // Maskieren der oberen 8 Bits 
																			// und Verzweigen in Abh. der SWI NUmmer
	{ 
		case 0x100:
			init_ser();
			break;
		case 0x200:
			*reg_r0 = putch(*reg_r0);
			break;
		case 0x300:
			*reg_r0 = getch();
			break;
	}
}
Beispiel #2
0
int main(void)
{
//	char i;
// Serielle initialisieren  
	inits();
	init_ser();
// CR und LF auf das Terminal ausgeben
	putc (0xd);
	putc (0xa);
// ein Zeichen von der seriellen abholen	
//	i=getc();
	putc('a');
// String ausgeben
	puts("Hallo! \n");
	
//	intOutput(0x80000);	
	intOutput(0x80000000); // diese zahl max mit 20 stellen (- zeichen zählt als stelle), falls mehr benötigt, muss im quellcode die größe von "carray" entsprechend geändert werden
	
	return 0;
}
Beispiel #3
0
int main(void)
{
    pump_stop();
    int test1 = 0;
    int test = 50;
    // Serielle initialisieren
    inits();
    init_ser();

    puts("Herzlich willkommen zur Ausschankstation. Bitte Folgen Sie den Anweisungen.\n");

    while(1){
    pump_stop();                            //falls die Pumpe noch läuft
    int fehlertoleranz = 7;
    int voll = 50;                            // Welche Menge soll abgefüllt werden
    puts("Bitte stellen Sie zur Kalibrierung den Becher auf und drücken Sie SW1 \n");
    init_messung();
    while(piobaseB->PIO_PDSR & KEY1){}                              //polling (KEY1)
    int becher = 0;
    becher = MasseMitGenauigkeit();                                 //Bechergewicht messen
    puts("Der Becher hat folgende Masse in Gramm: ");
    intOutput(becher);
    puts("\n");
    puts("Drücken Sie SW2 um den Becher zu befüllen. \n");

    while(piobaseB->PIO_PDSR & KEY2){}                              //polling (KEY2)
        if (MasseMitGenauigkeit() < becher+fehlertoleranz && MasseMitGenauigkeit() > becher -fehlertoleranz){
        // pump_init();
            pump_start();
            int alteMasse = becher;
            int neueMasse = becher;
            int testMasse = becher;
            int ausgabe = 1;
             while ((neueMasse - becher) < voll){         // Solange Masse minus Bechergewicht kleiner als die gewünschte Menge ist, Schleife ausführen
             test1++;
             if(test1%test==0){
             if(testMasse>=neueMasse){
                 pump_stop();
                puts("keine Gewichtszunahme !! \n");
                break;
                }
                 testMasse = neueMasse;
             }
             alteMasse = neueMasse;
             neueMasse = MasseMitGenauigkeit();
             if((neueMasse-becher) >= ausgabe){
             puts(" im Becher sind ");
             intOutput(neueMasse-becher);
             puts(" Gramm \n");
             ausgabe = neueMasse-becher+1;
             }
             if (neueMasse < 1 || (alteMasse+6) < neueMasse || (alteMasse-6) > neueMasse){        // Falls Becher weg genommen wird oder Gewichtsveränderung zu groß ist
             pump_stop();
             puts("Fehler: Gewichtsveränderung zu groß \n");
             break;
             }
            }
            pump_stop();
            puts("Vorgang abgeschlossen \n\n");
        } else{
            pump_stop();
            puts("Fehler: Gewichtsveränderung an Becher zu groß \n");
        }
    }
    return 0;
}