Taster Programmier Anfänger Problem Atmega32

Gast #956346
Lesenswert?

Ich habe ein Problem mit der Programmierung einer Abfrage für einen 
Taster, der An PORTC1 angeschlossen mit 100kOhm Pulldown Widerstand 
angeschlossen ist. Desweiteren ist eine LED an PortB7 angeschlossen. 
Mein Controller ist ein atMega32.

Hier ist ein Assembler-Programm, welches den Bei gedrücktem Taster das 
LED leuchten lässt und bei nicht gedrücktem bleibt es aus.
1
.include "m32def.inc"
2
rjmp Anfang
3

4
Anfang:
5
      sbi   DDRB,7  ;Datenrichtungsbit
6
Schleife:
7
      sbic  pinc,1
8
      sbi   portb,7
9
      sbis  pinc,1
10
      cbi   portb,7
11
      rjmp  Schleife

Nun will ich das ganze in gcc realisieren. Dazu habe ich folgendes 
geschrieben:

#include   <avr/io.h>
#include  "main.h"
1
void main(void)
2
{
3
  DDRB |= (1<<PB7);
4
  while(1)
5
  {
6
    if (PINC & (1 << PC1))
7
    {
8
      PORTB |= (1<<PB7);
9
    }
10

11
    if (!(PINC & (1 << PC1)))
12
    {
13
      PORTB &= ~(1<<PB7);
14
    }
15
  }
16
}

Bei diesem Programm drücke ich den Taster, dann geht die LED an, aber 
aus geht sie leider nicht mehr, wenn ich den Taster loslasse. Meine 
Frage: Woran kann das liegen?
An der Hardware auf jeden fall nicht, denn bei dem Assembler Programm 
geht es ja.
Danke für Antworten. ( Ich bin ein Neuling.Bitte um Verständnis.)
#956824
Lesenswert?

Würde ich gerne, aber wie gesagt, imho müsste deiner auch gehen. Mein 
AVR Debugger denkt das auch...
Gut ich hätte es jetzt eher so gemacht:
1
void main(void)
2
{
3
  DDRB |= (1<<PB7);
4
  while(1)
5
  {
6
    if (PINC & (1 << PC1))    {
7
      PORTB |= (1<<PB7);
8
    }
9
    else {
10
      PORTB &= ~(1<<PB7);
11
    }
12
  }
13
}
Aber das dürfte eigentlich nichts ändern. Das mein Code geht freut mich 
natürlich, ob er letzen Endes auch effektiver ist (also von den 
resultierenden Assembler-Anweisungen weiß ich nicht, aber das ist in 
diesem Fall ja eh nicht so kritisch.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren