Lanjutan microkontroller AT89S52


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