Cím: Mikrovezérlık története (nagyon) röviden Készítette: Motika László Károly SZTE TTK Mérnök Informatikus I. félév 2006. november
Mikrovezérlık története (nagyon) röviden A beágyazott számítógépeket (melyeket mikrovezérlıknek is neveznek.) széles körben használják. A körülöttünk lévı elektromos eszközök akár nagyszámban tartalmazhatnak beágyazott számítógépeket. Egy modern autóban 10-50, egy repülıgépben akár több száz darab is lehet. A körülöttünk lévı háztartásokban használt eszközök is tartalmaznak ilyen eszközöket. Például: Háztartási eszközökben: automata mosógép, mikrohullámú sütı, Lakás főtı, -hőtı berendezések, riasztó berendezésekben, idı- víz- villanyfogyasztás mérı berendezések. Kommunikációs eszközökben: kaputelefon, telefon, telefax berendezések, üzenetrögzítı. Szórakoztató elektronikai eszközök: rádió, televízió, videó magnó, DVD lejátszó. Játékok: játékkonzolok, távvezérelt játékok. Orvosi berendezések: vérnyomásmérı, vércukor szintmérı. Egyéb eszközök: étel- ital- bank- automaták. Ezek az eszközök egyetlen lapkára integrált komplett számítógépek, tartalmazzák a mőködésükhöz szükséges processzort (CPU-t), memóriát, illetve perifériavezérlıt. A perifériák lehetnek nyomógombok, érzékelık, szenzorok. Kimenetei lehetnek valamilyen megjelenítık (pl.: LCD -kijelzı, LED -dióda, visszajelzı lámpák.), illetve adat kimenetek pl.: soros port. Kimenetei vezérelhetnek valamilyen eszközt pl.: motorvezérlés, vagy akár csak egy kapcsoló. A mikroprocesszor típusától függetlenül egy mikrogépnek a következı fıbb részekkel kell rendelkeznie: a központi egység (ez a mikroprocesszor). A mikroprocesszor a mikrogép központi egysége. Az eredeti angol elnevezése alapján szokták CPU-nak is mondani. Jellemzıi alapvetıen meghatározzák a teljes mikrogép mőködését. Funkcióit a következıképpen foglalhatjuk össze: 1. A mikrogép minden eleme számára biztosítja az idızítı és vezérlıjeleket. 2. Elvégzi az adatok és utasítások tárból/ba való mozgatását. 3. Dekódolja és végrehajtja az utasításokat. 4. Irányítja a be/kimeneti egységekkel kapcsolatos adatforgalmat. a programtár és adattár (ez a memória, ami lehet közös (pl. PC-nél), vagy különálló), az egyikben a mőködtetı program, a másikban a program mőködése során létrejövı, vagy a külvilág felıl érkezı adatok vannak tárolva, a be és kiviteli egység, (Input/Output, röviden I/O, vagy Be/Ki egység) (ezek neve: periféria) amely a külvilággal tartja a kapcsolatot, az egységek közötti információ- és adatáramlást biztosító vonalak. Ez a kommunikáció az ún. síneken vagy más néven, busz vonalakon keresztül valósul meg. A sín azonos funkciójú vezetékek csoportja. Erre a vezetékkötegre minden egység párhuzamosan kapcsolódik azért, hogy egymáshoz információt tudjon továbbítani. Például a mikroprocesszor, a memória valamint a be- és kimeneti áramkörök, az egymás (és a külvilág) közötti adatcsere érdekében ugyanarra a nyolc vezetékre kapcsolódnak, és ez az adatsín. A mikrovezérlık vagy már eleve a gyártó által beégetett szoftverre, vagy a felhasználó által programozható állapotba kerülnek forgalomba. Az elıre programozott vezérlıket általában valamilyen konkrét feladatra rendelik a gyártótól. A vezérlı program nélküli üres mikrovezérlıket a felhasználók programozhatják, ezeket fejlesztési, kísérleti, célokra gyártják. Kis darabszámú kísérleti eszközök gyártásához.
1969-ben a Japán BUSICOM cég mérnökei, megbízták az amerikai Intel céget egy számológépekhez használható, integrált áramkör megtervezésével, legyártásával. Az Intel-nél a projekt felelıse, Marcian Hoff lett. Az általa javasolt megoldásban az áramkör mőködését a benne tárolt program határozza meg. Ezáltal az áramkör egyszerőbb felépítéső lett, de több memóriát igényelt. Ezt a megoldást tekinthetjük a világ elsı mikroprocesszorának. A gyakorlati megvalósításban nagy szerepet játszott Frederico Faggin. Az Intel 1971-ben a BUSICOM cégtıl visszavásárolt szabadalom alapján kezdte gyártani a 4004 nevő mikroprocesszort. Ez volt a világ elsı 4 bites mikroprocesszora.(másodpercenként 6000 mővelet elvégzésére volt képes) 1972-ben az Intel bemutatta a 8008 nevő processzorát. Ez egy 8 bites 16 kb memóriával ellátott processzor volt, 45 paranccsal rendelkezett, és 300 ezer utasítást hajtott végre másodpercenként. Az Intel-nél tovább fojtatták a kutatást, aminek eredményeként 1974-ben bemutatták a 8080-as mikroprocesszort.(75 parancsa, és 64 kb memóriája volt) Az Intel fejlesztéseivel párhuzamosan más cégek is elkezdték fejleszteni saját processzoraikat. Az egyik ilyen cég a Motorola volt. Az általuk gyártott eszköz, a 6800 típusjelő 8-bites processzor volt. A Motorola fımérnöke Chuck Peddle volt. A Motorola gyártott elsıként eltérı perifériával processzorokat. Ezek a 6820, és 6850 típusok voltak. A motorolán kívül több cég is kifejlesztette saját mikroprocesszorát. Chuck Peddle a MOS Technology-nál fojtatta a munkáját. A MOS, kifejlesztette a 6501, és 6502 (8 bites, 56 utasításos) mikroprocesszorokat, amit a 1975-ben a WESCON kiállításon meg is lehetett vásárolni. A Motorola beperelte a MOS Technology-t azzal vádolva, hogy lemásolták a 6800-t. A MOS abbahagyta a 6501 gyártását, de a 6502-t fojtatta. A 6502 alacsony ára miatt nagyon népszerő processzor volt, a következı számítógépeket építették vele: KIM-1, Apple-1, Apple-2, Atari, Commodore, Acorn, Oric, Galeb, Orao, Ultra stb A 6502-t különbözı gyártók is elkezdték gyártani (NCR, Commodore, GTE, Ricoh) 15millió darabot adtak el egy év alatt. Frederico Faggin Zilog néven céget alapított. 1976-ban bemutatták saját Z80-névre keresztelt mikroprocesszorukat. A Z80 kompatibilis volt a 8080-al.(képes volt futatni a 8080-ra irt programokat) de kiegészítették új utasításokkal is. A Z80 korának meghatározó nagyon erısprocesszora volt. 1976-ban az Intel bemutatta a 8085-ös (8 bites) mikroprocesszorát. A Z80 ennél is jobbnak bizonyult. Fejlesztettek még néhány processzort pl.: 6809, 2650, SC/MP, de egyik sem tudott semmi újabbat a már létezı processzoroknál. Az Intel elvesztette az elınyét nem tudott újabbat 8- bites processzort feltalálni. 1976-ban vált ketté a mikroprocesszor, és a mikrovezérlı. A mikrovezérlı (Mikrokontroller) egy teljes vezérlési feladatokra tervezett, mikroszámítógép, tartalmaz egy CPU-t kiegészítve a mikroszámítógépek több elemével. A mikrokontrollerek csökkentett, vezérlési feladatokra tervezett utasításkészlettel rendelkeznek. A mikrokontrollereket arra tervezték, hogy önmagukban is el tudjanak látni vezérlési feladatokat. Ha egy mikrokontroller csak több elektronikával kiegészítve képes ellátni a vezérlési feladatot, akkor vagy nem jó vezérlıt választottunk, vagy nem mikrovezérlınek való a feladat. A 8051 története 1976-ban kezdıdött el. A gyártók a készülékeikbe 8080 CPU-t, memóriát, és perifériaillesztıket építettek be. Felmerült az igény a gyártók részérıl hogy az egész számítógépet egyetlen lapkára integrálják. Az Intel elkészítette a 8748-as mikrovezérlıt (17 ezer tranzisztort, 1kB ROM-ot, 64 kb RAM-ot, egy 8 bites idızítıt, és 27 perifériaillesztıt tartalmazott). 1980-ban az Intel elkészítette a 8051-es vezérlıjét. (60 ezer tranzisztort, 4kB ROM-ot, 128 kb RAM-ot 32B/K vonalat, egy soros port-ot, két 16 bites idızítıt tartalmazott. ) A 8051-es vezérlı ipari szabvány lett az idık folyamán. Ez a mikrokontroller-sorozat a mai napig igen népszerő, sok után gyártott vezérlınek is ez az alapja. (Pl.: Philips, Siemens) Az Intel kifejlesztette a 16-bites 8096 típusjelő változatot is.
AZ INTEL MCS51 CSALÁD: A 8051 mikrokontroller-e 64 Kbájt külsı adatmemóriát és 64 Kbájt külsı programmemóriát tud kezelni. A mikrovezérlıket áramkör családként is szokták emlegetni. A család tagjai azonos processzorral, de eltérı tulajdonságokkal rendelkeznek. Pl.: eltérı portok, memóriaméret, memória típus. A család minden tagjában van belsı adatmemória (RAM), illetve egyes típusokban belsı programmemória (ROM/EPROM) is található. A belsı adat- és programtároló nagysága a család egyes tagjainál különbözı. A családelv azt a célt szolgálja, hogy a célnak leginkább megfelelı típust választhassuk ki. Típus Adattár (bájt) Programtár 8051 128 4 Kbájt ROM 8052 256 8 Kbájt ROM 80C51 128 4 Kbájt ROM 8031 128 Nincs 8032 256 Nincs 80515 256 8 Kbájt ROM 80535 256 Nincs 8751 128 4 Kbájt EPROM 8752 256 8 Kbájt EPROM 80517 256 8 Kbájt ROM 8537 256 Nincs A család egy megkülönböztetett változata a 8751 típusjelő. (Ehhez hasonlóan kapható a 8752 típus is. ) E típusokba nem ROM-ot, hanem EPROM-ot integrálnak. A programfejlesztésnél a tesztelés és esetleges módosítás lehetıségét biztosítja az EPROM. A végleges maszk elkészítése elıtt, az esetleges programhibánál az EPROM törölhetı és újra írható. Így csak a valóban helyes program kerül maszkolásra a gyártásban. Felhasznált Irodalom: Andrew S. Tanenbaum Számítógép Architektúrák Vörös Tamás PIC Kezdıknek (Hobby Elektonika Füzetek 3.) Internet: http://www.aut.bmf.hu/konya/mikro/mcs51_www/index.htm http://www.8052.com/ Az INTEL, a MOTOROLA, a MOS Technology, Philips, Siemens, az Amerikai Egyesült Államokban és/vagy más országokban bejegyzett védjegyek. Minden más termék- vagy szolgáltatásnév, védjegye lehet egy gyártónak. Ezek említése kizárólag informatív jelleggel történik.
MCS51 UTASÍTÁS - KÉSZLET Utasítás Adatátviteli utasítások bájt cikl MOV A,Rn Regisztert mozgat az A-ba 1 1 MOV A,direct Direkt bájtot mozgat az A-ba 2 1 MOV A,@Ri Indirekt RAMot mozgat az A-ba 1 1 MOV A,#data Adatot mozgat az A-ba 2 1 MOV Rn,A A-t mozgat a regiszterbe 1 1 MOV Rn,direct Direkt bájtot mozgat a Rn-be 1 2 MOV Rn,#data Adatot mozgat a regiszterbe 2 1 MOV direct,a A-t mozgat egy direct bájtba 2 1 MOV direct,rn Rn-et mozgat egy direct bájtba 2 2 MOV direct,direct Direkt bájtot mozg. direkt bájtba 3 2 MOV direct,@ri Indirekt RAM-ot direct bájtba 2 2 MOV direct,#data Adatot direct bájtba 3 2 MOV @Ri,A A-t indirect RAM-ba 1 1 MOV @Ri,direct Direkt bájtot indirect RAM-ba 2 2 MOV @Ri,#data Adatot indirect RAM-ba 2 1 MOV DPTR,#data16 Adatmutató feltöltése 16bit-tel 3 2 MOVC A,@A+DPTR A-ba a prog.mem-ból(eltolt cím)s 1 2 MOVC A,@A+PC A-ba a prog.mem-ból(eltolt cím) 1 2 MOVX A,@Ri A-ba a küls RAM-ból(cim 8 bit) 1 2 MOVX A,@DPTR A-ba a küls RAM-ból(cim16bit) 1 2 MOVX @Ri,A A-t a küls RAM-ba(cim 8 bit) 1 2 MOVX @DPTR,A A-t a küls RAM-ba(cim 16 bit) 1 2 PUSH direct Egy bájt behelyezése a zsákba 2 2 POP direct Egy bájt kivétele a zsákból 2 2 XCH A,Rn Regiszter és A cseréje 1 1 XCH A,direct Egy direct bájt és A cseréje 2 1 XCH A,@Ri Indirekt RAM és A cseréje 1 1 XCHD A,@Ri Indirekt RAM és A alsó 4 bitének cseréje 1 1 Utasítás Aritmetikai utasítások bájt Cikl ADD A,Rn A=A+regiszter 1 1 ADD A,direct A=A+direct bájt 2 1 ADD A,@Ri A=A+indireck RAM 1 1 ADD A,#data A=A+adat 2 1 ADDC A,Rn A=A+regiszter+Cy 1 1 ADDC A,direct A=A+direct bájt+cy 2 1 ADDC A,@Ri A=A+indirect RAM+Cy 1 1 ADDC A,#data A=A+adat+Cy 2 1 SUBB A,Rn A=A-regiszter-Cy 1 1 SUBB A,direct A=A-direct bájt-cy 2 1 SUBB A,@Ri A=A-indirekt RAM-Cy 1 1 SUBB A,#data A=A-adat-Cy 2 1 INC A A=A+1 1 1 INC Rn Regiszter=Regiszter+1 1 1 INC direct Direkt bájt=direkt bájt+1 2 1 INC @Ri Indirekt RAM = indirekt RAM+1 1 1 INC DPTR DPTR = DPTR+1 1 2 DEC A A=A-1 1 1 DEC Rn Regiszter=Regiszter-1 1 1 DEC direct Direkt bájt=direkt bájt-1 2 1 DEC @Ri Indirekt RAM = indirekt RAM-1 1 1 MUL AB BA=A*B 1 4 DIV AB A=A/B maradék B-ben 1 4 DA A ACC decimális korrekciója 1 1 Utasítás Logikai és boole- utasítások bájt cikl ANL A,Rn A= A.ÉS.regiszter 1 1 ANL A,direct A= A.ÉS.direkt bájt 2 1 ANL A,@Ri A= A.ÉS.indirekt RAM 1 1 ANL A,#data A= A.ÉS.adat 2 1 ANL direct,a Direkt báj= A.ÉS.direkt bájt 2 1 ANL direct,#data Direkt báj= direkt bájt.és.adat 3 2 ORL A,Rn A= A.VAGY.regiszter 1 1 ORL A,direct A= A.VAGY.direkt bájt 2 1 ORL A,@Ri A= A.VAGY.indirekt RAM 1 1 ORL A,#data A= A.VAGY.adat 2 1 ORL direct,a Direkt báj= A.VAGY.direkt bájt 2 1 ORL direct,#data Direkt báj= direkt bájt.vagy.adat 3 2 XRL A,Rn A= A.KIZÁRÓ VAGY.regiszter 1 1 XRL A,direct A= A. KIZÁRÓ VAGY.direkt bájt 2 1 XRL A,@Ri A= A. KIZÁRÓ VAGY.indirekt RAM 1 1 Megjegyzések: Utasítás Logikai és boole- utasítások bájt cikl. XRL A,#data A= A. KIZÁRÓ VAGY.adat 2 1 XRL direct,a Direkt báj= direkt bájt.kizáróvagy.a 2 1 XRL direct,#data Direktbáj=direktbájt.KIZÁRÓVAGY.adat 3 2 CLR A Törli A-t 1 1 CPL A Komplementálja A-t 1 1 RL A Balra forgatja A-t 1 1 RLC A Balra forgatja A-t a Cy-n keresztül 1 1 RR A Jobbra forgatja A-t 1 1 RRC A Jobbra forgatja A-t a Cy-n keresztül 1 1 SWAP A Felcseréli A alsó és fels 4 bit-ét 1 1 CLR C Törli a Cy-t 1 1 CLR bit Törli a bitet 2 1 SETB C Egybe állítja a Cy-t 1 1 SETB bit Egybe állítja a bitet 2 1 CPL C Komplementálja a Cy-t 1 1 CPL bit Komplementálja a bitet 2 1 ANL C,bit Cy=Cy.ÉS.bit 2 2 ANL C,/bit Cy=Cy.ÉS.bit negáltja 2 2 ORL C,bit Cy=Cy.VAGY.bit 2 2 ORL C,/bit Cy=Cy.VAGY.bit negáltja 2 2 MOV C,bit Cy=bit 2 1 MOV bit,c Bit=Cy 2 2 JC rel Ugorjon ha a Cy=1 2 2 JNC rel Ugorjon ha a Cy=0 2 2 JB bit,rel Ugorjon ha a bit=1 3 2 JNB bit,rel Ugorjon ha a bit=0 3 2 JBC bit,rel Ugorjon ha a bit=1 és törölje a bitet 3 2 Utasítás Vezérl utasítások bájt cikl. ACALL addr11 Szubrutin hívás 11 bites cím esetén 2 2 LCALL addr16 Szubrutin hívás 16 bites cím esetén 3 2 RET Visszatérés a szubrutinból 1 2 AJMP addr11 Feltétel nélküli ugrás 11 bites címre 2 2 LJMP addr16 Feltétel nélküli ugrás 16 bites címre 3 2 SJMP rel Feltétel nélküli ugrás közelre 2 2 JMP @A+DPTR Feltétel nélküli ugrás indirekt címre 1 2 JZ rel Ugrás ha A=0 2 2 JNZ rel Ugrás ha A nem 0 2 2 CJNE A,direct,rel Összehasonlítja az A-t és a címet és ugrik ha 3 2 nem egyenl CJNE A,#data,rel Összehasonlítja az A-t és az adatot és ugrik 3 2 ha nem egyenl CJNE Rn,#data,rel Összehasonlítja a regisztert és az adatot és 3 2 ugrik ha nem egyenl CJNE @Ri,#data,rel Összehasonlítja az indireckt RAM-ot és az 3 2 adatot és ugrik ha nem egyenl DJNZ Rn,rel Csökkenti az Rn tartalmát 1-el és ugrik ha Rn 3 2 nem egyenl 0-val DJNZ direct,rel Csökkenti az direct bájt tartalmát 1-el és ugrik 3 2 ha nem egyenl 0-val NOP Üres utasitás 1 1 RETI Visszatérés megszakítás kiszolgáló rutinból 1 1 READ-MODIFY-WRITE utasítások Utasítás Példa Utasítás Példa ANL ANL P2,A DEC DEC P1 ORL ORL P1,A DJNZ DJNZ P1,rel XRL XRL P1,A MOV MOV P2.1,C JBC JBC P2.2,re CLR CLR P1.0 CPL CPL P1.1 SETB SETB P1.0 INC INC P1 A flag-eket állító utasítások Utasítás CY OV AC Utasítás CY OV AC ADD X X X RLC X ADDC X X X SETB C X SUBB X X X CLR C X MUL 0 X CPL C X DIV 0 X ANL C,bit X DA X ANL C,/bit X RRC X ORL C,bit X RLC X ORL C,/bit X SETB C X MOV C,bit X CLR C X CJNE X CPL C X