Subject: Gspic 2. Aufgabe (Juli 2009)
Ich habe die die 2. Klausuraufgabe (Juli 2009) programmiert, bin mir aber beim Zufluss Überwachen nicht so sicher ob das richtig ist. Wenn jemand Fehler findet, bitte melden. Danke.
- /*Funktionsdeklarationen, globale Variablen, etc. */
- static void init(void);
- static volatile unsigned int tank = 0;
- static volatile uint8_t event = 0;
- /*Unterbrechungsbehandlungsfunktionen */
- ISR (INT0_vect) {
- if(event == 0) {
- event = 1;
- else {
- event = 0;
- }
- }
- ISR (INT1_vect) {
- tank--;
- PORTD& = ~1;
- }
- /* Funktion main */
- void main(void) {
- /*Initialisierung */
- init();
- PORTD &= ~1;
- /*Warten auf Ereignisse */
- while(1){
- while(event == 0){
- sleep_enable();
- sei();
- sleep_cpu();
- sleep_disable();
- cli();
- }
- /*Zufluss überwachen */
- while(tank<FILL_MAX && event == 1){
- tank++;
- sei();
- event == 1; /* event == 1 hat keine Auswirkung auf das Programm. sei() und der nächste Befehl werden atomar ausgeführt. Damit an der Stelle Interrupts bearbeitet werden können, darf nach sei() nicht cli() stehen. */
- cli();
- }
- if(tank == FILL_MAX) {
- PORTD|= 1;
- event = 0;
- }
- }
- }
- /*Ende der Funktion main */
- /*Funktion init */
- static void init(void){
- DDRD &= ~(1<<2);
- PORTD|=(1<<2);
- DDRD|= 1;
- DDRD &= ~(1<<3);
- PORTD|=(1<<3);
- GICR|= (1<<INT0)|(1<<INT1);
- MCUCR &= ~(1<<ISC01);
- MCUCR |= (1<<ISC00);
- MCUCR &= ~(1<<ISC10);
- MCUCR |= (1<<ISC11);
- }
Show profile
Link to this post