Moderators: stojke369, pedja089, [eDo], trax
#include <reg51.h>
void ispis (unsigned char,unsigned char);
{
//kod funkcije za ispis na 7 seg
}
void sat(void) interrupt 1 using 1
{
//prekidni potprogram
}
main()
{
//kod
while(1)
{
}
}

#include <reg51.h>
#define MAIN_TYPE_INT
// define NULL 0
#define XADDR_DISP_D 0x8001
#define XADDR_DISP_L 0x8000
// xtal = 11059200Hz, frekvencija kojom se inkrementira timer0 je xtal/12 = 921600
//
// prekid se dogadja 15 puta u sekundi: 921600/15 = 61440 (ok -> okrugli broj, manji od 65535)
//
// vrijednosti koje se upisuju u timer0 registre kod svakog prekida
// 1 vise od 65535 -> overflow: 65536 - 61440 = 4096 (hexadecimalno 0x1000)
#define TH0_VALUE 0x10
#define TL0_VALUE 0x00
#define ONE_SECOND_VALUE 15
struct _vrijeme {
unsigned char Jedinice;
unsigned char Desetice;
};
struct _zastavice {
unsigned IspisiVrijeme : 1;
unsigned fr*e : 7;
};
struct _zastavice data Zastavice;
struct _vrijeme data Vrijeme;
void ispis(unsigned char izbor, unsigned char broj)
{
unsigned char xdata * xPtr = NULL; // predpostavljam da xdata varijabla moze biti lokalna
if(izbor == 'l') || izbor == 'L')
xPtr = XADDR_DISP_L;
if(izbor == 'd' || izbor == 'D')
xPtr = XADDR_DISP_D;
if(xPtr == NULL)
{
xPtr = XADDR_DISP_D;
broj = 10;
}
switch(broj)
{
case 0: broj = 0x77; break;
case 1: broj = 0x14; break;
case 2: broj = 0xB3; break;
case 3: broj = 0xB6; break;
case 4: broj = 0xD4; break;
case 5: broj = 0xE6; break;
case 6: broj = 0xE7; break;
case 7: broj = 0x34; break;
case 8: broj = 0xF7; break;
case 9: broj = 0xF6; break;
default: broj = 0xF7 ^ 0x14; break; // (E)rror
}
*xPtr = broj;
}
void sat(void) interrupt 1 using 1
{
static unsigned char timer = 0;
TL0 = TL0 + TL0_VALUE;
TH0 = TH0_VALUE;
timer++;
if(timer == ONE_SECOND_VALUE)
{
timer = 0;
Vrijeme.Jedinice++;
if(Vrijeme.Jedinice == 10)
{
Vrijeme.Jedinice = 0;
Vrijeme.Desetice++;
if(Vrijeme.Desetice == 10)
Vrijeme.Desetice = 0;
}
Zastavice.IspisiVrijeme = 1;
TF0 = 0; // jel treba brisat taj bit ili je to automatski odradjeno od procesora/kompajlera
}
}
void app_init(void)
{
Vrijeme.Jedinice = 0;
Vrijeme.Desetice = 0;
Zastavice.IspisiVrijeme = 0;
TMOD = 0x01; // 16 bitni timer0
TH0 = TH0_VALUE;
TL0 = TL0_VALUE;
ET0 = 1; // omoguci timer0 prekid
EA = 1; // omoguci sve prekide
TR0 = 1; // pokreni timer0
}
#if defined(MAIN_TYPE_INT)
int main(void)
#else
void main(void)
#endif
{
app_init();
while(1)
{
if(Zastavice.IspisiVrijeme)
{
ispis('l', Vrijeme.Desetice);
ispis('d', Vrijeme.Jedinice);
Zastavice.IspisiVrijeme = 0;
}
}
#if defined(MAIN_TYPE_INT)
return 0;
#endif
}
Return to Nagradne Igre - dijelovi
Users browsing this forum: No registered users and 1 guest