120 likes | 302 Views
8086 GEHEUE en POORTE 8253/4 Teller 8255 PARALLELE POORT PC GONSER EN SLEUTELBORD. Belangrik: Die inligting in hierdie lesing is van toepassing op
E N D
8086 GEHEUE en POORTE 8253/4 Teller 8255 PARALLELE POORT PC GONSER EN SLEUTELBORD Belangrik: Die inligting in hierdie lesing is van toepassing op die komponente soos in die oorspronklike PC. Die meeste van die funksies is in die nuutste PC komponentstelle ingebou, sommiges is nie meer beskikbaar nie. RS245-2003-Lesing 9
/IORD /IOWR 8086 VERWERKER AH AL BH BL POORTE CH CL DH DL ADRES SI ADRES en /CS's Adres- dekodering DI GEHEUE BEHEERBUS SEINE BP /MRD /MWR SP CS DATA DS DIE REGISTERS SIT BINNE DIE VERWERKER. DIE GEHEUE EN POORTE IS EKSTERN TOT DIE VERWERKER ES SS RS245-2003-Lesing 9
8253/4 TELLER Die PC bevat 'n teller ekwivalent aan die 8253/4. Gate 0,1 = 1 Gate 2 = PB0 Databus OUT 0 IRQ0 /CS OUT 1 'Refresh' Geheue (ou PC ) A0 A1 OUT 2 Gonser EN-hek /IORD /IOWR Clk 0,1,2 1.19318 MHz LW: Interne registers ge-adresseer deur middel van A0 en A1 RS245-2003-Lesing 9
Die 8253 bevat drie tellers. Elke teller het 'n grendel waarin 'n 16-bis getal gelaai kan word. Die tellers kan beveel word om in een van 5 modusse te tel. Modusse 2 en 3 word in die PC gebruik: Modus 2: Die 16 bis getal wat in die grendel gelaai is word na die teller oorgedra en word met een gedekrementeer vir elke siklus van die intreeklok. Die uitgang is hoog totdat die telling 1 bereik. Die uitgang gaan dan laag vir een kloksiklus en die teller word outomaties gelaai met die getal in die grendel. Modus 3: Dieselfde as Modus 2 behalwe dat die uitgang vir die helfte van die telling hoog bly en vir die ander helfte laag bly. BIOS stel teller 0 op in modus 3 en laai die getal 65536 in die grendel. Die uitgang is dus 'n vierkantsgolf met frekwensie 1.19318 MHz/65536 = 18.2 Hz (55 ms). Dit word gebruik vir die "time-of-day clock" . Die ou PC slapskyfdrywer gebruik ook hierdie uitgang. RS245-2003-Lesing 9
BIOS stel timer 1 op in modus 2 vir geheue verfrissing in die ou PC. BIOS stel timer 2 op in modus 3. Die telling in die grendel kan verstel word om die frekwensie van die gonser te verander. NOTAS: Moenie aan timer 1 in 'n ou PC verander nie. Herstel timer 0 na sy oorspronklike toestand as jy die ou PC slapskyf wil gebruik. Elke teller het 16 bisse. Die mins belangrike greep word eerste gelaai - daarna die mees belangrike greep (sien "command" register). ADRESSE: Teller 0 : 40H Teller 1 : 41H Teller 2 : 42H Command register: 43H RS245-2003-Lesing 9
Command register: 7 6 5 4 3 2 1 0 0 : Binary count 1 : BCD 0 0 0 : MODE 0 0 0 1 : MODE 1 ens. In Tut 4 gebruik ons MOV 43H,B6H B6H=10110110 "binary count" "Mode 3" "read/write LSB then MSB" "program channel 2" 0 0 : Latch count 0 1 : read/write MSB only 1 0 : read/write LSB only 1 1 : read/write LSB then MSB 0 0 : program channel 0 0 1 : program channel 1 1 0 : program channel 2 RS245-2003-Lesing 9
8255 PARALLELE POORT Die PC bevat 'n parallelle poort ekwivalent aan die 8255 Rigtings soos deur BIOS opgestel (deur die toepaslike greep in die COMMAND register te skryf) PORT A PORT B PORT C DATABUS 8255 A0 A1 /CS ADRESSE : 60H PORT A 61H PORT B 62H PORT C 63H COMMAND REGISTER /IORD /IOWR NOTAS: Adreslyne A0 en A1 word gebruik om tussen poorte A, B en C en die COMMAND register te onderskei. Die IO adresdekodeerder selekteer die 8255 vir adresse 60H tot 63H. RS245-2003-Lesing 9
PC GONSER EN SLEUTELBORD Lees om skandeerkode te kry multiplexer PA Keyboard (PB7 = 0) Configuration switches (PB7 = 1) 8255 PB normaalweg = 0, puls om te "acknowledge" PB7 Keyboard Acknowledge PB6 Keyboard clock control (Ou PC: 0 stop die klok) PB1 Beeper 8253/4 Timer output PB0 Timer gate Poort adresse: PA: 60H, PB 61H RS245-2003-Lesing 9
Die gonser word aangeskakel deur bis PB0 en PB1 = 1 te stel sonder om die ander bisse van poort B te verander: in al,61H or al,03H out 61H,al Die gonser word afgeskakel deur: in al,61H and al,0FCH out 61H,al Ons het reeds voorheen hierna gekyk en dit in TUT 4 toegepas. Nota: In die PC onder windows 2000/XP: Beter om eers die gonser aan te skakel en dan die frekwensie via poorte 43H en 42H te stel. RS245-2003-Lesing 9
PC SLEUTELBORD KODES [Table 7.3] Elke sleutel op die sleutelbord het 'n sogenaamde "scancode" wat deur bios vertaal word na die ASCII ekwivalent. Die int 16H met AH=0 keer terug met die ASCII waarde in AL en die "scancode" in AH. Die "scancodes" is gerieflik om te gebruik as jy ander funksies aan sleutels wil toeken. Voorbeelde: Esc :1 '1':2, '2':3, '3':4 ens 'Q':16, 'W':17, 'E':18 ens 'A':30, 'S':31, 'D':32 ens Elke sleutel het twee "scancodes". As die sleutel gedruk word, geld bostaande. As dit gelos word, word die mees belangrike bis na een gestel. (Dus 129 vir Esc gelos). Bios gee slegs die eerste, maar die tweede kan bepaal word deur die sleutelbord direk te lees. RS245-2003-Lesing 9
BIOS se INT 16H met AH=0 kan gebruik word om te wag vir 'n sleutel om gedruk te word. Dit keer terug met die ASCII kode in AL en die "scancode" in AH. Sleutels kan ook direk gelees word: in al,60H (* "scancode" *) mov ah,al (* bewaar in ah *) in al, 61H (* lees poort B *) or al,80H (* stel bis 7 na 1 *) out 61H,al (* en skryf dit na die poort *) and al,7FH (* herstel bis 7 na nul *) out 61H,al (* en skryf dit na die poort *) Gestel jou program moet bepaal of twee sleutels (sê 'a' en 's') gelyktydig gedruk word? Die betrokke kodes is 'a' : 30 en 158 's' : 31 en 159 Hoe bepaal jy of albei gedruk is? RS245-2003-Lesing 9
public wenkombinasie_ ; 'Public' sodat sigbaar buite die module wenkombinasie_: push bp ; bewaar bp mov bp,sp mov ah,al ;tydelike stoor plek vir al xor al,bl ; toets of ewe aantal ene xor al,cl xor al,dl xor al,[bp][4] ;nul in al as ewe ene jz nul mov al,1 ;LW antwoord genegeer nul: or ah,[bp][4] ;toets of net hopies van een en nul or ah,bl or ah,cl or ah,dl cmp ah,1H ;01H beteken net hopies van 1 of 0 jz einde ; Ja, behou genegeerde resultaat xor al,1 ; nee, daarom keer antwoord om einde: pop bp ret 2 TUT3 RS245-2003-Lesing 9