8031 MIMARI YAPISI
1. 8051 AİLESİ :
8051 microcontroller ailesinin genel özellikleri :
8031 : Chip üzerinde ROM veya EPROM olarak program hafızasına sahip değildir.Program hafızası için P0 ve P2 portları vasıtasıyla harici EPROM'lar kullanılır. Bu durumda P0 ve P2 adresleri giriş çıkış portu olarak kullanılmazlar. Program hafızası için 64 K'lık adresleme kapasitesine sahiptir.
8751 : 8051 ailesinin,entegre üzerinde 4 K kapasiteli EPROM program hafızasına sahip üyesidir. P0,P1,P2 ve P3 portlarının tamamı giriş / çıkış portu olarak kullanılabilir. Program hafızası Eprom olduğu için UV ışınları ile silinerek tekrar programlanabilir.
8051 : Ailenin, '' Mask Rom '' denilen fabrikada üretim esnasında proglamlanan 4 K program kapasiteli hafızaya sahip modelidir. 8751 'den tek farkı hafızasının silinememesi, fabrikada bir defaya mahsus olmak üzere programlanmasıdır.
3 tip chip 'de ihtiyaca göre projelerde kullanılılabilir. 8751 prototip safhada, tekrar tekrar yazılıp silineceğinden çok zaman kaybettirir. Bu nedenle 8031 'li board prototip safhada kullanılması zaman kaybını önler. Bu board'da program hafızası RAM olduğu için yazdığınız programları anında RAM 'e yükleyip test edebilirsiniz. Prototip çalışır hale getirildikten sonra 8031 için yazdığınız programı aynen 8751 için de kullanabilirsiniz. ( eğer programınız 4 K'dan küçükse ) 8751 'in P0 ve P2 portlarını kullanacağınız uygulamalarda board üzerindeki 8255 chip'inin portlarını kullanarak bu şekildeki uygulamalarınızı da simüle edebilirsiniz.
2. 8031 'DE MEMORY ( Hafıza ) ORGANİZASYONU
8051 ailesi, program ve data memory için ayrı adres alanlarına sahiptir. Program memory sadece okunabilen fakat yazılamayan bir hafızadır. 64 K' ya kadar ulaşabilir.
Şekil 2. 8031 Memory Yapısı
EPROM ve ROM versiyonlarda en düşük adres alanı 4 K olarak chip üzerinde mevcuttur. Bu 4 K memory , çeşitli tipteki versiyonlara göre değişiklik gösterebilir.ROMless (8031, üzerinde memory bulunmayan chip ) chiplerde tüm hafıza haricidir ve PSEN ( Program Store Enable ) sinyali ile okunur. External Data Memory, Program Memory'den ayrı adres alanına sahiptir.External Adres Memory de 64 K 'ya kadar adreslenebilir. Bu hafızaya ulaşmak için CPU , WR ( write - yaz ) ve RD ( read-oku ) sinyalleri üretir.
Program Memory :
Şekil 3 de program memory'nin en düşük adres bölümü görülmektedir.Chip'in resetlenmesinden sonra CPU 0000H adresinden itibaren komutları icra etmeye başlar.
FFFFH | ||
: : : | . . . . . . . . . . | |
: : : | . . . . . . . . . . | |
: : : | 002CH- . . . . | |
TF2&EXF2 | 002BH | |
: : : | 0024H-0025H-0026H-0027H-0028H-0029H-002AH | |
RI&TI | 0023H | |
: : : | 001CH-001DH-001EH-001FH-0020H-0021H-0022H | |
TF1 | 001BH | |
: : : | 0014H-0015H-0016H-0017H-0018H-0019H-001AH | |
IE1 | 0013H | |
: : : | 000CH-000DH-000EH-000FH-0010H-0011H-0012H | |
TF0 | 000BH | |
: : : | 0004H-0005H-0006H-0007H-0008H-0009H-000AH | |
IE0 | 0003H | |
: : : | 0001H-0002H | |
RESET | 0000H |
Şekil 3. 8031 Program Memory Haritası
Şekil-3 'de görüldüğü gibi sabit bir adres bölgesi interrupt'lar için ayrılmıştır. Interrupt'lar, programın neresinde olunursa olunsun bu adres bölgelerine sıçramaya neden olurlar. External Interrupt0 için sıçrama adresi 0003h dır. Bu interrupt kullanıldığında program 0003h adresine sıçrayarak bu adresteki komuttan devam eder.
Herbir Interrupt servis bölgesi program hafızasında 8 byte'lık bir yer kaplar. Interrupt servis bölge adresleri:
EXTTERNAL INTERRUPT 0 :0003H - 000AH
EXTTERNAL INTERRUPT 1 :000BH - 0012H
TIMER 0 :0013H - 001AH
TIMER 1 :001BH - 0022H
aralığındadır.
Daha uzun servis bölgesi gereken uygulamalarda bu alanlar daha uzun servis alanlarına sıçrama alanı olarak kullanılır. 8751 ve 8051 de en düşük adres bölgesindeki 0-4 K hafıza aralığı chip üzerindedir. Bu aralığı kullanabilmek için chip'in EA ( External Access-harici ulaşım ) ucu Vcc 'ye bağlanmalıdır. Eğer EA ucu Vss ( şasi ) ye bağlanırsa bu chiplerde Internal Program Hafızası kullanılamaz.
Harici hafıza kullanılmak istendiğinde P0 ve P2 Adres ve Data Bus olarak kullanılır. Bu durumda bu portları Giriş/Çıkış olarak kullanmak uygun değildir. P0 , adres ve data bus olarak kullanılır(multiplex olarak).
Data Memory
Data Memory iki kısımdır.
1.External (harici) Data Memory:
External Data Memory Şekil 2 de de görüldüğü gibi 64K 'ya kadar ulaşabilir External Data Memory'e erişmek için , Program Memory'de de olduğu gibi P0 ve P2, Adres/Data bus olarak kullanılır. Aralarındaki fark : Program memory'i okumak için PSEN ucu kullanılır ve Data Memory'e yazmak için WR, okumak için RD uçları kullanılır.
2.Internal ( dahili ) Data Memory :
Internal Data Memory'nin adres alanları Şekil-4 ve Şekil-5 'de görülmektedir. Internal Data Memory 2 kısıma ayrılmıştır.İlk 00h-7Fh ( 0-127 ) adres aralığı genel amaçlı olarak, ikinci 80h -FF ( 128 - 255 ) adres aralığı SFR (Special Function Register ) alanı olarak kullanılır. Ancak bu alanın tamamı SFR alanı olarak kullanılmaz.
İlk bölümdeki Data Memory direk ve dolaylı olarak adreslenebilirler fakat SFR 'ler sadece direk olarak olarak adreslanebilirler.
. . . -7FH | | | | | | | | | . . . 126-127 | GENEL AMAÇLI |
30H- . . . | | | | | | | | | 48-49- . . . | KULLANILAN REG.'LER |
. . .7F.7 28H-2FH | | | | | | | | | 64-65 . . . . . . . . . . . .126-127 | DİREK ADRESLENEBİLEN |
20.1 . . . 20H-27H | | | | | | | | | 0-1 . . . . . . . . . . . . . . . 62-63 | BIT 'LER |
BANK3 18H-1FH | | | | | | | | | R0-R1-R2-R3-R4-R5-R6-R7 | |
BANK2 10H-17H | | | | | | | | | R0-R1-R2-R3-R4-R5-R6-R7 | REGISTER |
BANK1 08H-0FH | | | | | | | | | R0-R1-R2-R3-R4-R5-R6-R7 | BANKLARI |
BANK0 00H-07H | | | | | | | | | R0-R1-R2-R3-R4-R5-R6-R7 |
Şekil 4. Direk ve Dolaylı Adreslenebilen Internal Memory
F8 | FF | ||||||||
F0 | B |
F7 | |||||||
E8 | EF | ||||||||
E0 | ACC |
E7 | |||||||
D8 | DF | ||||||||
D0 | PSW |
D7 | |||||||
C8 | CF | ||||||||
C0 | C7 | ||||||||
B8 | IP |
BF | |||||||
B0 | P3 |
B7 | |||||||
A8 | IE |
AF | |||||||
A0 | P2 |
A7 | |||||||
98 | SCON |
SBUF |
9F | ||||||
90 | P1 |
97 | |||||||
88 | TCON |
TMOD |
TL0 |
TL1 |
TH0 |
TH1 |
8F | ||
80 | P0 |
SP |
DPL |
DPH |
PCON |
87 |
BIT ADRSLENEBİLİR
Şekil 5. SFR Adresleri3. 8051 INSTRUCTION ( Komut ) SET :
Tüm 8051 ailesi aynı komut setini kullanırlar.8051 komut seti 8 bit'lik kontrol uygulamaları için optimize edilmiştir.
Insruction Set'i açıklamaya geçmeden önce adresleme çeşitlerini ve bazı SFR'lerin özelliklerini bilmek gerekir.
SFR - SPECIAL FUNCTION REGISTERS ( Özel Fonksiyon Registerleri)
Bu registerlerden bazılarının özellikleri :
1.PSW : Program Status Word ( Program Durum Registeri ) - Bit Adreslenebilir.
CY | AC | F0 | RS1 | RS0 | OV | - | P |
CY PSW.7 Carry Flag ( Elde Flag )
AC PSW.6 Auxiliary Carry Flag ( Yardımcı Elde Flag )
F0 PSW.5 Flag 0 ( genel amaçlı flag )
RS1 PSW.4 Register Bank Selector Bit 0 ( Register Bank seçici bit 0 )
RS0 PSW.3 Register bank selector bit'i ( Register Bank seçici bit'i 1 )
OV PSW.2 Owerlow Flag (Aşma Flag'ı )
- PSW.1 User Definable flag (Kullanıcı tarafından tanımlanabilen Flag )
P PSW.0 Parity Flag (Accumulator'deki '' 1 '' lerin sayısının tek veya çift olduğunu belirler.)
PCON : Power Control Register ( Kaynak kontrol registeri ) - Bit adreslenemez.
SMOD | - | - | - | GF1 | GF0 | PD | IDL |
SMOD Double Baud Rate Bit ( Baud Rate'i 2 ile çarpan bit ) : Eğer Baud Rate'i üretmek için Timer1 kullanılıyorsa ve SMOD=1 ise seri port 1,2 veya 3 mod'larında kullanıldığı zaman Baud Rate ile çarpılır.
- Kullanılmıyor.
- Kullanılmıyor.
- Kullanılmıyor.
GF1 Genel amaçlı flag
GF0 Genel amaçlı flag
PD Power Down Bit ( daha sonra açıklanacak )
IDL Idle Mode Bit ( daha sonra açıklanacak )
IE : Interrupt Enable Register ( Interrupt İzin Registeri ) - Bit adreslenebilir.
EA | - | ET2 | ES | ET1 | EX1 | ET0 | EX0 |
EA IE.7 EnableAll ( Hepsine izin ver ) Eğer EA =1 ise tüm interruptlar kendi başlarına kontrol edilebilirler
- IE.6 Kullanılmıyor.
ET2 IE.5 8052'de kullanılır.
ES IE.4 Seri Port Interrupt 'ına izin verir. (veya vermez)
ET1 IE.3 Timer1 Overflow Interrup'ına izin verir. (veya vermez)
EX1 IE.2 External Interrupt1'e izin verir. (veya vermez)
ET0 IE.1 Timer0 Overflow Interrup'ına izin verir. (veya vermez)
EX0 IE.0 External Interrupt0'a izin verir. (veya vermez)
Bir veya daha fazla interrupt için öncelik sıralama :
İç içe geçmiş interrrupt rutinlerinin öncelik sırasının belirlenmesi amacıyla IP (Interrupt Priorty-Interrupt Öncelik) registeri kullanılır.
Interruptların yukarıdan aşağı öncelik sırası:
IE0 External Interrupt 0
IF0 Timer 0 Overflow Interrupt
IE1 External Interrupt 1
IF1 Timer 1 Overflow Interrupt
RI veya TI Seri Port Giriş/Çıkış Interrupt
IP : Interrupt Priority Register ( Interrupt Öncelik Registeri ) - Bit Adreslenebilir.
- | - | PT2 | PS | PT1 | PX1 | PT0 | PX0 |
Eğer bit=0 ise interrupt düşük öncelikli , bit=1 ise yüksek öncelikli olur.
- IP.7 Kullanılmaz
- IP.6 Kullanılmaz
PT2 IP.5 8052 'de kullanılır.
PS IP.4 Seri Port Interrupt öncelik seviyesini belirler.
PT1 IP.3 Timer1 Interrupt öncelik seviyesini belirler.
PX1 IP.2 External Interrupt 1 öncelik seviyesini belirler.
PT0 IP.1 Timer0 Interrupt öncelik seviyesini belirler.
PX0 IP.0 External Interrupt 0 öncelik seviyesini belirler.
TCON : Timer/Counter Kontrol Register'i
TF1 | TR1 | IF0 | TR0 | IE1 | IT1 | IE0 | IT0 |
TF1 TCON.7 Timer1 Overflow Flag. Eğer Timer/Counter1 overflow olursa otomatik olarak 1 olur. Eğer Interrupt servis rutinine yönlendirilirse otomatik olarak 0 olur.
TR1 TCON.6 Timer1 RUN kontrol bit'i. Timer/Counter1'i on/off yapmak için software olarak 1 veya 0 yapılır.
IF0 TCON.5 Timer0 Overflow Flag. Eğer Timer/Counter0 overflow olursa otomatik olarak 1 olur. Eğer Interrupt servis rutinine yönlendirilirse otomatik olarak 0 olur.
TR0 TCON.4 Timer0 RUN Kontrol bit'i. Timer/Counter0 'i on/off yapmak için software olarak 1 veya 0 yapılır.
IE1 TCON.3 External Interrupt1 ucunda interrupt işareti oluştuğunda otomatik 1 olur, interrupt tamamlandığında otomatik 0 olur.
IT1 TCON.2 Interrupt1'in düşen kenarla veya 0 seviyesinde tetiklenmesini belirler. Software ile 1 veya 0 yapılır.
IE0 TCON.1 External Interrupt0 ucunda interrupt işareti oluştuğunda otomatik 1 olur, interrupt tamamlandığında otomatik 0 olur.
IT0 TCON.0 Interrupt0'ın düşen kenarla veya 0 seviyesinde tetiklenmesini belirler. Software ile 1 veya 0 yapılır.
TMOD : Timer/Counter Mode Kontrol Register - Bit adreslenemez.
TMR1 | TMR0 | ||||||
GATE | C/T | M1 | M0 | GATE | C/T | M1 | M0 |
GATE TCON registerindeki TRx =1 ( TimerX - on ) ve GATE = 1 ise Timer /CounterX , INTx ucunun 1 olması durumunda çalışır. GATE= 0 ise Timer / CounterX , TRx = 1 olması durumunda çalışır.
C / T Timer veya Counter seçme bit'i. C/T = 0 ise Timer dahili sistemden clock girişi alır.C/T = 1 ise counter Tx giriş ucundan clock girişi alır.
M1 Mode seçme bit'i
M0 Mode seçme bit'i
M1 M0 Çalışma Modu Açıklama
0 0 0 13 bit timer
0 1 1 16 bit timer/counter
1 0 2 8 bit otomatik yükleme modunda timer/counter
1 1 3 TL0, 8 bit timer/counter olarak timer0 control bitleri tarafından kontrol edilir.
TH0,8 bit Timer olarak Timer1'in kontrol bitleri tarafından kontrol edilir.
1 1 3 Timer/counter1 durdurulur.
SCON : Seri Port Kontrol Registeri - Bit adreslenebilir.
SM0 | SM1 | SM2 | REN | TB8 | RB8 | TI | RI |
SM0 SCON.7 Seri port mode belirleyici ( Tabloya bak )
SM1 SCON.6 Seri port mode belirleyici ( Tabloya bak )
SM2 SCON.5 Çoklu işlemci haberleşme özelliğine izin verir.
REN SCON.4 Seri Porttan giriş/çıkış yapabilmek için 1 veya 0 yapılır
TB8 SCON.3 Mode 2 ve 3 te 9 bit gönderileceğini belirler. Software olarak 1 veya 0 yapılır.
RB8 SCON.2 Mode 2 ve 3 te 9. data bitinin alındığını belirler.Mode 1'de,eğer SM2 = 0 ise,RB8 Stop biti olarak alınır.Mode 0 da RB8 biti kullanılmaz.
TI SCON.1 Gönderme Interrupt Flag'i. Mode0 'da 8.bit'in sonunda ya da diğer mode'larda stop bit'inin başlangıcında otomatik olarak 1 olur. Software olarak 0 yapılmalıdır.
RI SCON0 Alma ( RX ) Interrupt flag. Mode0'da 8. bit'in sonunda ya da diğer modlarda stop bit'inin ortalarında otomatik olarak 1 olur.Software olarak 0 yapılmalıdır.
SM0 SM1 MODE TANIM BAUD-RATE
0 0 0 Shift Register Fosc / 12
0 1 1 8 Bit UART Değişken
1 0 2 9 Bit UART Fosc / 64 veya Fosc /32
1 1 3 9 Bit UART Değişken
Baud Rate'i Belirleme
Mode0 için Seri Port :
Timer/Counter kullanmaya gerek yoktur. SCON registerinin Mode0'a ayarlanması yeterlidir.
BaudRate = ( Osc.Frekansı / 12 )
Mode1 için Seri Port :
Baud Rate Timer1 tarafından belirlenir.
Baud Rate'i üretmek için Timer/Counter1 Mode2 'de çalıştırılır. TH1 'in yüklenmesi gereken değer
TH1 = 256 - (K x Osc.Frekansı) / ( 384 x BaudRate)
Eğer SMOD = 0 ise K = 1
Eğer SMOD = 1 ise K = 2 olur.
Örnek :
İstenilen BaudRate = 9600 ve Osc.Frekansı 11,052 MHz olsun. TH1 'e yüklenecek değer :
TH1 = 256 - (1 x 11.052.000) / (384 x 9.600)
= 256 - 2,99
= 253
TH1 değeri 253 ( 0FDh ) olacaktır.
Mode2 için Seri Port :
PCON Registerindeki SMOD bit'inin değerine ve Osc.Frekansına bağlıdır. Bu modda Timer kullanılmaz.
SMOD = 1 için Baud Rate = Osc.Frekansı / 32
SMOD = 0 için Baud Rate = Osc.Frekansı / 64 olur.
SMOD bit'ini 1 yapmak için " ORL PCON,#80H " komutu kullanılır.
Mode3 için Seri Port :
Mode3 için Baud Rate değişkendir ve Mode1 'deki gibi ayarlanır.