Gast
#2339721
Hallo,
will mit einem µC (An2131) eine Uhr programmieren und am 7 Segment
ausgeben.
Sie soll fürn Anfang nur von 0-9 sekunden anzeigen.
Problem: Zählt nicht. es wird nur die 0 ausgegeben. Sicher weil sie als
Startwert gilt und somit nichts mit dem Timer zu tun hat. Meine
vermutung ist das der Timer nicht richtig läuft.
Den Startwert habe ich auf 64536 gesetzt damit der Counter nur noch 1ms
läuft bis zum interrupt. ( Ein Takt vom Timer dauert 1µS--> 1000µs =
1ms, 65536-1000 = 64536 :) )
Ich hoffe ihr könnt mir helfen..
Danke im Vorhinein
Hier mein Code dazu:
#define ALLOCATE_EXTERN
#include "ezusb.h"
#include "EZregs.h"
#define ZERO 0x18
#define ONE 0x7B
#define TWO 0x2C
#define THREE 0x29
#define FOUR 0x4B
#define FIVE 0x89
#define SIX 0x88
#define SEVEN 0x3B
#define EIGHT 0x08
#define NINE 0x09
#define DOT 0xF7
int milli=0,sek=0; //Globale Variable
void main (void)
{
EA=1; // Timer Aktivieren
ET0=1; //Timer0 Aktivieren
TMOD=0x01; //Modus von Timer 0 auf 16 BIT einstellen
TR0=1; //Timer0 Einschalten
TH0=0xFC; // 16 Bit Modus (2 Byte) Höheres Byte
TL0=0x18; // Unteres Byte
PORTCCFG=0x00;
PORTBCFG=0x00;
OEC=0xFF;
OEB=0x03;
while(1)
{
OUTB=0x03; // für common Anode müssen immer auf HIGH sein
switch(sek)
{
case 0: OUTC=ZERO;
break;
case 1: OUTC=ONE;
break;
case 2: OUTC=TWO;
break;
case 3: OUTC=THREE;
break;
case 4: OUTC=FOUR;
break;
case 5: OUTC=FIVE;
break;
case 6: OUTC=SIX;
break;
case 7: OUTC=SEVEN;
break;
case 8: OUTC=EIGHT;
break;
case 9: OUTC=NINE;
break;
}
}
}
void einemillisekunde (void) interrupt 2
{
milli=milli+1;
if(milli==1000)
{
milli=0;
sek=1;
}
}