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
Program Status Word
    A. Program Status Word
Program Status Word (PSW) selebar 1 byte mencakup status bit dengan konfigurasi dari Most Significant Bit (MSB) hingga Least Significant Bit (LSB)
·         CY
Carry Flag bernilai ‘1’ jika sebuah penjumlahan menghasilkan nilai lebih dari 255 atau FFh. Carry flag juga akan bernilai ‘1’ jika sebuah pengurangan menghasilkan nilai kurang dari 0. Selain itu, carry flag juga dapat diakses oleh user secara langsung.
·         AC
Auxiliary carry flag bernilai ‘1’ jika penjumlahan Binary Coded Decimal (BCD) menghasilkan nilai lebih dari 9.
·         F0
Flag 0 merupakan general purpose flag yang dapat digunakan untuk aplikasi user.
·         RS1 dan RS0
Register bank select digunakan untuk menemukan register bank yang aktif untuk R0 hingga R7.
Pemilihan Register Bank
·         OV
Overflow flag bernilai ‘1’ jika ada penambahan atau pengurangan signed number yang menghasilkan nilai lebih dari +127 atau kurang dari -128. Jika proses penambahan atau pengurangan tidak menggunakan signed number, maka perubahan OV dapat diabaikan.
·         P
Parity Flag digunakan untuk menggenapi jumlah bit yang bernilai ‘1’ pada accumulator. Parity flag bernilai ‘1’ jika jumlah bit yang bernilai 1 pada accumulator berjumlah ganjil dan bernilai ‘0’ jika jumlah bit yang bernilai 1 pada accumulator berjumlah genap.
    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. Power Control Register
Alokasi Bit PCON
Power Control Register
·         SMOD
SMOD bernilai ‘1’ untuk melipatgandakan baud rate saat serial port dijalankan dalam mode 1,2, atau 3.
·         GF1 dan GF0
General Purpose Flag yang dapat digunakan untuk aplikasi user.
·         PD
Power Down bernilai ‘1’ untuk mengaktifkan mode power down. Satusatunya cara untuk keluar dari mode ini adalah dengan melakukan reset pada sistem.

·         IDL
Idle Mode bernilai ‘1’ untuk mengaktifkan mode idle. Cara untuk keluar dari mode ini adalah dengan melakukan reset pada sistem.
Beberapa varian MCS-51 dilengkapi dengan kemampuan untuk dihubungkan dengan external memory. Untuk mengakses external memory, MCS-51 menyediakan tiga pin yaitu Write (WR), Read (RD), dan Program Store Enable ( PSEN ). Sedangkan address bus dan data bus dihubungkan melalui port 0 dan port 2. Pin Address Latch Enable (ALE) dihubungkan dengan IC latch (74HC373, 74HC573, atau IC sejenis). Port 2 berfungsi sebagai high byte address bus. Port 0 berfungsi ganda sebagai data bus dan low byte address bus. Hal ini dimungkinkan karena port 0 menggunakan teknik multiplex sehingga dapat menghemat jumlah pin yang digunakan.
Tanpa multiplex, jumlah pin yang digunakan untuk 16 bit address dan 8 bit data adalah 24 jalur. Dengan multiplex, jumlah pin yang dibutuhkan hanya 16 jalur, 8 bit address dan 8 bit address/data.
Penggunaan Port pada Teknik Multiplex
Pada teknik multiplex, port 0 akan berfungsi sebagai address bus pada paruh pertama memory cycle atau siklus memori. Nilai address pada port 0 akan ditahan oleh IC latch. Pada paruh kedua memory cycle, port 0 akan berfungsi sebagai data bus.
Koneksi MCS-51 dengan External Data Memory
Pin yang digunakan untuk mengakses external data memory adalah pin WR dihubungkan dengan pin pada external memory yang berfungsi sebagai write enable (W ). Pin RD dihubungkan dengan pin pada external memory yang berfungsi sebagai output enable (OE ).
Koneksi dengan Program Memory
Pin yang digunakan untuk mengakses external program memory adalah pin PSEN . Pin PSEN dihubungkan dengan pin pada external memory yang berfungsi sebagai output enable.
Address decoding bertujuan untuk membagi dan menentukan alamat dari external memory/peripheral. Hal ini dilakukan agar external address dapat digunakan secara efisien. Tanpa address decoding, penambahan sebuah memori dengan kapasitas berapapun akan menempati keseluruhan 64 KB external address. Dengan address decoding, external address 64 KB dapat dibagi menjadi beberapa ruang dengan kapasitas tertentu untuk meminimalkan ruang alamat yang tidak digunakan.
Jika external address dibagi menjadi 8, maka akan terbentuk 8 ruang yang masing-masing berkapasitas 8 KB menempati alamat 0000h-1FFFh,  2000h-3FFFh, dan seterusnya. Jika external address dibagi menjadi 16, maka akan terbentuk 16 ruang yang masing-masing berkapasitas 4 KB dan menempati alamat 0000h-0FFFh, 1000h-1FFFh, dan seterusnya. Semakin banyak pembagian ruang, maka penggunaan external address akan semakin efisien.
Address decoding dilakukan dengan bantuan IC dekoder untuk memilih external memory/peripheral. Output dari IC dekoder dihubungkan dengan pin pada external memory/peripheral yang berfungsi sebagai chip select (CS ).
Dengan adanya jalur enable terpisah antara program memory ( PSEN ) dan data memory (WR dan RD) maka MCS-51 mendukung penggunaan 64 KB external program memory dan 64 KB external data memory.
Pengertian dari ‘data memory dan program memory yang saling overlapping’ adalah adanya ruang memori yang pada suatu saat diakses sebagai data memory dan pada saat lain sebagai program memory. Misalkan ada serangkaian instruksi yang akan dimasukkan ke external memory, maka instruksi tersebut akan dituliskan dahulu sebagai data dengan menggunakan pin WR. Setelah tersimpan, maka dapat dibaca sebagai program memory menggunakan pin PSEN .
Address Decoding 8 KB
Hal ini dapat dilakukan dengan menghubungkan RD dan PSEN melalui sebuah gerbang logika sebelum dihubungkan ke OE . Penambahan gerbang logika ini bertujuan agar pin OE menjadi aktif jika memori diakses dengan RD maupun PSEN . Gerbang logika yang umum digunakan adalah gerbang AND.
Rangkaian Overlapping

