Gast
#1386273
Hallo zusammen,
ich habe ein Problem bzgl. Taster. Verwendet wird der ATMega8.
Vielleicht kann mir jemand helfen?
Es geht um folgendes:
Durch das Drücken eines Tasters möchte ich den aktuellen Programmablauf,
egal an welcher Stelle das Programm ausgeführt wird, unterbrechen. Durch
ein erneutes Drücken des Tasters soll das Programm an der Stelle
fortgesetzt werden.
Hier mein aktuelles Programm (Ich weiß, dass ein goto nicht verwendet
werden sollte, aber für mich ist das doch übersichtlicher als ständig
irgendwelche Unterprogramme zu schreiben :-) ):
void main(void)
{
int zustand;
DDRB=0x21; /*Ein- und Ausgänge*/
DDRD=0x3F;
DDRC=0x04;
lcd_init();
lcd_home();
while(1) {
if(PINC & (1<<taster))
{
zustand=1;
}
else
{
zustand=0;
}
if(zustand==0)
{
schleife_normal();
}
else
{
schleife_pause(zustand);
zustand=0;
}
void schleife_pause(int variable)
{
while(variable)
{
return 1;
}
}
void schleife_normal(void)
{
reset:
PORTB=0x20; /* Setzen --> Grundzustand*/
if(!(PINB & (1<<PB3)) && !(PINB & (1<<PB4)) && (PINB &
(1<<PB1)) && (PINB & (1<<PB2)))
{
PORTB|=(1<<PB0); /*Set aktivieren, Programm starten*/
}
else
{
goto reset;
}
wechsel:
while(((!(PINB & (1<<PB3)) && (PINB & (1<<PB4))) || ((PINB
& (1<<PB3)) && !(PINB & (1<<PB4)))) && !(PINB & (1<<PB1)) && !(PINB &
(1<<PB2)));
if(((!(PINB & (1<<PB3)) || (PINB & (1<<PB4))) &&
((PINB & (1<<PB3)) || !(PINB & (1<<PB4))) && (!(PINB & (1<<PB3)) ||
(PINB & (1<<PB4)))) || (PINB & (1<<PB1)) || (PINB & (1<<PB2)))
{
lcd_data(zaehler); /*Schreibe auf Display*/
zaehler++; /*Zählregister um 1 erhöhen*/
bfr=zaehler/pulse; /*BFR ausrechnen*/
set_cursor(0,2);
lcd_data(bfr); /*schreibe auf Display*/
PORTB=0x20; /*kehre in den grundzustand zurück*/
}
else
{
goto wechsel;
}
if(PINC & (1<<PC1))
{
lcd_clear();
}
else goto reset;
}
Ich freue mich über alle Tipps!!!
Simon