BAB
2 TEORI DASAR
2.1.
Microcontroller AT89S52
Mikrokontroller
adalah yang seluruh atau sebagian besar elemnya dikemas dalam satu keping IC (integrated circuits) sehingga sering
disebut mikrokomputer cip tunggal. Lebih lanjut, mikrokontroller merupakan
sistem komputer yang mempunyai satu atau beberapa tugas yang sangat spesifik,
berbeda dengan personal Computer (PC)
yang memiliki beragam fungsi. Jadi, hanya dengan sebuah keping IC saja dapat
dibuat sebuah sistem komputer untuk mengendalikan suatu peralatan elektronika
aplikatif.
Mikrokontroller
dapat diumpamakan sebagai bentuk minuman dari sebuah mikrokomputer. Ada
perangkat keras dan lunaknya, juga ada memorinya, CPU, dan lain sebagainya yang
terpadu dalam satu cip IC.
Mikrokonntroller
AT89S52 adalah sebuah mikrokontroller buatan ATMEL yang masih masuk keluarga
mikrokontroller MCS-51 yaitu merupakan versi yang dilengkapi dengan ROM
tersendiri (internal). Mikrokontroller
AT89S52 adalah mikrokontroller dengan konsumsi daya yang rendah dengan performa
yang tinggi (low power-high performance),
CMOS 8-bit dengan 8K bytes dari ISP (In
Serial Programming) Flash memory. IC mikrokontroller ini sesuai dengan
standart MCS-51. Baik dari instruksi maupun pin-pinnya dapat diaplikasikan
sebagai Embedded Controller.
Fitur yang disediakan oleh mikrokontroller AT89S52 ini
adalah :
1.
Kompatibel
dengan produk MCS-51
2.
8K
byte in Serial Programmable Flash Memory
Dapat
dilakukan pemograman 1000 tulis dan hapus
3.
Range
catu daya 4,0 V s/d 5,5 V
4.
Operasi
Statis : 0 Hz s/d 33 MHz
5.
Tiga
tingkat program memory lock
6.
256
x 8 bit RAM internal
7.
32
programmable jalur I/O
8.
Dua
16 bit Timer/Counter
9.
Enam
Sumber Interupsi
10. Full duplex Serial Channel
11. Low power idle dan mode power down
12. Watch dog timer
13. Dual data pointer
14. Power off flag
15. Waktu pemograman cepat (fast programming time)
16. Fleksibel ISP programming
2.1.1. Pena-Pena Mikrokontroller
·
Pin 1 sampai 8 (Port 1.0 s/d Port 1.7)
Ini adalah port 1 yang merupakan saluran/bus
I/O 8 bit dua arah. Dengan internal pull-up yang dapat digunakan untuk berbagai
keperluan. Pada port ini juga digunakan sebagai saluran alamat pada saat
pemrograman dan verifikasi.
·
Pin 9
Merupakan masukan reset (aktif
tinggi), pulsa transisi dari rendah ke tinggi akan me-reset mikrokontroller ini
·
Pin 10 sampai 17 (Port 3.0 s/d Port 3.7)
Ini adalah port 3 merupakan
saluran/bus I/O 8 bit dua arah dengan internal pull-ups yang memiliki fungsi
pengganti. Bila fungsi pengganti tidak dipakai, maka ini dapat digunakan
sebagai port paralel 8 bit serbaguna. Selain itu sebagian dari port 3 dapat
berfungsi sebagai sinyal. 8 kontrol pada saat proses pemrograman dan
verifikasi.
Bit Fungsi Alternatif :
P3.0 sebagai RXD alamat B0H; Untuk
menerima data port serial
P3.1 sebagai TXD alamat B1H; Untuk
mengirim data port serial
P3.2 sebagai INT0 alamat B2H;
Interupsi eksternal 0
P3.3 sebagai INT1 alamat B3H;
Interupsi eksternal 1
P3.4 sebagai T0 alamat B4H; Input Eksternal waktu/pencacah 0
P3.5 sebagai T1 alamat B5H; Input
Eksternal waktu/pencacah 1
P3.6 sebagai WR alamat B6H; Jalur
menulis memori data eksternal
P3.7 sebagai RD alamat B7H; Jalur
membaca memori data eksternal
·
Pin 18 dan 19
Ini merupakan masukan ke penguat
osilator berpenguat tinggi. Pada mikrokontroller ini memiliki seluruh rangkaian
osilator yang diperlukan pada serpih yang sama (on chip) kecuali rangkaian
kristal yang mengendalikan frekuensi osilator. Karenanya 18 dan 19 sangat
diperlukan untuk hubungan dengan kristal. Selain itu XTAL 1 dapat juga sebagai
input untuk inverting oscilator amplifier dan input ke rangkaian internal clock
sedangkan XTAL 2 merupakan output dari inverting.
·
Pin 20
Merupakan ground sumber tegangan
yang diberi simbol GND.
·
Pin 21 sampai 28 (Port 2.0 s/d Port 2.7)
Ini adalah port 2 yang merupakan
saluran/bus I/O 8 bit dua arah dengan internal pull-ups. Saat pengambilan data
memori eksternal yang menggunakan alamat 16 bit (MOVX @ DPTR), port 2 berfungsi
sebagai saluran/bus alamat tinggi (A8 - A15). Sedangkan pada saat mengakses ke
data. 9 memori eksternal yang menggunakan alamat 8 bit (MOVX @ R1), port 2
mengeluarkan isi dari P2 pada Special Function Register.
·
Pin 29
Program Store Enable (PSEN)
merupakan sinyal pengontrol untuk mengakses program memori eksternal masuk ke
dalam bus selama proses pemberian/pengambilan instruksi (fetching).
·
Pin 30
Address Latch Enable (ALE)/PROG
merupakan penahan alamat memori eksternal (pada port 1) selama mengakses ke
memori eksternal. Pena ini juga sebagai pulsa/sinyal input pemrograman (PROG)
selama proses pemrograman.
·
Pin 31
External Access Enable (EA)
merupakan sinyal kontrol untuk pembacaan memori program. Apabila di set rendah
(L) maka mikrokontroller akan melaksanakan seluruh instruksi dari memori
program eksternal sedangkan apabila diset tinggi (H)
Maka mikrokontroller akan
melaksanakan instruksi dari memori program internal ketika isi program. 11
counter kurang dari 4096. Ini juga berfungsi sebagai tegangan pemrograman (VPP
= +12) selama proses pemrograman.
·
Pin 32 sampai 39 (Port 0.0 s/d Port 0.7)
Ini adalah port 0 yang merupakan
saluran/bus I/0 8 bit open colector, dapat juga digunakan sebagai multipleks
bus alamat rendah dan bus data selama adanya akses ke memori program eksternal.
Pada saat proses pemrograman dan verifikasi port 0 digunakan sebagai
saluran/bus data. External pull-ups diperlukan selama proses verifikasi.
·
Pin 40
Merupakan positif sumber tegangan
yang diberi simbol Vcc.
2.1.2. Arsitektur Mikrokontroller
AT89S52
Gambar
2.1 Arsitektur Mikrokontroller AT89S52
Mikrokontroller
AT89S52 dibangun berdasarkan arsitektur seperti pada gambar 2.3, seluruh bagian
yang digunakan pada gambar terrsebut saling berhubungan melalui internal
bus-8bit menelusuri seluruh bagian keping. Bus tersebut kemudian dihubungkan
melalui port input/output yang apabila memori atau ekspansi diperlukam. Setiap
blok memiliki hubungan yang erat dengan blok lainnya yang bekerja secara
sinkron sesuai dengan akses pemograman.
Dan fungsi dari tiap-tiap blok antara lain :
A. ALU (Aritmatic
Logic Unit)
Suatu unit yang
melaksanakan proses aritmatik dan logika seperti pemjumlahan, pembagian,
rotasi, clear, dan komplement operasi pencabangan
B. Accumulator
Register
Accumulator (ACC) banyak digunakan dalam berbagai instruksi. ACC bersama dengan
register B dalam proses perkalian dan pembagian. ACC akan menyimpan hasil
perkalian 8 bit terbawah (low byte) dan hasil bagi. Selain itu register ACC
juga merupakan general purpose register selebar 8 bit yang dapat digunakan
untuk aplikasi user.
C. Register B
Register B
digunakan bersama dengan Accumulator dalam proses perkalian dan pembagian.
Register B akan menyimpan hasil perkalian 8 bit teratas (high byte) dan sisa
pembagian. Selain itu register B juga merupakan general purpose register
selebar 8 bit yang dapat digunakan untuk aplikasi user.
D. Stack Pointer
Stack Pointer
(SP) merupakan register 8 bit yang berisi lokasi dimana data alamat stack
teratas disimpan. Instruksi PUSH, LCALL, proses interrupt, dan sejenisnya akan
menambah nilai pada SP. Sedangkan instruksi POP, RET, RETI, dan sejenisnya akan
mengurangi nilai pada SP.
E. Data Pointer
Data Pointer
(DPTR) merupakan register 16 bit yang terdiri dari 8 bit Data Pointer High
(DPH) dan 8 bit Data Pointer Low (DPL). DPTR umumnya digunakan untuk mengakses
alamat pada memori eksternal.
F. Port Registers
Port register
merupakan register yang mewakili alamat port. Register input/output ini
meliputi Port 0 (P0), Port 1 (P1), Port 2 (P2), dan Port 3 (P3).
G. Timer Registers
Timer Register
merupakan register yang digunakan untuk mengatur operasi timer. Register ini
meliputi Timer 1 High Byte (TH1), Timer 0 High Byte (TH0), Timer 1 Low Byte
(TL1), Timer 0 Low Byte (TL0), Timer Mode (TMOD), dan Timer Control (TCON).
H. Serial Port Registers
Serial Port
register merupakan register yang digunakan dalam proses komunikasi serial.
Register ini meliputi Serial Data Buffer (SBUFF) dan Serial Port Control
(SCON).
I. Interrupt Registers
Interrupt
register merupakan register yang digunakan untuk mengatur proses interrupt.
Register ini meliputi Interrupt Enable (IE) dan Interrupt Priority (IP).
J. RAM (Random
Acces Memory)
Merupakan
memori yang dapat dibaca dan ditulis. Data dalam RAM akan terhapus (Volatile)
bila catu daya dihilangkan. Karena sifat yang seperti ini, maka program mikrokontroller
tidak disimpan dalam RAM. RAM pada IC ini memiliki kapasitas sebesar 128 byte x
8 bit.
2.1.3. Struktur Pengoperasian Port
A. Port
Input/Output
Mikrokpntroller ini memiliki 32
jalur port yang dibagi menjadi 4 buah port 8 bit. Masing-masing port ini
bersifat bidirectional sehingga dapat
digunakan sebagai input atau output port. Pada blok diagram AT89S52 dapat
dilihat latch tiap bit pada ke empat port : 0, 1, 2, dan 3 yang masing-masing
jalur port terdiri dari latch, output driver dan output buffer. Port0 dan 2
dapat digunakan sebagai saluran data dan alamat sekaligus dimultipleks.
Untuk mengakses memori
eksternal, port0 akan mengelurkan alamat bahwa mwmori eksternal yang
dimultipleks dengan data yang dapat dibaca dan ditulis. Sedangkan port2 mengeluarkan
bagian atas memori eksternal sehingga total alamat seluruhnya menjadi 16bit.
Khusus untuk port 3 mempunyai
fungsi yang lain diluar sebagai port. Fungsi ini akan berbeda untuk tiap-tiap
kaki dengan urutan sebagai berikut :
a. port3.0 : port input serial,
RXD
b. port3.1 : port output
serial, TXD
c. port3.2 : input interupsi
eksternal, INT 0
d. port3.3 : input interupsi
internal, INT 1
e. port3.4 : input eksternal
untuk timer/counter 0,T0
f. port3.5 : input eksternal
untuk timer/counter 1,T1
g. port3.6 : sinyal tulis
memori eksternal, WR
h. port3.7 : sinyal baca memori eksternal, RD
Latch yang digunakan dapat dipresentasikan dengan flip-flop D. Data dari
bus internal di Latch saat CRU memberi sinyal tulis ke Latch dan output Latch
diberikan ke bus internal sebagai respon dari sinyal pin oleh CPU. Beberapa
instruksi yang berfungsi membaca port mengaktifkan sinyal baca Latch dan yang
lain mengaktifkansinyal baca pin. Port1, 2 dan 3 mempunyai pull-up internal,
sedangkan port0 dengan output open drain.
Masing-masing jalur I/O dapat digunakan sebagai input dan output. Bila
digunakan sebagai input, port latch 1. Ontuk port1, 2 dan 3, pin-pin akan di
pull-up internal dan bisa juga di pull-up rendah degan sumber eksternal.
Port0 tidak mempunyai pull-up internal, pull-up fet hanya akan digunakan
saat akses eksternal memori. Jika isi latch diatur pada keadaan 1, maka port
ini akan berfungsi sebagai impedansi tinggi dan jika sebagai output akan
bersifat o[en drain. Demikian halnya dengan port2 yang digunakan untuk
multipliks data dan alamat 16 bit sebesar 16 Kbyte mempunyai konfigurasi yang
sama dengan yang dimiliki port0.
Sedangkan pada port3 yang biasa dimanfaatkan untuk kaki kontrol mempunyai
pengaturan fungsi output saja. Pada rangkaian ini jg dilengkapi dengan
rangkaian pull-up internal. Penggunaan port3 dapat dialamati langdung sebagai
kontrol pada suatu tugas yang dilakukan oleh fungsi yang dimiliki port ini.
B. Timer/counter
Pada dasarnya timer dan counter merupakan sistem yang sama-sama menambahkan
diri hingga overflow. Timer dapat digunakan untuk menghitung suatu periode
waktu antara kejadian, sebagai jarak waktu antara kejadian, dan menghasilkan
baud rate untuk komunikasi serial. Counter dapat digunakan untuk menghitung
jumlah munculnya suatu kejadian.
Misalkan terdapat sebuah ban berjalan yang memasukkan sejumla permen ke
dalam masing-masing kantung plastik. Jika diinginkan sebuah kantung diisi
dengan permen sebanyak 100 buah, maka sistem tersebut dapat menggunakan counter
untuk menghitung banyaknya permen.
Jika diinginkan sebuah kantung diisi dengan permen selama dua detik tanpa
mempedulikan jumlah permen yang diisikan ke dalam kantung, maka sistem tersebut
dapat menggunakan timer untuk menghitung waktu pengisian kantung. Register yang digunakan untuk mengatur timer/counter terdapat pada
Timer Mode (TMOD) dan Timer Control (TCON).
Gambar... ...
Alokasi Bit TMOD
Tabel.... .... Timer TMOD
Berikut ini
adalah penjelasan masing-masing bit TCON yang berkaitan dengan timer/counter:
- TF1
diberi nilai ‘1’
secara hardware saat nilai Timer/Counter 1 (TH1 dan TLI) mengalami overflow.
TF1 akan diberi nilai ‘0’ secara hardware saat mikrokontroler melompat ke
Interrupt Service Routine.
- TR1
harus diberi
nilai ‘1’ oleh program untuk menjalankan Timer 1.
- TF0
diberi nilai
‘1’ secara hardware saat nilai Timer/Counter 0 (TH0 dan TL0) mengalami
overflow. TF0 akan diberi nilai ‘0’ secara hardware saat mikrokontroler
melompat ke Interrupt Service Routine.
- TR0
harus diberi nilai ‘1’ oleh program untuk menjalankan Timer 0.
Timer/Counter
memiliki 4 mode operasi, antara lain :
1. MODE 0.
Mode 0 adalah
timer/counter 13 bit. Mode ini disediakan terutama untuk menjaga kompatibilitas
dengan prosesor 8048. Pada mode 0, register TLx (TL0 atau TL1) hanya digunakan
5 bit terendah saja sedangkan register THx (TH0 atau TH1) tetap selebar 8 bit. TLx
akan bertambah hingga bernilai 1Fh. Saat ada perubahan nilai TLx dari 1Fh ke
00h, THx akan bertambah 1. Nilai maksimal THx dan TLx adalah FF1Fh (THx = FFh
dan TLx = 1Fh). Overflow akan terjadi jika ada perubahan dari FF1Fh ke 0000h.
Nilai THx dan TLx dapat diubah oleh user setiap saat dalam program.
Gambar...
2. MODE 1
Mode 1 pada
dasarnya serupa dengan mode 0. Namun pada mode 1 semua bit TLx digunakan,
sehingga mode 1 merupakan timer/counter 16 bit. TLx akan bertambah hingga
bernilai FFh. Saat ada perubahan nilai TLx dari FFh ke 00h, THx akan bertambah
1. Nilai maksimal THx dan TLx adalah FFFFh (THx = FFh dan TLx = FFh). Overflow
akan terjadi jika ada perubahan dari FFFFh ke 0000h. Nilai THx dan TLx dapat
diubah oleh user setiap saat dalam program.
Gambar...
3. MODE 2
Mode 2 adalah
timer/counter 8 bit dengan fasilitas auto reload. TLx bertindak sebagai
timer/counter 8 bit. Sedangkan THx berisi suatu nilai tertentu. Auto reload adalah
fasilitas dimana nilai TLx setelah overflow tidak kembali ke 00h namun nilai
TLx akan diambil dari nilai THx.
Misalkan THx
berisi 47h dan TLx berisi FFh. Jika ada overflow pada TLx, nilai TLx akan
berubah dari FFh ke 47h, sesuai dengan nilai THx. Proses tersebut dikerjakan
secara otomatis secara hardware sehingga user tidak perlu memeriksa apakah
nilai TLx sudah overflow dan tidak perlu mengisi ulang dengan nilai yang baru.
Mode 2 ini juga digunakan untuk menghasilkan baud rate.
Gambar...
4. MODE 3
Pada mode 3,
Timer/Counter 0 akan menjadi dua timer/counter 8 bit, sedangkan Timer/Counter 1
akan berhenti. TL0 akan menjadi timer/counter 8 bit yang dikendalikan oleh bit
kontrol Timer/Counter 0 (meliputi GATE, C/T , TR0, INT0, dan
TF0). TH0 akan menjadi timer 8 bit (bukan counter) yang dikendalikan oleh bit
kontrol Timer/Counter 1 (meliputi TR1 dan TF1). Jadi TR1 mengendalikan TH0 dan
Timer/Counter 1 secara bersamaan.
Gambar...
Timer/Counter
1 masih dapat dioperasikan dalam mode selain mode 3. Umumnya Timer/counter 1
dioperasikan dalam mode 2 dan berfungsi sebagai penghasil baud rate. Jika user
ingin menghentikan Timer/Counter 1 tanpa menghentikan TH0, user dapat
memindahkan Timer/Counter 1 ke dalam mode 3. Proses inisialisasi adalah proses
menentukan nilai semua register yang berkaitan dengan Timer/Counter yang akan
digunakan agar Timer/Counter dapat berfungsi sebagaimana yang dikehendaki.
Register yang
harus diatur terlebih dahulu meliputi :
1. TMOD dan
TCON
Langkah pertama
adalah menentukan mode yang akan digunakan (mode 0, 1, 2, atau 3) fungsi yang
dipilih (sebagai timer atau counter), dan jenis kontrol (external control
melalui pin INTx atau internal control melalui TRx). Pengaturan TCON dilakukan
untuk menjalankan timer. Misalnya Timer/Counter 0 digunakan sebagai timer dalam
mode 2 dengan external control dan Timer/Counter 1 digunakan sebagai counter
dalam mode 1 dengan internal control, maka instruksinya adalah sebagai berikut
:
MOV TMOD, #01011010b
atau
MOV TMOD, #5Ah
Sedangkan untuk
menjalankan kedua timer, instruksinya adalah sebagai beikut :
MOV TCON, #01010000b
atau
MOV TCON, #50h
atau
SETB TR0
SETB TR1
2. THx
dan/atau TLx
Jika
diperlukan, inisialisasi atau perubahan terhadap nilai THx dan/ atau TLx dapat dilakukan
dengan cara mengisikan nilai tertentu kedalam register tersebut. Misalnya
register Timer/Counter 0 diisi dengan nilai 814Ah dan register Timer/Counter 1
diisi dengan nilai 0CF32h, maka instruksinya adalah sebagai berikut :
MOV TH0, #81h
MOV TL0, #4Ah
MOV TH1, #0CFh
MOV TL1, #32h
3. IE dan/atau
IP
Jika
Timer/Counter yang diprogram akan digunakan sebagai sumber interrupt, maka IE
dan/atau IP juga harus diatur. Misalnya kedua Timer/Counter digunakan sebagai
sumber interrupt dengan prioritas Timer/Counter 1, maka instruksinya adalah
sebagai berikut:
MOV IP, #00001000b
MOV IE, #10002020b
atau
MOV IP, #08h
MOV IE, #8Ah
atau
SETB PT1
SETB ET1
SETB ET0
SETB EA
Pembacaan
nilai Timer/Counter dapat dilakukan dengan dua cara, pembacaan register
Timer/Counter (THx dan/atau TLx) secara langsung dan mendeteksi overflow. Cara
ini dilakukan dengan membaca register THx dan/atau TLx secara langsung. Jika
Timer/Counter dioperasikan dalam mode 2 atau mode 3, cara ini cukup mudah
karena register yang dibaca hanya TLx dan/atau THx yang masing-masing selebar 8
bit. Karena register MCS-51 secara umum juga selebar 8 bit, maka proses
pembacaan satu nilai dapat dilakukan dalam satu instruksi. Masalah mulai muncul
jika Timer/Counter dioperasikan dalam mode 0 atau mode 1.
Dalam kedua
mode tersebut THx dan TLx bersama-samamembentuk satu nilai selebar 13 bit atau
16 bit dan keduanya tidak dapat dibaca sekaligus. Jika TLx dibaca pada saat TLx
bernilai 255 atau FFh lalu THx yang dibaca pada instruksi selanjutnya bernilai
8, maka user akan mendapat nilai THx dan TLx sebesar 08FFh. Padahal yang
terjadi sesungguhnya adalah pada pembacaan pertama (pembacaan TLx), nilai THx
dan TLx adalah 07FFh dan pada pembacaan kedua (pembacaan THx), nilai THx dan
TLx adalah 0800h (jika diasumsikan jarak antara kedua instruksi adalah machine cycle dan Timer/Counter difungsikan
sebagai timer).
Pada kasus yang
sama, jika dilakukan pembacaan terhadap THx terlebih dahulu sebelum pembacaan
TLx, maka user akan mendapat nilai akhir 0700h (sebelum TLx overflow, THx
bernilai 07h dan setelah TLx overflow, TLx bernilai 00h).
Hal ini dapat
diatasi dengan cara melakukan pembacaan THx sebanyak dua kali, yaitu sebelum
dan sesudah pembacaan TLx. Dengan cara ini user dapat mengetahui apakah pembacaan
register THx dan TLx dilakukan pada saat TLx overflow atau tidak. Jika
pembacaan pertama THx bernilai 07h, pembacaan TLx bernilai 00h, dan pembacaan
kedua THx bernilai 08h, maka user akan mengetahui bahwa kondisi yang dibaca
adalah pada saat THx dan TLx bernilai 07FFh, 0800h, dan 0801h (jika diasumsikan
jarak antara instruksi pembacaan adalah 1 machine cycle dan Timer/Counter
difungsikan sebagai timer)
Cara yang
lebih sering digunakan adalah dengan mendeteksi overflow. Cara ini digunakan
jika user tidak perlu mengetahui nilai sebenarnya dari THx dan TLx namun lebih
membutuhkan saat terjadinya overflow. Adanya overflow ditandai oleh nilai ‘1’
pada TFx (TCON.7 dan/atau TCON.5).
Cara ini
digunakan jika user ingin menggunakan timer sebagai sebuah delay yang berdurasi
tetap. Misalnya delay yang dibutuhkan adalah 0,05 detik atau 50 milidetik dan
diasumsikan 1 machine cycle membutuhkan waktu 1 mikrodetik (dengan menggunakan
frekuensi kristal 12 MHz). Hal ini berarti timer harus bertambah dari 0 hingga
50000 untuk satu durasi delay. Karena overflow tidak terjadi pada nilai 50000
melainkan pada saat nilai THx dan TLx kembali ke 0000h atau 65536 machine cycle
dari nilai 0000h sebelumnya (dalam mode 1,16 bit), maka nilai awal THx dan TLx
yang harus dimasukkan adalah 65536 - 50000 - 15536 atau 3CB0h.
Timer/Counter
yang dioperasikan sebagai timer dapat digunakan untuk menghitung waktu dari
sebuah kejadian. Nilai timer bertambah tiap machine cycle (12 pulsa clock)
sehingga kecepatan bertambahnya adalah 1/12 dari frekuensi osilator. Untuk
mengukur durasi sebuah kejadian, user hanya pcrlu mengaktifkan timer pada saat
kejadian tersebut dimulai. Jika kejadian tersebut berakhir, user dapat
menghentikan timer. Dengan cara ini user mendapatkan sebuah nilai timer yang
dapat digunakan sebagai dasar untuk menghitung lama waktu yang sesungguhnya.
Timer/Counter
yang dioperasikan sebagai counter dapat digunakan untuk menghitung jumlah
kejadian yang muncul. Karena counter membutuhkan transisi dari ‘1’ ke ‘0’
sebagai trigger, maka counter membutuhkan waktu 2 machine cycle (24 pulsa
clock) sebelum nilainya bertambah. Jadi counter mampu membaca trigger dengan
frekuensi 1/24 dari frekuensi osilator.
Counter
sebenarnya dapat diaplikasikan dengan menggunakan general purpose I/O seperti
port 1, namun program harus terus-menerus memeriksa kondisi port 1. Jika
kondisi port 1 tidak diperiksa terus-menerus, pasti ada kejadian yang terlewat.
Dengan
menggunakan Timer/Counter sebagai counter, maka MCS51 akan selalu menghitung munculnya kejadian yang ditandai dengan adanya trigger.
User hanya perlu memeriksa nilai counter pada saat yang ditentukan.
2.1.4 Organisasi
Memori
Memori pada intinya berfungsi untuk ‘mengingat’ atau menyimpan suatu
informasi. Memori penting bagi sistem MCS-51 karena semua program dan data
tersimpan dalam memori. Makin besar kapasitas memori yang dimiliki, sistem
dapat mengakomodasi program yang lebih kompleks dan data yang lebih banyak.
Pada dasarnya, dalam dunia mikrokontroler ada dua tipe memori. Kedua memori
tersebut adalah data memory dan program memory. Pembagian dua memori ini
bertujuan agar proses kerja mikrokontroler bekerja lebih cepat.
1. Data Memory
Data Memory
seperti namanya, berfungsi untuk menyimpan data. Berdasarkan lokasinya, data
memory dibagi menjadi dua, yaitu internal data memory yang terdapat dalam IC
MCS-51 dan external data memory yang berada diluar IC MCS-51. Kapasitas internal
data memory yang dimiliki MCS-51 sebesar 128 bytes ditambah dengan SFR (Special
Function Register) sehingga jumlahnya mencapai 256 bytes.
Pembagian ruang
internal data memory.
Konfigurasi internal
dan external data memory
2. Program Memory
Program Memory berfungsi untuk
menyimpan kode program user yang akan dijalankan. User dapat menggunakan
internal program memory yang tertanam dalam IC MCS-51 dan external program
memory. Internal Program Memory selain berisi instruksi user, juga memiliki
beberapa alamat khusus yang ditujukan untuk reset address (alamat yang dituju
saat pertama kali mikrokontroler bekerja) dan interrupt vector address.
Alamat
Reset dan Interrup Vector Address
External Program Memory berupa IC
RAM atau ROM dapat ditambahkan dan digunakan untuk menyimpan variabel yang ditentukan
oleh user. Penambahan ini dapat dilakukan hingga kapasitas total external
program memory mencapai 64 KB.
Konfigurai
internal dan external program memory
Untuk internal data memory meliputi
:
- Register Banks
- Bit-addressable RAM
- General Purpose RAM (Stratch Pad
Area)
- Special Function Registers (SFR)
Organisasi
Internal Data Memory
- General
Purpose RAM
General Purpose RAM atau sering
disebut juga sebagai Stratch Pad Area adalah ruang data memory yang bebas
digunakan user sebagai tempat penyimpanan variabel atau sebagai alamat
inisialisasi Stack Pointer. General Purpose RAM hanya dapat diakses per byte.
- Bit-addressable RAM
Bit-addressable RAM memiliki fungsi
yang sama dengan General Purpose RAM. User juga dapat menggunakan ruang ini
untuk menyimpan variabel atau alamat inisialisasi Stack Pointer. Berbeda dengan
General Purpose RAM, Bit-addressable RAM tidak hanya dapat diakses per byte
namun juga dapat diakses per bit.
- Register Banks
Internal data memory memuat 4
register banks, yaitu: Register Bank 0, Register Bank 1, Register Bank 2,
Register Bank 3. Register Banks ini digunakan sebagai alamat untuk menampung
delapan register selebar 1 byte yang diberi nama R0, R1, dan seterusnya hingga
R7. Secara default, kedelapan register ini akan menempati Register Bank 0.
- Special Function Registers
SFR merupakan sejumlah register
khusus yang mencakup alamat port, Accumulator, register B, timer, dan sejumlah
register kontrol. Beberapa dari SFR juga dapat diakses per bit
(bit-addressable).
Pembagian
Register Banks
Peta
SFR
Alokasi Bit
PSW
Comments
Post a Comment