-
Notifications
You must be signed in to change notification settings - Fork 0
/
zaman.c
45 lines (35 loc) · 1.17 KB
/
zaman.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
/*********************************
* Eklenecegi dosyaya kendisinden *
* once <dos.h> eklenmelidir. *
*********************************/
unsigned long int kronometre; /* saniyenin 1000de 1inde 1 artar */
void interrupt (*INT8)(void); /* orjinal kesmeyi bunda sakliycaz */
void interrupt yeni_INT8(void) /* kendi kesmemiz */
{
static unsigned long int say = 0;
kronometre++;
say += 1193; /* programlanabilir icsel zamanlayicinin frekansinin (1193181) 1000de 1i */
/* normalde 65536 vurusta bir 8 nolu kesme olusturulur (yaklasik saniyede 18.2 vurus) */
if(say >= 65536)
{
say -= 65536;
INT8();
}
else outp(0x20, 0x20); /* aksi halde portu durumdan haberdar et */
}
void saati_yeniden_programla(void)
{
kronometre = 0;
INT8 = getvect(8); /* orjinal kesmeyi yedekle */
setvect(8, yeni_INT8); /* kendi kesmemizi orjinalinin yerine koy */
outp(0x43, 52); /* zamanlayicinin 0. kanalini ayarla */
outp(0x40, 1193 % 256); /* kanal sayacina once vurus araliginin dusuk baytini */
outp(0x40, 1193 / 256); /* sonra yuksek baytini yaz */
}
void saati_eski_haline_getir(void)
{
outp(0x43, 52);
outp(0x40, 0);
outp(0x40, 0);
setvect(8, INT8); /* orjinal kesmeyi yerine koy */
}