2.1.5 Sistem Interupsi
Interrupt bila diterjemahkan secara harfiah berarti menyela. Pada prakteknya interrupt pada mikrokontroler memang akan menyela program yang sedang diproses. Interrupt ini berguna jika terdapat suatu rutin yang dijalankan hanya pada waktu tertentu yang bersifat asinkron terhadap program utama. Program utama tidak pernah mengetahui kapan rutin interrupt akan dijalankan. Proses interrupt dapat dianalogikan sebagai seorang atasan memanggil pegawainya yang sedang bekerja. Seorang pegawai tidak tahu kapan atasan akan memanggilnya. Namun jika dia dipanggil pegawai tersebut harus menghentikan pekerjaannya untuk sementara waktu dan memenuhi perintah atasannya. Setelah pegawai tersebut menyelesaikan perintah atasannya, dia dapat kembali ke pekerjaannya
MCS-51 mengenal lima sumber interrupt, yaitu :
- External Interrupt 0
- Timer/Counter 0
- External Interrupt 1
- Timer/Counter 1
- Serial Port
User dapat mengaktifkan interrupt melalui SFR Interrupt Enable (IE)




Berikut ini adalah penjelasan masing-masing bit IP :
- PS
bernilai ‘1’ untuk memberi prioritas tinggi pada interrupt dari komunikasi serial.
- PT1
bernilai ‘1’ untuk memberi prioritas tinggi pada interrupt dari Timer/Counter 1.
- PX1
bernilai ‘1’ untuk memberi prioritas tinggi pada interrupt dari External Interrupt 1.
- PT0
bernilai ‘1’ untuk memberi prioritas tinggi pada interrupt dari Timer/Counter 0.
- PX0
bernilai ‘1’ untuk memberi prioritas tinggi pada interrupt dari External Interrupt 0.
Dengan adanya SFR ini, maka interrupt memiliki dua tingkat prioritas, yaitu prioritas tinggi (high priority) dan prioritas rendah (low priority). Secara default semua interrupt akan menempati prioritas rendah. Namun interrupt dapat diberi prioritas tinggi dengan cara memberi nilai ‘1’ pada bit yang bersangkutan pada SFR IP.
Dalam hal Interrupt Priority berlaku ketentuan sebagai berikut:
1. Jika interrupt masuk bersamaan dan keduanya memiliki prioritas yang sama, maka interrupt yang lebih dahulu diproses sesuai urutan polling.
2. Jika interrupt masuk bersamaan dan salah satu memiliki prioritas tinggi, maka interrupt yang memiliki prioritas tinggi akan dilayani terlebih dahulu.
3. Jika interrupt masuk tidak bersamaan dan keduanya memiliki prioritas yang sama, maka interrupt akan dilayani satu per satu sesuai urutan masuknya.
4. Jika interrupt dengan prioritas tinggi masuk terlebih dahulu, maka interrupt tersebut akan dilayani. Interrupt lain, apapun prioritasnya, harus menunggu selesainya Interrupt dengan prioritas tinggi tersebut.
5. Jika interrupt dengan prioritas rendah masuk terlebih dahulu, maka interrupt tersebut akan dilayani. Jika ada interrupt dengan prioritas tinggi masuk, maka interrupt dengan prioritas rendah akan ‘ditinggal’ dan interrupt dengan prioritas tinggi akan diselesaikan terlebih dahulu sebelum kembali ke interrupt dengan prioritas rendah.
Apabila terjadi interrupt, maka akan terdapat interrupt/overflow flag yang bernilai ‘1’. Nilai ini merupakan tanda bagi user dan CPU tentang adanya interrupt. Interrupt flag terdapat pada SFR Timer Control (TCON) dan Serial Port Control (SCON).


Berikut ini adalah penjelasan masing-masing bit TCON yang berkaitan dengan interrupt:
- TF1
diberi nilai ‘1’ secara hardware saat nilai Timer/Counter 1 (TH1 dan TL1) mengalami overflow. TF1 akan diberi nilai ‘0’ secara hardware saat mikrokontroler melompat ke Interrupt Service Routine.
- 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.
- IE1
diberi nilai ‘1’ secara hardware saat terdapat External Interrupt 1. IE1 akan diberi nilai ‘0’ secara hardware saat interrupt diproses.
- IT1
bernilai ‘1’ untuk menentukan falling edge sebagai trigger atau
pemicu pada External Interrupt 1. IT1 bernilai ‘0’ untuk menentukan low level sebagai trigger atau pemicu pada External Interrupt 1.


- IE0
diberi nilai ‘1’ secara hardware saat terdapat External Interrupt 0. IE0 akan diberi nilai ‘0’ secara hardware saat interrupt diproses.
- IT0
bernilai ‘1’ untuk menentukan falling edge sebagai trigger atau
pemicu pada External Interrupt 0. IT0 bernilai ‘0’ untuk menentukan low level sebagai trigger atau pemicu pada External Interrupt 0.


Berikut ini adalah penjelasan masing-masing bit SCON yang berkaitan dengan interrupt:
- T1
bernilai ‘1’ jika terdapat pengiriman secara serial. T1 harus diberi nilai ‘0’ oleh program user untuk membersihkan interrupt.
- R1
bernilai ‘1’ jika terdapat penerimaan secara serial. R1 harus diberi nilai ‘0’ oleh program user untuk membersihkan interrupt.

