Jumat, 13 Maret 2009

TIMER_COUNTER

H. TIMER DAN COUNTER

Timer dan Counter merupakan sarana input yang kurang dapat perhatian pemakai mikrokontroler, dengan sarana input ini mikrokontroler dengan mudah bisa dipakai untuk mengukur lebar pulsa, membangkitkan pulsa dengan lebar yang pasti, dipakai dalam pengendalian tegangan secara PWM (Pulse Width Modulation) dan sangat diperlukan untuk aplikasi remote control dengan infra merah.
Pada dasarnya sarana input yang satu ini merupakan seperangkat pencacah biner (binary counter) yang terhubung langsung ke saluran-data mikrokontroler, sehingga mikrokontroler bisa membaca kedudukan pancacah, bila diperlukan mikrokontroler dapat pula merubah kedudukan pencacah tersebut. Seperti layaknya pencacah biner, bilamana sinyal denyut (clock) yang diumpankan sudah melebihi kapasitas pencacah, maka pada bagian akhir untaian pencacah akan timbul sinyal limpahan, sinyal ini merupakan suatu hal yang penting sekali dalam pemakaian pencacah. Terjadinya limpahan pencacah ini dicatat dalam sebuah flip-flop tersendiri.
Di samping itu, sinyal denyut yang diumpankan ke pencacah harus pula bisa dikendalikan dengan mudah.

Sinyal denyut yang diumpankan ke pencacah bisa dibedakan menjadi 2 macam, yang pertama yalah sinyal denyut dengan frekuensi tetap yang sudah diketahui besarnya dan yang kedua adalah sinyal denyut dengan frekuensi tidak tetap. Jika sebuah pencacah bekerja dengan frekuensi tetap yang sudah diketahui besarnya, dikatakan pencacah tersebut bekerja sebagai timer, karena kedudukan pencacah tersebut setara dengan waktu yang bisa ditentukan dengan pasti. Jika sebuah pencacah bekerja dengan frekuensi yang tidak tetap, dikatakan pencacah tersebut bekerja sebagai counter, kedudukan pencacah tersebut hanyalah menyatakan banyaknya pulsa yang sudah diterima pencacah.
Pencacah biner pembentuk Timer/Counter MCS51 merupakan pencacah biner menaik (count up binary counter) yang mencacah dari $0000 sampai $FFFF, saat kedudukan pencacah berubah dari $FFFF kembali ke $0000 akan timbul sinyal limpahan. Untuk mengatur kerja Timer/Counter dipakai 2 register tambahan yang dipakai bersama oleh Timer 0 dan Timer 1. Register tambahan tersebut adalah register TCON (Timer Control Register), memori-data internal nomor $88, bisa dialamat secara bit) dan register TMOD (Timer Mode Register, memori-data internal nomor $89).

Pencacah biner Timer 0 dan 1
TL0, TH0, TL1 dan TH1 merupakan SFR (Special Function Register) yang dipakai untuk membentuk pencacah biner perangkat Timer 0 dan Timer 1. Kapasitas keempat register tersebut masing-masing 8 bit, bisa disusun menjadi 4 macam Mode pencacah biner. Susunan TL0, TH0, TL1 dan TH1 pada masing-masing mode adalah sebagai berikut:

  • Mode 0 – Pencacah Biner 13 bit
Pencacah biner dibentuk dengan TLx (maksudnya bisa TL0 atau TL1) sebagai pencacah biner 5 bit (meskipun kapasitas sesungguhnya 8 bit), limpahan dari pencacah biner 5 bit ini dihubungkan ke THx (maksudnya bisa TH0 atau TH1) membentuk sebuah untaian pencacah biner 13 bit, limpahan dari pencacah 13 bit ini ditampung di flip-flop TFx (maksudnya bisa TF0 atau TF1) yang berada di dalam register TCON.
  • Mode 1 – Pencacah Biner 16 bit
Mode 1 - Pencacah Biner 16 Bit
Mode ini sama dengan Mode 0, hanya saja register TLx dipakai sepenuhnya sebagai pencacah biner 8 bit, sehingga kapasitas pencacah biner yang tersbentuk adalah 16 bit. Seiring dengan sinyal denyut, kedudukan pencacah biner 16 bit ini akan bergerak dari $0000 (biner 0000 0000 0000 0000), $0001, $0002 … sampai $FFFF (biner 1111 1111 1111 1111), kemudian melimpah kembali menjadi $0000.




Mode 2 – Pencacah Biner 8 bit dengan Isi Ulang
Mode 2 - Pencacah Biner 8 Bit dengan Isi Ulang
TLx dipakai sebagai pencacah biner 8 bit, sedangkan THx dipakai untuk menyimpan nilai yang diisikan ulang ke TLx, setiap kali kedudukan TLx melimpah (berubah dari $FF menjadi $00). Dengan cara ini bisa didapatkan sinyal limpahan yang frekuensinya ditentukan oleh nilai yang disimpan dalam TH0.

Mode 3 – Gabungan Pencacah Biner 16 bit dan 8 Bit
Gambar 2dMode 3 – Gabungan Pencacah Biner 16 Bit dan 8 Bit
Pada Mode 3 TL0, TH0, TL1 dan TH1 dipakai untuk membentuk 3 untaian pencacah, yang pertama adalah untaian pencacah biner 16 bit tanpa fasiltas pemantau sinyal limpahan yang dibentuk dengan TL1 dan TH1. Yang kedua adalah TL0 yang dipakai sebagai pencacah biner 8 bit dengan TF0 sebagai sarana pemantau limpahan. Pencacah biner ketiga adalah TH0 yang dipakai sebagai pencacah biner 8 bit dengan TF1 sebagai sarana pemantau limpahan.
Register Pengatur Timer
Register TMOD dan register TCON merupakan register pembantu untuk mengatur kerja Timer 0 dan Timer 1, kedua register ini dipakai bersama oleh Timer 0 dan Timer 1.


Berikut adalah skema lengkap Timer 1 dalam Mode 1


Program timer
Setelah kita mengkonfigurasi timer (TMOD) yang akan kita gunakan, untuk mulai mencacah maka kita hanya perlu men-set satu bit saja pada register TCON yaitu TRx, dan untuk menghentikan pencacahannya maka kita hanya perlu membawa TRx tadi menjadi low, HANYA ITU !.
Ø Program Delay dengan Timer

INTERUPT


J. INTERUPT

Saat kaki RESET pada IC mikroprosesor/mikrokontroler menerima sinyal reset (pada MCS51 sinyal tersebut berupa sinyal ‘1’ sesaat, pada prosesor lain umumnya merupakan sinyal ‘0’ sesaat), Program Counter diisi dengan sebuah nilai. Nilai tersebut dinamakan sebagai vektor reset (reset vector), merupakan nomor awal memori-program yang menampung program yang harus dijalankan.
Pembahasan di atas memberi gambaran bahwa proses reset merupakan peristiwa perangkat keras (sinyal reset diumpankan ke kaki Reset) yang dipakai untuk mengatur kerja dari perangkat lunak, yakni menentukan aliran program prosesor (mengisi Program Counter dengan vektor reset). Dalam proses interupsi, terjadinya sesuatu pada perangkat keras tertentu dicatat dalam flip-flop khusus, flip-flop tersebut sering disebut sebagai ‘petanda’ (flag), catatan dalam petanda tersebut diatur sedemikian rupa sehingga bisa merupakan sinyal permintaan interupsi pada prosesor. Jika permintaan interupsi ini dilayani prosesor, Program Counter akan diisi dengan sebuah nilai. Nilai tersebut dinamakan sebagai vektor interupsi (interrupt vector), yang merupakan nomor awal memori-program yang menampung program yang dipakai untuk melayani permintaan interupsi tersebut.
Program yang dijalankan dengan cara interupsi, dinamakan sebagai program layanan interupsi (ISR - Interrupt Service Routine). Saat prosesor menjalankan ISR, pekerjaan yang sedang dikerjakan pada program utama sementara ditinggalkan, selesai menjalankan ISR prosesor kembali menjalankan program utama, seperti yang digambarkan dalam gambar dibawah.
Sumber Interupsi
AT89S51 mempunyai 6 sumber interupsi, yakni Interupsi External (External Interrupt) yang berasal dari kaki INT0 dan INT1, Interupsi Timer (Timer Interrupt) yang berasal dari Timer 0 maupun Timer 1, Interupsi Port Seri (Serial Port Interrupt) yang berasal dari bagian penerima dan bagian pengirim Port Seri. Bit IE0/IE1 dalam TCON merupakan petanda (flag) yang menandakan adanya permintaan Interupsi Eksternal. Ada 2 keadaan yang bisa meng-aktif-kan petanda ini, yang pertama karena level tegangan ‘0’ pada kaki INT0/INT1, yang kedua karena terjadi transisi sinyal ‘1’ menjadi ‘0’ pada kaki INT0/INT1. Pilihan bentuk sinyal ini ditentukan lewat bit IT0/IT1 yang terdapat dalam register TCON.
Menjelang prosesor menjalankan ISR dari Interupsi Eksternal, bit IE0/IE1 dikembalikan menjadi ‘0’, menandakan permintaan Interupsi Eksternal sudah dilayani. Namun jika permintaan Interupsi Ekternal terjadi karena level tegangan ‘0’ pada kaki IT0/IT1, dan level tegangan pada kaki tersebut saat itu masih =’0’ maka bit IE0/IE1 akan segera menjadi ‘1’ lagi. Bit TF0/TF1 dalam TCON merupakan petanda (flag) yang menandakan adanya permintaan Interupsi Timer, bit TF0/TF1 menjadi ‘1’ pada saat terjadi limpahan pada pencacah biner Timer 0 atau Timer 1.
Menjelang prosesor menjalankan ISR dari Interupsi Timer, bit TF0/TF1 dikembalikan menjadi ‘0’, menandakan permintaan Interupsi Timer sudah dilayani. Interupsi port seri terjadi karena dua hal, yang pertama terjadi setelah port seri selesai mengirim data 1 byte, permintaan interupsi semacam ini ditandai dengan petanda (flag) TI=’1’. Yang kedua terjadi saat port seri telah menerima data 1 byte secara lengkap, permintaan interupsi semacam ini ditandai dengan petanda (flag) RI=’1’. Petanda di atas tidak dikembalikan menjadi ‘0’ menjelang prosesor menjalankan ISR dari Interupsi port seri, karena petanda tersebut masih diperlukan ISR untuk menentukan sumber interupsi berasal dari TI atau RI. Agar port seri bisa dipakai kembali setelah mengirim atau menerima data, petanda-petanda tadi harus di-nol-kan lewat program.

Mengaktipkan Interupsi
Semua sumber permintaan interupsi yang di bahas di atas, masing-masing bisa di-aktip-kan atau di-nonaktip-kan secara tersendiri lewat bit-bit yang ada dalam register IE (Interrupt Enable Register). Bit EX0 dan EX1 untuk mengatur interupsi eksternal INT0 dan INT1, bit ET0 dan ET1 untuk mengatur interupsi Timer 0 dan Timer 1, bit ES untuk mengatur interupsi port seri. Di samping itu ada pula bit EA yang bisa dipakai untuk mengatur semua sumber interupsi sekaligus. Setelah reset, semua bit dalam register IE bernilai ‘0’, artinya sistem interupsi dalam keadaan non-aktif. Untuk mengaktipkan salah satu sistem interupsi, bit pengatur interupsi bersangkutan diaktipkan dan juga EA yang mengatur semua sumber interupsi. Misalnya instruksi yang dipakai untuk mengaktipkan interupsi ekternal INT0 adalah SETB EX0 disusul dengan SETB EA.

Vektor Interupsi
Vektor interupsi untuk interupsi eksternal INT0 adalah $0003, untuk interupsi Timer 0 adalah $000B, untuk interupsi ekternal INT1 adalah $0013, untuk interupsi Timer 1 adalah $001B dan untuk interupsi port seri adalah $0023.

Prioritas Interupsi
Saat prosesor sedang mengerjakan ISR, bisa jadi terjadi permintaan interupsi lain, jika permintaan interupsi yang datang belakangan ini mempunyai perioritas lebih tinggi, ISR yang sedang dikerjakan ditinggal dulu, prosesor melayani permintaan yang perioritas lebih tinggi, selesai melayani interupsi perioritas tinggi prosesor meneruskan ISR semula, baru setelah itu kembali mengerjakan program utama. Hal ini dikatakan sebagai interupsi bertingkat (nested interrupt), tapi tidak semua prosesor mempunyai kemampuan melayani interupsi secara ini.
Masing-masing sumber interupsi bisa ditempatkan pada dua tingkatan perioritas yang berbeda. Pengaturan tingkatan perioritas isi dilakukan dengan bit-bit yang ada dalam register IP (Interrupt Priority). Bit PX0 dan PX1 untuk mengatur tingkatan perioritas interupsi eksternal INT0 dan INT1, bit PT0 dan PT1 untuk mengatur interupsi timer 0 dan timer 1, bit PS untuk mengatur interupsi port serial. Setelah reset, semua bit dalam register IP bernilai ‘0’, artinya semua sumber interupsi ditempatkan pada tingkatan tanpa perioritas. Masing-masing sumber interupsi bisa ditempatkan pada tingkatan perioritas utama dengan cara men-‘satu’-kan bit pengaturnya. Misalnya interupsi timer 0 bisa ditempatkan pada tingkatan perioritas utama dengan instruksi SETB PT1.Tetapi apabila register IP tidak diatur oleh si pemrogram maka urutan prioritasnya adalah yang pertama adalah reset kemudian INT0 kemudian timer 0 lalu INT1 lalu timer 1 dan yang terakhir adalah port serial.
Sebuah ISR untuk interupsi tanpa perioritas bisa diinterupsi oleh sumber interupsi yang berada dalam tingkatan perioritas utama. Tapi interupsi yang berada pada tingkatan perioritas yang sama, tidak dapat saling meng-interupsi. Jika 2 permintaan interupsi terjadi pada saat yang bersamaan, sedangkan kedua interupsi tersebut terletak pada tingkatan perioritas yang berlainan, maka interupsi yang berada pada tingkatan perioritas utama akan dilayani terlebih dulu, setelah itu baru melayani interupsi pada tingkatan tanpa perioritas.

Sistem interupsi MCS51
Berikut adalah bagan lengkap sistem interupsi MCS51
Penghentian interupsi
Layanan interupsi oleh MCS51 dilakukan dengan menjalankan program setara dengan LCALL mulai dari memori-program yang ditunjuk oleh vektor interupsi, sampai MCS51 menjumpai instruksi RETI (Return from Interrupt). Intstruksi RETI memberitahu MCS51 bahwa ISR sudah selesai dikerjakan, kemudian mengambil kembali isi Program Counter yang sebelumnya disimpan ke dalam Stack. Dengan demikian MCS51 akan melanjutkan kembali pekerjaan di program utama yang ditinggal untuk melayani interupsi.
Instruksi RET memang bisa dipakai untuk meninggalkan ISR dan melanjutkan kerja program utama. Tapi RET tidak bisa menghentikan proses interupsi, akibatnya sebelum menjumpai instruksi RETI, MCS51 tidak akan melayani permintaan interupsi yang lain.

Ø Interupt Nol (RESET)
Silahkan Mikrokontrolernya Di RESET …!!!
Ø Program Interupt Eksternal (INT0 & INT1)

Ø Program Interupt Timer (TIMER 0 & TIMER 1)



Ø Program Interupt Serial

SET_INSTRUKSI

E. SET INSTRUKSI AT89S51

· Instruksi Aritmatika
Pada tabel 2 diperlihatkan instruksi yang digunakan untuk operasi aritmatika. Instruksi ADD, SUB harus menggunakan akumulator dan hasil operasi disimpan dalam akumulator. Untuk instruksi INC, DEC dilakukan di DPRT, akumulator, register, alamat, dan memori. Untuk operasi MUL dan DIV hanya bisa dilakukan dengan menggunakan akumulator dan register B.
Tabel2().

· Instruksi Logik
Operasi logika dapat dilakukan pada akumulator dan memori, tetapi ada beberapa operasi yang hanya dapat dilakukan pada akumulator. Untuk lebih jelasnya dapat dilihat tabel 3. Bila menggunakan akumulator, eksekusi dilakukan selama 1ms dan lainnya 2ms (clock 12 MHz).
Tabel 3().

· Instruksi Transfer Data
Internal RAM
Pada tabel 4 diperlihatkan instruksi yang tersedia untuk memindahkan data di dalam internal memori. Instruksi MOV ,_ digunakan untuk memindahkan data antara internal RAM dan SFR tanpa melalui akumulator. Instruksi PUSH, isi SP ditambah satu kemudian isi dari variable yang ditunjukkan oleh SP. Instruksi XCH A,_ digunakan untuk menukar isi akumulator dengan data yang ada pada alamat yang ditunjukkan.
Tabel 4()

Eksternal RAM
Pada tabel 5 diperlihatkan instruksi yang tersedia untuk memindahkan data ke eksternal memori. Instruksi MOVX @DPRT,A digunakan untuk memindahkan data dari Akumulator ke DPRT, dimana DPRT berisi suatu alamat memori eksternal dengan lebar alamat sepanjang 16 bit. Hal ini dilakukan misalnya untuk mengakses alamat dari eksternal memori ke register 16 bit DPRT dengan menggunakan perintah:
MOV DPRT, #address memori
Setelah penginisialisasian alamat dari eksternal memori atau data maka kita dapat menjalankan perintah :
MOVX @DPRT,A
Untuk memindahkan isi akumulator ke alamat yang ditunjukkan oleh register 16 bit DPRT.

Tabel5()

Tabel Tengok ( Look-up tables )
Pada tabel 6 ditunjukkan dua instruksi yang dapat digunakan untuk membaca tabel tengok yang tersimpan dalam memori program. Karena kedua instruksi ini hanya mengakses memori program saja, maka tabel tengok hanya bisa dibaca saja, tidak mungkin di remajakan atau di update. Jika akses tabelnya ke memori program eksternal, maka tanda bacanya melalui kaki PSEN.
Tebel6().

· Instruksi BooleanMikrokontroler AT89S51 mempunyai prosesor Boolean (bit tunggal) yang memudahkan pelaksanaan program. Semua bit diakses dengan pengalamatan langsung. Alamat bit dari 00H sampai 7FH untik 128 byte bawah dan ditambah 128 byte lagi oleh SFR pada internal memori. Seluruh port dapat dialamati perbit dan setiap satu bit port dapat diperlakukan secara terpisah. Instruksi dari tabel operasi Boolean diperlihatkan pada tabel 7.

Tabel7()
· Instruksi Percabangan
Instruksi percabangan sangat diperlukan dalam sebuah program, intruksi tersebut antara lain adalah JMP, CALL, RET, RETI, NOT.
a. Kelompok instruksi JUMP
Pada saat mikrokontroler melaksanakan instruksi JUMP, nilai Program Counter yang runtut sesuai dengan alur program diganti dengan lokasi memori program baru yang dikehendaki. Sedangkan isi lokasi berikutnya disimpan terlebih dahulu ke stack (PUSH) secara langsung. Mikrokontroler memiliki 4 macam instruksi JUMP yakni JMP, LJMP,(long jump) AJMP (absolute jump) dan SJMP (short jump). Instruksi LJMP ukurannya 3 byte, sedangkan instruksi AJMP,JMP dan SJMP cukup 2 byte.


b. Kelompok instruksi untuk Sub-Rutin
Instruksi ini melibatkan penggunaan sub-rutin program, selain melibatkan Program Counter, juga melibatkan stack yang diatur oleh petunjuk register stack. Instruksi yang digunakan adalah CALL, instruksi ini akan memanggil sebuah sub-rutin tertentu. Setelah mengerjakan sub-rutin tersebut maka mikrokontroler kembali mengerjakan alur program yang utama. Instruksi ini hanya akan kembali ke program utama semula jika bertemu dengan instruksi RET di akhir sub-rutin. Selain instruksi CALL juga terdapat instruksi ACALL dan LCALL. Jika kita memakai program interupt maka akan terdapat instruksi RETI, yaitu instruksi khusus yang digunakan untuk mengembalikan alur program setelah menjalankan sub-rutin interupt.
c. Kelompok instruksi lompatan bersyarat
Instruksi ini masih berhubungan dengan instruksi JUMP, dimana instruksi ini juga melibatkan operasi bit. Instruksi tersebut adalah JZ/JNZ, JC/JNC, JB/JNB/JBC. Instruksi JZ (jump if zero) dan JNZ (jump if not zero) adalah instruksi bersyarat yang memantau nilai Akumulator A, jika terpenuhi maka program akan melompat kememori program yang dituju. Instruksi JC (jump if carry) dan JNC (jump if not carry) adalah instruksi yang memantau nilai bit carry didalam Program Status Word (PSW). Instruksi JB (jump on bit set), JNB (jump on not bit set), JBC ( jump on bit set then clear bit) merupakan instruksi JUMP bersyarat yang memantau nilai bit tertentu. Bit-bit tertentu tersebut bisa merupakan suatu bit dalam register status maupun kaki masukan mikrokontroler.
d. Kelompok instruksi proses dan test
Kelompok instruksi ini memiliki dua anggota, yaitu instruksi DJNZ (decrement and jump if not zero) dan CJNE (compare and jump if not equal). Instruksi DJNZ adalah instruksi yang akan mengurangi 1 nilai register serbaguna atau memori data dan akan lompat pada memori program yang dituju jika ternyata setelah pengurangan 1 hasilnya tidak nol. Instruksi CJNE membandingkan dua nilai yang disebut dan akan melompat pada memori program yang dituju kalau kedua nilai tersebut tidak sama.

MODE_PENGALAMATAN

D. MODE PENGALAMATAN

Mode pengalamatan pada mikrokontroler AT89S51 adalah sebagai berikut :
· Pengalamatan Langsung ( Direct Addressing )
Dalam pengalamatan langsung, operand-operand ditentukan berdasar alamat 8-bit (byte) dalam suatu instruksi. Hanya RAM internal dan SFR yang bisa diakses secara langsung. Misalnya instruksi : MOV A,7FH.
· Pengalamatan Tak-Langsung ( Indirect Addressing )
Dalam pengalamatan Tak Langsung instruksi menentukan suatu register yang digunakan untuk menyimpan alamat operand. Baik RAM internal maupun eksternal dapat diakses secara tak-langsung. Register alamat 8bit dapat menggunakan Stack Pointer atau R0 dan R1 dari bank register yang dipilih. Sedangkan untuk alamat 16-bit hanya bisa menggunakan register pointer dat 16-bit atau DPTR. Misalnya instruksi : MOV A,@R0.
· Instruksi-instruksi Register
Instruksi yang berubungan dengan Register, pengaksesan R0-R7 dapat dilakukan dengan instruksi yang op-codenya mengandung 3 bit spesifikasi register ( 000 untuk R0, 001 untuk R1 hingga 111 untuk R7. pegaksesan tersebut dapat menghemat penggunaan kode instruksi, karena tidak memerlukan sebuah byte untuk alamat. Saat instruksi tersebut dikerjakan, satu dari delapan register pada bank yang terpilih yang diakses. Misalnya instruksi : MOV A,R1 sama dengan MOV A,01H.
· Instruksi-instruksi Register-Khusus
Instruksi yang dikhususkan pada register tertentu dan tidak berlaku untuk register lain. Misalnya instruksi : INC A , instruksi tersebut hanya berlaku di Akumulator saja.
· Pengalamatan Segera ( Immediet addressing )
Nilai dari suatu konstanta dapat segera menyatu dengan op-codenya dalam memori program. Misalnya instruksi : MOV A,#100, instruksi ini langsung memberikan konstanta 100 desimal kedalam akumulator.
· Pengalamatan Terindeks ( Indexed Addressing )
Memori program hanya bisa di akses melalui pengalamatan terindeks. Mode pengalamatan ini dapat ditujukan untuk membaca tabel tengok ( look-up tables) yang tersimpan pada memori program. Sebuah register dasar 16-bit ( bisa DPTR atau pencacah Program Counter/PC ) menunjuk ke awal tabel dan akumulator di-set pada angka indeks tabel yang akan diakses. Misalnya instruksi : MOVC A,@A+PC , pada instruksi ini Akumulator akan diisi konstanta pada tabel tengok diprogram yang berada pada nilai pencacah/PC di tambah dengan nilai akumulator sebelumnya. Jika A semula diisi dengan 1H dan PC sampai di alamat memori-program 40H maka tabel yang berada di alamat 40+1 = 41H akan dimasukkan ke A.

ORGANISASI_MEMORY

C. ORGANISASI MEMORI

Semua produk mikrokontroler Flash AT89S51 Atmel memiliki ruang alamat memori data dan program yang terpisah, sebagaimana ditunjukkan pada gambar 2 .Pemisahan memori program dan data tersebut membolehkan memori data diakses dengan alamat 8 bit, sehingga dapat dengan cepat dan dengan mudah disimpan dan dimanipulasi oleh CPU 8 bit. Namun demikian, alamat memori data 16 bit bisa juga dihasilkan melalui register DPTR.
Picture 2()

Memori Program
Pada gambar 3 ditunjukan pemetaan bagian bawah dari memori program. Setelah reset, CPU segera mengerjakan program mulai dari lokasi 0000h.
Picture 3().

Sebagaimana ditunjukan pada gambar 3, masing-masing interupsi disimpan pada lokasi yang sudah tetep dalam memori program. Sebuah interupsi menyebabkan CPU melompat ke lokasi interupsi yang bersangkutan. Yaitu letak sub-rutin layanan interupsi tersebut. Misalnya, External Interupt 0 disimpan pada lokasi 0003h, jika interupsi ini digunakan maka layanan rutin interupsi ini harus dituliskan pada lokasi ini, jika tidak maka lokasi tersebut dipakai sebagai memori program serbaguna (untuk keperluan lain ).
Lokasi-lokasi layanan interupsi tersebut menempati lokasi-lokasi dengan jarak 8 byte. 0003h untuk External Interupt 0, 000Bh untuk timer 0, 0013h untuk External Interupt 1, dan seterusnya. Jika seluruh rutin layanan interupsi sangat pendek (kurang dari 8 byte) ,maka seluruh rutin bisa disimpan pada lokasi yang bersangkutan (sesuai dengan interupsi yang digunakan) . Jika terlalu panjang ( lebih dari 8 byte) maka harus digunakan suatu perintah lompat ke lokasi rutin interupsi yang sebenarnya (di lokasi dalam memori program).
Alamat-alamat yang paling bawah dari memori program dapat berada dalam flash on-chip maupun eksternal. Untuk melakukan hal ini dilakukan pengkabelan pada pin EA atau External Access ke Vcc atau ke GND ( akses eksternal ) sesuai dengan kebutuhan.


Memori Data
Memori data internal dipetakan seperti pada gambar 4. Ruang memorinya dibagi menjadi tiga blok,yaitu sebagai lower 128, upper 128, dan ruang SFR (special function register).
Picture 4().


Bagian bawah dari 128 byte RAM dipetakan seperti terlihat pada gambar 5. Tiga puluh dua byte paling bawah dikelompokan dalam 4 bank ( 8 register ) yaitu R0 sampai R7. Dua bit PSW (Program Status Word) memilih register bank yang digunakan.

Picture5()


Gambar 6 menunjukan ruang SFR. SFR berisi penahan port (port latch), pewaktu (timer), pengontrol peripheral, dan lain-lain. Register ini hanya dapat diakses oleh pengalamatan langsung.

Picture 6().

SFR terdiri dari Akumulator, Register B, Stack Pointer, Data Pointer, Port0, Port1, Port2, Port3, Serial Data Buffer dan Control Register.

MIKROCONTROLER AT89S51


B. MIKROKONTOLER AT89S51

Mikrokontroler tipe AT89S51 masih merupakan keluarga dari MCS-51 dengan konfigurasi yang sama persis dengan AT89C51 yang cukup terkenal, hanya saja AT89S51 memiliki fitur ISP ( In-system Programable flash Memory ). Fitur ISP memungkinkan mikrokontroler dapat diprogram langsung dalam suatu sistem elektronik tanpa melalui programmer board atau Downloader Board. Mikrokontroler dapat langsung diprogram dengan kabel ISP yang dihubungkan dengan parallel port pada Personal Computer.


Fitur-fitur yang dimiliki AT89S51 adalah :
4 Kbyte Memori Program yang dapat ditulis hingga 1000 kali
Kecepatan Clock sampai 33 Mhz
128 Byte Memori RAM Internal
32 jalur input-output
2 Counter/Timer 16 bit
2 Data Pointer
6 Interupt
Port Serial full-duplex
In-System Programable Flash Memory
Picture.1()
Mikrokontroler AT89S51 memiliki pin berjumlah 40 dan umumnya dikemas dalam DIP ( Dual Line Package ). Masing-masing pin pada mikrokontroler AT89S51 mempunyai kegunaan sebagai berikut :
Port 0
Port 0 merupakan 8 bit port yang bersifat open-drain dua arah. Port ini belum dilengkapi dengan pull-up internal, sehingga jika menggunakan port ini maka harus ditambahan pull-up eksternal.
Port 1
Port 1 merupakan 8 bit port I/O bi-directional yang telah dilengkapi dengan pull-up internal. Port ini dapat men-drive 4 buah gate TTL. Jika difungsikan sebagai port input maka logik1 harus ditulis ke port ini.
Port 2
Port 2 merupakan port 8 bit yang bersifat dua arah dan memiliki pull-up internal. Penyangga pada port ini mampu menangani empat masukan TTL. Jika logik satu dituliskan pada port ini maka port dapat berfungsi sebagai port input.
Port 3
Port ini sama dengan port 1 yang merupakan 8 bit port I/O bidirectional yang dilengkapi dengan pull-up internal. Port ini dapat men-drive 4 buah gate TTL. Jika difungsikan sebagai port input maka logik 1 harus ditulis ke port ini. selain itu port ini juga memiliki fungsi khusus sebagai berikut
Tabel 1. Fungsi khusus port 3
Pin
Fungsi
P3.0
RXD masukan port serial
P3.1
TXD keluaran port serial
P3.2
INT0 masukan interupsi 0
P3.3
Int1 masukan interupsi 1
P3.4
T0 masukan timer/counter 0
P3.5
T1 masukan timer/counter 1
P3.6
WR pulsa penulisan data memori luar
P3.7
RD pulsa data pembacaan memori luar
  1. RST
    Pin RST merupakan masukan untuk sinyal reset. Suatu logik 1 selama dua siklus clock akan menyebabkan mikrokontroler reset.
    XTAL 1 dan XTAL 2
    Merupakan pin inputan untuk kristal osilator.
  2. PSEN
    PSEN (Program Store Enable) adalah pulsa pengaktif untuk membaca program memori luar.
  3. ALE
    ALE (Adrress Latch Enable) merupakan pulsa keluaran untuk menahan byte bawah dari alamat selama proses pengaksesan memori luar. Jika pin ini aktif maka yang keluar pada port 0 adalah byte bawah dari alamat, tetapi jika pin ini tidak aktif maka yang keluar pada port 0 adalah data.
  4. EA
    EA (Exsternal Access) harus dihubungkan dengan ground jika menggunakan program memori luar. Jika menggunakan memori dalam/internal maka EA di hubungkan dengan VCC.
  5. VCC
    Pin VCC dihubungkan dengan tegangan kerja +5V.
  6. GND
    Merupakan ground sistem, dihubungkan dengan tegangan 0V ( Ground Power Supply ).

my_profil


ASSALAMUALAIKUM Wr.wb

Saya KHAIZAL NURIMA RENARDY lahir di ponorogo 26 january 1990,Saya bertempat tinggal di jln sukowati 125 kutukulon jetis ponorogo,Saya adalah seorang pelajar sekolah kejuruan di ponorogo tepatnya di SMKN 1 jenangan ponorogo www.smkn1jenpo.sch.id ,saat ini saya sudah kelas 3,di lembaga ini saya mengambil jurusan elektronika industri,sudah 3 tahun saya belajar di lembaga ini saya telah mendapatkan cukup banyak ilmu khususnya di bidang tehnik elektronika industri.
Saya adalah anak pertama dari 2 bersaudara,sejak kecil aku hidup jauh dari orang tua,karena orang tua aku bertempat tinggal di tangerang,sedangkan saat ini saya tinggal di ponorogo ikut dengan nenek dan kakek saya.
sebentar lagi saya akan menghadapi banyak ujian,maka dari itu buat semua saja,saya mohon doanya agar aku bisa menghadapi itu semua dengan baik dan lancar.sekian dulu sedikit profil tentang saya,jika ada salah kata atau kekuranganya saya minta maaf yang sebesar-besarnya.akhir kata WASSALAMUALAIKUM Wr.wb