LEMBAR TEORI
MIKROKONTROLER MCS-51
1
KEGIATAN BELAJAR 1
A. Struktur Mikrokontroler
2
Dalam gambar 1 terlihat bahwa sebuah mikrokontroler terdiri dari
beberapa bagian. Bagian-bagian tersebut saling dihubungkan dengan
bus internal dan pada umumnya terdiri dari 3 macam bus yaitu
address bus, data bus dan control bus.
1. Register:
2. Accumulator:
3
3. Program Counter:
5. Clock Circuits:
7. Stack Pointer:
4
Pointer berisi offset dimana posisi data stack yang terakhir masuk
(atau yang pertama kali dapat diambil).
9. Interrupt Circuits :
5
B. Prinsip Kerja Mikrokontroler
6
untuk mengukur tegangan sinyal masukan, selanjutnya hasil
pembacaan ADC diolah untuk kemudian dikirimkan ke sebuah display
yang terhubung pada port I/O guna menampilkan hasil pembacaan
yang telah diolah. Proses pengendalian ADC, pemberian sinyal-sinyal
yang tepat pada display, kesemuanya dikerjakan secara berurutan
pada program yang ditulis dalam ROM.
C. Soal-soal Latihan
7
D. Kesimpulan
3. EEPROM/EPROM/PROM/ROM
5. Timer
6. Interupt Controller
8
memerlukan komponen-komponen pendukung seperti IC TTL dan
CMOS dapat direduksi/diperkecil dan akhirnya terpusat serta
dikendalikan oleh mikrokontroler ini. Dengan penggunaan
mikrokontroler ini maka sistem elektronik akan menjadi lebih ringkas
dan harga yang relatif murah.
9
KEGIATAN BELAJAR II
MIKROKONTROLER AT89S51/52
A. Pendahuluan
Mikrokontroler saat ini tidak asing lagi dalam dunia elektronika, hampir
semua peralatan elektronik dewasa ini menggunakan perangkat ini,
mikrokontroler merupakan pengendali utama dalam peralatan
elektronik saat ini, maka mikrokontroler merupakan suatu hal yang
penting untuk dipelajari bagi mereka yang berkecimpung dalam dunia
elektronika.
10
paralel port komputer sehingga bagi mereka yang belum memiliki
programmer dapat tetap bereskperimen menggunakan mikrokontroler
ini dengan biaya yang relatif murah.
B. Fitur AT89S51:
11
Gambar 2. Bentuk fisik AT89Sxx (PDIP) dan konfigurasi Pin
C. Diskripsi AT89S51
12
dua buah 16-bit timer/ counter, lima vektor interupsi dua level,
sebuah port serial full dupleks, oscillator internal, dan rangkaian clock.
Selain itu AT89S51 didisain dengan logika statis untuk operasi dengan
frekuensi sampai 0 Hz dan didukung dengan mode penghematan daya.
Pada mode iddle akan menghentikan CPU sementara RAM, timer/
counter, serial port dan sistem interupsi tetap berfungsi. Mode Power
Down akan tetap menyimpan isi dari RAM tetapi akan membekukan
oscillator, menggagalkan semua fungsi chip sampai interupsi eksternal
atau reset hardware dibangkitkan.
2. GND: Ground
3. Port0
Port 0, merupakan port I/O 8-bit open drain dua arah. Sebagai sebuah
port, setiap pin dapat mengendalikan 8 input TTL. Ketika logika “1”
dituliskan ke port 0, maka port dapat digunakan sebagai input dengan
high impedansi. Port 0 dapat juga dikonfigurasikan untuk multiplexing
dengan address/ data bus selama mengakses memori program atau
data eksternal. Pada mode ini P0 harus mempunyai pull-up.
4. Port1
Port 1 merupakan port I/0 8-bit dua arah dengan internal pull up.
Buffer output port 1 dapat mengendalikan empat TTL input. Ketika
logika “1” dituliskan ke port 1, maka port ini akan mendapatkan
internal pull up dan dapat digunakan sebagai input.
13
Port 1 juga menerima alamat byte rendah selama pemrograman dan
verifikasi Flash.
6. Port2
Port 2 merupakan port I/O 8-bit dua arah dengan internal pull- up.
Buffer output port 2 dapat mengendalikan empat TTL input. Ketika
logika “1” dituliskan ke port 2, maka port ini akan mendapatkan
internal pull up dan dapat digunakan sebagai input.
7. Port3
Port 3 merupakan port I/O 8-bit dua arah dengan internal pull up.
Buffer output port 3 dapat mengendalikan empat TTL input. Ketika
logika “1” dituliskan ke port 3, maka port ini akan mendapatkan
internal pull up dan dapat digunakan sebagai input.
Port 3 juga melayani berbagai macam fitur khusus, sebagaimana yang
ditunjukkan pada tabel berikut:
14
P3.4 T0 ( input eksternal timer 0 )
8. RST
Input Reset. Logika high “1” pada pin ini untuk dua siklus mesin
sementara oscillator bekerja maka akan me-reset devais.
9. ALE/PROG
10. PSEN
11. EA/VPP
15
12. XTAL1
13. XTAL2
E. Organisasi Memori
16
Gambar 3. Diagram blok mikrokontroler AT89S51
17
F. Memory Program
G. Memory Data
18
ruang SFR. Alamat memori data internal selalu mempunyai lebar data
satu byte. Pengalamatan langsung di atas 7Fh akan mengakses satu
alamat memori, dan pengalamatan tak langsung di atas 7Fh akan
mengakses satu alamat yang berbeda. Demikian pada gambar 6
menunjukkan 128 byte bagian atas dan ruang SFR menempati blok
alamat yang sama, yaitu 80h sampai dengan FFh, yang sebenarnya
mereka terpisah secara fisik. 128 byte RAM bagian bawah
dikelompokkan lagi menjadi beberapa blok, seperti yang ditunjukkan
pada gambar 7a. 32 byte RAM paling bawah, dikelompokkan menjadi
4 bank yang masing-masing terdiri dari 8 register. Instruksi program
untuk memanggil register-register ini dinamai sebagai R0 sampai
dengan R7. Dua bit pada Program Status Word (PSW) dapat memilih
register bank mana yang akan digunakan. Penggunaan register R0
sampai dengan R7 ini akan membuat pemrograman lebih efisien dan
singkat, bila dibandingkan pengalamatan secara langsung.
19
Gambar 7a. RAM internal 128 byte paling bawah
20
1. Buffer Data Serial
2. Register Timer
3. Register Control
Registers IP, IE, TMOD, TCON, SCON, dan PCON terdiri dari bit control
dan status.
1.Accumulator
21
2. Register B
PSW berada dalam lokasi ruang SFR ( perhatikan pada gambar 1.7,
dengan lokasi alamat D0h ). Pada PSW ini kita dapat memantau
beberapa status yang meliputi: carry bit, auxiliary carry ( untuk
operasi BCD ), dua bit pemilih bank register, flag overflow, sebuah bit
paritas dan dua flag status yang bisa didefinisikan sendiri. Bit carry
dapat juga anda gunakan pada keperluan operasi aritmatika, juga bisa
digunakan sebagai universal akumulator untuk beberapa operasi
Boolean.
MSB LSB
CY AC F0 RS1 RS0 OV - P
22
PSW.6 AC Auxilliary Carry Flag. (For BCD operations.)
Parity Flag.
Set/cleared by hardware each instruction cycle to indicate
PSW.0 P
an odd/even number of “one” bits in the Accumulator, i.e.,
even parity.
Bit RS0 dan RS1 dapat digunakan untuk memilih satu dari empat bank
register sebagaimana ditunjukkan pada tabel 2. Bit paritas dapat
digunakan untuk mengetahui jumlah logika '1' pada akumulator: P=1
bila pada akumulator mempunyai logika '1' yang jumlahnya ganjil, dan
P=0 jika akumulator mempunyai logika '1' yang jumlahnya genap. Dua
bit yang lain PSW1 dan PSW5 dapat digunakan untuk berbagai macam
tujuan.
0 0 0 00 h - 07 h = 0-7 =8
0 1 1 08 h - 0F h = 8-15 =8
1 0 2 10 h - 17 h = 16-23 =8
1 1 3 18 h - 1F h = 24-31=8
23
RS3 RS2 RS1 RS0 RAM
0 0 0 0 0
0 0 0 1 1
0 0 1 0 2
0 0 1 1 3
0 1 0 0 4
0 1 0 1 5
0 1 1 0 6
0 1 1 1 7
1 0 0 0 8
1 0 0 1 9
1 0 1 0 A
1 0 1 1 B
1 1 0 0 C
1 1 0 1 D
1 1 1 0 E
1 1 1 1 F
24
Semua data pada lokasi RAM 128 byte paling bawah dapat diakses
baik dengan menggunakan pengalamatan langsung maupun tak
langsung. 128 byte paling atas hanya dapat diakses dengan cara tak
langsung, gambar 7b.
4. Stack Pointer
5. Data Pointer
Data Pointer (DPTR) terdiri dari byte atas (DPH) dan byte bawah
(DPL). Fungsi ini ditujukan untuk menyimpan data 16-bit. Dapat
25
dimanipulasi sebagai register 16-bit atau dua 8-bit register yang
berdiri sendiri.
26
Port serialnya bersifat full-duplex (dalam satu saat bisa menerima
sekaligus mengirim data), bisa digunakan sebagai shift register, atau
Universal Asynchronous Receiver dan Transmitter (UART) dengan data
terkirim sepanjang 8 atau 9 bit.
L. Soal-soal latihan
1. Gambarkan diagram blok dari mikrokontroler AT89S51
M. Kesimpulan
AT89S51 mempunyai konsumsi daya rendah, mikrokontroller 8-bit
CMOS dengan 4K byte memori Flash ISP (In System
Programmable/ dapat diprogram di dalam sistem). Divais ini dibuat
dengan teknologi memori non-volatile dengan kerapatan tinggi dan
kompatibel dengan standar industri 8051 dari INTEL, set instruksi dan
27
pin keluaran Flash yang berada di dalam chip memungkinkan memori
program untuk diprogram ulang pada saat chip di dalam sistem atau
dengan menggunakan Programmer memori non-volatile konvensional.
Dengan mengkombinasikan CPU 8-bit yang serbaguna dengan flash
ISP pada chip, ATMEL 89S51 merupakan mikrokontroler yang luar
biasa yang memberikan fleksibilitas yang tinggi dan penggunaan biaya
yang efektif untuk beberapa aplikasi kontrol.
AT89S51 memberikan fitur-fitur standar sebagai berikut: 4K byte
Flash, 128 byte RAM, 32 jalur I/O, Watchdog Timer, dua data pointer,
dua buah 16-bit timer/ counter, lima vektor interupsi dua level,
sebuah port serial full dupleks, oscillator internal, dan rangkaian clock.
Selain itu AT89S51 didisain dengan logika statis untuk operasi dengan
frekuensi 0 sampai 12MHz dan didukung dengan mode penghematan
daya. Pada mode iddle akan menghentikan CPU sementara RAM,
timer/ counter, serial port dan sistem interupsi tetap berfungsi. Mode
Power Down akan tetap menyimpan isi dari RAM tetapi akan
membekukan oscillator, menggagalkan semua fungsi chip sampai
interupsi eksternal atau reset hardware dibangkitkan.
28
KEGIATAN BELAJAR III
30
dalam memori nomor 30 di-copy-kan ke Akumulator. Sekilas
intruksi ini sama dengan instruksi data konstan di atas,
perbedaannya instruksi di atas memakai tanda ‘#’ yang menandai
20 adalah data konstan, sedangkan dalam instruksi ini karena tidak
ada tanda ‘#’ maka 30h adalah nomor dari memori.
3. Penyebutan data secara tidak langsung (indirect addressing mode),
cara ini dipakai untuk menunjuk data yang berada di dalam
memori, kalau memori penyimpan data ini letaknya berubah-rubah
sehingga nomor memori tidak disebut secara langsung tapi
di-‘titip’-kan ke register lain : MOV A,@R0.
4. Dalam instruksi ini register serba guna R0 dipakai untuk mencatat
nomor memori, sehingga instruksi ini mempunyai makna memori
yang nomornya tercatat dalam R0 isinya di-copy-kan ke
Akumulator A.
5. Tanda ‘@’ dipakai untuk menandai nomor memori disimpan di
dalam R0.
6. Bandingkan dengan instruksi penyebutan nomor memori secara
langsung di atas, dalam instruksi ini nomor memori terlebih dulu
disimpan di R0 dan R0 berperan menunjuk memori mana yang
dipakai, sehingga kalau nilai R0 berubah memori yang ditunjuk juga
akan berubah pula.
7. Dalam instruksi ini register serba guna R0 berfungsi dengan register
penampung alamat (indirect address register), selain R0 register
serba guna R1 juga bisa dipakai sebagai register penampung
alamat.
8. Penyebutan data dalam register (register addressing mode): MOV
A,R5. Instruksi ini mempunyai makna data dalam register serba
guna R5 di-copy-kan ke Akumulator A. Instruksi ini membuat
31
register serba guna R0 sampai R7 sebagai tempat penyimpan data
yang sangat praktis yang kerjanya sangat cepat.
9. Data yang dimaksud dalam bahasan di atas semuanya berada di
dalam memori data (termasuk register serba guna letaknya juga di
dalam memori data). Dalam penulisan program, sering-sering
diperlukan tabel baku yang disimpan bersama dengan program
tersebut. Tabel semacam ini sesungguhnya merupakan data yang
berada di dalam memori program.
10. Untuk keperluan ini, MCS-51 mempunyai cara penyebutan data
dalam memori program yang dilakukan secara indirect (code
indirect addressing mode) : MOVC A,@A+DPTR.
32
Kode dasar untuk kelompok ini adalah MOV, singkatan dari MOVE yang
artinya memindahkan, meskipun demikian lebih tepat dikatakan
perintah ini mempunyai makna peng-copy-an data. Hal ini bisa
dijelaskan berikut : setelah instruksi MOV A,R7 dikerjakan, Akumulator
A dan register serba guna R7 berisikan data yang sama, yang asalnya
tersimpan di dalam R7.
Perintah MOV dibedakan sesuai dengan jenis memori AT89Cx051.
Perintah ini pada memori data dituliskan menjadi MOV, misalkan :
MOV A,20h
MOV A,@R1
MOV A,P1
MOV P3,A
Selain itu, masih dikenal pula perintah MOVX, yakni perintah yang
dipakai untuk memori data eksternal (X kependekan dari External).
Perintah ini hanya dimiliki oleh anggota keluarga MCS51 yang
mempunyai memori data eksternal, misalnya AT89C51 dan lain
sebagainya, dan jelas tidak dikenal oleh kelompok AT89Cx051 yang
tidak punya memori data eksternal. Hanya ada 6 macam instruksi
yang memakai MOVX, instruksi-instruksi tersebut adalah:
MOVX A,@DPTR
MOVX A,@R0
MOVX A,@R1
MOVX @DPTR,A
MOVX @R0,A
MOVX @R1,A
33
Tabel 3. Macam-macam instruksi copy data
Mov <dest>,
<dest>=<src> V V V V 1
<src>
DPTR=16 bit
Mov
immediate Accumulator Only 1
DPTR,#data16
const
Acc and
Xch A,<byte> <byte> Accumulator Only 1
exchange data
D. Instruksi Aritmatika
34
tersebut melimpah (nilainya lebih besar dari 255) bit Carry akan
bernilai ‘1’, kalau tidak bit Carry bernilai ‘0’. ADDC sama dengan ADD,
hanya saja dalam ADDC nilai bit Carry dalam proses sebelumnya ikut
dijumlahkan bersama.
2. Perintah SUBB
Isi Akumulator A dikurangi dengan bilangan 1 byte berikut dengan
nilai bit Carry, hasil pengurangan akan ditampung kembali dalam
Akumulator. Dalam operasi ini bit Carry juga berfungsi sebagai
penampung limpahan hasil pengurangan. Jika hasil pengurangan
tersebut melimpah (nilainya kurang dari 0) bit Carry akan bernilai ‘1’,
kalau tidak bit Carry bernilai ‘0’.
SUBB A,R0 ; A = A - R0 – C
SUBB A,@R1
SUBB A,P0
3. Perintah DA
35
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.
4. Perintah MUL AB
MOV A,#10
MOV B,#20
MUL AB
5. Perintah DIV AB
36
Addressing Mode Exect.
Mnemonic Operation
Dir Ind Reg Imm Timer uS
Add
A=A+<byte> V V V V 1
A,<byte>
Addc
A=A+<byte>+C V V V V 1
A,<byte>
Subb
A=A-<byte>-C V V V V 1
A,<byte>
Dec
<byt>=<byt>-1 V V V 1
<byte>
F. Instruksi Logika
37
sedikit berlainan dengan operasi aritmatik yang harus melibatkan
Akumulator secara aktip.
Hasil operasi ditampung di sumber data yang pertama.
38
mengakibatkan bit 1 sampai dengan bit 6 dari Akumulator berbalik
nilai, sedangkan bit-bit lainnya tetap tidak berubah nilai.
Anl <byte>=<byte>and
V V V V 1
<byte>,#data #data
Orl <byte>=<byte> or
Data Pointer Only 2
<byte>,#data #data
Xrl<byte>,A <byt>=<byt>xor A V V V 1
<byte>=<byte>xor
Xrl <byte>,#data Accumulator and B Only 4
#data
39
Operasi logika pada umumnya mencakup empat hal, yaitu operasi
AND, operasi OR, operasi EX-OR dan operasi NOT. MCS-51 hanya bisa
melaksanakan tiga jenis operasi logika yang ada, yakni intruksi ANL
(AND Logical) untuk operasi AND instruksi ORL (OR Logical) untuk
operasi OR, CPL (Complement bit) untuk operasi NOT.
ANL C,P1.1
ANL C,P1.2
Instruksi ANL C,P1.1 meng-AND-kan nilai pada bit Carry dengan nilai
Port 1 bit 1 (P1.1), dan hasil operasi tersebut ditampung pada bit
Carry. Instruksi ANL C,/P1.1 persis sama dengan instruksi
sebelumnya, hanya saja sebelum di-AND-kan, nilai P1.1 dibalik
(complemented) lebih dulu, jika nilai P1.1=‘0’ maka yang di-AND-kan
dengan bit Carry adalah ‘1’, demikian pula sebaliknya. Hal serupa
berlaku pada instruksi ORL.
Instruksi CPL dipakai untuk membalik (complement) nilai semua 256
bit data yang dibahas di atas. Misalnya :
CPL C
CPL P1.0
CPL C akan membalik nilai biner dalam bit Carry (jangan lupa bit Carry
merupakan salah satu bit yang ada dalam 256 bit yang dibahas di
atas, yakni bit nomor E7h atau PSW.7).
41
Counter bertambah sebanyak jumlah byte yang membentuk instruksi
yang sedang dijalankan, dengan demikian pada saat instruksi
bersangkutan dijalankan Program Counter selalu menyimpan nomor
memori-program yang menyimpan instruksi berikutnya.
Pada saat mikrokontroler menjalankan kelompok instruksi JUMP, nilai
Program Counter yang runtun sesuai dengan alur program diganti
dengan nomor memori-program baru yang dikehendaki programmer.
Mikrokontroler MCS-51 mempunyai 3 macam intruksi JUMP, yakni
instruksi LJMP (Long Jump), instruksi AJMP (Absolute Jump) dan
instruksi SJMP (Short Jump). Kerja dari ketiga instruksi ini persis
sama, yakni memberi nilai baru pada Program Counter, kecepatan
melaksanakan ketiga instruksi ini juga persis sama, yakni memerlukan
waktu 2 periode instruksi (jika MCS51 bekerja pada frekuensi 12 MHz,
maka instruksi ini dijalankan dalam waktu 2 mikro-detik), yang
berbeda dalam jumlah byte pembentuk instruksinya, instruksi LJMP
dibentuk dengan 3-byte, sedangkan instuksi AJMP dan SJMP cukup 2-
byte.
1. Instruksi LJMP
42
Pemakaian instruksi LJMP bisa dipelajari dari potongan program
berikut :
LJMP TugasBaru
…
ORG 2000h
TugasBaru:
MOV A,P3.1
2. Instruksi AJMP
43
program bit nomor 8 sampai dengan bit nomor 10, byte kedua dipakai
untuk menyatakan nomor memori-program bit nomor 0 sampai
dengan bit nomor 7.
Berikut ini adalah potongan program untuk menjelaskan pemakaian
instruksi AJMP:
ORG 800h
AJMP DaerahIni
AJMP DaerahLain
ORG 900h
DaerahIni:
...
ORG 1000h
DaerahLain:
...
44
instruksi LJMP, karena program yang ditulis tidak mungkin
menjangkau lebih dari 2 Kilo Byte memori-program.
3. Instruksi SJMP
ORG 0F80h
SJMP DaerahLain
ORG 1000h
DaerahLain:
45
4. Instruksi sub-rutin
46
instruksi AJMP yang sudah dibahas sebelumnya. Sedangkan instruksi
LCALL setara dengan instruksi LCALL, yang bisa menjangkau seluruh
memori-program mikrokontroler MCS51 sebanyak 64 Kilo Byte. (tetapi
tidak ada instruski SCALL yang setara dengan instruksi SJMP).
Program untuk AT89C1051 dan AT89C2051 tidak perlu memakai
instruksi LCALL.
Instruksi RET dipakai untuk mengakhiri program sub-rutin, di samping
itu masih ada pula instruksi RETI, yakni instruksi yang dipakai untuk
mengakhiri Program Layanan Interupsi (Interrupt Service Routine),
yaitu semacam program sub-rutin yang dijalankan mikrokontroler
pada saat mikrokontroler menerima sinyal permintaan interupsi.
47
Khusus untuk keluarga mikrokontroler MCS-51 yang mempunyai
kemampuan menangani operasi dalam level bit, instruksi jump
bersyarat dalam MCS-51 dikaitkan pula dengan kemampuan operasi
bit MCS-51.
Nomor memori-program baru yang harus dituju tidak dinyatakan
dengan nomor memori-program yang sesungguhnya, tapi dinyatakan
dengan ‘pergeseran relatif’ terhadap nilai Program Counter saat
instruksi ini dilaksanakan. Cara ini dipakai pula untuk instruksi SJMP.
6. Instruksi JZ / JNZ
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 :
...
Dalam contoh program di atas, MOV A,#0 membuat A bernilai nol, hal
ini mengakibatkan instruksi JNZ Bukan Nol 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.
7. Instruksi JC / JNC
48
Bit Carry merupakan bit yang banyak sekali dipakai untuk keperluan
operasi bit, untuk menghemat pemakaian memori-program disediakan
2 instruksi yang khusus untuk memeriksa keadaan bit Carry, yakni JC
dan JNC. Karena bit akan diperiksa sudah pasti, yakni bit Carry, maka
instruksi ini cukup dibentuk dengan 2 byte saja, dengan demikian bisa
lebih menghemat memori program.
JC Periksa
JB PSW.7,Periksa
Instruksi JB (Jump on Bit Set), instruksi JNB (Jump on not Bit Set) dan
instruksi JBC (Jump 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 MCS-51.
Pengujian Nilai Boolean dilakukan dengan instruksi JUMP bersyarat,
ada 5 instruksi yang dipakai untuk keperluan ini, yakni instruksi JB
49
(JUMP if bit set), JNB (JUMP if bit Not Set), JC (JUMP if Carry Bit set),
JNC (JUMP if Carry Bit Not Set) dan JBC (JUMP if Bit Set and Clear Bit).
Dalam instruksi JB dan JNB, salah satu dari 256 bit yang ada akan
diperiksa, jika keadaannya (false atau true) memenuhi syarat, maka
MCS-51 akan menjalankan instruksi yang tersimpan di memori-
program yang dimaksud. Alamat memori-program dinyatakan dengan
bilangan relatif terhadap nilai Program Counter saat itu, dan cukup
dinyatakan dengan angka 1 byte. Dengan demikian instruksi ini terdiri
dari 3 byte, byte pertama adalah kode operasinya (29h untuk JB dan
30h untuk JNB), byte kedua untuk menyatakan nomor bit yang harus
diuji, dan byte ketiga adalah bilangan relatif untuk instruksi tujuan.
Contoh pemakaian instruksi JB dan JNB sebagai berikut :
JB P1.1,$
JNB P1.1,$
50
10. Instruksi DJNZ
MOV R0,#23h
DJNZ R0,$
Instruksi MOV R0,#23 memberi nilai 23h pada R0, selanjutnya setiap
kali instruksi DJNZ R0,$ dikerjakan, MCS-51 akan mengurangi nilai R0
dengan ‘1’, jika R0 belum menjadi nol maka MCS-51 akan mengulang
instruksi tersebut (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.
MOV A,P1
CJNE A,#0Ah,TidakSama
...
SJMP EXIT
;
TidakSama:
...
51
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
L. SOAL-SOAL LATIHAN
1. Sebutkan jenis-jenis instruksi pada mikrokontroler MCS-51
a. MOV A,#35H
b. MOV A,R2
c. MOV P1, A
d. MOV A, P2
M. KESIMPULAN
Sebuah mikrokontroler tidak akan bekerja bila tidak diberikan program
padanya. Program tersebut memberitahu mikrokontroler tentang apa
yang harus dikerjakan. Program pengendali mikrokontroler disusun
52
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.
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.
53
KEGIATAN BELAJAR IV
Immediate Addressing
Direct Addressing
Indirect Addressing
1. Immediate Addressing
54
ORG 0h
START: MOV A,#20h; put constant 20 into Acc
END
ORG 0h
START: MOV 70h,#0h; put constant 0 into RAM 70h
MOV 71h,#1h;
MOV 72h,#2h;
END
ORG 0h
START: MOV DPTR,#1234h;put constant 1234 into DPTR
END
ORG 0h
START: MOV PSW,#0; Select register bank 0
MOV R0,#0; put 0 into register 0
MOV R1,#1; put 1 into register 1
MOV R2,#2; put 2 into register 2
MOV R3,#3; put 3 into register 3
MOV R4,#4; put 4 into register 4
MOV R5,#5; put 5 into register 5
MOV R6,#6; put 6 into register 6
MOV R7,#7; put 7 into register 7
END
ORG 0h
START: MOV PSW,#8; Select register bank 1
MOV R0,#0; put 0 into register 0
MOV R1,#1; put 1 into register 1
MOV R2,#2; put 2 into register 2
MOV R3,#3; put 3 into register 3
MOV R4,#4; put 4 into register 4
MOV R5,#5; put 5 into register 5
MOV R6,#6; put 6 into register 6
MOV R7,#7; put 7 into register 7
END
55
2. Direct Addressing
ORG 0h
START: MOV A,30h;
END
ORG 0h
START: MOV 70h,#1;put constant 1 into RAM 70h
MOV A, 70h;copy RAM 70 content into Acc
MOV A,#0 ;put constant 0 into Acc
MOV 90h,A ;copy Acc content into RAM 90h
END
ORG 0h
MOV DPTR,#CHARACTER
START: MOV A, #0
INC DPTR
MOVC A, @A+DPTR
MOV R0,A
SJMP START
CHARACTER:
DB 0,1,2,3,4,5,6,7,8,9
3. Indirect Addressing
56
MOV A,@R0
MOV R0,#99h ;
MOV @R0,#01h;
ORG 0h
START: MOV PSW, #0 ; choose register bank 0
MOV R0, #78h; put constant 78h into R0
MOV @R0, #1 ; put contanta 1 into 78h
END
ORG 0h
START: MOV PSW,#0; pilih register bank 1
MOV R0,90h; copy RAM 90h content into R0
MOV @R0,#1; put constant 1 into 90h
END
B. SOAL-SOAL LATIHAN
57
1. Sebutkan jenis-jenis pengalamatan pada mikrokontroler MCS-
51 dan jelaskan!
a. MOV A, #25H
b. MOV A, R4
c. MOV A, P2
d. MOV A, @R0
e. MOV @R1, A
C. KESIMPULAN
Immediate Addressing
Direct Addressing
Indirect Addressing
Immediate addressing merupakan pengalamatan dimana, nilai yang
akan disimpan di dalam memori secara langsung berada dalam kode.
58
Indirect addressing adalah mode pengalamatan yang sangat ampuh,
yang memberikan fleksibilitas dalam hal transfer data. Indirect
addressing juga satu-satunya cara untuk mengakses 128 byte ekstra
dari internal RAM yang ditemukan pada keluarga 8052.
MOV A,@R0
59
KEGIATAN BELAJAR V
TIMER/COUNTER
I. Tujuan Khusus Pembelajaran:
Setelah mempelajari topik ini, pembelajar diharapkan mampu:
60
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. Hal-hal yang dibicarakan di atas
diringkas dalam Gambar 9.
MCS-51 mempunyai dua buah register timer/ counter 16 bit, yaitu
Timer 0 dan Timer 1. Keduanya dapat dikonfigurasikan untuk
beroperasi sebagai timer atau counter, seperti yang terlihat pada
gambar di bawah.
61
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.
Untaian pencacah biner yang dipakai bisa merupakan pencacah biner
naik (count up binary counter) atau pencacah biner menurun (count
down binary counter).
B. Fasilitas Timer/Counter
62
Pencacah biner pembentuk Timer/Counter MCS-51 merupakan
pencacah biner menaik (count up binary counter) yang mencacah dari
0000h sampai FFFFh, saat kedudukan pencacah berubah dari FFFFh
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 88h, bisa
dialamati secara bit) dan register TMOD (Timer Mode Register,
memori-data internal nomor 89h).
C. Mode Timer/Counter
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 sebesar
8 bit, bisa disusun menjadi 4 macam Mode pencacah biner seperti
terlihat dalam Gambar 10 sampai Gambar 13.
Pada Mode 0, Mode 1 dan Mode 2 Timer 0 dan Timer 1 masing-masing
bekerja sendiri, artinya bisa dibuat Timer 0 bekerja pada Mode 1 dan
Timer 1 bekerja pada Mode 2, atau kombinasi mode lainnya sesuai
dengan keperluan.
Pada Mode 3 TL0, TH0, TL1 dan TH1 dipakai bersama-sama untuk
menyusun sistem timer yang tidak bisa dikombinasi dengan yang lain.
Susunan TL0, TH0, TL1 dan TH1 pada masing-masing mode adalah
sebagai berikut:
63
Gambar 10. 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 ini meneruskan sarana Timer yang ada pada
mikrokontroler MCS-48 (mikrokontroler pendahulu MCS-51), dengan
maksud rancangan alat yang dibuat dengan MCS-48 bisa dengan
mudah diadaptasikan ke MCS-51. Mode ini tidak banyak dipakai lagi.
Mode ini sama dengan Mode 0, hanya saja register TLx dipakai
sepenuhnya sebagai pencacah biner 8 bit, sehingga kapasitas
pencacah biner yang terbentuk adalah 16 bit. Seiring dengan sinyal
denyut, kedudukan pencacah biner 16 bit ini akan bergerak dari 0000
(biner 0000 0000 0000 0000), 0001h, 0002h … sampai FFFFh (biner
1111 1111 1111 1111), kemudian melimpah kembali menjadi 0000.
64
3. Mode 2 – Pencacah Biner 8 bit dengan Isi Ulang
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
65
ketiga adalah TH0 yang dipakai sebagai pencacah biner 8 bit dengan
TF1 sebagai sarana pemantau limpahan.
3. Bit GATE merupakan bit pengatur saluran sinyal denyut. Bila bit
GATE=0 saluran sinyal denyut hanya diatur oleh bit TRx
66
(maksudnya adalah TR0 atau TR1 pada register TCON). Bila bit
GATE=1 kaki INT0 (untuk Timer 0) atau kaki INT1 (untuk Timer 1)
dipakai juga untuk mengatur saluran sinyal denyut (lihat Gambar
14).
MSB LSB
67
turn Timer/ Counter on/off
Sisa 4 bit dari register TCON (bit 4..bit 7) dibagi menjadi 2 bagian
secara simetris yang dipakai untuk mengatur Timer0/Timer 1, sebagai
berikut:
68
sinyal denyut ini diatur bersama oleh TRx dan sinyal pada kaki
INT0/INT1.
E. Mengatur Timer
Setelah MCS-51 di-reset register TMOD bernilai 00, hal ini berarti :
69
yang frekuensinya sudah dibagi 12, pencacah biner yang dibentuk
dengan TL1 dan TH1 berfungsi sebagai timer. Jika sistem yang
dirancang memang menghendaki Timer 1 bekerja sebagai timer
maka bit C/T* tidak perlu diatur lagi.
2. 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’.
70
Pengetahuan di atas dipakai sebagai dasar untuk mengatur dan
mengendalikan Timer seperti terlihat dalam contoh-contoh berikut :
MOV TMOD,#00010000b
MOV TMOD,#01010000b
71
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 MCS-51 bisa ikut mengendalikan Timer 1, instruksi
pengatur Timer 1 akan menjadi :
MOV TMOD,#11010000b
SETB TR1
Perlu diingatkan jika bit GATE = ‘1’, selama kaki INT1 bernilai ‘0’
pencacah biner belum akan mencacah. Untuk menghentikan proses
pencacahan, digunakan instruksi:
CLR TR1
Di atas hanya dibahas Timer 1 saja, tata cara untuk Timer 0 persis
sama. Yang perlu diperhatikan adalah register TMOD dipakai untuk
mengatur Timer 0 dan juga Timer 1, sedangkan TMOD tidak bisa
dialamati secara bit (non bit addressable) sehingga jika jika kedua
Timer dipakai, pengisian bit-bit dalam register TMOD harus dipikirkan
sekaligus untuk Timer 0 dan Timer 1.
Bit TR1 dan TR0 yang dipakai untuk mengendalikan proses
pencacahan, terletak di dalam register TCON (memori-data internal
nomor 88h) yang bisa dialamati secara bit (bit addressable). Sehingga
TR0 dan TR1 bisa diatur secara terpisah (dengan perintah SETB atau
CLR), tidak seperti mengatur TMOD yang harus dilakukan secara
bersamaan. Demikian pula bit penampung limpahan pencacah biner
TF0 dan TF1, juga terletak dalam register TCON yang masing-masing
bisa di-monitor sendiri.
72
Sebagimana ditunjukkan pada gambar 16 mikrokontroller dapat
beraksi sebagai timer atau counter, sesuai dengan kebutuhan.
Perhatikan pada saklar sebelah kiri dan kanan pada diagram blok
tersebut. Mikrokontroler akan berfungsi sebagai timer ketika saklar
diposisikan ke atas dan sebaliknya akan berfungsi sebagai counter bila
saklar diposisikan ke bawah, dengan mengontrol bit C/T pada register
TMOD. Posisi saklar sebelah kanan, bergantung pada bit GATE
(register TMOD), TR1 ( register TCON dan INT1).
F. SOAL-SOAL LATIHAN
G. KESIMPULAN
73
Pada dasarnya sarana input yang disebut dengan timer/counter
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. MCS-51 mempunyai dua buah register timer/ counter 16
bit, yaitu Timer 0 dan Timer 1. Keduanya dapat dikonfigurasikan untuk
beroperasi sebagai timer atau counter.
Timer/counter pada mikrokontroler MCS-51 memiliki 4 (empat) mode
operasi yaitu; Mode 0, Mode 1, Mode 2 dan Mode 3. Pada Mode 0,
Mode 1 dan Mode 2 Timer 0 dan Timer 1 masing-masing bekerja
sendiri, artinya bisa dibuat Timer 0 bekerja pada Mode 1 dan Timer 1
bekerja pada Mode 2, atau kombinasi mode lainnya sesuai dengan
keperluan. Pada Mode 3 TL0, TH0, TL1 dan TH1 dipakai bersama-sama
untuk menyusun sistem timer yang tidak bisa dikombinasi dengan
yang lain.
Timer/counter pada mikrokontroler MCS-51 memiliki 2 macam register
pengatur timer/counter yang disebut dengan TMOD dan TCON.
KEGIATAN BELAJAR VI
SISTEM INTERUPSI
74
I. Tujuan Khusus Pembelajaran:
Setelah mempelajari topik ini, pembelajar diharapkan mampu:
A. Sistem Interupsi
75
yakni menentukan aliran program prosesor (mengisi Program Counter
dengan vektor reset).
Program yang dijalankan dengan cara reset, merupakan program
utama bagi prosesor.
Kinerja dari perangkat keras yang digunakan untuk mengatur kerja
dari perangkat lunak, tidak hanya terjadi pada proses reset, tapi
terjadi pula dalam proses interupsi.
Dalam proses interupsi, terjadinya sesuatu pada perangkat keras
tertentu dicatat dalam flip-flop khusus, flip-flop tersebut sering disebut
sebagai ‘penanda’ (flag), catatan dalam penanda 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 17.
76
Sebuah prosesor bisa mempunyai beberapa perangkat keras yang
merupakan sumber sinyal permintaan interupsi, masing-masing
sumber interupsi dilayani dengan ISR berlainan, dengan demikian
prosesor mempunyai beberapa vektor interupsi untuk memilih ISR
mana yang dipakai melayani permintaan interupsi dari berbagai
sumber. Kadang kala sebuah vektor interupsi dipakai oleh lebih dari
satu sumber interupsi yang sejenis, dalam hal semacam ini ISR
bersangkutan harus menentukan sendiri sumber interupsi mana yang
harus dilayani saat itu.
Bila pada saat yang sama terjadi lebih dari satu permintaan interupsi,
prosesor akan melayani permintaan interupsi tersebut menurut
perioritas yang sudah ditentukan, selesai melayani permintaan
interupsi perioritas yang lebih tinggi, prosesor melayani permintaan
interupsi berikutnya, baru setelah itu kembali mengerjakan program
utama.
Ketika 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.
77
Seperti terlihat dalam Gambar 18, AT89C51 mempunyai 6 sumber
interupsi, yakni Interupsi Eksternal (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.
Di samping itu AT89C52 mempunyai 2 sumber interupsi lain, yakni
Interupsi Timer 2 bersumber dari Timer 2 yang memang tidak ada
pada AT89C51.
Bit IE0 (atau bit IE1) dalam TCON merupakan penanda (flag) yang
menandakan adanya permintaan Interupsi Eksternal. Ada 2 keadaan
yang bisa meng-aktif-kan penanda ini, yang pertama karena level
tegangan ‘0’ pada kaki INT0 (atau INT1), yang kedua karena terjadi
transisi sinyal ‘1’ menjadi ‘0’ pada kaki INT0 (atau INT1). Pilihan
bentuk sinyal ini ditentukan lewat bit IT0 (atau bit IT1) yang terdapat
dalam register TCON.
1. Bila bit IT0 (atau IT1) =’0’ maka bit IE0 (atau IE1) dalam TCON
menjadi ‘1’ saat kaki INT0=’0’.
2. Bila bit IT0 (atau IT1) =’1’ maka bit IE0 (atau IE1) dalam TCON
menjadi ‘1’ saat terjadi transisi sinyal ‘1’ menjadi ‘0’ pada kaki
INT0.
78
Bit TF0 (atau bit TF1) dalam TCON merupakan penanda (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).
Pada saat prosesor menjalankan ISR dari Interupsi Timer, bit TF0
(atau bit TF1) dikembalikan menjadi ‘0’, menandakan permintaan
Interupsi Timer sudah dilayani.
Interupsi port serial terjadi karena dua hal, yang pertama terjadi
setelah port seri selesai mengirim data 1 byte, permintaan interupsi
semacam ini ditandai dengan penanda (flag) TI=’1’. Yang kedua
terjadi saat port seri telah menerima data 1 byte secara lengkap,
permintaan interupsi semacam ini ditandai dengan penanda (flag)
RI=’1’.
Penanda di atas tidak dikembalikan menjadi ‘0’ menjelang prosesor
menjalankan ISR dari Interupsi port seri, karena penanda tersebut
masih diperlukan ISR untuk menentukan sumber interupsi berasal dari
TI atau RI. Agar port seri bisa dipakai kembali setelah mengirim atau
menerima data, penanda-penanda tersebut harus di-nol-kan lewat
program.
Penanda 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 bisa diajukan lewat
pemrograman, misalnya permintaan interupsi eksternal IT0 bisa
diajukan dengan instruksi SETB IE0.
79
Gambar 18. Sumber Interupsi
C. Mengaktifkan Interupsi
80
juga EA yang mengatur semua sumber interupsi. Misalnya instruksi
yang dipakai untuk mengaktifkan interupsi ekternal INT0 adalah SETB
EX0 disusul dengan SETB EA.
Tabel 7. Bit-bit pada Register IE
MSB LSB
IE.6 - -
IE.5 - -
D. Vektor Interupsi
81
merupakan nomor awal dari memori-program yang menampung ISR
untuk melayani permintaan interupsi tersebut. Vektor interupsi itu
dipakai untuk melaksanakan inststuksi LCALL yang diaktifkan melalui
perangkat keras.
Vektor interupsi untuk interupsi eksternal INT0 adalah 0003h,
untuk interupsi timer 0 adalah 000Bh, untuk interupsi ekternal
INT1 adalah 0013h, untuk 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.
Tabel 8. Interupt Vector Address
IE0 0003H
TF0 000BH
IE1 0013H
TF1 001BH
RI + TI 0023H
E. Tingkatan Prioritas
MSB LSB
83
Note:
IP.7 - -
IP.6 - -
IP.5 - -
84
Tabel 7 menggambarkan sistem interupsi MCS-51 selengkapnya
berikut dengan masing-masing bit dalam register-register SFR
(Special Function Register) yang dipakai untuk mengatur masing-
masing sumber interupsi.
Saklar yang digambarkan dalam Gambar 18 mewakili bit dalam
register yang harus diatur untuk mengendalikan sumber interupsi,
kotak bergambar bendera kecil merupakan flag (penanda) dalam
register yang mencatat adanya permintaan interupsi dari masing-
masing sumber interupsi. Kedudukan saklar dalam gambar tersebut
menggambarkan kedudukan awal setelah MCS-51 di-reset.
Gambar ini sangat membantu saat penulisan program menyangkut
interupsi MCS-51.
G. SOAL-SOAL LATIHAN
1. Jelaskan fungsi dari sistem interupsi pada mikrokontroler.
2. Sebutkan sumber-sumber interupsi pada mikrokontroler MCS-51
3. Tentukan vektor interupsi yang digunakan oleh eksternal interupsi 0
4. Tentukan vektor interupsi yang digunakan oleh eksternal interupsi 1
5. Tentukan vektor interupsi yang digunakan oleh timer 0
6. Tentukan vektor interupsi yang digunakan oleh timer 1
7. Jelaskan kondisi mikrokontroler bila mendapatkan sinyal reset
8. Jelaskan bagaimana mengaktifkan interupsi pada timer 0
9. Jelaskan bagaimana mengaktifkan interupsi pada timer 1
10.Jelaskan bagaimana menentukan prioritas pada sistem interupsi
H. KESIMPULAN
85
MCS-51 mempunyai 5 buah sumber interupsi. Dua buah interupsi
eksternal (IE0 dan IE1), dua buah interupsi timer (TF0 dan TF1) dan
sebuah interupsi port serial.
Saat pin RESET pada IC mikroprosesor/mikrokontroler menerima
sinyal reset (pada MCS-51 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 instruksi pertama program yang harus dijalankan.
Kinerja dari perangkat keras yang digunakan untuk mengatur kerja
dari perangkat lunak, tidak hanya terjadi pada proses reset, tapi
terjadi pula dalam proses interupsi.
Dalam proses interupsi, terjadinya sesuatu pada perangkat keras
tertentu dicatat dalam flip-flop khusus, flip-flop tersebut sering disebut
sebagai ‘penanda’ (flag), catatan dalam penanda 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.
PORT SERIAL
86
I. Tujuan Khusus Pembelajaran:
Setelah mempelajari topik ini, pembelajar diharapkan mampu:
A. Port Serial
87
Gambar 19. Komunikasi serial dengan komputer
Port seri MCS-51 bisa dipakai dalam 4 mode kerja yang berbeda. Dari
4 mode tersebut, 1 mode diantaranya bekerja secara sinkron dan 3
lainnya bekerja secara asinkron. Secara ringkas ke-empat mode kerja
tersebut bisa dibedakan sebagai berikut:
1. Mode 0
Mode ini bekerja secara sinkron, data seri dikirim dan diterima melalui
kaki P3.0 (RxD), dan kaki P3.1 (TxD) dipakai untuk menyalurkan clock
pendorong data seri yang dibangkitkan MCS-51.
88
2. Mode 1
3. Mode 2
89
Pada mode asinkron (Mode 1, Mode 2 dan Mode 3), port seri MCS-51
bekerja secara full duplex, artinya pada saat yang sama port seri ini
bisa mengirim data sekaligus menerima data.
90
ganda, data yang disimpan pada SBUF akan dikirim keluar MCS-51
lewat port seri, sedangkan data dari luar MCS-51 yang diterima port
seri diambil dari SBUF pula. Jadi meskipun hanya menempati satu
nomor memori-data internal (nomor $99), sesungguhnya SBUF terdiri
dari 2 register yang berbeda.
1. Bit SM0 dan bit SM1 (bit 7 dan bit 6 pada register SMOD) dipakai
untuk menentukan mode kerja port seri. Setelah reset kedua bit
ini bernilai ‘0’
3. Pada mode kerja 2 dan mode kerja 3, port seri bekerja dengan 9
bit data, SBUF yang kapasitasnya 8 bit tidak cukup untuk
keperluan ini. Bit ke-sembilan yang akan dikirim terlebih dulu
diletakkan di TB8 (bit 3), sedangkan bit RB8 (bit 2) merupakan
bit yang dipakai untuk menampung bit ke-sembilan yang
diterima port seri.
4. Pada mode kerja 1, RB8 dipakai untuk menampung bit stop yang
diterima, dengan demikian apa bila RB8 bernilai ‘1’ maka data
diterima dengan benar, sebaliknya apa bila RB8=’0’ berarti
terjadi kesalahan kerangka (framing error).
Kalau bit SM2 (bit 5) bernilai ‘1’, jika terjadi kesalahan kerangka,
RI tidak akan menjadi ‘1’ meskipun SBUF sudah berisi data dari
port seri.
Bit ke 9 ini bisa dipakai sebagai bit pariti, hanya saja bit pariti
yang dikirim harus ditentukan sendiri dengan program dan
diletakkan pada TB8, dan bit pariti yang diterima pada RB8
dipakai untuk menentukan integritas data secara program pula.
Tidak seperti dalam UART standard, semuanya itu dikerjakan
oleh perangkat keras dalam IC UART.
92
dipakai untuk memantau keadaan SBUF dalam pengiriman data
berikutnya.
Sub-rutin SerialOut berikut dipakai untuk mengirim data seri,
bisa dipakai untuk semua mode port seri. Baris 02 menunggu TI
menjadi ‘1’, dimaksud untuk memastikan pengiriman data
sebelumnya sudah selesai. Data yang akan dikirim sebelumnya
sudah disimpan di A, pada baris 03 data tersebut dikirim melalui
port seri dengan cara meletakannya di SBUF. Agar TI bisa
dipakai untuk memantau keadaan SBUF pada pengiriman data
berikutnya, pada baris 04 TI di-nol-kan.
01: SerialOut:
05: RET
93
01: SerialIn:
05: RET
Dalam dunia digital, dikenal 3 macam teknik transmisi data seri secara
sinkron untuk keperluan di atas, yang paling terkenal adalah teknik
ciptaan Philips yang dinamakan sebagai I2C (Inter IC Communication),
Motorola mengenalkan teknik yang dinamakan sebagai SPI (Serial
Peripheral Interface) dan National Semiconductor menciptakan
94
MicroWire.
Transmisi data seri yang dipakai pada mode 0, tidak sepadan dengan
3 teknik yang disebut di atas, tapi dengan perancangan yang cermat
mode 0 ini bisa dihubungkan ke SPI, sehingga bisa dipakai untuk
menghubungkan MCS-51 dengan mikrokontroler Motorola MC68HC11.
Sinyal data seri sinkron yang ada pada kaki P3.0 dan P3.1,
sesungguhnya murni merupakan sinyal yang biasa dipakai untuk
mengendalikan shift-register, dengan demikian dengan
menghubungkan shift register ke port seri, bisa menambah port input
maupun port output dengan mudah.
D. Baud Rate
Baud rate pada mode 0 adalah tertentu: pada mode 0, Baud Rate =
1/12 x Frekuensi Osilator. Baud rate pada mode 2 bergantung pada
nilai bit SMOD pada SFR PCON. Jika SMOD = 0, baud rate adalah 1/64
frekuensi osilator. Jika SMOD=1, baud rate adalah 1/32 frekuensi
osilator. Penentuan baud rate mode 2 adalah sebagai berikut:
Sedangkan baud rate pada mode 1 dan 3 ditentukan oleh nilai laju
overflow dari Timer 1.
95
Interupsi timer 1 harus disable pada aplikasi ini. Pada kebanyakan
aplikasi, timer ini dioperasikan sebagai timer, dengan mode auto
reload mode 2. Pada kasus ini baud rate diberikan dengan rumus
sebagai berikut:
E. SOAL-SOAL LATIHAN
F. KESIMPULAN
96
Terdapat 2 macam cara transmisi data secara seri. Kedua cara
tersebut dibedakan oleh sinyal denyut (clock) yang dipakai untuk
men-‘dorong’ data seri, kalau clock dikirim bersama dengan data seri,
cara tersebut dikatakan sebagai transmisi data seri secara sinkron.
Sedangkan dalam transmisi data seri secara asinkron, clock tidak
dikirim bersama data seri, rangkaian penerima data harus
membangkitkan sendiri clock pendorong data seri.
Port seri MCS-51 bisa dipakai dalam 4 mode kerja yang berbeda, yaitu
mode 0, mode 1, mode 2 dan mode 3. Dari 4 mode tersebut, 1 mode
diantaranya bekerja secara sinkron dan 3 lainnya bekerja secara
asinkron.
PEMROGRAMAN MIKROKONTROLER
97
I. Tujuan Khusus Pembelajaran:
Setelah mempelajari topik ini, pembelajar diharapkan mampu:
98
1. Ketika di-compile lebih kecil ukuran
2. Lebih efisien/hemat memori
99
Program-sumber assembly (assembly source program) merupakan
kumpulan dari baris-baris perintah yang ditulis dengan program
penyunting-teks (text editor) sederhana, misalnya program EDIT.COM
dalam DOS, atau program NOTEPAD dalam Windows atau MIDE-51.
Kumpulan baris-printah tersebut biasanya disimpan ke dalam file
dengan nama ekstensi *.ASM dan lain sebagainya, tergantung pada
program Assembler yang akan dipakai untuk mengolah program-
sumber assembly tersebut.
C. Bagian label
100
Dalam sebuah program sumber bisa terdapat banyak sekali label, tapi
tidak boleh ada label yang kembar.
Sering sebuah baris-perintah hanya terdiri dari bagian label saja, baris
demikian itu memang tidak bisa dikatakan sebagai baris-perintah yang
sesungguhnya, tapi hanya sekedar memberi nama pada baris
bersangkutan.
Bagian label sering disebut juga sebagai bagian symbol, hal ini terjadi
kalau label tersebut tidak dipakai untuk menandai bagian program,
melainkan dipakai untuk menandai bagian data.
101
kode-operasi kode-biner, yang dikenali oleh
mikroprosesor/mikrokontroler.
E. Bagian operand
F. Bagian komentar
Mov P0,A
Kiri: Call Delay ; Copy A ke P0
RL A ; Panggil Delay
DEC R0
CJNE R0,#0,Kiri
Sjmp Start
mov R1,#255
Delay: mov R2,#255
Del1: djnz R2,del2
Del2: djnz R1, del1
ret
end
RL A ;1 buah operand
104
ekstension HEX dengan menggunakan compiler MIDE-51, yang
dijelaskan sebagai berikut:
G. Assembly Listing
105
Line Addr Code Source
1: Org 0H
2: 0000 74 FE Start: Mov A,#11111110b
3: 0002 78 07 Mov R0,#7
4: 0004 F5 80 Kiri: Mov P0,A
5: 0006 12 00 1C Call Delay
6: 0009 23 RL A
7: 000A 18 DEC R0
8: 000B B8 00 F6 CJNE R0,#0,Kiri
9: 000E 78 07 Mov R0,#7
10: 0010 F5 80 Kanan: Mov P0,A
11: 0012 12 00 1C Call Delay
12: 0015 03 RR A
13: 0016 18 DEC R0
14: 0017 B8 00 F6 CJNE R0,#0,Kanan
15: 001A 80 E4 Sjmp Start
16: ;
17: 001C 79 FF Delay: mov R1,#255
18: 001E 7A FF Del1: mov R2,#255
19: 0020 DA FE Del2: djnz R2,del2
20: 0022 D9 FA djnz R1,del1
21: 0024 22 ret
22: end
H. Assembly Directive
106
Dalam program bahasa assembly terdapat 2 jenis yang kita tulis
dalam program yaitu:
107
1. Pengarah ORG (Origin) dan END (END)
Perlu dicatat bahwa perintah pseudo ORG dan END; keduanya adalah
pengarah untuk assembler MCS-51. Pengarah ORG digunakan untuk
menunjukkan alamat permulaan dari program sumber. ORG 0100H
memberitahu assembler bahwa program sumber dimulai pada alamat
0100H dalam memori program. Alamat dapat juga berupa decimal.
Sebagai contoh, ORG 0250 akan memberitahu assembler bahwa
brogram yang akan di-assemble dimulai pada 250D. Secara serupa,
pengarah END menunjukkan akhir dari file program sumber. Ini adalah
baris terakhir dalam program sumber dan assembler akan
membiarkan kode sumber apapun setelah pengarah END. Beberapa
assembler menggunakan sebuah titik “.ORG” dan “.END” daripada
ORG dan END. (Perhatikan apa yang didukung oleh assembler anda).
108
2. Pengarah DB (Define Byte) dan EQU (Equate)
109
seperti di gambar di bawah, dan kemudian dapat dikopikan ke register
B dimanapun di dalam program.
I. PENGGUNAAN SOFTWARE
110
J. SOAL-SOAL LATIHAN
1. Jelaskan apa yang anda ketahui tentang bahasa assembly
mikrokontroler?
2. Apa saja yang harus anda perhatikan dalam penyusunan program
menggunakan bahasa assembly?
3. Jelaskan apa yang disebut dengan mnemonics
4. Jelaskan fungsi label pada program assembly
5. Jelaskan fungsi op code (kode operasi) dalam program assembly
6. Jelaskan fungsi operand dalam program assembly
7. Jelaskan fungsi komentar dalam program assembly
8. Jelaskan apa yang disebut dengan assembler directive
9.Sebutkan urutan langkah-langkah dalam pemrograman
mikrokontroler
10.Sebutkan minimal 3 (tiga) software yang berfungsi untuk
memprogram mikrokontroler AT89S51
K. KESIMPULAN
Bahasa Assembly adalah bahasa pemrograman tingkat rendah. Dalam
pemrograman komputer dikenal dua jenis tingkatan bahasa, jenis yang
pertama adalah bahasa pemrograman tingkat tinggi (high level
language) dan jenis yang kedua adalah bahasa pemrograman tingkat
rendah (low level language).
111
agar komputer dapat langsung mengintepretasikan pernyataan-
pernyataan program.
112
sebagai label atau sering juga disebut sebagai symbol, bagian kedua
dikenali sebagai kode operasi, bagian ketiga adalah operand dan
bagian terakhir adalah komentar.
113
REFERENSI
http://www.atmel-grenoble.com/dyn/resources/prod_documents.pdf
http://www.mytutorialcafe.com/mikrokontroller.htm
114
A. LEMBAR PRAKTEK
MIKROKONTROLER MCS-51
115
PERCOBAAN 1
DISPLAY LED
TUJUAN:
LANGKAH KERJA
116
Gambar 1. Rangkaian Display LED
Pada percobaan 1.1 ini LED akan dihidupkan atau dimatikan dengan
mengirimkan data tertentu pada port 0.
Untuk melakukan percobaan ini lakukan beberapa langkah sebagai
berikut:
1. Hubungkan pesawat latih Microcontroller ke sumber listrik jala-jala
220VAC.
2. Hubungkan pesawat latih Mikrokontroler dengan komputer (PC)
melalui soket USB yang terpasang.
3. Buka software editor (Notepad).
117
4. Ketik program berikut ini:
$mod51
Data
No.
1 00000001
2 00000010
3 00000100
4 00001000
5 00010000
6 00100000
7 01000000
118
8 10000000
$mod51
ORG 0h
START: MOV P0,#11111111b; Kirim data biner 11111111 ke PORT 0
CALL DELAY ; Memanggil waktu tunda
MOV P0,#00000000b; Kirim data biner 00000000 ke PORT 0
CALL DELAY ; Memanggil waktu tunda
SJMP START
119
7. Lakukan pemrograman mikrokontroller menggunakan PROGISP
Software.
8. Lakukan pengamatan pada LED.
9. Gantilah data tersebut untuk mengedipkan lampu-lampu LED secara
bervariasi, simpan program dengan nama prog1aa.asm
Pada percobaan ini, sebuah LED atau lebih dapat dihidupkan atau
dimatikan dengan perintah setb dan clr.
Untuk melakukan percobaan ini lakukan beberapa langkah sebagai
berikut:
1. Hubungkan pesawat latih Microcontroler ke sumber listrik jala-jala
220VAC.
2. Hubungkan pesawat latih Mikrokontroler dengan komputer (PC)
melalui soket USB.
3. Buka software editor (Notepad).
4. Ketik program berikut ini:
$mod51
ORG 0h
START: SETB P0.0 ; Mengirimkan logika ‘1’ ke P0.0
SJMP START ; jump ke label START
END
120
8. Lakukan pengamatan pada LED.
9. Gantilah data tersebut untuk menghidupkan LED yang lain: LED 2,
LED 3, LED 4, LED 5, LED 6, LED 7 dan LED 8.
10. Lakukan percobaan berikut untuk mengedipkan LED 1, dengan
menuliskan program seperti berikut:
$mod51
ORG 0h
START: CLR P0.0 ; Kirim logika ‘0’ ke P0.0
CLR P0.1 ; Kirim logika ‘0’ ke P0.1
CLR P0.2 ; Kirim logika ‘0’ ke P0.2
CLR P0.3 ; Kirim logika ‘0’ ke P0.3
CLR P0.4 ; Kirim logika ‘0’ ke P0.4
CLR P0.5 ; Kirim logika ‘0’ ke P0.5
CLR P0.6 ; Kirim logika ‘0’ ke P0.6
CLR P0.7 ; Kirim logika ‘0’ ke P0.7
CALL DELAY ; Memanggil waktu tunda
SETB P0.0 ; Kirim logika ‘1’ ke P0.0
SETB P0.1 ; Kirim logika ‘1’ ke P0.1
SETB P0.2 ; Kirim logika ‘1’ ke P0.2
SETB P0.3 ; Kirim logika ‘1’ ke P0.3
SETB P0.4 ; Kirim logika ‘1’ ke P0.4
SETB P0.5 ; Kirim logika ‘1’ ke P0.5
SETB P0.6 ; Kirim logika ‘1’ ke P0.6
SETB P0.7 ; Kirim logika ‘1’ ke P0.7
SJMP START ; lompat ke label START
11. Tulis sebuah program untuk mengedipkan dua buah LED, tiga
buah LED dan seterusnya menggunakan instruksi Setb dan Clr,
simpan program dengan nama prog1bb.asm
$mod51
ORG 0H
122
6. Gunakan compiler asm51 untuk melakukan kompilasi program dari
*.asm ke *.hex.
7. Lakukan pemrograman mikrokontroler menggunakan PROGISP
Software.
8. Lakukan pengamatan pada LED
9. Lakukan perubahan pada program tersebut untuk menjalankan dua
buah LED kekiri dan kekanan, tiga buah LED kekiri dan kekanan ,
dan seterusnya, simpan program dengan nama prog1cc.asm
PERCOBAAN 2
SAKLAR PUSH BUTTON
TUJUAN:
LANGKAH KERJA
123
Dengan berpedoman pada gambar 2, lakukan percobaan sesuai
dengan langkah-langkah yang telah ditentukan.
Pada percobaan ini, LED akan nyala bila saklar ditekan sesuai dengan
bit tersebut.
Untuk melakukan percobaan ini lakukan beberapa langkah sebagai
berikut:
124
1. Hubungkan pesawat latih Mikrokontroler ke sumber listrik jala-jala
220VAC.
2. Hubungkan pesawat latih Mikrokontroler dengan komputer (PC)
melalui soket USB yang terpasang.
3. Hubungkan konektor dari 8-bit INPUT BUTTON ke PORT 2
4. Buka software editor (Notepad).
5. Ketik program berikut ini:
$mod51
ORG 0h
START: MOV A, P2 ;Ambil data dari P2 dan Simpan ke A
CPL A ;Komplemen/ Invert terhadap A
MOV P0, A ;Kirim data A ke P0
SJMP START
END
Saklar
Kondisi LED yang Nyala (L1-L2-L3-L4-L5-L6-L7-L8)
(ON)
S0
S1
S2
S3
S4
125
S5
S6
S7
Pada percobaan ini, LED akan berjalan kekanan atau kekiri mengikuti
penekanan tombol P2.0 atau P2.1.
Untuk melakukan percobaan ini lakukan beberapa langkah sebagai
berikut:
$mod51
ORG 0h
CekP20: JB P2.0, CekP21 ; Menguji bit P2.0, apakah berlogika '1'
CALLl RLeft ; Jika P2.0=0, maka LED putar kiri
CekP21: JB P2.1,CekP20 ; Menguji bit P2.1, apakah berlogika '1'
CALL RRight ; Jika P2.1=0, maka LED putar kanan
SJMP CekP20 ; jump forever to CekP2.0
;========================================
;Subrutin ini digunakan untuk menggerakkan LED Ke Kanan
;========================================
RLeft: MOV A,#00000001b; send data to Acc
RLeft1: MOV P0,A ; send data to P0
CALL DELAY ; call delay time
JB P2.1,RLeft2 ; Menguji bit P2.1, apakah berlogika '1'
SJMP EndRLeft ;J Jika P2.1=0, maka lompat ke EndRLeft
RLeft2: RL A
SJMP RLeft1
126
EndRLeft: RET
;
;======================================
;Subrutin ini digunakan untuk menggerakkan LED Ke Kiri
;======================================
RRight: MOV A,#10000000b; send data to Acc
RRight1: MOV P0,A ; send data to P0
CALL DELAY ; call delay time
JB P2.0,RRight2 ; Menguji bit P2.0, apakah berlogika '1'
SJMP EndRRight ; Jika P2.0=0, maka lompat ke EndRRight
RRight2: RR A
SJMP RRight1
EndRRight: RET
;=======================================
;subroutine delay time
;=======================================
DELAY: MOV R1,#255
DEL1: MOV R2,#255
DEL2: DJNZ R2,DEL2
DJNZ R1,DEL1
RET
END
127
Percobaan 2.3. Setting Up/Down dan Enter
dengan display LED
Pada percobaan ini, LED yang NYALA akan bertambah atau berkurang
mengikuti penekanan tombol P2.1 (UP) atau P2.2 (Down). LED akan
berhenti bertambah atau atau berkurang bila ditekan tombol P2.0
( ENTER).
Untuk melakukan percobaan ini lakukan beberapa langkah sebagai
berikut:
$mod51
ORG 0h
start:
mov R7,#1 ; inisialisasi data setting
Setup: mov A,R7 ; simpan data R7 ke A
cpl A ; komplemen A,
mov P0,A ; output data ke LED
jnb p2.0,getout; bilasw1(P2.0) ditekan maka getout
(selesai)
jb P2.1,SetDn ; bila sw2(P2.1) ditekan maka INC R7
inc R7 ;R7:=R7+1
acall delay ; waktu tunda, antar penekanan tombol
cjne R7,#100d,setup; deteksi apakah setting=100d
mov R7,#1 ; reset R7 -> 1
128
sjmp Setup
;
SetDn: mov A,R7 ; simpan data R7 ke A
cpl A ; komplemen A,
mov P0,A ; output data ke LED
jnb P2.0,getout; bila sw1(P2.0) ditekan maka getout
jb p2.2,Setup ; bila sw2(P2.1) ditekan maka INC R7
dec R7 ;R7:=R7-1
acall delay ; waktu tunda lama penekanan tombol
cjne R7,#0d,setDn; deteksi apakah setting=0d
mov R7,#1d ; reset R7 -> 1
sjmp Setdn
getout:
sjmp getout
;
delay: mov R0,#255
delay1: mov R2,#255
djnz R2,$
djnz R0,delay1
ret
end
129
PERCOBAAN 3
DISPLAY 7 SEGMEN
TUJUAN:
LANGKAH KERJA
130
bahwa P2.0 s/d P2.6 terhubung ke segmen-segmen display 7
segmen dan P0.0 s/d P0.5 terhubung ke common-common pada
display 7 segmen. Display 7 segmen yang digunakan adalah jenis
common cathode. Semua anoda dari segmen yang sejenis
dihubungkan secara paralel.
Tabel data untuk menampilkan karakter bilangan desimall
ditunjukkan pada tabel berikut:
$mod51
ORG 0H
START: MOV P1,#01H; Aktifkan digit paling kanan
MOV P2,#0C0H; tampilkan karakter ”0”
CALL DELAY; panggil program delay
MOV P2,#0F9H; tampilkan karakter ”1”
131
CALL DELAY
MOV P2,0A4H; tampilkan karakter ”2”
CALL DELAY
MOV P2,0B0H; tampilkan karakter ”3”
CALL DELAY
MOV P2,#99H; tampilkan karakter ”4”
CALL DELAY
MOV P2,92H; tampilkan karakter ”5”
CALL DELAY
MOV P2,#82H; tampilkan karakter ”6”
CALL DELAY
MOV P2,#0F8H; tampilkan karakter ”7”
CALL DELAY
MOV P2,#80H; tampilkan karakter ”8”
CALL DELAY
MOV P2,#90; tampilkan karakter ”9”
CALL DELAY
SJMP START; ulangi proses dari awal
132
7. Gunakan compiler asm51 untuk melakukan kompilasi program dari
*.asm ke *.hex.
8. Lakukan pemrograman mikrokontroller menggunakan PROGISP
Software.
9. Lakukan pengamatan pada display 7 segmen digit paling kanan.
10. Ganti-ganti program tersebut untuk menyalakan display 7 segmen
yang lain.
11. Sekarang tulis program berikut menggunakan editor notepad.
$mod51
ORG 0H
START: MOV R3,#0AH; data pembatas
MOV P1,#01H; aktifkan digit paling kanan
MOV DPTR,#KARAKTER; simpan data karakter ke DPTR
LOOP2: MOVC A,@A+DPTR; ambil data ke Accumulator
MOV P2,A; keluarkan ke port 2
CALL DELAY; panggil program delay
INC DPTR; siapkan karakter berikutnya
DJNZ R3, LOOP2
SJMP START
12. Simpanlah program yang anda ketik dan beri nama : prog3a.asm
13. Gunakan compiler asm51 untuk melakukan kompilasi program dari
*.asm ke *.hex.
14. Lakukan pemrograman mikrokontroller menggunakan PROGISP
Software.
15. Lakukan pengamatan pada display 7 segmen digit paling kanan.
133
16. Ganti data untuk menampilkan karakter a, b, c, d, E, F, g, H, I,L
17. Simpan program anda dan beri nama dengan prog3b.asm.
MOV A,R4
RL A
MOV P0,A
MOV R4,A
DJNZ R3,LOOP3
SJMP START
KARAKTER:
DB 11000000B,11111001B,10100100B
134
DB 10110000B,10011001B,10010010B
END
135
PERCOBAAN 4
STEPPER MOTOR
TUJUAN:
DASAR TEORI
136
Motor stepper banyak digunakan untuk aplikasi-aplikasi yang biasanya cukup
menggunakan torsi yang kecil, seperti untuk penggerak piringan disket atau
piringan CD. Dalam hal kecepatan, motor stepper cukup cepat jika
dibandingkan dengan motor DC. Motor stepper merupakan motor DC yang
tidak memiliki komutator. Pada umumnya motor stepper hanya mempunyai
kumparan pada statornya, sedangkan pada bagian rotornya merupakan
magnet permanen. Dengan model motor seperti ini, motor stepper dapat
diatur posisinya pada posisi tertentu dan atau berputar pada arah yang
diinginkan, searah jarum jam (clock wise ) atau sebaliknya (counter clock
wise).
137
Berdasarkan jenisnya, motor stepper dibedakan dalam dua jenis yaitu
unipolar stepper motor dan bipolar stepper motor.
Motor stepper dengan tipe unipolar merupakan motor stepper yang memiliki
2 buah lilitan yang masing-masing lilitan di tengah-tengahnya diberikan
sebuah tap. Prinsip dasar dari motor jenis ini ditunjukkan pada gambar 1.
Motor ini mempunyai step sebesar 90 derajat dan mempunyai dua buah
lilitan yang didistribusikan berseberangan 180 derajat di antara kutub pada
stator. Sedangkan pada rotornya menggunakan satu pasang magnet
permanen.
Dengan menghubungkan center tap lilitan pada power supply positip dan
salah satu ujung lilitan dihubungkan ke ground secara bergantian namun
berurutan, maka rotor akan tertarik ke arah lilitan stator yang dialiri aruis
litrik (ingat bahwa lilitan kawat yang dialiri arus listrik akan menimbulkan
medan magnet. Pada gambar 1 merupakan konsep dasar sebuah motor
stepper yang memiliki sudut tiap-tiap step (langkah) atau juga sering disebut
138
dengan step size adalah sebesar 90 derajat. Prinsip kerja secara mendasar
untuk arah putaran searah jarum jam (CW) berdasarkan diagram pada
gambar 1 adalah sebagai berikut: ketika lilitan stator 1a dialiri arus listrik,
maka pada gigi stator 1a akan ditimbulkan medan magnet. Dengan demikian
kutub magnet pada rotor akan tertarik ke arah stator 1a. Urutan pemberian
arus listrik pada lilitan stator selanjutnya adalah pada gigi stator 2a, 1b an
2b. Proses tersebut akan menghasilkan satu putaran. Agar motor stepper
dapat berputar secara terus menerus maka proses pemberian arus listrik
pada lilitan stator juga harus dilakukan secara terus menerus.
Berdasarkan prinsip kerja seperti telah dijelaskan di atas, jelas bahwa motor
stepper bergerak satu langkah (step) pada tiap waktu. Besarnya sudut
langkah (step angle) ditentukan oleh konstruksi ari motor yang meliputi :
jumlah kumparan (lilitan) jumlah kutub dan jumlah gigi pada stator maupun
rotor. Besarnya sudut langkah mulai dari 90 0 hingga 0,750 atau identik
dengan 4 hingga 500 langkah pada tiap putaran. Dengan menggunakan
rangkaian pengendali elektronik dapat dibuat sudut langkah menjadi
setengah langkah sehingga rotor akan bergerak setengah langkah pada tiap
langkahnya. Besarnya sudut langkah untuk motor stepper jenis universal
ditentukan oleh persamaan-persamaan berikut:
QS = 3600/NS
QR = 3600/NR
QST = QR – QS
Dimana :
139
Gambar 2. Motor Stepper dengan step angle 15 derajat
1. Single Stepping
Operasi Single Stepping juga sering disebut sebagai mode Full Step, dimana
pada operasi ini besar sudut langkah (step angle) yang dihasilkan oleh rotor
sesuai dengan spesifikasi dari motor tersebut, misal 3,75 0 , 90 , 150 dan lain-
lain. Pada mode ini hanya satu bagian lilitan stator yang diberi arus listrik
pada setiap waktu sehingga eksitasi pada tiap-tiap lilitan stator dapat di buat
seperti ditunjukkan pada Tabel 1.
140
Tabel 1. Operasi pada Full-Step
Dengan menggunakan diagram pulsa, eksitasi pada lilitan stator untuk mode
Full Step, ditunjukkan oleh gambar 3.
141
2. Half Stepping
Pada operasi ini gerakan rotor pada tiap langkah menghasilkan sudut
langkah setengah dari operasi Full Stepping, yaitu dengan cara memberi
eksitasi pada dua lilitan yang berurutan secara bersama-sama, kemudian
dilanjutkan dengan pemberian eksitasi pada lilitan yang kedua, demikian
seterusnya secara bergantian seperti ditunjukkan pada Tabel 2.
Adapun diagram pulsa untuk mode Half Stepping ditunjukkan oleh Gambar 4.
142
Gambar 4. Diagram pulsa pada Half Stepping Mode
Pada mode ini rotor akan bergerak seperti pada operasi Full Stepping, namun
menghasilkan torsi yang tinggi karena magnet pada rotor akan ditarik oleh
dua buah magnet yang dihasilkan oleh dua kumparan stator yang berurutan
dan diberi arus listrik secara bersama-sama seperti terlihat pada Tabel 3.
143
Diagram pulsa untuk mode High Torque Stepping Mode ditunjukkan oleh
Gambar 5.
o ff o ff o ff on
o ff o ff on o ff
o ff on o ff o ff
on o ff o ff o ff
144
Tabel 5. Half Stepping Mode untuk putaran reverse.
on o ff o ff on
o ff o ff on on
o ff on on o ff
on on o ff o ff
145
A3. Pengaturan Kecepatan Unipolar Stepper Motor
Pada Gambar 6 terlihat bahwa waktu (t) yang digunakan untuk memberikan
eksitasi pada tiap-tiap lilitan stator sebesar 1 second (detik), hal ini berarti
bahwa gerakan yang dihasilkan oleh rotor tiap step (langkah) adalah 1 detik.
Agar rotor dapat berputar lebih cepat maka besarnya t harus diperkecil,
demikian sebaliknya bila ingin rotor bergerak lebih lambat maka besarnya t
harus diperbesar.
Contoh bentuk fisik dari Unipolar Stepping Motor ditunjukkan oleh gambar 7a
dan 7b.
146
Gambar 7a Gambar 7b
Bipolar Stepper Motor hampir sama atau mirip dengan Unipolar Stepper
Motor, namun pada motor stepper jenis bipolar tidak menggunakan
sambungan center tap. Oleh karena itu Motor stepper jenis ini memerlukan
jenis rangkaian kontrol yang berbeda. Prinsip dasar dari motor stepper
bipolar ditunjukkan oleh gambar 5.
Pada gambar 5 ditunjukkan sebuah Bipolar Stepper Motor yang terdiri dari 2
lilitan. Kedua lilitan memiliki spesifikasi yang sama (identik) dan tidak
terhubung ke sumber daya. Model motor stepper bipolar secara konseptual
dapat dilihat pada gambar 9.
147
Gambar 9. Bipolar Stepper Motor
Prinsip kerja dari motor srepper jenis bipolar dapat dijelaskan sebagai
berikut: semua lilitan diaktifkan sesuai dengan urutannya untuk
menggerakkan rotor yang digambarkan sebagai anak panah pada gambar 6.
Pada diagram konseptual ditunjukkan bahwa motor stepper memiliki 90
derajat step per phasa. Kita asumsikan bahwa terminal 1a dihubungkan ke
sumber daya polaritas positip dan 1b ke negatip, maka rotor akan bergerak
ke arah lilitan 1a. Bila polaritas lilitan 1 dibalik (1a terhubung ke negatip dan
1b ke positip) maka rotor akan bergerak ke arah sebaliknya (lilitan 1b).
Dalam konsep urutan ”wave drive” searah putaran jarum jam (CW), lilitan 1
di-non aktifkan dan lilitan 2 dieksitasi untuk mengaktifkan phasa berikutnya.
Rotor akan dibawa atau digerakkan kearah lilitan yang dieksitasi sehingga
akan menghasilkan putaran yang kontinyu. Bila dua lilitan yang berurutan
dieksitasi secara bersama-sama maka rotor akan bergerak ke arah atau
posisi diantara kedua lilitan tersebut.
148
tiap-tiap lilitan. Perhatikan bahwa urutan pemberian eksitasi pada motor
stepper jenis ini identik dengan urutan pemberian eksitasi pada motor
stepper unipolar.
Polaritas
4 + - - -
4 + - - +
5 - + - -
6 + + - -
7 + - - -
8 + - - +
149
Contoh bentuk fisik dari motor stepper jenis bipolar ditunjukkan pada
gambar 10a dan 10b.
1. Cruise control
2. Auto air vents
3. Light leveling
4. Printer
5. Industrial machines
6. Automotive gauges
7. Office equipment
8. Computer drives
9. Medical scanners
10.Scientific Instrumentation
150
ALAT DAN BAHAN
1. Pesawat Latih Mikrokontroler
2. Jumper secukupnya.
3. Unipolar Stepper Motor
LANGKAH KERJA
151
4. Buka software editor (Notepad).
5. Ketik program berikut ini:
$mod51
Org 0h
152
B. Operasi Half Step
$mod51
Org 0h
153
8. Catat arah gerakan motor stepper.
Arah gerakan motor ................................................................
9. Atur kecepatan stepper motor dengan cara mengganti-ganti nilai
pada register pada sub rutin program delay.
10. Buat program untuk membalik arah putaran stepper motor.
11. Simpan program anda dan beri nama dengan half_step1.asm.
12. Lakukan kompilasi pada program anda kemudian jalankan.
13. Apakah program anda bekerja sesuai yang diharapkan?
14. Matikan sakelar power pada pesawat latih.
$mod51
Org 0h
154
2. Simpan program tersebut dengan nama half_step.asm
3. Lakukan kompilasi pada program tersebut.
4. Hidupkan sakelar power dan DC power pada pesawat latih.
5. Jalankan program tersebut menggunakan PROGISP software.
6. Amati gerakan pada motor stepper.
7. Catat arah gerakan motor stepper.
Arah gerakan motor ................................................................
8. Atur kecepatan stepper motor dengan cara mengganti-ganti nilai
pada register pada sub rutin program delay.
9. Buat program untuk membalik arah putaran stepper motor.
10. Simpan program anda dan beri nama dengan half_step1.asm.
11. Lakukan kompilasi pada program anda kemudian jalankan.
12. Apakah program anda bekerja sesuai yang diharapkan?
13. Matikan sakelar power pada pesawat latih.
155
PERCOBAAN 5
KEYPAD 4X3
TUJUAN:
Setelah meklakukan percobaan ini pembelajar diharapkan dapat:
1. Memahami rangkaian interface keypad 4x3 dengan mikrokontroler.
2. Memahami bahasa assembly untuk pengambilan data keypad.
3. Memahami bahasa assembly untuk pengambilan data dari keypad
dan mengeluarkannya ke LED.
PENDAHULUAN
Keypad sering digunakan sebagi suatu input pada beberapa peralatan
yang berbasis mikroprosessor atau mikrokontroller. Keypad
sesungguhnya terdiri dari sejumlah saklar, yang terhubung sebagai
baris dan kolom dengan susunan seperti yang ditunjukkan pada
gambar 1. Agar mikrokontroller dapat melakukan scan keypad, maka
port mengeluarkan salah satu bit dari 3 bit yang terhubung pada
kolom dengan logika low “0” dan selanjutnya membaca 4 bit pada
baris untuk menguji jika ada tombol yang ditekan pada kolom
tersebut. Sebagai konsekuensi, selama tidak ada tombol yang ditekan,
maka mikrokontroller akan melihat sebagai logika high “1” pada setiap
pin yang terhubung ke baris.
156
LANGKAH KERJA
157
2. Buat program untuk membaca data dari keypad selanjutnya
ditampilkan pada LED seperti berikut:
$mod51
158
keyRow2_C2:
jb row2,keyRow3_C2; bila baris2 kolom2 tidak ada tombol ditekan, scan
baris3 kolom2.
djnz keybounc,keyRow2; bila ada tombol ditekan, kerjakan anti bounching
mov keydata,#0F8h ; Siapkan data output 11111000B, F8H (tombol 7)
ret
;
keyRow3_C2:
jb row3,keyRow0_C1; bila baris3 kolom2 tidak ada tombol ditekan, scan
baris0 kolom1.
djnz keybounc,keyRow3_C2; bila ada tombol ditekan, kerjakan anti
bounching
mov keydata,#0F0h ; Siapkan data output 11110000B, F0H (tombol *)
ret
;==========================================
KeyRow0_C1:
setb col2; kolom2 diberi logic 1
clr col1; kolom2 diberi logic 0
jb row0,keyRow1_C1; bila baris0 kolom1 tidak ada tombol ditekan, scan
baris1 kolom1.
djnz keybounc,KeyRow0_C1; bila ada tombol ditekan, kerjakan anti
bounching
mov keydata,#0FDh ; Siapkan data output 11111101B, FDH (tombol 2)
ret
;
KeyRow1_C1:
jb row1,keyRow2_C1; bila baris1 kolom1 tidak ada tombol ditekan, scan
baris2 kolom1.
ret
;============================================
keyRow0_C0:
159
setb col1; kolom1 diberi logic 1
clr col0; kolom0 diberi logic 0
jb row1,keyRow2_C0; bila baris0 kolom0 tidak ada tombol ditekan, scan
baris1 kolom0.
djnz keybounc,KeyRow0_C0; bila ada tombol ditekan, kerjakan anti
bounching
mov keydata,#0FCh ; Siapkan data output 11111100B, FCH (tombol 3)
ret
;
KeyRow1_C0:
jb row1,keyRow2_C0; bila baris1 kolom0 tidak ada tombol ditekan, scan
baris2 kolom0.
djnz keybounc,keyRow1_C0; bila ada tombol ditekan, kerjakan anti
bounching
mov keydata,#0F9h ; Siapkan data output 11111001B, F9H (tombol 6)
ret
keyRow2_C0:
jb row2,keyRow3_C0; bila baris2 kolom0 tidak ada tombol ditekan, scan
baris3 kolom0.
djnz keybounc,keyRow2_C0; bila ada tombol ditekan, kerjakan anti
bounching
mov keydata,#0F6h ; Siapkan data output 11110110B, F6H (tombol 9)
ret
;
keyRow3_C0:
jb row3,No_key; bila baris3 kolom0 tidak ada tombol ditekan, kerjakan
No_key.
160
Tabel hasil pengamatan pada percobaan keypad.
161
PERCOBAAN 6
LCD KARAKTER
TUJUAN:
Setelah selesai melakukan percobaan ini pembelajar diharapkan
dapat:
1. Memahami rangkaian interface mikrokontroller dengan LCD
Karakter 2 x16
2. Memahami program assembly untuk menampilkan data ke LCD
Karakter 2 x 16
3. Memahami beberapa instruksi assembly dasar, MOV, Setb, Clr, dan
waktu tunda.
4. Menampilkan karakter pada posisi baris dan kolom tertentu.
162
Gambar 2. Rangkaian interface ke LCD Karakter 2 x16
Modul LCD Character dapat dengan mudah dihubungkan dengan
mikrokontroller seperti AT89S51. LCD yang akan kita praktikumkan ini
mempunyai lebar display 2 baris 16 kolom atau biasa disebut sebagai
LCD Character 2x16, dengan 16 pin konektor, yang didifinisikan
sebagai berikut:
163
Tabel 1.1 Pin dan Fungsi
2 VCC +5V
Register Select
4 RS 0 = Instruction Register
1 = Data Register
Enable
6 E 0 = start to lacht data to LCD character
1= disable
7 DB0 LSB
8 DB1 -
9 DB2 -
10 DB3 -
11 DB4 -
12 DB5 -
13 DB6 -
14 DB7 MSB
164
Display karakter pada LCD diatur oleh pin EN, RS dan RW:
Jalur EN dinamakan Enable. Jalur ini digunakan untuk memberitahu
LCD bahwa anda sedang mengirimkan sebuah data. Untuk
mengirimkan data ke LCD, maka melalui program EN harus dibuat
logika low “0” dan set pada dua jalur kontrol yang lain RS dan RW.
Ketika dua jalur yang lain telah siap, set EN dengan logika “1” dan
tunggu untuk sejumlah waktu tertentu ( sesuai dengan datasheet dari
LCD tersebut ) dan berikutnya set EN ke logika low “0” lagi.
Jalur RS adalah jalur Register Select. Ketika RS berlogika low “0”, data
akan dianggap sebagai sebuah perintah atau instruksi khusus ( seperti
clear screen, posisi kursor dll ). Ketika RS berlogika high “1”, data
yang dikirim adalah data text yang akan ditampilkan pada display
LCD. Sebagai contoh, untuk menampilkan huruf “T” pada layar LCD
maka RS harus diset logika high “1”.
Jalur RW adalah jalur kontrol Read/ Write. Ketika RW berlogika low
(0), maka informasi pada bus data akan dituliskan pada layar LCD.
Ketika RW berlogika high ”1”, maka program akan melakukan
pembacaan memori dari LCD. Sedangkan pada aplikasi umum pin RW
selalu diberi logika low ”0”.
Pada akhirnya, bus data terdiri dari 4 atau 8 jalur ( bergantung pada
mode operasi yang dipilih oleh user ). Pada kasus bus data 8 bit, jalur
diacukan sebagai DB0 s/d DB7.
Beberapa perintah dasar yang harus dipahami adalah inisialisasi LCD
Character,
Function Set
Mengatur interface lebar data, jumlah dari baris dan ukuran font karakter
165
0 0 0 0 1 DL N F X X
CATATAN:
X : Don’t care
DL: Mengatur lebar data
DL=1, Lebar data interface 8 bit ( DB7 s/d DB0)
DL=0, Lebar data interface 4 bit ( DB7 s/d DB4)
Ketika menggunakan lebar data 4 bit, data harus dikirimkan dua kali
0 0 0 0 0 0 0 1 I/D S
Catatan:
I/D: Increment/ decrement dari alamat DDRAM dengan 1 ketika kode
karakter dituliskan ke DDRAM.
I/D = “0”, decrement
I/D = “1”, increment
S: Geser keseluruhan display kekanan dan kekiri
S=1, geser kekiri atau kekanan bergantung pada I/D
S=0, display tidak bergeser.
0 0 0 0 0 0 1 D C B
166
D : Mengatur display
D = 1, Display is ON
D = 0, Display is OFF
Pada kasus ini data display masih tetap berada di DDRAM, dan dapat
ditampilkan kembali secara langsung dengan mengatur D=1.
C : Menampilkan kursor
C = 1, kursor ditampilkan
C = 0, kursor tidak ditampilkan
B : Karakter ditunjukkan dengan kursor yang berkedip
B=1, kursor blink
Clear Display
Perintah ini berfungsi untuk menghapus layar
0 0 0 0 0 0 0 0 0 1
0 0 0 0 0 0 S/C R/L X X
167
0 0 Shift cursor position to the left
POSISI KURSOR
Modul LCD terdiri dari sejumlah memory yang digunakan untuk
display. Semua teks yang kita tuliskan ke modul LCD adalah disimpan
didalam memory ini, dan modul LCD secara berturutan membaca
memory ini untuk menampilkan teks ke modul LCD itu sendiri.
INISIALISASI
Sebelum kita dapat menggunakan modul LCD, kita harus melakukan
inisialisasi dan mengkonfigurasikannya. Hal ini dijalankan dengan
mengirimkan sejumlah instruksi ke LCD. Antara lain: pengaturan lebar
data interface 8 bit atau 4 bit data bus, pemilihan ukuran font karakter
5x8 atau 5x7 dan lain-lain, dengan instruksi sebagai berikut.
Init_lcd:
mov r1,#00000001b ;Display clear
call write_inst ;EN=pulse dan RS=0
mov r1,#00111000b ;Function set, ;Data 8 bit,2 line font 5x7
call write_inst ;Set bit EN=pulse dan RS=0
mov r1,#00001100b ;Display on, ;cursor off,cursor blink off
call write_inst ;EN=pulse dan RS=0
mov r1,#00000110b ;Entry mode, Set increment
call write_inst
ret
169
Pada percobaan ini, karakter ‘A’ akan ditampilkan pada 7 Segmen
Display 1.
Untuk melakukan percobaan ini lakukan beberapa langkah sebagai
berikut:
1. Pasang jumper LCD_EN, yang berfungsi untuk memberikan power
supply +5V.
2. Hubungkan modul Microcontroller Trainer dengan power supply +5V
3. Hubungkan modul Microcontroller Trainer dengan rangkaian
programmer.
4. Buka Program M-IDE Studio for MCS-51, sebagai editor dan
compiler program.
5. Ketik program berikut ini:
$mod51
org 0h
call init_LCD
start: mov R1,#80h ; Lokasi Display RAM, Row=1 Col=1
call write_inst
mov R1,#'A' ; Cetak Karakter A
call write_data
stop: sjmp stop
Init_lcd:
mov r1,#00000001b ;Display clear
call write_inst
mov r1,#00111000b ;Function set,Data 8 bit,2 line font 5x7
call write_inst
mov r1,#00001100b ;Display on, ;cursor off,cursor blink off
call write_inst
mov r1,#00000110b ;Entry mode, Set increment
call write_inst
ret
;
Write_inst:
clr P3.0 ; P3.0 = RS =0
mov P2,R1 ; P2 = D7 s/d D0 = R1
setb P3.2 ; P3.2 =EN = 1
call delay ; call delay time
clr P3.2 ; P3.2 =EN = 0
ret
;
Write_data:
setb P3.0 ; P3.0 = RS =1
mov P2,R1 ; P2 = D7 s/d D0 = R1
170
setb P3.2 ; P3.2 =EN = 1
call delay ; call delay time
clr P3.2 ; P3.2 =EN = 0
ret
;
delay: mov R0,#0
delay1:mov R7,#0fh
djnz R7,$
djnz R0,delay1
ret
;
end
1 Row 1, Col 2
Z Row 1, Col 8
171
2. Hubungkan modul Microcontroler Trainer dengan power supply +5V.
3. Hubungkan modul Microcontroller Trainer dengan rangkaian
programmer.
4. Buka Program MIDE Studio for MCS-51, sebagai editor dan compiler
program.
5. Ketik program berikut ini:
$mod51
org 0h
call init_LCD
start: mov R1,#80h ; Lokasi Display RAM, Row=1 Col=1
call write_inst
mov R1,#'W'
call write_data
mov R1,#'e'
call write_data
mov R1,#'l'
call write_data
mov R1,#'c'
call write_data
mov R1,#'o'
call write_data
mov R1,#'m'
call write_data
mov R1,#'e'
call write_data
stop: sjmp stop
Init_lcd:
mov r1,#00000001b ;Display clear
call write_inst
mov r1,#00111000b ;Function set, Data 8 bit,2 line font 5x7
call write_inst
mov r1,#00001100b ;Display on, cursor off,cursor blink off
call write_inst
mov r1,#00000110b ;Entry mode, Set increment
call write_inst
ret
;
Write_inst:
clr P3.0 ; P3.0 = RS =0
mov P2,R1 ; P2 = D7 s/d D0 = R1
setb P3.2 ; P3.2 =EN = 1
call delay ; call delay time
clr P3.2 ; P3.2 =EN = 0
ret
172
;
Write_data:
setb P3.0 ; P3.0 = RS =1
mov P2,R1 ; P2 = D7 s/d D0 = R1
setb P3.2 ; P3.2 =EN = 1
call delay ; call delay time
clr p3.2 ; P3.2 =EN = 0
ret
;
delay: mov R0,#0
delay1:mov R7,#0fh
djnz R7,$
djnz R0,delay1
ret
;
end
7. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan
kompilasi program dari *.asm ke *.hex.
10.Lakukan modifikasi pada program tersebut untuk mencetak karakter lain, sesuai tabel:
173
1. Pasang jumper LCD_EN, yang berfungsi untuk memberikan power
supply +5V
2. Hubungkan modul Microcontroler Trainer dengan power supply +5V
3. Hubungkan modul Microcontroler Trainer dengan rangkaian
programmer
4. Buka Program M-IDE Studio for MCS-51, sebagai editor dan
compiler program
5. Ketik program berikut ini:
$mod51
org 0h
call init_LCD
start: call write_char
stop: sjmp stop
;
write_char:
mov dptr,#word1 ;DPTR = [ address word1 ]
mov r3,#16 ;R3=16,number character to be display
mov r1,#80h ;R1=80h,address DDRAM start position
call write_inst
;
write1:clr a ; A = 0
movc a,@a+dptr ; A = [A+ DPTR]
mov r1,A ; R1 = A
inc dptr ; DPTR = DPTR +1
call write_data;
djnz r3,write1 ; R3 = R3-1,
ret
;
Init_lcd:
mov r1,#00000001b ;Display clear
call write_inst ;
mov r1,#00111000b ;Function set, Data 8 bit,2 line font 5x7
call write_inst ;
mov r1,#00001100b ;Display on, cursor off,cursor blink off
call write_inst
mov r1,#00000110b ;Entry mode, Set increment
call write_inst
ret
;
Write_inst:
clr P3.6 ; P3.6 = RS =0
174
mov P0,R1 ; P0 = D7 s/d D0 = R1
setb P3.7 ; P3.7 =EN = 1
call delay ; call delay time
clr P3.7 ; P3.7 =EN = 0
ret
;
Write_data:
setb P3.6 ; P3.6 = RS =1
mov P0,R1 ; P0 = D7 s/d D0 = R1
setb P3.7 ; P3.7 =EN = 1
call delay ; call delay time
call delay ; call delay time
clr p3.7 ; P3.7 =EN = 0
ret
;
delay: mov R0,#0
delay1:mov R7,#0fh
djnz R7,$
djnz R0,delay1
ret
;
word1: DB ' Welcome Home '; Karakter yang disimpan di ROM
;
end
175
PERCOBAAN 7
ANALOG TO DIGITAL CONVERTER (ADC)
176
Dimana:
Vx = input tegangan analog
VR = tegangan referensi
b1 b2 . . . bn = output digital n-bit
Kita mempergunakan kesamaan pendekatan dalam persamaan ini
karena tegangan di sebelah kanan dapat berubah oleh ukuran step
yang terbatas oleh Persamaan berikut:
–n
ΔV = VR 2
Hal ini berarti bahwa ada ketidak pastian dari ΔV di dalam melakukan
konversi dari tegangan analog ke sinyal digital. Ketidak pastian ini
harus diambil ke dalam perhitungan di dalam aplikasi desain. Jika
permasalahan sesuai dengan pertimbangan menentukan suatu resolusi
tertentu terhadap tegangan analog, maka ukuran word dan referensi
harus dipilih untuk mendapatkan resolusi ini dalam bilangan yang
dikonversikan ke bilangan digital.
2. KARAKTERISTIK UMUM
Sejumlah besar fitur umum yang mungkin dimiliki oleh konverter A/D,
yang penting dalam aplikasi:
a. Input.
Biasanya berupa level tegangan analog. Level yang paling umum
adalah 0 – 10 volt atau –10 hingga +10 jika dimungkinkan konversi
bipolar. Dalam beberapa kasus, level ditentukan oleh sebuah
referensi suplai eksternal.
b. Output.
177
Sebuah word biner paralel atau serial yang merupakan hasil
pengkodean input analog.
c. Referensi.
Stabil, sumber dengan ripple kecil terhadap konversi.
d. Suplai Daya.
Biasanya, sebuah suplai bipolar ±12 hingga ±18 V diperlukan untuk
amplifier analog dan komparator dan sebuah suplai +5 V untuk
rangkaian digital.
e. Input Sample and Hold.
Error timbul jika tegangan input berubah selama proses konversi.
Untuk alasan ini, sebuah amplifier sample and hold selalu
dipergunakan pada input untuk memberikan sebuah tegangan input
tetap untuk proses konversi.
f. Sinyal Digital.
Sebagian besar ADC memerlukan sebuah logika input tinggi pada
jalur yang diberikan untuk menginisialisasi proses konversi. Ketika
konversi selesai, ADC biasanya memberikan sebuah level tegangan
tinggi pada jalur lainnya sebagai indikator untuk mengikuti
perlengkapan status.
g. Waktu Konversi.
ADC harus berurutan melalui sebuah set operasi sebelum dapat
menemukan output digital yang diinginkan. Untuk alasan ini, sebuah
bagian penting dari spesifikasi adalah waktu yang diperlukan untuk
konversi. Waktu adalah 10 – 100 μs bergantung pada jumlah bit dan
desain dari konverter.
178
Resolusi konversi dari sebuah konverter analog ke digital adalah,
dimana kita dapat mengkonversikan data analog kedalam bit-bit
digital tersebut, apakah data analog tersebut akan dikonversikan ke
dalam data 8bit, 16 bit atau 32bit, ini tergantung keinginan si
perancang design dan tergantung dari kekompatibelan device yang
nanti akan di interface kan.
Misalkan ingin meng interface kan ADC dengan mikrokontroller maka
harus dilihat support untuk berapa bit kah mikrokontroller tersebut?,
dan biasanya mikrokontroller support untuk ADC dengan resolusi 8 bit.
b. Time Konversi
Time konversi atau waktu konversi adalah waktu yang dibutuhkan oleh
ADC untuk mengkonversi data analaog ke digital, untuk menentukan
time konversi ini tentunya kita harus melihat di datasheet nya, dan
harus dilihat untuk kebutuhan seperti apa.
Time konversi semakin tinggi mungkin semakin baik, tetapi harus
didukung pula untuk interface nya seperti apa, missal untuk
mikrokontroller yang support untuk time lebih besar maka tidak akan
cocok bila menggunakan ADC dengan Time yang lebih besar,
penentuan time konversi ini perlu disesuaikan dengan design interface
nya seperti apa. Jika semua device nya mendukung untuk time yang
lebih cepat maka dengan menggunakan ADC yang time nya lebih
cepat itu akan menjadi lebih baik.
4. JENIS-JENIS ADC
Analog To Digital Converter dibutuhkan apabila akan diproses sinyal-
sinyal analog misal: dari fenomena alam = suara, cahaya, suhu, dll,
(degan bantuan sensor/transduser supaya keluar tegangan).
179
Terdapat dua jenis Rangkaian Dasar Analog to Digital (ADC) :
1). ADC jenis Counter Ramp
2). ADC jenis SAR (Succesive Aproximation Register) atau ADC Parallel
180
Gambar 1. ADC Jenis RAMP
Input Output
181
Counter adalah komponen yang melakukan pencacahan /
penghitungan. counter yang digunakan yaitu counter dengan LOAD.
input dari counter di groundkan [diberi tegangan 0 volt], clock diberi
pulsa [pulsa maksimum yang diperbolehkan adalah 50MHz]. LOAD
dihubungkan ke output komparator. ketika LOAD logik 1, maka
counter melakukan penghitungan dari mulai 0. ketika LOAD berlogik 0,
maka counter menghentikan penghitungan. DAC [jenis binary weight
resistor] adalah pengkonversi signal digital menjadi analog dengan
menggunakan beberapa resistor [tergantung jumlah bit yang akan
dikonversi]. misalkan input DAC 0010, tegangan referensi DAC = 5 V,
maka tegangan output [signal analognya] adalah NILAI DESIMAL DARI
BINER dibagi DUA PANGKAT n-1 dikali TEGANGAN REFERENSI. jadi
Vout = [2/2^3] x 5 = 2.5 volt. tegangan maksimum dari DAC ini
adalah 9.375 volt. Latches adalah bagian yang menahan sementara
data dari counter untuk selanjutnya diproses untuk dimunculkan pada
display [7 segment atau LCD]. latches bekerja berdasarkan prinsip
bistable multivibrator, yaitu multivibrator yang memiliki kondisi 2
kondisi output yaitu 0 dan 1. data dari counter akan ditahan oleh
latches, ketika EDGE TRIGGER NEGATIVE dari latches mendapat
transisi turun [perubahan dari logik 1 ke logik 0], maka latches akan
melanjutkan data dari counter ke display.
182
Gambar 2. ADC Ramp Slope Ganda
ADC ini merupakan tipe yang paling umum dari konverter ramp.
Diagram yang disederhanakan dari piranti ini diperlihatkan pada
Gambar 2. Prinsip kerjanya berdasar pada kemampuan sinyal input
untuk menggerakkan integrator untuk waktu tetap T1, sehingga
menghasilkan sebuah output
183
Sehingga, waktu pencacah tx adalah linier terhadap Vx dan juga tidak
bergantung pada karakteristik integrator, yaitu R dan C. Prosedur ini
diperlihatkan dalam diagram waktu pada Gambar 3, konversi dimulai
sinyal digital konversi mulai (start) dan selesai (complete) juga
dipergunakan dalam piranti ini, dan (dalam beberapa kasus) referensi
internal atau eksternal dapat dipergunakan.
184
tegangan input Vx terhadap sebuah tegangan umpan balik VP yang
berasal dari sebuah DAC seperti tampak dalam gambar. Komparator
menghasilkan sinyal yang menggerakkan sebuah jaringan logika yang
menaikkan output digital (dan juga input DAC) hingga komparator
mengindikasikan dua sinyal adalah sama sesuai resolusi dari
konverter. Konverter paralel-feedback yang paling populer adalah
pendekatan successive. Pada piranti ini, susunan rangkaian logika
dibuat secara successive dan menguji setiap bit, dimulai dengan bit
paling penting (MSB) dari word. Kita memulainya dengan semua bit
nol.
Dari sini, operasi pertama adalah dengan mengeset b1 = 1 dan
–1
menguji VF = VR 2 terhadap Vx melalui komparator.
Jika Vx lebih besar, maka b1 adalah satu; b2 diset ke 1 dan dilakukan
–1 –2
test bagi Vx terhadap VV = VR(2 +2 ), dan seterusnya.
Jika Vx lebih kecil dari VR2–1, maka b1 direset ke nol; b2 diset ke 1 dan
– 2
dilakukan test bagi Vx terhadap VR 2 . Proses ini diulang hingga bit
terendah (least significant bit) dari word. Operasi yang terjadi paling
baik diilustrasikan melalui contoh.
185
Gambar 4. ADC jenis SAR
186
masih kurang dari tegangan input 6,84 Volt. Kombinasi mejadi 1100
0000 sehinga tegangan Vout = 7,5 Volt dan ternyata lebih besar dari
6,84 Volt sehingga kombinasi menjadi 1010 0000 =» Tegangan = 6,25
Volt, masih kurang sehingga kombinasi naik lagi 1011 0000 demikian
seterusnya hingga mencapai tegangan 6,8359 Volt.
Ada banyak cara yang dapat digunakan untuk mengubah sinyal analog
menjadi sinyal digital yang nilainya proposional. Jenis ADC yang biasa
digunakan dalam perancangan adalah jenis successive approximation
convertion atau pendekatan bertingkat yang memiliki waktu konversi
jauh lebih singkat dan tidak tergantung pada nilai masukan analognya
187
atau sinyal yang akan diubah. Dalam Gambar 5. memperlihatkan
diagram blok ADC tersebut.
Secara singkat prinsip kerja dari konverter A/D adalah semua bit-bit
diset kemudian diuji, dan bilamana perlu sesuai dengan kondisi yang
telah ditentukan. Dengan rangkaian yang paling cepat, konversi akan
diselesaikan sesudah 8 clock, dan keluaran D/A merupakan nilai
analog yang ekivalen dengan nilai register SAR.
Apabila konversi telah dilaksanakan, rangkaian kembali mengirim
sinyal selesai konversi yang berlogika rendah. Sisi turun sinyal ini akan
menghasilkan data digital yang ekivalen ke dalam register buffer.
Dengan demikian, keluaran digital akan tetap tersimpan sekalipun
akan di mulai siklus konversi yang baru.
IC ADC 0804 mempunyai dua masukan analog, Vin (+) dan Vin (-),
sehingga dapat menerima masukan diferensial. Masukan analog
sebenarnya (Vin) sama dengan selisih antara tegangan-tegangan yang
188
dihubungkan dengan ke dua pin masukan yaitu Vin= Vin (+) – Vin (-).
Kalau masukan analog berupa tegangan tunggal, tegangan ini harus
dihubungkan dengan Vin (+), sedangkan Vin (-) digroundkan. Untuk
operasi normal, ADC 0804 menggunakan Vcc = +5 Volt sebagai
tegangan referensi. Dalam hal ini jangkauan masukan analog mulai
dari 0 Volt sampai 5 Volt (skala penuh), karena IC ini adalah DAC 8-
bit, resolusinya akan sama dengan
Untuk sinyal clock ini dapat juga digunakan sinyal eksternal yang
dihubungkan ke pin CLK IN. ADC 0804 memilik 8 keluaran digital
sehingga dapat langsung dihubungkan dengan saluran data
mikrokomputer. Masukan (chip select, aktif rendah) digunakan untuk
mengaktifkan ADC 0804. Jika berlogika tinggi, ADC 0804 tidak aktif
(disable) dan semua keluaranberada dalam keadaanimpedansi tinggi.
Masukan (write atau start convertion) digunakan untuk memulai
proses konversi. Untuk itu harus diberi pulsa logika 0. Sedangkan
keluaran (interrupt atauend of convertion) menyatakan akhir konversi.
189
Pada saat dimulai konversi, akan berubah ke logika 1. Di akhir
konversi akan kembali ke logika 0.
Gambar 6 menunjukkan susunan kaki ADC tersebut. Beberapa
karakteristik
ADC 0804 adalah sebagai berikut:
• Memiliki 2 masukan analog : Vin (+) dan Vin(-) sehingga
memperbolehkan masukan selisih (diferensial). Dengan kata lain,
tegangan masukan analog yang sebenarnya adalah selisih dari
masukan kedua pin [ analog Vin = Vin(+) – Vin(-)]. Jika hanya satu
masukan maka Vin(-) dihubungkan ke ground. Pada operasi normal,
ADC menggunakan Vcc = +5V sebagai tegangan referensi, dan
masukan analog memiliki jangkauan dari 0 sampai 5 V pada skala
penuh.
• Mengubah tegangan analog menjadi keluaran digital 8 bit. Sehingga
resolusinya adalah 5V/255 = 19.6 mV
• Memiliki pembangkit detak (clock) internal yang menghasilkan
frekuensi f=1/(1,1RC), dengan R dan C adalah komponen eksternal.
• Memiliki koneksi ground yang berbeda antara tegangan digital dan
analog. Kaki 8 adalah ground analog. Pin 10 adalah ground digital.
190
Gambar 6. Konfigurasi PIN ADC0804
ADC 0804 merupakan ADC yang paling familier, yang paling sering
digunakan untuk keperluan pembuatan alat-alat ukur digital, dengan
karakteristik dasar, lebar data = 8 bit, waktu konversi = 100 uS. WR :
( input ) pin ini digunakan untuk memulai konversi tegangan analog
menjadi data digital, bila WR mendapat logika '0' maka konverter akan
mengalami reset; dan ketika WR kembali pada keadaan tinggi maka
konversi segera dimulai. Bila CS atau RD diberi logika '1' maka output
D0 s/d D7 akan berada dalam keadaan high impedanzi, sebaliknya bila
CS dan RD diberi logika '0' maka output digital akan keluar pada D0
s/d D7. INT: ( output ) pin ini digunakan sebagai indikator apabila ADC
talah selesai menkonversikan tegangan analog menjadi digital, INT
akan mengeluarkan logika '1' pada saat memulai konversi dan akan
berada pada logika '0' bila konversi telah selesai. Frekuensi clock
konverter harus terletak dalam daerah frekuensi 100 s/d 800 kHz. CLK
IN dapat diturunkan dari sumber clock eksternal. Clock internal dapat
dibangkitkan dengan memeberikan komponen R dan C pada CLK IN
dan CLK R. Vin : pin ini sebagai inputan tegangan analog yang akan
dikonversikan menjadi data digital.
191
kontinyu ini yaitu ADC akan memulai konversi ketika INTR kembali
tidak aktif (logika ‘1’). Setelah proses konversi selesai, INTR akan aktif
(logika ‘0’). Untuk memulai konversi pertama kali WR harus
ditanahkan terlebih dahulu, hal ini digunakan untuk mereset SAR.
Namun pada konversi berikutnya untuk mereset SAR dapat
menggunakan sinyal INTR saat aktif (logika ‘0’) dan mulai konversi
saat tidak aktif (logika ‘1’).
Ketika selesai konversi data hasil konversi akan dikeluarkan secara
langsung dari buffer untuk dibaca karena RD ditanahkan. Saat sinyal
INTR aktif, sinyal ini digunakan untuk me-reset SAR. Saat INTR
kembali tidak aktif (logika ‘1’) proses konversi dimulai kembali.
192
PERCOBAAN 7
8-BIT MONOLITIC ADC
I. TUJUAN
Setelah melakukan percobaan ini mahasiswa diharapkan dapat:
1. Memahami prinsip kerja Rangkaian 8-Bit Monolitic ADC
2. Memahami karakteristik 8-Bit Monolitic ADC
3. Melakukan uji coba 8-Bit Monolitic ADC
4. Melakukan pengukuran output dari 8-Bit Monolitic ADC.
193
III. ALAT DAN BAHAN
1. Pesawat Latih A/D Converter
2. Jumper (konektor).
3. AVO meter.
194
D7 = ... D6 =... D5 = ... D4 = ...D3 = ... D2 = ... D1 = .... D0 = ...
9. Sekarang atur tegangan input analog menjadi 0,25 Volt.
10. Amati tampilan pada LED indikator output (D0 s/d D7), kemudian
catat
D7 = ... D6 =... D5 = ... D4 = ...D3 = ... D2 = ... D1 = .... D0 = ...
11. Atur-atur tegangan input analog seperti terlihat pada tabel
pengukuran, tiap melakukan perubahan nilai tegangan analog input
lakukan pengamatan pada LED-LED indikator dan catat pada tabel
pengujian:
Tabel Pengujian
Input Output Digital
No. Analog
D7 D6 D5 D4 D3 D2 D1 D0
(Volt)
1 0 .... .... .... .... .... .... .... ....
2 0,25 .... .... .... .... .... .... .... ....
3 0,50 .... .... .... .... .... .... .... ....
4 0,75 .... .... .... .... .... .... .... ....
5 1,00 .... .... .... .... .... .... .... ....
6 1,25 .... .... .... .... .... .... .... ....
7 1,50 .... .... .... .... .... .... .... ....
8 1,75 .... .... .... .... .... .... .... ....
9 2,00 .... .... .... .... .... .... .... ....
10 2,25 .... .... .... ..... .... .... .... ....
11 2,50 .... .... .... .... .... .... .... ....
12 2,75 .... .... .... .... .... .... .... ....
13 3,00 .... .... .... .... .... .... .... ....
14 3,25 .... .... .... .... .... .... .... ....
15 3,50 .... .... .... .... .... .... .... ....
16 3,75 .... .... .... .... ..... .... .... ....
17 4,00 .... .... .... .... .... .... .... ....
18 4,25 .... .... .... .... .... .... .... ....
19 4,50 .... .... .... .... .... .... .... ....
20 4,75 .... .... .... .... .... .... .... ....
21 5,00 .... .... .... .... .... .... .... ....
195
12. Buat kesimpulan dari percobaan tersebut.
13. Matikan Power pada Pesawat Latih
14. Kembalikan semua peralatan ke tempat semula
PERCOBAAN 8
DIGITAL TO ANALOG CONVERTER (DAC)
196
Gambar 1. Pengubah Digital ke Analog
Vref (E) adalah tegangan acuan (referensi) yang tepat dan semua
hambatan merupakan hambatan presisi guna mendapatkan arus-arus
masukan yang teliti. Saklar yang dipasang dapat dibuka atau ditutup.
Apabila semua saklar dalam keadaan terbuka, maka seluruh arus
masukan menjadi nol dan seluruh arus keluaran juga sama dengan
nol.
Semua bit tinggi:
Apabila semua saklar tertutup, arus-arus masukan sama dengan:
Arus keluaran dengan semua saklar tertutup adalah jumlah dari semua
arus masukan, yaitu:
Masukan digital:
Bila 0 menyatakan saklar terbuka dan 1 menyatakan saklar tertutup,
maka persamaan di atas dapat dituliskan ke dalam:
197
Seperti yang telihat pada persamaan diatas, bahwa DAC akan
mengambil harga yang dinyatakan dalam kode digital dan
mengubahnya menjadi arus atau tegangan yang sebanding dengan
harga digitalnya. Tegangan atau arus ini merupakan besaran analog,
karena untuk satu range tertentu mempunyai harga yang berbeda.
DAC akan mengubah bilangan biner yang direpresentasikan oleh level
logika digital ke suatu tegangan output yang sebanding dengan bobot
bilangan biner tersebut.
Dengan S0, S1, S2, dan S3 akan bernilai nol jika saklar terbuka, dan
bernilai 1 jika
saklar tertutup. Dengan memasukkan nilai R 3 = R, R2 = 2 R, R+ = 4 R,
R0 = 8 R, dan RF = 8R/15 akan didapat :
198
semikonduktor Silicon dan Germanium maka dengan cepat terjadi
revolusi dalam hal penyederhanaan dan keakurasian suatu rangkaian
elektronika. Disamping itu dengan diterapkannya rangkaian digital
akan menunjang sekali dalam hal penyimpanan dan mobilitas data.
Banyak sekali data-data yang sekarang bisa dioperasikan dengan
komputer adalah merupakan data-data yang dikonversi dari sinyal-
sinyal analog. Sebagai contoh sinyal suara ataupun video yang
berbentuk analog bisa diputar dan disimpan dengan menggunakan
komputer setelah sinyal-sinyal analog tersebut diubah menjadi data-
data digital.
Kelebihan yang dimiliki oleh data-data digital dibandingkan dengan
sinyal analog adalah adanya sifat kepastian data atau logika. Data
digital hanya dibedakan menjadi dua macam yaitu logika tinggi “1”
dan logika rendah “0”. Logika 1 mewakili tegangan 5 volt dan logika
rendah mewakili tegangan 0 volt. Contoh kelebihan sinyal digital
dibanding sinyal analog adalah pada penerima televisi atau radio
digital. Dengan menerapkan system digital sinyal yang dipancarkan
oleh stasiun televisi atau radio akan berbentuk data-data 1 dan 0,
dengan begitu pada saat proses transmisi atau pengiriman data sinyal
yang berubah atau rusak akibat gangguan transmisi hampir tidak akan
mengubah logika dari sinyal tersebut. Tetapi jika sinyal yang
dipancarkan adalah sinyal asli yang berupa sinyal analog maka jika
terjadi kerusakan sedikit saja akibat gangguan transmisi maka sinyal
yang akan diterima adalah sinyal yang telah rusak tersebut.
Sebuah DAC menerima informasi digital dan mentransformasikannya
ke dalam
bentuk suatu tegangan analog. Informasi digital adalah dalam bentuk
angka biner dengan jumlah digit yang pasti. Khususnya ketika
dipergunakan sebagai penghubung dengan sebuah komputer, angka
199
biner ini disebut word biner atau word komputer. Digit-digit tersebut
disebut bit word. Sehingga, sebuah word 8 bit akan memberikan
sebuah angka biner yang memiliki delapan digit, seperti 101101102.
Konverter D/A mengonversi sebuah word digital ke dalam sebuah
tegangan analog dengan memberikan skala output analog berharga
nol ketika semua bit adalah nol dan sejumlah nilai maksmum ketika
semua bit adalah satu. Hal ini dapat direpresentasikan secara
matematis dengan memperlakukan angka biner sebagai angka
pecahan. Dalam konteks ini, output dari konverter D/A dapat
ditentukan dengan menggunakan Persamaan yang memberikan skala
dari sejumlah tegangan referensi berikut ini.
Dimana
Vx = output tegangan analog
VR = tegangan referensi
b1 b2 . . . bn = word biner n-bit
Perlu diketahui bahwa minimum dari V x adalah nol, dan harga
maksimum ditentukan oleh ukuran dari word biner, karena dengan
semua bit yang diset berharga satu, ekivalen desimal mendekati harga
VR sesuai dengan peningkatan jumah bit.
Sehingga sebuah word 4-bit memiliki harga maksimum
Dimana
ΔVx = perubahan output terkecil
VR = tegangan referensi
n = jumlah bit-bit di dalam word
sehingga, sebuah konverter D/A word 5-bit dengan tegangan referensi
10 volt
– 5
akan menghasilkan perubahan sebesar ΔVx = (10) (2 ) = 0.3125
volt per volt.
2. KARAKTERISTIK DAC
Untuk aplikasi modern hampir semua DAC berupa rangkaian
terintegrasi (IC), yang diperlihatkan sebagai kotak hitam memiliki
karakteristik input dan output tertentu. Dalam Gambar 1, kita lihat
elemen penting dari DAC dengan input dan output yang diinginkan.
201
Karakteristik yang berkaitan dapat diringkas oleh referensi dari
gambar ini.
2.1. Input Digital.
Secara khusus, jumlah bit dalam sebuah word biner parallel
disebutkan di dalam lembar spesifikasi. Biasanya, level logika TTL
dipergunakan kecuali dikatakan lain.
2.2. Catu Daya.
Merupakan bipolar pada level ± 12 V hingga ± 18 V seperti yang
dibutuhkan oleh amplifier internal.
2.3. Suplai Referensi.
Diperlukan untuk menentukan jangkauan tegangan output dan
resolusi dari konverter. Suplai ini harus stabil, memiliki riple yang
kecl. Dalam beberapa unit, diberikan referensi internal.
2.4. Output.
Sebuah tegangan yang merepresentasikan input digital. Tegangan
ini berubah dengan step sama dengan perubahan bit input digital
dengan step yang ditentukan oleh Persamaan (3-4). Output aktual
dapat berupa bipolar jika konverter didesain untuk
menginterpretasikan input digital negatif.
2.5. Offset.
Karena DAC biasanya diimplementasikan dengan op-amp, maka
mungkin adanya tegangan output offset dengan sebuah input nol.
Secara khusus, koneksi akan diberikan untuk mendukung
pengesetan ke harga nol dari output DAC dengan input word nol.
2.6. Waktu Konversi.
Sejumlah rangkaian DAC memberikan sebuah logika input yang
mempertahankan konversi dari saat terjadinya hingga diterimanya
sebuah perintah logika tertentu (1 atau 0). Dalam ini, word input
digital diabaikan hingga diterimanya input logka tertentu.
202
Dalam sejumlah hal, sebuah buffer input diberikan untuk
memegang (hold) word digital selama dilakukannya konversi
hingga selesai, bahkan word ini sendiri dapat muncuk pada jalur
input hanya dalam waktu singkat. Buffer-buffer ini biasanya berupa
flip-flop (FF) yang yang dimasukkan di antara terminal-terminal
input dari konverter dan jalur digital.
3. STRUKTUR DAC
Jelasnya, sebuah DAC dipergunakan sebagai kotak hitam (black box),
dan tidak ada pengetahuan mengenai cara kerja internal diperlukan.
Ada beberapa hal penting untuk menunjukkan bagaimana konversi
dapat diimplementasikan. Konversi yang paling sederhana
mempergunakan sebuah suatu deretan op-amp untuk input dengan
tujuan dipilih penguatan yang memberikan suatu output sesuai
dengan persamaan di atas.
Macam yang paling umum adalah mempergunakan sebuah jaringan
ladder resistif untuk menghasilkan fungsi transfer. Jaringan ini
diperlihatkan dalam Gambar 3 dalam hal konverter 4-bit. Dengan
pilihan resistor R-2R, dapat diperlihatkan malalui analisis jaringan
dimana tegangan output diberikan oleh persamaan:
203
Gambar 3. Contoh DAC menggunakan Ladder
204
Gambar 4. Binary Weigh D/A Converter
205
(R5), kemudian untuk bit selanjutnya harus 2x dari nilai resistor pada
bit yang lebih tinggi. Jadi jika rangkaian DAC menggunakan 4 bit maka
pada bit satuan (bit paling rendah) nilainya harus 8x dari bit ke-4. Dari
gambar di atas bit satuan diwakili oleh resistor 80 Kohm.
Contoh Kondisi :
- 0001 (1) = SW1 ditutup dan saklar lain dibuka, tegangan output
yang dihasilkan adalah (5K/80K) x 9 volt = 0,5625 volt
- 0010 (2) = SW2 ditutup dan saklar lain dibuka, tegangan
outputnya adalah (5K/40K) x 9 volt = 1,125 volt
- 0011 (3) = SW1 dan SW2 ditutup dan saklar lain dibuka,
tegangan outputnya adalah (5K/Rparalel 80K dan 40K) x 9 volt
= (5K/26,667K) X 9 volt = 1,6875 volt
- 1000 (8) = SW4 ditutup dan saklar lain dibuka, tegangan
outputnya adalah (5K/10K) x 9 volt = 4.5 volt.
206
sampai 255 (1111 1111) yang akan mengasilkan nilai tegangan output
0-5 Volt. sehingga setiap 1 bit bernilai 5/255=0.019 v. sehingga saat
input diberi data 129 (1000 0001) pada tegangan output keluar 129 x
0.019=2.451 V.
207
Gambar 6. Contoh Rangkaian DAC
Troubleshooting
208
Gambar 7. Grafik Tegangan Output Fungsi Binary Input (Teori)
209
Gambar 9.
210
Gambar 10. DAC Jenis R-2R Ladder
Pada DAC jenis R-2R Ladder pemasangan nilai Resistor pada input-
input nya adalah R-2R, jadi kalau Nilai R = 10k, maka 2R nya dipasang
20 K. Pemasangan nilai Resistor yang seperti itu adalah untuk
mendapatkan Vout yang linier ( kenaikan per stepnya tetap).
211
212
213
3.4. Digital to Analog Converter DAC0808
DAC0808 merupakan salah satu contoh kenverter D/A. IC ini tidak
mahal dan digunakan secara luas dalam beberapa aplikasi, D/A ini
menerapkan metode tangga R-2R 8 bit yang dilengkapi dengan
sumber arus acuan dan delapan buah transistor saklar untuk
mengarahkan arus biner. Suatu tegangan dan hambatan eksternal
dipergunakan untuk mengatur arus acuan pada nilai yang lazim
berlaku yaitu 2 mA. DAC0808 mempunyai waktu pemantapan 150ns
dan ketelitian relatif .
Konfigurasi pin ditunjukkan seperti pada gambar 11 dengan
penjelasan sebagai berikut. Pin 1 tidak dipakai ( NC singkatan dari no
connection ). Pin 2 adalah penghubung ke ground. Pin 3 (VEE ) harus
dipasang pada -12V. Pin 4 adalah saluran balik dari ground, yang
sifatnya sebagi output pembalik. Pin 5 s/d 12 merukan 8 bit masukan
data. Pin 13 (VCC ) harus dipasang pada catu daya +5V. Pin 14
dihubungkan dengan catu daya positif melalui hambatan R14, dan pin
15 dihubungkan ke ground melalui hambatan R15. Akhirnya sebuah
kapasitor antar pin 16 dan pin 13 berfungsi untuk memberi
kompensasi frekuensi bagi IC ini.
214
Gambar 11. Rangkaian DAC0808
215
216
PERCOBAAN 8
8-BIT MONOLITIC D/A
I. TUJUAN
Setelah melakukan percobaan ini mahasiswa diharapkan dapat:
1. Memahami prinsip kerja Rangkaian 8-Bit Monolitic D/A
2. Memahami karakteristik 8-Bit Monolitic D/A
217
Gambar 1. Percobaan 8-Bit Monolitic D/A
No. D7 D6 D5 D4 D3 D2 D1 D0 (Volt)
1 0 0 0 0 0 0 0 0 …
2 0 0 0 0 0 0 0 1 …
3 0 0 0 0 0 1 0 1 …
4 0 0 0 0 0 1 1 1 …
5 0 0 0 0 1 0 1 0 …
218
6 0 0 0 0 1 1 0 0 …
7 0 0 0 0 1 1 1 1 …
8 0 0 0 1 0 0 1 0 …
9 0 0 0 1 0 1 1 1 …
10 0 0 0 1 1 0 1 0 …
11 0 0 0 1 1 1 0 1 …
12 0 0 0 1 1 1 1 1 …
13 0 0 1 0 0 1 0 0 …
14 0 0 1 0 0 1 1 1 …
15 0 0 1 0 1 0 1 1 …
16 0 0 1 0 1 1 1 0 …
17 0 0 1 1 0 0 0 0 …
18 0 0 1 1 0 1 0 1 …
19 0 0 1 1 1 0 0 0 …
20 0 0 1 1 1 1 0 0 …
21 0 0 1 1 1 1 1 1 …
22 0 1 0 0 0 1 1 0 …
23 0 1 0 0 1 1 1 1 …
24 0 1 1 0 0 1 1 0 …
25 0 1 1 1 1 0 0 0 …
26 1 0 0 0 0 0 0 0 …
27 1 1 1 0 0 0 0 0 …
28 1 1 1 1 1 1 1 1 …
219
8. Buat Kesimpulan dari percobaan di atas!
9. Matikan Power pada Pesawat Latih
10. Kembalikan peralatan ke tempat semula.
220
PERCOBAAN 9
T I M E R/ COUNTER
TUJUAN
1. Mahasiswa memahami fungsi timer dan counter pada mkrokontroler
2. Mahasiswa memahami rangkaian interface untuk aplikasi timer dan
counter
3. Mahasiswa dapat memanfaatkan fungsi counter untuk mencacah
pulsa
4. Mahasiswa dapat memanfaatkan fungsi timer untuk membangkitkan
clock dengan periode tertentu.
FUNGSI COUNTER
Pada keluarga MCS-51 terdapat dua buah timer/ counter 16 bit, yang
dapat dikonfigurasikan sebagai timer atau counter, 8 bit, 13 bit atau
16 bit sesuai dengan mode yang dipilih. Gambar berikut merupakan
contoh aplikasi Counter 8 bit dengan menggunakan mode 3
221
Pada percobaan ini, pulsa diambil melalui clock generator yang
dibangkitkan oleh IC 555 yang mempunyai frekuensi 1 Hz, hasil
cacahan biner pada register counter akan ditampilkan pada LED.
org 0h
Start: Mov TMOD,#00000111b ; mode 3 counter 8 bit timer0
Setb TR0 ; TR1 = 0, start counting
Get: Mov A, TL0 ; A = TL0
CPL A ; A = NOT A
Mov P0, A ; P0 = A
Sjmp Get ; Looping Forever
End
222
kompilasi program dari *.asm ke *.hex.
9. Lakukan pemrograman mikrokontroller dengan menggunakan
Program ISP Software ( Lihat Petunjuk Penggunaan)
10. Lakukan pengamatan pada LED ? dan lengkapi tabel berikut.
223
Org 0h
Mov TMOD,#00000111b ; mode 3 counter 8 bit timer 0
Setb TR0 ; TR1 = 0, start counting
Get: Mov A, TL0 ; A = TL0
Call Bin2Dec ; panggil subroutine biner ke
desimal
Call Display7Segmen ; panggil subroutine display
7 segmen
Sjmp Get ;Looping Forever
;
Bin2Dec:
mov b,#100d
div ab
mov ratusan,a
mov a,b
mov b,#10d
div ab
mov puluhan,a
mov satuan,b
ret
;
Display7Segmen:
clr P3.5
clr P3.6
clr P3.7
mov A, ratusan
mov DPTR,#Data7segmen
movc A,@A+DPTR
mov P0,A
call delay
;
setb P3.5
clr P3.6
clr P3.7
mov A, puluhan
mov DPTR,#Data7segmen
movc A,@A+DPTR
mov P0,A
call delay
;
clr P3.5 ;
setb P3.6
clr P3.7
mov A, satuan
224
mov DPTR,#Data7segmen
movc A,@A+DPTR
mov P0,A
call delay
ret
;
delay: mov R0,#0
delay1: mov R2,#0fh
djnz R2,$
djnz R0,delay1
ret
;
Data7segmen:
db 11000000b,11111001b,10100100b,10110000b,10011001b
db 10010010b,10000010b,11111000b,10000000b,10010000b
;
end
FUNGSI TIMER
225
Pada keluarga MCS-51 terdapat dua buah timer/ counter 16 bit, yang
dapat dikonfigurasikan sebagai timer atau counter, 8 bit, 13 bit atau
16 bit sesuai dengan mode yang dipilih. Gambar berikut merupakan
contoh aplikasi Counter 16 bit dengan menggunakan mode 1
226
software, Register R0 akan increment setiap Timer 1 overflow. Jika
register R7 telah mendeteksi nilai 50 maka port P0.0 ( LED D0 ) akan
nyala selama = 0,01 x 50 detik = 0,5 detik.
Lakukan beberapa langkah percobaan sebagai berikut:
1. Lepas kabel yang menghubungkan antara P3.5 dengan output clock
IC 555
2. Hubungkan jumper konektor LED_EN
3. Hubungkan modul Microcontroller Trainer dengan power supply +5V
4. Hubungkan modul Microcontroller Trainer dengan rangkaian
programmer
5. Buka Program M-IDE Studio for MCS-51, sebagai editor dan
compiler program
6. Ketik program berikut ini:
Org 0h
Start: Setb P0.0 ;P0.0 = 1
call Delay ;call delay time
Clr P0.0 ;P0.0 = 0
call delay ;call delay time
Sjmp Start ;Looping Forever
;
Delay: Mov R0,#0 ;R0 = 0
Mov TMOD,#00010000b ;Mode 1, Fungsi =Timer 1 16 bit
Load: Mov TH1, #0D8h ;TH1 = D8h
Mov TL1, #0F0h ; TL1 = F0h
Setb TR1 ; TR1 = 1, Start Running
OFlow: JNB TF1, OFlow ; jump to OFlow if TF1 =0
Clr TR1 ; TR1 = 0
Clr TF1 : TF1 = 0
Inc R0 ; R0 = R0+1
CJNE R0,#50,Load
Ret
;
End
PERCOBAAN 10
INTERUPSI
TUJUAN
1. Pembelajar memahami sistem interupsi pada mikrokontroler
2. Pembelajar dapat menerapkan sistem interupsi pada pembuatan
228
jam digital
3. Pembelajar dapat memahami penggunaan bahasa assembly untuk
penggunakan sistem interupsi
Org 0000h
Ljmp Start
Org 000bh
Ljmp Timer0Interupt
Start: ; Instruksi Rutinitas
; Instruksi Rutinitas
; Instruksi Rutinitas
Sjmp Start; { Looping Forever }
;
Timer0Interupt:
Reti
End
229
0bh (alamat interupsi timer 0) dan melompat ke subrutine interupsi
Timer0Interupt.
230
5. Ketik program berikut ini
231
mov A,detiksatuan
Movc A,@A+DPTR
mov P0,A
clr P3.5 ;
Setb P3.6
Setb P3.7
call delay
;
Mov DPTR,#Decoder7Segmen
mov A,detikpuluhan
Movc A,@A+DPTR
mov P0,A
;
Setb P3.5 ;
clr P3.6
Setb P3.7
call delay
ret
;
InitTimer:
mov TMOD,#00000001b
mov tl0,#0b0h
mov th0,#03ch
setb ET0 ;Enable Timer 0 Interrupt
setb EA ;Master Interrupt Enable
setb TR0 ;Clock start running
ret
;
;===============================
;subroutine delay time
;===============================
delay: mov R1,#2
del1: mov R2,#255
del2: djnz R2,del2
djnz R1,del1
ret
;========================================
;LOOKUPTABLE
; Decode to Seven Segmen -> g f e d c b a
;========================================
Decoder7Segmen:
DB 11000000b,11111001b,10100100b,10110000b,10011001b
232
DB 10010010b,10000010b,11111000b,10000000b,10010000b
;
End
233
programmer
4. Buka Program M-IDE Studio for MCS-51, sebagai editor dan
compiler program
5. Ketik program berikut ini:
234
inc menit
mov A,#60
cjne A,menit,Update
mov menit,#0
Update:mov A,detik
mov B,#10
DIV AB
mov detikpuluhan,A
mov detiksatuan,B
;
mov a,menit
mov b,#10
div ab
mov menitpuluhan,A
mov menitsatuan,B
ret
;
ClockDisplay:
Mov DPTR,#Decoder7Segmen
mov A,menitpuluhan
Movc A,@A+DPTR
mov P0,A
clr P3.5 ;
clr P3.6
clr P3.7
call delay
;
Mov DPTR,#Decoder7Segmen
mov A,menitsatuan
Movc A,@A+DPTR
mov P0,A
setb P3.5 ;
clr P3.6
clr P3.7
call delay
;
Mov DPTR,#Decoder7Segmen
mov A,detikpuluhan
Movc A,@A+DPTR
mov P0,A
clr P3.5 ;
setb P3.6
clr P3.7
call delay
235
;
Mov DPTR,#Decoder7Segmen
mov A,detiksatuan
Movc A,@A+DPTR
mov P0,A
setb P3.5 ;
Setb P3.6
clr P3.7
call delay
ret
;
InitTimer:
mov TMOD,#00000001b
mov tl0,#0b0h
mov th0,#03ch
setb ET0 ;Enable Timer 0 Interrupt
setb EA ;Master Interrupt Enable
setb TR0 ;Clock start running
ret
;
;===============================
;subroutine delay time
;===============================
delay: mov R1,#2
del1: mov R2,#255
del2: djnz R2,del2
djnz R1,del1
ret
;========================================
;LOOKUPTABLE
; Decode to Seven Segmen -> g f e d c b a
;========================================
Decoder7Segmen:
DB 11000000b,11111001b,10100100b,10110000b,10011001b
DB 10010010b,10000010b,11111000b,10000000b,10010000b
;
End
236
kompilasi program dari *.asm ke *.hex.
8. Lakukan pemrograman mikrokontroller dengan menggunakan
Program ISP Software ( Lihat Petunjuk Penggunaan)
9. Lakukan pengamatan untuk data waktu yang ditampilkan.
Tujuan Umum
Tujuan Khusus
237
5. Membuat file baru dan contoh program sederhana pada format .asm
6. Build program sampai tidak ada error atau memperbaikinya.
7. Link ke simulasi dan writer.
Pendahuluan
1. Start
2. All-Programs
3. MIDE-51 Package
4. MIDE-51
Sehingga tampil sebagai berikut :
238
Gambar 1.Tampilan M-IDE
Edit
Preference /F12
Pilih seting Assembler ASEM51 Assembler pada Path
c:\mide\asem51
239
Gambar 2 Seting Kompiler
Edit
Preference /F12
Pilih Simulator
Isi execute File dengan C:\Program Files\FEPL\Topview Simulator -
Evaluation\Topview Simulator.exe atau browse pada sofware
simulator yang akan dipakai. Disini dipakai top view simulator
240
Gambar 3. Seting Simulator
Edit
Preference /F12
Pilih Simulator
Isi execute file dengan browse pada sofware Programmer yang
akan dipakai. Disini dipakai IspPgm.exe
241
Gambar 4. Seting Writer
E. Membuat file baru dan contoh program sederhana pada format .asm
File
New
Buat program sederhana seperti penjumlahan dua bilangan
mov R0,#12 ;R0 diisi dengan data 12
arith:
end
242
Gambar 5. Membuat Program sederhana
Pilih build
Atau tekan tombol short cut “build current file” dengan simbol
243
Gambar 6. Tobol Build, simulasi dan writer
Pilih Build
Pilih Build and Sim untuk simulasi
Pilih Build and Burn untuk writer (lihat Gambar 6)
244
TUTORIAL TOPVIEW SIMULATOR
Tujuan Umum
Tujuan Khusus
245
Pendahuluan
Program simulasi yang digunakan di sini adalah top view simulator. Dapat
digunakan untuk menganalisis register-register internal, SFR, GFR, RAM,
Program memori, waktu eksekusi, input-output window, modul-modul ekternal
seperti LED, seven segment, keypad, LCD, IIC, SPI dan serial port. Selain untuk
simulasi software ini dapat digunakan untuk editor dan juga build/kompiler.
246
5. Operating Frequency : 12 MHz artinya 1 siklus setara dengan
1udetik. Atau sesuaikan dengan frekeunsi pada hardware.
6. pilih OK
1. file
2. load program ; cari file hex
3. sebagai contoh aritmetika.hex yang telah kita buat sebelumnya.
4. pilih open setelah itu akan muncul kotak dialog sebagai berikut :
247
Gambar 9 Kotak dialog untuk loading file berhasil
C. Menjalankan Simulasi
Langkah-langkah mensimulasikan program:
248
D. Melihat Register Internal
Langkah-langkah melihat register pada simulator
1. View
2. Register Window
3. buka aritmetika.hex, Jalankan simulasi dengan SingleStep (F7)
4. Lihat perubahan pada register yang ditandai dengan warna merah
249
Ada kalanya kita ingin melihat program sebenarnya yang kita tulis
pada text editor untuk membandingkannya dengan mnemonic-nya.
Kita tidak perlu kembali ke M-IDE lagi.
1. File
2. Load text file (cari file dengan ektensi .asm)
3. Misalnya aritmetika.asm
1. File
2. Load text file (buat file dengan ektensi .asm)
3. Siap untuk membuat program.
F. Edit Program
Program yang telah dibuka tadi dapat diedit sesuai kebutuhan
dengan tidak perlu kembali ke text editor atau M-IDE. Dengan
Mengambil salah satu program asm sebagai templet, kita dapat
membuat program diprogram simulasi ini. Untuk melakukannya
program hasil perbaikan disimpan dengan nama yang berbeda :
(file Save text file as)
250
G. Kompile program
Program yang baru diperbaiki atau program dengan nama baru dapat
dibuild atau dikompile disini dengan langkah-langkah sebagai berikut :
1. pilih Command
2. pilih Run Assembler
3. pilih Run
4. Dan akan muncul file lst dengan keterangan jumlah error dan
langsung loading file hex.
251
H. Penggunaan Modul LED
1. Seting Modul LED seting modul LED disesuaikan dengan hardware
dan software yang akan digunakan. Misalnya untuk LED dengan
common anoda dan dari mikrokontroler adalah P0 maka
rangkaiannya sebagai berikut :
252
Karena common anoda maka aktive Low sehingga tidak perlu dicontreng
pada aktivating level seperti yang terlihat pada gambar 15.
Pilih OK
Simpan setingan modul dengan (file save module setting)
Beri nama LED_port0.MST. Seting ini dapat digunakan kapan saja dengan cara
(file open module setting)
Gambar 16. LED common anoda warna merah terhubung dengan Port 0
253
Run
Go Lihat hasil simulasi dan jika selesai (Run Stop Simulation)
1. Run
2. Execute time calculation
3. Isilah program starting address pada 0003 dan program ending address
0006 yaitu menghitung LCALL Delay
4. Hasilnya diperoleh sebagai berikut:
254
Gambar 17 Hasil hitungan siklus mesin dan waktu eksekusi
255
Gambar 19. Saklar Momentary dengan aktivasi level 1
256
Gambar 21 Seting saklar
sjmp start
end
257
K. Penggunaan Modul Seven Segment
1. Rangkaian Modul ada 7 kemungkinan kombinasi yang dapat digunakan
yaitu:
Non Multiplexed display dengan input BCD.
258
Gambar 22. Rangkaian 7 segmen input BCD
259
260
Multiplexed input 7 segment display dengan external multiplexer.
261
2. Seting pada Simulasi
Untuk satu seven segment tanpa multiplexer
262
3. Pilih Selection of Port line and Number of Digit
;----------------
; MAIN PROGRAM
;----------------
mov b,#0 ; inisialisasi register b dengan 0
Mov P3,#191 ; inisialisasi 7 segment u/ mengaktifkan 7 seg
Digit 1
mulai:
263
anl b,#0Fh ; mengalikan register b dengan data 0F
( 0000 1111 )
mov a,b ; pindahkan register ke accumulator a
Lcall tampil ; panggil sub rutin tampil yang telah disimpan
ke a
mov p0,a ; pindahkan ke Port 0
Lcall DELAY500MS ; delay 500 milli second
inc b ; register b ditambah/dinaikkan
sjmp mulai ; kembali lagi ke mulai
;---------------
; delay 500 ms
;---------------
DELAY500MS:
PUSH ACC
PUSH 00H
MOV A,#032H ; 500 milli second
;-------------
; DELAY 10 ms
;-------------
DELAY10MS:
PUSH ACC
PUSH 00H
MOV 00H,#050H
D10MS1: MOV A,#0C8H
DJNZ ACC,$
DJNZ R0,D10MS1
POP 00H
POP ACC
RET
;*************************************
;* Mengubah nilai 0..9 di Accumulator *
;* menjadi kombinasi ruas tampilan *
;*************************************
tampil:
INC A
264
MOVC A,@A+PC
RET
; -gfedcba
DB 11000000B ;0
DB 11111001B ;1
DB 10100100B ;2
DB 10110000B ;3
DB 10011001B ;4
DB 10010010B ;5
DB 10000010B ;6
DB 11111000B ;7
DB 10000000B ;8
DB 10010000B ;9
DB 11111111B ; Blank
BlankDisplay:
DB 11111111B ; Blank
DB 11111111B ; Blank
DB 11000000B ;0
DB 11000000B ;0
End
265
11 Pilih Selection of Port line and Number of Digit
org 0h
start: clr P3.5
clr P3.6
13. Jalankan program dan simulasikan sampai muncul tulisan 1234 secara
bersamaan walaupun setiap saat hanya satu segmen yang menyala.
267
2. Seting pada Simulasi
File
External modul setting
LCD
268
Pilih OK
3. Simpan modul seting dengan nama file LCD.MST
4. Buat program sebagai berikut :
org 0h
call init_LCD
start: mov R1,#80h ; Lokasi Display RAM, Row=1 Col=1
call write_inst
mov R1,#'T'
call write_data
mov R1,#'E'
call write_data
mov R1,#'D'
call write_data
mov R1,#'C'
call write_data
mov R1,#' '
call write_data
mov R1,#'B'
call write_data
mov R1,#'a'
call write_data
mov R1,#'n'
call write_data
mov R1,#'d'
call write_data
mov R1,#'u'
269
call write_data
mov R1,#'n'
call write_data
mov R1,#'g'
call write_data
stop: sjmp stop
Init_lcd:
mov r1,#00000001b ;Display clear
call write_inst
mov r1,#00111000b ;Function set, Data 8 bit,2 line font 5x7
call write_inst
mov r1,#00001100b ;Display on, cursor off,cursor blink off
call write_inst
mov r1,#00000110b ;Entry mode, Set increment
call write_inst
ret
;
Write_inst:
clr p3.5 ; write
clr P3.6 ; P3.6 = RS =0
mov P0,R1 ; P0 = D7 s/d D0 = R1
setb P3.7 ; P3.7 =EN = 1
call delay ; call delay time
clr P3.7 ; P3.7 =EN = 0
ret
;
Write_data:
setb P3.6 ; P3.6 = RS =1
mov P0,R1 ; P0 = D7 s/d D0 = R1
setb P3.7 ; P3.7 =EN = 1
call delay ; call delay time
clr p3.7 ; P3.7 =EN = 0
ret
;
delay: mov R0,#0
delay1:mov R7,#0fh
djnz R7,$
djnz R0,delay1
ret
;
end
270
8. Tampilkan Modul (View LCD);
271
Pilih Port Line Selection
272
Pilih key name Setting
Pilih OK
3. Simpan modul seting dengan nama file Keyboard.MST
4. Buat program sebagai berikut :
col4 bit P2.0
col3 bit P2.1
col2 bit P2.2
col1 bit P2.3
row1 bit P2.4
row2 bit P2.5
row3 bit P2.6
row4 bit P2.7
;
keydata equ 70h
keybounc equ 71h
keyport equ P2
org 0h
mov P2,#11111111b
call Init_LCD
start: call keypad4x4 ;calling subroutine keypad4x4
Mov A,keydata ;A = keydata
Cjne A,#0FFh,WrLCD;
sjmp start ;LOOPING FOREVER PART 1
;
WrLCD: Mov R1,#80h ;Pick DDRAM 1st row and 1st col
call write_inst
Mov R1,#30h
Add A,R1
Mov R1,A
273
call write_data ;write data
Sjmp start ;LOOPING FOREVER PART 2;
;
Init_lcd:
mov r1,#00000001b ;Display clear
call write_inst ;
mov r1,#00111000b ;Function set, Data 8 bit,2 line font 5x7
call write_inst ;
mov r1,#00001100b ;Display on, cursor off,cursor blink off
call write_inst
mov r1,#00000110b ;Entry mode, Set increment
call write_inst
ret
;
Write_inst:
clr P3.5 ; mode write
clr P3.6 ; P3.6 = RS =0
mov P0,R1 ; P0 = D7 s/d D0 = R1
setb P3.7 ; P3.7 =EN = 1
call delay ; call delay time
clr P3.7 ; P3.7 =EN = 0
ret
;
Write_data:
setb P3.6 ; P3.6 = RS =1
mov P0,R1 ; P0 = D7 s/d D0 = R1
setb P3.7 ; P3.7 =EN = 1
call delay ; call delay time
call delay ; call delay time
clr p3.7 ; P3.7 =EN = 0
ret
;
;====================================
; subroutine scan keypad 4x4
;====================================
Keypad4x4:
mov keybounc,#50 ;keybounc = 50
mov keyport,#0FFh ;keyport=P2= FF
clr col4 ;col4 = 0
;
keyCOR: jb row4,keyMEN ; Key COR
djnz keybounc,KeyCOR
mov keydata,#0Ah ;Data Output
ret
;
keyMEN: jb row3,keyUpA ; Key MEN
274
djnz keybounc,keyMEN
mov keydata,#0bh ;Data Output
ret
keyUpA:
jb row2,keyDnA ; Key Up Arrow
djnz keybounc,keyUpA
mov keydata,#0ch ;Data Output
ret
;
keyDnA:
jb row1,key3 ; Key Down Arrow
djnz keybounc,keyDnA
mov keydata,#0dh ;Data Output
ret
;==========================================
key3: setb col4
clr col3
jb row4,key6
djnz keybounc,key3 ; Key 3
mov keydata,#03h ;Data Output
ret
;
key6: jb row3,key9
djnz keybounc,key6 ; Key 6
mov keydata,#06h ;Data Output
ret
;
key9: jb row2,keyENT
djnz keybounc,key9 ; Key 9
mov keydata,#09h ;Data Output
ret
;
keyENT: jb row1,key2
djnz keybounc,keyENT ; Key ENT
mov keydata,#0eh ;Data Output
ret
;============================================
key2: setb col3
clr col2
jb row4,key5
djnz keybounc,key2
mov keydata,#02h ;Data Output
ret
;
key5: jb row3,key8
djnz keybounc,key5
275
mov keydata,#05h ; Data Output
ret
;
key8: jb row2,key0
djnz keybounc,key8
mov keydata,#08h ;Data Output
ret
;
key0: jb row1,key1
djnz keybounc,key0
mov keydata,#00h ;Data Output
ret
;==============================================
key1: setb col2
clr col1
jb row4,key4
djnz keybounc,key1
mov keydata,#01h ;Data Output
ret
;
key4: jb row3,key7
djnz keybounc,key4
mov keydata,#04h ;Data Output
ret
;
key7: jb row2,keyCAN
djnz keybounc,key7
mov keydata,#07h ;Data Output
ret
;
keyCAN: jb row1,Nokey
djnz keybounc,keyCAN
mov keydata,#0Fh ;Data Output
ret
;
Nokey: mov keydata,#0FFh
ret
;================================
;The end of Keypad 4x4 subroutine
;================================
delay: mov R0,#0
delay1: mov R2,#50
djnz R2,$
djnz R0,delay1
ret
end
276
5. Simpan dengan nama file (KEYBOARD_LCD.asm) dan build
6. Loading program pada topview simulator
7. Load Module setting LCD.MST
8. Jalankan Simulasi (Run GO)
9. Tampilkan Modul (View LCD); (View Keyboard)
277
Gambar 23 Rangkaian IIC RTC dan 7 segment
278
2. Seting IIC pada Simulasi
Pilih File External module setting IIC
3. Seting RTC
279
4. Seting EEPROM
Digit1 A - P0.4
Digit1 B - P0.5
Digit1 C - P0.6
280
Digit1 D - P0.7
Digit1 dp - +5V
Digit2 A - P0.0
Digit2 B - P0.1
Digit2 C - P0.2
Digit2 D - P0.3
Digit2 dp - +5V
Digit3 A - P1.4
Digit3 B - P1.5
Digit3 C - P1.6
Digit3 D - P1.7
Digit3 dp - +5V
Digit4 A - P1.0
Digit4 B - P1.1
Digit4 C - P1.2
Digit4 D - P1.3
Digit4 dp - +5V
Digit5 A - P2.4
Digit5 B - P2.5
Digit5 C - P2.6
Digit5 D - P2.7
281
Digit5 dp - +5V
Digit6 A - P2.0
Digit6 B - P2.1
Digit6 C - P2.2
Digit6 D - P2.3
Digit6 dp - +5V
282
MOV P0,A
MOV A,#03
ACALL SDA
MOV P1,A
MOV A,#02
ACALL SDA
MOV P2,A
SJMP MULAI
PUSH ACC
LCALL RTC
CC:
MOV A,#0A0h
MOV R7,#08
LCALL ATUR
LCALL STOP
POP ACC
MOV R7,#08
LCALL ATUR
LCALL STOP
MOV A,B
MOV R7,#08
LCALL ATUR
LCALL STOP
LCALL SCK
LCALL DR3
RET
SDA:
PUSH ACC ;84
LCALL RTC
MOV A,#0A0h
MOV R7,#08
LCALL ATUR
LCALL STOP
POP ACC
MOV R7,#08
LCALL ATUR
LCALL STOP
LCALL RTC
MOV A,#0A1h
MOV R7,#08
LCALL ATUR
LCALL STOP
MOV R7,#08
HOK:
SETB P3.0
NOP
283
MOV C,P3.1
CLR P3.0
MOV A,R5
RLC A
MOV R5,A
DJNZ R7,HOK
LCALL DDR
LCALL SCK
RET
DR3:
MOV R3,#40
WAHYU:
DJNZ R3,PANGGIL
SJMP SARI
PANGGIL:
LCALL RTC
MOV A,#85
MOV R7,#08
LCALL ATUR
LCALL STOP
JC WAHYU
SARI:
LCALL SCK
RET
ATUR:
CLR P3.0
LOOP:
CLR P3.0
RLC A
MOV P3.1,C
SETB P3.0
DJNZ R7,LOOP
RET
RTC:
SETB P3.0
NOP
SETB P3.1
NOP
CLR P3.1
NOP
CLR P3.0
RET
SCK:
CLR P3.1
NOP
SETB P3.0
284
NOP
SETB P3.1
RET
STOP:
NOP
NOP
CLR P3.0
NOP
SETB P3.1
NOP
NOP
SETB P3.0
NOP
NOP
NOP
MOV C,P3.1
CLR P3.0
RET
DDR:
SETB P3.1
NOP
SETB P3.0
NOP
CLR P3.0
RET
END
DDR:
SETB P3.1
NOP
SETB P3.0
NOP
CLR P3.0
RET
END
285
Gambar 29 Hasil simulasi akan menampilkan jam, menit, detik sesuai dengan
register pada RTC.
1. Rangkaian Modul
286
Gambar 31. Pada P0 dihubungkan dengan LED dan 7 segmen non multiplex
dengan input BCD.
287
LED
Digit1 B - P0.5
Digit1 C - P0.6
Digit1 D - P0.7
Digit1 dp - +5V
Digit2 A - P0.0
Digit2 B - P0.1
Digit2 C - P0.2
Digit2 D - P0.3
288
Digit2 dp - +5V
Pilih OK
3. Simpan modul seting dengan nama file Serial.MST
4. untuk menampilkan serial port window cukup dengan pilih (View Serial
Port Window)
Bagian atas simulated Controller digunakan untuk mewakili buffer yang ada
pada mikrokontrol, sedangkan bagian bawah Simulated host digunakan untuk
menggantikan PC. Data yang dikirim dapat berupa byte atau dalam file.
$MOD51
org 0h
nop
call initserial
gets: call inchar
289
mov P0,a
sjmp gets
;
initserial:
mov scon,#10h ; Konfigurasi komunikasi serial
mov tmod,#20h ; Baud rate 2400 bps
mov th1,#-13
setb tr1
ret
;
inchar:
detect: jnb ri,detect ; Deteksi bit RI apakah data sudah diterima atau
belum
clr ri
mov a,sbuf
ret
;
End
Gambar 34. Hasil simulasi serial port dengan tampilan LED, 7 segment, buffer
TX dan RX dikedua terminal PC dan uC
290