Dalam mempelajari interrupt terdapat istilah Interrupt Vector Address dan Interrupt Service Routine. Interrupt Vector Address adalah alamat yang akan dituju oleh MCS-51 jika terjadi interrupt.

Interrupt Service Routine adalah rutin yang akan dijalankan pada saat terjadi interrupt. Jika rutin yang akan dijalankan sangat singkat, rutin tersebut dapat ditempatkan pada alamat yang sama dengan Interrupt Vector Address. Namun penempatan Interrupt Service Routine pada Interrupt Vector Address tidak disarankan karena dapat ‘menerjang’ Interrupt Vector Address milik interrupt lain terutama jika rutin yang diproses cukup panjang. Langkah lebih aman adalah dengan cara memindah Interrupt Service Routine pada alamat lain dan memberikan instruksi untuk lompatan ke alamat tersebut tepat pada Interrupt Vector Address yang bersangkutan.
Intruksi untuk keluar dari sebuah Interrupt Service Routine hanya dapat diberikan dengan instruksi RETI (Return From Interrupt). Hal ini disebabkan adanya Interrupt Control System pada mikrokontroler. Interrupt Control System memiliki semacam Internal Interrupt Flag yang digunakan oleh CPU sebagai tanda apakah sebuah rutin interrupt masih diproses atau sudah selesai. Internal Interrupt Flag ini hanya dapat dibersihkan secara software dengan instruksi RETI dan bukan RET.
Jika terjadi interrupt, maka interrupt flag akan bernilai ‘1’ pada bit yang menunjukkan sumber interrupt. Jika CPU menemukan adanya interrupt pada saat sampling, proses selanjutnya adalah sebagai berikut :
1.      CPU akan menjalankan instruksi LCALL yang akan menyimpan Program Counter (PC) ke stack dengan urutan 8 bit terendah terlebih dahulu.
2.   Interrupt dengan prioritas sama atau lebih rendah akan dihalangi.
3. Jika sumber interrupt berasal dari Timer/Counter atau External Interrupt, interrupt flag yang bersangkutan akan dibersihkan.
4.  PC akan diisi dengan alamat Interrupt Vector Address (IVA) dari interrupt yang bersangkutan.
5.  Interrupt Service Routine (ISR) akan diproses.
6. Setelah ISR selesai diproses dan diakhiri dengan RETI, alamat PC akan diambil dari stack untuk melanjutkan proses program utama
Instruksi LCALL tersebut dikeluarkan secara hardware dan bukan dari program user. Instruksi ini hanya akan dihalangi oleh tiga hal, yaitu :
a. CPU sedang memproses interrupt lain yang prioritasnya sama atau lebih tinggi. Interrupt tidak akan dapat menginterupsi interrupt lain dengan prioritas sama atau lebih tinggi.
b. Cycle saat itu bukan cycle terakhir dari eksekusi instruksi yang sedang diproses. Semua instruksi yang sedang diproses akan diselesaikan sebelum melompat ke IVA.
c.  Instruksi yang sedang diproses adalah RETI atau mengakses register IE atau IP. Setelah menjalankan instruksi RETI atau mengakses register IE atau IP, CPU akan menjalankan minimal satu instruksi lagi.
Dalam menggunakan interrupt, user sering melakukan beberapa kesalahan yang akan mengakibatkan kekacauan program. Beberapa hal yang harus diperhatikan antara lain:
- Pengamanan Nilai Register
Munculnya sebuah interrupt tidak dapat diprediksi sehingga register dapat berubah kapan saja dan menjadi apa saja. Misalkan user memiliki register bernilai 4h dan proses selanjutnya adalah menambahkannya dengan 6h sehinggga didapat hasil Ah. Jika terjadi interrupt sebelum proses penambahan terjadi dan register tersebut berubah menjadi 8h, maka hasil yang didapat akan menjadi Eh. Pengamanan nilai register dapat dilakukan dengan menggunakan instruksi PUSH. Register yang sering diamankan (karena sering digunakan) antara lain : PSW, ACC, B, R0-R7, dan DPTR.
- Pengembalian Register
Register yang di-PUSH pertama harus di-POP terakhir. Register yang di-PUSH terakhir harus di-POP pertama. Jika hal ini dilanggar, maka nilai yang dikembalikan bukan nilai semula melainkan nilai milik register lain.
- Penggunaan RETI
Penggunaan RET memang akan mengembalikan alamat semula. Namun CPU akan tetap berpikir bahwa CPU masih menjalankan sebuah interrupt dan belum menyelesaikannya. Interrupt harus diakhiri dengan RETI.
External Interrupt bersumber dari luar 1C MCS-51. MCS-51 menyediakan dua External Interrupt yang menggunakan pin INT0 (P3.2) dan INT1 (P3.3). Adanya trigger pada pin INT0 akan mengakibatkan IE0 bernilai ‘1’. Sedangkan adanya trigger pada pin INT1 akan mengakibatkan IE1 bernilai ‘1’. Trigger atau pemicu interrupt ini ada dua tipe, yaitu falling edge trigger dan low level trigger.
Pada falling edge trigger, interrupt akan dianggap valid jika pin yang bersangkutan bernilai high selama minimal 1 machine cycle dan bernilai low selama minimal 1 machine cycle berikutnya. Interrupt flag akan dibersihkan secara hardware saat CPU melompat ke vector address. Pada low level trigger, external interrupt harus bernilai low hingga interrupt flag bernilai ‘1’. Kemudian external interrupt harus dikembalikan ke nilai high sebelum CPU menganggapnya sebagai sebuah interrupt lagi.
CPU akan melakukan sampling terhadap kondisi interrupt flag pada S5P2 pada tiap machine cycle. Namun nilai ini baru akan di-polling pada cycle selanjutnya. Jika interrupt tersebut valid maka instruksi yang diproses selanjutnya adalah LCALL ke vector address. Instruksi LCALL membutuhkan waktu 2 machine cycle, sehingga proses sejak adanya interrupt hingga instruksi pertama pada service routine membutuhkan waktu minimal 3 machine cycle.           

