buginen koodi

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
0288
Äänestä

Muut lukivat myös

Vastaukset

Vanhimmat

Ei vielä vastauksia

Aloittaja odottaa vastauksia. Kerro oma näkemyksesi ensimmäisenä.

Kommentoi aloitusta


Terska-Arska kirjoitti:

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

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu