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; } }
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; }
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; }