2.1.6 Perangkat Instruksi
Ada beberapa instruksi yang dikenal oleh mikrokontroler AT89C51 yaitu:
·         Instruksi aritmetika
·         Intruksi logika dan manipulasi bit
·         Instruksi transfer data
·         Instruksi percabangan
Instruksi-instruksi tersebut dijelaskan berikut ini.
1.      Instruksi Aritmetika
Intruksi aritmetika mencakup penambahan (ADD), pengurangan (SUBB), perkalian (MUL), dan pembagian (DIV).
a.       Penambahan (ADD)
Instruksi ini menjumlahkan suatu data dengan isi akumulator dan hasilnya disimpan dalam akumulator.
Operasi ADD : A←A+data
b.      Pengurangan (SUBB)
Instruksi ini mengurangkan isi akumulator dengan isi carry flag dan isi data.
Operasi SUBB : A←A-C-data

c.       Perkalian (MUL)
Instruksi ini mengalikan isi akumulator dengan isi register B.
Operasi MUL : AB←A*B
d.      Pembagian (DIV)
Instruksi ini akan membagi isi register akumulator dengan isi register B.         Operasi DIV : AB←A/B
e.       Penambahan satu (INC)
Proses ini menambahkan satu pada isi suatu register atau memori.
Operasi INC A : AB←A+B
f.       Pengurangan Satu (DEC)
Proses ini kebalikan dari proses pengurangan satu.

2.      Instruksi Logika Dengan Manipulasi Bit
Instruksi logika dan manipulasi bit terdiri dari :
a.      Logika AND (ANL)
Instruksi ini melakukan proses logika AND antara suatu register dengan register, register dengan data, carry flag dengan suatu alamat, dan lain- lain.
#1
#2
HASIL
0
0
0
0
1
0
1
0
0
1
1
1
Table…. Operasi  AND
Sebagai contoh, misalnya akumulator berisi 1011 1011B dan register R0 berisi 0100 1100B dengan instruksi ANL A, R0 menyebabkan isi akumulator menjadi sebagai berikut :
A : 1011 1011
B : 0100 1100
0000 1000 → akumulator akan berisi 0000 1000B atau 08H
Format instruksi AND :
ANL A, @Rr
ANL A, #data
ANL alamat data, A
ANL alamat, #data
b.       Logika OR (ORL)
Instruksi ini melakukan logika OR antara suatu register dengan register, register dengan data, carry flag dengan isi suatu alamat bit.
#1
#2
HASIL
0
0
0
0
1
1
1
0
1
1
1
1
Table … Operasi OR
Format instruksi OR :
ORL A, @Rr
ORL A, #data
ORL alamat data, A
ORL A, alamat data
c.       Logika NOT (CPL)
Instruksi ini melakukan proses logika NOT pada suatu reegister, carry flag, atau isi suatu alamat bit.
#1
HASIL
0
1
1
0
Tabel … Operasi NOT
Format instruksi NOT:
CPL A  
CPL alamat bit
d.      Logika EXOR (XRL)
Instruksi ini melakukan proses logika exlusive-OR antara register dengan register, register dengan data, dan lain-lain.
#1
#2
HASIL
0
0
0
0
1
1
1
0
1
1
1
0
Table … Operasi EXOR

e.       Manipulasi Pengesetan (CLR)
Instruksi ini menyebabkan suatu bit menjadi reset atau nol
Format instruksi CLR :
CLR A
CLR alamat bit
f.       Manipulasi Bit Pengesetan (SETB)
Instruksi ini akan mengeset bit yang dimaksud (atau 1)
Format instruksi SETB :
SETB C
SETB bit
g.      Manipulasi Bit Pengisian (MOV)
Instruksi ini akan mengisi suatu data dalam bentuk byte.
Format instruksi MOV :
MOV @Rr, A
MOV A, @Rr
MOV @Rr, #data
MOV @Rr, alamat data
MOV A, alamat data
h.      Manipulasi Lompat
Program counter akan meloncat ke alamat yang dikehendaki.
Format instruksinya :
JC alamat kode
JNC alamat kode

3.      Instruksi Transfer Data
Kelompok instruksi ini digunakan untuk memindahkan data antara :
a. register-register
b. memori-memori
c. register-memori
d. antarmuka-register
e. antarmuka-memori
Contoh :
MOV A, R0 : Pindahkan isi register R0 ke akumulator.
MOV A, @R0 : Pindahkan isi memori yang alamatnya ditunjukkan oleh register R0 ke akumulator.
MOV A, P3 : Pindahkan isi port 3 ke akumulator.

4.      Instruksi Percabangan
Instruksi percabangan ini dibagi dua yaitu percabangan dengan syarat dan percabangan tanpa syarat.
Percabangan dengan syarat terdiri atas :
a.      CJNE
Instruksi ini akan membandingkan isi register atau isi memori dengan suatu data. Bila hasil perbandingan itu sama, instruksi selanjutnya yang akan dituju. Bila tidak sama, instruksi yang ditunjuk oleh label yang akan dilaksanakan.
Format instruksi CJNE :
CJNE A, @Rr
b.      DJNZ
Instruksi ini akan mengurangi isi register atau memori dengan satu. Bila sudah 0, instruksi selanjutnya akan dilaksanakan dan bila belum 0 instruksi dilanjutkan ke label.
Format instruksi DJNZ :
DJNZ Rr, alamat kode
DJNZ alamat data, alamat kode
c.       JBC
Instruksi ini akan menguji suatu alamat bit. Apabila alamat bit berisi 1 (set) bit tersebut akan di clear dan selanjutnya program menuju tabel. Bila alamat bit berisi 0, instruksi selanjutnya yang akan dieksekusi.
Format instruksi JBC :
JBC alamat bit, alamat kode
Percabangan tanpa syarat meliputi :
d.      Long Jump (LJMP)
Format instruksi Long Jump :
LJMP alamat kode
e.       Short Jump (SJMP)
Format instruksi Short Jump :
SJMP alamat kode

2.1.7 Reset
Proses Reset merupakan proses untuk mengembalikan sistem ke kondisi semula. Reset tidak mempengaruhi internal program memory. Reset terjadi jika pin RST bernilai high selama minimal 2 machine cycle lalu kembali bernilai low. Power-on reset merupakan proses reset yang berlangsung secara otomatis pada saat sistem pertama kali diberi daya. Proses ini mempengaruhi semua register dan internal data memory.

Dengan asumsi bahwa frekuensi kristal yang digunakan adalah sebesar 12 MHz, maka pin RST harus bernilai high selama 2 mikrodetik.
Dengan rumus                   : Vcap = VCC x (1 – e-ͭ/τ)
Didapat persamaan           : VRST = VCC x e-ͭ/τ
Dimana                              : VRST = 0,7 VCC
   τ = RC
    t = 2µs
maka didapat nilai RC = 5,61 µs. Meskipun nilai ini secara teori mencukupi, namun pada kenyataannya, nilai RC yang umum dipakai adalah 82 ms. Jika nilai C ditentukan dengan mengambil nilai C yang umum yaitu 10 µF, maka akan didapat nilai sebesar 8K2 Ohm. Mengapa perbedaan nilai RC antara teori dan kenyataan berbeda sangat jauh ? Hal ini disebabkan oleh beberapa hal, antara lain :
- Waktu steady state catu daya
Catu daya membutuhkan waktu beberapa milidetik untuk mencapai tegangan 5 volt. Hal ini juga akan mempengaruhi pengisian tegangan pada kapasitor rangkaian reset.
- Oscillator membutuhkan waktu untuk mulai bekerja.
Oscillator membutuhkan beberapa milidetik untuk mulai bekerja. Jika oscillator belum bekerja pada saat siklus rangkaian reset selesai, maka mikrokontroler tidak akan mendapatkan reset. Jika diinginkan, pin RST juga dapat diberi rangkaian manual reset. Pemberian rangkaian ini membuat sistem dapat di-reset oleh user setiap saat dengan menekan tombol reset

Penambahan resistor 100 ohm bertujuan untuk membatasi arus dari VCC yang masuk ke pin RST pada saat tombol reset ditekan. Sedangkan penambahan dioda bertujuan untuk mempercepat proses pembuangan arus pada saat terjadi reset tidak sempurna.
Ilustrasi pada gambar 38 menunjukkan terjadinya beberapa macam reset yang dapat terjadi pada rangkaian tanpa dioda. Reset tidak sempurna dapat dianggap oleh MCS-51 sebagai reset yang valid. Namun karena prosesnya berlangsung terlalu cepat (kurang dari 2 machine cycle), maka proses reset yang terjadi tidak sempuna dan dapat mengakibatkan mikrokontroler bekerja tidak sempurna. Dengan adanya dioda yang memiliki resistensi kecil, maka pada saat tegangan kapasitor menurun, arus dapat terbuang dengan cepat. Hal ini akan memberi cukup waktu untuk melakukan reset yang sempurna.

Untuk aplikasi dimana konsumsi daya harus dibatasi, MCS-51 menyediakan dua mode untuk menghemat daya. Kedua mode tersebut adalah idle mode dan power mode. Rangkaian internal pada MCS-51 untuk keduanya terdapat pada gambar

1. IDLE MODE
Pada gambar  dapat dilihat bahwa adanya nilai ‘0’ pada bit IDL (dengan memberikan nilai ‘1’ pada bit IDL dalam PCON untuk mengaktifkan idle mode), hanya akan menghentikan pulsa clock pada CPU. Akibatnya proses kerja CPU akan terhenti. Pada mode ini berlaku kondisi :
- Sinyal clock hanya akan dihubungkan ke fungsi interrupt, timer,
dan serial port. Hubungan dengan fungsi lain akan diputus.
- Data pada register akan disimpan
- Semua port akan mempertahankan nilai terakhir
- ALE dan PSEN bernilai high
Cara untuk keluar dari mode ini adalah dengan adanya interrupt atau reset. Adanya interrupt akan memberi nilai ‘0’ pada bit IDL dalam PCON sehingga idle mode akan dimatikan. Setelah adanya RETI diakhir interrupt service routine, program akan menuju ke baris instruksi setelah instruksi yang mengaktifkkan idle mode. Adanya reset akan mengembalikan register PCON ke nilai default dimana bit IDL bernilai ‘0’ sehingga idle mode tidak aktif
2. POWER DOWN MODE
Pada gambar 39 dapat dilihat bahwa adanya nilai ‘0’ pada bit PD (dengan memberikan nilai ‘1’ pada bit PD dalam PCON untuk mengaktifkan power down). Akibatnya proses kerja CPU dan interrupt
akan terhenti. Pada mode ini berlaku kondisi :
- Semua aktivitas (on-chip oscillator dan fungsi IC) akan dihentikan
- Data pada internal memory (termasuk SFR) akan disimpan
- Semua port akan mempertahankan nilai terakhir
- ALE dan PSEN berlogika low
Satu-satunya cara untuk keluar dari mode ini adalah dengan melakukan reset. Adanya reset akan mengembalikan register PCON ke nilai default dimana bit PD bernilai ‘0’ sehingga power down tidak aktif. Reset tidak akan mempengaruhi data dalam internal memory (kecuali SFR).

