8051 INSTRUCTION ( KOMUT ) SET
Komutların yazılmasında kullanılan registerler ve adresleme çeşitleri ile ilgili açıklamalar :
Rn : Seçilen register banktaki R0,R1,R2,R3,R4,R5,R6,R7 Registerlerini gösterir.
@Ri :R0 ve R1 registerlerini ifade eder. Internal Data Memory adreslerini indirect (dolaylı) olarak belirtir.
#data16 : 16 bit'lik sabit sayıyı belirtir.
KOMUTLAR TANIMI :
ARITMETIK KOMUTLAR
ADD A,Rn ACC'ye Rn'yi ekle
ADD A,direct ACC'ye memory'i direk ekle
ADD A,@Rl ACC'ye dolaylı belirtilen memory'i ekle
ADD A,#data ACC'ye direk sabit ekle
ADDC A,Rn ACC'ye Rn'yi carry(elde) ile birlikte ekle
ADDC A,direct ACC'ye memory'i elde ile birlikte ekle
ADDC A@Ri ACC'ye dolaylı belirtilen memory'i elde ile birlikte ekle
ADDC A,#data ACC'ye direk sabiti elde ile birlikte ekle
SUBB A,Rn ACC'den Rn'yi eldeli çıkar
SUBB A,direct ACC'den memory'i eldeli çıkar
SUBB A, @Ri ACC'den dolaylı belirtilen memory'i eldeli çıkar
SUBB A,#data ACC'den direk sabit'i eldeli çıkar
INC A ACC 'yi 1 artırır
INC Rn Registeri 1 artır
INC direct Memory'i 1 artır
INC @Ri Dolaylı belirtilen memory'i 1 artır
DEC A ACC'yi 1 azalt
DEC Rn Registeri 1 azalt
DEC direct Memory'i bir azalt
DEC @Ri Dolaylı belirtilem memory'i 1 azalt
INC DPTR Data Pointer'i 1 artır
MULL AB ACC ve B'yi çarp
DIV AB ACC'yi B'ye böl
DA A ACC'yi decimal ayarla
LOGICAL KOMUTLAR :
ANL A,Rn Registeri ACC'ye AND'le
ANL A,direct Memory'i ACC'ye AND'le
ANL A, @Ri Dolaylı belirtilen memory'i ACC ye AND'le
ANL A, #data Sabit sayyyy ACC ye AND'le
ANL direct,A ACC'yi Memory'e AND'le
ANL direct,#data Sabit sayıyı memory'e AND'le
ORL Arn Registeri ACC'ye OR'la
ORL A,direct Memory'i ACC'ye OR'la
ORL A,@Ri Dolaylı belirtilen memory'i ACC'ye OR'la
ORL A,#data Sabit sayıyı ACC'ye OR'la
ORL direct,A ACC'yi Memory'e OR'la
ORL direct,#data Sabit sayıyı Memory'e OR'la
XRL A,Rn Registeri ACC'ye XOR'la
XRL A,direct Memory'i ACC'ye XOR'la
XRL A,@Ri Dolaylı belirtilen memory'i ACC'ye XOR'la
XRL A,#data Sabit sayıyı ACC'ye XOR'la
XRL direct,A ACC'yi Memory'e XOR'la
XRL direct,#data Sabit sayıyı Memory'e XOR'la
CLR A ACC'yi sıfırla
CPL A ACC'nin complementini al
RL A ACC'yi 1 bit sola kaydır
RLC A ACC'yi 1 bit sola kaydır ( carry ile birlikte )
RR A ACC'yi 1 bit sağa kaydır
RRC A ACC'yi 1 bit sağa kaydır ( carry ile birlikte )
SWAP A ACC'nin byte'larını yer değiştir
DATA TRANSFER KOMUTLARI :
MOV A,Rn Rn'yi ACC'ye taşı
MOV A,direct Memory'i ACC'ye taşı
MOV A,@Ri Dolayly belirtilen memory'i ACC'ye ta?y
MOV A#data Sabit sayıyı ACC'ye taşı
MOV Rn,A ACC'yi Rn'ye taşı
MOV Rn,direct Memory'i Rn'ye yükle
MOV Rn,#data Sabit sayıyı Rn'ye taşı
MOV direct,A ACC'yi memory'e taşı
MOV direct,Rn Rn'yi memory'e taşı
MOV direct,direct Memory'i memory'e taşı
MOV direct,#data Sabit sayıyı memory'e taşı
MOV @Ri,A ACC'yi dolaylı belirtilen memory'e taşı
MOV @Ri,direct Direk belirtilen memory'i dolaylı belirtilen memory'e taşı
MOV @Ri,#data Sabit sayyyy dolaylı belirtilen memory'e taşı
MOV DPRT,#data16 16 bit'lik sabit sayıyı DPRT'ye taşı
MOVC A,@A+DPRT (DPRT+A)'nın belirtildiğii adresteki dosyayı ACC'ye taşı
MOVC A,@A+PC PC+A'nyn belirttiği adresteki datayı ACC'ye taşı
MOVX A,@Ri Ri'nin belirttiği 8 bit'lik harici memory'deki değeri ACC'ye taşı
MOVX A,@DPRT DPRT'nin belirttiği 16 bit'lik harici memory'deki değeri ACC'ye taşı
MOVX @Ri,A ACC'ye Ri'nin belirttiği 8 bitlik harici memory'e taşı
MOVX @DPTR,A ACC'yi DPRT'nin belirttiği 16 bit'lik harici memory'e taşı
PUSH direct Memory'deki değeri stack'a yükle
POP direct SP'nin gösterdiği adres değerinden memory'e yükle
XCH A,Rn Register ile ACC'yi değiştir.
XCH A,direct Memory ile ACC'yi değiştir
XCH A,@Ri Dolaylı gösterilen memory ile ACC'yi değiştir
XCD A,@Ri Dolaylı gösterilen memory'nin düşük byte'nı ACC ile değiştir
BOOLEAN DEĞİŞKENLERİ İŞLEMLERi :
CLR C Carry'i sıfırla
CLR bit Bit'i sıfırla
SETB C Carry'i 1 yap
SETB bit Bit'i 1 yap
CPL C C'nin değilini (complementini al )
CPL bit Bit'in değilini al
ANL C,bit Bit'i Carry'e AND le
ANL C,/bit Bit'in değilini carry'e AND le
ORL C,bit Bit'i Carry'e OR la
ORL C,/bit Bit'in değilini carry'e OR la
MOV C,bit Bit'i carry'e taşı
MOV bit,C Carry'i bit'e taşı
JC rel Eğer carry=1 ise rel adresine sıçra
JNC rel Eğer carry=0 ise rel adresine sıçra
JB bit,rel Eğer bit=0 ise rel adresine sıçra
JBC bit,rel Eğer bit=1 ise rel adresine sıçra ve bit'i sıfırla
PROGRAM SIÇRAMALARI
ACALL addr11 Subroutin'i (alt rutin) çağır.(2 k'lık adres sahası içersinde )
LCALL addr16 Subroutin'i çağır(64k'lık adres sahası içinde)
RET Subrroutin'den dön
RET1 Interrupt'dan dön
AJMP addr11 addr11 adresine sıçra(2k'lık adres sahası içinde)
LJMP addr16 addr16 adresine syçra(64klık adres sahası içinde)
SJMP rel rel adresine sıçra
JMP @A+DPTR DPTR+A'nın gösterdiği adrese sıçra
JZ rel ACC=0 ise rel adresine sıçra
JNZ rel ACC=0 değilse rel adresine sıçra
CJNE A,direct,rel ACC ve memory'i karşılaştırır.Eğer eşit değilse rel adresine sıçra
CJNE A,#data,rel ACC ve sabit sayıyı karşılaştırır.Eğer eşit değilse rel adresine sıçra
CJNE Rn,#data,rel Register ile sabit sayı karşılaştırılır.Eğer eşit değillerse rel adresine sıçra
CJNE @Ri,#data,rel Dolayly gösterilen memory ile sabit sayıyı karşılaştırılır.Eğer eşit de?illerse rel adresine sıçra
DJNZ Rn,rel Register'i 1 azalt,eğer sıfır olmazsa rel adresine sıçra
DJNZ direct,rel Memory'i 1 azalt eğer sıfır olmazsa rel adresine sıçra
NOP işlem yapma ( no operation )