Silabus mata kuliah Mikrokontroler mencakup pengenalan mikroprosesor, mikrokomputer, dan mikrokontroler, arsitektur MCS-51, pemrograman bahasa assembly, timer dan counter, komunikasi serial, interupsi, ekspansi sistem, interfacing dengan LCD dan motor, sensor, protokol komunikasi, kontrol PID dan fuzzy, serta arsitektur dan pemrograman AVR.
2. Silabus (3 sks) - 16 minggu 1. Sekilas ttg Mikroprosesor, Mikrokomputer,Mikrokontroler 2. Arsitektur Mikrokontoler MCS-51 3. Pemrograman Bahasa Assembly untuk MCS-51 4. Timer dan Counter 5. Komunikasi Serial 6. Interupsi 7. Ekspansi Sistem MCS-51 dengan DAC, ADC, SIPO, PISO, Mux Analog, Latches, PPI 8. Interfacing dengan LCD karakter dan Grafik, driver motor
3. Silabus (3 sks) - 16 minggu 9. Sensor-Sensor + IC Special Func 10. Protokol I2C (I square C) 11. Protokol I2S (I square S) 12. Protokol SPI (Serial Paralel Interface) 13. Penerapan Kontrol PID 14. Penerapan Kontrol Fuzzy 15. Arsitektur uC AVR + AVR STUDIO 16. Pemrograman Dasar AVR 17. Menggunakan Code Vision AVR
12. MIKROKOMPUTER ? pada PC, mikroprosesor digunakan sebagai pengolah utama pada semua kerja komputer, yaitu untuk menjalankan perangkat lunak, memecahkan persoalan-persoalan aritmatika, mengendalikan proses Input/Output ,
14. MIKROKOMPUTER ? mikroprosesor dengan piranti pendukungnya dikatakan membentuk suatu mikrokomputer (mikrokomputer = sistem komputer yang menggunakan sebuah mikroprosesor sebagai CPUnya)
15. MIKROKONTROLER ? CPU dan peralatan pendukungnya berada pada IC yang sama, serta digunakan untuk penerapan sistem kendali, maka IC tersebut disebut sebagai sebuah mikrokontroler
16. MIKROPROSESOR DAN MIKROKONTROLER Mikroprosesor dan mikrokontroler mulai banyak digunakan dalam berbagai aplikasi elektronika, antara lain di bidang otomatisasi industri, otomotif, pengukuran, telekomunikasi, penerbangan, dsb.
17. MIKROPROSESOR DAN MIKROKONTROLER Keuntungan dari penggunaaan mikroprosesor dan mikrokontroler adalah sistem yang diciptakan menjadi sangat fleksibel karena modifikasi dan pengembangan cukup dilakukan pada perangkat lunaknya.
18. STRUKTUR SISTEM MIKROKOMPUTER Dengan penambahan beberapa piranti pendukung (memori, piranti Input/Output, dsb), sebuah mikroprosesor dapat diubah menjadi sebuah mikrokomputer
19. BAGIAN BAGIAN MIKROKOMPUTER Mikroprosesor sebagai unit pengolah pusat keseluruhan sistem, yaitu untuk menjalankan perangkat lunak yang disimpan pada memori, mengatur jalur pengiriman data dari/ke piranti-piranti (memori,I/O, dsb), mengolah data-data yang ada pada perangkat lunak, dsb. 16
20. BAGIAN BAGIAN MIKROKOMPUTER ROM berguna untuk menyimpan perangkat lunak yang akan dijalankan oleh mikroprosesor.
21. BAGIAN BAGIAN MIKROKOMPUTER RAM berguna sebagai tempat penyimpanan data sementara yang mungkin diperlukan oleh mikroprosesor sewaktu menjalankan perangkat lunak. Misalnya digunakan untuk menyimpan nilai-nilai pada variabel.
22. BAGIAN BAGIAN MIKROKOMPUTER Piranti I/O (Input/Output) berguna untuk mengkoneksikan sistem dengan dunia luar untuk mengirimkan dan menerima data dari/ke luar sistem. pada PC, salah satu piranti I/O bertugas menerima masukan data dari keyboard, serta piranti I/O yang lain bertugas mengirimkan data ke printer untuk dicetak, dsb.
23. BAGIAN BAGIAN MIKROKOMPUTER Clock (denyut) menyinkronkan kerja semua piranti dalam sistem. Sumber sinyal dari Clock biasanya didapatkan dari osilator kristal.
24. KESIMPULAN 1 IC mikroprosesor tak dapat berdiri sendiri, karena kerjanya sangatlah bergantung dari piranti2 pendukung lainnya. Misal tanpa adanya piranti Input/Output akan membuat sistem tak dapat berinteraksi dengan dunia luar. Atau misalnya tanpa adanya RAM, mikroprosesor tidak dapat bekerja dan mengolah data-data pada variabel yang diinstruksikan oleh perangkat lunak.
25. KESIMPULAN 2 Akibat dari kebergantungannya yang besar pada piranti2 pendukung mikroprosesor menjadi kurang efisien. Perusahaan2 semikonduktor menciptakan sebuah IC mikroprosesor jenis lain yang didalamnya sudah terdapat piranti-piranti pendukungnya mikrokontroler. ‘mikrokomputer dalam sebuah chip’ ( single chip microcomputer ).
26. KESIMPULAN 3 Meski kurang efisien dibanding mikrokontroler, untuk penggunaan tertentu mikroprosesor tetap mempunyai kelebihan2, antara lain lebih cepat dan lebih upgradable (karena semua piranti tambahan diletakkan di luar sehingga bisa diganti).
28. ARSITEKTUR MIKROKONTROLER KELUARGA MCS-51 Mikrokontroler 8051 Intel mikrokontroler populer, banyak perusahaan2 semikonduktor lain yang membuat ‘clone’ -nya. Perusahaan tsb antara lain adalah Atmel, Siemens, AMD, Philips, dsb. banyak ‘clone’ dari 8051, maka terbentuklah keluarga besar mikrokontroler yang mempunyai arsitektur dasar yang sama dengan 8051, yang selanjutnya ‘clone-clone’ tersebut lazim disebut dengan keluarga mikrokontroler MCS-51.
30. Fasilitas-Fasilitas Mikrokontroler 8051 • 4K bytes ROM • 128 bytes RAM • Empat buah I/O (Input/Output) port. Masing-masing I/O port terdiri dari 8bit • Dua buah timer/counter. Masing-masing adalah 16bit timer. • Antarmuka ( Interface ) Serial • Ruang pengalamatan memori eksternal untuk kode (program) sebesar 64Kbytes • Ruang pengalamatan memori eksternal untuk data sebesar 64K bytes
35. Port 3 pada pin 10-17 adalah port multifungsi, setiap pin dari port 3 mempunyai fungsi-fungsi tersendiri.
36. PSEN (Program Store Enable) pin 29 untuk output sinyal pengontrol pada pengambilan program (kode) jika memakai ROM/EPROM eksternal. Pin PSEN akan mengeluarkan sinyal low selama pengambilan byte program (kode) dari ROM/EPROM. Pin PSEN biasa dihubungkan dengan pin OE (Output Enable) pada IC EPROM. 32
42. 1. Ruang alamat memori kode program (code address space) maksimal 64KB ditempati EEPROM/ROM internal atau bisa juga ditempati oleh IC EEPROM (misalnya 2864) jika diinginkan kode program disimpan dalam EEPROM eksternal. 2. Ruang alamat memori data internal yang dapat dialamati secara langsung RAM (Random Access Memory) sebanyak 128 byte dan Special Function Register sebanyak 128 byte. RAM internal dan hardware register ini terletak di dalam IC 8951. Sebagian ruang alamat pada RAM internal dapat diakses secara bit (bukan secara byte). Pengalamatan Memori dan Register Pada MCS51 Khususnya AT89S51
43. 3. Ruang alamat memori data eksternal sebanyak maksimal 64KB misalnya 6264. Ruang alamat memori kode program dan ruang alamat memori data eksternal sebenarnya memiliki ruang alamat yang sama (overlap). Ruang alamat memori kode program dan ruang alamat memori data eksternal dialamati dari alamat 0000h sampai FFFFh. Sedangkan memori-data internal dialamati dari alamat 00h sampai FFh. Alamat 00h sampai 7Fh dipakai untuk mengalamati RAM internal dan alamat 80h sampai FFh dipakai untuk mengalamati Special Function Register. Pengalamatan Memori dan Register Pada MCS51 Khususnya AT89S51
45. Memori-data nomor 00h sampai 7Fh bisa dipakai sebagai memori penyimpan data biasa, dibagi menjadi 3 bagian: Alamat memori 00h sampai 18h selain sebagai memori-data biasa, bisa pula dipakai sebagai Register Serba Guna ( General Purpose Register ). Alamat memori 20h sampai 2Fh selain sebagai memori-data biasa, bisa dipakai untuk menyimpan informasi dalam level bit . Alamat memori 30h sampai 7Fh (sebanyak 80 byte) merupakan memori-data biasa, bisa dipakai untuk menyimpan data maupun dipakai sebagai Stack. Pengalamatan Memori dan Register Pada MCS51 Khususnya AT89S51
46. Menempati alamat memori-data 00h sampai 18h (32 byte) 4 Kelompok Register ( Register Bank ), 8 byte memori dari masing2 Kelompok Register 0 , .. Register 7 (R0, R1, R2, R3, R4, R5, R6 dan R7). Penulisan program memori2 ini disebut R0, R1, R2, R3, R4, R5, R6 dan R7, tidak lagi dengan nomor memori Pengertian ini bisa diperjelas dengan contoh 2 instruksi berikut : MOV A,04h (isi di alamat 04h Akumulator) MOV A,R4 (isi R4 Akumulator) Penerjemahan ke kode mesin, instruksi pertama dirubah menjadi E5 04 (heksadesimal) dan instruksi kedua menjadi E6 (heksadesimal), jadi instruksi kedua lebih sederhana dari instruksi pertama. Register Serba Guna ( General Purpose Register )
47. Khusus Register 0 dan Register 1 (R0 dan R1) masih punya mempunyai kemampuan lain register penampung alamat yang dipakai dalam pengaksesan memori secara tidak langsung ( indirect memori addressing ) Memori level Bit ( Memori-data internal 20h sampai 2Fh) Setiap byte memori di daerah ini bisa dipakai menampung 8 bit informasi yang masing-masing dinomori tersendiri, dengan demikian dari 16 byte memori yang ada bisa dipakai untuk menyimpan 128 bit (16 x 8 bit) yang dialamati dengan alamat 00h sampai 7Fh. Informasi dalam level bit tersebut masing-masing bisa di-‘1’-kan, di - ‘0’- kan dengan instruksi SETB dan CLR. Register Serba Guna ( General Purpose Register )
48. Instruksi SETB 00h memori-bit alamat 0h menjadi ‘1’ = membuat bit nomor 0 dari memori-data pada alamat 20h menjadi ‘1’ bit-bit lain memori 20h tidak berubah nilai. Instruksi CLR 7Fh memori-bit alamat 7Fh menjadi ‘0’ = membuat bit nomor 7 dari memori-data pada alamat 2Fh menjadi ‘0’ bit-bit lain memori 2Fh tidak berubah nilai. MOV 21h,#0Fh = SETB 08h SETB 09h SETB 0Ah SETB 0Bh CLR 0Ch CLR 0Dh CLR 0Eh CLR 0Fh Register Serba Guna ( General Purpose Register )
49. Special Function Register (SFR) satu daerah RAM dalam IC keluarga MCS51 untuk mengatur perilakunya dalam hal-hal khusus, misalnya tempat untuk berhubungan dengan port paralel P1 atau P3, dan sarana input/output lainnya, tapi tidak umum dipakai untuk menyimpan data seperti layaknya memori-data. Penulisan program SFR diperlakukan persis sama dengan memori-data. Untuk mengisi memori-data pada alamat 60h dengan bilangan 0Fh, instruksi MOV 60h,#0Fh Register Khusus (SFR - Special Function Register )
50. Sedangkan untuk menyimpan 0Fh ke Port 1 yang di SFR menempati memori-data pada alamat 90h, instruksi yang dipergunakan adalah : MOV 90h,#0Fh Mengakses memori-data ada dua cara, yakni - langsung ( direct memory addressing) -tidak langsung ( indirect memory addressing ) lewat bantuan R0 dan R1. Tapi untuk SFR hanya bisa dipakai penyebutan nomor memori secara langsung ( direct memory addressing ) saja. Register Khusus (SFR - Special Function Register )
51.
52. Dalam mikroprosesor/mikrokontroler yang lain, register-register dasar biasanya ditempatkan ditempat tersendiri dalam inti prosesor MCS51 register-register itu ditempatkan secara terpisah. Program Counter ditempatkan ditempat tersendiri di dalam inti prosesor Register Serba Guna R0..R7 ditempatkan di salah satu bagian dari memori-data internal Register lainnya ditempatkan dalam Special Function Register (SFR). Register Dasar MCS51
58. Register Dasar MCS51 Program Status Word Program Status Word (PSW) berfungsi mencatat kondisi prosesor setelah melaksanakan instruksi. Pembahasan tentang PSW secara rinci akan dilakukan dibagian lain. Register B Merupakan register dengan kapasitas 8 bit, merupakan register pembantu Akumulator saat menjalankan instruksi perkalian dan pembagian.
59. Register Dasar MCS51 Data Pointer High Byte (DPH) dan Data Pointer Low Byte (DPL) masing-masing merupakan register dengan kapasitas 8 bit, tapi dalam pemakaiannya kedua register ini digabungkan menjadi satu register 16 bit yang dinamakan sebagai Data Pointer Register (DPTR). Sesuai dengan namanya, Register ini dipakai untuk mengalamati data dalam jangkauan yang luas, yaitu terutama untuk mengakses data yang berada pada memori eksternal
60. PEMROGRAMAN ASSEMBLY UNTUK MCS-51 Kode Program (perangkat lunak/ software ) pengendali mikrokontroler disusun dari kumpulan instruksi, instruksi tersebut setara dengan kalimat perintah bahasa manusia yang hanya terdiri atas predikat dan objek. Dengan demikian tahap pertama pembuatan program pengendali mikrokontroler dimulai dengan pengenalan dan pemahaman predikat (kata kerja) dan objek apa saja yang dimiliki mikrokontroler.
61. PEMROGRAMAN ASSEMBLY UNTUK MCS-51 Objek dalam pemrograman mikrokontroler adalah data yang tersimpan di dalam memori,register dan input/output. Sedangkan ‘kata kerja’ yang dikenal pun secara umum dikelompokkan menjadi perintah untuk perpindahan data, arithmetik, operasi logika, pengaturan alur program dan beberapa hal khusus. Kombinasi dari ‘kata kerja’ dan objek itulah yang membentuk perintah pengatur kerja mikrokontroler.
62. PEMROGRAMAN ASSEMBLY UNTUK MCS-51 Instruksi MOV A,7Fh merupakan contoh sebuah instruksi dasar yang sangat spesifik, MOV merupakan ‘kata kerja’ yang memerintahkan peng-copy-an data, merupakan predikat dalam kalimat perintah ini. Sedangkan objeknya adalah data yang di-copy-kan, dalam hal ini adalah data yang ada di dalam alamat memori 7Fh di-copy-kan ke Akumulator A.
63. Pengalamatan Data dalam MCS51 Instruksi MOV A,7Fh merupakan contoh sebuah instruksi dasar yang sangat spesifik, MOV merupakan ‘kata kerja’ yang memerintahkan peng-copy-an data, merupakan predikat dalam kalimat perintah ini. Sedangkan objeknya adalah data yang di-copy-kan, dalam hal ini adalah data yang ada di dalam alamat memori 7Fh di-copy-kan ke Akumulator A.
64. Pengalamatan Data dalam MCS51 Pengalamatan/penempatan data konstan/konstanta ( immediate addressing mode ): Contoh :MOV A,#20h. Contoh instruksi ini mempunyai makna data konstanta 20h (sebagai data konstan ditandai dengan ‘#’) di-copy-kan ke Akumulator A. Pengalamatan data secara langsung ( direct addressing mode ) memindahkan data yang berada di dalam memori mengakses alamat memori tempat data tersebut berada : MOV A,20h. Contoh instruksi ini mempunyai makna data yang berada di dalam alamat memori 20h di-copy-kan ke Akumulator.
65. Pengalamatan Data dalam MCS51 Pengalamatan data secara tidak langsung ( indirect addressing mode ) menunjuk data yang berada di dalam memori, kalau memori penyimpan data ini letaknya berubah-rubah sehingga alamat memori tidak diakses secara langsung tapi di-‘titip’-kan ke register lain. MOV A,@R0. Register serba guna R0 dipakai untuk mencatat alamat memori, sehingga instruksi ini mempunyai makna memori yang alamatnya tercatat dalam R0 isinya di-copy-kan ke Akumulator A. Tanda ‘@’ dipakai untuk menandai alamat memori disimpan di dalam R0.
66. Pengalamatan Data dalam MCS51 Pengalamatan data dalam register ( register addressing mode ): MOV A,R5. Instruksi ini mempunyai makna data dalam register serba guna R5 di-copykan ke Akumulator A. Instruksi ini membuat register serba guna R0 sampai R7 sebagai tempat penyimpan data yang sangat praktis yang kerjanya sangat cepat.
67.
68. Instruksi-instruksi dalam MCS51 KELOMPOK PENG-COPY-AN DATA Kode dasar MOV singkatan dari MOVE memindahkan lebih tepat dikatakan peng-copy-an data. MOV A,R7 Akumulator A dan register serba guna R7 berisikan data yang sama, yang asalnya tersimpan di dalam R7. MOV A,20h MOV A,@R1 MOV A,P1 MOV P3,A
69. Instruksi-instruksi dalam MCS51 KELOMPOK ARITMATIK (ADD, ADDC, SUBB, DA, MUL dan DIV) Perintah ADD dan ADDC Isi Akumulator A + ( 1 byte ) hasil di Akumulator . Dalam operasi ini bit Carry (C flag dalam PSW) penampung limpahan hasil penjumlahan. Jika hasil penjumlahan nilainya lebih besar dari 255, bit Carry ‘1’, kalau tidak ‘0’. ADDC sama dengan ADD, hanya saja dalam ADDC nilai bit Carry dalam proses sebelumnya ikut dijumlahkan bersama.
70. Instruksi-instruksi dalam MCS51 Bilangan 1 byte bilangan konstan, register serba guna, dari memori data yang alamat memorinya dialamati secara langsung maupun tidak langsung ADD A,R0 ; register serba guna ADD A,#23h ; bilangan konstan ADD A,@R0 ; no memori tak langsung ADD A,P1 ; no memori langsung (port 1)
71. Instruksi-instruksi dalam MCS51 Perintah SUBB Isi Akumulator A - bilangan 1 byte dengan nilai bit Carry , hasil pengurangan Akumulator . Dalam operasi ini bit Carry juga berfungsi sebagai penampung limpahan hasil pengurangan. Jika hasil pengurangan tersebut melimpah (nilainya kurang dari 0) bit Carry ‘1’, tidak bit Carry ‘0’. SUBB A,R0 ; A = A - R0 - C SUBB A,#23h ; A = A – 23H SUBB A,@R1 SUBB A,P0
72. Instruksi-instruksi dalam MCS51 Perintah DA Perintah DA ( Decimal Adjust ) dipakai setelah perintah ADD; ADDC atau SUBB, dipakai untuk merubah nilai biner 8 bit yang tersimpan dalam Akumulator menjadi 2 buah bilangan desimal yang masing-masing terdiri dari nilai biner 4 bit. DA A
73. Instruksi-instruksi dalam MCS51 Perintah MUL AB Bilangan biner 8 bit dalam Akumulator A dikalikan dengan bilangan biner 8 bit dalam register B. Hasil perkalian berupa bilangan biner 16 bit, 8 bit bilangan biner yang bobotnya lebih besar ditampung di register B, sedangkan 8 bit lainnya yang bobotnya lebih kecil ditampung di Akumulator A. Bit OV dalam PSW ( Program Status Word ) dipakai untuk menandai nilai hasil perkalian yang ada dalam register B. Bit OV akan bernilai ‘0’ jika register B bernilai 00h, kalau tidak bit OV bernilai ‘1’. MOV A,#10 MOV B,#20 MUL AB
74. Instruksi-instruksi dalam MCS51 Perintah DIV AB Bilangan biner 8 bit dalam Akumulator A dibagi dengan bilangan biner 8 bit dalam register B. Hasil pembagian berupa bilangan biner 8 bit ditampung di Akumulator , sedangkan sisa pembagian berupa bilangan biner 8 bit ditampung di register B. Bit OV dalam PSW ( Program Status Word ) dipakai untuk menandai nilai sebelum pembagian yang ada dalam register B. Bit OV akan bernilai ‘1’ jika register B asalnya bernilai 00h. MOV A,#10 MOV B,#2 DIV AB
75. Instruksi-instruksi dalam MCS51 KELOMPOK LOGIKA (ANL, ORL dan XRL) Operasi logika yang bisa dilakukan adalah operasi AND (kode operasi ANL), operasi OR ORL dan operasi Exclusive-OR XRL ANL A,#01111110 bit 0 sampai 7 dari Akumulator bernilai ‘0’ sedangkan bit-bit lainnya tetap tidak berubah nilai. ORL A,#01111110 bit 1 sampai 6 dari Akumulator bernilai ‘1’ sedangkan bit-bit lainnya tetap tidak berubah nilai. XRL A,#01111110 bit 1 sampai 6 dari Akumulator berbalik nilai, sedangkan bit-bit lainnya tetap tidak berubah nilai.
77. Percabangan dan Pengaturan Alur Program Pada MCS-51 Secara umum kelompok instruksi yang dipakai untuk mengatur alur program terdiri atas instruksi-instruksi JUMP Instruksi-instruksi untuk membuat dan memakai sub-rutin/modul (setara dengan PROCEDURE dalam Pascal) Instruksi-instruksi JUMP bersyarat ( conditional Jump , setara dengan statemen IF .. THEN ).
78. Percabangan dan Pengaturan Alur Program Pada MCS-51 Kelompok Instruksi JUMP Mikrokontroler menjalankan instruksi-instruksi, selesai menjalankan satu instruksi mikrokontroler langsung menjalankan instruksi berikutnya Hal ini dilakukan dengan cara nilai Program Counter bertambah sebanyak jumlah byte yang membentuk instruksi yang sedang dijalankan Dengan demikian pada saat instruksi bersangkutan dijalankan Program Counter selalu menyimpan alamat memori-program yang menyimpan instruksi berikutnya.
79. Percabangan dan Pengaturan Alur Program Pada MCS-51 Kelompok Instruksi JUMP Pada saat mikrokontroler menjalankan kelompok instruksi JUMP, nilai Program Counter yang runtun sesuai dengan alur program diganti dengan alamat memori-program baru yang dikehendaki programer. Mikrokontroler MCS51 mempunyai 3 macam intruksi JUMP, yakni instruksi LJMP ( Long Jump ), instruksi AJMP ( Absolute Jump ) dan instruksi SJMP
80. Percabangan dan Pengaturan Alur Program Pada MCS-51 Kelompok Instruksi JUMP Pada saat mikrokontroler menjalankan kelompok instruksi JUMP, nilai Program Counter yang runtun sesuai dengan alur program diganti dengan alamat memori-program baru yang dikehendaki programer. Mikrokontroler MCS51 mempunyai 3 macam intruksi JUMP, yakni instruksi LJMP ( Long Jump ), instruksi AJMP ( Absolute Jump ) dan instruksi SJMP( Short Jump ). Kecepatan melaksanakan ketiga instruksi ini juga persis sama, yakni memerlukan waktu 2 periode instruksi
81. Percabangan dan Pengaturan Alur Program Pada MCS-51 Instruksi LJMP Kode untuk instruksi LJMP adalah 02h, memori-program baru yang dituju bilangan biner 16 bit memori-program MCS51 yang jumlahnya 64 KiloByte. Instruksi LJMP terdiri atas 3 byte, yang bisa dinyatakan dengan bentuk umum 02 aa aa, aa yang pertama adalah memori-program bit 8 sampai dengan bit 15, sedangkan aa yang kedua adalah memori-program bit 0 sampai dengan bit 7. LJMP TugasBaru … ORG 2000h TugasBaru: MOV A,P3.1
82. Percabangan dan Pengaturan Alur Program Pada MCS-51 ORG adalah perintah pada assembler agar berikutnya assembler bekerja pada memori-program yang disebut di belakang ORG 2000H TugasBaru disebut sebagai LABEL, yakni sarana assembler untuk menandai/ menamai memori-program. Dengan demikian, dalam potonganprogram di atas, memori-program 2000h diberi nama TugasBaru, atau bisa juga dikatakan bahwa TugasBaru bernilai 2000h. Dengan demikian intruksi LJMP TugasBaru di atas, sama artinya dengan LJMP 2000h yang oleh assembler akan diterjemahkan menjadi 02 20 00 (heksadesimal).
83. Percabangan dan Pengaturan Alur Program Pada MCS-51 Instruksi AJMP memori-program baru yang dituju dinyatakan dengan bilangan biner 11 bit, dengan demikian instruksi ini hanya bisa menjangkau satu daerah memori-program MCS51 sejauh 2 KiloByte. Instruksi AJMP terdiri atas 2 byte, byte pertama merupakan kode untuk instruksi AJMP (00001b) yang digabung dengan memori program bit 8 sampai dengan bit 10, byte kedua dipakai untuk menyatakan memori-program bit 0 sampai dengan bit 7.
84. Percabangan dan Pengaturan Alur Program Pada MCS-51 ORG 800h AJMP DaerahIni AJMP DaerahLain ORG 900h DaerahIni: . . . ORG 1000h DaerahLain: . . .
85. Percabangan dan Pengaturan Alur Program Pada MCS-51 Instruksi SJMP memori-program dalam instruksi ini tidak dinyatakan dengan memori-program yang sesungguhnya, tapi dinyatakan dengan ‘pergeseran relatip’ terhadap nilai Program Counter saat instruksi ini dilaksanakan. Pergeseran relatip tersebut dinyatakan dengan 1 byte bilangan 2’s complement, yang bisa dipakai untuk menyakatakan nilai antara –128 sampai dengan +127. Nilai minus dipakai untuk menyatakan bergeser ke instruksiinstruksi sebelumnya, sedangkan nilai positip untuk menyatakan bergeser ke instruksi-instruksi sesudahnya.
86. Percabangan dan Pengaturan Alur Program Pada MCS-51 ORG 0F80h SJMP DaerahLain . . . ORG 1000h DaerahLain: instruksi SJMP DaerahLain tetap bisa dipakai, asalkan jarak antara instruksi itu dengan LABEL DaerahLain tidak lebih dari 127 byte. 1000H-F80H=80H=128D
87. Percabangan dan Pengaturan Alur Program Pada MCS-51 Kelompok Instruksi untuk sub-rutin Sub-rutin merupakan suatu potong program yang karena berbagai pertimbangan dipisahkan dari program utama. Bagian-bagian di program utama akan ‘memanggil’ (CALL) sub-rutin mikrokontroler sementara meninggalkan alur program utama untuk mengerjakan instruksi-instruksi dalam sub-rutin, kemudian kembali ke alur program utama. Satu-satunya cara membentuk sub-rutin adalah memberi instruksi RET pada akhir potongan program sub-rutin. Program sub-rutin di-’panggil’ dengan instruksi ACALL atau LCALL.
88. Percabangan dan Pengaturan Alur Program Pada MCS-51 Agar nantinya mikrokontroler bisa meneruskan alur program utama, pada saat menerima instruksi ACALL atau LCALL, sebelum mikrokontroler pergi mengerjakan sub-rutin, nilai Program Counter saat itu disimpan dulu ke dalam menyimpan nilai Program Counter secara otomatis di Stack Selanjutnya mikrokontroler mengerjakan instruksi-instruksi di dalam subrutin sampai menjumpai instruksi RET yang berfungsi sebagai penutup dari subrutin.
89. Percabangan dan Pengaturan Alur Program Pada MCS-51 Instruksi ACALL dipakai untuk me-‘manggil’ program sub-rutin dalam daerah memori-program 2 KiloByte yang sama, setara dengan instruksi AJMP yang sudah dibahas di atas. Sedangkan instruksi LCALL bisa menjangkau seluruh memori-program mikrokontroler MCS51 sebanyak 64 KiloByte.
90. Percabangan dan Pengaturan Alur Program Pada MCS-51 Kelompok Instruksi Jump Bersyarat Instruksi JZ ( Jump if Zero ) dan instruksi JNZ ( Jump if not Zero ) adalah instruksi JUMP bersyarat yang memantau nilai Akumulator A. MOV A,#0 JNZ BukanNol JZ Nol . . . BukanNol: . . . Nol : . . .
91. Percabangan dan Pengaturan Alur Program Pada MCS-51 Kelompok Instruksi Jump Bersyarat Dalam contoh program sebelumnya, MOV A,#0 A bernilai nol mengakibatkan instruksi JNZ BukanNol tidak akan pernah dikerjakan (JNZ artinya Jump kalau nilai A<>0, syarat ini tidak pernah dipenuhi karena saat instruksi ini dijalankan nilai A=0), sedangkan instruksi JZ Nol selalu dikerjakan karena syaratnya selalu dipenuhi.
92. Percabangan dan Pengaturan Alur Program Pada MCS-51 Instruksi JC ( Jump on Carry ) dan instruksi JNC ( Jump on no Carry ) memantau nilai bit Carry di dalam PSW Instruksi JB ( Jump on Bit Set ), instruksi JNB ( Jump on not Bit Set ) dan instruksi JBC (Ju mp on Bit Set Then Clear Bit ) merupakan instruksi Jump bersyarat yang memantau nilai-nilai bit tertentu. Bit-bit tertentu bisa merupakan bit-bit dalam register status maupun kaki input mikrokontroler MCS51.
93. Percabangan dan Pengaturan Alur Program Pada MCS-51 MOV A,#01010101B JNB ACC.0,LAGI ;JIKA A BIT KE 0=‘0’ LOMPAT KE LAGI JBC ACC.6,LAGI2 ;JIKA A BIT KE 6=‘1’ LOMPAT KE LAGI 2 DAN ACC.6 ’0’ LAGI: …… LAGI2: … ..
94. Percabangan dan Pengaturan Alur Program Pada MCS-51 Kelompok Instruksi proses dan test memantau kondisi yang sudah terjadi yang dicatat MCS51. Ada dua instruksi melakukan dulu suatu proses baru kemudian memantau hasil proses untuk menentukan apakah harus Jump . Instruksi DJNZ ( Decrement and Jump if not Zero ), merupakan instruksi yang akan mengurangi 1 nilai register serbaguna (R0..R7) atau memori-data , dan Jump jika ternyata setelah pengurangan 1 tersebut hasilnya tidak nol.
95. Percabangan dan Pengaturan Alur Program Pada MCS-51 MOV R0,#23h ;R0=’23H’ DJNZ R0,$ ;R0=R0-1 jika belum nol maka looping di tempat (tanda $ dalam instruksi ini maksudnya adalah kerjakan kembali instruksi ini). Selama mengerjakan 2 instruksi di atas, semua pekerjaan lain akan tertunda waktu tundanya ditentukan oleh besarnya nilai yang diisikan ke R0.
96. Percabangan dan Pengaturan Alur Program Pada MCS-51 Instruksi CJNE ( Compare and Jump if Not Equal ) membandingkan dua nilai yang disebut dan MCS akan Jump kalau kedua nilai tersebut tidak sama! MOV A,P1 CJNE A,#0Ah,TidakSama ... SJMP EXIT TidakSama: ... Instruksi MOV A,P1 membaca nilai input dari Port 1, instruksi CJNE A,#0Ah,Tidaksama memeriksa apakah nilai Port 1 yang sudah disimpan di A sama dengan 0Ah, jika tidak maka Jump ke TidakSama. .
97.
98. Assembler Directive DB – singkatan dari DEFINE BYTE , dipakai untuk memberi nilai tertentu pada memori-program. Nilai tersebut merupakan nilai 1 byte, bisa berupa angka ataupun kode ASCII. DB merupakan Assembler Directive yang dipakai untuk membentuk teks maupun tabel. Contoh : ORG 200h STRING DB ‘Belajar Mikrokontroler’ ORG 200h memerintahkan program Assembler agar bekerja mulai dari memori-program nomor 200h, instruksi selanjutnya memerintahkan program Assembler agar mengisi memori-program nomor 200h dan berikutnya dengan tulisan ‘Belajar Mikrokontroler’ (yang diisikan adalah kode ASCII dari ‘B’, ‘e’ dan seterusnya)
99. Assembler Directive DW – singkatan dari DEFINE WORD , dipakai untuk memberi nilai 2 byte ke memori-program pada baris bersangkutan. Assembler Directive ini biasa dipakai untuk membentuk suatu tabel yang isinya adalah nomor-nomor memori-program . DS – singkatan dari Define Storage , Assembler Directive ini dipakai untuk membentuk variable. Sebagai variabel tentu saja memori yang dipakai adalah memori-data (RAM) bukan memori-program (ROM). Jika Assembler Directive DB dan DW yang membentuk kode di memori-program . Dan karena DS bekerja di RAM, maka DS hanya sekedar menyediakan tempat di memori, tapi tidak mengisi nilai pada memori bersangkutan.
100. Pemrograman Untuk Port Paralel Pada MCS51 Port paralel merupakan sarana utama sebuah chip Mikrokontroler, lewat sarana ini mikrokontroler mengeluarkan sinyal digital yang dipakai mengendalikan rangkaian-rangkaian di luar chip secara langsung. Chip mikrokontroler 8051/8031/8751/8951 mempunyai 40 kaki, 32 kaki diantaranya adalah kaki untuk keperluan port paralel. Satu port paralel terdiri dari 8 kaki, dengan demikian 32 kaki tersebut membentuk 4 buah port paralel, yang masing-masing dikenali sebagai Port 0, Port 1, Port 2 dan Port 3.
101. Pemrograman Untuk Port Paralel Pada MCS51 Masing-masing jalur (kaki) dari port paralel di-nomor-i mulai dari 0 sampai 7, jalur (kaki) pertama Port 0 disebut sebagai P0.0, jalur terakhir Port 3 adalah P3.7. MCS51 mempunyai dua kelompok instruksi untuk mengeluarkan data ke port paralel: kelompok instruksi pertama bekerja pada port seutuhnya artinya 8 jalur dari port bersangkutan, misalnya MOV P1,#FFh membuat ke-delapan jalur port 0 sekaligus menjadi ‘1’.
102. Pemrograman Untuk Port Paralel Pada MCS51 kelompok instruksi kedua hanya berpengaruh pada salah satu jalur dari port, misalnya SETB P3.4 P3.4 ’1’ atau CLR P3.3 P3.3 ‘0’. Selain itu port paralel bisa pula dipakai untuk menerima sinyal digital dari rangkaian di luar chip mikrokontroler: MOV A,P1 ;ambil sinyal digital pada semua jalur Port 1 dan menyimpannya di A
103. Pemrograman Untuk Port Paralel Pada MCS51 ORG 0 JMP PROGRAM ORG 100H PROGRAM:MOV A,#0H ULANG: MOV P1,A CALL DELAY INC A JMP ULANG DELAY: MOV R0,#00H MOV R1,#00H ULANG1: INC R1 ULANG2: INC R0 CJNE R0,#0FFH,ULANG2 CJNE R1,#040H,ULANG1 RET
104. Pemrograman Untuk Port Paralel Pada MCS51 ORG 000H JMP MULAI ORG 100H MULAI: MOV P1,#0FFH ULANG: JNB P1.0,ULANG MOV P1,#00H END
105. Pemrograman Untuk Port Paralel Pada MCS51 ORG 000H JMP PROGRAM ORG 100H PROGRAM: MOV P1,#0FFh ULANG1: MOV C,P1.0 MOV P1.1,C JMP ULANG1 END
106. Pemrograman Untuk Port Paralel Pada MCS51 ORG 000H JMP PROGRAM ORG 100H PROGRAM: MOV A,#01H ;A=00000001 ULANG: MOV P1,A ;P1=00000001 RL A ;A=00000010 dst CALL DELAY JMP ULANG DELAY: MOV R1,#00H ULANG1: INC R1 CJNE R1,#0FFH,ULANG1 RET END
129. STRUKTUR MEMORI Accumulator (ACC) - Terletak pada alamat E0H - Operasi Aritmatik (Add A,#05H) - Operasi Logika (Anl A,#05H) - Akses Memori Eksternal (Movx A,@DPTR) - Untuk fungsi umum Register B - Terletak pada alamat B0H - Fungsi umum - Digunakan bersama Acc untuk operasi Aritmatik (Mul AB)
131. STRUKTUR MEMORI Data Pointer (DPTR) - Terdiri dari dua register yaitu o DPH (82H) o DPL (83H) - Untuk akses data atau source code di memori Flash PEROM atau Memori Eksternal
133. STRUKTUR MEMORI Flash PEROM - Kapasitas 4 Kb - Alamat 000H hingga FFFH - Diakses bila: o Pin EA/VP 89S51 berlogika high o Ada perintah untuk memanggil instruksi di alamat tersebut -Dapat diproteksi dengan: o Lock Bit 1, tidak dapat dibaca oleh program yang berada di memori eksternal o Lock Bit 2, tidak dapat dibaca oleh peralatan Programmer o Lock Bit 3, sama sekali tidak dapat mengakses/diakses oleh/dari memori eksternal
134. STRUKTUR MEMORI External Memory - Dibutuhkan untuk: o Memori berkapasitas besar o Emulasi Program - Sistem pengalamatan Multiplex Addressing
136. STRUKTUR MEMORI Akses Memori Eksternal terdiri dari: o Pembacaan Data o Pembacaan Program (Kode) o Penulisan Data/Kode Proses Pembacaan Proses pembacaan dapat dianalogikan sebagai proses membaca dari halaman tertentu dari sebuah buku di mana pada proses tersebut dibutuhkan: - Halaman dari tulisan yang akan dibaca = Alamat Memori - Perintah untuk membaca = Sinyal Read untuk Data dan Sinyal PSEN untuk kode
149. TIMER PADA MCS51 Keluarga mikrokontroler MCS51, misalnya 8951, 8051, atau 8031 dilengkapi dengan dua perangkat Timer/Counter, masing-masing dinamakan sebagai Timer 0 dan Timer 1 . Sedangkan untuk jenis yang lebih besar , misalnya 8952 dan 8052 mempunyai tambahan yaitu Timer 2 . Perangkat Timer/Counter tersebut merupakan perangkat keras yang menjadi satu dalam chip mikrokontroler MCS51, perangkat tersebut dikenal sebagai SFR ( Special Function Register ) yang berkedudukan sebagai memori-data internal .
150. TIMER PADA MCS51 Pencacah biner untuk Timer 0 dibentuk dengan register TL0 ( Timer 0 Low Byte , memori-data internal alamat 6Ah) dan register TH0 ( Timer 0 High Byte , memori-data internal alamat 6Ch). Pencacah biner untuk Timer 1 dibentuk dengan register TL1 ( Timer 1 Low Byte , memori-data internal alamat 6Bh) dan register TH1 ( Timer 1 High Byte , memori-data internal alamat 6Dh).
151.
152.
153.
154. TIMER MODE 0 PADA MCS51 Susunan TL0, TH0, TL1 dan TH1 pada mode 0 adalah sebagai berikut: Pencacah biner dibentuk dengan TLx (TL0 atau TL1) sebagai pencacah biner 5 bit (meski kapasitas riil 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 (TF0 atau TF1) yang berada di dalam register TCON.
155. TIMER MODE 1 PADA MCS51 Susunan TL0, TH0, TL1 dan TH1 pada mode 1 adalah sebagai berikut: Mode ini sama dengan Mode 0, hanya saja register TLx dipakai sepenuhnya sebagai pencacah biner 8 bit pencacah biner adalah 16 bit. Seiring dengan sinyal denyut, kedudukan pencacah biner 16 bit ini akan bergerak dari 0000h (biner 0000 0000 0000 0000), 0001h, 0002h … sampai FFFFh (biner 1111 1111 1111 1111), dan melimpah kembali menjadi 0000h.
156. TIMER MODE 2 PADA MCS51 Mode 2 – Pencacah Biner 8 bit dengan Isi Ulang ( 8 bit Autoreload Binary Counter ) 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 FFh menjadi 00h). Dengan cara ini bisa didapatkan sinyal limpahan yang frekuensinya ditentukan oleh nilai yang disimpan dalam TH0.
157. TIMER MODE 3 PADA MCS51 Pada Mode 3 TL0, TH0, TL1 dan TH1 dipakai untuk membentuk 3 untaian pencacah, yang pertama adalah untaian pencacah biner 16 bit tanpa fasilitas pemantau sinyal limpahan yang dibentuk dengan TL1 dan TH1. Yang kedua adalah TL0 yang dipakai sebagai pencacah biner 8 bit dengan TF0 pemantau limpahan. Pencacah biner ketiga adalah TH0 yang dipakai sebagai pencacah biner 8 bit dengan TF1 pemantau limpahan.
158. Register Pengatur Timer Register TMOD dibagi menjadi 2 bagian secara simetris, bit 0 sampai 3 register TMOD (TMOD bit 0 .. TMOD bit 3) dipakai untuk mengatur Timer 0 , bit 4 sampai 7 register TMODE (TMOD bit 4 .. TMOD bit 7) dipakai untuk mengatur Timer1, pemakaiannya sebagai berikut : 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 .
159.
160. Register Pengatur Timer Register TCON dibagi menjadi 2 bagian, 4 bit pertama (bit 0 .. bit 3, bagian yang diarsir dalam Gambar 3b) dipakai untuk keperluan mengatur kaki INT0 dan INT1 Sisa 4 bit dari register TCON (bit 4..bit 7) dibagi menjadi 2 bagian secara simetris yang dipakai untuk mengatur Timer 0/Timer 1
161. Register Pengatur Timer Bit TFx (maksudnya adalah TF0 atau TF1) merupakan bit penampung limpahan, TFx akan menjadi ‘ 1 ’ setiap kali pencacah biner yang terhubung padanya melimpah (pencacah berubah dari FFFFh kembali menjadi 0000h). Bit TFx di-nol-kan dengan istruksi CLR TF0 atau CLR TF1 . Jika sarana interupsi dari Timer 0 / Timer 1 dipakai, TRx di-nol-kan saat MCS51 menjalankan rutin layanan interupsi ( ISR – Interupt Service Routine ).
162. Register Pengatur Timer Bit TRx (maksudnya adalah TR0 atau TR1) merupakan bit pengatur saluran sinyal denyut, bila bit ini = 0 sinyal denyut tidak disalurkan ke pencacah biner sehingga pencacah berhenti mencacah. Bila bit GATE pada register TMOD = 1 , maka saluran sinyal denyut ini diatur bersama oleh TRx dan sinyal pada kaki INT0 / INT1
163. Register Pengatur Timer Setelah MCS51 di-reset register TMOD bernilai $00, hal ini berarti : • bit C/T* =’ 0 ’, menurut Gambar 4 keadaan ini membuat saklar S1 ke posisi atas, sumber sinyal denyut berasal dari osilator kristal yang frekuensinya sudah dibagi 12, pencacah biner yang dibentuk dengan TL1 dan TH1 berfungsi sebagai timer .
164. Register Pengatur Timer Jika sistem yang dirancang memang menghendaki Timer 1 bekerja sebagai timer maka bit C/T * tidak perlu diatur lagi. Tapi jika sistem yang dirancang menghendaki agar Timer 1 bekerja sebagai counter untuk menghitung pulsa yang masuk lewat kakai T1 (P3.5 ), maka posisi saklar S1 harus dikebawahkan dengan membuat bit C/T* menjadi ‘ 1 ’.
165. Register Pengatur Timer bit GATE =’ 0 ’, hal ini membuat output gerbang OR selalu ‘ 1 ’ tidak dipengaruhi keadaan ‘ 0 ’ atau ‘ 1 ’ pada kaki INT1 ( P3.3 ). Dalam keadaan semacam ini, saklar S2 hanya dikendalikan lewat bit TR1 dalam register TCON . Jika TR1 =’ 1 ’ saklar S2 tertutup sehingga sinyal denyut dari S1 disalurkan ke sistem pencacah biner, aliran sinyal denyut akan dihentikan jika TR = ’0’ .
166. Register Pengatur Timer Sebaliknya jika bit GATE =’ 1 ’, output gerbang OR akan mengikuti keadaan kaki INT1 , saat INT1 =’ 0 ’ apa pun keadaan bit TR1 output gerbang AND selalu =’ 0 ’ dan saklar S1 selalu terbuka, agar saklar S1 bisa tertutup kaki INT1 dan bit TR1 harus =’ 1 ’ secara bersamaan. Jika sistem yang dirancang menghendaki kerja dari timer /counter dikendalikan dari sinyal yang berasal dari luar chip, maka bit GATE harus dibuat menjadi ‘ 1 ’
167. Register Pengatur Timer Jika sistem yang dirancang menghendaki kerja dari timer/counter dikendalikan dari sinyal yang berasal dari luar chip, maka bit GATE harus dibuat menjadi ‘ 1 ’ bit M1 dan M0 =’ 0 ’, berarti TL1 dan TH1 disusun menjadi pencacah biner 13 bit (Mode 0), jika dikehendaki Timer 1 bekerja pada mode 1 maka bit M1 harus dibuat ‘ 0 ’ dan bit M0 ‘ 1’ .
168. Register Pengatur Timer Pengetahuan di atas dipakai sebagai dasar untuk mengatur dan mengendalikan Timer seperti terlihat dalam contoh-contoh berikut : Setelah reset TMOD bernilai 00h , berarti Timer 1 bekerja sebagai pencacah biner 13 bit, sumber sinyal denyut dari osilator kristal atau Timer 1 bekerja sebagai ‘timer’, bit GATE =’ 0 ’ berarti kaki INT1 tidak berpengaruh pada rangkaian sehingga Timer 1 hanya dikendalikan dari bit TR1 . Dalam pemakaian biasanya dipakai pencacah biner 16 bit, untuk keperluan itu instruksi yang diperlukan untuk mengatur TMOD adalah : MOV TMOD,#00010000b
169. Register Pengatur Timer Bilangan biner 00010000 diisikan ke TMOD , berakibat bit 7 TMOD (bit GATE ) bernilai ‘ 0 ’, bit 6 (bit C/T* ) bernilai ‘ 0 ’, bit 5 dan 4 (bit M1 dan M0 ) bernilai ‘ 01’ , ke-empat bit ini dipakai untuk mengatur Timer 1 , sehingga Timer 1 bekerja sebagai timer dengan pencacah biner 16 bit yang dikendalikan hanya dengan TR1 . Jika dikehendaki pencacah biner dipakai sebagai counter untuk mencacah jumlah pulsa yang masuk lewat kaki T1 ( P3.5 ), instruksinya menjadi : MOV TMOD,#01010000b
170. Register Pengatur Timer Perbedaannya dengan instruksi di atas adalah dalam instruksi ini bit 6 (bit C/T* ) bernilai ‘ 1 ’. Selanjutnya jika diinginkan sinyal dari perangkat keras di luar chip MCS51 bisa ikut mengendalikan Timer 1 , instruksi pengatur Timer 1 akan menjadi : MOV TMOD,#11010000b Dalam hal ini bit 7 (bit GATE ) bernilai ‘ 1 ’. Setelah mengatur konfigurasi Timer 0 seperti di atas, pencacah biner belum mulai mencacah sebelum diperintah dengan instruksi : SETB TR1 Jika bit GATE = ‘ 1 ’, selama kaki INT1 bernilai ‘ 0 ’ pencacah biner belum akan mencacah. Untuk menghentikan proses pencacahan, dipakai instruksi CLR TR1
171.
172. Aplikasi Timer Pemakaian waktu tunda Waktu tunda banyak dipakai dalam pemrograman mikrokontroler untuk membangkitkan pulsa, membangkitkan sinyal periodik dengan frekuensi tertentu, untuk menghilangkan effek bouncing dari skalar dalam membuat key pad (keyboard sederhana) dan lain sebagainya. Waktu tunda bisa dibangkitkan secara sederhana dengan menjalankan instruksi-instruksi yang waktu pelaksanaanya bisa diperhitungkan dengan tepat. Untuk mendapatkan waktu tunda yang panjang, tidak dipakai cara di atas tapi pakai Timer. Waktu tunda yang dibentuk dengan kedua cara tersebut sangat tergantung pada frekuensi kerja mikrokontroler, dalam contoh-contoh berikut dianggap mikrokontroler bekerja pada frekuensi 12 MHz.
173. Aplikasi Timer Instruksi-instruksi berikut ini bisa dipakai untuk membangkitkan pulsa ‘ 0 ’ dengan lebar 3 mikro-detik pada kaki P1.0 CLR P1.0 NOP ; 1 mikro-detik NOP ; 1 mikro-detik SETB P1.0 ; 1 mikro-detik Instruksi baris pertama membuat P1.0 yang mula-mula ‘ 1 ’ menjadi ‘ 0 ’,pelaksanaan instruksi NOP memerlukan waktu 1 mikro-detik ,instruksi SETB P1.0 juga memerlukan waktu 1 mikrodetik, total waktu sebelum P1.0 kembali menjadi ‘ 1 ’ adalah 3 mikro-detik
174. Aplikasi Timer Dengan sedikit perubahan instruksi-instruksi di atas bisa membangkitkan sinyal dengan frekuensi 100 KHz pada kaki P1.0 : Sinyal100KHz: CPL P1.0 ; 1 mikro-detik NOP ; 1 mikro-detik NOP ; 1 mikro-detik SJMP Sinyal100KHz ; 2 mikro-detik Instruksi CPL P1.0 pada baris 1 membalik keadaan pada P1.0 , bila mula-mula P1.0 bernilai ‘ 1 ’ akan dirubah menjadi ‘ 0 ’, sebaliknya bila mula-mula ‘ 0 ’ akan dirubah menjadi ‘ 1 ’. Total waktu tunda ke-empat baris di atas adalah 5 mikro-detik, sehingga yang terjadi adalah P1.0 bernilai ‘ 0 ’ selama 5 mikro-detik dan bernilai ‘ 1 ’ selama 5 mikro-detik berulang terus tanpa henti, dengan frekuensi sebesar 1/10 mikro-detik = 100.000 Hertz.
175. Aplikasi Timer Program di atas bisa pula dibuat dengan memakai Timer 1 sebagai pengatur waktu tunda sebagai berikut : MOV TMOD,#00100000b ; Timer 1 bekerja pada Mode 2 MOV TH1,#0F6h ; Nilai pengisi ulang TL1 SETB TR1 ; Timer 1 mulai mencacah Ulangi: JNB TF1,$ ; Tunggu sampai melimpah CPL P1.0 ; Keadaan pada P1.0 di-balik CLR TF1 ; Hapus limpahan pencacah SJMP Ulangi ; Ulangi terus tiada henti… Instruksi baris pertama mempersiapkan Timer 0 bekerja pada Mode 2 – Pencacah Biner 8 bit dengan Isi Ulang, bilangan pengisi ulang ditentukan sebesar F0h yang disimpan ke register TH1 pada baris 2, instruksi berikutnya memerintahkan pencacah biner mulai mencacah.
176. Aplikasi Timer Pencacah biner yang dibentuk dengan register TL1 akan mencacah naik seirama dengan siklus sinyal denyut, mulai dari F6h sampai FFh , saat pencacah melimpah dari FFh ke 00h bit TR1 pada register TCON akan menjadi ‘ 1 ’ dan TL1 secara otomatis di isi ulang dengan bilangan F0h yang tersimpan pada register TH0 . Hal ini akan terjadi terus menerus dan berulang setiap 10 siklus sinyal denyut ( F6h , F7h , F8h , F9h , FAh , FBh , FCh , FDh , FEh , FFh kembali ke 00h , total 10siklus)
177. Aplikasi Timer Instruksi JNB TR1,$ menunggu bit TR1 menjadi ‘ 1 ’, yakni saat pencacah biner melimpah dari FFh ke 00h yang dibahas di atas. Lepas dari penantian tersebut, P1.0 dibalik keadaanya dengan instruksi CPL P1.0 , TR1 dikembalikan menjadi 0 (harus dikembalikan sendiri dengan instruksi ini), agar bisa ditunggu lagi sampai menjadi ‘ 1 ’ kembali setelah instruksi SJMP Ulangi . Frekuensi dari sinyal di P1.0 sebesar 1 / 16 mikro-detik = 31,25 KHz.
188. SERIAL REGISTER - REN REN harus diberi nilai ‘1’ untuk mengaktifkan penerimaan data. Jika REN diberi nilai ‘0’, maka tidak akan ada penerimaan data. - TB8 TB8 adalah bit ke-9 yang dikirimkan dalam mode 2 atau 3. Nilai bit ini diatur oleh program user. - RB8 RB8 adalah bit ke-9 yang diterima dalam mode 2 atau 3. Pada mode 1, RB8 adalah stop bit yang diterima. Pada mode 0, RB8 tidak digunakan.
189.
190.
191.
192.
193.
194.
195. BAUD RATE Sedangkan baud rate untuk mode 2 memiliki 2 variasi tergantung dari kondisi SMOD.
196. BAUD RATE Baud rate untuk mode 1 dan 3 dihasilkan oleh Timer 1. Pengaturan baudrate untuk mode 1 dan 3 dapat dilakukan dengan cara mengubah nilai SMOD,TMOD, dan TH1. Umumnya Timer 1 dioperasikan pada mode 2 (8-bit Auto Reload)
197.
198. BAUD RATE Misalkan baud rate yang diinginkan adalah 19200 bps dengan frekuensi osilator 11,0592 MHz
199. BAUD RATE Untuk mendapatkan baud rate yang lambat, user dapat mengoperasikan Timer 1 pada mode 1 dengan rumus
200. INISIALISASI SERIAL Proses inisialisasi bertujuan untuk menentukan mode komunikasi serial dan baud rate yang digunakan. Register yang harus diatur terlebih dahulu meliputi: 1. SCON Langkah pertama adalah menentukan mode yang akan digunakan (mode 0, 1, 2, atau 3), kemampuan menerima data, dan nilai bit ke-9. Misalnya mode yang digunakan adalah mode 1 dengan kemampuan menerima data namun tanpa komunikasi multiprosesor, maka instruksinya adalah sebagai berikut: MOV SCON, #01010000b atau MOV SCON, #50h atau SETB SM1 SETB REN
201. INISIALISASI SERIAL 2. TMOD, TH1 dan/atau TL1, PCON, dan TCON Jika komunikasi serial digunakan dalam mode 1 atau 3, maka langkah berikutnya adalah menentukan baud rate. Misalnya Timer/Counter 1 digunakan sebagai timer dalam mode 2 untuk membangkitkan baud rate 19200 bps, maka instruksinya adalah sebagai berikut: MOV TMOD, #00100000b MOV TH1, #0FDh MOV PCON, #10000000b MOV TCON, #01000000b atau MOV TMOD, #20h MOV TH1, #0FDh MOV PCON, #80h MOV TCON, #40h atau MOV TMOD, #20h MOV TH1, #0FDh MOV PCON, #80h SETB TR1
202. INISIALISASI SERIAL 3. IE dan/atau IP Jika komunikasi serial yang diprogram akan digunakan sebagai sumber interrupt, maka IE dan/atau IP juga harus diatur. Misalnya komunikasi serial digunakan sebagai sumber interrupt dengan prioritas tinggi, maka instruksinya adalah sebagai berikut: MOV IP, #00010000b MOV IE, #10010000b atau MOV IP, #10h MOV IE, #90h atau SETB PS SETB ES SETB EA
216. SUMBER INTERUPSI MCS51 Kalau bit IT0 (atau IT1 ) =’ 0 ’ maka bit IE0 (atau IE1 ) dalam TCON menjadi ‘ 1 ’ saat kaki INT0 =’ 0 ’. Kalau bit IT0 (atau IT1 ) =’ 1 ’ maka bit IE0 (atau IE1 ) dalam TCON menjadi ‘ 1 ’ saat terjadi transisi sinyal ‘ 1 ’ menjadi ‘ 0 ’ pada kaki INT0 .
217. SUMBER INTERUPSI MCS51 Menjelang prosesor menjalankan ISR dari Interupsi Eksternal, bit IE0 (atau bit IE1 ) dikembalikan menjadi ‘ 0 ’, menandakan permintaan Interupsi Eksternal sudah dilayani. Namun jika permintaan Interupsi Ekternal terjadi karena level tegangan ‘ 0 ’ pada kaki IT0 (atau IT1 ), dan level tegangan pada kaki tersebut saat itu masih =’ 0 ’ maka bit IE0 (atau bit IE1 ) akan segera menjadi ‘ 1 ’ lagi!
218. SUMBER INTERUPSI MCS51 Bit TF0 (atau bit TF1 ) dalam TCON merupakan petanda (flag) yang menandakan adanya permintaan Interupsi Timer, bit TF0 (atau bit TF1 ) menjadi ‘ 1 ’ pada saat terjadi limpahan pada pencacah biner Timer 0 (atau Timer 1). Menjelang prosesor menjalankan ISR dari Interupsi Timer, bit TF0 (atau bit TF1 ) dikembalikan menjadi ‘ 0 ’, menandakan permintaan Interupsi Timer sudah dilayani.
219. SUMBER INTERUPSI MCS51 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 ’.
220. SUMBER INTERUPSI MCS51 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.
221. SUMBER INTERUPSI MCS51 Petanda permintaan interupsi ( IE0 , TF0 , IE1 , TF1 , RI dan TI ) semuanya bisa di-nol-kan atau di-satu-kan lewat instruksi, pengaruhnya sama persis kalau perubahan itu dilakukan oleh perangkat keras. Artinya permintaan interupsi bisadiajukan lewat pemrograman, misalnya permintaan interupsi eksternal IT0 bisa diajukan dengan instruksi SETB IE0 .
222. Mengaktifkan Interupsi Semua sumber permintaan interupsi yang di bahas di atas, masing-masing bisa di-aktif-kan atau di-nonaktif-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. Disamping itu ada pula bit EA yang bisa dipakai untuk mengatur semua sumber interupsi sekaligus.
223. Mengaktifkan Interupsi Setelah reset, semua bit dalam register IE bernilai ‘ 0 ’, artinya sistem interupsi dalam keadaan non-aktip. 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 .
224. Vektor Interupsi Saat MCS51 menanggapi permintaan interupsi Program Counter diisi dengan sebuah nilai yang dinamakan sebagai vektor interupsi yang merupakan nomor awal dari memori-program yang menampung ISR untuk melayani permintaan interupsi tersebut. Vektor interupsi itu dipakai untuk melaksanakan instruksi LCALL yang diaktipkan secara perangkat keras.
225. Vektor Interupsi Vektor interupsi untuk interupsi eksternal INT0 adalah 0003h , untuk interupsi timer 0 adalah 000Bh Interupsi ekternal INT1 adalah 0013h Interupsi timer 1 adalah 001Bh dan untuk interupsi port seri adalah 0023h . Jarak vektor interupsi satu dengan lainnya sebesar 8, atau hanya tersedia 8 byte untuk setiap ISR . Jika sebuah ISR memang hanya pendek saja, tidak lebih dari 8 byte, maka ISR tersebut bisa langsung ditulis pada memori-program yang disediakan untuknya. ISR yang lebih panjang dari 8 byte ditulis ditempat lain, tapi pada memori-program yang ditunjuk oleh vektor interupsi diisikan instruksi JUMP ke arah ISR bersangkutan.
228. INTERFACING DENGAN LCD KARAKTER RS=P1.0 RW=P1.1 E=P1.2 DB7=P2.7 DB6=P2.6 DB5=P2.5 DB4=P2.4
229. INTERFACING DENGAN LCD KARAKTER Inisialisasi dan file pendukung LCD : hd44780.asm bagian variabel rs bit p1.0 rw bit p1.1 e bit p1.2 rkursor equ 14h lkursor equ 10h rdisplay equ 1fh ldisplay equ 18h homelcd equ 02h barisdua equ 0c0h display_clear equ 01h display_off equ 08h cursor_on equ 0eh cursor_off equ 0ch blink_on equ 0fh blink_off equ 0eh set4bit equ 28h set8bit equ 38h
230. INTERFACING DENGAN LCD KARAKTER DELAY1S: mov r0,#100 ss: call delay5ms djnz r0,ss RET delay5ms: MOV TMOD,#01H MOV TH0,#HIGH(-5000) MOV TL0,#LOW(-5000) SETB TR0 JNB TF0,$ CLR TF0 CLR TR0 RET
231. INTERFACING DENGAN LCD KARAKTER baris2_lcd: mov a,#barisdua call kirim_perintah ret baris1_lcd: mov a,#homelcd call kirim_perintah ret
232. INTERFACING DENGAN LCD KARAKTER geser_display_kanan: mov a,#rdisplay call kirim_perintah ret geser_display_kiri: mov a,#ldisplay call kirim_perintah ret geser_kursor_kiri: mov a,#lkursor call kirim_perintah ret geser_kursor_kanan: mov a,#rkursor call kirim_perintah ret
233. INTERFACING DENGAN LCD KARAKTER baca_register: mov p2,#0ffh ;jadikan p2 sebagai input setb rw clr rs setb e mov a,p2 anl a,#0f0h clr e push acc setb e mov a,p2 anl a,#0f0h clr e swap a pop b add a,b clr rw ret
234. INTERFACING DENGAN LCD KARAKTER periksa_busy: call baca_register jb acc.7,periksa_busy ret kirim_data_lcd: setb e mov p2,a clr e ret kirim_karakter: clr rw setb rs call kirim_data_lcd swap a call kirim_data_lcd call periksa_busy ret
235. INTERFACING DENGAN LCD KARAKTER kirim_perintah: clr rw clr rs call kirim_data_lcd ;4bit sebanyak 2kali swap a call kirim_data_lcd call periksa_busy ret
237. INTERFACING DENGAN LCD KARAKTER hapus_layar: mov a,#01h call kirim_perintah ret data_lcd data p2 ;set4bit posisi msb kursor_on: mov a,#cursor_on call kirim_perintah ret kursor_off: mov a,#cursor_off call kirim_perintah ret
238. INTERFACING DENGAN LCD KARAKTER posisi_awal_lcd: mov a,#02h ;set ke posisi paling awal call kirim_perintah ret kirim_pesan_lcd: loop_kirim_pesan_lcd: mov a,#0 ;ambil data dr memori yang ditunjuk movc a,@a+dptr cjne a,#0fh,kirim_lcd ;kirim ke lcd selama belum ;ditemukan 0fh ret kirim_lcd: call kirim_karakter inc dptr ;tunjuk ke memori selanjutnya jmp loop_kirim_pesan_lcd
239. INTERFACING DENGAN LCD KARAKTER kirim_pesan_lcd_with_delay: loop_kirim_pesan_lcd_with_delay: mov a,#0 ;ambil data dr memori yang ditunjuk movc a,@a+dptr cjne a,#0fh,kirim_lcd_with_delay ;kirim ke lcd selama belum ditemukan 0fh ret kirim_lcd_with_delay: call kirim_karakter inc dptr ;tunjuk ke memori selanjutnya call delay1s jmp loop_kirim_pesan_lcd_with_delay
240. INTERFACING DENGAN LCD KARAKTER ;Contoh Program sederhana menampilkan karakter dan grafis ;Tabel karakter dan file library lcd hd44780 pesanlcd1: db 'Deddy Susilo, ST',0fh pesanlcd2: db '-- NIP: 61546 --',0fh pesanlcd3: db ' Please Wait... ',0fh pesanlcd4: db '# SWITCH.COM #',0fh pesanlcd5: db '@@-FTEK UKSW-@@',0fh heart: db 0,10,31,31,14,4,0,0,0fh oke: db 4,0,0eh,0,1fh,0,1fh,0,0fh $include (hd44780.asm)
301. Solar Cell Digital Infrared Ranging Compass Touch Switch Pressure Switch Limit Switch Magnetic Reed Switch Magnetic Sensor Miniature Polaroid Sensor Polaroid Sensor Board Piezo Ultrasonic Transducers Pyroelectric Detector Thermistor Gas Sensor Gieger-Muller Radiation Sensor Piezo Bend Sensor Resistive Bend Sensors Mechanical Tilt Sensors Pendulum Resistive Tilt Sensors CDS Cell Resistive Light Sensor Hall Effect Magnetic Field Sensors Compass IRDA Transceiver IR Amplifier Sensor IR Modulator Receiver Lite-On IR Remote Receiver Radio Shack Remote Receiver IR Sensor w/lens Gyro Accelerometer IR Reflection Sensor IR Pin Diode UV Detector Metal Detector
302.
303.
304.
305. Inputs for Resistive Sensors Voltage divider: You have two resisters, one is fixed and the other varies, as well as a constant voltage V micro R1 R2 Vsense Comparator: If voltage at + is greater than at -, digital high out A/D converter Digital I/O + - Binary Threshold V
318. Quiz 2: How could you augment a grating-based (relative) encoder in order to detect the direction of rotation? light emitter/detector Quiz 1: If there are 100 lines in the grating, what is the smallest detectable change in motor-shaft angle? Incremental Optical Encoders