2.1.8 Metoda Pengalamatan
Addressing adalah proses mengakses sebuah lokasi memori, baik untuk pembacaan ataupun penulisan. Cara untuk mengakses lokasi memori dapat digolongkan ke dalam beberapa kelompok, antara lain : direct, indirect, dan immediate.
1. Register Addressing
Register Addressing adalah proses mengakses memori dengan label antara R0 hingga R7
Contoh : MOV A, R1
Jika register bank yang digunakan adalah register bank 0, maka nilai pada alamat 01h (R1) akan diisikan ke Accumulator.

2. Direct Addressing
Sesuai dengan namanya, Direct Addressing adalah mengakses sebuah lokasi memori secara langsung dengan menggunakan alamatnya.
Contoh : MOV A, 47h
Isi dari alamat 47h akan langsung dipindah ke Accumulator.
3. Indirect Addressing
Indirect Addressing adalah proses mengakses alamat secara tak langsung.
Contoh: MOV A, @R0
Misalkan R0 berisi 35h dan alamat 35h berisi 60h. Pada saat instruksi tersebut diproses. CPU akan memeriksa isi R0. Karena R0 berisi 35h, maka CPU akan mengambil isi dari alamat 35h tersebut kemudian diisikan ke Accumulator. Diakhir proses Accumulator akan menyimpan nilai 60h.
4. Immediate Addressing
Immediate Addressing adalah proses mengisi suatu alamat memori dengan suatu nilai tertentu.
Contoh : MOV A, #30h
Nilai 30h akan langsung diisikan ke dalam Accumulator.
5. Relative Addressing
Relative Addressing digunakan pada instruksi untuk melompat ke alamat tertentu. Pada Relative Addressing. sebuah Relative Address atau Offset selebar 8 bit akan dijumlahkan dengan Program Counter sehingga menjadi alamat yang dituju. Karena Relative Address hanya selebar 8 bit, maka Relative-Addressing hanya dapat dipakai untuk melompat dalam jangkauan 128 byte ke belakang hingga 127 byte ke depan (-l28 s/d+ 127).
Contoh : SJMP SINI
Misalkan alamat instruksi tersebut berada pada 1100h dan 1101h sedangkan alamat label SINI adalah 1120h. Setelah instruksi tersebut diproses, PC meniadi bernilai 1102h. Berarti Relative Address-nya bernilai Fh (1102h + 000Fh = 1120h). Jika alamat label SINI 10F2h, maka Relative Address-nya bernilai -16 atau F0h. Dalam perhitungannya F0h akan diubah dalam 16 bit hingga menjadi FFF0h (1102h + FFF0h = 10F2h). Relative Addressing lebih fleksibel dipakai karena tidak terpengaruh oleh lokasi memori, namun jangkauannya terbatas.
6. Absolute Addressing
Absolute Addressing adalah melompat atau memanggil alamat yang dituju dengan menyatakan lokasi alamatnya secara langsung (tidak menggunakan offset). Absolute Addresing hanya digunakan dalam AJMP dan ACALL. Kapasitas internal program memory sebesar 64 KB dibagi menjadi 32 pages dengan kapasitas masing-masing page sebesar 2 KB (0000h - 07FFh, 0800h - 0FFFh, dst.). Alamat yang dituju langsung dinyatakan dalam 16 bit dimana 5bit teratas menunjukkan 2 KB page dan 11 bit terbawah menunjukkan alamat dalam 2 KB page tersebut. Saat Absolute Addressing digunakan, bagian yang berubah hanyalah 11 bit terbawah, sedangkan 5 bit teratas tetap.
Contoh : AJMP SINI
Misalkan alamat instruksi tersebut berada pada 1810h (0001100000010000b) dan 1811h (0001100000010001b) sedangkan alamat label SINI adalah 1F1Fh (0001111100011111b). Semua alamat memiliki 5 bit teratas yang sama (00011) sedangkan l1 bit sisanya bernilai sesuai alamat yang dituju, yaitu 11100011111. Jangkauan Absolute Addressing lebih jauh dari pada Relative Addressing, namun jangkauannya hanya dalam 2 KB page yang sama. Oleh karena itu Absolute Addressing tidak dapat digunakan untuk melompat dari alamat 07F0h (0000011111110000b) ke alamat 0810h (0000100000010000b) meskipun jarak keduanya hanya sebesar 20h.
7. Long Addressing
Long Addressing adalah melompat atau memanggil alamat yang dituju dengan menyatakan lokasi alamatnya secara langsung (tidak menggunakan offset). Long Addressing hanya digunakan dalam LJMP dan LCALL. Alamat yang dituju dinyatakan dalam 16 bit yang dapat dipakai semuanya sehingga dapat melompat sejauh mungkin dalam jangkauan 64 KB.
Contoh : LJMP SINI
Jangkauan Long Addressing paling jauh daripada Relative atau Absolute Addressing, namun instruksi Long Addressing memiliki lebar 3 byte sedangkan Relative dan Absolute Addressing masing-masing hanya selebar 2 byte.Untuk program-program yang memiliki ruang program memori terbatas, akan lebih baik jika Long Addressing hanya digunakan untuk melompat ke lokasi yang berada di luar jangkauan Relative dan Absolute Addressing.
8. Indexed Addressing
Indexed Addressing adalah proses mengakses suatu alamat dengan menggunakan indeks dan register basis (berupa DPTR atau PC). Instruksi yang menggunakan Indexed Addressing adalah : MOVC A, @A+<register basis> dan JMP @A+DPTR.
Contoh : MOVC A, @A+DPTR
Misalkan DPTR berniat 1000h, Accumulator bemilai 2h, dan alamat 1002h menyimpan nilai FFh. Saat instruksi tersebut diproses, CPU akan mengambil data pada alamat 1002h (1000h + 2h) dan mengisikannya ke Accumulator. Diakhir proses, Accumulator akan menyimpan nilai FFh. Indexed Addressing ini umumnya digunakan untuk mengakses lookup table. Dengan menetapkan nilai register basis terlebih dahulu, user hanya perlu mengubah nilai Accumulator untuk mendapatkan nilai dalam tabel.

