Buginen koodi, voisko joku ystävällisesti muokata parempaan moodiin.
Yleisohjeet:
to write a program (in ANSI C) that uses the Programmable Interval Timer (PIT) chip to generate a tone after a short pause. The delay between starting the program and hearing the tone must be longer than two seconds, but not longer than three seconds. The tone must last two seconds. The frequency of the tone must be 900Hz (give or take a few Hz).
#include
#include
#define BASE_ADDRESS 0x40
#define CNTRL_REG (BASE_ADDRESS 3)
#define CNTR_2 (BASE_ADDRESS 2)
#define KAIUTIN 0x61
void viive(int sekuntia);
void alusta_PIT(void);
void kaiutin_paalle(void);
void kaiutin_paalta(void);
void interrupt (*oldvect)(void);
void interrupt my_interrupt();
long count=0;
int main (void)
{
oldvect=getvect (0x08); /*tallentaa vanhan keskeytysvektorin*/
setvect(0x08, my_interrupt); /*laittaa my_interruptin keskeytysvektoriksi*/
alusta_PIT(); /*kutsuu funktiota, joka asettaa „„nen oikealle taajuudelle*/
viive(2); /*odottaa 2 sekuntia*/
kaiutin_paalle(); /*kutsuu funktiota, joka laittaa „„nen p„„lle*/
viive(2);
kaiutin_paalta(); /*kutsuu funktiota, joka sammuttaa „„nen*/
setvect( 0x08, oldvect); /*vanha keskeytysvektori takaisin*/
return(0);
}
void alusta_PIT()
{
outportb(CNTRL_REG, 0XB6); /*laskuri2 1011 moodi3 0110*/
/*TAAJUUDEN MŽŽRITTŽMINEN 1193180Hz/900Hz=1326=>52Eh*/
outportb(CNTR_2, 0X2E);
outportb(CNTR_2, 0x05);
}
void interrupt my_interrupt(void) /*Varsinainen keskeytypalvelurutiini*/
{
count ;
oldvect();
}
void kaiutin_paalle()
{
int temp = inportb(KAIUTIN); /*temp-muuttujaan kaiuttimen osoitepaikasta arvo*/
temp= temp|0x3; /*bittimaskioperaatio, jonka avulla saadaan 2 viimeist„ bitti„ ykk”seksi*/
outportb(KAIUTIN, temp); /*temp-muuttujan sis„lt” kaiuttimen osoitepaikkaan =>„„ni*/
}
void kaiutin_paalta()
{
int temp = inportb(KAIUTIN); /*temp-muuttujaan kaiuttimen osoitepaikasta arvo*/
temp= temp&0xFC; /*bittimaskioperaatio, jonka avulla saadaan bitit nolliksi*/
outportb(KAIUTIN, temp); /*temp-muuttujan sis„lt” kaiuttimen osoitepaikkaan =>„„ni pois*/
}
void viive(int viiveaika)
{
count=0;
while(count
Yleisohjeet:
to write a program (in ANSI C) that uses the Programmable Interval Timer (PIT) chip to generate a tone after a short pause. The delay between starting the program and hearing the tone must be longer than two seconds, but not longer than three seconds. The tone must last two seconds. The frequency of the tone must be 900Hz (give or take a few Hz).
#include
#include
#define BASE_ADDRESS 0x40
#define CNTRL_REG (BASE_ADDRESS 3)
#define CNTR_2 (BASE_ADDRESS 2)
#define KAIUTIN 0x61
void viive(int sekuntia);
void alusta_PIT(void);
void kaiutin_paalle(void);
void kaiutin_paalta(void);
void interrupt (*oldvect)(void);
void interrupt my_interrupt();
long count=0;
int main (void)
{
oldvect=getvect (0x08); /*tallentaa vanhan keskeytysvektorin*/
setvect(0x08, my_interrupt); /*laittaa my_interruptin keskeytysvektoriksi*/
alusta_PIT(); /*kutsuu funktiota, joka asettaa „„nen oikealle taajuudelle*/
viive(2); /*odottaa 2 sekuntia*/
kaiutin_paalle(); /*kutsuu funktiota, joka laittaa „„nen p„„lle*/
viive(2);
kaiutin_paalta(); /*kutsuu funktiota, joka sammuttaa „„nen*/
setvect( 0x08, oldvect); /*vanha keskeytysvektori takaisin*/
return(0);
}
void alusta_PIT()
{
outportb(CNTRL_REG, 0XB6); /*laskuri2 1011 moodi3 0110*/
/*TAAJUUDEN MŽŽRITTŽMINEN 1193180Hz/900Hz=1326=>52Eh*/
outportb(CNTR_2, 0X2E);
outportb(CNTR_2, 0x05);
}
void interrupt my_interrupt(void) /*Varsinainen keskeytypalvelurutiini*/
{
count ;
oldvect();
}
void kaiutin_paalle()
{
int temp = inportb(KAIUTIN); /*temp-muuttujaan kaiuttimen osoitepaikasta arvo*/
temp= temp|0x3; /*bittimaskioperaatio, jonka avulla saadaan 2 viimeist„ bitti„ ykk”seksi*/
outportb(KAIUTIN, temp); /*temp-muuttujan sis„lt” kaiuttimen osoitepaikkaan =>„„ni*/
}
void kaiutin_paalta()
{
int temp = inportb(KAIUTIN); /*temp-muuttujaan kaiuttimen osoitepaikasta arvo*/
temp= temp&0xFC; /*bittimaskioperaatio, jonka avulla saadaan bitit nolliksi*/
outportb(KAIUTIN, temp); /*temp-muuttujan sis„lt” kaiuttimen osoitepaikkaan =>„„ni pois*/
}
void viive(int viiveaika)
{
count=0;
while(count
Vastaukset
Vanhimmat
Ei vielä vastauksia
Aloittaja odottaa vastauksia. Kerro oma näkemyksesi ensimmäisenä.