Gömülü Sistemler - Kayıtlar
Kayıtlar CPU'da, işlenecek veriler veya alınacak verilere işaret eden bir adres olabilecek bilgileri geçici olarak depolamak için kullanılır. 8051'de, MSB (en anlamlı bit) D7'den LSB'ye (en az anlamlı bit) D0'a kadar 8 bitlik bir veri türü vardır. 8 bit veri türü ile, 8 bitten büyük herhangi bir veri türü işlenmeden önce 8 bitlik parçalara bölünmelidir.
8051'in en yaygın kullanılan yazmaçları A (akümülatör), B, R0-R7, DPTR (veri işaretçisi) ve PC'dir (program sayacı). DPTR ve PC dışında tüm bu yazmaçlar 8 bittir.
8051'de Depolama Kayıtları
Aşağıdaki depolama kaydı türlerini burada tartışacağız -
- Accumulator
- R kaydı
- B kaydı
- Veri İşaretçisi (DPTR)
- Program Sayacı (PC)
- Yığın İşaretçisi (SP)
Akümülatör
Akümülatör, kayıt A, tüm aritmetik ve mantık işlemleri için kullanılır. Akümülatör yoksa, her hesaplamanın her sonucu (toplama, çarpma, kaydırma vb.) Ana belleğe kaydedilecektir. Ana belleğe erişim, akümülatör gibi bir yazmacıya erişimden daha yavaştır çünkü büyük ana bellek için kullanılan teknoloji, bir yazmaç için kullanılandan daha yavaştır (ancak daha ucuzdur).
"R" Kayıtları
"R" kayıtları, R0, R1 ila R7 olmak üzere sekiz kayıtlık bir settir. Bu kayıtlar, birçok işlemde yardımcı veya geçici depolama kayıtları olarak işlev görür. 10 ve 20 toplamının bir örneğini düşünün. Bir 10 değişkenini bir akümülatörde ve başka bir 20 değişkenini, örneğin R4 kaydında saklayın. Ekleme işlemini işlemek için aşağıdaki komutu yürütün -
ADD A,R4
Bu talimatı uyguladıktan sonra, akümülatör 30 değerini içerecektir. Bu nedenle "R" kayıtları çok önemlidir yardımcı veya helper registers. Biriktirici, bu "R" kayıtları için olmasaydı, tek başına çok kullanışlı olmazdı. "R" kayıtları, değerlerin geçici olarak depolanması içindir.
Başka bir örnek alalım. R1 ve R2'deki değerleri toplayıp daha sonra sonuçtan R3 ve R4 değerlerini çıkaracağız.
MOV A,R3 ;Move the value of R3 into the accumulator
ADD A,R4 ;Add the value of R4
MOV R5,A ;Store the resulting value temporarily in R5
MOV A,R1 ;Move the value of R1 into the accumulator
ADD A,R2 ;Add the value of R2
SUBB A,R5 ;Subtract the value of R5 (which now contains R3 + R4)
Gördüğünüz gibi, geçici olarak R3 ve R4 toplamını tutmak için R5 kullandık. Elbette, bu (R1 + R2) - (R3 + R4) 'ü hesaplamanın en verimli yolu değildir, ancak değerleri geçici olarak depolamanın bir yolu olarak "R" kayıtlarının kullanımını göstermektedir.
"B" Kaydı
"B" kaydı, 8 bitlik (1 baytlık) bir değeri tutabilmesi açısından Akümülatöre çok benzer. "B" kaydı yalnızca iki 8051 talimatı tarafından kullanılır:MUL AB ve DIV AB. A'yı başka bir sayı ile hızlı ve kolay bir şekilde çarpmak veya bölmek için, diğer sayıyı "B" ye kaydedebilir ve bu iki talimattan yararlanabilirsiniz. MUL ve DIV komutlarının kullanılmasının yanı sıra, "B" yazmacı, genellikle dokuzuncu R yazmacı gibi başka bir geçici depolama kaydı olarak kullanılır.
Veri İşaretçisi
Veri İşaretçisi (DPTR), 8051'in kullanıcı tarafından erişilebilen tek 16 bitlik (2 bayt) kaydıdır. Akümülatör, R0 – R7 kayıtları ve B kaydı 1 baytlık değer kayıtlarıdır. DPTR, verilere işaret etmek içindir. 8051 tarafından DPTR tarafından belirtilen adresi kullanarak harici belleğe erişmek için kullanılır. DPTR, mevcut tek 16 bitlik kayıttır ve genellikle 2 baytlık değerleri depolamak için kullanılır.
Program Sayacı
Program Sayacı (PC) 2 baytlık bir adrestir ve 8051'e bir sonraki yürütülecek komutun bellekte nerede bulunabileceğini söyler. PC, 8051 başlatıldığında 0000h'de başlar ve bir komut yürütüldükten sonra her seferinde artırılır. PC her zaman 1 artmaz. Bazı talimatlar 2 veya 3 bayt gerektirebilir; bu gibi durumlarda, PC 2 veya 3 artırılacaktır.
Branch, jump, ve interruptişlemler, Program Sayacını sonraki sıralı konumdan farklı bir adresle yükler. Açılışta sıfırlamanın etkinleştirilmesi, kayıt defterindeki tüm değerlerin kaybolmasına neden olacaktır. Bu, sıfırlama üzerine PC'nin değerinin 0 olduğu anlamına gelir ve CPU'yu 0000 ROM konumundan ilk işlem kodunu almaya zorlar. Bu, yukarı kodun ilk baytını 0000 ROM konumuna yerleştirmemiz gerektiği anlamına gelir, çünkü CPU bu ilk talimat.
Yığın İşaretçisi (SP)
Yığın İşaretçisi, DPTR ve PC dışındaki tüm kayıtlar gibi 8 bitlik (1 bayt) bir değer tutabilir. Yığın İşaretçisi, bir sonraki değerin yığından kaldırılacağı konumu belirtir. Yığına bir değer itildiğinde, SP'nin değeri artırılır ve ardından değer, sonuçtaki bellek konumunda depolanır. Yığından bir değer çıkarıldığında, değer SP ile gösterilen bellek konumundan döndürülür ve ardından SP'nin değeri azaltılır.
Bu işlem sırası önemlidir. 8051 başlatıldığında SP 07h olarak başlatılacaktır. Yığın üzerine aynı anda bir değer itilirse, değer dahili RAM adresi 08h'de saklanacaktır çünkü 8051 önce SP değerini artıracak (07h'den 08h'ye) ve sonra basılan değeri bu bellekte saklayacaktır. adres (08h). SP altı talimatla doğrudan 8051 tarafından değiştirilir: PUSH, POP, ACALL, LCALL, RET ve RETI.
8051'de ROM Alanı
8051'in bazı aile üyeleri yalnızca 4K bayt çip üzerinde ROM'a sahiptir (örn. 8751, AT8951); bazıları AT89C52 gibi 8K ROM'a sahiptir ve Dallas Semiconductor gibi 32K byte ve 64K byte on-chip ROM'a sahip bazı aile üyeleri vardır. Hatırlanması gereken nokta, 8051 ailesinin hiçbir üyesinin 64K bayttan fazla opcode'a erişemeyeceğidir, çünkü 8051'deki program sayacı 16 bitlik bir kayıttır (0000 - FFFF adresi).
8051 içindeki program ROM'unun ilk konumu 0000H adresine sahipken, son konum çip üzerindeki ROM'un boyutuna bağlı olarak farklı olabilir. 8051 aile üyeleri arasında AT8951, 0000 (ilk konum) ila 0FFFH (son konum) arasında bir bellek adresine sahip $ k bayt çip üzerinde ROM'a sahiptir.
8051 Bayrak Bitleri ve PSW Kaydı
Program durum kelimesi (PSW) kaydı, 8 bitlik bir kayıttır, aynı zamanda flag register. 8 bit genişliğindedir, ancak yalnızca 6 biti kullanılır. Kullanılmayan iki bituser-defined flags. Bayraklardan dördü çağrıldıconditional flagsbu, bir talimatın yerine getirilmesinden sonra ortaya çıkan bir koşulu gösterdikleri anlamına gelir. Bu dördüCY (Taşımak), AC (yardımcı taşıma), P (parite) ve OV(taşma). RS0 ve RS1 bitleri banka kayıtlarını değiştirmek için kullanılır. Aşağıdaki şekil program durum kelime kaydını gösterir.
PSW Kaydı, CPU'nun mevcut durumunu yansıtan durum bitlerini içerir.
CY | CA | F0 | RS1 | RS0 | OV | - | P |
---|
CY | PSW.7 | Taşıma Bayrağı |
AC | PSW.6 | Yardımcı Taşıma Bayrağı |
F0 | PSW.5 | Genel amaçlı kullanıcı için 0 işaretleyin. |
RS1 | PSW.4 | Banka seçici bit 1'i kaydedin |
RS0 | PSW.3 | Banka seçici bit 0'ı kaydedin |
OV | PSW.2 | Taşma İşareti |
- | PSW.1 | Kullanıcı tanımlı BAYRAK |
P | PSW.0 | Parite BAYRAĞI. Akümülatördeki 1 bitin çift / tek sayısını belirtmek için komut döngüsü sırasında donanım tarafından ayarlanır / temizlenir. |
RS0 ve RS1 bitlerini kullanarak karşılık gelen Register Bank bitini seçebiliriz.
RS1 | RS2 | Kayıt Bankası | Adres |
---|---|---|---|
0 | 0 | 0 | 00H-07H |
0 | 1 | 1 | 08H-0FH |
1 | 0 | 2 | 10H-17H |
1 | 1 | 3 | 18H-1FH |
CY, the carry flag- Bu taşıma bayrağı, D7 bitinden bir gerçekleştirme olduğunda (1) ayarlanır. 8 bitlik bir toplama veya çıkarma işleminden sonra etkilenir. Ayrıca "SETB C" ve "CLR C" gibi bir komutla doğrudan 1 veya 0'a sıfırlanabilir, burada "SETB" set bit taşıma anlamına gelir ve "CLR" net taşıma anlamına gelir.
AC, auxiliary carry flag- Bir ADD veya SUB işlemi sırasında D3 ve D4'ten bir taşıma varsa, AC biti ayarlanır; aksi takdirde temizlenir. İkili kodlu ondalık aritmetik yapmak için komut için kullanılır.
P, the parity flag- Eşlik bayrağı, yalnızca akümülatör yazmacındaki 1'lerin sayısını temsil eder. A kaydı tek sayıda 1'ler içeriyorsa, P = 1; ve çift sayı 1'ler için P = 0.
OV, the overflow flag- Bu bayrak, işaretli sayı işleminin sonucu çok büyük olduğunda, yüksek sıralı bitin işaret bitine taşmasına neden olduğunda ayarlanır. Yalnızca işaretli aritmetik işlemlerde hataları tespit etmek için kullanılır.
Misal
Aşağıdaki talimatta 9CH ve 64H eklendikten sonra CY, AC ve P bayraklarının durumunu gösterin.
MOV A, # 9CH
A EKLE, # 64H
Solution: 9C 10011100
+64 01100100
100 00000000
CY = 1 since there is a carry beyond D7 bit
AC = 0 since there is a carry from D3 to D4
P = 0 because the accumulator has even number of 1's