2.2 Sensor Ultrasonik PING))) USSIR
Sensor jarak ultrasonik PING)))  adalah sensor 40 khz produksi parallax Inc. yang banyak digunakan untuk aplikasi atau kontes robot cerdas. Kelebihan sensor ini adalah hanya membutuhkan 1 sinyal ( SIG ) selain jalur 5 v dan ground. Perhatikan gambar dibawah ini :
Gambar 2.1 Sensor jarak ultrasonik ping

Gambar 2.2 Instalasi Sensor Ping
Sensor ultrasonik PING))) mempunyai 3 pin kepala (header) untuk jalur power suplay (5 ), groound, signal (I/O bi-directional). Pin tersebut identik denganpin motor servo.
Spesifikasi sensor ini :
a.       Tegangan catu daya sebesar 5
b.      Kisaran pengukuran 3cm - 3m.
c.       Arus catu sebesar 30 mA – 35 mA
d.      Delay before next measurement 200uS.
e.       Burst indicator LED menampilkan aktifitas sensor.
f.       Pulsa gema (echo pulse) adalah pulsa TTL positif, 115 µS – 18,5 mS
g.      Frekuensi letupan (burst frequensi) sebesar 40 KHz untuk 200 µS

           
Gambar 2.3 Diagram Waktu Sensor Ping
Sensor Ping mendeteksi jarak obyek dengan cara memancarkan gelombang ultrasonik (40 kHz) selama tBURST (200 μs) kemudian mendeteksi pantulannya. Sensor Ping memancarkan gelombang ultrasonik sesuai dengan kontrol dari mikrokontroler pengendali (pulsa trigger dengan tOUT min. 2 μs). Gelombang ultrasonik ini melalui udara dengan kecepatan 344 meter per detik, mengenai obyek dan memantul kembali ke sensor.
Ping mengeluarkan pulsa output high pada pin SIG setelah memancarkan gelombang ultrasonik dan setelah gelombang pantulan terdeteksi Ping akan membuat output low pada pin SIG. Lebar pulsa High (tIN) akan sesuai dengan lama waktu tempuh gelombang ultrasonik untuk 2x jarak ukur dengan obyek. Maka jarak yang diukur adalah [(tIN s x 344 m/s) ÷ 2] meter.

Gambar 2.4 Jarak Ukur Sensor Ping



2.3. Sensor Warna TCS230

Fitur
·            Power: (2.7V to 5.5V)
·            Interface:Digital TTL
·            High-Resolution Conversion of Light Intensity to Frequency
·            Programmable Color and Full-Scale Output Frequency
·            Power Down Feature
·            Communicates Directly to Microcontroller
·            Size: 28.4x28.4mm
TCS230 Warna daughterboard Sensor adalah detektor warna lengkap, termasuk sebuah chip TCS230 Taos sensor RGB, LED putih, lensa kolimator, dan standoffs untuk mengatur jarak penginderaan optimal. Ini plugs langsung ke Motherboard Stamp 2PE-BASIC atau Backpack Propeller dan juga akan antarmuka untuk setiap modul BASIC Stamp lainnya atau papan Propeller menggunakan opsional DB-Expander SIP Converter . Para TCS230-DB dapat mendeteksi dan mengukur berbagai hampir tak terbatas warna terlihat. Aplikasi termasuk tes membaca strip, menyortir menurut warna, penginderaan cahaya lingkungan dan kalibrasi, dan pencocokan warna, untuk nama hanya beberapa.
Para TCS230 memiliki berbagai photodetectors, masing-masing dengan baik filter merah, hijau, atau biru, atau tidak ada filter (jelas). Filter setiap warna didistribusikan secara merata di seluruh array untuk menghilangkan bias lokasi antara warna. Internal untuk perangkat ini sebuah osilator yang menghasilkan keluaran gelombang persegi yang frekuensi sebanding dengan intensitas warna yang dipilih. Baca dokumentasi di bawah ini dan memeriksa Demo Pencocokan Warna untuk informasi lebih rinci.
Telah dilakukan penelitian karakterisasi sistem sensor warna TCS230. Pada penelitian ini bertujuan untuk mengetahui karakteristik frekuensi keluaran sensor warna TCS 230 serta nilai RGB suatu jenis warna. Sensor warna TCS230 mengkonversikan besaran fisis yang berupa cahaya (warna) menjadi sinyal listrik yang berupa frekuensi gelombang.
Prinsip kerja pada penelitian ini adalah kertas melewati sensor TCS 230, dari tampilan akan terlihat besarnya data RGB serta besarnya frekuensi keluaran masing-masing warna. Dari data yang didapat besarnya frekuensi referensi untuk filter merah, filter biru dan filter hijau adalah 80,94 Hz, 91,73 Hz dan 98,28 Hz.
Frekuensi referensi tersebut digunakan untuk mencari nilai RGB suatu warna dari frekuensi keluaran sensor. Hasil dari penelitian, seperti pada frekuensi keluaran warna ungu untuk filter merah, hijau dan biru berturut-turut adalah 18.94 KHz , 6.15 KHz dan 21.52 KHz maka nilai RGB yang dihasilkan adalah R = 234, G= 67 dan B=219 
2.6. Sistem Pengirim dan Penerima SMS
2.6.1  Sms (short message service)
Sms merupakan salah satu layanan pesan teks yang di kembangkan dan distandarisasi oleh suatu badan yang bernama ETSI (European Telecomunication Standards Institute) sebagai bagian dari pengembangan GSM Phase 2, fitur SMS ini memungkinkan perangkat Stasiun Seluler Digital (Digital Celluller Terminal, seperti ponsel) untuk dapat mengirim dan menerima pesan - pesan teks dengan panjang sampai dengan 160 karakter melalui jaringan GSM . (ETSI, 1996).
Sms dapat dikirimkan ke perangkat Stasiun Seluler Digital lainnya hanya dalam beberapa detik selama berada pada jangkauan pelayanan GSM. Lebih dari sekedar pengiriman pesan biasa, layanan SMS memberikan garansi SMS akan sampai pada tujuan meskipun perangkaft yang di tuju sedang tidak aktif yang dapat disebabkan karena sedang dalam kondisi masih atau berada di luar jangkauan layanan GSM.
Jaringan SMS akan menyiimpan sementarapesan yang belum terkirim, dan akan segera mengirimkan ke perangkat yang dituju setelah adanya tanda kehadiran dari perangkat di jaringan tersebut.
Dengan fakta bahwa layanan SMS (melalui jaringan GSM) mendukung jangkauan/jelajah nasional dan internasional dengan waktu keterlambatan yang sangat kecil, memungkinkan layanan SMS cocok untuk dikembangkan sebagai aplikasi - aplikasi seperti : pager, email, dan notifikasi voice mailm serta layanan pesan banyak pemakai (multiple users).
2.6.2  GSM
Global System for Mobile Communication disingkat GSM adalah sebuah teknologi komunikasi selular yang bersifat digital. Teknologi GSM banyak diterapkan pada komunikasi bergerak, khusunyatelepon genggam. Teknologi ini memanfaatkan gelombangmikro dan pengiriman sinyal yang dibagi berdasarkan waktu, sehingga sinyal informasi yang dikirim akan sampai pada tujuan. GSM dijadikan standar global untuk komunikasi selular sekaligus sebagai teknologi selular yang paling banyak digunakan orang di seluruh dunia.
Mengetahui bagaimana proses pengiriman sms berlangsung, kita perlu lebih dulu mengetahui arsitektur jaringan yang dipakai. Di Indonesia ada 2 macam teknologi jaringan seluler yang cukup populer, yaitu GSM dan CDMA. Teknologi jaringan ini selalu mengalami perkembangan dan tentunya menawarkan berbagai kelebihan, diantaranya teknologi WCDMA, UMTS (3G) , CDMA 2000 dan yang menyediakan segala jenis kelebihan layanan dari sebelumnya. Namun topik pokok pembahasan artikel kita kali ini akan lebih fokus pada arsitektur jaringan GSMnya, atau teknologi 2G.
Gbr. 2.11 Arsitektur Jaringan GSM
2.6.3  Komponen Umum transmisi GSM
Dalam jaringan GSM umumnya ada beberapa perangkat pokok vital yang harus ada, diantaranya BTS, BSC, MSC/VLR, HLR dan SMSC. Berikut ini penjelasan masing-masing perangkat.
·            Base Transceiver Station (BTS)
BTS berfungsi sebagai perangkat transceiver untuk melakukan komunikasi dengan semua handset/Mobile Station (MS) yang aktif dan berada dalam area cakupannya (cell). BTS melaksanakan proses modulasi/demodulasi sinyal, equalisasi sinyal dan pengkodean error (error coding). Beberapa BTS dapat terhubung dengan sebuah BSC (Base Station Controller), sementara itu radius cakupan dari suatu cell berkisar antara antara 10 sampai 200 m untuk cell terkecil hingga beberapa kilometer untuk cell terbesar. Sebuah BTS biasanya dapat melayani 20-4- komunikasi panggilan secara bersamaan,
·            Base Station Controller (BSC)
BSC menyediakan fungsi pengaturan pada beberapa BTS yang dikendalikannya. Diantaranya fungsi handover, konfigurasi cell site, pengaturan sumber daya radio, serta tuning power dan frekuensi pada suatu BTS. BSc merupakan simpul (konsentrator) untuk menghubungkan dengan core network. Dalam jaringan GSM umumnya sebuah BSc dapat mengatur 70 buah BTS.
·            Mobile Switching Center (MSC) dan Visitor Location Register  
      (VLR)
MSC berfungsi melakukan fungsi switching dan bertanggung jawab untuk melakukan pengaturan panggilan, call setup, release, dan routing. MSC juga melakukan fungsi billing (terhubung ke billing system) dan sebagai gateway ke jaringan lain. VLR berisi informasi user yang bersifat dinamis yang sedang “attach” berada pada jaringan mobile, termasuk letak geografis. Biasanya VLR terintegrasi dengan MSC.
Dari MSC sebuah jaringan berkomunikasi dengan jaringan luar, misalnya : jaringan telepon rumah/Public Switched Telephone Network (PSTN), jaringan data Integrated Services Digital Network (ISDN), Circuit Switched Public Data Network (CSPDN) dan Packet Switched Public Data Network (PSPDN).
·            Home Location Register (HLR)
HLR adalah perangkat yang berisi data detail untuk tiap subscriber. Sebuah HLR umumnya mampu berisi ribuan sampai jutaan data pelanggan. Informasi yang ada HLR antara lain Mobile Station ISDN Number (MSISDN), International Mobile Subscriber Identify (IMSI), profile service subscriber, dll. Untuk komunikasi dengan elemen jaringan lain, HLR menggunak prokotol MAP (Mobile Aplication Part)
·            Short Message Service Center (SMSC)
SMSC mempunyai peran penting dalam arsitektur sms. SMSC berfungsi menyampaikan pesan sms antar Mobile Station (MS)/HP, dan juga melakukan fungsi store-and-forwading sms jikka nomor penerima sedang tidak dapat menerima pesan. Didalam jaringannya sebuah operator dapat mempunyai lebih dari satu perangkat SMSC, sesuai besar trafik sms jaringan tersebut. SMSC dapat berkomunikasi dengan elemen lain seperti MSC, dan HLR dengan menggunakan protokol MAP. Seiring berkembangnya layanan, SMSC juga dapat berkomunikasi dengan server aplikasi menggunakan sebuah protocol yang cukup populer yaitu, Short Message Peer to Peer Protocol (SMPP).


Comments