/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
Interrupt
Fra : Preben Holm


Dato : 09-03-04 20:21

Hej alle

Hvordan skriver man et interrupt i C?

Dvs. lad os nu antage, at jeg vil indstille Timer 1 på 186-cpu'en til,
at generere et interrupt til en given værdi T.
Kan dette laves smart eller skal det kodes i ASM?

Derudover (hvad mere vigtigt er) hvordan refereres så at en given
funktion/metode skal servicere dette interrupt?



Mvh / Preben Holm


P.S. Har begrænset DOS-funktionalitet på udviklingskittet, men lidt er
der da *gg*!

 
 
Mogens Hansen (09-03-2004)
Kommentar
Fra : Mogens Hansen


Dato : 09-03-04 20:39

Preben Holm wrote:

[8<8<8<]
> Hvordan skriver man et interrupt i C?

Det er specifikt for din compiler -det er ikke en del af det standardiserede
sprog.

Det er meget almindeligt at compileren har et keyword "interrupt"


Venlig hilsen

Mogens Hansen

Preben Holm (10-03-2004)
Kommentar
Fra : Preben Holm


Dato : 10-03-04 00:04

Hej igen

> Det er specifikt for din compiler -det er ikke en del af det standardiserede
> sprog.
>
> Det er meget almindeligt at compileren har et keyword "interrupt"

Jeg har hentet Turbo C++ 1.01 fra borlands museum-side!

Nogen der kan fortælle lidt om hvordan jeg så gør?


Mvh / Preben

Bertel Brander (10-03-2004)
Kommentar
Fra : Bertel Brander


Dato : 10-03-04 00:15

Preben Holm wrote:
> Hej igen
>
>> Det er specifikt for din compiler -det er ikke en del af det
>> standardiserede sprog.
>>
>> Det er meget almindeligt at compileren har et keyword "interrupt"
>
>
> Jeg har hentet Turbo C++ 1.01 fra borlands museum-side!
>
> Nogen der kan fortælle lidt om hvordan jeg så gør?
>

Jeg lavede lige et lille eksempel. Jeg har brugt TC 2.01 som vist
kan downloades fra Borlands museum, hvis ikke version 1.01 kan bruges.

Det programmerer timeren til at køre 1000 Hz, og sætter en interrupt
funktion til at blive kaldt ved timer-interrupt.

Spørg endelig hvis der er noget du ikke forstår.

#include <dos.h>
#include <stdio.h>
#include <stdlib.h>

#define TIMER_INT_NO 0x08

#define TIMER_CONTROL_REGISTER 0x43
#define TIMER_LATCH_REGISTER 0x40

static void far interrupt (*OldTimerVector)(void);
int TickCounterDos;
int Counter;

void SetClockFreq(int freq)
{
int Val = (int )(1193180L/freq); /* 1193180 is timer freq. */
outportb(TIMER_CONTROL_REGISTER, 0x36); /* initialize timer to 16
bit, mode 3, 2*8 bit latch */

outportb(TIMER_LATCH_REGISTER, Val); /* low byte */
outportb(TIMER_LATCH_REGISTER, Val >> 8); /* high byte */
}

void far interrupt TimerInt(void)
{
if(!(--TickCounterDos))
{
TickCounterDos = 55; /* Tick DOS at normal rate -> once for each
55 ms */
SetClockFreq(1000);
OldTimerVector();
}
else
{
disable();
outportb(0x20, 0x20); /* Ack the interrupt */
}
Counter++;
}

void Uninit(void)
{
disable();
outportb(TIMER_CONTROL_REGISTER, 0x36);

outportb(TIMER_LATCH_REGISTER, 0);
outportb(TIMER_LATCH_REGISTER, 0);

setvect(TIMER_INT_NO, OldTimerVector);
enable();
exit(0);
}

void Init(void)
{
disable();

SetClockFreq(1000);
OldTimerVector = getvect(TIMER_INT_NO);
setvect(TIMER_INT_NO, TimerInt);
TickCounterDos = 1;

enable();
}

int main(void)
{
Init();
while(Counter < 2000) /* Wait for 2000 tick -> 2 sec */
;
printf("Done!\n");
Uninit();

return 0;
}

/b


Søg
Reklame
Statistik
Spørgsmål : 177580
Tips : 31968
Nyheder : 719565
Indlæg : 6409079
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste