Mikrokontrollerin sisäinen arkkitehtuuri Kontrollereiden sisäinen muisti Ajastimet/Laskurit Sarjaliikennöinti Keskeytykset Kontrollereiden Muistit
Kontrollereiden sisäinen muisti Kontrollereiden sisälle voi olla integroituna kolmenlaista muistia: 1. ohjelmamuistia tänne sijoitetaan ohjelmakoodi 2. käyttömuistia ohjelmien tarvitsemien muuttujien talletus ja lukeminen 3. haihtumatonta käyttömuistia niille tiedoille, joiden täytyy säilyä sähkökatkoksen jälkeenkin Haihtumattoman käyttömuistin tarve riippuu sovelluksesta, mutta ohjelma- ja käyttömuistia tarvitaan aina. Ellei jompaakumpaa ole olemassa kontrollerissa valmiina tai riittävästi, on käytettävä ulkoista muistia. Tosin kaikkiin piireihin ei ulkoista muistia voida liittää. Samasta kontrollerista on monesti saatavissa versiot sekä uudelleen ohjelmoitavalla että kertaalleen ohjelmoitavalla muistilla. Uudelleen ohjelmoitava muisti on yleensä vähän kalliimpaa ja sitä käytetään vain tuotekehityksen ajan protoissa. Valmiiseen tuotteeseen valitaan sitten halvempi muistityyppi. Kontrollereiden sisäinen muisti Sisäinen ohjelmamuisti Käytön kannalta kontrollereiden sisäinen ohjelmamuisti voidaan jakaa 1. uudelleenohjelmoitavaan muistiin Tarpeellinen kehitysvaiheessa. Kalliimpi. Rajallinen määrä uudelleenohjelmointikertoja. 2. kertaalleen ohjelmoitavaan muistiin Valmiiseen tuotteeseen. 3. valmistuksen yhteydessä ohjelmoitavaan muistiin Ohjelmointi suoritetaan piirin valmistajalla ja tätä tapaa voidaan käyttää todellisissa massatuotteissa.
Kontrollereiden sisäinen muisti Sisäinen ohjelmamuisti Ohjelmamuistiteknikkana oli aiemmin monesti EPROM. Sama muistityyppi pystyi toimimaan sekä uudelleen- että kertaallenohjelmoitavana muistina. Mikäli piiristä halutiin uudelleenohjelmoitava, koteloon rakennettiin erityinen ikkuna, josta valon avulla ohjelma tarvittaessa nollattiin. Nykyisin Flash- ja EEPROM-muistit ovat ohjelmamuisteina yleisiä. Niiden hinta on alentunut ja niiden uudelleenohjelmointi on nopeaa ja helppoa. Piiristä riippuen tavallinen määrä ohjelmamuistia piirin sisällä on 1KB 128KB. Ohjelmointitavoissa on eroja. Jotkin piirit tarvitsevat ohjelmointilaitteen. Nykyisin on myös piirejä, joissa riittää, että ohjelma siirretään sarjamuodossa piirille. Ohjelman kopiointisuojauksesta on huolehdittava. Kontrollereiden sisäinen muisti Sisäinen käyttömuisti Jonkin verran sisäistä kayttömuistia (esim. SRAM tai DRAM) yleensä löytyy jokaisesta kontrollerista (muutama kymmenen tavua 4KB). Määrä riittää normaalisti pinomuistiin ja muuttujien käsittelyyn, mutta se ei välttämättä riitä tietojen keräykseen, tietoliikenteen tarpeisiin, yms. Tällöin tarvitaan lisänä ulkoista käyttömuistia ja on valittava piiri, johon ulkoista muistia saadaan tarvittava määrä. Osa RAM-muistista on yleensä CPU:n rekisterien käytössä eikä ole vapaasti käytettävissä. Haihtumaton käyttömuisti EEPROM-muistia kontrollerista voi löytyä muutamia kilotavuja. Tänne talletetaan sellaisia muuttujia, joiden arvot on säilytettävä virtakatkon jälkeen ja joita on tarve päivittää silloin tällöin. Uudelleenkirjoitusten lukumäärä on rajallinen. Tyypillisiä käyttökohteita ovat erilaisten parametritietojen talletus. Käyttäjä voi virittää laitteen mielekseen, yms.
Esimerkkinä 8051:n muistinhallinta Kaikilla perheen prosessoreilla on erillinen ohjelma- ja käyttömuistiavaruus. Ohjelmamuistiavaruus on 64KB. Käyttömuisti jakaantuu sisäiseen ja ulkoiseen käyttömuistiin. Suurimmillaan perheen piirit sisältävät 256 tavua sisäistä muistia. Sisäinen muisti on nopeampaa käyttää kuin ulkoinen. RAM-muisti on yhdistelmä erilaisia yleis- ja erikoisrekistereitä, bitti-tasolla käsiteltäviä muistipaikkoja ja vapaata muistialuetta. 8051 käsittelee operandeja neljässä muistilohkossa: 1. 64 Ktavun ohjelmamuistissa 2. 64 Ktavun ulkoisessa RAM:ssa 3. 256 tavun sisäisessä datamuistissa 4. 16-bitin ohjelmalaskurissa 8051 - muistit
8051 - Ohjelmamuisti Nollauksen (Reset) jalkeen ohjelman suoritus alkaa osoitteesta 0000H. Siellä on hyppykäsky varsinaisen pääohjelman alkuun. Ohjelmamuistissa on oltava myös kiinteät keskeytysvektorit, jonne ohjelmansuoritus siirtyy keskeytyksen tapahtuessa. Varattu tila, 8 tavua, ei yleensä riitä, vaan varsinainen keskeytysten käsittely tehdään muualla ja keskeytysvektorissa on ainoastaan hyppykäsky uuteen paikkaan. 8051 Sisäinen käyttömuisti 8051:ssä sisäinen datamuistialue koostuu 128 tavun sisäisestä datamuistista ja 128 tavun erikoisrekisterialueesta, SFR. Alempi datamuisti (alimmat 128 tavua) muodostuu seuraavan sivun kuvan mukaisesti neljästä rekisteripankista (osoitteet 00H 1FH), biteittäin osoitettavasta alueesta (bit addressable) ja pinomuistista. Jokaisessa rekisteripankissa on 8 rekisteriä ja vain yksi pankki kerrallaan voi olla käytössä. Biteittäin osoitettavaan alueeseen kuuluu 128 bittiä osoitteissa 20H 2FH ja pinomuistiin 80 tavua osoitteissa 30H 7FH.
8051 Sisäinen käyttömuisti Alimmat 128 tavua 8051 Sisäinen käyttömuisti Rekisteripankit (register banks) Rekisteripankit on sijoitettu 32 alimpaan muistiosoitteeseen. 8051:n käskykanta tukee kahdeksan rekisterin käyttämistä. Nämä rekisterit R0 R7 sijaitsevat resetin jälkeen osoitteissa 00H-07H. Esim. käskyllä MOV A, R2 luetaan muistipaikan 02H sisältö akkuun. Täsmälleen sama asia voidaan tehdä myös käskyllä MOV A, 02H Ylempi käsky suoritetaan kuitenkin yhdessä käskyssä kun alempi vaatii kaksi konekielistä käskyä. Käytettävää rekisteripankkia voidaan muuttaa PSW-rekisterissä (Program Status Word), mutta vain yksi voi olla kerrallaan aktiivinen. Rekisteripankkien käytöllä voidaan tehostaa ohjelman suoritusta silloin, kun ohjelman eri toiminnot käyttävät omaa rekisteripankkiansa. Käytössä olevat muistiosoitustavat: Rekisteriosoitus Suora osoitus Epäsuora rekisteriosoitus
8051 - Sisäinen käyttömuisti Bittiosoitettava RAM (bit-addressable RAM) RAM-muistialue välillä 20H-2FH on bitettäin osoitettava alue (16 * 8 bittiä). Jokaista näistä biteistä voidaan asettaa, nollata tai sille voidaan suorittaa boolean laskutoimituksia suoralla käskyllä. Bittimuuttujien käyttö vähän muistia sisältävässä kontrollerissa on tehokasta. Aluetta voidaan käsitellä myös tavuosoituksella. Esim. jos halutaan asettaa bitti 3BH, se voidaan tehdä käskyllä SETB 3BH Vaihtoehtoisesti voidaan hakea tavu muistista akkuun ja tehdä OR-maskaus halutulle bitille ja viedä muutettu tavu takaisin muistiin seuraavasti: MOV A, 27H ORL A, #00001000H MOV 27H, A 8051 - Sisäinen käyttömuisti Yleiskäyttöinen RAM (General Purpose RAM) Nämä 80 tavua ovat yleisessä käytössä. Muistipaikat ovat helposti ja nopeasti osoitettavissa ja konekieliset käskyt tukevat näiden muistien käyttöä. Koko muistialue ei kuitenkaan ole ohjelmoijan käytössä, koska pino (system stack) käyttää tätä aluetta myös. Molemmat suora ja epäsuora muistiosoitus ovat käytettävissä. Ensimmäisessä esimerkissä muistipaikan 65H sisältö viedään akkuun suoralla muistiosoituksella. Kun taas toisessa esimerkissä käytetään epäsuoraa muistiosoitusta ja muistipaikan osoite ladataan ensin rekisterin R1 sisällöksi ja vasta sen jälkeen haetaan muistipaikasta sisältö akkuun. Esim1: MOV A, 65H ; direct addressing: contents of address 65h to accumulator Esim 2: MOV R1, #65H MOV A, @R1 ; move immediate 65h to R1 ; move indirect: R1 contains address of Internal RAM which ; contains data that is moved to A.
8051 - Sisäinen käyttömuisti Erikoisrekisterit SFR (Special Function Registers) SFR-alue on olemassa kaikissa MCS-51. Alueen muistipaikkoja voi osoittaa vain suoraan. Rekisterit ovat SFR-alueella ja niitä voi osoittaa, kuten muistipaikkoja. Piiriperheen sisällä on vaihtelua tämän muistialueen sisällössä (eri määrä kiinteään erikoistehtävään varattuja paikkoja). Mikäli esim. piirivalmistaja haluaa lisätä arkkitehtuuriin uuden lohkon, vaikkapa A/Dmuuntimen, tulevat toimintojen ohjaamiseen ja käyttön tarvittavat rekisterit SFR-lohkoon vapaille paikoille. SFR-lohko muodostuu aritmetiikkarekistereistä A, B ja PSW osoitinrekistereista SP, DPH ja DPL I/O-porttirekistereistä keskeytysrekistereistä ajastinrekistereistä sarjaporttirekistereistä 8051 - Sisäinen käyttömuisti Erikoisrekisterit SFR (Special Function Registers) Ylempi 128 tavua Osa rekistereistä on bittiosoitettavia. Esimerkiksi SCON ja portit.
8051 - joitakin SFR:n rekistereitä Aritmetiikkarekisterit Käytettävissä ovat seuraavat matemaattiset operaatiot: yhteenlasku, vähennyslasku, kertolasku, jakolasku, inkrementointi, dekrementointi, BCD-desimaalilaskenta ja vertailu. Lisäksi käskykanta tukee seuraavia loogisia operaatioita: AND, OR, XOR, COMP, bittien siirrot ja vaihdot. A-rekisteri / ACC 8-bittinen rekisteri, jota käytetään laskutoimituksissa. B-rekisteri Käytetään yhdessä akun kanssa mm. kerto- ja jakolaskuissa. Esim. MUL AB käskyllä kerrotaan akussa ja B-rekisterissä olevat luvut ja 16- bittinen tulo talletetaan akkuun (LSB) ja B-rekisteriin (MSB). 8051 - Sisäinen käyttömuisti / SFR PSW-tilasanarekisteri Bitti PSW.7 PSW.6 PSW.5 PSW.4 PSW.3 PSW.2 PSW.1 PSW.0 Symboli CY AC F0 RS1 RS0 OV P Osoite D7H D6H D5H D4H D3H D2H D1H D0H Kuvaus Muistilippu (Carry). Käytetään normaalisti aritmeettisten laskutoimitusten yhteydessä (yhteenlasku, vähennyslasku). Apumuistilippu (Auxiliary Carry Flag). BCD-laskutoimitusten (Binary Coded Decimal) yhteydessä. Käyttäjälippu (Flag 0). Ohjelmoijan käytössä Rekisteripankin valinta 1 (Register Bank Select Bit). Rekisteripankin valinta 0. Reset nollaa rekisteripankin valintabitit. Käyttäjä voi muuttaa. 00 = Bank0; osoitteet 00H-07H / 01 = Bank1; osoitteet 08H-0FH 10 = Bank2; osoitteet 10H-17H / 11 = Bank3; osoitteet 18H-1FH Ylivuoto (Overflow) Asettuu, jos yhteen- ja vähennyslaskussa, mikäli ylivuoto tapahtuu. Bittiä tutkimalla voidaan selvittää, oliko tulos lukualueella. Varattu Pariteetti (parillinen)
8051 - Sisäinen käyttömuisti / SFR Esimerkkejä lippujen käytöstä. Jos akussa valmiina luku FFH ja suoritetaan käsky: ADD A, #1 ; tulee akun arvoksi nolla ja carry-lippu asettuu. AC-lippu asettuu esimerkiksi, kun laskutoimituksen tulos ylittää BCD-lukualueen 0-9. MOV R5,#1 MOV A, #9 ADD A, R5 ; antaa arvoksi heksaluvun AH Summa ylittää BCD-alueen ja AC-lippu asettuu. BCD-laskuissa tarvitaan lisäkäsky DA A (decimal adjust instruction), jos luku halutaan muotoon 10H (1+9=10). Esimerkki Overflow-lipun käyttäytymisestä MOV R6, #0FFH MOV A, #0FH ADD A, R6 ; Akkuun tulokseksi heksaluku 0EH Ylivuotolippu ei asetu tässä, koska lukualue -128 127 ei ylity. Ennen yhteenlaskua akussa oli FFH eli -1 desimaalisena ja yhteenlaskun tulos pysyy samalla lukualueella. 8051 - Sisäinen käyttömuisti / SFR SP-osoitinrekisteri (Stack Pointer) 8-bittinen pino-osoitinrekisteri, joka osoittaa aina pinon huipulle. SP inkrementoituu aina, kun pinoon viedään tietoa. Ja vastaavasti sitä dekrementoidaan, kun pinosta luetaan tietoa. 8051:ssä käytettävissä olevan pino on rajoitettu sisäisen RAM-muistin alueelle (128 tavua 8031/8051 ja 256 tavua 8032/8052). Käytännössä inkrementointi tehdään ennen kuin pinoon viedään dataa. Esimerkiksi jos pinomuistiksi halutaa valita 16 ylintä tavua, täytyy pinon alustus suorittaa käskyllä MOV SP, #6FH ; ylin mahdollinen pino-osoite on 7FH DPTR dataosoitinrekisteri (Data Pointer) Käytetään epäsuorassa osoituksessa osoittamaan joko ulkoista ohjelma- tai datamuistia. Se on 16-bittinen ja koostuu kahdesta 8-bittisestä rekisteristä: DPH- ja DPL-rekisteristä. DPH = high-byte ja DPL = low-byte. Esim. MOV A, #33H ; alustaa akkuun luvun 33H MOV DPTR, #1000H ; DPH saa arvon 10H ja DPL arvon 00H MOVX @DPTR, A ; akussa oleva luku 33H viedään epäsuorassa ; osoituksessa muistipaikkaan, jonka osoite on 1000H
8051 - Sisäinen käyttömuisti / SFR Porttirekisterit 0 3 (Port Registers) Port 0 osoitteessa 80H Port 1 osoitteessa 90H Port 2 osoitteessa A0H Port 3 osoitteessa B0H 8-bittisiä portteja (32 I/O-linjaa). Jokaista porttia voidaan käyttää joko bittiosoituksella tai tavuosoituksella. Koska osalla porteista on kaksoistehtävä, käytettäessä ulkoista muistia eivät portit 0,2 ja 3 ole käytettävissä I/O-linjoina. Vain portit P1.2 ja P1.7 ovat aina käytettävissä I/O:na. Merkintänä voidaan käyttää joko pistenotaatiota tai RAMmuistikartan muistipaikkojen osoitteita. Sama I/O-linja voidaan asettaa käskyillä SETB P1.2 ; nostaa jännitetason piirin nastassa 3 ja SETB 92H 8051 - Sisäinen käyttömuisti / SFR Keskeytysrekisterit (Interrupt Registers) 8051 tukee viittä keskeytyslähdettä ja tarjoaa 2-tasoisen prioriteetin niille. Kaikki keskeytykset on estetty järjestelmän käynnistyessä ja ne voidaan ottaa halutulla tavalla käyttöön kirjoittamalla vastaavat tiedot IE-rekisteriin (Interrupt Enable Register) osoitteessa A8H. Prioriteettitasot voidaan asettaa IP-rekisterissä (Interrupt Priority Register) osoitteessa B8H. Ajastinrekisterit TH0, TH1, TL0 ja TL1 (Timer Registers) 8051 sisältää kaksi 16-bittistä ajastinta/laskuria. Timer0 sijaitsee osoitteissa 8AH (TL0, low-byte) ja 8CH (TH0, high-byte). Timer1 sijaitsee vastaavasti osoitteissa 8BH (TL1, low-byte) ja 89H (TH1, high-byte).. Ajastimen asetukset tehdään rekisterissä TMOD (Timer Mode Register) ja ohjausrekisterissä TCON ( Timer Control Register). Vain TCON-reksiteriä voidaan osoittaa biteittäin. Sarjaporttirekisterit SCON ja SBUF 8051 sisältää sisäänrakennetun sarjaliikennöintimahdollisuuden esimerkiksi päätteitä tai modeemia varten. SBUF-rekisterin (Serial Data Buffer) kautta osoitteessa 99H kulkee sekä lähtevä että tuleva data. Lähtevä sarjamuotoinen data kirjoitetaan SBUFrekisteriin ja saapuva data käydään lukemassa sieltä. SCON-rekisterillä (Serial Port Control Register) osoitteessa 8H voidaan vaikuttaa sarjaliikennöinnin suoritustapaan.
8051 - Sisäinen käyttömuisti / SFR Ohjausrekisteri PCON (Power Control Register) Tämä rekisteri sisältää useita ohjausbittejä, joilla käyttäjä voi vaikuttaa kontrollerin toimintaan, esim. liikennöintinopeuteen ja virrankulutukseen. Rekisterin sisältö on esitetty seuraavassa taulukossa: Bitti 7 6 5 4 3 2 1 0 Symboli SMOD GF1 GF0 PD IDL Kuvaus Baudinopeuden tuplaus. Jos asettunut, niin sarjaliikenteen nopeus kaksinkertaistuu sarjaliikennemoodeissa 1, 2 ja 3 Määrittelemätön Määrittelemätön Määrittelemätön Yleiskäyttöinen bit 1 Yleiskäyttöinen bit 0 Power Down. Asettamalla saadaan kontrolleri virransäästötilaan, josta voidaan palata vain reset-signaalilla. Vain CMOS-piireissä. Idle Mode. Asettamalla saadaan kontrolleri idle-tilaan. Tästä päästään pois joko keskeytyksellä tai reset-signaalilla. Vain CMOS-piireissä. 8051 - Ulkoinen muisti Pienten ROM- ja RAM-muistiensa vuoksi 8051 voi tarvita myös ulkoista muistia. Aina ei ole edes mahdollista ennakoida tarvittavaa muistia tarkasti etukäteen. Kaikenkaikkiaan 8051 tukee 64K ulkoisen ohjelma- ja datamuistin käyttöä. Nämä muistit käyttävät samaa osoite- ja data-väylää (multipleksaus), mutta niillä on erilaiset ohjaussignaalit. Ulkoista ohjelmamuistia osoitetaan aina 16-bittisellä osoituksella. Ulkoista datamuistia voidaan sen sijaan osoittaa joko 16 tai 8 bitillä. On huomattava, että ulkoisen muistin käyttö on selvästi hitaampaa kuin sisäisen datamuistin. Tämä johtuu siitä, että ulkoista datamuistia osoitetaan epäsuorasti 16-bittisen dataosoittimen (DPTR) avulla. Ulkoisen muistin avulla voidaan hallita myös muita laitteita järjestelmässä. Tällöin esimerkiksi jokin muistipaikka ulkoisessa datamuistissa ohjaa tiettyä laitteen toimintaa (memory-mapped I/O). Näin voidaan esim. käynnistää ja sammuttaa oheislaitteita.
8051 - Ulkoinen muisti Multipleksoitu osoite- ja dataväylä Ilman multipleksointia tarvittaisiin enemmän linjoja (16+8). Nyt alemmat osoitelinjat toimivat ensin osoitelinjoina ALE-signaalin ohjaamina ja käskynsuorituksen lopussa datalinjoina. 8051 - Ulkoinen ohjelmamuisti EA-tulon perusteella valitaan se, hyödyntääkö prosessori mahdollista sisäistä ohjelmamuistia, vai käytetäänkö pelkästään ulkoista ohjelmamuistia. Kun EA = 0, koko ohjelmamuistiavaruus on ulkoista muistia eikä sisäistä muistia käytetä lainkaan. Kun EA = 1, piirin sisäinen ohjelmamuisti on käytössä alimpien osoitteiden osalta ja loppu on ulkoista muistia. Ulkoisen muistin ohjauksessa lukupulssina käytetään PSENlinjaa (Program Store ENable). Se toimii kuten normaali RDlinja, mutta sitä käytetään vain ulkoisen ohjelmamuistin lukemiseen. Ulkoisen muistin liittäminen tehdään I/O-porttien avulla. Portti P0 toimii multipleksoituna osoite/dataväylänä AD7...AD0. Portti P2 toimii osoiteväylän ylempänä puoliskona A15...A8.
8051 - Ulkoinen datamuisti Kaikilla MCS-51 perheen piireillä on sisäistä RAM-muistia. Tämä sisäinen datamuisti on myös aina käytössä, mutta sen lisäksi piiriin voidaan liittää myös ulkoista datamuistia. Ulkoinen datamuisti kytketään 8051-piiriin samalla tavalla kuin ulkoinen ohjelmamuistikin. Sisäinen datamuisti käyttää osoitteita 0...FFH (0...255), jolloin kaikkien muistipaikkojen osoittamiseen riittää 8-bittinen osoite. Ulkoista datamuistia voidaan osoittaa 16 bitillä (64K). Se käytetäänkö sisäistä vai ulkoista RAM-muistia määritellään käskykannassa. Ulkoista muistia kirjoitetaan ja luetaan eri käskyillä kuin sisäistä muistia. Ulkoista RAMmuistia ohjataan RD- ja WRlinjoilla, eli eri linjoilla kuin ulkoista ohjelmamuistia (/PSEN-linja). Ulkoista RAM:ia osoitetaan 256 tavun lohkoissa (pages). Kuvassa on liitetty 1Ktavun ulkoinen RAM-muisti. Portin 2 avulla valitaan käytettävä 256-tavuinen lohko ulkoisen muistin sisältä. PROSESSORIT/KONTROLLERIT Esimerkkinä AVR:n muistinhallinta Kontrolleri on Harvard-arkkitehtuurin mukainen eli muisteille ja datalle on omat väylänsä. Kaikissa AVR-kontrollereissa on ohjelmamuistina Flash-muistia ja haihtumattomana käyttömuistina yleensä jonkin verran EEPROMmuistia. Käyttömuistina on SRAM. Eri AVR-malleilla on useimmilla keskenään samanlainen muisti- ja rekisterirakenne, mutta muistikapasiteeteissa on eroja. Joissakin ohjaimissa data- ja osoiteväylät on tuotu piirin ulkoisiin nastoihin, joten lisä-sram-muistin liittäminen on mahdollista. AVR:n ohjelmointi on helppoa ISP-liitynnän kautta (In-System- Programmable). Myös ohjelmointilaitteen käyttö on mahdollista.
PROSESSORIT/KONTROLLERIT AVR - Ohjelmamuisti Uudelleenohjelmoitavaa flash-muistia. Ohjelmamuistiavaruus on maksimissaan128k == 64K 16-bitin muistipaikkoja käytettävissä. Ulkoista ohjelmamuistia ei voi käyttää. MegaAVR-piireissä ohjelma voidaan siirtää monella tavalla, kunhan piirille on ohjelmoitu erityinen latausohjelma (Boot loader). Latausohjelma hoitaa ohjelman latauksen halutulla toimenpiteellä ohjelmamuistiin. PROSESSORIT/KONTROLLERIT AVR - käyttömuisti Muistin leveys 8 bittiä. Sisältää 32 yleiskäyttöistä CPU:n rekisteriä R0 R31, joista osaa voidaan käyttää 16-bittisinä rekisteripareina Ohjelmoitaviin I/O-rekistereihin kuuluvat eri ohjelmoitavien yksiköiden ohjaus- ja tilarekisterit sekä CPU:n ohjaus- ja tilarekisterit Vapaasti käytettävän SRAM-alueen. Määrä vaihtelee 0 4K. Pino vie osan tästä alueesta. Joihinkin piireihin saadaan lisäksi ulkoista muistia.
PROSESSORIT/KONTROLLERIT AVR käyttömuisti / rekisterit PROSESSORIT/KONTROLLERIT AVR haihtumaton käyttömuisti Lähes jokaiseen AVR-perheen piiriin sisältyy EEPROM-muistia. Sen käyttö on jonkin verran rajoitetumpaa kuin SRAM-muistin. Muistiin kirjoittaminen on hitaampaa (millisekuntteja) ja uudelleenkirjoitusten lukumäärä on myös rajoitettu (kuitenkin vähintään 100 000 kertaa). Helppo tallettaa laitteen konfigurointitietoja yms. Esim. ATMega128:ssa on EEPROM-muistia 4KB. AVR Ulkoinen muisti Mikäli kontrolleriin lisätään ulkoista käyttömuistia, tehdään se erillisen lukkopiirin avulla, koska käytetään yhdistettyä data- ja osoiteväylää. Myös yli 64KB muistin käyttö on mahdollista, jos muisti jaetaan 64K:n sivuihin ja jokaista sivua osoitetaan omilla I/O-linjoillaan. Piirin sisäisen muistin kanssa yhteinen alue jää ulkoisesta muistista käyttämättä.
Muistinosoitusmuodoista Muistinosoitusmuoto tarkoittaa sitä, miten konekielen käskyissä voidaan ilmaista käskyn käsittelemä data. Eri käskyissä käytössä olevat osoitusmuodot vaihtelevat. Vaikka jokaisella kontrolleriperheellä on oma käskykantansa, tyypillisesti niistä löytyy samat tai samoja muistinosoitusmuotoja: Rekisteriosoitus Operandi sijaitsee jossakin kontrollerin rekisterissä. Suora osoitus Suorassa osoituksessa kerrotaan muistipaikan osoite ja käsky kohdistuu suoraan muistipaikan sisältöön. Epäsuora osoitus Epäsuorassa osoituksessa käytetään osoitteena jossakin rekisterissä tai muistipaikassa olevaa arvoa. Välitön osoitus Käskyssä on suoraan käytettävä lukuarvo. Arvoa ei siis lueta muistista tai rekisteristä. Luku on tiedettävä jo ohjelmaa kirjoitettaessa. 8051 - käytettävissä olevat muistinosoitusmuodot Rekisteriosoitus (Register Addressing) Rekisteriosoitus kohdistuu valitun rekisteripankin (Bank0 Bank3) johonkin valittuun rekisteriin R0 R7. Koska rekisteriosoituksessa rekisteri on ilmoitettavissa kolmella bitillä, on konekielinen käsky mahdollista esittää lyhyesti yhden tavun mittaisena (alimmat bitit ilmoittavat käytettävän rekisterin ja ylemmät bitit operaation nopeus. Esim. rekisterin R5 sisältö voidaan viedä akkuun käskyllä: ADD A, R5 ; konekielinen käsky 00101101 = 2DH Rekisteriosoitus voi kohdistua sisäisen datamuistin rekistereihin R0-R7, A, B, AB ja DPTR.
8051 - käytettävissä olevat muistinosoitusmuodot Suoraosoitus (Direct Addressing) Sisäistä datamuistia voidaan osoittaa suoraan tavukohtaisesti ja useita muistipaikkoja myös bittikohtaisesti. Käsky kohdistuu suoraan muistipaikan sisältöön ja suoraa osoitusta käytetään lähinnä yksittäisten muistipaikkojen käsittelyyn, aliohjelmakutsuissa ja haarautumiskäskyissä. Konekielinen käsky muodostuu operaatiokoodista ja siihen lisätystä muistipaikasta. Jos muistipaikka on samalla rekisteri, voidaan käyttää ko. rekisterin symbolia tai muuta erikoiskäskyä. Esim. MOV A, 55H ; Kopioidaan muistipaikan 55 sisältö akkuun MOV 56H, A ; Talletetaan akussa oleva luku muistipaikkaan 56 8051 - käytettävissä olevat muistinosoitusmuodot Epäsuora osoitus (Register Indirect Addressing) Epäsuora osoitus on välttämätön esimerkiksi silloin, kun käsiteltävä muistiosoite valitaan ohjelman suorituksen aikana. Tällöin oikeaa muistipaikkaa ei osata koodausvaiheessa kertoa kääntäjälle, ja rekistereitä käytetään oikeaan muistipaikkaan osoittavina pointereina. Epäsuorassa osoituksessa assembler-käskyssä mainittu rekisteri sisältää operandin (operaation kohteen) osoitteen. Rekisteri voi olla vain R0, R1 tai SP, jos osoite on 8-bittinen, tai DPTR, jos osoite on 16-bittinen. Esim. ADD A,@R0 ; Akkuun lisätään luku, jonka osoite on R0:ssa. @ kertoo, että kyseessä epäsuora osoitus
8051 - käytettävissä olevat muistinosoitusmuodot Välitön osoitus (Immediate Addressing) Kun operandi on luonteeltaan vakio eikä muuttuja ja arvo tiedetään jo ohjelmaa kirjoitettaessa, voidaan käyttää välitöntä osoitusmuotoa. Rekistereihin saadaan tällä tavoin helposti haluttuja lukuja. Tätä osoitusmuotoa voidaan käyttää kaikkien rekistereiden kanssa. Välitön osoitus täytyy erottaa suorasta osoitusmuodosta ja tämä tehdään #- symbolilla. Esim. MOV A, 4 ; Kopioi rekisterin R4 sisällön akkuun MOV A, #4 ; Kirjoittaa luvun 4 akkuun Epäsuora indeksoitu osoitus (Indexed Addressing) Hyödyllinen käsiteltäessä esimerkiksi muistissa olevia taulukoita. Tällöin kantarekisteri (program counter tai data pointer) ja akku yhdessä muodostavat osoitteen muistipaikan käsittelyä varten. Osoitustapaa käytetään ainoastaan ohjelmamuistin yhteydessä. Esim. MOVC A, @A+DPTR ; Lukee akkuun muistipaikan, jonka osoite on DPTR:n ;sisältö + akun sisältö Ajastimet/ Laskurit
Ajastimet/Laskurit Kontrollereissa on yleensä vähintään yksi (yleensä useampia) sisäänrakennettu ajastin/laskuriyksikkö, jota voidaan konfiguroinnista riippuen käyttää joko ajastimena tai laskurina. Ajastimena yksikkö laskee kellopulsseja ja laskurina taas jostakin ulkoisesta liitännästä tulevia pulsseja. Toimintaperiaate kummassakin sama. Kun laskuri pyörähtää ympäri, siitä aiheutuu keskeytys. Ohjelmoinnilla voidaan normaalisti vaikuttaa laskentanopeuteen (käytetään kellopulssin jakajaa) sekä laskentasekvenssiin (asetetaan laskennan alkuarvo tai vertailuarvo). Ajastimia on peruskellopulsseja laskevien lisäksi monen muunkin tyyppisiä, esim. PWM-modulaattorit ja watchdogit ovat erikoisominaisuuksia omaavia laskuriyksiköitä. Ajastimen/laskurin ominaisuuksiin vaikuttaa sen rekisterin pituus, joka on yleensä 8- tai 16-bittinen. Rekistereitä voi myös myös liittää peräkkäin, jolloin voidaan hallita isompia lukuja. Ajastimet/Laskurit Vapaasti juoksevan ajastimen keskeytysväli ei välttämättä ole tarkoitukseen sopiva ja silloin voidaan käyttää myös sovellukseen räätälöityä aikaväliä periodisessa laskurissa. Tällöin voidaan esimerkiksi aloittaa laskeminen nollasta ja verrata rekisterin arvoa ennalta ohjelmoituun raja-arvoon, jonka ylitys aiheuttaa keskeytyksen.
Ajastimet/Laskurit Ajastin voi toimia myös sieppaustilassa (Capture), jolloin tilatieto voidaan siirtää tietyllä hetkellä rekisteriin talteen myöhempää tarkastelua varten. Ajastimet/Laskurit Sovellusesimerkkejä: Ajastimen keskeytys voidaan käyttää herättämään laite virransäästötilasta tietyin väliajoin. Kierroslukulaskurit Laskurit voivat ohjata tiettyjä mikrokontrollerin pinnejä ja niihin kytkettyjä oheislaitteita ennalta asetettujen toimintojen mukaisesti.
Esimerkkinä 8051:n ajastin/laskuri 8051:ssä samoin kuin 8031:ssä on kaksi ajastin- tai laskurirekisteriä (8052:ssa näitä on kolme). Ohjauksilla nämä voidaan ohjelmoida joko ajastimiksi tai laskureiksi. Ajastimia/laskureita voidaan käyttää mm. aikavälin mittaukseen pulssin leveyden mittaamiseen tapahtumalaskureina keskeytyspyynnön generoimiseen ohjelmoidun ajan kuluttua Laskenta tapahtuu aina alhaalta ylöspäin ja kun laskuri pyörähtää ympäri, tulee keskeytyspyyntö. Laskureiden ytimenä ovat rekisterit TH0 ja TL0 sekä TH1 ja TL1. Näiden rekistereiden sisältö päivittyy siis laskennan edetessä automaattisesti. Käyttäjä voi myös itse ladata rekistereihin alkuarvon sekä lukea niistä lopputuloksen. Jos käytetään ajastin-toimintoa, laskuri askeltaa yhdellä ylöspäin jokaisella konejaksolla. Koska konejakso koostuu 12 kellojaksosta, niin esimerkiksi 12MHz kiteellä varustetussa kontrollerissa ajastinrekisteriä päivitetään mikosekunnin välein. Se, käytetäänkö T0:n ja T1:n laskuri- vai ajastintoimintoja, valitaan TMODrekisterin C/T-bitillä. Samassa rekisterissä valitaan käytettävä toimintatila (moodi). 8051 - Ajastimet/Laskurit Toimintatilat Moodi 0 Ajastin/laskuri toimii 13-bittisenä ajastimena tai laskurina. Tämä moodi aiheutuu historiallisesta rasitteesta eli yhteensopivuudesta 8048:n kanssa. Pyörähtäessään ympäri ajastin/laskuri asettaa TFx-keskeytyslipun.
8051 - Ajastimet/Laskurit Toimintatilat Moodi 1 Ajastin/laskuri toimii 16-bittisenä ajastimena tai laskurina. Laskuri nollautuu ja keskeytys generoituu aina 65536:n konejakson välein. Moodi 2 Ajastin/laskuri toimii 8-bittisenä siten, että alkuarvo ladataan automaattisesti laskentarekisteriin aina, kun laskuri TLx pyörähtää ympäri. Siis ei mennä 255 0, vaan 255 alustettuun arvoon, joka löytyy THx-rekisteristä. Moodi 3 Käytetään sarjaliikenteen yhteydessä. Timer 0 jakaantuu kahteen 8-bittiseen laskuriin ja niillä voidaan ohjata timer 1:n laskentaa (pysäyttää laskenta tarvittaessa). 8051 - Ajastimet/Laskurit TCON-rekisteri Bitti TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 Käyttö Timer1:n ylivuotolippu. Asettuu, kun laskuri pyörähtää ympäri ja nollautuu kun ohjelman suoritus siirtyy keskeytyspalveluun. Timer1:n salliminen. 1 = timer1 käynnissä, 0 = seis. Timer0:n ylivuotolippu. Timer0:n salliminen. 1 = timer1 käynnissä, 0 = seis. Ulkoisen keskeytyksen 1 lippu. Asettuu, kun ulkoinen keskeytys ja nollautuu automaattisesti keskeytysrutiinissa. Ulkoisen keskeytyksen 1 keskeytystapa, joko signaalin nollataso tai laskeva reuna. Ulkoisen keskeytyksen 0 lippu. Ulkoisen keskeytyksen 0 keskeytystapa
Esimerkkinä AVR:n ajastin/laskuri AVR:stä löytyy yleensä kaksi tai useampi ajastin/laskuria. Käytössä esijakaja, jolla kello-oskillaattorin pulsseja tai tulevaa signaalia voidaan jakaa luvulla 8,16,256 tai 1024. Konfiguroitava Timer0 Timer0 on 8-bittinen. Laskurin laskemien pulssien määrä voidaan lukea TCNT0-reksiteristä. TPV0-bitti ilmoittaa ylivuodosta ja aiheuttaa keskeytyspyynnön (mikäli sallittu). AVR - Ajastimet/Laskurit Timer1 Timer1 on 16-bittinen. Konfiguroitava ja se voi toimia laskurina, ajastimena,vertailutilassa, pulssinleveysmodulaattorina tai capture-tilassa. Koostuu TCNT1H- ja TCNT1L-rekistereistä. Ylivuotokeskeytys aiheutuu normaalisti laskurin/ajastimen pyörähtäessä ympäri. Vertailukeskeytys aiheutuu verrattaessa laskurirekisterin arvoa OCR1AH ja ACR1AL-rekistereihin. Jos yhtä suuret keskeytys. Sieppauskeskeytys liipaistaan välittömästi tai viivästetysti ulkoisen ICPtuloliitännän ollessa aktiivinen. Tällöin laskurin arvo talletetaan. Pulssinleveysmodulaattorin resoluutio voidaan valita 8-, 9- tai 10-bittiseksi, jolloin pulssisuhdetta voidaan säädellä.
Sarjaliikenne Sarjaliikenne Mikrokontrollerin ja sen oheislaitteiden kommunikoinnissa voidaan käyttää joko rinnakkaismuotoista tai sarjamuotoista tiedonsiirtoa. Rinnakkaismuotoinen on nopeampi tapa siirtää tietoa, mutta sarjaliikenne kuluttaa vähemmän I/O-linjoja ja on moniin tarkoituksiin riittävän nopea. Sarjamuotoisen tiedon siirtoon löytyy mikrokontrollereista yleensä vähintään yksi tähän tarkoitettu yksikkö, asynkroninen sarjaliikennepiiri UART (Universal Asyncronous Receiver Transmitter). Lähetyksessä UART muuntaa rekisteriin kirjoitetun tiedon sarjamuotoon (TxD). Vastaanottaessaan sarjamuotoista dataa RxD-pinnin kautta UART muuntaa sarjamuotoisen datan rinnakkaismuotoiseksi. UART on monesti yhdistettynä USART-porttiin, joka toimii synkronoituna sarjaliikenneväylänä.
Sarjaliikenne Asynkroninen tiedonsiirto Lähettävä data kehystetään aloitus- ja lopetusbitillä (start bit / stop bit). Varsinainen datapaketti sisältää yleensä 7 tai 8 bittiä ja mahdollisen paritettitarkistusbitin. Paketin muoto määrätään UART:n ohjausrekisterillä. Datapakettien välinen viive voi olla mikä tahansa, lähetystä ja vastaanottoa ei siis ole synkronoitu mitenkään. CPU tarvitsee tiedon siitä, milloin paketti on lähtenyt tai milloin paketti on luettu vastaanottopuskuriin (keskeytys). UARTin tilaa, kuten bittivirheitä ja lähetyksen etenemistä, voidaan tutkia rekistereistä. Tyypillisiä tiedonsiirtonopeuksia ovat 1200, 2400, 4800, 9600, 19200 ja 38400 bittiä/s. Sarjaliikenne Asynkroninen tiedonsiirto
Sarjaliikenne Synkroninen tiedonsiirto Lähettäjä ja vastaanottaja täytyy tahdistaa tarkasti toisiinsa, mikäli synkronista tiedonsiirtoa käytetään. Synkronointi voidaan toteuttaa erillisellä kellosignaalilla tai synkronointitieto voidaan sisällyttää dataan. Tiedonsiirtomenetelmänä synkronoitu on asynkronista nopeampi, koska aloitus- ja lopetusbittejä ei tarvitse lähettää tai tarkkailla. Nopeus voi olla jopa kymmeniä megabittejä sekunnissa. Sarjaliikenne Synkroninen tiedonsiirto Tahdistus joko kellosignaalista tai siirrettävä data on koodattu niin, että sitä voidaan käyttää tahdistukseen (esim. Manchester-koodaus). Synkronoidussa tiedonsiirrossa lähetettävä data siirretään lohkossa, jossa on oltava alku- ja loppumerkkien lisäksi yleensä muutakin tunnistetietoa ja lopussa mahdollinen tarkistussumma.
Esimerkkinä 8051:n sarjaliikenne 8051:ssä on sisäänrakennettu sarjaportti, joka voi toimia eri moodeissa ja eri nopeuksilla. 8051:ssä on full duplex -sarjaportti eli se voi lähettää ja vastaanottaa yhtä aikaa. Datan vastaanotto on myös puskuroitu niin, että se voi vastaanottaa jo seuraavaa merkkiä, vaikka edellistä ei ole vielä luettu kokonaan vastaanottorekisteristä. Data liikkuu SBUF-sarjapuskurin kautta. Sisäisesti käytössä on omat rekisterit lähtevälle ja saapuvalle datalle, mutta käyttäjälle nämä näkyvät yhtenä SBUFpuskurina. Kirjoittaminen SBUF-rekisteriin kohdistuu lähetysrekisteriin ja lukeminen SBUFrekisteristä kohdistuu vastaanottorekisteriin. Sarjaportilla on neljä eri moodia, jotka valitaan SCON-rekisterin SM0- ja SM1- biteillä. Toimintamuoto valitaan SCON-rekisterissä olevilla SM0 ja SM1-biteillä. Kaikissa toimintamuodoissa lähetys käynnistyy sillä, että SBUF-rekisteriin kirjoitetaan jotakin. 8051 - Sarjaliikenne
8051 - Sarjaliikenne Toimintatilat Moodi 0 Käytetään synkronoidussa sarjaliikennöinnissä. Sarjaportti toimii pelkkänä siirtorekisterinä, joka lähettää tai vastaanottaa 8 bittiä kerrallaan (LSB-bitti ensin). Sarjamuotoinen tieto sekä lähetetään että vastaanotetaan RxD-pinnin ( P3.0) kautta. Vaikkakin 8051 tarjoaa full duplex liikennöinnin, se ei ole käytettävissä moodissa 0, koska siinä lähetys ja vastaanotto tapahtuvat samaa linjaa pitkin. TxD (P3.1) antaa kellosignaalin, jonka taajuus on kellotaajuus/12. Moodi 1 Asynkroninen sarjaliikennöintimoodi (UART = Universal asynchronous receiver/transmitter) 8-bittiselle datalle, jossa baudinopeus voidaan valita. Dataa (LSB ensin) siirretään START- ja STOP-bittien välissä. Lähetys tapahtuu TxD:n ja vastaanotto RxD:n kautta. Baudinopeus on muuteltavissa. 8051 - Sarjaliikenne Toimintatilat Moodi 2 Asynkroninen sarjaliikennöintimoodi 9-bittiselle datalle (9. bittiä käytetään moniprosessorisovelluksissa). Tieto lähetetään muodossa: START-bitti, 8 databittiä, ohjelmoitava 9. databitti, STOP-bitti. Lähetyksessä 9. bitti asetetaan SCON-rekisterin TB8-bittiin ja vastaanotossa 9. bitti menee vastaavasti RB8-bittiin. Baudinopeus voi olla joko kellotaajuus/32 tai kellotaajuus/64. Moodi 3 Muuten samanlainen kuin moodi 2, mutta baudinopeus on muuteltavissa.
8051 - Sarjaliikenne SCON-rekisteri Bitti SM0 SM1 SM2 REN TB8 RB8 TI RI Käyttö SM0=0 ja SM1=0 moodi 0 SM0=0 ja SM1=1 moodi 1 SM0=1 ja SM1=0 moodi 2 SM0=1 ja SM1=1 moodi 3 Sallii moniprosessorikommunikoinnin moodeissa 2 ja 3. Sallii tai estää sarjaliikenteen. Lähetettävä 9. bitti moodeissa 2 ja 3. Vastaanotettava 9. bitti moodeissa 2 ja 3. Lähtevän datan keskeytyslippu asettuu, kun merkki on lähetetty ja bitti pitää nollata ohjelmallisesti. Tulevan datan keskeytyslippu asettuu, kun merkki on lähetetty ja bitti pitää nollata ohjelmallisesti. 8051 - Sarjaliikenne Sarjaportin tiedonsiirtonopeus Sarjaportin tiedonsiirtonopeus täytyy olla muutettavissa. Moodissa 0 siirtonopeus lasketaan kaavasta kello oskillaattorin _ taajuus siirtonopeus = 12 Moodeissa 1 ja 3 siirtonopeus lasketaan kaavasta Ja moodissa 2 siirtonopeus = 2 SMOD * kello oskillaattorin _ taajuus 32*12(256 TH1) SMOD 2 * kello oskillaattorin _ taajuus siirtonopeus = 64 Esimerkiksi nopeus 9600 bittiä/s moodissa 1 saadaan asettamalla Timer 1:n TH1:een arvo FDH.
8051 - Sarjaliikenne Muunnos rinnakkaisesta datasta sarjamuotoon 8051 - Sarjaliikenne Muunnos sarjamuodosta rinnakkaismuotoon
8051 - Sarjaliikenne Moniprosessorisovellus Moodit 2 ja 3 tukevat moniprosessorisovelluksia. Näissä moodeissa käytetään ylimääräistä 9. bittiä, joka käsitellään SCON-rekisterin RB8:ssa ja tulevaa sarjamuotoista tietoa käsitellään ainostaan silloin, kun RB8=1. Tällä tavalla voidaan käyttää useampia rinnakkaisia 8051-piirejä yhden ollessa master- ja muiden ollessa slave-piirejä. Halutessaan lähettää dataa lähettää Master-laite ensin oikean osoitteen väylälle. Tämän osoitteen tutkivat kaikki Slave-laitteet, mutta vain osoitettu orjaprosessori nollaa SM2-lipun (asettaa moodiksi 2 tai 3) ja jatkossa vain osoitettu laite lukee väylällä liikkuvaa tietoa ja muut laitteet jatkavat omia rutiinejaan. Keskeytykset
Keskeytykset Sulautetuissa järjestelmissä ohjelma pyörii päättymättämässä silmukassa. Monesti tapahtumat ovat luonteeltaan asynkronisia eikä näitä voida aina palvella pelkästään pollaamalla piirin I/O-linjoja, vaan joidenkin laitteiden palvelu täytyy hoitaa nopeasti käyttäen keskeytyksiä. Usein tarvitaan myös ajastimilta tulleita keskeytyksiä kellon tai vastaavan toteuttamiseksi. Keskeytykset voidaan jakaa ohjelmallisesti estettäviin keskeytyksiin ehdottomiin keskeytyksiin (non-maskable) Keskeytyspyynnön (Interrupt Request) tapahduttua CPU keskeyttää ohjelman suorituksen ja hyppää keskeytyspalveluohjelmaan. Keskeytyspalveluohjelmassa suoritetaan kaikki keskeyttäneen laitteen kannalta välttämättömät toimenpiteet, jonka jälkeen voidaan palata takaisin keskeytyneeseen ohjelman kohtaan. Keskeytykset Kontrollerin kannalta ulkoiset ja sisäiset keskeytykset eivät poikkea toisistaan. Ulkoinen keskeytys liipaistaan pulssin reunasta tai halutusta tasosta ja prosessorille aiheutuu keskeytyspyyntö, mikäli ko. keskeytys on sallittu. Jokaisella keskeytystyypillä on oma kiinteä keskeytysvektorinsa, jonne keskeytys ohjelmansuorituksen pakottaa. Keskeytysvektorit ovat tyypillisesti vain muutaman tavun mittaisia ja käytännössä sinne ohjelmoidaankin yleensä vain hyppykäsky toiseen muistipaikkaan, jossa keskeytyspalvelu varsinaisesti hoidetaan. Esimerkki: CC2430:n keskeytysvektorit
Esimerkkinä 8051:n keskeytykset 8051 voi käsitellä keskeytyksiä viidestä eri lähteestä: Ulkoiset keskeytykset INT0 ja INT1 aiheuttavat vastaavien keskeytyslippujen IE0 ja IE1 asettumisen Timereilta/Ajastimilta tulevat keskeytykset aiheuttavat lippujen TF0 ja TF1 asettumisen. Keskeytys aiheutuu laskurin ylivuodosta. Sarjaliitäntä aiheuttaa keskeytyksen, kun vastaanottopuskuriin on tullut merkki tai lähetyksessä merkki on lähtenyt lähetyspuskurista. Tyypillisesti sarjaportin keskeytysohjelmassa pitää ohjelmallisesti selvittää TI ja RI-bitistä, kumpi vaihtoehto keskeytyksen on aiheuttanut. Keskeytykset on vektoroitu niin, että jokainen keskeytyslähde aiheuttaa ohjelman suorituksen jatkumisen omasta kiinteästä osoitteestaan ohjelmamuistissa. Kukin viidestä keskeytyslähteestä voidaan sallia tai kieltää erikseen tai ne voidaan sallia ja kieltää ryhmänä. Lisäksi voidaan valita toinen käytettävissä olevista prioriteeteista. Ulkoiset keskeytystulot voidaan ohjelmoida 0-tason tai pulsiin takareunan tunteviksi ja samaan tuloon voidaan OR-portilla kytkeä useampiakin keskeytyspyyntöjä. Kaikki keskeytyspyynnön ilmaisevat liput voidaan asettaa tai nollata myös ohjelmallisesti. Keskeytysten ohjaus tapahtuu IE-rekisterin avulla. 8051 - Keskeytykset Keskeytysrekisteri (Interrupt Enable) Bitti EA ET2 ES ET1 EX1 ET0 EX0 Käyttö Estää kaikki keskeytykset, jos 0. Muutoin kesketysten esto tai sallinta riippuu niiden omasta sallintabitistä. 1 sallii, 0 estää Timer2:n keskeytyksen. 1 sallii, 0 estää sarjaportin keskeytyksen. 1 sallii, 0 estää Timer1:n keskeytyksen. 1 sallii, 0 estää ulkoisen keskeytyksen 1. 1 sallii, 0 estää Timer0:n keskeytyksen. 1 sallii, 0 estää ulkoisen keskeytyksen 0.
8051 - Keskeytykset Keskeytysten prioriteetti Kaikille keskeytyksille voidaan valita kahdesta prioriteettitasosta joko matalampi tai korkeampi keskeytystaso nollaamalla tai asettamalla vastaava bitti IP-rekisteristä (Interrupt Priority). Prioriteetiltaan korkeampi keskeytys voi keskeyttää matalamman prioriteetin keskeytyksen. Jos kaksi saman prioriteetin keskeytystä tapahtuu yhtä aikaa, palvellan sitä keskeytystä, joka on ylempänä keskeytysten sisäisen järjestyksen mukaan. IP-rekisterin rakenne. Jos bitti asetetaan, kyseinen keskeytys korkeammalle prioriteetille. Bitti PT2 PS PT1 PX1 PT0 PX0 Käyttö Timer 2 Sarjaportti Timer 1 Ulkoinen keskeytys 1 Timer 0 Ulkoinen keskeytys 0 8051 - Keskeytykset Intel: MCS@51 MICROCONTROLLER FAMILY USER S MANUAL
Lähteitä I. Scott MacKenzie, Raphael C.-W- Phan, The 8051 Microcontroller, Prentice Hall, 4th ed. Jari Koskinen, Mikrotietokonetekniikka Sulautetut järjestelmät, Otava J. Karppelin, MCS-51 Family of Single Chip Microcomputers User s Manual, luentomoniste Craig Steiner, The 8051/8052 Microcontroller, Universal Publishers Muhammad Ali Mazidi, Janice Gillispie Mazidi, Rolin D. McKinlay, The 8051 Microcontroller and Embedded Systems, Prentice Hall