1 / 11

Programmeringsvraag uit 2000 vraestel.

Programmeringsvraag uit 2000 vraestel. Let op dat hoewel punte nie vir vloeidiagramme sonder kode toegeken word nie, sal die vloeidiagram die nasieners help om jou program te volg wanneer jou kode foute bevat - dit sal in jou guns tel. VRAAG 6

Download Presentation

Programmeringsvraag uit 2000 vraestel.

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Programmeringsvraag uit 2000 vraestel. Let op dat hoewel punte nie vir vloeidiagramme sonder kode toegeken word nie, sal die vloeidiagram die nasieners help om jou program te volg wanneer jou kode foute bevat - dit sal in jou guns tel. RS245-2003-Lesing 12

  2. VRAAG 6 Skryf die samesteller funksie vir die volgende .h-lêer: extern void StelFrekwensie(char a); /* a=0 : skakel gonser af. a=1 : skakel gonser aan en stel frekwensie op 5000 Hz a=2 : verhoog frekwensie met 1000 Hz indien die frekwensie < 10000 Hz a=3 : verlaag frekwensie met 1000 Hz indien die frekwensie > 1000 Hz */ Write the assembler function for the following .h-file: extern void StelFrekwensie(char a); /*a=0 : switch beeper off a=1 : switch beeper on and set the frequency to 5000 H a=2 : increase the frequency by 1000 Hz if the frequency < 10000 Hz a=3 : decrease the frequency by 1000 Hz if the frequency > 1000 Hz */ RS245-2003-Lesing 12

  3. Watter inligting benodig ons: Hoe word die parameter aangegee na my samestellerprogram? Hoe skakel ek die gonser aan en af? Hoe stel ek die frekwensie van die gonser? Die samestellerprogram moet weet wat die huidige frekwensie is en moet dit in geheue stoor - nie in 'n register wat dalk in die C-program oorskryf kan word nie. Die waardes wat in die registers van die 8253 geskryf moet word om die frekwensie te stel, moet of bereken word of in 'n tabel opgesoek word. Aangesien ons slegs 10 vaste frekwensies het, sal ons dit liewer in 'n tabel skryf. RS245-2003-Lesing 12

  4. Begin Bewaar registers J Skakel gonser af al=0 J Skakel gonser aan al=1 J Inkrementeer frekwensie al=2 J Dekrementeer frekwensie al=3 Herstel registers Keer terug RS245-2003-Lesing 12

  5. ;««««««««««««««««««««««««««««««««««««««««««««««««««««;«««««««««««««««««««««««««««««««««««««««««««««««««««« .MODEL small .8086 ; ««««««««««««««««««««««««««««««««««««««««««««««««««« .DATA ; tellers vir 1000 tot 10 000 Hz Frekwensie dw 0,1193,597,398,298,239,199,170,149,133,119 LaasteF dw 0 ;Huidige frekwensie indeks (0 as gonser af is) ; «««««««««««««««««««««««««««««««««««««««««««««««««« Die tellers word verkry vanaf 1193180/frekwensie NB Twee grepe word benodig vir elke frekwensie , aangesien ons 'n hoë en 'n lae greep vir elke frekwensie na die 8253 geskryf word. Gebruik dus dw en nie db nie. Dit beteken dat ons die adres met 2 moet inkrementeer om die volgende frekwensie te lees. Waarom is LaasteF ook 'n dw? RS245-2003-Lesing 12

  6. .CODE public StelFrekwensie_ StelFrekwensie_: push si ;bewaar si cmp al,0 ;parameter in al register, bevel om af te skakel jnz toets1 call GonserAF jmp klaar toets1: cmp al,1 jnz toets2 call GonserAan ;bevel om aan te skakel teen 5 kHz jmp klaar toets2: cmp al,2 ;bevel om frekwensie te verhoog jnz toets3 call FrekwensieMeer jmp klaar toets3: cmp al,3 ;bevel om frekwensie te verlaag jnz klaar call FrekwensieMinder klaar: pop si retn 0 RS245-2003-Lesing 12

  7. GonserAf: mov LaasteF,0 ;Opdateer huidige toestand in al,61H ;laagste twee bisse van poort 61H = 00 om af te skakel and al,0FCH out 61H,al retn 0 Ons moet die heeltyd weet wat die huidige frekwensie is, die 0 wat in LaasteF gestoor word sê vir ons dat die gonser af is. RS245-2003-Lesing 12

  8. GonserAan: mov si,10 ;kry data vir 5 kHz mov LaasteF,si ;Opdateer huidige indeks in al,61H ;laagste 2 bisse van poort 61H = 11 om gonser aan te skakel or al,03H out 61H,al mov al,0b6H ;counter mode = counter2, write LSB & MSB, square wave out 43h,al ;mode control register mov ax,Frekwensie[SI] ;Gaan haal frekwensie (1 kHz) uit tabel out 42h,al ;output LSB mov al,ah ;MSB out 42h,al ;output MSB retn 0 Wanneer die gonser aangeskakel word, moet die frekwensie 5 kHz wees. Ons gaan haal dus die vyfde frekwensie in die tabel, dus si =10 RS245-2003-Lesing 12

  9. Begin Kry huidige frekwensie indeks J Reeds by 10 kHz? Inkrementeer indeks en stoor Skakel gonser aan en lees frekwensie uit tabel stel teller frekwensie Alternatief Keer terug RS245-2003-Lesing 12

  10. FrekwensieMeer: mov si,LaasteF ;kry huidige indeks cmp si,20 ;is die frekwensie reeds by 10 kHz jz maksimum ;ja inc si ;nee inkrementeer indeks inc si ;twee keer want ons werk met woorde mov LaasteF,si ;en stoor indeks maksimum: in al,61H ;laagste 2 bisse van poort 61H = 11 vir gonser aan or al,03H out 61H,al mov al,0b6H ;counter mode = counter2, LSB & MSB, square wave out 43h,al ;mode control register mov ax,Frekwensie[SI] ;kry frekwensie uit tabel out 42h,al ;output LSB mov al,ah ;MSB out 42h,al ;output MSB retn 0 Ons toets eers of ons nie reeds die maksimum frekwensie bereik het nie. RS245-2003-Lesing 12

  11. FrekwensieMinder: mov si,LaasteF ;kry huidige indeks cmp si,2 ;is die frekwensie reeds by 1 kHz? jbe minimum ;ja dec si ;nee, dekrementeer indeks dec si ;twee keer! mov LaasteF,si ;en stoor minimum: in al,61H ;laagste 2 bisse van poort 61H = 11 vir gonser aan or al,03H out 61H,al mov al,0b6H ;counter mode = counter2, LSB & MSB, square wave out 43h,al ;mode control register mov ax,Frekwensie[SI] ;kry frekwensie uit tabel out 42h,al ;output LSB mov al,ah ;MSB out 42h,al ;output MSB retn 0 Soortgelyk aan FrekwensieMeer, maar oppas! Dit sou foutief wees om jz minimum te gebruik. Waarom? RS245-2003-Lesing 12

More Related