tirell
13.07.2013, 12:53
Als erstes einmal ein freundliches 'Hallo' an alle hier.
Ich bin schon seit einiger Zeit hier unterwegs habe aber noch nie etwas gepostet, ein stiller Leser quasi ;)
Da ich nun aber vor einem wirklich blöden Problem stehe und auch nach langer Suche nicht weiterkomme
erhoffe ich mir hier eine Lösung zu bekommen.
Mein Problem ist folgendes: Ich arbeite gerade an einer Uhr welche an einem Port 2 BCD-Wandler (74141 equivalent) steuert, µC ist ein ATMega16.
Da ich an einem Port für die beiden 74141 die Einer und Zehner einzeln hochzählen muss(?) habe ich mich an Bitoperationen bedient und folgenden Code in der ISR genutzt:
PORTD |= (Minuten_Zehner << 4) | Minuten_Einer;
Problematisch wird es wenn ich die Variable der Einer im main() inkrementieren will.
Der folgende Code zählt allerdings die Zehner hoch und setzt die Einer auf Null. Meine Gedanken haben sich ziemlich darauf versteift dass es daran liegt,
wie ich den Port im ISR ansteuere. Liege ich damit überhaupt richtig oder bin ich schon total festgefahren?
if(~PINB & 1 << PB0)
{
Minuten_Einer ++;
}
else{}
PS: Der 74141 wandelt die Eingänge A bis D binär in 0 bis 9 dezimal um und zieht diese auf GND falls es jemanden interessiert.
Ich bin schon seit einiger Zeit hier unterwegs habe aber noch nie etwas gepostet, ein stiller Leser quasi ;)
Da ich nun aber vor einem wirklich blöden Problem stehe und auch nach langer Suche nicht weiterkomme
erhoffe ich mir hier eine Lösung zu bekommen.
Mein Problem ist folgendes: Ich arbeite gerade an einer Uhr welche an einem Port 2 BCD-Wandler (74141 equivalent) steuert, µC ist ein ATMega16.
Da ich an einem Port für die beiden 74141 die Einer und Zehner einzeln hochzählen muss(?) habe ich mich an Bitoperationen bedient und folgenden Code in der ISR genutzt:
PORTD |= (Minuten_Zehner << 4) | Minuten_Einer;
Problematisch wird es wenn ich die Variable der Einer im main() inkrementieren will.
Der folgende Code zählt allerdings die Zehner hoch und setzt die Einer auf Null. Meine Gedanken haben sich ziemlich darauf versteift dass es daran liegt,
wie ich den Port im ISR ansteuere. Liege ich damit überhaupt richtig oder bin ich schon total festgefahren?
if(~PINB & 1 << PB0)
{
Minuten_Einer ++;
}
else{}
PS: Der 74141 wandelt die Eingänge A bis D binär in 0 bis 9 dezimal um und zieht diese auf GND falls es jemanden interessiert.