Date post: | 25-Jan-2023 |
Category: |
Documents |
Upload: | khangminh22 |
View: | 0 times |
Download: | 0 times |
Teknik Anlormuko don Pemrogromon Mikrikonlroler AT89552OIeh: Usmon
Hok Cipto O 2008 podo Penulis
Editor : Dwi Probontini
Setting : Alek
Desoin Cover : Bowo
Korektor : Artiko Moyo 7' Aktor1 $tt,
" ;', i ii ,1]t? 'r':;:lii{'
sodewo
";s.?-((y'(,g*/p I z.dc
1., .
+{i...r ' ..
Ll:1 X
Hok Cipto dilindungi undong-undong.Dilorong memperbonyok otou memindohkon sebogion otou seluruh isi buku ini dolombentuk opopun, boik secoro elektronis moupun mekonis, termosuk memfotocopy,merekom otou dengon sistem penyimponon loinnyo, lonpo izin tertulis dori Penulis.
Penerbit: C.V ANDI OFFSET (Penerbit ANDI)Jl. Beo 3B-40,Ielp. (027 41 561 881 (Huntins), Fox. (027 4j 588282Yogyokorto 55281
Percetokon: ANDI OFFSET
JL Beo 38-40, re$. (O27 4) 56 1 88'l (Huntins), Fox. (O27 41 588282Yogyokorto 55281
Perpuslokoon Nosionol: Kotolog dolom Terbilon (KDT)
Teknik Antormuko don PemrogromonMikrokontroler AI89552 / Usmon;
- Ed. l. - Yogyokorto:ANDI,
17 t6 15 14 13 t2 ilx * 518 hlm.; 16 x 23 Cm.
lo 9 8 7 6 s 4
ISBN:978 -979 - 29 - 0435 - 2
l. Judul
l. Kind of Hordwore
to 09 08
DDC'21 : 0O4.64
l(rp..".rbrhk"n untuk
Abrh I ercinta
Alr. lb, (5., oga ditenma disisl\ga)
Ad;L-rd;LLr,
lnd^"glgrr, lrrn, lr*(t"*og^L^l;^nbitu meraih cita dan asa)
W;d, \zlustika 5""($or.d, y gou'll {;nd
^ w ag)
T'ITA PENGANIAR
Puji dan syukur penulis panjarka, kepada Allah SWT yang relal.r memberikanpetunjuk dan kekuatan Nya sehingga penuris bisa menyelesaikan buku ini.
Perkembangan teknologi di bidang mikrokontrorer begitu pesat sejak dicipta-kannya mikrokontroler pertama oleh lnter Corporatio,. Berbagai tipe dankeluarga mikrokontroler banyak dibuat oreh perusahaan-perusahaan semi,konduktor dengan berbagai fasilitas dan kelebihan. Aplikasi prikrokontrolerpun begitu luas, dari mulai kalkulator saku, perangkat auclio-video, sisremkendali di dunia industri sampai pesawar mang angkasa.
Di dunia pendidikan' remtama di poriteknik ataupu, perguruan tinggi,mikrokontroler adalah salah satu mata kuriah yang banyak dipelajarimahasiswa. Bahkan tidak sedikit mal.rasiswa yang mengambil tugas akhirdengan membuat sistem berbasis mikrokontroler.
Tentu saja hal ini memerlukan literatur yang cukup memadai agar paramahasiswa bisa dengan mudah mempelajari dan mendalami mikrokontroler.Buku ini ditulis untuk melengkapi buku-buku tenrang mikrokontroler yangtelah terbit. Buku ini berusaha memberikan i,formasi yang lengkap menge-nai mikrokonrroler AT89s52, sebuah mikrokontroler keluarga g051 yangdikeluarkan oleh Atmei Corporation, baik itu secara reori maupun contohaplikasi. Sehingga, diharapkan buku ini bisa digunakan oleh para mahasiswaatau siapa saja yang ingin mernpelajari dan rnendalami mikrokontorerAT89s52 secara khusus maupun mikrokonrroler keluarga g05l secara umum.
Buku ini terdiri atas 11 bab, dengan Bab 1-4 membahas rentang reoriarsitektur hardware dan instruksi i,struksi yang dimiliki oleh mikro-kontroler AT89s52. Bab 5 memberikan penjelasan mengenai bagai-ma,amenggunakan port-port untuk menyalakan LED, motor DC dan membacasaklar. Bab 6 me*rbahas tentang bagaimana mikrokontroler A"fg9S52mengendalikan berbagai macam alat peraga (dispray) yang banyak digunakan,seperti display 7 segmen, dot matriks, LCD karakter dan LCD grafik crenga,berbagai teknik hardware dan software nya. Bab 7 dan bab g mc,jc.laska,bagaimana menggunakan fasilitas inrerr.ral yang clirniliki oleh A'l'u()S52, yairtr
Kata Pengantar
Timer, port serial dan interupsi. Bab 9 menjelaskan bagaimana ATB9S52merrbaca atau rnembangkitkan sinyal analog dengan ADC dan DAC. Bab l0menjelaskan bagaimana rnembangun jaringan milcrokontroler denganmenggunakan standar RS-485. Bab 11, bab terakl-rir buku ini, menl'elaskanbagaimana menggunakan software pengembangan dan membuat perangkatpemrograman AT89S52 yang dirancang dan dikernbangkan sendiri olehpenulis.
Semua contoh aplikasi yang ada di buku ini, hardware maupun software,telah dicoba dan diuji oleh penulis. Software dirancang deng,an mengikutiprinsip-prinsip pemrograman sebagai berikut
l. Pemenuhan algoritma, yaitu bagairnana membuat sebuah program agarberjalan sesuai dengan algoritma yar.rg telair ditentukan
2. Penanganan kesalal.ran (error handl), di mana sebuah program harusmampu meresponss dan mer.rangani error yang mungkin terjadi pada saatprogram dijalankan, sehingga sistem tidak menjadr hang.
3. Optimalisasi program (coding optimizing), yaitu bagaimana menghematpenggunaan memorj program, menyederhanakan program, dan lain-lain.
l)enjelasar.r mengenai sebuah aplikasi tidak hanya pada bagaimana aplikasi itubekerja, tetapi juga renrang teori yang mendasari aplikasi tersebut danbagaimana sebuah rangkaian atau software' dirancang. Seperti pada Bab 10,
st.lrclum membahas bagaimana membuat software untuk RS-485, buku inirncrnberikan penjelasan terlebih dahulu renrang apa itu RS-485 dan bagai-r)rana merancang protokol RS-485. Sehingga para pembaca bisa der.rgan
rrruclah untlrk mengembangkan conroh contoh aplikasi yang ada di bukuIt,hih lar.rjut, menjadi sebuah aplikasi yang lebih canggih dan dapat,ligtrna kan.
llrlitr ini juga menggunakan software,software pendukung yang dibuat,,r'rrtlir.i olch penulis menggunakan bahasa pemrograman Delphi 6.0. Pembacar,rrrg ingirr rnt'nclalarni atau mengembangkan software-software ini disaran-l.:rrr rrrrlrrk rrrt'rrPclajari pernrograman DeJphi melalui buku,buku yang sudah.rtl,r. Sr'rrrrrl s()ur'(('t.rlt' nya clisertakan dalarn CD pendukung buku ini. Bagi
l,r'nrlrrr';r )';rrrH lrrrrvir ingirr rncnggunakannya cukup menjaiankan softwarer',rrr1i rrrtl:rlr j;rrlt (lilr.r,rt,) yirng iugu tcr(lupat clalarn CD pendukur-rg.
l'r'trrtlt'. nrlr\,r(lint. lrr't,r1r,rprrn lrt'rrrrlis It'lrrlr lrr,r'trslrlrir trntrrk rnt'rrttlis brrktr ini'.r'r.rt,r l,'try'1.,,r;, ,l.rn '.r'nrplr r,r. nilnun rrlrsilr lrrnylrk Ii.r'liurirrrlirrtr rl:rrr
Ieknik Antarmuha dan Pemrograman Mikrokontroler ATB9S52
kelemahan yang melekar di buku ini. Karena pada dasarnya tidak ada karyavang "terbaik", yang ada adalah karya yang "lebih baik". Hari ini harus lebihbaik daripada hari kenarin, dan hari esok harus lebih baik daripatla hari ini.oleh karena iru, saran dan kritik dari pembaca sangar diharapkan olehpenulis untuk lebih menyempurnakan dan mtlengkapi isi buku ini.
Terakhir, pe^ulis mengucapkan terima kasih kepacra penerbit ANDI yangtelah bersedia menerbitkan buku ini. Dan juga kepacla teman-teman kerjapenulis yang selalu memberikan dorongan agar penulis segera menyelesaikanbuku ini. Semoga buku ini bermanfaat bagi kemajuan teknologi Indonesia.
Karawang, Januari 2008
DAFTAR ISI
BAB 1
BAB 2
DAF[.\R I.,I
KATA PENGANTAR
PENDAHULUAN
ARSITEKTUR MIKROKONTROLER 8051 ...........
2.1 PENJELASAN FLINGSI KAKI-KAKI2.2 REGISTER FTINGSI K}IUSUS
2.2.1 Akumulator dan Register B .................2.2.2 PSW...........2.2.3 P0 - P3 (Register Port) ...........2.2.4 Reg,ister Pengatur Timer2.2.5 Register Pengendali Port Serial
2.2.6 Registerlntempsi2.2.7 Register PCON
2.2.8 Data Pointer (DPTR) dan Stack Pointer (SP) ..
2.3 STRUKTUR MEMORI2.3.1 Bank-BankRegister2.3.2 Memori yang Bisa Dialamati per Bit
2.3.3 Area Memori Scratch Pad ..............
OPERASI PORT
2.4.1 KonfigurasiPort............2.4.2 Antarmuka Memori Eksternal
2.4.3 Antarmuka Port dengan Perangkat Luar ...........
OPERASI TIMER2.5.1 Mode 0
2.5.2 Mode I2.5.3 Mode 2
2.5.4 Mode 3.2.6 OPI]RASI PORT SERIAL
2.(;.1 Mode Kcrja Port Serial
2.6) Kotnurtiklsi Mtrltiltroscsor ..................,).(r..1 'l'irrrt'r' I st'lltgui I't'rrtlrltrtgkit l]:rtrcl llatt:
ry
VII
1
3
5
B
9
2.4
2.5
10
11
l114
17
19
20
20
22
24
24
25
25
29
31
JJ
J)
36
36
J/
38
40
47
47
vflt Ieknik Antarmulo dan Pemrograman Hikrokontroler AT89S52
2.7 INTERUPSI
2.7 .l Sumber Interupsi 80512.7.2 MengaturPrioritaslnterupsi
2.8 OSILATOR DAN RESET2.8.1 Osilator2.8.2 Reser
BAB 3 MIKROKONTROLER AT89S523.1 SFR-SFR TAMBAHAN
3.1.1 Data Pointer Kedua3.1.2 Register Pengendali Timer 23.1.3 Register-Regisrer Auxilari ..................3.1.4 Register Tirner Watchdog (WDT)STRUKTUR MEMORI AT89S52TIMER 2 ..................3.3.1 ModeCapture....,...........3.3.2 ModeAuto-Reload...........3.3.3 Pembangkit Baud Rate port Serial3.3.4 Pembangkit Clock ..........INTERUPSITIMER WATCHDOG .................MEMORI FLASH INTERNAL3.6.1 Pemrograman Mode paralel3.6.2 Pemrograman Mode Serial ..........
BAB4 BAHASAASSEMBIER8O5l ...,.......4.1 PEMINDAHAN DATA
4.1.1 Mode pengalamatan Segera4.1 .2 Mode pengalamaran Langsung4.1 .3 Mode pengalamaran Register4.1 .4 Mode pengalamaran Tak Langsung ...................4.1 .5 Mode pengalamaran Berindeks4.1.6 pemindahan Data Berorientasi Stack4.1 .7 pertukaran Data ............4.1.8 pemindahan Data Berorientasi Bit
4.2 PENGOLAHAN DATA4.2.1 Instruksi-Instruksi Aritmatika ...........4.2.2 Instruksi Instruksi Logika
105
t061r6
Daftar lsi
4.3 PENGATURAN ALUR PROGRAM4.3.1 InstruksiLompatTakBersyarar .........................4.3.2 Instruksi Lompat Bersyarat4.3.3 Instruksi call, ret dan reti
BAB 5 OPERASI PORT INPUT/OI.JTPUT5.1 OPERASI PORT OUTPUT
5.1.1 MengendalikanLED5.1.2 Mengendalikan Motor DC
5.2 OPERASI PORT INPUT5.2.1 Membaca Saklar5.2.2 Membaca Keypad
BAB 6 ANTARMUKA DENGAN DISPLAY 1556.1 DISPLAY 7 SEGMEN 155
6.1.1 IC Dekoder 7 Segmen 157
6.1.2 Display 7 Segmen Langsung 160
6.1.3 Display 7 Segmen dengan Multipleks 1646.1,.4 Display 7 Segmen dengan Register Geser .......... 1746.1.5 Pertimbangan Perancangan................ 183
6.2 DISPLAY DOT MATRIKS ............. 184
6.2.1 Display Dot Matriks Menampilkan Karakrer .... 190
6.2.2 Display Dot Matriks sebagai Penampil Grafik ... 2A46.3 LCD KARAKTER 16 X2 .............. 209
6.3.1 Rangkaian Antarmuka LCD ........... 2106.3.2 Pemrograman LCD 2136.3.3 Aplikasi LCD Mode 4 Bit ............ 2256.3.4 Menampiikan Karakrer dengan CGRAM .......... 240
6,4 LCD GRAFIK 240X64 2486.4.1 Pemrograman LCD Grafik 2526.4.2 LCD Grafik Menampilkan Gambar 240 x 64 ..... 2666.4.3 Mode Atribut Teks dan Karakter CGRAM ........ 2736.4.4 LCD Grafik Menampilkan Cambar dan Teks .... 286
TIMER DAN PORT SERIAL7.1 ',l'tMHl
49
50
52
53
121
122
126
135
139
139
139
t44145
145
148
53
56
5960
60
61
62
OJ
64
66
66
6869
89
92
93
94
95
97
99
101
102
Matriks 4x4
3.2
J.J
3.4
3.5
J.O
72
/J
74
76
78
82
87
7.1.1
7 I',.)
( )pt,rlsi 'l'intcr 0( )pr.r irsi 'l'irrrt'r' 2
297297
299311
BAB 7
BAB 8
BAB 9
BAB IO
BAB 11
7.2 PORT SERIAL
7.2.1 Mode 0: Register Ceser
7.2.2 Mode 1: Komunikasi Serial UART
INTERUPSI8.1 INTERUPSI EKSTERNAI
8.1.1 Interupsi Eksternal: Dispiay Dot Matriks ..........
8.1.2 Membaca Keypad 4x4 dengan IntempsiINTERUPSI TiMER8.2.1 Mengatur Kecepatan Motor DC dengan PWM .
8.2.2 Timer 2: Interupsi Eksternal Tambahan]N]'ERUPSI PORI- SERIAL .................
ANTARMUKA DENGAN SINYAL ANALOG9.1 ANTARMUKA DENGAN ADC............9.2 PEMBANGKITAN SINYAL ANALOG
9.2.1 Mengatur Kecepatan Motor DC dengan DAC ...
9.2.2 Membangkitkan Musik dengan DAC R 2R .......9.2.3 Mikrokontroler yang Bisa Berbicara ..................
RS-485: IARINGAN MIKROKONTROLER10.1 TINIAUAN STANDAR RS-485
10.1.1 Spesifikasi Dasar RS-485 ............^.....
10.1.2 Topologi Jaringan RS-485
10.2 JARINGAN RS.485 DENGAN AT89S5210.2.i Rancangan Hardware10.2.2 Protokol Jaringan dan Rancangan Software ......
AI-A.T PENGEMBANGAN .....,....1 1.1 PROGRAMMER 2.15 .............
11.1.1 Instalasi Pro6lrammer 2.15 ............
11.1.2 Cara Menggunakan Programmer 2.15
1 1.2 ANTARMUKA PROGRAMMER ..............
11.2.1 Rangkaian Antarmuka (FP-S100X)
11.2.2 Sistem Minimum AT89S5211.2.3 Rangkaian Catu Daya ...........
8.2
8.3
DAFTAR PUSTAKA
Ieknik Antarmuka dan Pemrograman l'tikrokontroler AT89S52
338
339
345
3s3?(s
3s6367
J/ /
377
384
392
401
402
415
416
422
439
453453
453
455
460
461
465
497
497
497
499
511
511
513
5i5
5t7
BAB IPENDAHUTUAN
Kemajtranteknologidibidangelektrorrikabegitupesatsejakditernr.rkarrnyatransistor.Dengan."pu,p",,ngkatsemikor"Lcluktorinirnenggantikanposisitabung hampa karena ,ku'u'"']yu yang lebih kecil' tegar-rgan kerjanya yang
iebihrcndah,konsurnsidayanyayanglebihkecildan'tenttisaia'harganyayorg lout lebih murah' Transistor kernuclian membawa kepada Penemuan'irtJg*rert circuit (iC), sebuah perangkat semikonduktor yang berisi dar:i
b"bJrrpu buah fransistor samPai jutaan transisror yar.rg tletnbentuk suatu
,ongkoiu,.t dertgan fr.rngsi terteutu, dar.i penguat oper:asional (op-amp) sarnpai
per'r"goloh ,irryul digitui 6igitot signal .ptrrce'sso.r)' I)ari transisror inilah lahir
mikrokontr:oler'
Mikrokontroler telah banyak ciigunakan di berbagai peralatan elektronik'
dari peralatatr rumah tan88a, p"t*gkut audio-video' pengendali mesin-mesin
industri sampai pesawat;a"g tngku'u' Sebag'ai contoh sebtrah tape mobil
<lengan Peraga LCD pastilal'- "l' mikrokontroler cli clarlamnya' Mikro-
kontroler akan menge"aulittun pemutaran kaset' mengendaiikan tuner FM'
mernberikan inlbrrnasi ke pen''akai melalui LCD' mengatur volunre suara ke
speaker dan mengendalikan equaliser digital'
Sebuahkomputermikromemilikitigakomponetrutama:urritpengolalrpusat(CPlJ=cetttral processing t"'-'r)' '-t"''"ori
clan sistem input/output (1/O) untuk
dihubungkal.r dengan i"'"t'gkut luar' CPU' yang mengatur sistem keria
ko,,p..t".mikro'clibangunolehsebuahlr-rikrolrrosesor:.N{emoriterdiriatasIIEPROM untuk menf i'pu' program dan RAM untuk metryirnpan clata'
Sistern I/O bisa dihubungkan dengan perangkat luar misalnya sebuah
keyboard dar.r sebuah mo,itor, bergantu.g pada aplikasinya. Apabila cPU,
r,emori cran sisrem I/o dibuat clalarn sebuarr clrip semikonduktor, maka
i rr i lah yang, di rranlakan n.rikrokontroier'
( it,ilt,r;rsi lx.t.tun)il nrikrokontrolcr clilltrat olehTntel corporariolr pada akhir
.1,.1<lrtlt'7() irrr' IVlilirrlkt.lrlrtllot.ylrrrg clirratrrakalr st.lragai kcltrarga 8051' ke-
rrtttlt;ttt trr,'tt1:ttli s.lrtt:tlt sl;tlttlltr irrrltrsrri' ll"rrlyak llet-ttsalt:rlr lairl yartg
Ieknik Antarmulo dan Pemrograman Mikrokontroler AI89552
membuar dan mengembangkan 8051 seperti philips Semiconductor, Atmelcorporation, Dallas Semiconductor, dan lain-lain. Selain itu berkembang jugamikrokontroler keluarga lain, seperti Motorola dengan seri 6gHC-nya, Atmeldengan AVR-nya, Microchip dengan plC-nya dan masih banyak lagi.
Mikrokontroler tidak hanya rerdiri aras rnemori internal ataupun sistem i/o,tetapi juga dilengkapi denga, fasilitas lain (on-chip facilities) seperri timer,port serial, pencacah (countel, kendali interupsi, pengubah analog ke digital(ADC=analog-to-digital converter) dan digital ke analog (DAC=digitat-to-analog convertet) bergantung pada untuk apiikasi apa mikrokontrolertersebut dirancang. Mikrokontroler generasi terbaru bisa dilengkapi denganport uSB, koneksi LAN, penggerak (drivel LCD, anrarrnuka untuk koneksike hard disk araupun dekoder mp3.
Perangkat htnak (software) pun berkembang pesat. pada awalnya bahasapemrograman mikrokontroler memakai bahasa assembler (bahasa tjngkatrendah), kini para perancang sisrem berbasis mikrokontroler telah banyakmengunaka, bahasa tingkat tinggi seperti bahasa c, BASIC araupun pascal.Dengan menggunakan bahasa pemrograman tingkat tinggi ini para perancanglebih cepat mengembangkan aplikasinya karena beberapa baris perintahdalam bahasa assembler bisa digantikan dengan hanya satu baris perintahbahasa tingkat tinggi. Kelemahannya adalah, memori program bisa lebihbesar bila dibandingkan dengan bahasa assembler. Selain itu, tidak semuabahasa assembler bisa dengan mudah direrjemahkan ke bahasa tingkat tinggi,sehingga rnasih tetap dibutuhkan baris program yang ditulis dengan bahasaassembler dalam program bahasa tingkat tinggi (inJine assembler).Mikrokontroler generasi terbaru telah dirancang agar lebih sesuai denganbahasa tingkat tinggi karena bagaimanapun bahasa tingkat tinggi lebih ,,bisa
dibaca".
B/\B 2AR'ITEKTUR
MIKROKONTROTER BO5I
Sejak diperkenalkan oleh Intel Corporation, keluarga rrikrokontroler 8051
(MCS-51) telah berkembang pesat baik dari sisi perangkat keras uraupun
peranpikat lunaknya, rnulai dari pengernbang,an dan penarnbahall fasilitas
internal sampai bal-rasa pemrogramanuya. Namun, tetaplah diperlukan
pengetahuan tentang mikrokontroler 805 1 standar sebelum mengembang,kan
aplikasi berbasis mikrokontroler versi pengembangan.
Mikrokontroler B05i standar adalah mikrokontroler B bit dengan fasilitas
sebagai berikut:
1. Merniliki 4x8 bit port I/O
2. RAM internal 128 bytes
3. Memiliki 2 buah Timcr
4. Sebuah port serial
Kendali interupsi dengan 5 buah sumber interupsi
Bisa mengalamati memori program sampai 64 Kbyte (KB) dan tnemoti
data sampai 64 KB secara terpisah.
7. Register-register fungsi khusus (SER=specral firnction registet's) seperti
akumulator, regisrer I\. stack pointer (SP), data pointer (DPI'R)' P0, Pl,P2 dan P3 untuk mengakses port I/O, buffer data serial, register timer
dan register kendali (untuk port serial, Timer dan interupsi).
Jantung dari mikrokontroler 805i adalah sebuah CP[J yang bertugas untuk
membaca memori program dan menjalankan perintah yang tersimpan di
clalarnnya. CPU ini disusun oleh sebuah unit aritmatika dan logika (ALU=
arit hntt,t hic logic unir) yang terhubung der.rgan SFR yaitu register A(A(.i('i ar-<'uatularol. re5iister B, PSW (program status wor$ dan stack pointer(Sl'), rllrr l(r bit (lrunter Program (PC) serta DPTR (data pointer)' 8051
lr<llrllrlr rrrilirokorr(rolcr [l bit, Ittrs d;rta illternal dan rcgister-reg,ister yang
Ieknik Antarmuka dan Pemrograman Mikrokontroler AT89SS2
dimilikinya juga memiliki lebar data 8 bit (walaupunbit, namun pada dasarnya adalah 2 buah register 8 bit
rtl o : FlJ i7 FI .ll - F] .?
I
vcc I
-+J----Dn*rF2
|Jr*erFtl
v_!J]
LI_tI
I
I
I
I
I
I
I
I
t-7'------E-
JLJTlrilEeg ALBIEI
RAftI E,)I fu
\I\,1 LilchFll llilchPll lr.Otr
,\
StatkFoirder
EI
t{L( ilF+g
AlixurEogun ttiF"*'l TI.TF; TIUIF'l
I
I
I
It
lltt
1..]-JJ*
E*lr 5LL]IC IIl'1Dt Trf,:lIl
ALUrI
TTIO Trn TI]] Euf{rr ul-1*.1*lPq.al*u
durK*rtlJi
IETIF IE tr FerurnLehLE
Blc k Irilerr4,s1 Pollna] durTirer
TFJT PSW Ccude:
Hagruu
F.egister
Lutr:1'si
)DFTR
PDLif EhF LalEh H
OiilatuI
!*t'. AIDrirer P DriurP:
PI
Gombor 2.1 Blok Diogrom Mikrokontroler B05l
ALU, seperti tersirat dari namanya, bisa melakukan operasi-operasi arit-matika dan lbgika. operasi penjumlahan, pengurangan, perkaliarl danpembagian bisa dilakukan oleh ALU. operasi logika yang bisa dilakukan olehALU di antaranya AND, oR, exclusive-oR, putar bit, kornplemen dan rain,lain. ALU bisa juga melakukan instruksi cabang bersyarat, menyediakan jalurdata dan sebagai register sementara untuk pemindahan dara di clalam cl;Lj.
DPTR adalah register 16
yang digabungkan).
Arsitektur i,likrokontroler 8051
Selain itu, ALU juga bisa menangani I bit data sebaik menangani 8 bit data.
Sehingga, operasi-operasi bit bisa dilakukan dengan cepat.
Bab ini akan menjelaskan arsitektur 8051 standar diawali dengan penielasan
fungsi kaki-kakj 8051, SFR, struktur memori, operasi port, port serial, Timer
dan interupsi.
P1
fi:fir R1.
iT'lti Pr.lilnTiir F.l.!t lllll r F'l
r lrll Fr-I,{
rTlrPJ,TEi P-..6
rEf,t Ft^;{T{L:(TAtl
,tt.J:1
Pr:r,J rAf4lP{,.1 r.qtrlrF!-12 iAtqlP{i.:l tLl\'ttPt:r-{ rACgtF,0.5 i4tSiPrl.8 r.6,ta,r
Ptr? i.{f,l€&\PpELE.,Ffi=F''5Efl
Pll1 tAliiP2.d t{1irPtiiat!,P14 tAlg'P?"il lAlliP3:l i4l(r,P?-1t,A9i
Pi,:t r&i!
Fl.tp1
F1.lr
P1.rF1..i
P1.6Fl.7FlrT
2.1
Gsmbor 2.2 Susunon Koki DlP40
PENJETASAN FUNGSI KAKI-KAKISeperti telah dijelaskan di atas, 8051 standar mempunyai 40 kaki yang bisa
dikemas dalam kemasan DIP40 atau PLCC44 dengan 32 kaki dipakai sebagai
port-porr multiguna, kaki untuk sumber tegangan, kristal, dan kaki-kakiuntuk kendali (pembacaan memori). Berikut adalah penjelasan fungsi kaki-kaki mikrokontroler 8051 standar.
1. P1.0 - P1.7 (Port 1)
Port 1 merupakan port 8. bit dua arah (input/output) dengan pull up
internal. Buffer output Port 1 bisa menangani sampai 4 masukan TTL.
Ketika data FFH dikirirn ke Port 1 maka Port I bisa meniadi port
rnasukan. Port I bisa diakses sebagai port (P1) atau diakses per bit (P1.0 -I'l .7). Sctt'lah rcst't I) I ukan rnt'n jatli port masukan.
Teknik Antarmul<a dan Pemrograman l,likrokontroler ATB9552
P3.0 - P3.7 (Port 3)Port 3 merupakan port 8 bit dua arah (input/ourpur) dengan pull upinternal. Buffer ourput Port 3 bisa menangani sampai 4 masuka, T'fL.Ketika data FFH dikirim ke Porr 3 maka port 3 bisa digunaka, scbagaimasukan. Port 3 bisa diakses sebagai port (p3) atau diakses per bit (1,3.0 -P3.7). Setelah reset P3 akan menjadi port masukan.
Selain berfungsi sebagai porr mulriguna, P3 juga memunyai fungsi khususseperti dijelaskan oleh Tabel 2.1.
3. XTAL2 danXTAL 1
xrAL2 merupakan keluaran dari rangkaian penguat osirator internal.Sedangkan xrAll merupakan masukan ke penguat osilator jnternal.Sebuah kristal dan dua buah kapasitor yang dihubungkan ke pin inisudah cukup untuk menyediakan sinyal detak (clock) untukmikrokontroler.
4. VCC dan GNDvCC dan GND merupakan pin unruk tegangan DC. Mikrokontrorer g05lstandar membutuhkan regangan DC sebesar 5 volt agar bisa bekerjadengan baik (standar TTL).
Arsitektur J'likrokontroler 805 I
P2.0 - P2.7 (Port2)Port 2 merupakan port 8 bit dua arah (input/output) dengan pull up
internal. Buffer output Port 2 bisa menangani sampai 4 masukan TTL.
Ketika data FFH dikirim ke Port 2 maka Port 2 bisa digunakan sebagai
masukan. Port 2 bisa diakses sebagai port (P2) atau diakses per bit (P2.0
P2.7). Setelah reset P2 akan menjadi port masukan.
Selain sebagai port multiguna, P2 juga akan mengeluarkan alamat orde
tinggi (A8 - A15) pada saat menjalankan program dari memori program
eksternal atau pada saat mengakses memori data eksternal yang
menggunakan perintah pengalamatan 16 bit (perintah morx @DPTR).
PSEI.{ , ALE dan EA
PSEN- atau program store enable adalah sinyal baca pada saat
menjalankan program dari memori eksternal. Di dalam aplikasi PSEN
akan dihubungkan dengan sinyal RD memori program eksternal
(EEPROM). PSEN diaktifkan dua kali setiap siklus mesin. Adanya
pemisahan antara sinyal baca untuk memori data eksternal (sinyal
nnZp:.2) dengan memori program eksternal (PSEN) membuat 8051
bisa dihubungkan sampai 128 KB memori eksternal (64K memori data
dan 64K memori program).
ALE atau addres latch enable adalah pulsa keluaran iatch pada proses
pengaksesan memori eksternal (program maupun data). Di dalam aplikasi
ALE biasanya dihubungkan dengan masukan latch enable dari IC latch,
74373 misalnya.
EA utm external access enablemenentukan apakah alamat awal memoriprogram berada di memori eksternal atau internal. Bila dihubungkan ke
GND, alamat awal program memori akan berada di memori eksternal,
sebaliknya bila dihubungkan dengan VCC, alamat awal memori program
8051 akan berada di memori internal. Pada 8051 yang tidak memilikimemori program internal, EA selalu dihubungkan dengan GND agar bisa
menjalankan program dari memori eksternal.
P0.0 - P0.7 (Port 0)
I)ort 0 rncrupakan 8 bit port dua arah (input/output) dengan drain
tcrlrtrkir (tytatl 1111111. I)ort 0 marnpu menangani 8 masukan TTL. Seperti
Irrrlrryu l)()rl l)()r.t yrrrrg llirr, kt'tika clata IrItlditulis ke port ini maka Port
0 rrkrrrr rrrcrrjrrtli rn;rsukrrrr tlcnliirrr inrpt'tl;rtrsi tinggi. l'ort 0 bisa tliakst's
7.
Tobel 2.1 Fungsi Khusus Port 3
Port Fungp, I(husus
P3.0 RXD, merupakan masukan unruk porr seial / Receiver
P3.1 TXD, merupakan output dari port serial / Transmitrer
P3.2 INT0 , merupakan masukan unruk interupsi ekstemal 0
P3.3 II.1T1 , -"*pakar masukan untuk interupsi eksternal 1
P3.4 T0, merupakan masukan untuk pulsa eksternal Timer 0
P3.5 T1, merupakan masukan untuk pulsa eksternal Timer 1
P3.6WR, merupakan sinyal tuhs (write strobe) unruk menulis data kememory data eksternal. Aktif rendah.
P3.7RD , -"-pukan sinyal baca (read strobe) unruk membaca data darimemori el<sternal. Aktif rendah
sebagai port (P0) atau diakses per bit (P0.0 - P0.7). Karena sifatnya drainterbuka, P0 membutuhkan pull up eksternal pada saar dihubungkandengan peralatan eksternal.
P0 memiliki fungsi khusus, yaitu sebagai bus data (D0 - D7) dan busalamat orde rendah (A0 - A7) pada proses pembacaan program darimemori program eksternal maupun pengaksesan memori data eksternal.Pada mode ini P0 memunyai pull up internal.
2.2 REGISTER FUNGSI KHU5U5Register-register fungsi khusus atau special function registers (SFR) padadasarnya adalah memori internal yang memiliki fungsi terrentu. Melalui SFRinilah, fasilitas-fasilitas internal 8051 bisa diakses dan dimanfaatkan dengancara membaca atau menulis SFR tersebut.
SFR menempati alamat memori 80H - FFH walaupun tidak semua alamartersebut dipakai oleh SFR (alamat tersebur mungkin dipakai oleh 8051 versipengembangan karena itu tidak disarankan menulis data FFH pada alamatyang tidak dipakai tersebut).
Secara garis besar sFR terdiri atas register-register untuk mengatur kerja port(P0 - P3), mengatur mode kerja Timer (TCON, TMOD, TLO, TLl, THO danTH1), mengatur port serial (SCON dan SBUF), mengatur kerja interupsi (IE)dan mengatur prioritas interupsi (IP), data pointer untuk mode pengalamaran16 bit (DPTR), stack pointer (SP), menyimpan informasi srarus program(PSW), akumulator (ACC) dan register B serta register untuk fungsipenghematan daya (PCON).
Tobel 2.2 SFR don Alomutnyo
Simbol Nama Register Alamat Data Reset (biner)
PO Port 0 80H 11111111
SP Stack Pointer 81H 00000111
DPL Data Pointer byte rendah 82H 00000000
DPH Data Pointer byte tinggi 83H 00000000
PCON Power Control 87H &oooooor
TCON Timer/Counter Control 88H 0000000c)
Ieknik Antarmul<a dan Pemrograman l'likrokontroler AI89S52 Arsitektur Mikrokontroler 8051
Simbol Nama Register Alamat Data Reset (biner)
TMOD Timer/Counter Mode 89H 00000000
TLO Data Timer 0 orde rendah 8AH 00000000
TL1 Data Timer I Order rendah 88H 00000000
THO Data Timer 0 order tinggi 8CH 00000000
TH1 Data timer 1 orde tinggi 8DH 0000m00
PI Port 1 90H 11111111
SCON Serial Control 98H 00000000
SBUF Serial Buffer 99H )ooooooo(
P2 Port 2 AOH 11111111
IE Register lnterupsi A8H tho0cn0
P3 Port 3 BOH l1l111l
IP Interupt Priority B8H xx00000
PSW Program Starus Word DOH 00000000
ACC Akumulator/Register A EOH 00000m0
B Register B FOH 00000000
Keterangan: x kondisi acak bisa bit 0 atau I
2.2.1 AKUMUTATOR DAN REGISTER B
ACC atau akumulator atau register A mer-upakan register multiguna yang
dipakai pada operasi aritmatika (pembagian, penjumlahan ataupun perkalian),
pemindahan data baik mode pengalamatan langsung atau indeks dan juga
operasi logika (AND, OR atau EXOR). Selain itu, register A juga dipakai
untuk menguji apakah suatu data itu nol atau bukan, pembacaan tabel (lookup table), dan pembacaan RAM tambahan. Register A menempati alamat
E0H. Register ini bisa diakses byte penuh atau per bit. Pada mode bit, register
A memiliki identitas ACC.O - ACC.7 (bit ke 0 - bit ke 7).
Register B menempati alamat F0H. Register ini dipakai bersama-sama dengan
register A pada operasi aritmatika (perkalian dan pembagian) atau dipakai
sebag,ai register multiguna. Register B juga bisa dialamati per bit (B.0 - B.7).
t0 Ieknik Antarmuka dan Pemrograman Hikrokontroler AT89552
2.2.2 PsW
PSW atau program status word adalah regisrer yang menyimpan informasistarus program seperti bit bawaan (carry) pada operasi aritmatika, bit paritas,bit overflow, bit-bit pemilih bank register dan bit-bit multiguna. PSW bisadiakses per bit.
Gambar 2.3 memperlihatkan susunan bit PSW. MSB berartibit (bit ke-7) dan LSB berarti least significanr bir (bitke-}).
Iul5E
fY F.L r0 r{51 R'IfI tt,,.l P
Gumbor 2.3 Susunon Regisler PSW
CY atau C (CarABit C memperlihatkan ada tidaknya carry (bawaan) dari bit ke-7 padaoperasi aritmatika penjumlahan, pengurangan, atau perkalian. CY di-set(berlogika i) bila operasi aritmatika ini menghasilkan bawaan dan di-reset (berlogika 0) jika sebaliknya. CY juga dipengaruhi oleh operasilogika seperti anl (logika AND) atau orl (logika OR) dan juga dipengaruhioleh operasi putar bit (rrc atau rlc). Selain itu, CY atau C bisa diaksessecara langsung melalui perintah serb C atau clr C.
AC (Auxiliary Carry)AC dipengaruhi oleh operasi penjumlahan dan pengurangan. AC akan di-set apabila dihasilkan bawaan dari bit ke-3. Misalnya penjumlahanbilangan 04H dengan ICH yang menghasilkan bilangan 20H akanmengkasilkan bawaan dari bit ke-3 (4H+CH=10H).
Fo (Flagl)Flag 0, merupakan bit multiguna. Bisa diakses melalui perintah setb F0atau clr F0.
RS1 dan RSO
RS1 dan RS} (register bank select) merupakan bir-bir untuk memilihbank register. Untuk penjelasan yang lebih rinci, bisa dilihat di subbabyang membahas mengenai struktur memori 8051.
Arsitektur J'likrokontroler 805 I il
6.
7.
OV (Overflow)OV di-set secara hardware pada operasi aritmatika apabila terjaditumpahan (overflow).
Bit-1 tidak fipakai
P (Parity)P memperlihatkan jumlah bit I dalam register A. Di-set kalau bit 1 dalamregister A berjumlah ganjil dan di-reset kalau jumlah bit 1 dalam regisrerA genap. P dikendalikan secara hardware setiap siklus instruksi.
5.
most significanr
L5E
L
2.2.3 PO - P3 (REGISTER PORT)
Register port mempakan SFR yang mengatur kerja port-port 8051 (P0 * P3).
Pada dasarnya SFR ini merupakan alamat latch dari masing-masing port.Menulis atau membaca data alamat ini sama artinya dengan menulis atau
membaca latch yang bersangkutan sehingga data bisa ditulis ke dan dibaca
dari port*port 8051. Perintah
mov BOH, #45H
sama artinya dengan
mov P0, #45H
Mengirim data 45H ke Port 0 (P0).
Pada mode akses bit, register ini bisa diakses dengan identitas PX.n. Xmemperlihatkan nomor port (dari 0 - 3), sedangkan n memperlihatkanumtan bit yang diakses (bit 0 - bit 7).
2.2.4 REGISTER PENGATUR TIMER
Register timer terdiri atas 2 register 16 bit (TL0 dan THO untuk Timer 0 serta
TLl dan THI untuk Timer 1), register TCON untuk mengatur kerja Timerdan intempsi serta berisi bit status Timer, dan register TMOD yang berfungsiuntuk mengatur mode kerja Timer.
2.2.4.1 Regisler Timer I6 bif
Ke luarga tl05 I nrcrnpturyai 2 br.rah reg,ister l6 bit yang masing masing
tlilrt'rrtrrk olt'lr 2l)rsin)B lr'14istt'r'lt bit,'l'1,0 tlurr'l-ll0 untuk rt'g,ister pertama
3.
t2
dan TL1 dan TH1 untuk pasangan register kedua. Walaupun disebut registc.r
16 bit, tetapi register ini tidak bisa diakses 16 bit secara langsung sepcrrihalnya DPTR (DPTR bisa diakses secara 16 bit sebagai DPTR atau 2 buahregister 8 bit, DPL dan DPH). Register ini bisa difungsikan sebagai pewaktu(timer) atau sebagai pencacah (counter).
Pada fungsi pewaktu, isi register ini akan ditambahkan setiap satu siklusmesin (sebagai pencacah siklus mesin). Oleh karena satu siklus mesin sama
dengan 12 kali periode sinyal osilator, Iaju pencacahan akan sama dengan
1/12 kali frekuensi osilator (jika osilator 12MHz, laju pencacahan akan sama
dengan 1 MHz, isi register akan bertambah satu setiap I mikro detik). Pada
fungsinya sebagai pencacah, isi register akan berubah pada saat ada transisi 1
ke 0 dari input Timer eksternal (T0 ataupun T1). Register ini tidak bisa
diakses per bit.
2.2.4.2 Regisler TCON
Register TCON berfungsi untuk menghidupkan atau mematikan Timer danjuga menyimpan informasi (bit) apabila data Timer melebihi kapasitasnya
(overflow). Selain itu, TCON juga berfungsi untuk menentukan apakah
interupsi akan dibangkitkan oleh transisi turun (1 ke 0) arau kondisi rendahpada input interupsi eksternal.
Gombor 2.4 Susunon Regisler T(0N
l IT0 (bit 0): |enis Interupsi 0. Mengeset IT0 akan membuat input interupsi
eksternal 0 (IlfTO- melalui P3.2) membangkitkan interupsi pada transisiturun (1 ke 0), sebaliknya me-reset IT0 akan membuat interupsidibangkitkan pada saat P2.3 pada kondisi rendah. Jika P2.3 terus berada
pada kondisi rendah, interupsi akan terus dibangkitkan selama IT0bernilai 0. IT0 sepenuhnya dikendalikan oleh software.
2. IEO (bit 1): bit pendeteksi interupsi 0. IEO akan di-set secara hardware
jika terdeteksi terjadi interupsi eksternal 0 ( INTO ) dan di-reser kembalisetelah rutin interupsi dijalankan (setelah perintah RETI).
TF1 TR1 TFO TT{O IE1 IT1 IEO ITO
Ieknik Antarmul<a dan Pemrograman l'likrokontroler AI89552 Arsitektur J'likrokontroler 805 I
3. IT1 (bit 2): Jenis Interupsi 1. Fungsinya sama dengan IT0 tetapi ITImengatur interupsi eksternal I ( INT1 melalui P3.3).
4. IE1 (bit 3): bit pendeteksi interupsi 1. Fungsinya sama dengan IEO tetapi
diatur oleh interupsi eksternal I ( INTl ).
TRO (bit 4): bit pengaktif Timer 0. Mengeset TRO akan menghidupkanTimer 0 walaupun harus diikuti dengan mengatur bir GATE pada registerTMOD. fika TRO di-reset, Timer 0 akan dimatikan. TRO sepenuhnyadiatur oleh software.
TFO (bit 5): bit status overflow Timer 0. TFO akan di-set jika Timer 0mengalami overflow (di-set secara hardware) dan bisa di-reset secara
software atau hardware pada saat prosesor melompat ke rutin pelayananinterupsi yang bersangkutan. Bit ini bisa dipakai unruk mengetahui statusTimer 0.
7. TR1 (bit 6): bit pengaktif Timer 1, fungsinya sama dengan TRO, tetapiTRl mengaturTimer 1.
8. TF1 (bit 7): bit status overflow Timer 1, fungsinya sama dengan TF10,tetapi TF1 mengatur Timer 1.
TCON bisa dialamati per bit. Penjelasan lebih lanjut mengenai fungsi registerTCON dapat dilihat pada subbab yang membahas cara kerja timer.
t3
5.
6.
2.2.4.3 Register TMODh,l5E L5E
SATEI C.,T1 Ir{11 Ir,'l 1 t-l GATEI] C/TIJ Iul0l IUII:ID
Gombor 2.5 Susunon Regisler IM0D
Register TMOD dipakai untuk mengatur mode kerja Timer, tenru saja
bersama dengan register TCON. Nibble rendah (bit 0 - bit 3) dipakai untukmengatur Timer 0 dan nibble tinggi (bit 4 - bit 7) untuk Timer 1.
l. M00 dan M01 (Timer 0), Ml1 dan M10 (Timer 1): pemilih mode.Mx() rlan Mxl (x 0 untuk'l'inrcr 0 clan x=l untuk Timer 1) dipakai untukrnt'rrrililr rrrotlt' kcljl 'l'irncr'. Atla 4 nrotlt, ylng l;isa clipilih:
TIITfER 0
r
t4 Ieknik Antarmuka dan Pemrograman Mikrokontroler AIB9S52
b.
C.
Mode 0 (Mx0=0, Mx1=0), memfungsikan Timer sebagai pencacah .l 3
bit. Pada mode ini, Timer akan mengalami overflow setelah
menerima pulsa (dari T0 atau Tl atau osilator internal) sebanyak 2r:r
atau 8192. Pada saat overflow Timer akan membangkitkan interupsi.
Mode 1 (Mx0=1, Mxl=0), pada mode ini Timer difungsikan sebagai
pencacah 16 bit (akan overflow pada pulsa ke 216atau 65536).
Mode 2 (Mx0=0, Mxl=1), Timer bekerja sebagai pencacah Sbir auroreload. Register TLx berperan sebagai pencacah 8 bit. Pada saat
overflow, data yang tersimpan di register THx akan dipindahkan ke
register TLx dan proses pencacahan akan dilanjutkan. Pada mode iniproses pencacahan tidak dimulai dari 00H, tetapi ditentukan oleh isi
register THx.
Mode 3 (Mx0:1, Mx1:1), Timer 1 tidak diaktifkan, hanyamenyimpan data. Timer 0 bekerja sebagai 2 buah pewaktu B bit yangterpisah (TL0 dan TH0) di mana TLO dikendalikan oleh bitpengendali Timer 0 dan membangkitkan interupsi pada saat
overflow. THO bekerja sebagai pewaktu yang dikendalikan olehsinyal clock dibagi 12, dan membangkitkan interupsi Timer 1 pada
saat overflow.
C7T0 atau C/Tl (bit 2 atau bit 6): bit pemilih fungsi kerjaMen-set C/Tx akan memfungsikan Timer sebagai pencacah (data Timerakan diperbarui oleh pulsa eksternal melalui pin T0/T1). lika C/Tx:O,Timer akan bekerja sebagai pewaktu (data diperbarui setiap 1112
frekuensi osilator).
GATE0 atau GATE1 (bit 3 atau bit 7)
Me-reset bit ini akan mengaktifkan operasi Timer bersama dengan bitTRx pada register TCON. Men-set GATEx akan mematikan fungsi Timer.
TMOD tidak bisa diakses per bit. Penjelasan lebih rinci mengenai kerja Timerbisa dilihat pada subbab operasi Timer.
2.2.5 REGISTER PENGENDALI PORT SERIAT
SFR yang mengatur port serial adalah SBUF (serral port buffet) dan SCON(serial port control). SBUF adalah buffer untuk pengiriman dan penerimaan
a.
d.
2.
Anitektur l'likrokontroler 805 I
data serial, sedangkan SCON menyimpan bit status pengiriman dan
penerimaan data dan mengatur mode kerja port serial.
2.2.5.1 Register SBUF
Data yang dikirim ke dan diterima dari port serial dihubungkan oleh registerSBUF. Setelah port serial diinisialisasi rnelalui register SCON, penulisan datake SBUF akan mernulai pengiriman data serial melalui pin TXD (P3.1). Begitujuga pernbacaan SBUF berarti membaca data serial yang diterima melalui pinRXD (P3.0).
Walaupun SBUF dalarn SFR hanya menempati satu alamat, tetapi secara
hardware SBUF mempunyai 2 buffer yang terpisah untuk pengiriman dan
penerimaan data. Sehingga, poft serial 8051 bisa dipakai untuk komunikasiserial dua arah penuh (full duplex); artinya proses pengirirnan dan penerima-an data serial bisa berlar.rgsung bersamaan. SBUF tidak bisa dialamati per bit.
2.2.5.2 Register SCON
Register SCON (serial port control berisi bit-bit pengatur mode kerja portserial (bisa diakses per bit), bit ke-9 data yang dikirim dar.r diterima dan juga
menyimpan bit interupsi port serial.
IUIEE LI]E
5I..,,Irl 5l!'11 5[{: REIi I Er: FIEB TI T.I.I
Gumbor 2.6 Susunon Register S[0N
SMO dan SMlSMO dan SMl merupakan bit-bit untuk memilih mode kerja port seriaiAda 4 mode yang dapat dipilih:
Mode 0 (SM0=0, SMl=0), rnemfungsikan port serial sebagai registergescr (shift register) Data dikirim dan diterima melalui pin RXD,sedangkan TXD akan mengirimkan sinyal clock penggeser.Kc.cepatan data (baud rure) tetap pada 1ll2 frekuensi osilator. Mode 0
bcrfungsi untuk kornunikasi serial sinkron.
M<r<lt' I (SM0 0, SMI l), rnr-rn[r.rngsikan scbagai port komunikasist'r'irtl irsittktrrrr ([JAl]'l' ttrtiyt't..t,tl ,r .st'rtt'rrtrrtt.s't<'t-t'it,t'r',/tt'lrt.trnttrt'r) 8
t5
1.
a.
r6 Teknik Antarmul<a dan Pemrograman I'likrokontroler AIB9552
c.
bit dengan 1 bit start (start bit) dan I bit stop (stop bit).Dara dikirirnmelalui pin TXD dan diterima melalui pin RXD. Kecepatan data(baud rute) bisa diatur melalui Timer.
Mode 2 (SM0=1, SMl=0), memfungsikan port serial sebagai portkomunikasi serial asinkron 9 bit data dengan 1 bit srart dan 1 bit stop.Bit ke-9 data yang terkirim disimpan di bit TB8 register SCON danbit ke-9 dari data yang diterima akan masuk ke RB8. Mode ini bisadipakai pada komunikasi serial yang memakai bit paritas (untukpengecekan error) di mana bit ke-9 bisa dipakai sebagai bit paritas.Baud rate yang bisa dipilih adalah 1/16 atau 1/32 frekuensi osilator.
Mode 3 (SM0=1, SMl=1), pada dasarnya sama dengan mode 2 (9 bitdata, 1 bit start dan I bit stop) dengan baud rate yang lebihbervariasi.
2. SM2
SM2 merupakan bit pengaktif mode komunikasi multiprosesor pada porrserial mode 2 dan 3. Jika SM2 di-set, bit RI tidak akan diakri{kan padasaat bit ke-9 dari data yang diterima adalah 0, pada mode 1 RI tidak akandiaktifkan bila bit stop yang valid tidak diterima. SM2 harus 0 pada portserial mode 0.
REN (Receiption Enable)REN merupakan bit untuk mengaktifkan arau memarikan perimaan dataserial, REN di-set akan mengaktifkan penerimaan data serial jika di-resetakan mematikan fungsi penerimaan data serial. REN dikendalikan olehsoftware dan di-set saat reset.
TB8 (Transmit Bit 8)
TB8 merupakan bit ke-9 dari data yang dikirim (pada mode 2 dan mode3), dikendalikan secara software.
RB8 (Receive Bit 8)
RB pada mode 2 dan 3 merupakan bit ke-9 dari data yang diterima, padamode 1 akan menyimpan bit stop dari data yang diterima. Pada mode 0RB8 tidak dipakai.
TI (Transmit intermpt)TI merupakan bit tanda bahwa pengiriman data telah selesai (port serialakan membangkitkan interupsi). TI akan di-set secara hardware serelah
Arsitektur I'likrokontroler 805 I
bit ke-8 dikirim pada mode 0 dan di,ser serelah bit stop dikirim padarnode yang lain. TI harus di-reset secara software agar bisa mer.rgirimkanclata selanjutnya.
7. RI (Receipt Intermpt)RI merupakan bit tarrda bahwa data telah diterirra dengan lengkap. Di-set secara hardware bila seluruh bit data (8 bit) retah diterima (mode 0)atau bit stop telah direrima (mocle lain, keculai SM2=l). Rl harr-ts di,resetsecara software agar data selanjutnya bisa diterima.
Penjelasan yang lebih rinci menger.rai irort serial bisa clilihar pacla subbabyang rnernbahas cara kerja port serial.
2.2.6 REGISTER INTERUPSI
SFR yarr mengatur fungsi interupsi 8051 adalah register IE (lnterrupr fital_tlc)dan register IP (lnterntpt Priorits).lE akan melrgatur surnber inrerupsi rnana
saja yang akan diakrifl<an dari 5 sumber inter:upsi yang rerseclia. sedangkan [Pakan mengatur interupsi mana yang akan didahulukan ur:rtuk dilayani(diprioritaskan).
2.2.6.I Register lE
Register IE menempati alamat A8t-1. Register ini mengatur inrerupsi manasaja yang diaktifkan dari 5 sumber interupsi yang tersedia dengan mengesetbit kendali interupsi yang bersangkutan.
r c'trL-,'U
_B:, ET1 E 'r'1 E I r.,.1 El:it-l
t7
d.
3.
4.
5.
6. 2
,t
1.
Gumbor 2.7 5usunon Register lE
EA. bit pengatur seluruh interupsi. Mengeset EA berarri mengaktifkanseluruh interupsi (bergantung pada kondisi bit interupsi yangbersangkutan). Me-reset EA berarti 8051 ridak akan menanggapi sinyalintenrpsi yang diterimanya.
X (bit 6 dan bit 5), tidak dipakai.
[']S, lrit rrrrtrrk rrrt'ngaktif)<an intt'rurpsi porr scrial (IiS di sct).
Teknik Antarmuka dan Pemrograman l'likrokontroler AT89552
2.2.8 DATA POINTER (DPTR) DAN STACK POINTER(sP)
Data pointer (DPTR) merupakan regisrer 16 bit yang biasa dipakai untukpengalamatan data 16 bit, misalnya pada saat membaca atau menulis RAMeksternal (dengan perintah movx). DPTR menempari 2 alamat dalam memorisFR 82H dan 83H. DPTR bisa diakses sebagai register 16 bit atau sebagai 2
register 8 bit dengan nama DPL (DPTR bit 0 - bit 7) dan DPH (DPTR bit 8 -bit l5). DPTR juga dipakai pada proses pembacaan data melalui tabelpencarian (look up table). Pada proses ini DPTR akan menyimpan alamatprogram memori dari data yang dicari. Selain itu DPTR bisa dipakai sebagairegister 16 bit atau 2 register 8 bit multiguna. DPTR tidak bisa dialamati perbit.
Stack pointer (SP) merupakan register B bit; dipakai untuk penyimpan darasementara pada saat perintah push/pop dan call/ret. Misalnya suaru mrinyang memakai register A akan memanggil (CALL) subrurin yang jugamemakai register A, maka agar data register A pada rutin pertama tidakdimodifikasi oleh subrutin yang dipanggil, data register A harus disimpandulu di SP (dengan perintah push). Setelah subrutin selesai dikerjakan, dararegister A yang tersimpan di SP dibaca kembali (melalui perintah pop) dandisimpan di register A. Perintah call akan menyimpan isi pC (programcounter) ke dalam SP dan mengambilnya kembali setelah instruksi ret. pada
saat reset SP memiliki alamat 07H, namun karena SP akan ditambahkan satusebelum data disimpan melalui perinrah push, tumpukan dara yang disimpanakan dimulai pada alamat 08H. Alamat ini menempari memori internal 8051.SP tidak bisa dialamati per bit.
2.3 STRUKTUR MEMORIMikrokontroler keluarga 8051 memiliki kendali yang berbeda untuk
mengakses memori program dan memori data ( PSEN dan RD ). Denganlebar bus alamat sebesar 16 bit maka roral memori yang bisa dialamati oleh8051 adalah 2x64 KB. Memori program bisa 4 KB sebagai memori program
internal (pada 8051 yang memiliki ROM internal dengan pin EAdihubungkan ke VCC) dan 60 KB sebagai memori program eksrernal arau 64
Arsitektur llikrokontroler 805 I
KB sebagai memori program eksternal (8051 yang tidak mempunyai RoMinternal atau 8051 dengan RoM inrernal, tapi pin EA dihubungkan ke GND).
FFF
2t
Gombor 2.10 Slruktur Memori progrom 8051
Untuk memori data (RAM), 8051 standar memiliki memori sebesar l2g bytesebagai memori internal dan bisa mengalamati 64 KB memori eksternal.Alamat memori internal terpisah dengan alamat memori luar tambahan.Selain 128 byte, 8051 juga memunyai memori inrernal lain yang dipakaiuntuk mengakses fasilitas inrernal 8051. Memori ini dinamakan SFR (sepertitelah dijelaskan pada subbab sebelumnya). Subbab ini hanya akanmenjelaskan memori RAM 128 byte.
Memcrri PragramEkstanal (60
kbl'te)
+
Memori Froqramlnternal (4 Kbyle)
Metnc,n FtogrirnEksternal (64
k$1te)
FFFF
Memni DataEksteuul (6+
kbytE)
dan
-
fugister Frurgsr
Khrrsus (SFR)
L4ernori data(RAM)tnterral
Gombor 2.1I Slruktur Memori Doto 8051
r
7) Ieknik Antarmul<a dan Pemrograman l,likrokontroler AI89552
Pada dasarnya RAM 128 byte 8051 bisa dibagi menjadi 3 area/bagian:
1. Area bankregister0-3 (32 byte)
2. Area memori yang bisa dialamati per bit (16 byte)
3. Area memori yang hanya bisa diakses per byte (80 byte), disebut " Scratch
pad area".
Selain sebagai memori multiguna, RAM internal juga berfungsi sebagai
memori SP (stack pointer), yaitu memori yang dipakai untuk menyimpan
data-data (misalnya dari register A) pada saat 8051 mengeksekusi instruksipush dan pop. Oleh karena itu, pemakaian RAM harus diperhatikan agar
tidak tumpang tindih dengan memori SP. Sinyal reset tidak akan mengubah
isi RAM internal.
2.3.t
Gombsr 2.12 Struktur RAM 128 byte
BANK.BANK REGISTER
Bank-bank register menempati alamat paling bawah pada alamat RAM 8051,
area memori ini menempati 32 byte alamat (00H - 1FH). Bank register dibagimenjadi 4 g*p (bank 0 - bank 3), masing-masing grup memunyai 8 alamat(byte).
Anitektur ilikrokontroler 8051
Tsbel 2.3 Susunon Sonk Register
Almat BankR€futer RSl. RSo
N-W Bank0 m
08-oF Bank 1 01
10- 17 Bank 2 10
18- lF Bank 3 ll
Di dalam pemrograman ke-8 alamat tersebut diberi identitas sebagai R0 - R7.
Alamat R0 - R7 ditentukan oleh bank register mana yang aktif saat itu.Pemilihan bank register dilakukan dengan memprogram bit RS1 dan RSO
pada register PSW. Misalnya pada saat RSl dan RSO diprogram 01, maka R0
akan memiliki alamat 08H, R1 akan beralamat 09H, dan seterusnya sampai
R7 akan memunyai alamat 0FH.
Semua alamat bank register bisa dialamati dengan mode pengalamatanlangsung (direct addressing), sedangkan R0 dan Rl bisa dipakai pada modepengalamatan tak langsutg (indirect addressing). Pada mode ini R0 dan R1
akan menyimpan alamat RAM internal yang akan diakses. Sebagai contoh
mov A, R0
akan memindahkan isi register R0 ke dalam akumulator. Berbeda dengan
perintah di bawah ini,mov A, GRO
yang akan memindahkan isi RAM internal yang alamatnya disimpan diregister R0 ke register A. Sedangkan perintah
mov A, @R7
akan menyebabkan kesalahan pada kompiler MCS51. Perlu diperhatikan pulabahwa alamat 07H merupakan alamat stack pointer (SP) pada saat reset.
Sehingga, alamat 08H bisa digunakan pada saat perintah push dan pull. Perludiperhatikan pula pada saat menentukan alamat SP agar pengaksesan bankregister ini tidak menyebabkan data SP hilang.
7t
-Area Srratch Fad(80 byte)
F,rea 1'ang brsa dialamah trrer
brt (16 Lyte)
Bank-bank Register(4xB byte)
t4
2.3.2 MEMORI YANG BISA DIALAMATI PER BIT
Area memori selanjutnya adalah area memori yang bisa diakses per bit (6rimapped memory). Area ini menempati alamat 20H - 2fH (16 byte) sebagai
byte dan alamat 00H * 7FH sebagai alamar bit (128 bit). Misalnya bit ke-Odari alamat 20H akan mempunyai alamat bit 00H dan bit ke-1 akan mem-punyai alamat 01H dan seterusnya. Area memori ini berfungsi untukmenyimpan tipe data boolean atau 2 keadaan (status 11ag), misalnyamenyimpan status LED apakah sedang menyala atau mati.
Ada dua cara untuk mengakses area memori ini, sebagai byte atau sebagai bit.Pengaksesan sebagai byte bisa dilakukan dengan mode pengalamatanlangsung, misalnya
mov 20H, #45H
akan menulis data 45H ke alamat 20H atau mode pengalamatan tak langsungmelalui R0 atau R1, misal
R0, #20HA, #45HGRO, A
Pengaksesan secara bit dilakukan dengan mengakses alamat bit yangbersangkutan, misal
mov C, 13H
akan memindahkan bit yang berada pada alamat bit 13H ke bit C (carry).Alamat 13H adalah bit ke-3 dari alamat 22H. Bahasa assembler 8051 mem-punyai cara penulisan yang lain untuk mengakses bit ke-3 alamat 22H yaitu22.3H. Sehingga
mov C, 22.3H
memunyai arti yang sama dengan perintah sebelumnya.
2.3.3 AREA MEMORI SCRATCH PAD
Area memori selanjutnya adalah area memori yang disebut sebagai scratchpad memory. Area ini menempati alamat paling atas RAM internal sebesar
80 byte (alamat 30H - 7FH) dan dipakai sebagai memori multiguna. Scratchpad hanya bisa diakses sebagai byte dengan mode pengalamaran langsung dantak langsung. Misalnya:
movmovmov
Teknik Antarmuka dan Pemrograman llikrokontroler AI89552Arsitektur llikrokontroler 805 I
mov A, 35H
akan memindahkan data dari alamat 35H ke register A, sedangkan
mov A, @R0
akan memindahkan data dari alamat RAM internal seperti yang tersimpgn diR0 ke register A.
2.4 OPERASI PORT
Seperti telah dijelaskan pada awal bab ini, mikrokontroler 8051 standarmempunyai 4 port input/ourput (masing-masing port terdiri atas 8 bit) yaituP0, Pl, P2 dan P3. Semua port 8051 merupakan port dua arah (bidirectional),artinya bisa digunakan sebagai input atau sebagai output. Selain sebagai portinput/output, port-port 8051 juga memunyai fungsi alternatif (seperti telahdijelaskan pada Subbab 2.1). P0 memunyai fungsi alternatif sebagai jalur data
dan alamat orde rendah pada proses pengaksesan memori program danmemori data eksternal. P2 berfungsi sebagai jalur alamat orde tinggi. Semua
bit P3 mempunyai fungsi alternatif, sebagai jalur komunikasi serial, masukanintenunleksternal, masukan Timer eksternal dan sinyal baca/tulis
(RD / WR ) pada proses pengaksesan memori data eksternal. Hanya Pl yangtidak mempunyai fungsi tambahan.
2.4.1 KONFIGURASI PORT
Pada dasarnya port-port 8051 tersusun atas latch, driver output dan bufferinput. Latch merupakan sebuah flip-flop D berfungsi untuk menahan datapada saat menulis data ke port sehingga data tetap ada walaupun 8051
mengerjakan instruksi lain. Driver output disusun oleh sebuah FET (fteldefect transisrof sehingga port 8051 bisa menangani 4 masukan TTL (8
masukan untuk P0). Semua port memunyai resistor pullup internal kecualiP0, sehingga P0 memerlukan resistor pull up eksternal pada saat beroperasisebagai port output. Buffer input terdiri atas 2 buah buffer digital, satu untukmembaca output latch dan yang lainnya untuk membaca input port yangbersangkutan.
25
76 Ieknik Antarmuka dan Pemrograman l'likrokontroler 4189552
Aematlr0*.
Gombor 2.13 (onfigurosi P0
Input latch terhubung dengan bus data internal dengan sinyal kendali penulis
latch. Pada proses penulisan data ke port, CPU akan meletakkan data ke bus
dara internal melalui alamat SFR port yang bersangkutan sementara sinyalpenulis latch akan menggeser data ke dalam latch. Keluaran membalik latch
(Q) aiftrrU.rngkan dengan FET driver output, karena driver output adalah
rangkaian pembalik logika (gerbang NOT) sehingga output port akan sama
dengan data dari bus data internal. Output tak membalik latch (Q)
dihubungkan dengan buffer input untuk pembacaan latch (hubungan iniberg[na untuk perintah "baca-ubah-tulis" seperti yang akan dijelaskan oleh
paragraf selaniutnya).
Pembacaan port dilakukan dengan membaca buffer pembaca port (Buffer2).
Driver output terlebih dahulu harus dimatikan agar tidak memengaruhi
pernbacaan port. Ini dilakukan dengan menulis I ke port yang akan dibaca
(nilai 1 akan membuat output Q menjadi 0 dan akan mematikan FET driver
output). CPU akan mengaktifkan Buffer 2 melalui kendali pembaca port, data
port dibaca melalui bus data internal (ini juga dilakukan melalui alamat SFR
port yang bersangkutan).
8us Batalrnemgl
Kendali
Penulistch
KendaliPemhacaPort
Aruitektur l'likrokontroler 805 I
Bus Oataktemal
KendaliFenu[slach
Gcmbor 2.14 l(onfigurosi PI
Beberapa perintah 8051 mengharuskan pembacaan port, mengolahnya dan
menuliskan kembali hasilnya ke port yang bersangkutan (perintah "baca-
ubah-tulis"). Misalnya
an1 Pl-, A
membaca data Pl, kernudian di-AND-kan dengan isi register A dan hasilnya
dikirim kembali ke Pl. Pada beberapa kasus, Pl mungkin dipakai sebagai
output untuk rnenggerakkan kaki basis sebuah transistor. Logika 1 yang
dikirim ke Pl akan menghidupkan transistor. CPU bisa salah membaca nilaidigital Pl dan akan membaca logika O dari input Pl (karena CPU akan
membaca tegangan basis transistor). Oleh karena itu, CPU tidak membaca
port secara langsung (melalui Buffer2), tetapi membaca output latch (Q)
melalui Bufferl. Perintah lain yang rnernpunyai proses yang sama diantaranya:
orl P2, Axrl P3, Ajbc P1.1-, LABETcp1 P3.0inc P2dec P1djnz P2, L,ABELmov Pl- - L, C
clr P1.0seLl> PL .2
71
KxndaliP.mbrerPod
28 leknik Antarmuka dan Pemrograman l,likrokontroler AI89S52
Tiga perintah terakhir sekilas bukan jenis perintah ini, tapi pada saatmenjalankan perintah ini CPU akan membaca data byte port, memodifikasibit yang bersangkutan kemudian mengirimkan byre baru ke porr.
Port-port yang mempunyai fungsi tambahan memunyai rangkaian kendalitambahan pula. P0 dan P2 memunyai fungsi tambahan sebagai jalur data danalamat pada proses pembacaan memori program dan memori data eksternal.Port-port ini dilengkapi dengan sebuah multiplekser dan sebuah sinyal ken-dali. Pada saat P0 dan P2 difungsikan untuk mengakses memori eksternal,multiplekser akan terhubung dengan bus data/alamar dan bila dipakai sebagaiport multiguna akan terhubung dengan latch. Khusus untuk P0 dilengkapidengan sebuah FET pullup internal. FET ini akan aktif ketika P0 mengaksesmemori eksternal sehingga tidak diperlukan resistor pullup eksternal. pada
saat dipakai sebagai port mukiguna, FET pullup akan dimatikan karena itu p0
memerlukan pullup eksternal ketika dipakai sebagai porr output (karena p0
akan menjadi port dengan keluaran drain terbuka). Saat mengakses memorieksternal, SFR P0 akan menulis data 1 ke latch, sedangkan SFR P2 tidakberubah dan tidak disarankan menggunakan porr-porr ini sebagai portmultiguna pada saat dipakai untuk mengakses memori eksternal.
Aamat/Data
ldendali
PembacaLach
Hendali
Eufferl
Eus BataIntemal
HendaliPenulisL,rtch
KendaliPembacaPort
Pulluplrrtemal
Gombor 2.I5 Konfigurosi P2
Arsitektur I'likrokontroler 805 I t9
HendaliPembacaLatch
Orltput FungsiFltematif 1;CC
FETDriuer
Eufferl
Pulluplrrtemal
lnput FungsiJttematif
Eufferl
Bus Datglntemal
lderrdaliPenulisl-rtch
Buffer2l(en,laliPembacaFort
Gombor 2.16 Konfigurosi P3
P3 yang juga memunyai fungsi tambahan, dilengkapi dengan rangkaiankeluaran dan masukan untuk fungsi tambahannya, sebuah gerbang NANDdan sebuah buffer tambahan. Pada saat digunakan sebagai fungsi alternatif,misalnya sebagai jalur komunikasi serial UART, ourput port yang diambil darikeluaran Qlatch akan bernilai I, sehingga ourpur NAND (yang berarti ourpurport) akan bergantung pada masukan yang terhubung ke register SBUF.Masukan fungsi alternatif diambil dari buffer tambahan.
2.4.2 ANTARMUKA MEMORI EKSTERNAL
Memori program (ROM) dan memori data (RAM) eksrernal diakses denganmenggunakan P0 dan P2 sebagai bus data dan bus alamat. P0 akanmenyediakan jalur data yang di-multipleks dengan jalur alamat orde rendah(A0 - A7), sedangkan P2 menyediakan jalur alamat orde tinggi (A8 - Al5).Konfigurasi pengaksesan memori eksternal ditunjukkan oleh Gambar 2.17(EPROM 64 KB dan RAM 32 KB). Konfigurasi ini memisahkan anraramemori program (EPROM) dengan memori data (RAM). Kendali sinyal baca
IIPROM didapat dari pin PSEN sedangkan RAM mendapat sinyal baca dan
sirryal tulis <lari pin I,3.7 (RD) dan P3.6 (WR), sementara EPROM tidakrnt'ttrlupat sirryirl kr.rrtlirli trrlis. I'irr l,A tlihubungkan kc CND sehingga 8051
D-'LATCH -
lfq\/CLA
30 Teknik Antarmuka dan Pemrograman l,likrokontroler AI89552
hanya akan melaksanakan perintah-perintah yang tersimpan di EPROMeksternal.
P0, selain dihubungkan dengan jalur data EPROM dan RAM, iug"dihubungkan dengan masukan latch agar alamat orde rendah (A0 - A.7) yangdikeluarkan oleh P0 bisa dipisahkan dari jalur data. Pada saat P0
mengeluarkan alamat orde rendah yang valid, ALE akan memberikan pulsasehingga IC Latch akan menyimpan alamar ini dan memberikannya ke jaluralamat EPROM dan RAM. Bersamaan dengan iru, P2 akan mengeluarkanalamat orde tinggi (A8 - A15) yang secara langsung terhubung dengan jaluralamat EPROM dan RAM.
FSEN- akan diaktifkan 2 kali setiap satu siklus mesin saat membaca program
dari EPROM eksternal. Saat FSEN aktif, EPROM akan mengeluarkan data
yang diterjemahkan sebagai perintah yang harus dijalankan olehmikrokontroler. Tanda garis di atas "PSEN" memperlihatkan bahwa pada saat
aktif PSEN akan berada pada kondisi logika rendah. Pada saat mengakses
RAM, PSEN akan tidak aktif (berada pada logika tinggi). Penulisan ke RAM
dilakukan dengan mengakti{kan sinyal tulis (RD- =1 dan Wn =Ol, CPU akanmengirimkan data ke RAM setelah terlebih dahulu mengirimtan alamatRAM yang akan dituliskan. Sementara itu, pembacaan dilakukan dengan
mengakti{kan sinyal baca (RD=0 dan Wn=t), CPU akan memberikanalamat RAM yang akan dibaca, mengaktifkan sinyal baca dan membaca dataRAM dari jalur data.
P08/}'D0p0.l/ADlPO}AD2P03/tD3P0.{i.frD{POJ/ADJPO6/AD6DOlIADT
AIE
P2S/A8P7,LIAg
D2:/Al0p23il,llP2r/Al2P2JA,l3P26/Al+P2.?iAIJ
Anitektur l{ikrolontroler 8{15 I
Scmbor 2.17 8051 llengokses [PR()M dom RA[4 [kslernol
2.4.3 ANTAR,YIUKA PORT DENGAN PERANGKATTUAR
Driver ouput P1, P2, dan P3 bisa menangani sampai 4 masukan TTL,
sedangkan P0 bisa rrenangani sampai 8 masukan TTL dengan pullup
eksternal. Apabila dalam sebuah aplikasi, 8051 diharuskan untuk menangani
TTL lebih dari yang disarankan, maka diperlukan sebuah buffer digital agar
level digital tidak berubah. Tetapi transfer data bisa meniadi lambat karena
"tunda-rambatan" Qropagation delay) pada IC buffer.
Selain itu, output port 8051 iuga bisa memberikan bias ke basis transistor
atau gate sebuah FET. Pada saat port mengeluarkan data "1" akan terjadi
pembagian tegangan antara resistor pullup (internal atau eksternal) dan
resistor basis sehingga tidak disarankan sebuah port dipakai untukmenggerakkan lebih dari satu buah basis transisor kecuali dengan buffer.
Buffer masukan port pun bisa langsung dihubungkan dengan ouPut TTL. Pl,P2 dan P3 yang memunyai pullup internal bisa membaca outPut TTL
kolektor terbuka atau drain terbuka, sementara P0 memerlukan pull-up
3l
32 Ieknik Antarmuka dan Pemrograman llikrokontroler AI89SS2
eksternal untuk melakukan hal ini. Karena adanya pull-up internal pada pl,P2 dan P3 ketika menerima masukan "0", maka port-port ini akanmengalirkan arus yang dinamakan sebagai arus Lr dalam lembaran data. p0yang tidak memunyai pull-up internal pada saat difungsikan sebagai portserbaguna akan menjadi port yang mengamban g (float) pada saat bekerjasebagai port input.
Gambar 2.18 memperlihatkan bagaimana menghubungkan go5l denganperangkat luar. P0.0 - P0.3 difungsikan sebagai outpur dan dihubungkandengan sebuah register geser (74164). p0.5 dipakai untuk membaca saklar(sebagai input). Semua pin P0 yang dipakai ini dilengkapi dengan resistorpull-up. P2.4 difungsikan sebagai output untuk menggerakkan rransisrordriver LED. Pada saat "1" dituliskan ke p2.4, transisror akan mendapat biasdan menjadi aktif sehingga arus mengalir dari vCC dan menyalakan LED.sementara ketika "0" dikirimkan ke p2.4, transisror akan mati dan LED punpadam. Pl.7 yang dihubungkan ke sebuah resisror dan LED merupakan caralain untuk mengendalikan LED. pada saat "1" dituliskan ke p1.7 FET, driveroutput P1.7 akan mati sehingga arus dari vCC tidak bisa mengalir ke LEDdan LED pun mati. Pada saat "0" yang dikirim, arus akan mengalir dari vcc rmelalui FET driver output P1.7, LED pun menyala. Ketika menggunakan caraini, harus diperhatikan agar arus yang mengalir untuk menyalakan LED tidakmelebihi kemampuan driver ourpur port. p3.0 difungsikan untuk membacasaklar. cPU akan membaca "1" ketika saklar terbuka karena adanya pull-upinternal dan akan membaca "0" ketika saklar tertutup (terhubung ke ground).Arus akan mengalir melalui pull-up internal ke ground.
Perlu diperhatikan pula, 8051 srandar ditenagai oleh tegangan 5 volt.Beberapa aplikasi mengharuskan 8051 dihubungkan dengan sistem yangmemakai tegang,an 3.3 volt, misalnya. pada keadaan seperti ini diperluka,sebuah rangkaian pengubah level digital (biasanya menggunakan bufferdigital) karena level digital sistem dengan tegangan 5 volt akan berbedadengan level digital dengan sisrem yang memakai tegangan 3.3 volt.
Arsitektur llikrokontroler 805 I tl
2.5
Gombor 2.18 Porl lnpul/Oulpul 8051
OPERASI TIMER
Timer 8051 terdiri atas 2 buah register 8 bit TLx dan THx (x=0 untuk Timer 0
dan x=l untuk Timer l) yang dihubungkan secara kaskade membentukregister 16 bit. Timer 16 bit ini dikendalikan oleh 2 SFR, TCON dan TMOD,yang mengatur mode kerja dan aktif-tidaknya Timer.
Secara sederhana Timer bekerja sebagai berikut. Register TLO dan THO
merupakan register pencacah (counte) pulsa dengan sumber pulsa yang bisa
dipilih, dari frekuensi osilator yang telah dibagi 12 atau dari sumber pulsa
eksternal melalui pin T0 (fungsi alternatif untuk pin P3.4). Pemilihan sumber
pulsa dilakukan oleh bit C/T yang ada di SFR TMOD. Mengeset bit ini akan
membuat TLO dan THO menghitung pulsa dari sumber luar (T0) dan Timer 0
bekeria sebagai pencacah, sedangkan me-reset C/T akan memfungsikan
Timer 0 sebagai pewaktu (rintefl, sumber pulsa diambll dari l/12 frekuensi
osilator. Pada saat penggantian mode kerja (dari pewaktu ke pencacah atau
sebaliknya), Timer harus dimatikan terlebih dahulu dengan membuat TR0=0:
kalau tidak,'[imer akan bcrada pacla keaclaan yang tidak bisa diperkirakan.
Po.D/ADo P1.0./p8P0.r/ADl P2.r/A1PU.l/AD: P2.2/Al[P0.3r'AO3 P?.3/Al IP0..f*D4 P2..V.{r2P0.5.iAO5 Pi.f/At:!P0.6JAO6 P!.&/AJ4PO.?/ADI P?.?,AI5
P3.0/EX0P3.rGg
P3.?/tNrUP3.r/iFTi
P3.4rT0P3.r].rl
Ps.EiUEPi,TJRO
XI ALEta PsEll
aRST
!Ef,
00AulBO: CLKD3 CLR[4rl5OBat
34 Ieknik Antarmuka dan Pemrograman tlikrokontroler AI89I5I
Gombor 2.t 9 Elok Diogrom Iirner 0
Bit GATE register TMOD dan bit TRO register TCON mengendalikan apakah
Timer aktif atau tidak. Mengeset TRO tidak akan mengubah data yangtersimpan di register TLO atau TH0. GATE=O dan TR0=1 akan rnengaktifkanTimer dan TLO dan THO akan mulai mencacah. Bit GATE yang telah dibalile
akan di-OR-kan dengan pin P3.2 (INTO). Ini berguna agar Timer bisa
dikendalikan dari luar. Dengan membuat GATE=I, keluaran gerbang ORakan ditentukan oleh pin P3.2. Ketika P3.2=1 dengan tetap mempertahankanTR0=1, Timer akan bekerja dan saat P3.2=0 Timer akan berhenti bekerja. ladiP3.2 (INTO- ) dan P3.3 (INII ) memunyai fungsi alternatif lain (selain sebagai
sumber interupsi eksternal), yaitu sebagai pengendali Timer dari luar denganmembuat GATE=I. Kendali luar ini bisa dimanfaatkan unruk pengukuranlebar pulsa sebuah sinyal.
Begitu Timer diaktifkan, TLO akan mulai menghitung. pulsa yang diterimaolehnya, baik pulsa dari sumber eksternal atau dari osilator. Sebagai register 8bit, TLO akan mencacah dari 00H - FFH (256 cacahan). Pada saat nilaicacahan rnencapai FFH, maka pada pulsa berikutnya TLO akan mengalamioverflow. Cacahan TLO akan dimulai lagi dari 00H. Selain itu, TLO akanmemberikan pulsa ke THO dan THO pun mulai melakukan pencacahan.
Seperti halnya TLO, THO pun akan melakukan pencacahan dari 00H - FFH.
Cacahan maksimum yang bisa dilakukan oleh Timer adalah FFFFH (65536
cacahan). Setiap kali cacahan Timer mencapai FFFFH, maka pada pulsa
berikutnya Timer akan mengalami overflow dan interupsi Timer akan
Anitektur llikrokontroler 805 I
dibangkitkan. Cacahan akan kembali ke 0000H dan bit TFO register TCONakan di-set. Selain itu interupsi Timer 0 akan dibangkitkan. Isi TLO dan THO
bisa dibaca kapan saja untuk mendapatkan hasil pencacahan yang sedang
berlangsung. Selain itu, data bisa dituliskan ke register-register ini untukmenentukan nilai pencacahan awal, tentu saia Timer harus dimatikan
terlebih dahulu.
Cara pencacahan pulsa yang dilakukan oleh register TLx dan THx ditenrukanoleh mode kerja Timer. Bit M0 dan Ml register TMOD mengatur mode kerja
Timer. Ada 4 mode yang bisa dipilih: mode 0, 1, 2 dan 3. Mode keria iniberlaku untuk Timer yang difungsikan sebagai pencacah atau sebagai timeritu sendiri. Software harus menentukan mode kerja Timer terlebih dahulusebelum mengaktifkannya. Mode 0, 1, dan 2 bisa diterapkan pada kedua
Timer, sedangkan mode 3 hanya bisa diterapkan kepada Timer 0.
Dengan 4 mode yang bisa dipilih, Timer 8051 bisa dipakai untuk aplikasi
software yang memerlukan pewaktuan, misalnya:
1. Sebagaijam digital
2. Pembangkit baud rate port serial (khusus untuk Timer 1)
3. Pembangkit sinyal modulasi lebar pulsa (PWM = pulse widthmodulation)
4. Pengukuran lebar pulsa dan frekuensi
2.s.1 ,vloDE o
Mode 0 memfungsikan Timer sebagai pencacah 13 bit. Mode ini dipilihdengan membuat bit Mx1=0 dan Mx0=0 yang ada di SFR TMOD. Timer
diaktifkan dengan membuat TRx=l dan GATEx=0 atau tltl-f*=t. Sumber
pulsa dipilih oleh bit C/Tx (seperti telah ditunjukkan oleh Gambar 2.19 untukTimer 0).
Sebagai pewaktu 13 bit, Timer akan mengalami overflow setelah menerima
pulsa sebanyak 2r:ratau 8192. Dengan frekuensi osilator 12MHz, Timer akan
mengalami overflow setiap 8192 mikrodetik. Register THx akan beroperasi
penuh sebagai register 8 bit, sementara TLx hanya difungsikan sebagai
reg,ister 5 bit (3 bit atas register TLx diabaikan). Sebagai register 5 bit, TIxakan berfung,si sebag,ai pra-skalar 32 (2\) dan akan mengalami overflowsetelah ll2 pulsa. Setiap kali 'flx overflow, reg,ister TI-lx akan diperbarui dan
35
36 Teknik Antarmuka dan Pemrograman llikrokontrohr AIBSSI2
THx akan mengalami overflow setelah 256 pulsa. Timer akan mengalamioverflow setelah 32x256 atau 8192 pulsa.
Mode 0 bisa diterapkan kepada kedua, Timer 0 dan Timer l.
2.5.2 MODE I
Mode 1 mempunyai cara kerja yang sama dengan mode 0, perbedaannya,
pada mode I register Timer (TLx dan THx) bekerja sebagai register g bitpenuh yang dikaskade membentuk register Timer 16 bit. Mode ini dipilihdengan mengatur bit Mxl=0 dan Mx0=1.
sebagai pewaktu 16 bit, Timer akan mengalami overflow setiap 216 atau 65536pulsa. seperti halnya mode 0, mode I juga bisa diterapkan untuk Timer 0 atauTimer 1.
2.s.3 MODE 2
Mode 2 memfungsikan Timer sebagai register 8 bit (TLx) sedangkan registerTHx menyimpan data yang ditentukan oleh software. Setiap kali rlxmengalami overflow, secara otomatis data yang ada di register THx akandipindahkan ke register Tl,x (auto-reloa@. Timer akan memulai prosespencacahan lagi dengan cacahan awal ditentukan data yang dipindahkantersebut. Data THx tidak akan berubah karena proses pemindahan ini, selainitu data THx bisa diganti secara software pada proses auto-reload berikutnya.Jadi, Timer akan mengalami overflow setelah melakukan pencacahansebanyak (256 - THx). Dengan demikian, laju Timer bisa dihitung denganpersamaan berikut.
Timer yang difungsikan sebagai pewaktu, laju overflow adalah
Laju Overflow =Frekuensi Osilator
12x(256-THx)
Arsitektur l'likrokontroler 805 I
Gombor 2.20 iimer 0 Eekerio podo Mode 2
Sedangkan Timer yang beroperasi sebagai pencacah sinyal dari luar, lajuoverflow adalah
Laju Overflow =Frekuensi Sinyal Luar
(256 - TI{x)
Mode 2 dipilih dengan mengatlrr bit Mxl=l dan Mx0=0. Mode 2 juga bisa
diterapkan kepada Timer 0 atau Timer 1.
2.s.4 MODE 3
Berbeda dengan mode-mode sebelumnya, mode 3 hanya berlaku pada Timer0. Pada dasarnya, mode 3 akan memfungsikan TLO dan THO sebagai register 8bit yang terpisah. TLO dikendalikan oleh bit-bit TMOD dan TCON pengarurTimer 0 (GATE0, C/T0, TRO dan TF0) dan bisa difungsikan untukmenghitung pulsa yang berasal dari sumber luar (dari pin T0) atau pulsa dariosilator internal (sebagai pewaktu atau percacah) dan akan membangkitkaninterupsi Tirner 0 setiap kali mengalami overflow. THO hanya bisadifungsikan sebagai pewaktu (pulsa berasal dari osilator internal). Register inidiatur oleh bit-bit TCON pengatur Timer 1 (TRl dan TFl) dan akanmembangkitkan interupsi Timer I setiap kali mengalami overflow. Mode 3
dipilih dengan mengatur bit Mxl=l dan Mx0=1.
l7
38 Ieknik Antarmuka dan Pemrognman l'likrokontroler AI89S52
Gomhor 2.21 limer Bekerjo podo Mode 3
Pada mode 3, interupsi Timer I (TFl) dipakai oleh register THO (Timer 0).
Walaupun demikian, Timer 1 masih bisa digunakan, misalnya sebagai
pembangkit baud rate port serial atau aplikasi lain yang tidak memerlukaninterupsi Timer. Timer 1 akan berhenti bekerja pada saat diaktifkan pada
mode 3. Secara singkat bisa dikatakan ketika Timer 0 bekerja pada mode 3,
8051 akan terlihat memiliki 3 Timer, 2 buah timer 8 bit (dengan 2 sumber
interupsi) dan Timer I tanpa sumber interupsi.
2.6 OPERASI PORT SERIAT
Mikrokontroler 8051 dilengkapi dengan sebuah port serial yang mendukungkomunikasi serial asinkron (UART= universal asyncrhronus receiver/transmitter). Dengan port serial dupleks penuh dan baud rate yang bisa
diprogram sesuai baud rate standar, port serial 8051 bisa dengan mudah
dihubungkan dengan port serial sebuah komputer. Tentu saja setelah melaluiantarmuka RS-232. Selain itu, port serial iuga bisa digunakan untukberkomunikasi dengan perangkat-perangkat lain atau dengan 8051 lain dan
membenruk iaringan mikrokontroler 8051. Port serial ini diatur oleh SFR
Arsitektur l'likrokontroler 805 I
SBUF (serra.l bulfer) dan SCON (serial control). Timer 1 digunakan sebagai
pembangkit baud rate.
SBUF merupakan register tempat di mana byte-byte data dikirirnkan dan
diterima. Menuliskan byte data ke SBUF berarti mengirimkan data serial
melalui pin TXD yang merupakan fungsi alternatif pin P3.1. Begitu juga
membaca data dari SBUF berarti membaca data serial yang diterima oleh pinRXD yang merupakan fungsi alternatif pin P3.0. Walaupun SBUF hanyamenempati satu alamat, tetapi struktur hardware SBUF memisahkan antara
buffer pengiriman dengan buffer penerimaan sehingga pengiriman danpenerimaan data bisa dilakukan secara bersamaan. Dengan demikian, portserial 805i mendukung komunikasi serial dupleks penuh (full duplex). Selain
itu SBUF dirancang sehingga bisa menerima byte data kedua sebelum bytepertama selesai dibaca. Tetapi saat byte kedua selesai diterima, sedangkan
byte sebelumnya belum dibaca, byte pertama akan hilang.
Register SCON berisi bit-bit yang mengatur mode kerja port serial dan bitstatus pengiriman dan penerimaan data. Ada 4 mode kerja yang bisa dipilih:mode 0, 1, 2 dan 3. Pemilihan mode kerja ini dilakukan dengan memprog,ram
bit SMO dan SM1. Bit TI merupakan bit status pengiriman data serial. Bit iniakan di-set bila byte data telah lengkap dikirimkan. RI merupakan bit status
penerimaan data dan di-set bila byte data telah lengkap diterima. TI dan RI
akan membangkitkan interupsi port serial. Bit REN akan mengatur apakah
port serial akan menerima data atau tidak. REN=I akan mengaktifkanpenerimaan data serial dan REN=O port serial akan mengabaikan byte data
yang diterirnanya. Bit RB8 dan TB8 merupakan bit data ke-9 yang diterimadan dikirimkan pada mode 2 dan 3. Sedangkan bit SM2 akan mengatur fungsi
komunikasi multiprosesor.
Baud rate yang akan menentukan kecepatan pengiriman dan penerimaan data
pada mode 0 ditetapkan 1/12 frekuensi osilator. Pada mode I dan mode 3baud rate diatur dengan memfungsikan Timer I sebagai pembangkit baud
rate. Baud rate mode 2 bisa dipilih l/32 arau 1/64 frekuensi osilator. BitSMOD register PCON juga mengatur baud rate port serial. SMOD=I akan
menggandakan baud rate.
l9
40 Ieknik Antarmuka dan Pemrograman Mikrokontroler AI89552
2.6.1 MODE KERJA PORT SERIAL
Port serial 8051 memiliki 4 mode kerja dengan memprogram bit-bit SMI dan
SMO register SCON. Mode 0 memfungsikan port serial sebagai register geser(shift register). Data dikirim dan diterima melalui pin RXD, sedangkan pinTXD akan mengirimkan sinyal clock penggeser. Mode l, 2, dan 3 merupakanmode serial UART. Data dikirimkan melalui pin TXD dan diterima melaluipin RXD dengan bit start 6tart bid dan bit stop (stop 6rr). Mode I akan
mengirimkan l0 bit data, 1 bit start (0), 8 bit data dan satu bit stop (1). Mode2 akan mengirimkan 11 bit, I bit start (0),9 bit data dengan bit ke-9 yangakan dikirim ditentukan oleh bit TB8 register SCON dan I bit stop (l). Mode3 pada dasanya sama dengan mode 2, bedanya baud rate mode 2 ditetapkan7/32 atat l/64 frekuensi osilator sedangkan baud rate mode 3 lebih bervariasi(dengan memprogram Timer 1).
2.6.1.1 Mode O
Seperti telah dijelaskan, mode 0 memfungsikan port serial sebagai registergeser yang sesuai dengan komunikasi serial sinkron, di mana byte data
dikirim (digeser) bit demi bit yang disinkronkan oleh sinyal clock sin-kronisasi. Pin RXD akan menyediakan jalur data untuk pengiriman danpenerimaan, sedangkan TXD mengirimkan sinyal clock sinkronisasi. Baud
rate tetap pada l/I2 frekuensi osilator.
Pengiriman data dimulai dengan perintah penulisan ke register SBUF(perintah mov SBUF, A). Sinyal "WRITE TO SBUF" akan menulis "l" ke bitke-9 dari register geser pengirim dan memberi perintah ke bagian KENDALITX untuk mempersiapkan pengiriman data. Satu siklus mesin berikutnyaSEND akan menjadi aktif (logika tinggi) dan mengaktifkan fungsi alternatifRXD sebagai pengirim data dan TXD sebagai pengirim sinyal clock.
Data dikirimkan dengan bit LSB terlebih dahulu. Setiap kali bit digeser ke
kanan,0 akan muncul di kiri (D0 akan digeser dan dikeluarkan melalui RXD,maka Dl menjadi D0, D2 menjadi Dl dan seterusnya sampai D7 menl'adi D6sedangkan D7 akan diisi 0). Setelah semua bit data dikeluarkan (digeser),
KENDALI TX akan menonaktifkan SEND (logika rendah) dan menset TIyang dilakukan setelah 10 siklus mesin setelah sinyal WRITE TO SBUF.
Software harus mereset TI agar proses pengiriman data selanjutnya bisa
dilakukan.
Arsitektur llikrokontroler 805 I 1r
STAF,T SHIFTI{NNDAI,JTX
TXCLOCK TI SER'D
P.J(CLOCH RI RECEIIE
1)O (CLOCH)
FUI.IBSI ALT. P3-1
Gombor 2.22 Port Seriol podo Mode 0
Pin TXD akan mengeluarkan sinyal clock sesaat setelah SEND aktif. Sinyalclock ini akan berada pada logika rendah selama periode s3, 54 dan 55 setiapsiklus mesin dan berada pada logika tinggi selama periode s6, sl, dan s2setiap satu siklus mesin atau satu periode TXD akan sama dengan satu siklusmesin. Satu siklus mesin 8051 memerlukan 12 periode sinyal clock osilator(pada diagram waktu ditunjukkan dengan sr - s6 dengan Sx = 2 x periodeclock osilator). oleh karena itu, TXD akan memiliki frekuensi 1/12 frekuensisinyal osilator.
Proses penerimaan data diawali dengan membuat bit REN=I dan RI=O (diregister scoN). Data 11111110 akan dituliskan ke register g,eser input. padafase clock berikutnya sinyal RECEIVE menjadi aktif (logika tinggi), yangakan rncngakrifka, sinyal clock di rXD. setelah l0 siklus mesin, semua bitdata tlit.rir,a. Patla kt.arlaan ini RIiCEIVI.i akan dirnatikan (logika rendah)
1t Ieknik Antarmuka dan Pemrograman l'likrokontroler AT89552
dan bit RI di register SCON akan di-set. Data serial yang diterima diperoleh
dengan melakukan pembacaan register SBUF dan software harus mereset Rl
agar penerimaan data selanjutnya bisa dilakukan. .
$nilflll[ltlilllllf]ft
TI
DO(CLoC()
DIAGRAM WAKTU TJENERIMAAN DATA
Gombor 2.23 Diogrom Woklu Porl Seriol Mode 0
2.6.1.2 Mode I
Mode I memfungsikan port serial sebagai media komunikasi serial asinkron(UART). Komunikasi serial UART tidak diikuti oleh sinyal clock sebagai
sinkronisasi antara pengirim dan penerima. Komunikasi diawali dengan bitstart (srarr Drr) diikuti oleh byte data dan diakhiri oleh bit stop (stop bir).
Mode 1 adalah komunikasi UART dengan 1 bit start, 8 bit data dan 1 bit stop
sehingga 10 bit akan dikirimkan dan diterima pada mode ini. Standar untuk
bit start adalah 0 dan bit stop adalah 1.
Seperti halnya mode 0, pengiriman dipicu oleh perintah penulisan data ke
register SBUF dan I akan dituliskan sebagai bit ke-9 register geser pengirim.
KENDALI TX akan mengaktilkan sinyal SEND dan mengeluarkan bit start
pada pin TXD. Kemudian sinyal DATA akan aktif (DATA=l) sehingga
register g,eser yang ada di register SBUF pengirim akan mulai mengirimkan
o*ss$rsars*ssofsrsaswsrCIfrsaes*cs$rsasls*ssalsrserl*ss,$rsrsls+sr,rfrsmsrsssSsrus*sss{crseslsrssopsmsrcs$r
DICRAM WAKTIJ PENGIRIMAN D ATA
RI
Arsitektur Hikrokontroler 805 I
data. Kecepatan pengiriman arau baud rate (TX clocK) ditentukan oleh lajuoverflow Timer I (1/16 laju overflow Timer I karena melewati pembagi 16).Pengiriman diakhiri oleh sebuah bit stop. sinyal SEND akan menjadi tidakaktif dan bit TI di register scoN akan diset untuk membangkitkan interupsi.Software harus mereset TI agar proses pengiriman data selanjutnya bisadilakukan.
Gombor 2.24 Port Seriol Mode I
Penerimaan data dilakukan dengan mendeteksi adanya transisi dari 0 ke Ipada pin RXD. Pendeteksian dilakukan dengan mencuplik (sampling) pinRxD 16 kali setelah baud rate ditentukan. saar terdereksi adanya transisi,pembagi 16 akan direset (0000H) dan data IFFH akan dituliskan keREGISI'ER GESER INPUT. Hal perrama yang dilakukan adalah mendeteksibit start ya.g valid (bit start = 0). Untuk menghilangkan gangguan derau(trcise) dan kesalahan bit start, pencuplikan dilakukan 2 sampai 3 kali. JikaProst's valitlasi bit start sclesai, bit start akan digeser ke REGISTER GESERlNl'tl'l'tllrr tlilaniutkan tlcrrgarr pcrnba<.aan hir bit clata dan bit stop.
{}
rranr xrmAuu ,ff
PHASE 2 CLOCK(1/2Fosc )
srART xruoltrrx
P.J( CLOCK RI LOAD SELIT
ARr KEND-ILIRX
44 leknik Antarmuka dan Pemrograman ilikrokontroler AI89t51
Pada saat proses penerimaan selesai, data akan masuk ke SBUF dan bit stop(1) akan dipindahkan ke bit RB8 di register SCON, sementara bit RI diregister SCON akan diset dan interupsi port serial akan dibangkitkan. Prosesini akan terjadi apabila bit RI sebelumnya 0, SM2=0 atau bit stop yan8diterima bernilai 0. Data serial yang diterima diperoleh dengan melakukanpembacaan register SBUF dan software harus mereset RI agar penerimaandata selanjutnya bisa dilakukan.
Gombor 2.25 tormol Doto Seriol Mode I
2.6.1.3 Mode 2Sepeni halnya mode l, mode 2 merupakan mode komunikasi serial UARTdengan 11 bit data yang dikirimkan atau diterima, 1 bit start (0), 9 bit datadan I bit stop (l). Bit ke-9 dari data yang dikirim bisa diprogram 1 atau 0 danbisa djgunqkan sebagai bit paritas untuk pengecekan kesalahan (errordetegsjsii. Baud rate ditetapkan pada 1/32 atau 1164 frekuensi osilator.
Pada dasarnya proses pengiriman data hampir sama dengan mode 1, bedanyabit ke-9 tidak diisi oleh 1, tetapi ditentukan oleh bit TB8 register SCON yangbisa fsmllai I atau 0. Bit ini bisa digunakan sebagai bit paritas untukpengecekan kesalahan dan bisa dihubungkan dengan bit P register PSW. P=1
kalau iumlah bit I dalam register A berjumlah ganjil dan P=0 kalau jumlah bitI genap. Sebelumnya diperlukan kesepakatan antara pengirim dan penerimamengenai bit paritas (dalam kasus ini paritas ganjil). Perintah di bawah iniakan rngngilimkan data dan bit paritas:
Arsitektur }likrokontroler 805 I
F.EAD
'rnuR --*r rJ"L
BUs TNTERMLTo-51 -.-
Gombor 2.26 PorI Seriol Mode 2
l'roses pengiriman akan selesai setelah bit ke-9 clan bit stop dikirimkan.lSagian KENDALI TX aka, menonaktifkan sinyar SEND dan bir TI akan diseruntuk membangkitkan interupsi port serial. Software harus mereset TI agardata selanjutnya bisa dikirimkan.
45
movmovmovmov
A, #DATAC, P
TB8, C
SBUF, A
Bit P dipindahkan ke bit TB8 melalui bit C karena perintah
mov TB8, P
akan membangkitkan pesan kesalahan pada assembler 8051. Oleh karena itu,bit P terlebih dahulu disimpan ke bit C baru dipindahkan ke bit TB8 registerSCON.
Gombor Z.2l tormst Doto Seriol rtrlode 2
froses penerimaan iuga sama dengan mode 2. Dimulai pendeteksia, transisi
dari 0 ke 1 di pin *,D dengan cara mencuplik pin RXD. Bit start pertama kaliyang diterima, kemudia, 9 bit data dan t bit stop. pada keadaan ini, dataakan dipindahkan ke sBUF penerima (g biQ, sedangkan bit ke-9 akan masukke bir RIlS regisrer scoN. Bagian KENDALI RX akan mengeser bir RI dannrenrharrgkirkarr irrrt'rrrPsi porr seriar. ilar ini .ffriF;hngsu,rg L"ir,, ri, nrlt
46 Ieknik Antarmuka dan Pemrograman llikrokontrohr AI89S51
sebelumnya 0, SM2=0 atau bit ke-9 = I (bit ke-9 harus bernilai 1 apabila
SM=l dan dipakai pada mode komunikasi multiprosesor untuk membaca byte
alamat prosesor slave)'
Data dibaca dengan memindahkan byte data dari SBUF ke register A ini akan
memperbarui bit P register PSW. Proses pengecekan kesalahan dilakukan
dengan membandingkan bit P dengan bit RB8. Kalau kedua bit berbeda,
berarti ada kesalahan pada data yang diterima dan penerima bisa meminta
agar pengirim mengirimkan kembali data yang bersangkutan. Software harus
seBera mereset bit RI agar data selaniutnya bisa diterima.
2.6.1.4 Mode 3
Mode 3 pada dasarnya sama dengan mode 2, hanya berbeda pada baud rate.
Mode 2 bekeria pada kecepatan 1/32 atau 1164 frekuensi osilator, sedangkan
baud rate mode 3 ditentukan oleh laiu overflow Timer 1'
RXCLOCK RI LOADSBUT
srarr rrMruH ,ffi
Oombor 2.28 ?otl Seriol podo llode 3
Aruitektur l'likrokontrohr 805 I
2.6.2 KOMUNIKASI MUTTIPROSESOR
Beberapa mikrokontroler 8051 bisa dihubungkan satu sama lain membentuksebuah jaringan. Salah satu mikrokontroler bertindak sebagai master yangmengendalikan seluruh sistem, sedangkan mikrokontroler yang lain ber-tindak sebagai slave. setiap slave memiliki 1 byte alamat yang unik (berbedasatu sama lain). Master akan mengirimkan byte alamat terlebih dahulusebelum mengirimkan byte data. Slave yang alamatnya sesuai akanmerespons dan mempersiapkan penerimaan data, sedangkan slave yang lainakan mengabaikan dan mengecek pengiriman alamat berikutnya. Hal ini bisadiwujudkan dengan memanfaatkan bit SM2 register SCON dan port serialmikrokontroler bekerja pada mode 2 atau 3.
Bit SM2 akan mengarur penerimaan data serial pada mode 2 dan 3. BilaSM2=0, maka penerimaan data serial akan dilakukan secara normal;sedangkan bila SM2=1, penerimaan data serial akan dilakukan pada saat bitke-9 data bernilai i.8051 akan mengabaikan data serial yang diterimanyapada saat sM=l dan bit ke-9 bernilai 0. Pada saat mengirimkan byte alamat,master akan membuat bit ke-9 atau bit TB8 bernilai 1. Semua slave, denganbit SM2=1, akan menerima byte alamat tersebur. Slave yang memunyaialamat yang sama dengan byte alamat yang dikirim master akan memper-siapkan untuk menerima byte data dengan cara membuat SM2=0, sementaraslave yang lain akan tetap mempertahankan sM2=1. Proses berikutnya masrerakan mengirimkan byte data dengan bit ke-9 atau TB8 bernilai 0. pada
keadaan ini hanya slave dengan bit SM2=0 (memunyai alamat yang sesuai)yang akan bisa menerima byte-byte data yang dikirimkan oleh master.Mikrokontroler slave yang lain akan mengabaikan kedatangan byte-byte datatersebut.
Port serial yang bekerja pada mode 0 tidak bisa memanfaatkan bit SM2 ini.Pada mode 1, bit SM2 bisa dipakai untuk memvalidasi bit srop. pada saarsM2=1, proses penerimaan tidak akan membangkitkan interupsi selama bitstop yang valid belum diterima.
2.6.3 TIMER I SEBAGAI PEMBANGKIT BAUD RATE
Scperti telah dijelaskan sebelumnya, baud rate unruk mode 1 dan 3<lilerrtukarr olch laju overflow 'l'irner 'l sehingga baud rate untuk mode ini
4t
48 Teknik Antarmuka dan Pemrograman Mikrokontroler AT89552
bisa bervariasi. Selain itu, bit SMOD juga akan menentukan apakah baud rate
dikali 2 atau tidak.
Timer 1 yang difungsikan sebagai pembangkit baud rate bekerja sebagai timer
pada mode 2 (auto-reloaa). Interupsi Timer t harus dinonaktifkan. Baud rate
mode I dan 3 ditentukan dengan persamaan:
Baud x (Laju Overflow Timer i)
mengacu pada Subbab 2.5.3 mengenai laju overflow Timer 1, baud rate
dihitung dengan persamaan:
lsMoD
32
?sMoDBaud Rate = a,
"Frekuensi Osilator
12 x (256-TH1)
fika baud rate diketahui, nilai TH1 bisa dicari dengan persamaan:
2sMoD x Frekuensi OsilatorTHi = 256 -
384 x Baud Rate
TH1 harus bilangan bulat, membulatkan TH1 ke nilai terdekat mungkin tidak
akan menghasilkan baud rate yang diinginkan. oleh karena itu, perlu
mengganti frekuensi osilator. Walau demikian, secara teori, jika pembulatan
itu menghasilkan baud rare yang menyimpang tidak lebih dari 2 o/o, maka
dalam banyak kasus masih bisa diterima.
Selain itu, bila Timer 1 bekerja pada mode 1 (timer 16 bit) dan interupsinya
diaktifkan, dapat diperoleh baud rate rendah. Tabel 2.4 memperlihatkan baud
rate yang biasa dipakai pada komunikasi serial'
Tobel 2.4 Boud Role dengon limer I
Baud Rate
(bps)
Foo"-
(MlIz)SMOD
THl(IIelra)
ModeTimer I
104200 20 1 FF 2
19200 I 1.059 FD 2
9600 r1.059 0 FD 2
4800 11.059 0 FA 2
Arsitektur tlikrokontroler 805 I
BaudRate
(bps)
'fod"*
MIz)SMOD
.THI
(He:ra)
Mode :
Timer 1
2m 11.0s9 0 F4 2
1200 11.059 0 E8 2
137.5 11.059 0 1D 2
ll0 6 0 72 2
110 6 0 FEEB 1
2.7 INTERUPSI
Pada banyak aplikasi kendali atau aplikasi lain, mikrokontroler diharuskanrnelayani permintaan dari luar dengan segera. permintaan layanan tersebutbisa diketahui dengan cara mikrokontroler menanyakan ke setiap sistemapakah sistem tersebut membutuhkan layanan atau sistem yang mernbutuh-kan layananlah yang akan memberitahu mikrokontroler. cara penamadisebut polling ata.o scanning, sedangkan cara kedua dinamakan inrerupsi.tjntuk aplikasi yang sangar kompleks, cara polling dirasa kurang efektif.walaupu, semua perminraan layanan akan dipenurri, terapi bisa terjadiketerlarnbatan karena sistem yang membutuhkan layanan harus menunggugiliran, semenrara yang tidak membutuhkan layanan tetap harus ditanya.l)engan cara interupsi, sistem yang membutuhkan layanan bisa dengan segera,reminta layanan ke mikrokontroler sehingga permintaan layanan bisarlilayani dengan cepat (secara real rrrne). selain itu, metode interupsi bisarrrcngurangi beban kerja mikrokontroler.
l)alam pemrograman, terjadinya interupsi akan mengakibatkan program me*r,a'ggil sebuah submtin dan rneninggalkan perintah yang sedang dikerjakan';r*rt itu (yang merupakan program utama), rnengerjakan perintah-perintah,lrrlarn subrutin tersebut dan setelah selesai kembali lagi ke alamat programr(',) r)at. terjadinya interupsi. proses pemanggilan subrutin ini tidak,likt',dalika, oleh prograrn (tetapi dikendalikan secara hardware) dan bisar.rjatli kaparr saja. llerbeda dengan perintah CALL yang secara eksplisit akan,r.rrrirrrggil st'lrtrrlr subrutin. subrutir.r yang akan dipanggil bila terjaditttl,'ttt;rsi tlitrrtlttitkittt tlt'ttgatt subt'trlin layarran interlrpsi atau interrupt serwce
49
routine(ISR), sedangkan alamat awal ISR dinamakan dengan vektor interupsi
(interrupt vecto).
2.7.t sunnBER INTERUPSI 8051
Mikrokontroler 8051 dilengkapi dengan 5 sumber interupsi, 2 sumber
interupsi eksrernal (melalui pin INTO dan IMI ), dan 3 sumber interupsi
inrernal (Timer 0, Timer I dan port serial). Register IE dan IP akan mengatur
interupsi mana yang diaktifkan dan interupsi mana yang akan mempunyai
prioritas lebih tinggi.
Interupsi eksternal dideteksi melalui pin INTO (interupsi eksternal 0) dan
pin iffil (interupsi eksternal 1) dan akan mengeset bit IEO dan IEl register
TCON bila terdeteksi adanya interupsi. InteruPsi eksternal bisa dibangkitkan
dengan cara mendeteksi logika 0 pada pin INTx (level acdvatedy atat transisi
dari 1 ke 0 pada pin iIffi (transition activated) yang diatur oleh bit ITx
register TCON. Apabila terjadi interupsi eksternal, bit IEO (untuk interupsi
eksternal 0) dan bit IEI (untuk interupsi eksternal 1) di register TCON akan
diset dan program akan memanggil ISR yang beralamat awal di 0003H untuk
interupsi eksternal 0 dan 0013H untuk interupsi eksternal 1- Perlu
diperhatikan pada saat interupsi diatur pada level-activated, pin iFffidihubungkan dengan bit IEx melalui pembalik logika (gerbang NOT). Setelah
semua perintah di iSR dikeriakan, Program akan kembali ke alamat di mana
interupsi terjadi.
Interupsi eksternal dikendalikan oleh bit EXO dan EXI register IE' Mengeset
bit-bit ini dkan mengaktifkan interupsi eksternal, dengan catatan, bit EA,
yang merupakan bit pengendali seluruh interupsi, iuga di-set. sedangkan bit
PXO dan PX1 register IP akan mengatur prioritas interupsi eksternal.
Mengeset bit ini akan membuat interuPsi eksternal memiliki prioritas
interupsi yang lebih tinggi.
Interupsi Timer 0 dan Timer 1 dibangkitkan oleh teriadinya overflow pada
Timer 0 atau Timer I yang bekerja baik sebagai timer atau counter pada
semua mode (mode 0, l, 2 atau 3). overflow Timer akan mengeset bit TFo
atau TF1 register TCON dan akan membangkitkan interupsi. Pada saat terjadi
interupsi Timer 0 dan l, program akan memanggil ISR yang beralamat di
000BH untuk Timer 0 dan 001BH untuk Timer l '
Anitektur llikrokontroler 805 I
Tr1
TI --J-\I \--RI _1__J
Gomhor 2.29 Sumber lnterupsiS05l
Interupsi Timer ini diatur oleh bit-bit ETO dan ET1 register IE. ETO akanmengatur interupsi rimer 0. Mengeset bit ini akan mengaktifkan interupsiTimer 0. Sedangkan ETl akan mengarur interupsi Timer I dan mengesetnyaakan mengaktifkan interupsi rimer 1. Prioritas interupsi rimer 0 dan 1 diaturoleh bit PTO dan PTl.
Interupsi serial akan dibangkitkan apabila salah satu bit RI atau TI di-ser,artinya terjadi pengiriman atau penerimaan dara serial pada semua mode portserial. Bit TI dan RI di-oR-kan sehingga salah satu saja bit-bit ini di-set akanterjadi interupsi serial. Saar terjadi interupsi serial, mikrokontroler akanmemanggil ISR yang beralamat di 0023H.
Bit ES register IE akan mengatur aktif tidaknya interupsi port serial. ES=lakan mengaktifkan interupsi port serial dan ES=0 akan mematikan interupsiport serial. Tentu saja bit EA harus di-ser juga agar interupsi port serial bisaterjadi. Prioritas pon serial diarur oleh bit PS register IP. PS=l akan membuatport serial memiliki prioritas yang lebih tinggi.
5l
t2 Teknik Antarmuka dan Pemrograman I'likrokontroler AI89552
Iobel 2.5 Veklor lnlerupsi 8051
Interupsi Bit Pembapgkit BitlmgaerVelaor
Interupsi
Elsternal 0
Timer0
rEO(TCON.o)
TFO(TCON.5)
rEl(TCON.3)
rr0 (rcoN.0)
EXo (rE.O)
Pxo gP:o)
ETo 0E.1)
Pro(rP:1)
rT1(TCON.2)
EXl(IE.2)
Px1(JP:2)
ETl (rE.3)
IrrlGP.3)
0003H
OOOBH
Eketernal I
Timer 1
Port Serial
0013H
TF1(rCON.7)
Rr (scoN.o)
Tr (scoN.l)
MlBH
0023HES 0E.4)
PS (rP.4)
2.7.2 MENGATUR PRIORITAS INTERUPSI
Aplikasi yang kompleks memerlukan semua sumber interupsi diaktifkan, hal
ini memungkinkan terjadinya lebih dari satu interupsi secara simultan. 8051
akan melayani interupsi yang terjadi bersamaan berdasarkan urutan prioritas.
Register IP akan mengatur urutan prioritas ini sehingga interupsi yang
memiliki prioritas yang lebih rendah bisa diatur untuk memiliki prioritas
interupsi yang lebih tinggi.
Ururan prioritas didasarkan pada cara 8051 menangani interupsi. 8051
mengetahui adanya interupsi dangan cara melakukan pengecekan pada setiap
bit pembangkit interupsi. Pengecekan ini dilakukan pada S5P2 setiap siklus
mesin (lihat subbab 2.8.1 untuk penjelasan mengenai S5P2). Apabila ter-
deteksi adanya 2 interupsi dengan prioritas yang berbeda ter;'adi secara
bersamaan, maka interupsi yang memiliki prioritas yang lebih tinggilah yang
akan dilayani. Sedangkan bila prioritas interupsinya sama, maka polling
internal akan menentukan interupsi mana yang akan dilayani. Ilrutan
prioritas interupsi 8051 ditentukan sebagai berikut:
Arsitektur 14ikrokontroler 805 I
l. Eksternal 0 (IE0)
2. Timer 0 (TF0)
3. Eksternal 1 (IEl)
4. Timer I (TF1)
5. Port serial (RI dan TI)
U^rtan ini bisa diubah dengan cara memprogram bit-bit register Ip sesuaidengan interupsi mana yang akan diprogram untuk memiliki prioritas yanglebih tinggi (Subbab 2.2.6.2 menjelaskan susunan bit register Ip).
2.8 OSITATOR DAN RESET
2.8.1 osttAToRFungsi dasar osilator adalah untuk menyediakan sinyal clock dan pewaktuanbagi semua perangkat internal 805r. Untuk menyediakan sinyal clock, bisadigunaka, rangkaian osilator inrernal araupun pembangkit sinyal crockeksternal. Pin-pin xrALl dan XTAL2 menyediakan fungsi osilator. XTALirnempakan masukan untuk penguat osilator i,ternal. Apabila digunakanpembangkit sinyal clock ekster,al, pin ini berfungsi sebagai masukan. pinXTAL2 dibiarkan mengambang.
Apabila dipakai osilator internal, maka sebuah kristal arau resonator keramikcligunakan sebagai penentu frekuensi sinyal clock dengan 2 buah kapasitor(c1 dan C2), seperti ditunjukkan oleh Gambar 2.3r. cl dan C2 biasanyalrernilai 30 pF bila kristal yang dipakai atau 47 pF bila resonator keramik yangdipakai' Nilai kapasiror yang sesuai bisa dilihat dari lembaran data yangtlikeluarkan oleh pembuar 8051.
]ffAL:
,]EFSAI.IG I]},I.:J5
53
SII,rrAL r\_'l:.llATL,R------] )CEI.,iTEFI.JAL I-{ -.
I
Gombor 2.30 805 1 Bcker;o denqon 0srlotor Ikslernol
Osilator akan menyediakan pewaktuan internal untuk perangkat-Perangkat
internal 8051, seperti Timer dan port serial. Dalam memakai Port serial,
pemilihan frekuensi kristal osilator sangat menentukan karena frekuensi
kristal menentukan baud rate yang bisa dihasilkan. Nilai 11.059 MHz paling
banyak dipakai karena frekuensi ini mampu menghasilkan baud rate standar
yang sering digunakan (seperti ditunjukkan oleh Tabel 2.4). Frekuensi 12
MHz banyak digunakan untuk operasi Timer. Seperti telah dijelaskan
sebelumnya, Timer yang difungsikan sebagai counter akan mencacah pulsa
dengan frekuensi 1/12 frekuensi osilator. Kalau frekuensi osilator adalah 12
MHz, maka frekuensi sinyal yang masuk ke counter adalah 1 MHz, artinya
register Timer (TLx dan THx) akan diperbarui setiaP 1 mikro detik'
software yang membutuhkan pewakruan, seperri rutin tunda (delay), akan
dipengaruhi oleh frekuensi kristal yang dipakai. Pemilihan frekuensi osilator
pun harus memperhatikan kemampuan 8051 yang dipakai karena 8051
mempunyai batas maksimum frekuensi osilator. Apabila frekuensi osilator
melebihi batas maksimumnya, 8051 tidak akan bekerja dengan baik.
Hal yang paling mendasar dari osilator sebenarnya adalah untuk menentukan
siklus mesin (machine cycle). Secara sederhana satu siklus mesin diartikan
sebagai waktu minimum yang diperlukan oleh mikrokontroler untuk
menjalankan satu perintah. Siklus mesin ini akan menentukan kecepatan
mikrokontroler (artinya seberaPa cepat mikrokontroler menialankan suatu
perintah). Satu siklus mesin 8051 terdiri atas 12 x periode frekuensi osilator
(dengan frekuensi 12 MHz, satu siklus mesin 8051 adalah 1 mikro detik). Satu
siklus mesin ini dibagi menjadi 6 state. Setiap state terdiri atas 2 fase di mana
setiap fase terdiri atas 1 periode osilator. Dalam diagram pewaktuan 8051,
siklus mesin ini diberi penomoran dari SlPl (State ke-1 fase ke-l) sampai
S6P2 (State ke-6 fase ke-2).
Aritektur ilikrokontroler 805 I
Gombsr 2.31 Rongkoion 0silotor dengon (ristol
Keluarga 8051 memiliki 255 perintah yang dikelompokkan menjadi lllkelompok perintah. Dari 255 perintah, 159 dikerjakan dalam saru siklusmesin, 51 perintah dikerjakan dalam 2 siklus mesin, 43 perintah dikerjakandalam 3 siklus mesin, dan 2 perintah dikerjakan dalam 4 siklus mesin. Karenahampir sebagian besar perintah 8051 dikerjakan dalam I siklus mesin, makadengan frekuensi osilaror 12 MHz, 8051 mampu mengerjakan 1 juta perintahdalam waktu I detik. Dengan demikian, bisa dikatakan bahwa 8051 memilikikecepatan I MIPS (milion instructions per second).
55
PO.O/ADO P!.O/ABP0.t/ABr P2.t/*8P0.2/AIl2 P7.7tAtfrP0.3/Am P2.3/Ar IP0.4/404 P?..lrAt2P0.5/AOf P2.5/At3PO.EI|AD6 P?.6/A14F0.7/AB? P2.7tA15
P3.0/RXtlP3. t/TXO
F3.2/iEmP3.3/tNTt
rc.4/rDP3.5nl
P3.fifdtr'RP3.?/Er
ALEPSE}I\,TCnsT
EA
Gombsr 2.32 Siklus ilesin 8051
56 Teknik Antarmuka dan Pemrograman Mikrokontroler AT89l52
Untuk aplikasi-aplikasi di mana pemakaian daya menjadi kritis (misalnya
aplikasi yang menggunakan baterai), 8051 memiliki fungsi untukpenghematan daya dengan mengatur bit PD dan IDL register PCON. Namun
hanya 8051 versi CMOS yang memiliki fungsi ini. Fungsi penghematan daya
ini dibagi menjadi 2 fungsi: fungsi power down danfungsi idle.
Fungsi power down diaktifkan dengan mengeset bit PD register PCON.
Power down akan mematikan fungsi osilator dan hanya sinyal reset yang
akan mengembalikan 8051 ke keadaan normal (PD=0). Sedangkan fungsi idle
diatur dengan mengeset bit IDL register PCON. Fungsi ini akan memutuskan
sinyal osilator ke CPU, tetapi tidak ke rangkaian interupsi, Timer dan port
serial. Interupsi (baik eksternal, Timer maupun port serial) dan sinyal reset
akan mengembalikan 8051 ke keadaan normal (IDL=O).
2.8.2 RESET
Sinyal reset untuk 8051 diterapkan pada pin RST yang merupakan pin dengan
masukan Schmitt tt'iger.8057 akan mereset apabila sinyal reset berada pada
logika tinggi minimal selama 2 siklus mesin (24 periode sinyal osilator).
Apabila 8051 menerima sinyal reset yang valid, 8051 akan menjalankan
program dari awal (alamat 0000H) dan mengisi register-register fungsi khusus
(SFR) dengan data reset seperti yang ditunjukkan oleh Tabel 2.2 (semua SFR
akan diisi 00H kecuali SP diisi 07H dan latch untuk semua port diisi FFH)'
RAM internal tidak dipengaruhi oleh reset dan tetap menyimpan data
sebelum reset diterima.
VCC
10rrE
Gombor 2.33 Rongkoion Reset 8051
Arsitektur l'likrokontroler 805 I57
Saat pertama kali catu daya diberikan kepada g051, sinyal reset juga harusdiberikan kepada 8051 Qtower oN resefl. Daram menjalankan program, g051akan membaca program yang tersimpan dalam memori p.ogru-, (internaratau eksternal). Alamat memori program mana yang harus dibacaditunjukkan oleh program counter (pc), yang pada dasarnya adalah memori.Isi PC tidak bisa diperkirakan pada saat perrama kali catu daya diberikan,seperti halnya RAM internar. Ini bisa mengakibatkan g05l tidakakan bekerjadengan baik. Tetapi pada saat di-reset, pc akan mempunyai data 0000H. SFRyang mengatur perangkat-perangkat internal juga akan diisi data sehinggaTimer, port serial, dan interupsi berada dalam keadaan tidak aktif, karena itutidak mengganggu jalannya program. perangkat-perangkat internal harusdiatur secara software. oleh karena itu, g051 harus mendapat sinyal reset saatcatu daya diberikan agar 8051 menjalankan program dari alamat awal(0000H)' dan program assembler harus diawali di aramat 0000H.
Rangkaian reser ini dibangun oleh sebuah kapasitor dan sebuah resisror,walaupun pada versi cMos resistor tidak diperrukan. Kapasitor akanmenghubungkan pin RST dengan yCC Qtult up), sedangkan resistor akanmenghubungkan pin RST dengan GND (przl1 down). pada saat pertama karicatu daya dinyalakan, akan terjadi proses pengisian kapasitor yang akanmembuar pin RST akan berada pada posisi vcc. proses pengisian ini haruscukup lama untuk mereset 805r. Lamanya waktu yang diperlukan adalahbeberapa mili detik untuk menunggu osilator stabil ditambah 2 siklus mesinuntuk memastikan 8051 menerima sinyal reset.
58 Ieknik Antarmuka dan Pemrognman l{ikrokontroler AT89552
BAB 3M T KROI(ONTROIER AT89'5I
AT89S52 merupakan mikrokontroler yang dikembangkan dari 8051 standar(semua pin dan instruksi assembler sesuai dengan standar 8051) oleh AtmelCorporation. Mikrokontroler ini dirancang dengan teknologi CMOS danmemori non-volatile dari Atmel dengan memori program internal (memoriflash) sebesar 8 KB yang bisa diprogram dalam sistem (In-systemprogrammable llash memory-ISP). Penambahan fitur dari mikrokontrolerstandar di antaranya:
1. Memori flash 8 KB yang bisa diprogram ulang sampai 1000 siklusbaca/tulis
2. Fungsi penguncian memori program Qrognm memori ,Ioc*) untukmemproteksi isi memori program internal
3. Bekeria pada frekuensi sampai 33 MHz
4. RAM internal sebesar 256 byte
5. Penambahan Timer 2
6. Timer Watchdog yang bisa diprogram
7. Dua data pointer (DPTR)
8. 8 sumber interupsi
9. Fungsi-fungsi penghematan daya Qnwerdown mode)
Dengan penambahan fungsifungsi di atas, AT89S52 merupakanmikrokontroler yang cukup andal untuk aplikasi-aplikasi sistem kendali atauyang lainnya. Memori flash internal sebesar 8 KB yang bisa diprogram ulangdalam sistem (ISP) memudahkan untuk merancang software sehingga
mungkin tidak diperlukan emulator.
Ieknik Antarmuka dan Pemrograman l'likrokontroler AT89l52
3.I SFR-sFR TAMBAHAN
SFR yang dimiliki oleh AT89S52 adalah
8051 (seperti yang dijelaskan pada Bab
tambahan yang ada Pada AT89S52'
SFR untuk fungsi-fungsi standar
2) dan SFR untuk fungsi-fungsi
Tobel 3.1 SfR Tombohon AI89S52
Sinbol Nama Register AIaDatDataReset
(biner)
DPlL Data Pointer bYte rendah kedua 84H 00000000
DPlH Data Pointer byte rendah kedua 8sH 00000000
ATIXR Register Auxilari 8EH no<00lot0
AI-IXR1 Register Auxilari 1 A2H nooooorO
WDTRST Register reset Timer Watchdog A6H )ooooooo(
T2CON Register kendaiiTimer 2 C8H 00000000
T2MOD Register kendali mode Timer 2 C9H >ooooo<00
RCAP2LRegister data caPture Timer 2 bYte
rerendahCAH 00000000
RCAP2HRegister data caPrure Timer 2 bYte
rerendahCBH 00000000
TL2 Register data Timer 2 bYte rendah CCH 00000000
TH2 Register data Timer 2 byte tinggi CDH 00000000
3.I.I DATA POINTER KEDUA
Data pointer kedua pada pinsipnya sama dengan data pointer 8051 standar'
yaitu dipakai untuk -".,g.k"' memori data eksternal' DPTR kedua ini
merupakan register 16 bit dan menempati alamat 84H (DP1L) untuk byte
,e.rdah dan 85H (DPIH) untuk byte tinggi' DPTR kedua ini dipilih dengan
memprogram bit DPS di register AUXRI' DPS=O akan membuat DPTR
p"r,"-ulurg akan dipilih dan DPS=1 yang dipilih adalah DPTR kedua'
I'likrokontroler AI89552
3.1.2 REGISTER PENGENDALI TIMER 2
Timer 2 dikendalikan oleh 2 register pengendali (T2CON dan T2MOD) dan 4
register data (TL2, TH2, RCAP2L dan RCAP2H). Register T2CON dan
T2MOD akan mengatur fungsi-fungsi Timer 2 dan juga menyimpan bit-bitstatus Timer 2. Sedangkan register RCAP2L dan RCAP2L membentukregister 16 bit untuk fungsi capture atat reload. TL2 dan TH2 berfungsi sama
seperti 8051 standar.
M5E
Tll Els? RCLK TCLH E)EI{: TR2 ci 1: CP/RL:
Gombor 3.1 Surunon flegisler I2(0N
TF2, merupakan bit status oveflow Timer 2. TF2 akan diset pada saat
Timer 2 mengalami overflow. TF2 harus di-reset secara software. TF2
tidak akan di-set apabila bit RCLK=1 atau TCLK=1.
EXF2, bit status yang memperlihatkan adanya transisi dari 1 ke 0 (transisi
negatifl pada pin T2EX (fungsi alternatif Pl.1) pada mode capture atau
reload. Bit ini akan diset apabila adanya transisi negatif dan bit EXEN2=ldan akan membangkitkan interupsi Timer 2. EXF2 juga harus di-reset
oleh software. EXF2 tidak akan membangkitkan interupsi pada modepencacah naik atau atrtn (up/down counte).
RCLK, bit yang mengaktifkan Timer 2 sebagai pembangkit baud rate portseriai pada saat penerimaan data yang bekerja pada mode I dan 3.
RCLK=l akan membuat baud rate ditentukan oleh laju overflow Timer 2.
Timer 1 akan dijadikan sebagai pembangkit baud rate apabila RCLK=O.
TCLK, bit yang mengaktifkan Timer 2 sebagai pembangkit baud rate portserial pada saat pengiriman data yang bekerja pada mode 1 dan 3.
TCLK=I akan membuat baud rate ditentukan oleh laju overflow Timer 2.
Timer I akan dijadikan sebagai pembangkit baud rate apabila TCLK=0.
EXEN2, bit yang akan mengaktifkan fungsi capture atau reload Timer 2
oleh transisi negatif pada pin T2EX. EXEN2=l akan mengatur fungsi pinT2EX sebagai sinyal capture atau reload Timer 2. EXEN2 tidak akan
berpengaruh pada saat Timer 2 difungsikan sebagai pembangkit baud rate
port serial.
6l
1.
2.
J.
4.
5.
6.
7.
62 leknik Antarmuka dan Pemrognman ilikrokontroler AI89552
TR2, bit yang akan menialankan amu menghentikan Timer 2 (fungsinya
sama dengan bit TRO atau TRI register TCOI$' TR2=1 akan menialankan
Timer 2 dan TR=0 akan menghentikan Timer 2'
ClTz, bit yang akan memilih fungsi keria Timer 2 sebagai timer
(menghitung pulsa dari osilator internal) atau sebagai counter
(menghitung pulsa dari sumber luar). OTI =1 akan memfungsikan Timer
2 sebagai counrer dan C/TI =0 akan memfungsikan Timer 2 sebagai
timer.
CP/RL2, bit pemilih mode capture amu reload' CP/RL2=l akan
mengaktifkan fungsi caprure Timer 2 pada saat ada transisi negatif pada
pin T2EX (dengan catatan bit EXEN=l)' CP/ED =0 akan mengaktifkan
fungsi reload secara otomatis pada saat Timer 2 mengalami overflow atau
ada transisi negatif di T2Ex (dengan syarat EXEN=I). Bit cP/RL2 tidak
berfungsikalauTimer2dipakaisebagaipembangkitbaudrateuntukportserial (RCLK=I atau TCLK=l).
MsE LsB
T2OE DCEN
Gombor 3.2 Susunon lcgi$er 12[100
9. Bit 2 - bit 7, tidak diPakai
10. T2OE, bit untuk mengaktifkan outPut Timer 2 (pin T2' fungsi alternatif
P1.0).T2oE=lakanmembuatT2sebagaikeluaranuntuksinyalclockyang dihasilkan Timer 2, sedangkan T2OE= 0 akan memfungsikan T2
sebag"i pin masukan clock untuk Timer 2 atau sebagai fungsi dasarnya
(port I/O).
11. DCEN (Down counter Enabte),bituntuk memfungsikan Timer 2 sebagai
counter naik atau rurun yang ditentukan juga oleh pin T2EX' DCEN=I
akan memftrngsikan Timer 2 sebagai counter naik atau turun' berganrung
pada pin T2EX. DCEN=0, Timer 2 akan berfungsi sebagai counter naik'
3.I.3 REGISTER.REGISTEN, AUXITARI
Register-register auxilari terdiri atas register AUXR dan AUXRI. Register
nuxn dipakai untuk mengatur Timer watchdog dan mengatur pin ALE'
sedang,kan AUXRI dipakai untuk memilih DffR mana yang, diaktiftan'
8.
llikrokontroler AI89S52
MSB LSB
V1IDIDLE DISRTO DISALE
Gombor 3.3 Susunon tegister AUIR
WDIDLE, merupakan bit pengatur mode idle Timer Watchdog (WDT).WDIDLE=I akan membuat WDT berhenti pada mode idle sedangkanWDIDLE=O akan membuat WDT tetap bekerja pada mode idle.
DISRTO, bit unruk mengatur pin RST. DISRTO=I akan membuat pinRST tetap sebagai pin masukan, sedangkan DISRTO=O akan membuat pinRST mengeluarkan logika tinggi setelah time-out WDT.
DISALE, bit untuk mengarur pin ALE, apakah pin ALE akan aktif padakeadaan normal (pada kecepatan 1/16 frekuensi osilator) atau hanya aktifsaat perintah movx atau movc dieksekusi. DISALE=0 pin ALE bekerjanormal, DISALE=I pin ALE hanya aktif pada saat mengeksekusi perintahmovx atau movc. Pin ALE pada kondisi normal akan mengeluarkan pulsasebesar 1/16 frekuensi osilator. Hal ini akan membuat pin ALEmengeluarkan radiasi elektromagnetik (EMI = electromagneticinterefence)- Mematikan fungsi ini (DISALE=I) akan mengurangi efekini.
Bit-bit yang lain tidak dipakai.
Gombor 3.4 Susunon Register AUXRI
Register ALIXR1 hanya I bit yang dipakai (DPS). Bit DPS dipakai unrukmemilih DPTR yang aktif. DPS=0 akan membuat DPTR perrama (sama
dengan 8051 standar) yang aktil sedangkan DPS=I akan memilih DPTRkedua.
3.1.4 REG|STER TTMER WATCHDOG (WDT)
Timer watchdog (WDT) dikendalikan oleh register WDTRST (beralamat diA6H). WDT diaktilkan dengan menulis lEH dan EIH secara berurutan keregister WDTRST. WDT akan membuar pin RST menjadi berlogika tinggipada saat WDT mengalami overflow. WDT juga dikendalikan oleh registerAT,IXR.
63
1.
2.
3.
4.
64 Teknik Antarmuka dan Pemrograman l.likrokontroler AT89552
3.2 STRUKTUR MEMORI AT89S52
Iu{em,m FrogramEksternal(55 KB)
FFF
I FFFH
0000H
Mem'a'i FrograrrrEkstEnral(64 KB)
+
C--.*'.**.lI tnternat (B KB) |
Gombor 3.5 Slruktur Memori Progrom AT89552
AT89S52, seperti halnya 8051 standar, bisa mengalamati memori Programsebesar 64 KB dan memori data sebesar 64 KB dengan adanya pemisahan
sinyal baca/tulis untuk memori program dan data. Alamat awal memori
program bisa berada pada memori program internal (AT89S52 memilikimemori program internal sebesar 8 KB) atau langsung ke memori Program
eksternal bergantung pada keadaan pin EA. fika pin EA dihubrngkan ke
VCC (berlogika tinggi), alamat awal memori program akan menempati
memori program internal (0000H-1FFFH), sedangkan alamat memori
program eksternal akan dimulai pada alamat 2000H-FFFFH, dan jika pin EA
terhubung ke ground (logika rendah), alamat awal memori program akan
berada pada memori program eksternal. Memori data 64 KB seluruhnya
merupakan memori data eksternal.
l'likrokontroler AI89552
Gombor 3.6 Struktur Memori Doto AT89S52
selain memori data eksternal, AT89s52 dilengkapi dengan RAM internalsebesar 256 byte. 128 byte awal merupakan RAM yang sama dengan g05lstandar, sedangkan 128 byte atas merupakan RAM internal tambahan.Alamat RAM internal tambahan menempati alamat yang sama dengan alamatsFR (80H - FFH).
F'A'M internal tambahan hanya bisa diakses dengan mode pengalamatan taklangsung (indirect addressing). Mengakses alamat 80H - FFH denganpengalamatan langsung akan mengakses SFR, sedangkan mengakses alamattersebut dengan mode pengalamaran tak langsung akan mengakses RAMinternal tambahan. Instruksi
mov 80H, #l-5H
akan memberikan data l5H ke alamat 80H (p0). sedangkan insrruksiR0, #80HA, #t_sHGRO, A
65
movmovmov
SFR(Fengalamatan
langsung)
128 hlte atas
(?engalamatan
tak langsung)
128 bpe bawahperrgalanratanLangsung dati
tak iangsung)
Ittlenun DataEkstErud
(64 KB)
akan memberikan data l5H ke alamat RAM internal tambahan gOH.
66 Teknik Antarmuka dan Pemrograman l'likrokontroler AI89l52
3.3 TIMER 2
AT89S52 dilengkapi dengan Timer 2, di samping Timer 0 dan Timer l.seperti halnya Timer 0 dan Timer l, Timer 2 merupakan timer 16 bit yang
bisa difungsikan sebagai rimer atau pencacah. sebagai timer sumber pulsa
berasal dari frekuensi osilator dibagi 12, sedangkan sebagai pencacah pulsa
berasal dari sumber luar melalui pin T2 (fungsi alternatif pin P1.0). Ada 3
mode operasi yang bisa dilakukan oleh Timer 2: mode caPture' auto-reload 16
bit (penclcah naik atau turun) dan pembangkit baud rate untuk port serial.
Tohel 3.2 Mode (erio Timer 2
RCTX+TG
tK CP/RL2 TR2 Mode
0 0 1 Auto-reload 16bit
0 I i Capture 16bit
I x I Pembanglitbaud rate
x x 0 man
Timer 2 dikendalikan oleh register T2CON dan T2MOD sePerti yang telah
dijelaskan dalam Subbab 3.1.2. Data Timer 2 disimpan dalam 2 register 8 bit
(yang dikaskade membentuk register 16 bir) yaitu register TL2 dan TH2.
Seperti halnya Timer 0 atau Timer 1, register-register ini akan menyimpan
hasil pencacahan pulsa yang dilakukan oleh Timer 2. Sebagai timer, pulsa
berasal dari frekuensi osilator setelah dibagi 72 (l/12 frekuensi osilator),
sedangkan sebagai pencacah pulsa berasal dari sumber luar melalui T2. Untuk
fungsi capture disediakan register RCAP2L dan R2CAPH' Saat fungsi caPture
diaktifkan, data di TL2 dan TH2 akan disimpan ke register-register caPnre
ini. Tabel 3.2 memperlihatkan fungsi-fungsi kerja Timer 2 besena bit
pengendalinya.
3.3.I MODE CAPTURE
Dalam mode capture, ada 2 pilihan yang bisa ditentukan melalui bit EXEN2
di register T2CON. Pada saat EXEN2=O, Timer 2 bekerja sebagai timer atau
llikrokontroler AI89$5 2
pencacah 16 bit. saat mengalami overflow, bit TF2 register T2coN akan di-set dan bisa digunakan untuk membangkitkan interupsi Timer 2. fikaExEN2=l' Timer 2 tetap bekerja sebagai rimer atau counrer 16 bit denganpenambahan fungsi yairu transisi 1-ke-0 di pin T2EX akan menyebabkan datadi register TL2 dan TH2 diambil atau di-caprure ke register RCAp2L danRCAP2H. selain itu, transisi di pin T2EX akan membuat bit ExF2 registerT2coN di-set dan juga bisa digunakan unnrk membangkitkan interupsiTimer 2.
Gombor 3.7 lilode (opture limer 2
Sumber pulsa dipilih melalui bit C/T2 register T2CON. C/T2 = 0, Timer 2akan berfungsi sebagai timer dan sumber pulsa diambil dari frekuensi osilator(setelah melalui pembagi l2). Sedangkan jika c/T2 = l, pulsa diambil darisumber luar melalui pin T2. Bit TR2 akan mengatur apakah Timer 2diaktilkan atau tidak. TR2 = I akan mengakti{kan Timer 2. Register TL2 danTH2 akan mulai melakukan pencacahan pulsa yang diterimanya. TL2 danTH2 yang difungsikan sebagai pencacah 16 bit akan mengalami overflowsetelah mencapai FFFFH. Hal ini akan mengeset bit TF2. Mode capnrreditentukan oleh bit EXEN2 yang akan mengaktifkan pin T2EX sebagai sinyalkendali mode capture. EXEN2 = 1 akan mengaktifkan mode capture sehinggajika pendeteksi transisi mendeteksi adanya transisi 1-ke-0 di pin T2EX, akanmengakibatkan data yang pada saat iru tersimpan di register TH2 dan TL2akan di-capture ke regisrer RCAP2H dan RCAP2L. selain itu, bit EXF2 akandi-set. TF2 dan EXF2 di-oR-kan sebagai sumber interupsi rimer 2, sehingga
iika salah satu bir di-set, Timer 2 akan membangkitkan interupsi.
61
68 Teknik Antarmuka dan Pemrograman l'likrokontroler AT89l52
3.3.2 MODE AUTO.RELOAD
Timer2yangbekerjapadamodeauto.reloadmerupakantimerataucounter16 bit. Auto-reload bisa diatur secara otomatis atau ditenrukan oleh transisi
1-ke-0 pin T2EX. Hal ini ditentukan oleh bit EXEN2 register T2CON. Jika
EXEN = 0, Timer 2 akan mengalami auto-reload secara otomatis (jika DCEN =
0, register TH2 dan TL2 akan melakukan cacahan naik sampai FFFFH). Saat
mengal"-i overflow, Timer 2 akan melakukan auto-reload dan bit TF2 akan
di-set. Data auto-reload ditentukan secara software di register RGAP2H dan
RCAP2L. Sedangkan, pada saat EXEN = 1, auto-reload ditentukan oleh
adanya transisi 1-ke-o di pin T2EX. Bila hal ini terjadi, bit EXF2 akan di-set.
Bir TF2 dan bit EXF2 bisa digunakan untuk membangkitkan interupsi Timer
2.
selain sebagai timer arau counter dengan cacahan naik, dengan menSatur bit
DCEN = 1, Timer 2 juga bisa dioperasikan sebagai timer atau counter naik
atau turun. Cacahan naik atau turun ditentukan oleh keadaan logika pin
T2Ex.)ikapinT2EXberadapadalogika0,Timer2akanmelakukancacahanturun(cou,tdown)dariFFFFHsampaidatayangtersimpandiregisterTH2dan TL2 sama dengan nilai yang tersimpan di register RCAP2H dan RCAP2L.
Pada kondisi ini, Timer 2 akan mengalami underflow dan bit TF2 akan di-set'
Setiap kali underflow, nilai FFFFH akan di-auto reload ke register TH2 dan
TL2 dan pencacahan turun dimulai lagi'
DGI\I2
Gsmbor 3.8 t'tode Aulo-relood limer 2 (D(tll = 0)
l'likrokontroler AT89552
Pada saat pin T2EX berada di logika 1, Timer 2 akan melakukan cacahan
naik. Timer 2 akan mengalami overflow setelah cacahan mencapai nilaiFFFFH. Setiap kali mengalami overflow, data yang tersimpan di registerRCAP2H dan RCAP2L akan di-auto reload ke register TH2 dan TL2. Bit TF2
akan di-set.
(NILAI RELOAD CACAHAN TURUN)
Ol/EFf,LO1,tr
c/E=o
1_lc/Tz=1l-t- II-ITERUPSI
TIMEP2
ARAHCACAHAN1 = NAIK0 = TURUN
59
Gombor 3.9 Mode Aulo-relood Timer 2 (D(tN = l)
Pada mode pencacah naiVturun, bit EXF2 akan mengalami toggle (berubah
dari 1 ke 0 bergantian) setiap kali Timer 2 mengalami overflow (cacahan
naik) atau underflow (cacahan turun). Bit ini bisa digunakan sebagai bit ke-17dari resolusi timer. Bit ini tidak akan membangkitkan flag interupsi.
3.3.3 PEMBANGKIT BAUD RATE PORT SERIAI'fimer 2 difungsikan sebagai pembangkit baud rate untuk port serial dengancara men-set bit TCLK dan atau RCLK di register T2CON. Bit TCLK dipakaiuntuk baud rate pada saat pengiriman, sedangkan bit RCLK dipakai untukbaud rate penerimaan. Dengan demikian, baud rate pengiriman danpenerimaan bisa diatur sama dengan cara mengeset kedua bit, atau diaturberbeda dengan cara mengeset salah satu bit (TCLK atau RCLK) dengan'l'imer I dipakai untuk membangkitkan baud rate yang lain.
70 leknik Antarmuka dan Pemrograrnlllllrokonrgler AI89t5l,li
I
{{
il
i
Gombor 3.10 Iimer 2 sebogoi Pembongkit Buod lote
Pembangkit baud rate pada dasarnya sama dengan mode auto-reload' yaitu
pud" ,"":t overflow akan menyebabkan register-regisrer data Timer 2 (TH2
ian TL2) akan diisi kembali (auto-reload) dengan data yang tersimpan di
registerRCAP2HdanRCAP2Lyangsebelumnyadiisisecarasoftware.
Seperti telah dijelaskan oleh bab sebelumnya, baud rate yang bisa diatur oleh
Timer adalah baud rate pada mode I dan 3. Baud rate port serial ditentukan
oleh Timer 2 dengan Persamaan sebagai berikut:
Laiu Overflow Timer2Baud rate = ---- L6
Timer 2 bisa dioperasikan sebagai timer atau counter walaupun pada
kebanyakan aplikasi Timer 2 bekerja sebagai timer (CP/TT= O)'Operasi
TimerpadasaatdioPerasikansebagaipembangkitbaudrateberbedadenganop"r"ri Timer biasa. Pada operasi Timer biasa' register Timer 2 diperbarui
setiaplsiklusmesin(1/l2frekuensiosilator)Padapembangkitbaudrate'register Timer 2 akan diperbarui setiap ,1 frekuensi osilator dan dihitung
dengan persamaan:
Frekuensi Osilator
OI'ERTLOIVIUERT
T"EKUET.TST OSILATORDIBAOI 2. BU(AN T2
Baud rate =32 x (65536 - [RCAP2H,RCAP2L])
llikrokontroler lI89S5?
dengan IRCAP2H, RCAP2L] adalah isi register RCAP2H dan RCAP2L
sebagai register 16 bit (bilangan bulat 16 bit). Jika baud rate diketahui,RCAP2H dan RCAP2L bisa dicari sebagai berikut (sebagai bilangan 16 bit):
Frekuensi OsilatorRCAP2H,RCAP2L = 65536 -
32 x Baud Rate
Gambar 3.10 hanya valid kalau salah satu bit RCLK atau TCLK = 1. Pada saat
dipakai sebagai pembangkit baud rate, overflow di register TH2 tidak akan
mengeset TF2 dan tidak akan membangkitkan interupsi. Selain itu, adanya
transisi 1-ke-0 di pin T2EX akan mengeset EXF2, tetapi tidak akan
menyebabkan proses pengisian [TH2, TL2] oleh data [RCAP2H, RCAP2L].
Oleh karena itu, pada saat Timer 2 dipakai sebagai pembangkit baud rate, pinT2EX bisa dipakai sebagai pin untuk interupsi eksternal tambahan (dengan
alamat vektor interupsi sama dengan vektor interupsi Timer 2).
Ketika Timer 2 hidup (TR2 = 1) sebagai pembangkit baud rate, dilarangmelakukan pembacaan atau penulisan data ke register TH2 dan TL2. OIehkarena Timer diperbarui setiap 1 state (1/2 frekuensi osilator), hasil
pembacaan atau penulisan tidak akan akurat. Register RCAP2H dan RCAP2L
boleh dibaca tetapi tidak untuk ditulisi karena proses penulisan akan
menimpa data yang telah ditulis sebelumnya (sebagai penentu baud rate) dan
akan menyebabkan error. Untuk bisa membaca register Timer 2 (TH2 dan
TL2) atau register RCAP2H dan RCAP2L, Timer harus dimatikan terlebihdahulu (TR2 = 0).
Tabel 3.3 memperlihatkan baud rate port serial yang bisa dibangkitkan olehTimer 2 dengan beberapa frekuensi osilator.
Tobel 3.3 Boud Role dengon Timer 2
RCAPzH-RCAP2L
1f.692MlIz ,l2MIIz,
110 w-57 EE-3F
3ff) FD-8F FB.8O FB-18 F9-7D
6m FE-C8 FD-CO FD_8F FC.8F
l2m FF-& FE-EO FE-C8 FE.5F
7t
t7 Ieknik Antarmuka dan Pemrograman I'likrokontroler AI89552
BaudRate:
.'(bpe)
RCAP2H.RCAP2L
6MHz 11.0592MHz 12 MHz 16MI-IZ
24C0 FF-B2 FF_70 FF-64 FF-30
4800 FF-D9 FF.B8 FF_82 FF-98
96m FF-DC FF-D9 FF-CC
19200 FF-EE FF.E6
38400 FF-F7 FF-F3
56800 FF-FA
3.3.4 PEMBANGKIT CTOCK
Timer 2 bisa difungsikan untuk mengeluarkan sinyal clock (gelombangkotak) dengan siklus kerja 50 o/o melalui pin T2 (pin P1.0). Pada dasarnya pinP1.0 mempunyai 2 fungsi alternatif, yaitu sebagai masukan (input) untukTimer 2 dan sebagai output clock (siklus kerja 50 o/o) dengan frekuensi yangbisa diprogram dari 67 Hz - 4 MHz (dengan frekuensi osilator 16 MHz).Fungsi ini diaktifkan dengan membuat Timer 2 bekerja sebagai timer
fCtT2=Ol dan bit untuk mengaktifkan outpur Timer di-set (T2OE = 1). BitTR2 dipakai untuk menghidupkan dan mematikan Timer. Frekuensi clockditentukan oleh frekuensi osilator dan nilai reload yang tersimpan di registerRCAP2H dan RCAP2L dengan persamaan sebagai berikut:
Frekuensi clock =Frekuensi Osilator
4 x (65536 -[RCAP2H, RCAP2L])
Seperti halnya Timer 2 yang digunakan untuk membangkitkan baud rate,setiap kali Timer 2 mengalami overflow, Timer 2 tidak akan membangkitkaninterupsi. Dimungkinkan juga Timer 2 difungsikan sebagai pembangkit baudrate dan pembangkit clock sekaligus (walaupun baud rate dan frekuensi clocktidak bisa diatur secara terpisah mengingat kedua fungsi ini menggunakanregister RCAP2H dan RCAP2L secara bersamaan).
I'likrokontroler AT89352 7l
TzOE (TzMOD.1)DETEKTOR
L TRrtlrlsIsi
P1.1 ]NTERUPSI
E)€II2
Gombor 3.I I Timer 2 Sebogoi pembongkil 0ock
3.4 INTERUPSI
AT89s52 mempunyai struktur interupsi yang sama dengan 8051 standardengan penambahan interupsi Timer 2, sehingga AT89S52 mempunyai 6vektor interupsi yaitu 2 interupsi eksternal ( INI.I0 dan iNTt ), 3 interupsitimer (Timer 0, i, dan 2) dan 1 interupsi porr serial. Semua interupsi samadengan interupsi yang sama dengan mikrokontroler standar, kecuali interupsiTimer 2.
Interupsi rimer 2 diatur dengan mengeset atau mereset bit ET2 (bit ke-5register IE) Prioritas interupsi rimer 2 diatur oleh bit pr2 (bit ke-5 registerIP). Sumber interupsi Timer 2 terdiri atas 2 bit yaitu bit TF2 dan EXF2 yangdi-OR-kan, sehingga apabila salah satu bit di-set, maka interupsi bisadibangkitkan. Pada saat terjadi interupsi rimer 2, software akan melompat kealamat vektor interupsi rimer 2 yang terletak di alamat o02BH. Bit-bitsumber interupsi rimer 2 ini akan direset secara hardware pada saat seluruhinstruksi yang ada di rutin pelayanan interupsi (ISR) dan instruksi RETIdieksekusi, walaupun dalam beberapa aplikasi, software bisa melakukanpolling untuk mengecek bit mana yang sebenarnya membangkitkaninterupsi, sehingga software-lah yang harus mereset bit TF2 dan EXF2.
I4 Ieknik Antarmuka dan Pemrognman ilikrokontroler AT89l52
ll+\nr#TFI
EXFT
Gombor 3.12 Sumber lnlerupsi AI89S52
Dalam struktur interupsi AT89S52, Timer 2 memiliki urutan prioritas yangterendah. Bit PT2 digunakan untuk mengatur agar interupsi Timer 2
memiliki prioritas yang lebih tinggi. Urutan prioritas interupsi AT89S2ditetapkan sebagai berikut:
l. Eksternal0(IE0)
2. Timer 0 (TFO)
3. Eksternal 1 (IE1)
4. Timer 1 (TF1)
5. Port serial (TI dan RI)
6. Timer 2 (TFZ dan EXF2)
3.5 TIMER WATCHDOG (WDT)
Pada dasarnya tidak ada software, walaupun software yang paling sederhana
sekalipun, yang bebas dari masalah (Dujt). Aplikasi bisa terjebak dalam sebuah
lingkaran yang tak berujung (endless loop). Error yang ridak diharapkan pada
kode kode aplikasi bisa menimbulkan masalah yang sangat serius jika tidak
I1
I
TFI
llikrokontroler AI8 9S52
ditangani dengan benar. Noise-noise listrik (akibat rancangan PCB yangkurang baik) ataupun masukan dari luar yang tidak seharusnya bisamenyebabkan sistem berada dalam keadaan yang tidak pernah terpikirkanoleh para perancang. Ini semua bisa menyebabkan sistem menjadi hang atartmenyebabkan kerusakan pada hardware. Penanganan secara otomatis ataupengembalian ke keadaan awal (recoverfi adalah tugas urama TimerWatchdog (WDT = warchdog timer).
WDT sebenarnya adalah sebuah timer yang jika diaktifkan akan meresetsistem setiap kali WDT mengalami overflow. Pada saat aplikasi berjalannormal, sofware harus memastikan agar WDT tidak mengalami overflowdengan cara me-resetnya secara berkala. Ketika sistem menjadi hang,sofrware tidak bisa me-reset WDT sehingga WDT akan mengalami overflow.Pada saat itulah WDT akan me-reset sistem sehingga sistem akan berjalannormal kembali.
Pada AT89S52, WDT diatur oleh register WDTRST (watchdog rimer reset)yang berada di alamat A6H SFR dan sebuah counter i4 bit. Untukmengaktifkan WDT, software harus menuliskan data IEH dan EIH secara
berurutan ke register WDTRST. Sekali diaktifkan, WDT akan melakukancacahan setiap satu siklus mesin sehingga waktu overflow WDT ditentukanoleh frekuensi osilator. Tidak ada cara untuk menghentikan WDT setelahdiaktifkan kecuali sinyal reset (baik reset hardware melalui pin RST ataureset karena WDT overflow).
Software harus selalu mengirimkan data lEH dan ElH ke register WDTRSTagar WDT tidak mengalami overflow (register counter 14 bit akan kembali kecacahan 0000H ketika WDTRST menerima data ini). Apabila WDTRST tidakmenerima data lagi (karena sistem menjadi hang misalnya), counter 14 bitakan mengalami overflow setelah cacahan ke 16383 (3FFFH). Ini berartisoftware harus menulis data 1EH dan ElH ke WDRST (me-reset WDT),setidaknya setiap 16383 siklus mesin (dengan frekuensi osilator 12 MHz, 1
siklus mesin adalah I mikrodetik). WDTRST adalah regisrer yang hanya bisaditulisi, sedangkan counter 14 bit tidak bisa didisi araupun dibaca.
Pada saat mode penghemaran daya (bit PD di register PCON di-set), osilatorberhenti bekerja yang berarti WDT juga berhenti bekerja. Sehingga, softwaretidak perlu melayani WDT agar tidak overflow. Ada 2 cara untuk keluar darimode penghematan daya yaitu dengan reset hardware atau dengan interupsi
75
16
5
t1Ieknik Antarmuka dan Pemrograman tlikrokontroler AT89S52
eksternal yang diaktifkan dengan level logika rendah (level activated). likakeluar dari mode penghematan daya melalui reset hardware, wDT bisa
diatur seperti halnya pada saat AT89S52 mengalami reset biasa' Berbeda
apabila keluar dari mode penghematan daya melalui interupsi eksternal.
Sinyal interupsi harus ditahan pada logika rendah selama mungkin sampai
osilator kembali bekerja secara stabil. Ketika sinyal interupsi menjadi tinggi,
interupsi akan dilayani. Untuk menjaga agar WDT tidak overflow atau me-
reser AT89S52 pada saat sinyal interupsi berlogika rendah, WDT tidak akan
bekerja sampai sinyal interupsi menjadi tinggi. Disarankan untuk melakukan
reset terhadap WDT pada saat melayani interupsi. Dan untuk meyakinkan
WDT tidak overflow beberapa saat setelah keluar dari mode penghematan
daya, disarankan untuk me-reset WDT sebelum masuk ke mode
penghematan daya.
Pada mode idle, di mana osilator masih bekerja, WDT bisa diatur untuk tetap
bekerja arau berhenti melalui bit wDIDLE di register AUXR. Jika wDIDLE =
1, WDT akan berhenti bekerja dan akan melanjutkan cacahan setelah keluar
dari mode idle. Sedangkan iika WDIDLE = 0, WDT akan tetaP bekerja pada
mode idle. Untuk itu sebuah timer (Timer 0, misalnya) harus diaktifkan
untuk melayani WDT agar tidak mengalami overflow (pada mode idle timer
tetap bisa bekerja) setelah itu masuk ke mode idle kembali.
3.6 MEMORI FIASH INTERNAL
AT89S52 dilengkapi dengan memori program internal (Ilash memory) sebesar
8 KB. Memori flash ini bisa diprogram ulang/dihapus sampai i000 kali. Ada 2
cara untuk memprogram memori flash yaitu secara Paralel Qtarallel mode)
dan secara serial (serial mode). Mode paralel dilakukan dengan menggunakan
tegangan 12 Volt untuk mengaktifkan mode pemrograman memori flash dan
kompatibel dengan pemrograman konvensional. Sedangkan mode serial
cukup menggunakan tegangan 5 Volt (VCC) untuk melakukan pemrograman
dan bisa dilakukan di dalam sistem (LSP = In-System Programming).
Secara umum kedua mode pemrograman menyediakan fasilitas-fasilitas
untuk:
1. Menulis atau memprogram
2. Membaca untuk verifikasi
3. Menghapus
l'l ikrokontroler AT8 9S52
4. Memprogram bit pengunci memori (Memory Lock bit)
5. Membaca bit signature untuk mengetahui pembuar dan tipemikrokontroler. untuk AT89s52 akan menghasilkan data sebagai berikut:a. Alamat 000H = 1EH menandakan chip dibuat oleh ATMELb. Alamat l00H = 52H menandakan tipe chip adalah AT89S52
c. Alamat 200H = 06H (tidak ada keterangan mengenai data ini)
Bit pengunci memori berfungsi untuk melindungi agar program yang telahdiprogramkan ke memori flash tidak bisa dibaca lagi (copy protection). Ad,a 4mode yang bisa dipilih, seperri ditunjukkan oleh Tabel 3.4.
Seperti yang tercantum dalam Tabel 3.4, mode 1 pada dasarnya bit penguncimemori tidak diaktifkan; artinya, setelah diprogram, memori flash bisakembali untuk diprogram ranpa perlu menghapus terlebih dahulu dan isimemori masih bisa dibaca lagi.
Memprogram bit pengunci memori pada mode 2 akan membuat memori flashtidak bisa diprogram lagi tanpa dihapus terlebih dahulu. Mode ini;'uga akanmembuat instruksi movc yang dieksekusi dari memori program eksternaltidak akan bisa mengambil data/kode byre dari memori internal. Instruksimovc sering dipakai dalam pencarian data dalam tabel (look-up table). Dalamhal ini movc berada di memori eksternal, tetapi data tabel berada dalammemori internal, maka instruksi movc ini tidak bisa membaca data dari tabeltersebut. Selain itu pin EA akan dicuplik dan di-latch saar reser. JikaAT89s52 tidak di-reset pada saat perrama kali diberi daya Qtower oN reser),
Ef akan berada pada logika acak dan akan tetap berada pada logika rersebutsampai diterima sinyal reset. Nilai logika yang di-latch harus sama denganIevel logika pada pin EA ug.r AT89s52 bisa bekerja secara normal. pada
mode ini memori flash masih bisa dibaca lagi.
?8 Ieknik Anarmuka dan Pemrognman llikrokontrohr AI89l52
Tobel 3.4 fttode Bit Pengunti Memori
Keterangan:
P = Prognmmd (DiProgram)
lJ = tin -pngnmmed(tidak diprogram)
Mode 3 pada dasarnya sama dengan mode 2' tetapi memori flash tidak bisa
dibacalagi.Mode4samadet'ga"mode3'cetapiAT8SS52tidakbisameng-eksekusi program dari memori eksternal'
Ada satu fasilitas yang hanya bisa dilakukan di dalam mode paralel yaitu fuse
f"-rogr"r"r, ,"ri"l (serii programming rtse)' Fasilitas ini' jika diaktiftan'
memoriflashAT8gSs2tidakbisadiprogramsecaraserialkecualidihapusdahulu melalui Pemrogram paralel' Pada saat dipasarkan' fuse pemrogram
serial tidak diaktifkan-d"n me*ori dalam keadaan siap untuk diprogram'
secara serial atauPun Paralel'
3.6.1 Pemrogromon Mode Porolel
Pemrograman mode paralel diiakukan dengan menggunakan tegangan 12
Volt dan memori diprogram byte demi byte' Tegangan 12 Volt dihubungkan
dengan pin il /VPP setelah pin RST di-set (logika dnggi)' Alamat dan data
memori dikirimkan secara paralel melalui P'l '0 - Pl '7 dan P2'0 - P2'4 ( l3 bit
l{ikrokontroler AI89tl2
untuk alamat) dan P0.0 - P0.7 (8 bit untuk data). Sedangkan 5 bit data
digunakan unnrk memilih apakah menulis, membaca, atau menghapusmemori. Gambar 3.13 memperlihatkan antarmuka pemrograman paralel.Gambar sebelah kiri adalah antarmuka untuk proses pemrograman (memoriatau bit pengunci) sedangkan gambar sebelah kanan adalah antarmuka untukpembacaan.
Secara sederhana algoritma pemrograman mode paralel bisa dijelaskansebagai berikut (setelah pin RST di-set):
1. Kirimkan l3 bit alamat pada bus alamat (Pl, P2.0 -P2.4).2. Kirimkan 8 bit data pada bus data (P0).
3. Kirimkan 5 bit data mode pemrograman.
4. Naikan pin Ef meniadi 12 Volt.
5. Berikan satu kali pulsa (200 nano detik - 500 nano detik) pada pin
ALU PROG untuk memprogram saru byte memori flash atau bitpengunci. Waktu penulisan memori biasanya tidak akan lebih dari 50
pdetik. Ulangi langkah I dan seterusnya untuk memprogram alamatseterusnya.
Proses pemrograman memori bisa dipantau melalui polling data untuk me-ngetahui apakah proses pemrograman sudah selesai atau belum. Ini dilakukandengan membaca kembali (verifikasi) data yang diprogramkan. Pada saat
pemrograman memori masih berlangsung, pembacaan data akan menghasil-kan komplemen dari data yang diprogramkan di pin P0.7. Setelah proses
pemrograman selesai, data yang diprogramkan akan muncul di bus data (P0).
P0 membutuhkan resistor pull-up pada proses pembacaan. Proses polling data
bisa dilakukan kapan saja setelah perintah pemrograman dikirimkan.
Proses pemrograman juga bisa dipantau melalui sinyal RDY/ffi Qeady/bus) di pin P3.0. Sesaat setelah pin ALE menjadi tinggi pada proses
pemrograman, pin P3.0 akan menjadi logika rendah untuk memperlihatkanbahwa proses pemrograman sedang berlangsung (bus/. Pada saat pemro-
Sraman selesai, P3.0 akan berlogika tinggi (ready).
79
|l
8l80
RDY/
Teknik Antarmuka dan Pemrograman I'likrokontroler AT89S52 l,likrokontroler AI89$2
ALAMAToflooH/ IITFH
LIHATTAEEL 3,4
vff /vE
3-33MHz
MENULIS MEhI,]RI MEMEACA MEMORI
Gombor 3.I3 Antormuko Pemrogromon Porolel
Data yang baru diprogramkan bisa langsung dibaca kembali untuk verifikasi
selama bit pengunci LB1 dan LB2 belum diprogram. Proses verifikasi inidilakukan untuk mengetahui apakah proses pemrograman berjalan dengan
benar atau tidak. Aplikasi pemrogram disarankan untuk memprogram ulang
apabila proses verifikasi pertama tidak berhasil (setidaknya sampai 5 kali atau
lebih, bila masih belum berhasil juga ada kemungkinan memori tersebut
sudah tidak bisa diprogram lagi).
Memori flash sebaiknya dihapus terlebih dahulu sebelum diprogram. Proses
penghapusan dalam mode paralel dilakukan dengan memberikan 5 bit
perintah dan memberi pulsa ke pin ALE/PROG selama 200 nano detik - 500
nano detik. Proses penghapusan memori akan berlangsung selama kurang
lebih 500 mili detik.
Hal yang perlu diperhatikan ketika merancang sebuah programmer (atau
downloader) AT89S52 mode paralel adalah tegangan 12 V. Seperti
ditunjukkan oleh tabel, tegangan 12 V diperlukan dalam mode pemrograman
(memori ataupun bit pengunci). Perhatikanlah agar tegangan 12 Vdihubungkan dengan pin EA setelah pin RST di-set menjadi tinggi. ]ikatidak, AT89S52 akan rusak.
Keterangan:
I{ = Logika tinggi (5\)L = Logika rendah (0\|X = tidak peduli (bisa rendah, bisa tinggi)pin FSEN berada dilogika rendah (0\)l'>in RST berada di logika tinggivCC.. 5V
l,t'bar pulsa ALII 2m 500 nano detik
Tobel 3.5 Mode Pemrogromon Porolel
.AI.E7
PROGEAIVPP
DataPerinuh Data
PO
AtauatP,l4:'o,P1P2.6 P2.7 P33 P3.6 P3.7
Menulis
Memorit2v L H H H H Dn'r
At2-AO
Membaca
MemoriH H L L L H H Drl,r
1'12-
AO
Menulis
Lockbit 172V H H H H H x x
Menulis
Lockbit 2t2v H H H L L x x
Menulis
lockbit 312Y H L H H L x x
Membaca
tockbit1,2,3
H H H H L H L
P0.2,
P0.3,
P0.4
X
Menghapus
Memorit2v H L H L L X x
Membaca
IDAtmel H H L L L L L 1EH 0000H
Membaca
ID ChipH H L L L L L 52H 0100H
Membaca
ID ChipH H L L L L L 06H 0200H
{
I8? Ieknik Anarmuka dan Pemrograman llikrokontroler AI89552
3,6.2 Pemrogromon Mode Seriol
Berbeda dengan pemrograman mode paralel yang menggunakan 12 V untukmengaktifkan mode pemrograman, pemroBraman mode serial cukupmenggunakan tegangan 5 V. Selain itu byte data yang akan diprogramkanserta byte-byte perintah dikirimkan bit demi bit sehingga antarmukanyamenjadi lebih sederhana. Kedua keadaan ini, hanya menggunakan tegangan 5V dan antarmuka yang lebih sederhana, memungkinkan untuk merancangsebuah pemrogram dalam sistem (ISP).
Pemrograman mode serial dilakukan dengan menggunakan protokol komuni-kasi serial SPI (serial peripheral interface), sebuah protokol komunikasi serialsinkron (membutuhkan clock untuk menggeser atau mensinkronkan bit data
antara pengirim dan penerima). AT89S52 yang diprogram bertindak sebagai
slave sedangkan pemrogram (sebuah PC misalnya) bertindak sebagai master.
Byte data dan perintah dikirimkan melalui pin MOSI (master out slave in),
sedangkan pembacaan dilakukan melalui pin MISO (master in slave out).
Sinyal clock sinkronisasi dikirimkan oleh master melalui pin SCK. Pada
AT89S52 port SPI adalah pin P1.5 untuk MOSI, pin P1.6 untuk MISO danPl.7 unruk SCK. Pin-pin ini hanya akan bekerja sebagai port SPI pada modepemrograman di mana AT89S52 berada dalam keadaan reset (pin RST
berlogika tinggi).
Secara sederhana, algoritma pemrograman mode serial adalah sebagai berikut:
1. Hubungkan tegangan catu daya 5 V melalui pin VCC dan GND
2. Set pin RST menjadi logika tinggi. Apabila digunakan sumber osilatorluar tunggu selama 10 mili detik. Frekuensi osilator, baik kristal maupun
sumhr luar, yang diizinkan adalah 3 - 33 MHz.
3. Aktiftan mode pemrograman serial dengan mengirimkan byte perintahuntuk mengaktifkan pemrograman Qtrogramming enable) melalui pinMOSI (P1.5). Frekuensi sinyal clock yang dikirimkan melalui pin SCK(PI.7) tidak boleh lebih dari l/16 frekuensi osilator.
Kirimkan byte-byte data memori yang akan diprogramkan baik dalammode byte atau mode halaman Qtage mode). Proses pemrog,raman
memori biasanya memerlukan waktu kurang dari 0.5 mili detik pada
tegangan 5 V.
Verifikasi (baca ulang) data yang diprogramkan melalui pin MISO.
6. Setelah proses pemrograman selesai, pin RST bisasehingga AT89S52 bisa langsung mengeksekusiditerimanya.
llikrokontroler AIS gii283
diberi logika rendahprogram yang baru
r
irl
1l
il
i
i
li
ril
4.
INPUTDATA/II.ISTRUKST
OUTPUTDATAINPUTCLOCK
3 -33 Mrt T-l
Gombor 3.14 Antormuko pemrogromon 5eriol
AT89s52 menggunakan format perintah 4 byte, artinya byte data atauperintah dikirimkan daram format 4 bpe. pada proses'p"-rogr"*"n danpembacaan memori flash, byte pertama adalah byte kode perintah, byte ke-2lan ke-3 adalah byte-byte alamar, sedangkan byte ke-4 adalah byte data.Tabel 3.6 memperlihatkan prorokol 4 byte ini.Byte perintah atau data dikirimkan bit demi bit dengan bit yang paringsignifikan (MsB = most signifrcanr 6rr) dikirimkan terlebih dahulu. Gambar3'14 memperlihatkan diagram pewaktuan unruk mode pemrograman serial.Frekuensi SCK tidak boleh lebih dari 1/16 frekuensi osilator.
INPUT DATA SERTALPrNXoot(P1.5)
OUTPUTDATA SERIALprN Mtso (Pl.t)
ii[S*'[S'*^'Gombor 3.1 5 Diogrom pawoktuon pcmrogromon 5eriol
Pl.5/MOStPl.6/MrsoPl.7/SCK
XTAL2
rl
seperti telah dijelaskan, pemrograman serial diaktifkan dengan mengirimkan
byte perintah untuk -e,,g"tifk"tt nya Qtrogramming enable) setelah pin RST
menjadi logika tinggi. fad"a byte ke-4' AT89S52 akan mengirimkan data 69H
pada pin ftAiSO ,LU"g.i tanda bahwa mode Pemrograman serial telah
diaktifkan.
Setelah mode pemroS,raman serial diaktifkan' memori flash internal bisa
langsung diproiram. By," p"""-a adalah-kode perintah untuk pemrograman
-"i,orir"aurrlkun Uyi" t "-z
dan ke-3 adalah 12 bit alamat' Data yang akan
diprogramkan dikirimkan melalui byte ke-4'
Prosepemrogramanmemoribisadipantaumelaluipollingdata.Pembacaandata pada saat proses penulisan berlangsung akan menghasilkan data outPut
yang mempurrlai ko-pl"men MSB dari data yang dikirim' Proses penulisan
"t ui U"rturrgsung selama kurang dari i mili detik pada tegangan 5 V'
Data yang sudah diprogramkan bisa dibaca ulang untuk proses verifikasi
melalui pin MISO. periitah pembacaan dikirimkan pada byte pertama- Byte
ke-2 dan ke-3 adalah alamat memori yang akan dibaca. sedangkan byte ke-4
adalah proses pembacaan data di pin MISO'
I'likrokontroler AI8 9552
Keterangan:
X = ridal peduli (bisa rendah, bisa tinggi)Mode bit pengunci:
81= 0, 82 =0 -) Mo<le 1
B1=0, B2=1 ) Mode 2
B1=1, 82{ ) Mode3B1=1, B2=1 -) Mode 4
Dalam pemrograman serial, pengiriman atau pembacaan dara memori bisadilakukan dengan 2 mode, yaitu mode byte dan mode halaman. Mode byteakan memprogram atau membaca data per alamat atau per byte. Formatperintahnya seperti yang telah diterangkan di atas.
Pada mode halaman, data akan diprogramkan atau dibaca per 256 byte (per256 alamat secara berurutan). Format perintahnya berbeda dengan formatmode byte. Byte pertama adalah byte perintah untuk penulisan ataupembacaan memori mode halaman. Byte ke-2 adalah alamat memori ordetinggi (A8 - Al2) sedangkan byte ke-3 adalah byte data ke-0. Byte ke-4 danseterusnya adalah byte data ke-l sampai byte ke-255. AT89S52 akanmemperlakukan byte ke-4 dan setemsnya sebagai data sampai data byte ke-255 dicerima atau dikeluarkan. Setelah menerima atau mengirim 256 bytedata, AT89S52 siap untuk menerima instruksi selanjutnya.
Setelah pemrograman dan verifikasi selesai, pin RST bisa langsung diaturmenjadi logika rendah sehingga AT89S52 bisa langsung mengerjakanprogram yang baru diterimanya.
Gambar 3.15 memperlihatkan antarmuka pemrograman serial. Dari gambarterlihat, hanya 4 pin AT89S52 yang diperlukan untuk memprogram memoriflash secara serial, sehingga AT89S52 bisa diprogram dalam sistem. Dalampemr()grarnan scrial port SPI (MOSI, MISO dan SCK) mungkin tidak bisarttt,rrr,rirnl bytr' pcrintah ittitu (1il(ir rlischabkan lrt bcrapa hal berikut:
85
I
I
I
PerintshFormat Perintah
[Bytel] tByte2l tgyte3l [Byte4]
Membaca (mode
halaman) [0011 0000] [,ood12] [A11 - A8] [Byte 0] fByre 1 - Byte 255]
Memprogram(mode halaman) [010] 0000] [roodl2 Al l - A8] [Byte 0] [Byte 1 - Byte 255]
Iobel 3.6 Mode Pemrogromon Seriol
FormatPerintah
tBvtell [Bvte2l tByte3l tBYte4lPerintah
[1010 1100] [0i01 0011] [>ooooooo<] [>ooo<>oooi]
rhvre ke-4 MISO akan mengirim 0110 1001)Pengaktifan
Pemrograman
[1010 1100] [lOOx lorrc<] [rcoo< >ooo<] [>ooooooo<]
trnl o rrml [xrxAl2 A11 - A8l tA7 - A0] [D7 - D0]Menghapus
Membaca (bYe)
[0100 0000] [)ood12 A1l - A8] [A7 - A0] [D7 - D0]
[1010 1100] [1i 10 00B1B2] [>om< >ooo<] [>ooo< roooc]
[0010 1m0] [>ooo< >ooo<] t* @
Memprogram(modebpe)
MemprogramLockbit
Membaca Lockbit
Membaca Signature t0010 10001 [)oodl2 A11 - A8] [A7>oo< xro<0] [Byte signature
rT
86 Ieknik Antarmuka dan Pemrognman llikrokontrohr AI89S52
l. Port SPI berfungsi untuk menggerakkan perangkat berimpedansi rendah
(kaki basis transistor misalnya).
2. port sPI berfungsi sebagai port masukan (menerima data dari ADC
misalnya).
oleh karenanya, hubungan port SPI dengan perangkat tersebut perlu diputus
terlebih dahulu sebelum memProgram memori flash.
BAB 4BAHI\.rA AJTEMBLER BO5I
Dalam menjalankan program, mikrokontroler akan melakukan pembacaandata yang tersimpan dalam memori program (internal atau eksternal). Alamatmemori yang harus dibaca disimpan dalam sebuah register yang dinamakanprogram counter (PC). Data yang terbaca akan diartikan sebagai perintahyang harus dikerjakan oleh mikrokonrroler. Perintah ini bisa berbentukpemindahan data (data transfer), pengolahan data (data processing) ataumengubah alur program Qtrogram control). Setelah melaksanakan perintah,mikrokontroler akan memperbarui isi PC dengan alamat memori selanjutnyasehingga mikrokontroler bisa mengeksekusi perintah selanjutnya.
Perintah-perintah mikrokontroler bisa dikodekan dalam 1 byte dara ataulebih sehingga mikrokonrroler harus membaca beberapa byte instruksisebelum benar-benar mengeksekusi sebuah perintah. Kode-kode ini biasanyamerupakan data heksadesimal dan dinamakan sebagai bahasa mesrn (machinecode). Setiap perintah mempunyai kode data yang unik, sebagai contoh
inc A
dikodekan dengan byte 04H, sebuah instruksi I byte. Artinya, setiap mikro-kontroler membaca data 04H dari memori program, isi register A(akumulator) akan ditambah 1. setelah itu isi PC juga akan ditambah 1 danmikrokontroler akan melaksanakan instruksi selanjutnya. Contoh lain
inc 35H
Arti perintah ini adalah mikrokontroler akan menambah I nilai RAMinternal di alamat 35H. Perintah ini memerlukan 2 byte data, byte pertamaadalah byte yang menyatakan perintah unruk menambah nilai RAM internaldi sebuah alamat yang dinyatakan dalam byre selanjutnya (dikodekan de-ngan 05H). setiap mikrokonrroler membaca data 05H artinya mikrokontrolerharus menambah I nilai yang ada di alamat sebuah RAM internal. Untukmengetahui alamar RAM yang dimaksud, setelah membaca 05H pC akanditambah I dan mikrokonrroler akan membaca nilai, dalam contoh ini, 35H.
Ieknik Antarmuka dan Pemrograman l'likrokontroler AI89S52
lsi pc pun dinaikkan sekali lagi untuk membaca byte perintah selanjutnya'
Dalam melaksanakan perintah ini PC dinaikkan 2 kali'
KeluargaMCS-5ldilengkapidenganinstruksi-instruksiuntukpemindahand,aa (data tansfe), p"lrrgotut utt data (data processing) dan pengendalian
program \prrtgram ,o,io4' Setiap instruksi dinyatakan dalam 1 baris
"rrJ-Uf"r, yang terdiri atas sebuah kode operasi (operation codelopcode) atau
pseudo-operarr'on (pseudo-op) yang diikuti 1 atau lebih operand untuk
*"rryu,"kr, lokasi alamat di memori, register atau sebuah konstanta' Opcode
adalah instruksi bahasa assembler unik yang ditulis dalam bentuk mnemonic'
misalnya mov atau inc. Sedangkan pseudo-op hampir sama dengan opcode'
t"t"pi tiduk akan dikodekan ke dalam bahasa mesin pada saat di-assembler'
misalnya pernyataan yang menyatakan alamat awal program
org 0000H
mnemonic org berarti origin, artinya Program diawali di alamat 0000H'
Selain opcode, pseudo-op utu" op"'und' bahasa assembler iuga bisa memunyai
sebuahlabelatau.u,".",(comment).Satubarisbahasaassemblerbisadicontohkan sebagai berikut
Bahasa Assembler 8051
3. @Ri adalah alamat 8 bit RAM internal (00H - FFH) atau SFR yang
ditunjukkan oleh R0 atau R1
4. #data adalah konstanta 8 bit (1 byte)
5. #data16 adalah konscanta 16 bit (2 byte)
6. addr16 adalah 16 bit alamat tujuan yang dipakai dalam instruksi jmp,ljmp dan lcall. Alamat ini bisa di mana saja dalam daerah 64 KB memoriproSram.
7. addrll adalah 11 bit alamat tujuan yang dipakai oleh instruksi ajmp danacall. Alamat ini harus berada dalam blok memori 2 KB yang sama.
8. rel adalah alamat relatif, dipakai oleh instruksi sjmp dan semua instruksilompat bersyarat. Alamat ini akan berada 128 byte sebelum instruksiyang sekarang atau 127 byte setelahnya.
9. Bit adalah alamat bit dari RAM internal yang bisa dialamati per bit (20H
- 2FH) atau SFR yang bisa diakses per bit.
4.1 PEMINDAHAN DATAMCS-51 memiliki instruksi-instruksi pemindahan data yang sangat bergunadan bisa digunakan untuk memindahkan data byte atau bit. Sumber atau
tujuan bisa berupa data konstanta, register fungsi khusus (SFR) atau alamat dimemori data atau program (internal maupun eksternal).
Bagian penting dari konsep pemindahan data MCS-51 adalah mode-mode
pengalamatan yang dimilikinya. Mode pengalamatan merupa-kan cara
bagaimana byte atau bit sumber dan tujuan ditentukan. Sebagai contoh,dalam sebuah operasi pemindahan data, byte data sumber bisa tersimpandalam sebuah register, RAM internal, memori program atau memori data
eksternal. Sementara byte alamat sumber bisa dituliskan langsung sebagai
bagian dari instruksi assembler atau disimpan dalam sebuah register.
8988
Start:mov A, #45H ; isi register A dengan 45H
Instruksi ini akan mengisi register A dengan data 45H' Di sini' StarL
adalah label yang pada" dasa*ya adalah sama dengan alamat awal dari
instruksi tersebut. Label berguna pada instruksi pemanggilan sebuah subrutin
di mana label adalah ,ru-" du'i sebuah subrutin' Sedangkan mov adalah
opcode untuk instruksi ini dan memiliki dua operand (A dan #45H)' Operand
p"rau*.,A,menyatakanregistertujuanpemindahandatasedangkanoperandkedua, #45H, merupuku,,
-dutu yang akan dipindahkan' Tanda pagar (#)
menyarakan bahwa 45H adalah sebuah konstanta bukan alamat memori (iika
tidakadatandapagar45Hberartialamatmemori)'Kalimatsetelahtandatitikkoma (;) adalah catatan' Biasanya digunakan untuk memberikan catatan
terhadap instruksi yang bersangkutan' Assembler 8051 akan mengabaikan
setiap kata amu huruf ylng terletak setelah tanda titik koma dalam satu baris'
Perhatikan notasi-notasi yang digunakan untuk operand:
1. Rn adalah salah satu regisrer R0 - R7 dari bank register yang aktif
2. direct adalah alamat 8 bit RAM internal (00H - FFH) atau SFR
I
ii
1i
1
Teknik Antarmuka dan Pemrograman l'likrokontroler AI89S52 Bahasa Assembler 805190
9t
Tobet 4.1 lnstruksi Pemindohon Dslo
Keterangan
Simpan 1 bwe data konstanta ke AMode BerffikPerintah
Segera
(Immediate)
mov A, #data
Simpan 1 bYe data ke Rn (n{'1'2'" '7)
dari bank register Yang akdfmov Rn, #data
mov direct, #dataSimpan 1 byte data ke RAM
InternaVSFR
mov DPTR, #data16 Simpan konstanta 16 bit ke DPTR
IsiAdenean RAIWSFR
langsung(Direcd
mov A, direct
Isi RANI/SFR dengan Amov direct, A
mov direct,direct Isi RAIWSFR dengan RAIWSFR lain
tsi A dengan R0 - R7
Register
movA, Rn
mov Rn. A Isi R0 - R7 dengan A
Tsi RAIWSFR dengan R0 - R7mov direct, Rn
mov Rn, direct Isi R0 - R7 dengan RAIWSFR
Isi A dengan RAM Yang ditunjukkan
oleh R0 atau RlTak
Langsung(Indirect)
movA,@Ri
mov@Ri,AIsi RAM yang ditunjukkan oleh R0 atau
R1 denganA
mov direct, @RiIsi RAM/SFR dengan RAMYang
ditunjukkan oleh R0 atau tl-
mov @Ri, directIsi RAM yang ditunjuklan oleh R0 atau
R1 densan RAIWSFR
Isi RAM yang ditunjukkan oleh R0 atau
Rl deneankonstantamov @Ri, #data
mowxA, @DPTRBaca alamat RAM e}sternal di DPIR
dan simpan di A (16 bit alamat)
movx@DPTR,AKirim A ke RAM eksternal di DPIR (16
bit alamat)
Baca RAM eksternal di alamat R0 ataumovx A, @Ri
Mode BenftkPerintah Ketemngen
Rl dan simpan di A (8 bit alamat)
movx@Ri, A Kirim A ke RAM eksternal di R0 (8 bit)
Berindel<s
(indexea)
movcA, @A+DPTR
Baca byte data dari memori program
dengan alamat awal di DPTR dan alamat
offset di A. Data disimpan di A.
movcA, @A+PC
Baca byte data dari memori program
dengan alamat awai di PC dan alamat
offset di A. Data disimpan di A.
Operasi
Stack
push direct Simpan RAM/SFR di alamat stack (SP)
pop directAmbil RAIWSFRyang tersimpan distack
Pernrkaran
Data
(Data
ExchangS
xchA, Rrr Perrukarkan A dengan R0 - R7
xch A. direct Perrukarkan A dengan RAM/SFR
xchA, @RiPertukarkan A dengan RAM yang
dirunjukkan oleh R0 atau R1
xchdA, @RiPernrkarkan nibble rendah A dengan
RAM yang ditunjukkan oleh R0 atau RI
Operasi bitmovC, bit Isi bit C (carry) dengan bit di RAM/SFR.
movbit, C Isi bit RAIWSFR dengan C
MCS-51 memiliki 5 mode pengalamatan:
1. Pengalamatansegera (immediate)
2. Pengalamatan langsung (direcr)
3. Pengalamatan register
4. Pengalamatan tak langsung (indirect)
5. Pengalamatanberindeks (indexed)
l
9392
i
Teknik Antarmuka dan Pemrograman l'likrokontroler AI89S52
selain mode-mode pengalamatan tersebut di atas (yang semuanya
menggunakan mnemonic mov, movx atau movc), MCS-51 juga memiliki
instruksi pemindahan data berorientasi memori stack (stack oriented) dan
pertukaran data (data exchange) antarregister serta pemindahan data
beorientasi bit. Tabel 4.1 memperlihatkan rangkuman instruksi pemindahan
data.
4.I.I MODE PENGATAMATAN SEGERA
Mode pengalamatan segera (immediate addressing mode) adalah mode
pengalamatan di mana byte sumber dinyatakan sebagai sebuah konstanta
dalam baris bahasa assembler, sedangkan tujuan bisa sebuah bank register (R0
- R7), SFR atau sebuah alamat RAM internal. Sebagai contoh
Bahasa Assembler 8051
perintah ini akan mengisi DPTR dengan data 4578H atau sama denganmengisi DPH dengan 45H dan DPL dengan 78H. Perintah ini sama denganperintah
movmov
org 0000Hmov A, #45Hmov PSW. #0mov Rl-, #01mov PSW, #B
mov R1, #07mov 30H, #0AH
end
program mempunyai alamar awal 0000H. Program diawali dengan memberi
register A dengan data 45H kemudian akan memberi register PSW dengan 0,
artinya akan memilih bank register ke-0 (RSI,RSQ = 0). Selanjutnya register
R1 akan diisi dengan data 7 (desimal). R1 akan berada di alamat 01H di RAM
internal (karena bank register yang aktif saat itu adalah bank register ke-O,
yang beralamat 00H - 07H). Kemudian program akan memilih bank register
ke-1 dengan mengisi register PSW dengan data 8 (RS1=0, RS0=i) dan mengisi
R1 dengan d.ata 7. Sekarang R1 berada di alamat 09H di RAM internal.
Perintah selanjutnya adalah mengisi register yang beralamat di 30H dengan
data OAH. Alamat 30H adalah sebuah alamat di RAM internal. Baris terakhir
program (end) menyarakan akhir dari program ini. Assembler MCS-51
mengharuskan pernyataan end di akhir program.
MCS-51 juga memiliki sebuah instruksi untuk pemindahan data 16 bit ke
register SFR yang berpasangan, dalam hal ini register DPTR. Sebagai contoh
mov DPTR, #45'/BH
tetapi hanya memerlukan satu baris perintah.
4.1,2 MODE PENGATAMATAN TANGSUNG
Mode pengalamaran langsung (direct addressing mode) adalah pemindahandata antarregister (baik RAM internal maupun sFR). Data sumber disimpandi sebuah register (RAM internal maupun SFR). Misalnya:
mov A, 70Hmov 90H, A
Instruksi pertama akan mengisi regisrer A dengan data yang tersimpan dialamat 70H (RAM internal), kemudian data di register A akan dikirimkan keregister sFR yang beralamat 90H. Alamat sFR 90H adalah alamat untuk port1' Pada kedua instruksi tersebut, data yang akan dipindahkan disimpan disebuah register (register 70H dan akumulator).
Dalam pemrograman assembler, RAM internal bisa dinyatakan denganlangsung menuliskan alamatnya seperti dicontohkan oleh program di atasatau dengan mendeklarasikan sebuah variabel menggunakan pseudo-op equ(equal atau sama dengan). Penulisan langsung akan membuat listing program"susah dibaca"; selain itu, apabila karena sesuaru hal alamat harus digantimaka semua alamat RAM tersebut harus diganti saru per satu. Denganmenggunakan variabel, program lebih mudah dipahami dan seorang pro-gramer biasanya lebih mudah mengingat sebuah kata daripada sebuah alamatmemori. Jika akan mengganti alamat RAM, cukup dengan menggantideklarasinya saja.
My_Byte equ
; alamat awal Program; isi register A dengan 45H
; pilih bank register 0
; isi R1 dengan 7 (desimal); pilih bank register 1
; isi R1 dengan 7 (desimal); isi register 30H dengan OAH
; akhir program
orgmov
end
DPH. #45HDPL, #7BH
70H
0000HA, My_Byte
Baris pertama program di atas adalah pendeklarasian bahwa My_Byte adalahs.hualr alanrat llAM, dalam hal ini 70H. Program ini akan membaca data
94 Ieknik Antarmuka dan Pemrograman tlikrokontroler AT89552
yang ada di My-Byte atau di alamat RAM 70H dan menyimpannya di
akumulator (register A). Jika alamat My-Byte akan diganti, cukup dengan
mengubah pendeklarasiannya, misal
My-Byte equ '71-H
alamat My-Byteakan berubah menjadi 7lH.
SFR juga bisa dinyatakan seperti RAM internal (dengan menggunakan alamat
langsung atau pendeklarasian) atau juga menggunakan notasi atau simbol
yang telah didefinisikan oleh assembler 8051 (simbol-simbol SFR bisa dilihat
di Tabel 2.2). Carayang terakhir lebih banyak digunakan. Contoh:
My-Byte equ 70HPortl equ 90H
orgmovmovmov
end
movmovmovmovend
0000HA, My_ByteDl A
Port1, A
PSW, #O
RO, AR7, AB, R7
Dua perintah terakhir memiliki arti yang sama, bedanya perintah terakhir
memerlukan pendeklarasian bahwa Portl mempunyai alamat 90H.
4.I.3 fYIODE PENGALAMATAN REGISTER
Mode pengalamatan register (register addressing mode) adalah pemindahan
data di mana sumber atau tujuan adalah salah satu dari 8 register dari bank
register yang aktif (R0 - R7). Sebagai contoh
org 0000H
Program di atas diawali dengan memilih bank register 0 sebagai bank register
yang aktif. Kemudian isi akumulator akan dibaca dan disimpan di register R0
dan R7. Selanjutnya, isi register R7 akan digandakan ke register B.
Bahasa Assembler 805 I
4.1.4 MODE PENGATAMATAN TAK IANGSUNG
Mode pengalamatan tak langsung (indirect addressing mode) ad,alah modepengalamatan di mana alamat sumber atau tujuan tidak dinyatakan secara
eksplisit. Mode pengalamatan ini menggunakan register R0 atau Rl sebagai
register untuk menyimpan alamat sumber atau tujuan. Simbol @ dituliskan didepan R0 atau Rl untuk menyatakan bahwa register ini menyimpan alamatsumber atau tujuan pemindahan data. Sebagai contoh
My_Byte1 equ 70HMy_Byte2 egu '71H
95
orgmovmovmovmovmov
end
0000HMy_Byte1, #OEH
R0, #My*Byte1R1, #My_Byte2A, @RO
GR1, A
My-Bytel dan My_Byte2 adalah alamat di memori 70H dan 7lH. Programdiawali dengan memberi konstanta OEH ke register My_Bytel. Kemudianregister R0 menyimpan konstanta My_Byrel (70H) dan Rl akan menyimpankonstanta My_Byte2 (71H). R0 akan menyimpan alamat register sumberpemindahan data, sedangkan Rl akan menyimpan alamat tujuan pemindahandata. Baris instruksi selanjutnya, yang merupakan mode pengalamatan taklangsung, akan memindahkan data dari alamat yang ditunjukkan oleh registerR0 ke akumulator. Dalam hal ini" byte data yang tersimpan di registerMy_Bytel akan dipindahkan ke akumulator. Baris terakhir program akan
memindahkan data akumulator ke alamat yang ditunjukkan oleh register Rl,yaitu My_Byte2.
Dari contoh program di atas terlihat, register R0 dan Rl (perlu diingat hanya2 register ini yang bisa dipakai) menyimpan alamat sumber dan tujuanpemindahan data. Oleh karena itu, dalam mode ini alamat sumber dan tujuanbisa dilihat sebagai sebuah konstanta. Dengan memanipulasi isi register R0
atau Rl (dengan menambah atau mengurangi misalnya), mode ini bisadipakai untuk memindahkan data yang berulang-ulang dengan alamar
sumber dan tujuan berurutan. Program cukup mendefinisikan alamat awaldan menyirnpannya di R0 atau Rl. Kemudian saat program berjalan, R0 atau
Rl ditanrbahkun sirtu sampai alamat akhir. Programer harus memperhatikan
9196 Teknik Antarmuka dan Pemrograman l'likrokontroler AT89S52
alamat awal ini agar pada saat dijalankan, pemindahan data tidak sampai
menimpa alamat memori yang menyimpan informasi penting, misalnya
alamat stack yang menyimpan alamat kembali setelah perintah call'
Mode pengalamatan tak langsung juga berguna untuk mengakses RAM
internal tambahan AT89S52. Seperti yang telah dijelaskan pada Bab 3, RAM
internal tambahan menempati alamat yang sama dengan alamat-alamat SFR.
Pengalamatan langsung, pada alamat yang sama, akan mengakses SFR'
sedangkan pengalamatan tak langsung akan mengakses RAM internal
tambahan. Perhatikan baris program di bawah ini.
90H, #45HRl_, #90H
Bahasa Assembler 8051
Data yang tersimpan di alamat ini akan dibaca dan disimpan di A.Perhatikanlah bahwa perintah movx akan mengaktifkan pin P3.6 dan P3.7
sebagai sinyal kendali tulis t Wn I atau baca ( RD ). Oleh karena itu, kedua
pin ini tidak bisa digunakan sebagai pin IO multiguna pada saat mengaksesmemori eksternal. Begitu pula dengan P0 dan P2 karena port ini digunakansebagai bus data dan bus alamat.
Selain DPTR, register R0 atau R1 bisa digunakan untuk membaca memorieksternal melalui perintah movx. Misalnya program di atas bisa digantidengan program sebagai berikut )
org 0000Hmov A, #45mov R0, #0mov P2, #0mowx GR0, A
movmovmov
Instruksi pertama adalah mode pengalamatan langsung. Perintah ini akan
memindahkan konstanta 45H ke register 90H, dalam hal ini alamat SFR
untuk P1. Instruksi terakhir adalah mode pengalamatan tak langsung.
Perintah ini akan mengirim konstanta 45H ke alamat yang ditunjukkan oleh
R0 (dalam hal ini 90H). Perintah ini tidak akan mengirim data ke P1, tetapi
akan mengirim data ke alamat RAM internal tambahan di alamat 90H.
Ingatlah unruk menggunakan mode pengalamatan tak langsung untuk
mengakses RAM internal tambahan AT89S52.
Selain untuk pemindahan data antarmemori-internal (SFR atau RAM), mode
pengalamaran tak langsung juga bisa digunakan unruk pemindahan data
antar-akumularor dan memori data (RAM) eksternal. Mnemonik yang
digunakan adalah movx. Perhatikan contoh program berikut
org 0000Hmov A, #45mov DPTR, #OOOOH
MO\rX @DPTR, Amov DPTR, t*L234H
mo\a( A, @DPTR
end
Byre data yang akan dikirimkan disimpan di akumulator, sedangkan alamat
memori eksternal disimpan di DPTR (0000H). Perintah selanjutnya adalah
mengirimkan data yang disimpan di register A ke alamat memori eksternal
yang tersimpan di DPTR. Dua perintah terakhir adalah perintah untuk
membaca data dari memori eksternal. DPTR akan menyimpan alamat 1234H.
movx A, 0R0end
R0 atau R1 hanya menyimpan alamat orde rendah (A0 - A7), sedangkan ordetinggi (A8 - Al5) dikirimkan secara langsung ke P2. Apabila alamar ordetinggi tidak dikirimkan (karena memori atau perangkat luar hanyamemerlukan 8 bit alamat), P2 bisa digunakan sebagai port outpur karenamikrokontroler akan mempertahankan data sebelumnya.
4.1.5 MODE PENGATAMATAN BERINDEKS
Mode pengalamatan berindeks dipakai untuk membaca byte dara arau
konstanta yang tersimpan dalam memori program dan menyimpannya diakumulator. Alamat memori program yang berisi byte data yang akan dibacadisimpan di dalam DPTR atau PC. Alamat ini adalah alamar dasar (base
address) karena alamat yang sesungguhnya didapat dengan menjumlahkanDPTR atau PC dengan isi akumularor (alamat offset). Instruksi yangdigunakan adalah movc dengan format instruksi
movc A, @A+DPTR
atau
movc A, @+PC
movmov
R0, #34HP2, #L2H
Ieknik Antarmuka dan Pemrograman I'likrokontroler AT89552
Dalam bahasa assembler terdapat Pernyataan untuk mendefinisikan
konstanta dalam memori program. Pernyataan itu adalah db (define byte).
Konstanta ini misalnya digunakan untuk menyimpan data yang akan
ditampilkan melalui LCD atau menyimpan data untuk mengubah bilangan
menjadi data display 7 segmen. Sebagai contoh
dbdbdbdbdbdbdbdbdbdb
pendefinisian data di atas adalah pendefinisian data untuk mengubah angka 0
sampai 9 menjadi data display 7 segmen sebelum dikirimkan ke sebuah port
d".!u' pX.g dihubungkan ke segmen a sampai PX.6 dihubungkan dengan
."g-"., g. Angka 0 akan dikonversi menjadi 0C0H dan angka 9 menjadi 90H'
Angka yang akan diubah disimpan di register A' Contoh programnya
Segrnent-Converter:mov DPTR, #0100HMOVC A, @A+DPTR
ret
org 0100Hdb 0c0Hdb 0F9Hdb 0A4Hdb 0B0Hdb 099Hdb o92Hdb 082Hdb OFBH
db 080Hdb 090H
program di atas adalah sebuah subrutin yang akan mengkonversi angka
desimal menjadi data display 7 segmen (dengan nama subrutin segment-
Atnverter). Misalnya jika register menyimpan angka 3, DPTR akan diisi oleh
Bahasa Assembler 8051
alamat awal pendefinisian data. Ketika perintah movc dieksekusi, DPTR akanmenyimpan 0103H (0100+0003H) sehingga data yang terbaca adalah 0B0H.
|ika PC yang digunakan program di atas akan menjadi
Segrnent*ConverLer :
inc Amovc A, GA+PCret
db 0c0Hdb 0F9Hdb 0A4Hdb 0B0Hdb 099Hdb 092Hdb 082Hdb 0F8Hdb 0B0Hdb 090H
Perbedaan yang terlihat adalah, PC tidak diisi dengan alamat awalpendefinisian data tetapi dengan mengambil nilai PC yang sekarang. Perintahmovc dikodekan 1 byte dalam bahasa mesin (baik menggunakan DPTR atau
PC). Perintah inc A diperlukan untuk menaikkan isi register A ini karena ada
instruksi ret sebelum pendefinisian data. |ika register A menyimpan angka 3maka setelah dinaikkan menjadi 4 oleh perintah inc, perintah movc akan
membaca data di alamat perintah movc ditambah 4 (dalam hal ini 0B0H).Pendefinisian data atau disebut tabel data dengan menggunakan PC harustepat setelah instruksi ret, sedangkan jika menggunakan DPTR, tabel data
bisa diletakan di mana saja dalam area program memori.
4.1.6 PEMINDAHAN DATA BERORIENTASI STACK
Pemindahan data berorientasi stack adalah mode pemindahan data dengan
SFR SP (stack pointer) sebagai register sumber dan tujuan. Instruksi yangdigunakan adalah push dan pop. Perintah push akan menyimpan data ke SP
(SP sebagai tujuan), sedangkan perintah pop akan mengambil data dari SP (SP
sebagai sumber). SP akan ditambahkan dengan 1 setelah perintah push dandikurangi I sctelah perintah pop. Setelah reset SP akan menyimpan data 07Hst.hingga alarnat awal yang dipakai adalah 08H, tetapi alamat awal bisa
9998
OCOH
OF9HOA4HOBOH
099H092H082HOFSH
080H090H
t0l100 Ieknik Antarmuka dan Pemrograman l'likrokontroler AI89S52
dimodifikasi oleh progam. Seorang programer harus berhati-hati dalam
menentukan alamat awal SP. Oleh karena SP akan menempati alamat RAMinternal, maka jika penempatan alamat awal salah, operasi stack bisa meng-
akibatkan menimpa alamat RAM yang menyimpan data penting.
Pada dasarnya operasi SP menggunakan mode pengalamatan langsung meng-
gunakan semua register SFR dan RAM internal (termasuk SP sendiri). Khusus
unruk akumulator, notasi yang digunakan harus ACC. Perintah push dan pop
tidak mengenal notasi A. Sebagai contoh
push ACC
push A
Perintah kedua akan mengakibatkan assembler 8051 membangkitkan pesan
kesalahan.
Contoh program operasi SP
org 0000Hrnov SP, #2FHmov A, #45Hpush ACC
mov B, #0pop B
end
Alamat awal SP ditenrukan di alamat 2FH. Register A akan menyimpan data
45H. Kemudian perintah push dieksekusi sehingga data yang sekarang
disimpan di A akan disimpan di memori SP (dalam hal ini alamat 30H).
Instruksi berikutnya akan menyimpan konstanta 0 ke register B. Perintahpop akan mengambil data di alamat SP (30H) dan menyimpannya ke register
B" Alamat SP kemudian akan menjadi 2FH.
Operasi SP adalah operasi untuk penyimpanan data sementara untukkemudian diambil kembali. Operasi ini biasanya dipakai di rutin pelayanan
interupsi (ISR). Sebagai contoh program yang berjalan sekarang meng-
gunakan register A. Kemudian interupsi eksternal diaktifkan sehingga
program akan melompat ke ISR. Di dalam ISR, register A, DPTR dan register
B digunakan untuk sebuah operasi aritmatika. Agar data register A, DPTR,
dan register B yang lama tidak tertimpa oleh data yang baru maka di awal
ISR, isi register-register tersebut harus disimpan di dalam SP unttrk dibaca
kembali setelah seluruh instruksi di ISR dieksekusi. Contoh prograrnnyir
Bahasa Assembler 8051
org 0013HExternall_ISR:
push ACCpush DPHpush DPLpush BTNSTRUKS]
INSTRUKSIpop Bpop DPLpop DPHpop ACCreti
;Vektor interupsi eksternal 1
;Simpan data akumulator;Simpan data DPTR orde tinggi;Simpan data DPTR orde rendah;Simpan data register B
;Ambi1 kembali data regisLer B
;Ambil kembali dat.a DPL;Ambil kembali data DPH
;Ambil kenrlcali data akumulator;Rutj-n interupsi berakhir
SP, sesuai namanya, adalah tumpukan data. Menyimpan data di SP artinyamembuat tumpukan data dari alamat awal SP. Untuk mengambil kembalitumpukan tersebut, harus dimulai dari tumpukan paling aras, artinya datayang paling akhir disimpan ke SP. Oleh karena itu, perlu diperhatikan agarperintah pop dimulai dengan register yang paling akhir disimpan, dalamcontoh di atas adalah register B, diikuti DPL, DPH dan ACC.
4.1.7 PERTUKARAN DATA
Salah satu bentuk pemindahan data yang lain adalah pertukaran data (datacxchange) secara langsung antara akumulator dengan register yang lain tanpaharus menggunakan register tambahan. Perhatikan contoh program di bawahini
mov A, #45Hmov B, #34Hmov R0, Amov A, Bmov B, R0
l'rogam di atas akan menukarkan isi register A dengan register B, datart'gistcr A akan dipindahkan ke register B dan sebaliknya. Program inirnt.nggurrakan register R0 sebagai register untuk menyimpan sementara datarr.gistcr A.
t0lt02 Ieknik Antarmulo dan Pemrograman Mikrokontroler AI89552
Dengan rirenggunakan operasi pertukaran data, penggunaan R0 bisa
dihilangkan. Keluarga 8051 mengenal 2 perintah pertukaran data yaitu
perintah xch (semua byte) dan xchd (hanya nibble rendah). Perintah xch
akan menukarkan data akumulator dengan SFR, RAM internal, salah satu
dari 8 register (R0 - R7) atau dengan alamat RAM yang ditunjukkan oleh
register R0 atau R1. Sedangkan xchd merupakan perintah Pertukaran data
dengan register-register yang ditunjukkan oleh R0 atau R1 (tak langsung),
retapi hanya untuk nibble bawah (bit 0 - bit 4). Perhatikan contoh program
di bawah ini yang merupakan perubahan dari program di atas.
mov A, #45Hmov B, #34Hxch A, B
penggunaan R0 dihilangkan dengan perintah xch. Perhatikan juga contoh
program di bawah ini
Bahasa Assembler 8051
karena 90H nibble rendahnya adalah 0, maka P1 bisa dialamati per bit.Mengakses bit bisa dilakukan dengan beberapa cara, yaitu dengan meng-gunakan notasi P1.n (dengan n = 0...7) atau dengan menggunakan alamat bitsecara langsung. Alamat bit ke-O, 1,2,...7 adalah 90H,91H,92H,...97H.Alamat 90H bisa sebagai alamat Pl pada operasi byte atau sebagai alamat P1.0pada operasi bit.
Untuk mengakses bit SFR yang lain bisa juga seperti halnya mengakses P1
atau dengan menggunakan definisi bit yang telah didefinisikan olehassembler 8051. Sebagai contoh, untuk mengakses bit carry di PSW bisa
dengan notasi PSW.7 atau cukup dengan norasi C. Untuk akumulator notasiyang dipakai adalah ACC.O, ACC.1, ..., ACC.7.
RAM internal yang bisa dialamati per bit (alamat 20H - 2FH) memilikialamat bit yang diatur sebagai berikut. Bit ke-j dari RAM internal i akanmemiliki alamat
8 x (i- 20H) + j, dengan i = 20H, 2lH, ...,2FH, dan j = 0, 1, ...,7
Sebagai contoh bit ke-2 RAM 23H akan memiliki alamat
8x(23H-20H)+2=1AH
Dari persamaan di atas, bisa didapatkan bahwa bit yang beralamat n adalah
bit ke-j dari register i, di mana
i=int(1)+2oH8
j = n - 8 (i - 20H), dengan n = 0, 1, ...,7FH
int adalah nilai integer (bilangan bulat). Sebagai contoh bit yang beralamat di65H, maka
i-int(l)+2oH8
inr( 65II)+2oH'8
2CII
movmovmovmovmovxchxchxch
alamat
xchd A, @Rl-
di
; simpan 45H di A
; simpan 23H di B
; simpan 0 di R0
;simpan 30H di R1
;simpan ODH di alamat 30H
;tukarkan isi data A dengan B
; tukarkan isi data A dengan R0
; tukarkan isi data A dengan
;yang ada di R1
; tukarkan nibble bawah A dengran
;nibble bawah alamaL Yang ada
;R1
A, #45HB, #23HR0, #0R1, #30H3OH, #ODH
A,BA, RO
A, @R]-
4.I.8 PEMINDAHAN DATA BERORIENTASI BIT
Selain pemindahan data dalam ukuran byte, sePerti yang telah diielaskan
sebelumnya, bahasa assembler 8051 juga mengenal operasi pemindahan data
dalam bentuk bit. Seperti diketahui, 8051 memiliki SFR yang bisa dialamati
per bit. RAM internal yang beralamat di 20H - 2FH juga bisa dialamati per
bit.
SFR-SFR yang bisa dialamati per bit adalah SFR yang mempunyai alamat
nibble rendah 0 atau 8. Sebagai cotrtoh Port I (Pl) mempunyai alurrrlt (X)ll'
r05t04 Ieknik Antarmuka dan Pemrograman l'likrokontroler AT89552
j=n-8(i-20H)
= 65H - 8(2CH - 20H)
=5H
Sehingga bit yang beralamat di 65H adalah bit ke-5 dari RAM 2CH.
Tabel 4.2 memperlihatkan alamat-alamat bit dari RAM internal 20H - 2FH'
Selain dengan menggunakan alamat seperti ditunjukkan tabel, alamat RAM
20H - 2FH bisa diakses dengan menggunakan pernyataan equ, misalnya
Bahasa Assembler 8051
internal yang beralamat di 20H digunakan untuk menyimpan status LED dandidefinisikan sebagai LED_Flag (bit ke-0).
Tobel 4.2 Alomol 8il RAM lnternol 20H - zfH
4.2 PENGOTAHAN DATAMikrokontroler 8051 memiliki sebuah unit aritmatika dan logika (ALU) yarrgberfungsi untuk melakukan pengolahan data (data processing) melaluioperasi-operasi aritmatika dan logika. Oleh karena itu, 8051 dilengkapidengan instruksi-instruksi untuk melakukan pengolahan data yang dibagimenjadi 2, yaitu instruksi-instruksi aritmatika dan instruksi-instruksi logika.
Instruksi-inst*rksi urirmatika digunakan untuk melakukan operasi-operasiurit rnatika sr.Pr.rl i. gr.rr jurnlahan, pengurangan, dan perkalian, Sedangkan
My-Flag adalah RAM internal yang berlamat di 20H, sedangkan LED-Flag
dan Motor-Flag adalah definisi bit ke-0 dan ke-1 dari register My-Flag.
LED-Flag d,alam program akan memiliki alamat yang sama dengan 20H.0 dan
20H.1 atau alamat bit 00H dan 01H.
Pada dasarnya alamat yang bisa diakses per bit bisa dibaca dan dipindahkan
ke alamat bit yang lain, walaupun ada beberapa operasi bit yang tidak diizin-
kan oleh assembler 8051. Sebagai contoh
mov 20H.0, C
mov TI, C
mov TI,20H.0mov 20H.0, Tr
Dua perintah terakhir akan menimbulkan Pesan error oleh assembler 8051.
Perhatikan contoh program di bawah
My_Fl-agLED_F1agMotor_F1ag
LED_CTRLMy_F1agLED_F1ag
equ 20Hequ My-Flag.0egu My_Flag.1
eqFreguequ
Program di atas mengasumsikan 2
menyalakan sebuah LED yang
P1 .120HMy_F1ag. 0
buah saklar yang terhubung ke P1.0 untukterhubung ke LED-CTRL (Pl.l). RAM
orgmovmovmov
end
0000Hc, P1.0LED_F1ag, C
LED-CTRL, C
RAM BitT Bit6 Bit5 Bit 4 Bit3 Bit2 Bit I Bit0
2FH 7FH 7EH 7DH 7CH 7BH 7AH 79H 78H
2EH 77H 76H 75H 74H 73H 72H 7tH 70H
2DH 6FH 6EH 6DH 6CH 68H 6A'H 69H 68H
2CH 67H 66H 65H 64H 63H 62H 61H 60H
2BH 5FH 5EH 5DH 5CH 5BH 5A.H 59H 58H
2AH 57H 56H 55H 54H s3H 52H 5lH 50H
29H 4FH 4EH 4DH 4CH 48H zlAH 49H 48H
28H 47H MH 45H 44H 43H 42H 41H 40H
27H 3FH 3EH 3DH 3CH 38H 3AH 39H 38H
26H 37H 36H 3sH 34H 33H 32H 31H 30H
25H 2FH 2EH 2DH 2CH 2BH 2AH 29H 28H
24H 27H 26H 25H 24H 23H 22H 21H 20H
23H 1FH IEH IDH 1CH lBH IAH l9H 18H
22H 17H 16H 15H 14H 13H 72H llH 10H
21H OFH OEH ODH OCH OBH OAH 09H 08H
20H 07H 06H 05H 04H 03H 02H 01H 00H
r07r06 Teknik Antarmuka dan Pemrograman l'likrokontroler AT89552
instruksi-instruksi logika digunakan untuk melakukan operasi-operasi logika,
seperti perkalian digital (instruksi AND) atau penjumlahan digital (oR).
4.2.1 !NSTRUKSI.INSTRUKSI ARITMATIKA
Instruksi-instruksi aritmatika digunakan untuk melakukan operasi-operasi
aritmatika seperti, peniumlahan' pengurangan dan perkalian' Tabel 4'3
merangkum instruksi-instruksi 8051 yang tergolong instruksi aritmatika.
lobel 4.3 lnslruksi-lnslruksi Arilmoliko
Bahasa Assembler 8051
4.2.1.1 lnstruksi Peniumlohon
Acla 2 peri,tah untuk operasi penjumlahan, yaitu add dan addc. perintah
l)('r'tarna adalah pt'rirrralr Pcrrjurnlahan dengan tidak mengikutsertakan bitb:rw:r:rrr ((: < irr r y), sr.rlirrrgkirrr pcrintah kedua merupakan perintah
Instruksi Bennrklnsuuksi Keterangan
Penjumlahan
addA, Rn
Penjumlahan isi register R0 - R7
dengan isi akumulator, hasil disimpan
di akumulator
add A, directPenumlahan isi register A dengan RAM
internaVSFR.
addA, @RiPenjumiahan isi register Yang
ditunjulkan oleh R0 atau R1 dengan A
addA, #data Penjumlahan konstanta dengan A
addc A, Rn
Penjumlahan isi register R0 - R7
dengan isi akumulator di mana bit carry
C ikut dijumlahkan, hasil disimpan di
akumulator
addc A, direct
Penjumlahan isi register A dengan
RAM internaVSFR. Bit C ikut
dijumlahkan
addcA, @Ri
Penjumlahan isi register Yang
ditunjukkan oleh R0 atau R1 dengan A.
Bit C ikut dil'umlahkan
addc A, #dataPenjumlahan konstanta denganA. Bit C
ikutdijumlahkan
Pengurangan subb A, RnPengurangan A oleh R0 - R7. Hasil
disimpan di A
Instru}si Bentuklnsmd<si Keterangan
subb A, direct Pengurangan A oleh RAIWSFR
subb A, @Ri
Pengurangan A oleh register taklangsung yang dirunjulkan oleh R0
atau Rl
subb A, #data Pengurangan A oleh konstanta
Perkalian mulAB
Perkalian register A dengan B. Hasilnya
adalah bilangan i6 bit, byte orderendah disimpan di A sedangkan byteorde tinggi disimpan di B
Pembagian divABPembagian register A dengan B. Hasilpembagian disimpan di A, sedangkan B
akan menyimpan sisa pembagian
Penaikan
(incremen)
incA Naikkan register A sekali
inc Rn Naikkan register R0 - R7 sekali
inc direct Naikkan RAIWSFR sekali
inc @RiNailckan isi RAM internaVSFR yangditunjukkan oleh R0 atau Rl sekali
inc DPTR Naikkan isi DPTR sekali
Penurunan
(decremenr)
dec A Turunkan register A sekali
dec Rn Turunkan register R0 - R7 sekali
dec direct Turunkan RAM/SFRsekali
dec @RiTurunkan isi RAM internaVSFR yangditunjukkan oleh R0 atau R1 sekali
Pengaturan
DesimaldaA
Pengaturan register A, ketika mengolahdata BCD
r09r08 Teknik Antarmuka dan Pemrograman i'likrokontroler AT89552
penjumlahan dengan mengikutsertakan bit C dari hasil operasi sebelumnya.
Kedua perintah ini menggunakan akumulator sebagai operand Pertama
(operand pertama selalu akumulator), sedangkan operand kedua bisa sebuah
konsranta, salah satu register R0 - R7 dari bank register yang aktif, alamat di
RAM internal atau sFR, atau alamat RAM tak langsung yang ditunjukkan
oleh R0 atau R1. Hasil penjumlahan selalu disimpan di akumulator.
Bit-bit PSW yang dipengaruhi oleh perintah ini adalah bit C (carry)' AC
(auxitiary carry), dan bit oY (overllow). Bit C akan di-set jika hasil pen-
jumlahan melebihi FFH dan di-reset kalau sebaliknya. Bit AC akan di-set jika
penjumlahan menghasilkan bawaan (carry) dari nibble rendah ke nibble
tinggi, yaitu bawaan dari bit 3 ke bit 4, dan di-reset jika sebaliknya. Bit AC
berguna dalam penjumlahan bilangan BCD. Sedangkan bit ov akan di-set
jika ada bawaan bit 7 tetapi tidak dari bit 6, atau ada bawaan dari bit 6 tetapi
tidak bit 7. OV berguna dalam penjumlahan bilangan bertanda (positif atau
negatifl di mana bit 7 dipakai sebagai bit yang menandakan tanda positif atau
negarif. Ada 2 keadaan yang bisa mengeset ov. Pertama" jika hasil
penjumlahan antara 2 bilangan positif melebihi 7FH tetapi kurang dari FFH,
hasilnya, dalam notasi komplemen 2, terlihat sebagai bilangan negatif. ovakan di-set untuk menandakan bahwa hasil penjumlahan bukan bilangan
negatif. Keadaan yang kedua, penjumlahan 2 bilangan negatif akan selalu
menghasilkan bit carry eksternal. |ika hasil penjumlahan tersebut berada di
antara 0 dan 7FH (100H dan 17FH dengan carry eksternal), maka ov akan
di-set untuk menandakan bahwa hasil penjumlahan bukan bilangan positif.
Perhatikan contoh program perintah add berikut.
org 0000Hmov A, #1add A, #2mov R7, #2add A, R7
mov 45H, #2add A, 45H
mov R0, #45H ;simpan 45 di R0 'add A, @.R0 ;tambahkan A dengan RAM yang
;ditunjukkan oleh R0, A=9
end
Bahasa Assembler 8051
Perintah addc (penjumlahan dengan carry), biasanya berguna untukmenjumlahkan bilangan lebih dari 8 bit. Misalnya X dan y adalah 2 bilanganbulat 16 bit dengan XL dan YL menyatakan byte rendah kedua bilangan danXH dan YH menyatakan byte tinggi kedua bilangan. Contoh program berikutakan menjumlahkan bilangan X dan Y. XL, XH, YL dan yH dinyatakansebagai alamat RAM internal. Hasil penjumlahan akan disimpan sebagaibilangan Z, dengan ZL dan ZH menyatakan byte rendah dan tinggi bilanganZ. Keduanya juga dinyatakan sebagai alamat RAM.
XLXHYLYHZLZH
mov A, XLadd A, YLmov ZL, A
mov A, XHaddc A, YHmov ZH, A
cnd
egu 30Heqnr 31-H
egu 32Hequ 33Hegu 34Hequ 35H
0000HxH, #L2H ;X=1234HxL, #34HYH, #L2H ;Y=12EFH\,1,, #OEFH
orgmovmovmovmov
; jumlahkan byt.e rendah
,'simpan hasil di ZL;ZL = 34H+0EFH; =23u; C=1,'Jumlahkan byte tinggi;bit C juga ikut dijumlahkan;ZH = L2H+L2H+C; =25H;Hasi-l akhlr Z=2523H
; simpan 1 di A, A=1
;tambahkan A dengan 2, A=3
,'simpan 2 di R7
;tambahkan A dengan R7, A=5
; simpan 2 di alamat 45H
;tambahkan A dengan alamat 45H,
;A-7
Misalnya X = 1234H dan Y = 12EFH, maka XL = 34H, XH =12H, yL = EFHtlan YH = l2H. Pertama jumlahkan byte rendah kedua bilangan, hasilnyasirnpan sebagai byte rendah hasil (ZL). Berdasarkan hasil penjumlahan ini bitcarry akan di-set atau tidak, dalam contoh progam bit C akan di-set (34H +
l'lfll = 123H, I adalah carry). Kemudian jumlahkan byte tinggi keduahila.gan dengan mengikutsertakan carry dari hasil pen;'umlahan byte rendah.
il0 Ieknik Antarmuka dan Pemrograman l'likrokontroler AI89l52
4.2.1.2 lnslruksi Pengurongon
Operasi pengurangan menggunakan perintah subb. Seperti halnya operasi
penjumlahan, perintah subb menggunakan akumulator sebagai operand
pertama, sedangkan operand kedua bisa sebuah konstanta, salal'r satu register
R0 - R7 dari bank register yang aktii alamat di RAM internal atau SFR, atau
alamat RAM tak langsung yang ditunjukkan oleh R0 atau R1. Hasil
pengurangan selalu disimpan di akumulator.
Dalam operasi pengurangan, bit carry (C) akan selalu diikutsertakan, dengan
kata lain perintah subb adalah operasi pengurangan akumulator oleh bit carry
dan alamat atau data yang ditunjukkan oleh operand kedua. Artinya jika bit C
di-set sebelum perintah subb, hasil pengurangan akan dikurangi 1. Bit C akan
di-set jika operasi peng,urangan membutuhkan pinjaman (borrow) eksternal.
Bit C ini bisa digunakan dalam operasi pengurangan bilangan bulat lebih
besar daripada 256. bilangan 16 bit misalnya. Prosesnya dilakukan sePerti
halnya penjumlahan 16 bit, kurangkan dulu byte rendah kemudian
kurangkan byte tingginya. Namun karena bit C selalu diikutsertakan,
pastikan bit C ini di-reset dahulu sebelum proses pengurangan pertama (byte
rendah). Hal ini bisa dilakukan dengan menggunakan perinrah berorientasi
bitcl-r C
Bit AC dan OV juga akan terpengaruh oleh perintah subb. Bit AC akan di-setjika diperlukan pinjaman untuk nibble rendah (bit 3), sedangkan bit OV akan
di-set kalau diperlukan pinjaman untuk bit 7 tetapi tidak untuk bit 6, atau
diperlukan pinjaman untuk bit 6 tetapi tidak untuk bit 7. Bit OV berguna saat
bekerja dengan bilangan bulat bertanda yang dinyatakan dalam komplemen 2.
Perhatikan contoh program berikut
org 0000Hclr C
mov A, #10subb A, #2c1r C
mov R7, *2subb A, R7clr C
mov 45H, #'1
subb A. 45H
;nol-kan bi-L C
; simpan 10 di A, A=10;kurangkan A dengan 2, A=8
; simpan 2 di R7
;kurangkan A dengan R7, A=6
;simpan 7 di alamat 45ll;kurangkan A denq;rn ,t l,tttt.tt 4rrll,
Bahara Assembler 8051 ilr
end
Perhatikan 5 baris program terakhir. Hasil perintah sebelumnya A akanmenyimpan bilangan 6 dan bit c bernilai nor. Kemudian A akan dikurangioleh isi alamar 45H (birangan 7). pengurangan ini akan menghasirkanbilangan FFH dan bit c akan di-set lkarena membutuhkan pinjamaneksternal). selanjurnya A akan dikurangi ragi oreh aramar 45H meraluipengalamatan tak langsung (45H menyimpan bilangan 1). Hasilnya adarahFEH, namun karena bit c sebelumnya di-sei, maka hasil akhir adalah FDH.Perhatikan program pengurangan bilangan 16 bit berikut
equ 30Hequ 31Hequ 32Hegu 33Hequ 34Hegu 35H
mov 45H, #1mov R0, #45Hsubb A, @RO
org 0000Hmov XH, *l2Hmov XL, #34Hmov yH, #11Hmov yL, #35H
clr C
mov A, XLsubb A, yLmov ZL, A
mov A, XHs;ubb A, yHrn()v ZH, A
;A=FFH)Cakandi_set;simpan 1 di alamat 45H; simpan 45 di R0,'kurangkankan A dengan RAM yang;ditunjukkan ofeh R0, A=FD,;C di-reset
XLXHYLYHZLLN
;x=7234H
;Y=1135H
;Kurangkan byte rendah;XL-YL=34H-35H;ZL=FFH)Cakandi_set
;Kurangkan byte tlnggi;XH - YH = 12H - 1l-H =1;Hasil akhir karena C di_set;ZH = 1-1 =0;X-Y = 1-234H - 1135H = 00FFH,'tr,l
Teknik Antarmuka dan Pemrograman Mikrokontroler AT89552
Dalam Program di atas, X=1234H akan dikurangi Y=1135H' Keful bilangan
ini dinyatakan dengan 2 byte, masing-masing XH dan XL untuk,bilangan X
danYHdanYLuntukbilanganY.Pertamabyterendahbilanganx(xL=34H)dikurangi oleh byte rendah-bilangan Y (YL=35H)' sebelumnya bit C di-reset'
HasilnyaadalahFFHdandisimpandiZHdenganbitCdi_set'Selanjutnyabyte tinggi ya.,g diku'"ngi' Uasllnya adalah 00H (karena C di-set)' Hasil
akhir pengurangan adalah 00FFH'
4.2.1 .3 lnstruksi Perkqlion
Keluarga 8051 hanya mengenal saru perintah perkalian' yaitu
mu1 AB
perintah ini akan mengarikan birangan yang tersimpan di register A (8 bit)
dengan bilangan yuttg-t""i*pan di register B (juga 8 bi$' Hasilnya adalah
bilangan 16 bit; A "ku"
m"t'yitpa' byte orde rendah' sedangkan B akan
menyimpan byte orde tinggi' Hasil perkalian tidak akan melebihi FFFFH
(karena FFHxFFH = fEOlHilsehlngga bit C tidak akan pernah di-set' Bit OV
akandi-setkalauhasilperkalian-"t"uit'i00FFH,dalamhaliniregisterBmenyimpan d,ata bukan 0' Perhatikan contoh berikut
mov A, #1
mov B, *2muI AB
Hasil program di atas adalah' A akan menyimpan bilangan 2 sedangkan B
akan menyimpan bilangan 0' Bit OV tidak di-set'
mov A, #0FFHmov B, #2
mul AB
Hasilnya A akan menyimpan FEH dan B menyimpan 1' Bit OV akan di-set'
4.2.1 .4 lnslruksi Pembogion
Bahasa assembler 8051 juga hanya mengenal satu perintah pembagian
div AB
Perintah ini akan membagi bilangan yang tersimpan di register A dengan
bilangan yang tersimp"' ii '"gitter B' Register A akan mt'nyirnp;rrr hasil
pembagian, ,edungk'n 'i'o p"-b'giatr akatr disimpan di rtp'istr'r lt liktt Il
Bahasa Assembler 8051
menyimpan bilangan 0, maka pembagian akan menghasilkan bilangan yangtidak terdefinisi, pada keadaan ini bit OV akan di-set.
mov A, #7mov B, *2div AB
Hasil progam di atas A akan menyimpan bilangan 3 dan B menyimpanbilangan l.
4.2.1.5 lnstruksi Penoikon don Penurunqn
Instruksi penaikan (increment) dan penurunan (decremenr) memungkinkanuntuk menaikkan atau menurunkan isi bank register, SFR atau alamat RAMinternal (langsung atau tak langsung) secara langsung tanpa melaluiakumulator terlebih dahulu. Instruksi ini sama dengan penjumlahan ataupengurangan dengan bilangan satu dengan tidak melibatkan bit carry.
Bentuk perintahnya adalah inc untuk penaikan dan dec untuk penurunan,rnisalnya
mov A, #4mov R7, #45mov 30H, #6mov R0, #30Hinc AANC R/i-nc 30Hinc GRO
l'rogram ini akan membuat A menyimpan bilangan 5, R7 menyimpan 45,scclangkan alamat RAM 30H akan menyimpan 8, karena dinaikkan 2 kali,rlt'ngan pengalamatan langsung dan tak langsung. Contoh instruksi dec
t irrggal mengganti mnemonic inc dengan dec.
l't'rintal.r inc juga mengizinkan untuk menaikkan isi DPTR, perhatikanr .rrtoh proBram berikut
rn()v DPTR, #L234Hrrrc DPTR
llrrsrlrrya l)l/l'li akan menyimpan data 1235H. Assembler 8051 tidakurr'nll(.r)irl pt'r'irrtah dt'c I)1'}'l'R.
il3il2
Teknik Antarmuka dan Pemrograman l'likrokontroler AT89S52
Perintah inc dan dec berguna dalam pencacah loop atau penunjuk ke data'
misalnya dalam pengiriman 20 byte data yang tersimpan di RAM melalui
por, ,"riul. R0 dipakai sebagai penunjuk RAM (pengalamatan tak langsung)'
sedangkan R7 dipakai sebagai pencacah loop' Contoh programnya
org 0000Hmov R0, #30Hmov R7, #20
Loopl:mov A, @R0
mov SBUF, Ajnb TI, S
i-nc R0
djnz R7, LooPlend
Data yang akan dikirim mempunyai alamat awal 30H' Dengan pengalamatan
t"k turrgr.,rg, data yang akan dikirim dipindahkan ke akumulator untuk
kemudian dikirim t" port serial (melalui register SBUF). Perintah irjt' (iump
if no bit) digunakan ,ttrk rn"t'gecek apakah pengiriman selesai atau belum'
Sedangkan perintah djnz (decriment and iump if no zero) digunakan untuk
m"rrgJc"k apakah t "_io
uyt" data sudah terkirim atau belum. Kedua perintah
iniakandibahasdibagiarr-selanjutnya.Selamake-20bytebelumterkirim,R0akan dinaikka.t sehiigga akan memperlihatkan alamat RAM yang akan
dikirim selanjutnYa.
4.2.1.6 lnshuksi Pengoiuron Desimol
Instruksi pengaturan desimal (decimal adjust) berguna dalam memproses
(operasi p"rrj.r*tut u.r) bilangan BCD (binary coded decimaf ' Dalam bilangan
nCn,r"riupnibbleakan-el"mbangkandigitdesimal'sehinggasetiapnibbleuk"., *u*p.rnyai nilai 0..'9' Misalnya 2 bilangan BCD 12 dan 19 dalam BCD
akan dilambangkan sebagai 12H dan 19H' Penjumlahan kedua bilangan
(dengan add atau addc tanpa bit carry) akan menghasilkan bilangan 2BH'
Bilangan 2BH bukan bilangan BCD karena BH melebihi bilangan 9, sehingga
diperiukan sebuah pengaturan' Pengaturan ini dilakukan dengan mengurang-
kan nibble rendah duig"r, bilangan 10 dan bawaan harus ditambahkan ke
nibble tinggi, sehingga iiUUtu rendah akan bernilai (BH - l0 =1) dan nibble
tinggi akan bernilai (2+1=3)' |adi, hasil akhir adalah 31H'
Bahasa Assembler 8051
Instruksi pengaturan desimal (mnemonic da) menyederhanakan prosespengaturan di atas dengan menambahkan 6 ke nibble rendah atau 06H kebyte hasil (2BH+6=31H). Pengaturan juga dilakukan jika jumlah kedua nibblerendah melebihi 16. Instruksi da mendeteksi keadaan ini berdasarkankenyataan bahwa bit AC akan di-set jika instruksi add atau addcmenghasilkan carry dari bit 3 ke bit 4. Selain itu, jika penjumlahan nibbletinggi melebihi 9, perintah da akan menambahkan 6 ke nibble tinggi ataumenambahkan 60H ke byte hasil. Dengan demikian instruksi pengarurandesimal bisa dipandang sebagai penambahan 0, 6, 60H atau 66H keakumulator, bergantung pada isi akumulator dan PSW. Perhatikan contohprogram berikut
org 0000H
il5il4
movmovaddda
end
movmovadd
A, #1_2H
B, #19HA,BA
A, #55HB. #66HA,B
Setelah instruksi add, akumulator akan menyimpan 2BH (bukan bilanganBCD). Dengan instruksi da, akumulator akan menyimpan bilangan BCD yangbenar, yaitu 31H. Perhatikan contoh program berikutnya
org 0000H
daAend
Setelah instruksi add, akumulator akan menyimpan BBH (juga bukanbilangan BCD). Karena penjumlahan nibble rendah dan nibble tinggi sama-sama melebihi 9, maka instruksi da akan menambahkan 66H ke hasilpenjumlahan, sehingga hasil akhir adalah BBH+66H=121H. Akumularor akanrnenyimpan 21H dan bit C akan di-set.
lnstruksi da tidak bisa mengubah bilangan heksadesimal ke bilangan desimalsccara langsung.
lt7il6 Teknik Antarmuka dan Pemrograman llikrokontroler AI89S52
4.2.2 INSTRUKSI-INSTRUKSILOGIKA
Instruksi logika adalah instruksi yang akan melakukan operasi-operasi logika
seperti, logika AND, OR, eksklusif-OR (XOR). Operasi komplemen
akumulator, memutar bit akumulator, dan operasi swap juga termasuk ke
dalam operasi logika ini. Operasi logika bisa digunakan untuk data berbentuk
byte atau bit. Tabel 4.4 merangkum instruksi-instruksi logika ini.
Tobel 4.4 lnstruksi-lnstruksi Logiko
Bahasa Assembler 8051
L:smrksi Bentuklnsoriksi Keterangan
orl direct, #data OR-kan RAI\,[/SFR dengan konstanta
Logika OR
(Bir)
orl C, bit OR-kan bit C dengan bit (RAIWSFR)
orl C, /bit OR-kan C dengan komplemen bir(RAM/SFR)
Iogika
XOR
(Byt")
xrlA, RnXOR-kan A dengan salah saru
register (R0 - R7)
xrl A, direct XOR-kan A dengan RAM/SFR
xrlA, @RiXOR-kan A dengan register yangditunjukkan oleh R0 atau Rl
xrl A, #data XOR-kan A dengan konstanta
xrl direct, A XOR-kan RAM/SFR dengan A
xrl direct, #dataXOR-kan RAI\,I/SFR dengankonstanta
Komplemen
cpl A Komplemenkan Akumulator
cpl C Komplemenkan C
cpl bit Komplemenkan bit
Putar
(Rotar)
rlA Putar A ke kiri 1 bit
rlc A PutarA ke kiri 1 bit melalui carry
rrA PutarAkekanan 1 bit
ITC Putar A ke kanan I bit melalui carry
Swap swap A Swap (rukarkan) nibble rendahdengan nibble tinggi akumulator
Clear
Operasi
Sct bit
clrA Clear (nol-kan) akumulator
clr bit Clear (reset) bit
clr C Clear (reset) C
setb c Set C
scrl) bit Set bit
Instrtrksi BentukInstruksi Keterangan
Logila
AND
(byt.)
anl A, RnAND-kan isi akumulator dengan
salah satu register (R0 - R7)
anl A, directAND-kan akumulator dengan RAM
internaVSFR
anlA, @RiAND-kan A dengan register yang
ditunjukkan R0 atau R1
anl A, #data AND-kan A dengan konstanta
anl direct, AAND-kan RAIWSFR dengan A. Hasii
disimpandi RA1WSFR
anl direct, #dataAND-kan RAM/SFR dengan
konstanta
LogikaAND
(Bit)
anl C, bitAND-kan bit C dengan bit(RAM/SFR)
an-l C, /bitAND-kan C dengan komplemen bit(RAM/SFR)
Logika OR
(Bi'te)orlA, Rn
OR-kan A dengan salah satu register
(R0 - R7)
orl A, direct OR-kan A dengan MM/SFR
orlA, @RiOR-kan A dengan register Yangdirunjukkan oleh R0 atau R1
orl A, #data OR-kan A dengan konstanta
orl direct, A OR-kan RAM/SFR clct.rgatr A
lr8 Teknik Antarmuka dan Pemrograman Mikrokontroler AI89552
4.2.2.1 Instruksi AND, OR don XOR
Instruksi AND, OR dan XOR akan melakukan operasi loglka and, or dan xor(exclusive or). Operasi ini memerlukan 2 operand yang bisa berupa byte atau
bit (semua instruksi bisa berlaku untuk bit kecuali instruksi XOR). Pada
mode byte, instruksi-instruksi ini menangani bit-bit operand pertama denganoperand kedua, perhatikan contoh berikut
mov A, #34Hanl- A, #l2H
Program di atas akan meng-AND-kan akumulator dengan konstanta 12H(yaitu 34H AND 12H), dalam bilangan biner dinyatakan sebagai
0011 01000001 00100001 0000
dengan meng-AND-kan antar-bit, hasilnya adalah 10H. Tidak ada bit PSW
yang terpengaruh.
Perhatikan contoh program lain di bawah iniorg 0000Hmev R7, #OFHmov A, #76Hanl A, R7mov 30H, #34Horl A, 30Hmov 31H, #L2Hmov R0, #31Hxrl A, @R0
anI 30H, Aorl 31H, #0FH
end
Register R7 dan akumulator masing-masing menyimpan OFH dan 76H.
Akumulator di-AND-kan dengan R7, hasilnya akumulator akan menyimpan06H. Perhatikan, dengan di-AND-kan dengan OFH, isi register menjadi 06H,
artinya nibble tinggi "dipaksa" menjadi 0 sedangkan nibble rendah tidakberubah. Selanjutnya register 30H akan meyimpan 34H dan akumulator di-OR-kan dengan register 30H. Hasilnya akumulator akan meyimpan 36H.
Baris perintah selanjutnya akan menyimpan data 12H di register 3l H dan R0
dipakai untuk menyimpan 30H sebagai alamat tak lang,surrg,. Akttnrrrlator
akan di-XoR-kan dengan alamar 31H secara tak rangsung melarui R0,hasilnya akumulator akan meyimpan 24H. Register 30H akan di-AND-kandengan akumulator' hasilnya regisrer 30H akan menyimpan 24H. Baristerakhir adalah meng-oR-kan regisrer 3lH dengan 0FH, hasirnya regisrer31H akan menyimpan 1FH.
untuk mode bit (hanya berlaku unruk insrruksi AND dan oR), c selarumenjadi operand perrama, sedangkan operand kedua adarah SFR arau RAMyang bisa dialamati per bit. Misalnya
an1 C, ACC.0or1 C, /ACC.0
Bahasa Assembler 8051 il9
Baris pertama akan meng-AND-kan bitsedangkan baris kedua akan meng-OR-kanke-0 akumulator.
C dengan bit ke-0 akumulator,bit C dengan komplemen dari bit
4.2.2.2 lnstruksi Putor
Instruksi putar (rotate) akan memurar isi akumulator r bit ke kiri atau kekanan' Pemuraran ini bisa dengan atau tanpa melarui bit carry. Instruksiputar ini hampir sama dengan operasi register geser, bedanya bit yang diputarakan menjadi bit baru yang masuk, jika diputar ke kanan bit ke-0 (LSB) akanmenjadi bit ke-7 (MSB) dan jika diputar ke kiri bit ke-7 (MSB) akan menjadibit ke-O (LSB). ]ika diputar melalui carry, bit yang diputar akan menempatibit carry, sedangkan bir carry akan menjadi bit baru. perhatikan conrohprogram berikut, asumsikan bit carry awalnya 0.
mov A, #000111001brrAr1 Arrc Arlc A
Program dimulai dengan menyimpan dara 001il001B (39H). Kemudianperintah putar ke kanan akan membuat regisrer A menjadi r0011100B (9cH),Ialu diputar ke kiri sehingga data kembali menjadi 001ll00lB (39H).Program selanjutnya adalah memutar akumulator meralui carry ke kanan, bitcarry akan di-set, sedangkan A akan menyimpan 0001r 1008 (1cH). perintahterakhir akan memular A ke kiri merarui carry, sehingga A akan menyimpan(X)lll00l B (:l9ll) rlan bir carry 0.
Teknik Antarmuka dan Pemrograman I'likrokontroler AI89552
Perintah Putar bisa dipakai untuk mengirim data per bit (serial)' Perhatikan
conroh berikut. Isi akumulator akan dikirim melalui P1.0 secara serial dengan
data dikirimkan MSB dahulu, untuk itu A harus diputar ke kiri melalui carry,
bitcarry_IahyangakandikirimkePl.0.RTbertindaksebagaipencacah(8bit) sampai semua bit A terkirim'
org 0000Hmov A, #45Hmov R7, #B
Loopl:rlc Amov Pl-.0, C
djnz R7, LooPlend
4.2.2.3 Komplemen, Swop, Cleor, don Set Bit
Instruksi komplemen adalah instruksi untuk mengomplemenkan akumula-
tor (dalam byte), C atau alamat bit (dalam bit)' Bit-bit yang bernilai 1 akan
diubah menjadi 0 dan, sebaliknya' 0 akan diubah menjadi 1' Perhatikan
contoh program berikut
Bahasa Asembler 8051
Contohnya
movcl-rmovclr
A, #45HAA, #O1HACC. O
Setelah perintah clear, akumulator akan menjadi 0. Perintah terakhir adalah
meng-clear bit ke 0 register A.
Perintah set bit akan mengeset sebuah bit (kebalikan perintah clr).
Contohnya
setb C
c1r Asetb ACC.0
Setelah perintah terakhir, C akan di-set dan A akan menjadi 01H (bit ke-0 di-set).
4.3 PENGATURAN AIUR PROGRAM
Dalam sebuah aplikasi, mikrokontoler mungkin tidak akan mengerjakan
perintah secara berurutan, tetapi akan berpindah dari subrutin yang satu ke
yang lainnya bergantung pada data yang terbaca. Misalnya mikrokontroleryang dipakai sebagai pengendali pemanas ruangan akan mengerjakan halyang berbeda, menghidupkan pemanas atau mematikannya bergantung pada
pengaturan suhunya. Mikrokontroler akan menghidupkan pemanas jika suhu
mangan terukur kurang dari suhu yang diinginkan dan akan mematikannyajika suhu ruangan telah sesuai dengan yang diinginkan. Hal ini meng-
haruskan mikrokontroler untuk mengambil keputusan untuk kemudian
mengerjakan subrutin yang sesuai.
Seperti telah dijelaskan, mikrokontroler mengerjakan program dengan
membaca isi memori program, dan data yang terbaca akan diartikan sebagai
perintah yang harus dikerjakan. Alamat memori program yang harus dibaca
ditunjukkan oleh SFR PC (program counte). Setelah mengeriakan sebuah
instruksi, PC dinaikkan dan menunjuk ke alamat untuk instruksi selanjutnya.
f ika sebuah instruksi menyimpan data yang berbeda ke dalam PC, maka
rnstruksi selanjutnya yang harus dikerjakan oleh mikrokontroler bisa terletak
tli alarnat mallil[)trrI <li tttctnori program.
t2tr20
movcpl
A, #11110000BA
cPI ACC.0
Setelah di-komplemenkan isi A akan menjadi 000011118' dan bit ke-0 akan
akan menjadi 0.
InstruksiswaPakanmenukarnibblerendahdengannibbletinggiakumulator. Instruksi ini sama dengan register A diputar 4 kali (ke arah mana
pun tanpa melalui carry)' Contohnya
mov A, #45Hswap A
Setelah perintah swap, A akan menjadi 54H'
Perintahclearakanmembuatakumulatorataualamatbitmenjadinol.Perintah ini sama dengan memberikan konstanta 0 ke akumulator'
r22 Teknik Antarmuka dan Pemrograman l''likrokontroler AI89S52
Instruksi-instruksi yang akan mengubah isi PC dinamakan instruksipencabangan (branching instructions) karena instruksi ini akan membuat
alur program bercabang. Instruksi-instruksi yang termasuk ke dalam instruksipencabangan adalah instruksi lompat (lu-p), yang akan rnelompat ke sebuah
alamat program; dan instruksi panggil (call), yang akan memanggil sebuah
subrutin di memori program, termasuk instruksi kembali (return) setelah
instruksi panggil. Instruksi lompat bisa dibagi menjadi lompat tak bersyarat(unconditional iump) dan lompat bersyarat (conditional jr*p).
4.3.I INSTRUKSI LOMPAT TAK BERSYARAT
Instruksi lompat tak bersyarat digunakan untuk membuat mikrokontrolermelompat ke sebuah alamat program secara langsung dengan tidak melihatkondisi sebelumnya. Tabel 4.5 merangkum instruksi lompat tak bersyarat.
Pada dasarnya yang membedakan instruksi-instruksi yang ditunjukkan olehtabel adalah jangkauan alamat tujuan lompatan. Instruksi sjmp memilikijangkauan lompatan yang terendah, hanya 727 alamat ke depan dan 128
alamat ke belakang. Jika alamat tujuan melebihi batas tersebut, assembler
8051 akan menimbulkan error. Instruksi ljmp dan jmp memunyai alamat
tujuan ke semua lokasi memori program (64 KB). Instruksi ini bisa
menggantikan instruksi sjmp dan ajmp secara langsung, namun yang perludiperhatikan, instruksi jmp dan ljmp dikodekan dengan lebih banyak bytedaripada sjmp dan ajmp.
Perhatikan contoh program berikut:
org 0000Hmov A, Pl-mov P0, Asjmp 0000H
Eahasa Assembler 805 I
Alamat program dimurai di 0000H. program ini akan membaca p1 untukdisimpan di akumulator dan dikirimkan ke p0. seterah itu program akanmelompat ke alamat 0000H (alamat awal progam). penulisan arum"t rujuanlompat bisa langsung dituliskan aramatnya arau menuliskan laber. Denganmenuliskan alamat secara langsung, jika alamat awal berubah, maka alamattujuan juga harus diperbarui. lika tidak, program tidak akan berjalan denganbaik' Dengan menggunakan label, hal itu tidak perlu dilakukan. perhatikancontoh program berikut
org 0000HStart.:
mov A, pl-mov p0, Asjmp start
/ika alamat awal berubah menjadi 0r00H, program terap akan bekerja denganbaik karena label .grarrakan menjadi 0100H.
Perhatikan contoh program berikutStart:
sjmp startJika program dijalankan maka akan terjadidi atas bisa digantikan dengan menggantitanda $.
Start:sjmp S
akan mempunyai arti
r2l
loop yang tak berhenti. program
alamat tujuan lompatan dengan
alamat 11 bit dan harus berada dalam blok 2 KB memori
lompat )auh (long jump). Alamar rujuan berada di manasaja dalam 64 KB memori program
Sama dengan ljmp
jmp@A+DPTR lompat berindeks. Alamat rujuan adalah isi DPTR serelahdijumlahkan dengan akumularor
Iobel 4.5 lnskuksi-lnslruksi [ompot Tok Bersyorol
BeffirklDstruksi Ketermgarl
sjmp rel
lompat pendek (short jump). Alamat tujuan didapat
dengan menjumlahkan rel (relatif) dengan PC setelah PC
dinaikkan 2 kali. Alamat tujuan akan berada 127 byte ke
depan atau 128 byte ke belakang.
ajmp addrl I Lorrpat absolur (absolure iump). Alunrut trrltlrr arlalirh
yang sama dengan program sebelumnya.
125r24 Teknik Antarmuka dan Pemrograman i'likrokontrohr AI8955?
Instruksi lompat berindeks cara kerjanya hampir sama dengan operasi
pemindahan data mode pengalamatan berindeks. Bedanya pada operasi
pemindahan data, yang dilakukan adalah membaca byte konstanta dari tabel
konstanta yang ada di memori program, sedangkan instruksi lompat ber-
indeks akan membaca dan mengerjakan program atau subrutin dalam sebuah
tabel instruksi. Dalam instruksi lompat berindeks, digunakan DPTR dan
akumulator. DPTR akan menyimpan alamat awal (Dase address) dari tabel,
sedangkan akumulator akan menyimpan alamat offset yaitu alamat
sebenarnya ke mana program akan melompat. Perlu diperhatikan program
atau subrutin dalam tabel instruksi mungkin membutuhkan beberapa byte
instruksi, karena itu akumulator perlu disesuaikan sebelum perintah lompat
berindeks dikerjakan. Perhatikan contoh program berikut
Bahasa Arsembler 8051
P3 atau konstanra 0 untuk kemudian dikarikan dengan OAH. Ini berarti akanada 4 kemungkinan tabel instruksi yang akan dilaksanakan, karena ituakumularor di-AND-kan dengan 3 untuk memastikan akumulator berada diantara 0 sampai 3. Masing-masing tabel insrruksi terdiri atas 2 instruksi:instruksi pemindahan data dan instruksi lompat pendek. Kedua instruksi iniakan dikodekan menjadi 5 byte data, artinya setiap tabel instruksi akanberjarak 5 byte alamar. oleh karena itu, akumulator harus dikalikan dengan5. Jadi' perintah lompat berindeks akan melompat dengan kelipatan 5 sesuaidengan isi akumulator.
Jika tabel instruksi memerlukan instruksi-instruksi yang memerlukan lebihbanyak byte-byte kode, program di atas bisa dimodifikasi untuk membacatabel lompatan. Perhatikan program berikut.
org 0000HStart:
mov A, p0anl A, #3mov B, #3mul ABmov DPTR, #Jump_Tab1ejmp GA+DPTR
Jump_Table:ljmp FirsL_Routineljmp Second_Routineljmp Third_Routineljmp Fourth_Routine
First_Routine:mov B, p1ljmp Jump_Table_Exit.
Second_Routine:mov B, p2ljmp Jump_Table_Exit
Thi-rd_Routine:mov B, p3
ljmp Jump__Tab1e_Exit
IJ<lurLlr Rorrt irrr.:IrK)v ll, il 0
orgStart:
movan1movmu1movjmp
0000H
A, PO
A, #3B, #5ABDPTR, #Routine-Table@A+DPTR
Routine_Tabl-e:mov B, P1sjmp Routine-Tab1e-Exit
mov B, P2
sjmp Routine-Table-Exit
mov B, P3
sjmp Routine-Table-Exit
B, #0
Routine-Table-Exit :
mov A, #0AHmul ABljmp Start
end
Program di atas akan membaca data dariFIasil pcrnba<'aan akatr menentukan apakah
P0 dan disimpan di akurnulator.
prog,ram akatt tttctttlr:tt rt l'1, l'2,
t27r26 Teknik Antarmuka dan Pemrograman l'likrokontroler AI89S52
Jump_Table_Exit :
mov A, #0AHmul ABljmp Start
end
Tabel lompatan sekarang hanya terdiri atas 1 instruksi, yaitu instruksi
lompatan panjang (lj-p). Instruksi ini akan dikodekan menjadi 3 byte, karena
itu akumulator disesuaikan dengan mengalikannya dengan 3. Oleh karena
instruksi yang akan dieksekusi berada dalam subrutin lain (seperti terlihatdalam tabel lompatan ada 4 subrutin), maka subrutin tersebut bisa berisi
instruksi-instruksi yang panjang (selama dalam kapasitas 64 KB).
4.3.2 INSTRUKSI TOMPAT BERSYARAT
Instruksi lompat bersyarat digunakan untuk membuat mikrokontroler me-
lompat ke sebuah alamat program tertentu apabila sebuah persyaratan
terpenuhi. Sebagai contoh, jika isi akumulator nol maka program akan
melompat ke alamat program yang dimaksud. Jika tidak nol, program akan
melanjutkan ke alamat selanjutnya. Seiain akumulator, persyaratan iuga bisa
didapat dari bank register, SFR, alamat RAM (langsung atau tak langsung),
atau juga didapat dari sebuah bit. Tabel 4.6 memperlihatkan instruksi-instruksi yang termasuk ke dalam instruksi lompat bersyarat.
Semua alamat tujuan lompat bersyarat adalah relatif, artinya alamat lompatan
akan berada 128 byte sebelumnya atau 727 byte sesudahnya.
Bahasa Assembler 8051
Bennrk Instruksi Keterangan
jnc rel
Program akan melompat ke alamat relkalau bir C tidak di-set. |ika bit C di-set, progam akan melanjutkan ke alamar
selanjutnya.
jb bit, relProgram akan melompat ke alamat relkalau Dli(di SFR atauRAM internal y*g bisa diakses per bit) di-set. Jika ridak,program akan melanjutkan ke alamat selanjutnya.
jnb bit, relProgram akan melompat ke alamat relkalau Dri(di SFR atauRAM internal yang bisa dial<ses per bit) tidak di-set. |ika di-set, program akan melanjutkan ke alamat selanjutnya.
jbc bit, rel
Program akan meiompat ke alamat relkalau 6ri (di SFR atau
MM internal yang bisa diakses per bit) di-set setelah itu bitakan di-nolkan (clear). Jika tidak, program akan melanjutkanke alamat selanjutnya.
cjne A, direct, relProgram akan melompat ke alamat rel jika isi akumulatortidak sama dengan isi alamat langsung RAM atau SFR. iikasama, program akan melanjutkan ke alamat selanjutnya.
cjne A, #data, relProgram akan melompat ke alamar rel jika isi akumulatortidak sama dengan by"te konstanta. |ika sama, program akanmelanjutkan ke alamat selanjutnya.
cjne Rn, #data, rel
Program akan melompat ke alamat rcl jtka isi saiah saru
register (R0 - R7) tidak sama dengan byte konstanta. jika
sama, program akan melanjurkan ke alamat selanjutnya.
cine @Ri, #data, rel
Program akan melompat ke alamat rel jrka isi alamat RAMyang dirunjukl<an oleh R0 amu RI tidak sama dengan bytekonstanta. Jika sama, program akan melanjutkan ke alamatselanjutnya.
djnz Rn, relKurangi satu isi register Rn (n =0,1,2,...,7); jika belum nolmelompat ke alamat rel, j*a sudah nol lanjutkan ke alamatselanjutnya.
cljnz direct, rclKurangi satu isi RAM atau SFR; jika belum nol melompat kealamat rc|, jika sudah nol lanjutkan ke alamat selanjutr:rya.
Tobel 4.6 lnstruksi-lnstruksi lompot Bersyorot
Benrukhstruksi Keterangan
jz relProgram akan melompat ke alamat rel jlka akumulator nol,
Jika tidak nol, program melanjutkan ke alamat selanjutnya.
jrzrelProgram akan melompat ke alamat rel j*a akumulator tidak
nol. Jika nol, program akan melanjutkan ke alamat
selanjutnya.
jc rel
Program akan melompat ke alamat re1 kalau bit carry ( C )
di-set. Jika tidak, program akan melanjutkan kc alitrrrat
selanjutnya.
r28 Teknik Antarmuka dan Pemrograman l,likrokontroler AT89552
Instruksi jz dan jnz akan mengecek isi akumulator apakah nol atau tidak.Pada insruksi jz program akan melompat jika akumulator nol, sedangkandengan instruksi jnz program akan melompar jika akumularor tiJak nol.Perhatikan contoh program di bawah ini:
Eahasa Assembler 8051
menenrukan apakah P2 nol atau tidak. Iika tidak nor, My_rED2 akandinyalakan, jika sebaliknya, My_LED2akan mari.
Instruksi jc dan jnc akan mengecek bit c apakah di-set atau tidak. Dalaminstruksi jc, program akan merompat jika C diser, sedangkan daram instruksijnc program akan melompat jika C tidak di-set. perhatikan conroh programberikut.
My_SW1 equMy_SW2 equMy_LED1 equMy_LED2 egu
org 0000Hsetb My_SW1setb My_SW1setb My LED1setb My_LED2
Start:mov C, My_SW1jc TurnON LED1
TurnOFF_LED1:setb My_LED1sjmp Check_SW2
TurnON_LEDL:clr My_LED1
Check SW2:mov C, My_SW2jnc TurnON_LED2
TurnOFF LED2:setb My_LED2sjmp start
TurnON_LED2:clr My_LED2sjmp start
end
Program di atas akan mengendalikan 2 buah LED yang terhubung ke p0.0(MY-LEDU dan P0. t (My-LEDI oreh 2 buah saklar yang terhubung ke pt.0(M.y_SlVl) dan Pl .1 (llfy_9wtr. My_LEDl akan dinyalakan kalau My_SWltt'rlrrrbtrng kc l.gika ringgi cran dimatikan karau My_srl/ terhubung keI.gikir rt'.tluh. S.rlrrrrgkir. AI, r,t,.'t)z aka. dinyalakan kalau Mv sw2
r29
My_LED1 equMy_LED2 equ
P1.0P1. 1
org 0000Hsetb My_LED1setb My_LED2mov P0, #0FFHmov P2, #0FFH
Start:mov A, P0jz LEDI_ON
LEDI_OFF:seLb My_LED1sjmp Check_LED2
LEDI-ON:clr My_LED1
Check_LED2:mov A, P2jnz LED2_ON
LED2-OFF:setb My_LED2sjmp Start
LED2_ON:clr My_LED2sjmp Start
end
Program akan mengendalikan 2 buah LED yang terhubung dengan bit 0 danbit 1 Pl (My-LEDI dan My_LEDl. My_LEDt akan menyala kalau p0 yangdifungsikan sebagai port inpur berada dalam logika nol semua, sedangkanMy_LED2 akan menyala kalau P2 (yang juga difungsikan sebagai port inpur)tidak nol. P0 dibaca dan disimpan di akumulator kemudian dicek denganperintah jz apakah nol atau tidak. |ika nol program akan menyalakanMy_LEDl, jika tidak nol My_LEDl dipadamkan. Program selanjutnyamembaca P2 dan disimpan di A kemudian dicek dengan pcrinrah jrrz rrrrrtrk
P1 .0D1 1
P0.0P0 .1
Ieknik Antarmuka dan Pemrograman I'likrokontroler AI89S52
terhubung ke logika rendah dan dimatikan kalau terhubung ke logika tinggi.
Status logika My-SW| dan My-SW2 dicek dengan membaca kedua saklar
tersebut dan disimpan di c. Dengan menggunakan instruksi ic dan jnc, status
logika kedua saklar tersebut bisa diketahui'
Instruksi jb dan jnb hampir sama dengan instruksi jc dan jnc, bedanya
instruksi jb dan jnb digunakan untuk mengecek status sebuah alamat bit
(RAM internal arau SFR yang bisa diakses per bit). Dalam instruksi jb,
program akan melompat ke alamat tujuan (rel) jika bit yang dimaksud di-set
d"r, ut ".r
melanjutkan ke instruksi selaniutnya jika bit tersebut tidak di-set.
Instruksi jnb merupakan kebalikan dari instruksi jb; program akan melompat
jika bit tidak di-set dan akan melanjutkan ke instruksi selanjutnya jika bit
tersebut di-set. Perhatikan contoh program berikut'
My-SW1 equ P1 .0My-SW2 equ P1.1My-LED1 equ P0.0My-LED2 equ P0 - 1
org 0000Hsetb MY-SW1
setb MY-SW1
setb MY-LED1setb MY-LED2
Start:jb MY-SW1, TurnON-LED1
TurnOFF-LED1:setb MY-LED1sjmp Check-SW2
T\rrNON-LED1 :
clr MY-LED1Check-SW2:
jnb MY-SW2, TurnON-LED2TuTNOFF-LED2:
seLb MY-LED2sjmp Start
TurnON-LED2:clr MY-LED2sjmp Start
end
Bahasa Assembler 8051
Program di atas bekerja seperti program sebelumnya, yaitu mengendalikan 2
buah LED yang terhubung ke P0.0 (My_LEDI) dan P0.1 (My_LEDI melalui2 buah saklar My_SWl (P1.0) dar. My-SW2 (P1.1). Pengecekan kondisilogika My_SWl dan My_SW2 dllakukan tidak melalui bit C, tetapi langsungdengan instruksi jb dan jnb. Seperti terlihat dari program, pada saat My_SWldiset (berada di logika tinggi), program akan melompar ke alamat untukmenyalakan My_LED| (label TurnON_LEDI). Begitu juga pada saat
mengecek My_5W2, program akan melompat ke alamat untuk menyalakanMy_LED2 (label TurnON_LED4 kalau My_SW2 berada di logika rendah(dengan instruksi jnb).
Instruksi jbc bekerja seperti instruksi jb, namun ketika status bit berlogikatinggi (di-set), program akan melompat ke alamat tujuan dan bit akan di-reset. Perhatikan contoh program berikut
t3rr30
orgStart:
movLoop:
jbcjbc
end
0000H
A. #101011118
ACC.0, LoopACC.1, Start
Program diawali dengan menyimpan konstanta 101011118 (AFH) keakumulator. Instruksi jbc yang pertama akan mengecek bit 0. Karena bit 0 di-set, maka bit 0 akan di-reset dan program akan melompat ke label Loop danakumulator akan menjadi 101011108. Program akan mengecek bit 0 kembalidengan instruksi jbc, namun karena bit 0 telah dinolkan sebelumnya, maka
program akan melanjutkan ke instruksi jbc selanjutnya yaitu mengecek bit 1.
Oleh karena bit 1 bernilai 1, program akan melompat ke label Start danakumulator akan menjadi 101011008. Program akan dimulai lagi dari awal.
Instruksi cjne (compare and jump if no egual) akan membandingkan data
dalam akumulator, salah satu bank register (R0 - R7), alamat RAM taklangsung dengan alamat RAM langsung, SFR atau sebuah konstanta. Khusus
untuk bank register dan alamat RAM tak langsung hanya bisa dibandingkandengan konstanta. Program akan melompat jika kedua data yangdibandingkan tidak sama dan akan melanjutkan ke instruksi selanjutnya jikakedua data yang dibandingkan sama. Perhatikan contoh program di bawah.
Bir32 Teknik Antarmuka dan Pemrograman llikrokontroler AI89552
My-LED1 eguMy_LED2 equ
P0 .0P0 .1
org 0000HStart.:
mov A, P1
anf A, #03HCheck-Command:
cjne A, #00H, Check-Commandlsjmp LEDI-ON
Check_Commandl:cjne A, #01-H, Check-Command2sjmp LEDI_OFF
Check-Command2:cjne A, #02H, Check-Command3sjmp LED2-ON
Check-Conrnand3 :
cjne A, #03H. Startsjmp LED2-OFF
LEDI_ON:c1r My-LED1Sjmp Start
LEDI-OFF:setb My-LED1sjmp Start
LED2_ON:c1r My-LED2sjmp Start
LED2-OFF:setb My-LED2sjmp Start
end
Program di atas akan mengendalikan 2 buah LED yang terhubung ke P0.0
(My-LEDI) dan P0.1 (My-LED|. Data di Pl akan menentukan keadaan
kedua LED tersebut. Data P1 dibaca dan disimpan di akumulator kemudian
di-AND-kan dengan 3 untuk memastikan bahwa data tidak akan melebihi 3.
Program kemudian akan mengecek isi akumulator dengan membandingkan-
nya dengan bilangan 0 sampai 3 melalui instruksi cjne. lika akumulator
bernilai 0 maka program akan melanjutkan ke instruksi selanjutnya' yaitu
menyalakan My-LEDl. jika akumulator tidak sama deng,an 0 progrartl itkan
Bahasa Assembler 8051
melompat ke alamat berlabel Check_Commandl unruk mengecek apakahakumulator bernilai I atau tidak, dan seterusnya.
Instruksi terakhir yang termasuk ke dalam instruksi lompat bersyarat adalahinstruksi djnz. Instruksi djnz (decrement and iump if no zero) akanmengurangi isi salah satu regisrer (R0, Rl, ..., R7), alamat RAM langsung arauSFR dan akan melompat iika belum nol. Instruksi ini sering digunakan padasubrutin tunda atau sebagai pencacah (counter) pada program berulang(loop). Perhatikan contoh program berikut
My_LED1 eguMy_LED2 equ
org 0000HStart:
setb My_LED1clr My_LED2
movmov
Loop1:djnzdj nz
#0#0
LooplLoopl
clr My_LED1setb My_LED2
mov R6, #0mov R7, #0
Loop2:djnz R6, Loop2djnz R7, Loop2
sjmp Startend
;Matikan LED1;Nyalakan LED2
;Waktu tunda, dilakukan dengan,'meng.urangi R6 dan R7 sampai 0
;Nyalakan LED1;Matikan LED2
;Wakt-u tunda, dilakukan dengan;mengurang'l R6 dan R7 sampai 0
P0 .0P0.1
R6,R7,
R6,R7,
;Ulangi terus menerus
Program di atas akan mengendalikan 2 buah LED yang terhubung ke P0.0(My_LEDI) dan P0.l (My_LED). Kedua LED ini akan dikendalikan sehinggaakan nampak berkedip dengan My_LEDI dan My_LED2 nyala dan matilrergantian (jika My_LED1 nyala, My_LED2 akan mati dan sebaliknya).Waktu kedip rlitcntukan clengan program tunda menggunakan instruksi djnz.ll6 dan ll7 tligrrnirkrrn sr,hrgai rcgisrer tunda. Program tunda terdiri atas 2
Ieknik Antarmuka dan Pemrograman Mikrokontroler AT89552
peruIangan (loop). Perulangan pertama adalah mengurangi R6' sedangkan
p"*tu.t!.., kedua mengurangi R7. Kedua perulangan akan dilakukan
sebunyuk 256 kali, yaitu R6 dan R7 dikurangi sampai 0. Jadi, total perulangan
adalah 256 x 256 = 65536 kali. |ika instruksi djnz yang digunakan
memerlukan 2 siklus mesin, maka dengan osilator 12MHz akan memerlukan
waktu sekitar 65536 x 2 mikro detik = 131072 mikrodetik atau 0'13 detik.
Perhatikan contoh subrutin berikut di bawah ini'
Serial-sinkron-Send:mov B, #B
Seri a1-S inkron-S end-LooP :
ASDAT, C
SCK
nopnopnopsetb SCKnopnopnopdjnz B, Seriaf-sinkron-Send-LooPret
submtin di atas digunakan untuk mengirimkan data dalam mode serial
sinkron (register geser). Data yang akan dikirimkan disimpan di akumulator
dan dikirim bit demi bit melalui pin SDAT dengan bit MSB dikirimkan
terlebih dahulu. Pin SCK digunakan sebagai sinyal clock sinkronisasi untuk
menggeser bit data di penerima. Register B digunakan sebagai pencacah
p"rgiil-", karena data yang akan dikirimkan adalah 8 bit sehingga register
B akan diisi dengan 8'
Data dikirimkan dengan memutar data melalui bit C kemudian dengan
insrruksi mov bit c akan dikirimkan melalui pin sDAT. Pin scK' yang
awalnya berlogika tinggi, akan menghasilkan sinyal clock dengan membuat
pin ini berlogika rendah (dengan instruksi clr) kemudian dibuat berlogika
tinggi (instruksi setb). Periode sinyal clock ditentukan oleh instruksi nop'
Instruksi nop (to operation) adalah instruksi di mana mikrokontroler tidak
melakukan apa-apa dengan periode 1 siklus mesin' Register B sebag'ai
pencacah bit akan dikurang,i dengan instruksi dinz; fika bclurn (). l)r()8rilm
Bahasa Assembler 8051
akan melompat ke alamat memori program berlabel Serial_sinkron*Send_Loop untuk mengirimkan bit selanjutnya sampai semua bit (8 bit)terkirim. Jika semua bit telah terkirim (B telah 0), program akan mengerjakaninstruksi ret (return). Keterangan instruksi ret bisa dilihat di subbabberikutnya.
4.3.3 INSTRUKSI CALL, RET, DAN RETI
Dalam alur program bahasa assembler yang terdiri atas subrutin-subrutinprogram, mikrokontroler akan mengerjakan perintah yang ada dalamsubrutin tersebut dengan cara melompat ke alamat subrutin tersebut (sepertitelah dijelaskan sebelumnya) atau dengan cara memanggil subrutin. Ke-untungan utama mengembangkan program dengan subrutin-subrutin adalahprogram lebih mudah untuk dikembangkan dan dilacak kesalahannya.Subrutin utama (subrutin tingkat tinggi) akan terdiri aras saru atau lebihsubrutin tingkat rendah. Program akan lebih mudah untuk dipahami asalkansubrutin menggunakan nama atau label yang mudah dipahami (misalnyasubrutin dinamai sesuai dengan fungsinya).
Instruksi yang dipakai adalah instruksi call. Instruksi pemanggilan subrutinpada dasarnya hampir sama dengan instruksi lompat, bedanya dalam instruksilompat program tidak akan bisa kembali ke alamat di rnana instruksi lompatberada, kecuali ada instruksi lompat lain untuk itu. Dalam instruksi call,program akan bisa kembali ke alamat semula (tepatnya alamat programsetelah instruksi call) dengan menuliskan instruksi kembali atau ret (return)di akhir subrutin.
Instruksi call akan menyimpan alamat program (PC) ke memori stack (sepertiinstruksi push) kemudian instruksi ret akan mengambil alamat programuntuk kembali dari memori stack. Dengan kata lain instruksi ret pada
dasarnya sama dengan instruksi lompat jauh (ljmp) dengan alamat tujuantersimpan di stack.
Berdasarkan jangkauan alamat memori program yang bisa dipanggil, instruksicall terbagi menjadi 2, yaitu call absolut (acall) dan instruksi call jauh (lcall).Instruksi acall adalah instruksi pemanggilan subrutin dengan jangkauan
alamat l1 bit (2 KB). Instruksi acall akan menaikkan PC 2 kali kemudianmenyimpannya ke dalam memori stack (instruksi ini dikodekan 2 byte).Scclangkan instnrksi k lll utatr call adalah instruksi pemanggilan subrutin
t35B4
r1cmovc1r
Ieknik Antarmuka dan Pemrograman l'likrokontroler IT89552
dengan jangkauan alamat 16 bit (64 KB)' PC akan dinaikkan 3 kali kemudian
disimpan di memori stack (instruksi ini dikodekan 3 byte)'
Perhatikan kembali contoh Program instruksi djnz yang mengendalikan 2
buahLED.Da]amcontohprogramtersebutterdapatbeberapabarisinstruksiyang diulang, yaitu baris waktu tund'a (detay)' fika baris-baris perintah
,..rlbr, diyadikan sebuah subrutin dengan label Detay dan instruksi call akan
memanggil subrutin tersebut, maka program bisa menjadi lebih singkat'
Selain iiu, program lebih bisa "dibaca". Perhatikan contoh program di bawah
ini.My-LEDL equ P0.0My-LED2 equ PO.l-
org 0000HStart:
setb MY-LED1-
c1r MY-LED2
call DelaY
clr MY-LED1setb MY-LED2
call DelaY
sjmp Start
;Subrutin DelaYDelay:
mov R6, #0
mov R7, #0
Loopl:djr.z R6, LooPldinz R7, Looplret
;Matikan LED1
;Nyalakan LED2
;Nyalakan LED1
;Matikan LED2
;Ulangi terus menerus
;Waktu tunda, dllakukan dengan
;mengurangi R6 dan R7 samPai 0
Bahasa Asembler 8051
akan bisa kembali ke alamat yang benar. Program berikut akan memper-lihatkan instruksi ret yang mirip dengan instruksi ljmp.
org 0000H
Start:movpushc1rpushret
A, #1OHACCAACC
org 001-0HTest:
mov B, #45Hsjmp Start.
end
Program diawali dengan menyimpan konsranra 10H ke register A kemudianmenyimpannya ke stack melalui instruksi push. Selanjutnya register A akandi-nol-kan dengan instruksi clr dan menyimpannya di stack. Dengandemikian stack akan berisi data 10H di alamat awal stack dan 00H di alamatatasnya. |ika alamat stack tidak ditentukan, maka alamat awal srack akanberada di 07H. Dengan demikian alamat 07H akan berisi l0H dan alamat 08Hberisi 00H. Ketika instruksi ret dikerjakan, program akan membaca memoristack sehingga akan terbaca alamat 0010H dan program pun akan melompatke alamat 0010H (dalam conroh program di atas alamat tersebut memilikilabel Tesrdengan instruksi mengisi register B dengan data 45H dan melompatke alamat awal program).
Instruksi terakhir yang dimiliki oleh keluarga 8051 adalah instruksi reti.Instruksi ini adalah instruksi yang digunakan di akhir subrutin pelayananinterupsi (ISR). Pada dasarnya, pada saat terjadi interupsi (yang bisa terjadikapan saja), mikrokontroler akan memanggil ISR di alamat vektor interupsiyang sesuai. Pada saat itu juga isi PC akan disimpan di stack. Oleh karena iru,di akhir ISR harus ada instruksi yang akan membuar program kembali kealamat di mana interupsi terjadi. Instruksi yang dimaksud adalah instruksircti. Selain akan membaca memori stack untuk menentukan alamat kembali,instruksi reti jutria akan me-reset bir-bir pembangkit interupsi. Contoh
t37r36
end
Seperti telah dijelaskan bahwa instruksi ret hampir sama dengan instruksi
ljmp dengan alamat tujuan lompat terdapat di dalam memori stack' Oleh
ku,",uitu,pastikanuntukmenuliskaninstruksipopsebelumitlstrtrksiretapabila di awal subrutin dituliskan instruksi push. fika ticlak, prolir;rrrr ti<lak
t]8 Ieknik Antarmuka dan Pemrograman l'likrokontroler AT89552
penggunaan instruksi reti
interupsi.
bisa dilihat di bab yang membahas aplikasi BAB 5OPER/\N PORT INPUT/OUTPUT
Seperti telah dijelaskan pada bab sebelumnya, mikrokonrroler AT89S52 me-miliki 4 port (masing-masing 8 biQ yang bisa digunakan sebagai port inputmaupun port output. Keempat port tersebur adalah P0, Pl, P2 dan P3.
Bab ini dan seterusnya akan memberikan penjelasan bagaimana mengguna-kan port-port AT89S52 sebagai port input/outpur muhiguna dan juga
bagaimana menggunakan fasilitas-fasilitas inrernal yang dimiliki oleh4T89S52. Semua contoh program menggunakan bahasa assembler dengansistem minimum mikrokontroler AT89S52 seperti yang akan dijelaskan dibab terakhir buku ini.
5.I OPERSAI PORT OUTPUTDriver output P0 mampu menggerakkan sampai 8 input TTL dengan resistorpullup eksternal, sedangkan Pl, P2 dan P3 mampu menggerakkan sampai 4input TTL dan tidak membutuhkan pullup eksternal. Resistor pullup yangdiperlukan biasanya berkisar 1 KO - 47 KA- Selain itu port-port ATB9S52juga bisa digunakan untuk menggerakkan basis transistor, misalnya untukmengendalikan relay atau digunakan langsung untuk mengendalikan sebuahLED.
5.I.I MENGENDATIKANLED
LED (light emitting diode) adalah sejenis dioda yang jika dibias maju akanmemancarkan cahaya dengan warna yang ditentukan oleh materialnya. LEDbisa dihubungkan dengan AT89S52 dengan 2 cara, yaitu dihubungkanlangsung atau menggunakan driver (transistor misalnya). Gambar 5.1menunjukkan kedua cara ini.
Cara pertama t,ED dihubungkan langsung dengan kaki katoda terhubung kesalah satu pin nrikrokorltrolcr, sedangkan kaki anodanya terhubung dengansurnbcr t(',lanll.rn (lrilsirrrya 5 volt) melalui sebuah resistor Rl. LED akan
Ieknik Antarmuka dan Pemrograman I'likrokontroler AI89552 0perasi Port lnput/0utput
5.l.t.l LED Berkedip
Sebuah LED terhubung ke P1.0 sementara 8 buah LED yang lainnyadihubungkan ke P0. Semua LED dihubungkan secara langsung (tanpa driver).Untuk mengendalikan LED yang terhubung dengan P1.0 digunakan instruksibit, setb untuk mematikan LED, dan clr untuk menyalakannya. Sedangkan
LED yang terhubung ke P0 dikendalikan dengan instruksi pemindahan data
mode pengalamatan segera. Untuk menyalakan LED, konstanta 0 dikirim ke
P0; dan untuk mematikannya, konstanta FFH yang dikirimkan. SubrutinDelay dipanegil untuk menghasilkan waktu tunda antara LED nyala dan
mati. Instruksi djnz digunakan dengan register R6 dan R7 diisi konstanta 0.
File assemblernya bisa dilihat di CD pendukung (lSample ProgramlBab
5ILED_Berkedip.asm).
,. ===================,'Proqram Title : "Flashing LED",'File name : LED_Berkedip.asm;Version : 1.0;Created dal-e : Septenber 19, 2006;Programmer : Usman- *******************************************************
. * ** ** * * ** ** ** ** * * ** * ** * * ** * * * * * * ** ** * * ** * * * **** * * **** **;Microcontroler Pin/Port AssigrnmenL. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * *
My_8LED equ P0My_LED1 egu P1.0
;Main Program. * ** ** * * ** ** **** * * ** * ** * * *** * * * ** * * ** ** * * * ** ** ** * * ** ** **
org 0000HMain_Prog:
mov My_8LED, #OFFHsetb My_LED1call Delaycall DelaycaIl Delay
r4lr40
menyala kalau port AT89S52 yang dipakai berada di logika rendah (arus bisa
mengalir melalui LED)' Ri aig';uh" untuk mengatur kecerahan LED dan
membatasi ams yang masuk ke LED dan mikrokontroler' biasanya bernilai
100 - 560 C). Dengan cara ini' jika P0 yang dipakai' tidak dinerll\an resistor
pullup eksternal karena LED dan resistor meniadi pullup bagi driver output
P0.
(a ) Huburrg,an Largsurrg (b J hleng,g'rne}an driuer
Gsmbor 5'l Menghubungkon LtD dengon 8051
Metode kedua biasanya digunakan untuk mengendalikan ffn flllmemilikitegangan keria atau "-' ri"g dibutuhkan lebih besar' misalnya LED 12 VoIt'
LED tidak langsung dihubungkan ke port mikrokontroler tetapi melalui
sebuahtransistorsebagaid,i.,"..Basistransistorinilahyangakandikendalikan oleh mikrionrroler. R1 adalah resisror yang berfungsi untuk
membatasi arus LED (100 - 560 f))' sedangkan R2 ad'alah resistor basis Ql (1
KO - 10 KC)). Transis* ru', digunakan ht*' *"tpunyai arus yang cukup
unruk menyalakan LED' LE; 'iu" -""ytla jika basis Ql mendapat bias'
artinya port mikrokontroler berada di logika tinggi (kebalikan dengan cara
pertama). fika P0 yang digunakan sebagai Port Pengendali' maka resistor
pullup eksternal mutlak diperlukan'
My ltl,l':l ), ll o()llMV' l,l.ll , I
;MaLikan LED
; Tunda
lrx )\/,'lt
; Nyal.akan LEI)
Ieknik Antarmuka dan Pemrograman I'likrokontroler AI89552 0perasi Port lnput/0utput
,.Program TiLle : "Runninq LED";File name : LED_Berjalan.asm;Version : 1.0;Created date : September 2L, 2006; Prograrnrner : Usman- * **** **** ***** *** ** * ** **** ** ** ** ** * * ** ** *** ** * * ** ** ** * *
. * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;Microcontroler Pin/Port Assignment. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * *
My_8LED equ P0
,. * * * * * * * * * ** * * * * * * * * * * * * * ** * * * * * * * * * * * * ** * * * * * * * * * * * * * * *
;Main Program- * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * *
org 0000HMain_Prog:
mov My_8LED, #0FFHmov A, #0FEH
Main_Prog_Loop:rlc Amov My_BLED, Acall Delaycall Delaycall Delay
;Matiakan LED
; Delay
sjmp Main_Prog_Loop
. * * * * ** * * ** **** * ** * * * * * ** ** * * * * * * * * * *** * * *** ** ****** ****; Delay Rout.ine. * * * ** * * **** ** ** ** * * *** ** ** * * ** *** * ** *** * * ** * * ** * * ** ** **Delay:
movmov
Delay_Loop:dlnzdj nzret
lttrl
t43t42
t-_1^--Cal-L Dt=LdY
call DelaYcall DelaYsjmp Main*Prog ;Ulangi terus-menerus
. * ** ** ** * * ** ** ** * * * * * * * * * * * ** ** * * ** **** * * *** * ***** * * ** **
;Delay Routine. * * * *i * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* * * * *
Delay:mov R6, #0mov R7, #0
Delay-LooP:rJlnz R6, DelaY-LooPdjnz R7, DelaY-LooPret
end
Program di atas juga bisa digunakan untuk LED yang terhubung dengan
*.riggrrn"kun driver. Bedanya LED yang terhubung dengan P1'0 akan
*erryuladenganinstruksisetbdanmatiden8aninstruksiclr'sedangkanLEDyang terhubung ke P0 akan mati saat 0 dikirim ke P0 dan akan menyala saat
FFH dikirim ke P0.
5.1.1.2 LED Beriolon
DelapanbuahLEDdihubungkankeP0.LEDdihubungkansecaralangsungtanpa driver. Untuk membuar LED berjalan digunakan instruksi rlc (geser ke
kiri), dengan data awal FEH (111111108) LED yang terhubung ke P0'0 akan
menyala p"r,u*u kali. Kemudian setelah instruksi rlc' LED yang menyala
akan bergeser ke P0.1, P0.2 dan seterusnya' Program dibuat berulang-ulang
sehingga LUO terlihat berjalan. Subrutin Delay dipanggil agar ada jeda waktu
saat data digeser.
Dengan mengubah instruksi rlc menjadi rrc' urutan nyala LED bisa diubah
rn"n*i"A P0.7, P0.6 dan seterusnya' Data awal pun akan menentukan pola
nyala LED"
File assemblernya bisa dilihat di CD pendukung (lsample Program\Bab
5ILED-Berialan.asm).
R6, #0R'7 , #0
R6, Delay_LoopR7, Delay_Loop
r45r44 Teknik Antarmuka dan Pemrograman Mikrokontroler AT89552 0perasi Port lnput/0utput
Motor_ON:setb My_Motorret
Motor_OFF:clr My_Motorret
5.2 OPERASI PORT INPUTUntuk memfungsikan porr sebagai input, hal perrama yang harus dirakukanadalah mematikan driver output port yang bersangkutan dengan mengirim-kan logika 1. setelah reset semua port akan menjadi port masukan karenaCPU akan mengirim data FFH ke semua porr.
Semua port bisa dihubungkan dengan keluaran sebuah IC TTL. Karenaadanya pull up internal, Pl, P2 dan P3 bisa langsung dihubungkan dengankeluaran IC TTL dengan keluaran kolektor terbuka (open collector). pomembutuhkan resisror pullup eksternal agar bisa dihubungkan dengan ICTTL jenis ini.
5.2.1 MEMBACA SAKTAR
(a) SaLlar tanpa pullup ft) SakJar dengan pullup
5.1.2 MENGENDATIKAN MOTOR DC
Motor DC adalah alat elektro-mekanis yang akan mengubah tenaga listrik
(tegangan DC) menjadi gerak. Agar bisa mengendalikan motor DC' port
mikrokontroler dihubungk".t de,,g^" motor melalui sebuah driver' sepeili
ditunjukkan oleh Gambar 5.2. Driver motor DC ini menggunakan sebuah
transistor Darlington. Transistor Darlington berisi 2 buah transistor dengan
resistor pembatas arus. jadi simbol transistor ini adalah 2 buah transistor,
tetapi resistor pembatas arusnya tidak ditampilkan' Transistor ini harus
dipilih agar mampu mengalirkan ams yang cukup untuk menggerakkan
*tror. Dioda D1 digunakan sebagai pengaman transistor karena motor DC
adalah komponen induktif yang' jika tegangan catu dimatikan' akan
mengalirkan arus balik induktif yang bisa merusak transistor' Tegangan VCC
bisa bervariasi, bergantung pada motor yang digunakan' misalnya 10 - 20
Volt.
Gombor 5.2 Driver Molor D(
Untuk menyalakan motor, transistor Darlington harus mendapatkan bias'
artinyaportATSgsS2yangdipakaiharusberadadilogikatinggi.Misalnyainstruksi setb akan menyalakan motor dan instruksi clr akan merniltikarlnya'
rdV
It
Ke Port I
C_--l
ir_L:
Ke Port
- ;h
_L:
R3
IK
Gombor 5.3 Rongkoion Anlormuko Soklor
Teknik Antarmuka dan Pemrograman I'likrokontroler AI89552 Operasi Port lnput/0utput
Selanjutnya program akan membaca status motor dengan instruksi jnb danmengecek bit yang menyimpan status motor (MyMotor_Flag). Seperti telahdijelaskan, motor akan dinyalakan jika sebelumnya mati (bit MyMotor_Flag=0) dan akan dimatikan jika sebelumnya menyala (bit MyMotor_Flag=l).Setiap kali status motor berubah, bit status motor juga akan diperbarui.Dalam program inibit MyMotor*Flag akan di-set jika moror sedang menyaladan di-reset jika motor mati.
;Program Title : "Readj-ng SwiLch"
t47r46
Gambar 5.3 memperlihatkan bagaimana menghubungkan sebuah saklar
denganmikrokontroler.Gambar5.3.aadalahrangkaiansaklartanparesistorpoUlrp. Rangkaian ini bisa dihubungkan langsung dengan semua port kecuali
P0. Gambar 5.3.b merupakan rangkaian saklar dengan resistor pullup dan bisa
dihubungkan k" ,"-o" po" t"'*""'k P0' Saklar yang dipakai adalah saklar
push bitton Saklar ini akan kembali ke posisi semula setelah ditekan'(momentar). Pada saat ditekan, saklar akan menghubungkan pin
mikrokontroler yang terhubung dengannya ke ground' Mikrokontroler akan
membaca logika 0. Sebaliknyu, littu tidak ditekan' pin mikrokontroler akan
terhubung dengan VCC baik melalui pullup internal atau pullup eksternal
sehingga mikrokontroler akan membaca Iogika 1'
Halyangperludiperhatikanketikamembacasaklaradalahbouncing.Saklaraaatat
"p"rurgt ut elektromekanis; pada saat ditekan saklar tidak akan
lurgr.r.tgb"r"d"padakeadaanstabil'tetapiakanadagetaranataubouncing'Saklar akan membangkitkan pulsa dalam periode milidetik' Karena mikro-
kontroler sangar cepai, *ikrokorrtrol", bisa mengartikan bahwa saklar telah
ditekan beberapa kali. Mengatasi bouncing bisa dilakukan secara hardware
atau software. Secara ,oft*r." bisa diatasi dengan menggunakan waktu tunda
(delay). Program akan menunggu beberapa milidetik setelah mengetahui
bahwasaklartelahditekant"*p'ikeadaansaklarstabil'setelahitubarudilanjutkan untuk mengeksekusi instruksi selanjutnya'
Contoh program berikut akan mengendalikan sebuah motor DC dengan
saklar.MotorDC,denganrangkaiandriversepertiditunjukkanolehgambar5.2,terhubungkePl'0*SebuahsaklarterhubungkePl'l.Alamat20.0H(bitke-0 alamat RAM 20H) dipakai untuk menyimpan status motor' apakah
sedangmenyalaataumati.Mikrokontrolerakanmembacaapakahsaklarditekanatauddak.Jikaadapenekanansaklar,mikrokontrolerakanmengecekstatus motor sebelumnya' fika sebelumnya motor mati' mikrokontroler akan
menyalakan motor. S"b"tik"yu iika sebelumnya motor menyala' mikro-
kontroler akan mematikannYa'
Saklar dibaca dengan mengecek apakah kondisi logika di P1'1 rendah atau
tinggi dengan instruksi ;U' i*a terbaca P1'1 berlogika rendah' program akan
memanggil subrutin Delay sebagai antibouncing' Kemudian prog'ram akan
*"rrrnggu sampai saklar tidak ditekan lagi dengan instruksi jnb'
;File name;Version
: Saklar.asm: 1.0
;Created daLe : September 29, 2006;Programmer : Usman. * * * * * ** * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * ** **
. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;Microcontroler Pin/Port Assignment*******************************************************
My_MoLor egu P1.0My_Switch equ P1.1
*******************************************************Internal RAM Mapping
*************************************************
My_Flag equ 20HMyMotor_F1ag equ My_F1ag.0
*******************************************************Main Program*******************************************************
or:g 0000HMain_Prog:
clr MyMotor_Flagc1r My_Mot.or
Key_Scan:jb My_Switch, $
;Clear motor status;Turn OFF motor
;Check switch, loop when no; pressed;Walt for bouncing; Wa i. r. unt i 1 key released
r:a l .l
jntrIX.l;ryMv :;wil('lr, :;
r48 Ieknik Antarmuka dan Pemrograman I'tikrokontroler AT89552
jnb MyMotor_F1ag, TurnON_Motor
trrnOFF_Mot.or:cIr MyMotor_Flag ;Update Motor statusc1r My_Motor ;Turn off motorsjmp Key_Scan
TlrnON_MoEor:set.b MyMotor_Flag ;Update MoLor sLatussetb My_Motor ;Turn on motorsjmp Key_Scan
. * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * ** * * * * * *
; Delay Rout.ine. * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * ** * * ** ** ** * *
Delay:mov R6,mov R?,
Delay_Loop:djnz R6,djnz R?,ret.
end
dengan kolom yang berlogika 0). Hal selanjumya adalah mencari saklar manayang sebenarnya ditekan' dengan kata lain mencari kolom yang terhubung kesaklar tersebut. Korom dicari dengan cara membuat kolom blrlogika 0 saruper satu (satu kolom berlogika 0 dalam satu waktu semenrara kolori yang rainberlogika 1). Kemudian baris di-scan sekali lagi. Mikrokonrrorer akan mem_baca logika 0 jika ada saklar yang ditekan. Dengan mengetahui korom manayang sedang berlogika 0 saat iru, mikrokontroler akan ,I".rg"ruh,ri sakrar dikolom mana yang sedang ditekan.
0perasi Port lnput/0utputt49
#0#0
Delay_LoopDelay_Loof:
5.2.2 MEMBACA KEYPAD MATRIKS 4X4
Beberapa saklar bisa dirangkaikan membentuk sebuah rangkaian keypad.
Susunan yang paling sering dipakai adalah 16 buah saklar yang membentukkeypad matriks 4x4. Rangkaian keypad 4x4 ditunjukkan oleh Gambar 5.4.
Dalam susunan keypad ini terdapat 4 buah kolom (C0, ..., C3) dan 4 buahbaris (R0, ..., R3); salah satu kaki saklar akan terhubung ke salah satu kolomdan kaki yang lainnya akan terhubung dengan salah satu baris. Kolom dan
baris dihubungkan ke port mikrokontroler. Jika saklar ditekan, akan
menghubungkan baris dan kolom yang terhubung kepadanya. Pembacaan
dilakukan dengan melakukan scanke setiap baris dan kolom.
Pembacaan baris dilakukan dengan membuat semua kolom berada di logikarendah. Pada saat ini port yang terhubung ke kolom berfungsi sebagai ouputdan port yang dihubungkan ke baris akan berfungsi sebagai input. Jika tidakada saklar yang ditekan, semua baris akan terbaca logika L Kt'tik;r s;rltlr satu
baris terbaca 0, berarti ada saklar di baris tersehut yang ditr'k;rrr (tr,rlrrrlrrrng
Gombor 5.4 l(eypod l4otriks 4x4
contoh program di bawah akan memperlihatkan bagaimana membaca (men-scan) keypad 4x4. Baris dan kolom dihubungkan dengan pl, dengan R0dihubungkan ke p1.0, Rl ke pl.l, ..., R3 ke pt.3 aan bO dihubungkan kePl'4' cl ke Pl'5' "" c3 ke p1.4. p0 digunakan unruk mengendarikan g LEDyang akan menampilkan data hasil pembacaan keypad.- =======================================================;Program Title : "Reading 4x4 Matrix Keypad,,;Fife name : Matriks.asm;Version : 1.0;Created date : October 10, 2006; I)I ()grarnrne ( ; U:;rn.rrr. l I I *tir *rt a
^ l. a a t.
^ 1.. a
^ r *i t{**************************
t50 Ieknik Antarmuka dan Pemrograman l''likrokontroler AT89552
. * * * * * ** ** ** ** ** * * ***** * * ** ** ** **** **** * * * ** **** **** ****; Microcontroler Pin/Port Assi-grnment. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
0perasi Port lnput/0utput
lc Loop3jmp Main_prog
,. * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * *Check_Key_pressed:
mov KeyData, #oFhmov A, KeyDataorl A, #0F0hcpl At-) L I\O_Keysetb Cret
No_Key:clr Cret
; ***** ** ** ** ** ***** * * * * ** ** * * * * *** * * * * * * * * *** * * * * * ** * * **Fi-nd Row:
mov A, KeyDaLamov R0, #4
Try=Next-_Row:rrc A
Row_Found:mov A, #4subb A, R0clr Cret
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *Find_Column:mov R0, *4mov A, #0EFhpush ACCTry_Next_Column:POP ACCmov Keyl)afa. Arl n
t5t
KeyDataLEDDaIa
eguequ
Pl_
PO
. * ** ** ** * * **** * ** * ** * * * * * * * ** * * * * ** ***** * * ** * * *** * ** ****;Main Proqram- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
org 0000HMaj-n_Proq:
call Check_Key_Pressedjnc Main_Prog
call Find_Rowmov B, Ajnc Get_Column
call Check_xey_Pressedjc Loopl'sjmp Main-Progt
. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ] nc Row Founddjnz R0, Try_Next RowGet_Columnl. ^'^--
call Find-Column setb cretswap A
OTl A, Bjnc Display_Data
Loop2:call Check_Key_Pressedjc Loop2sjmp Main_Prog
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * ** * * * * * * * * * *
Display_Data:cpl Amov LEDData, a
Loop3:call Check-Key_Pressed
152 leknik Antarmuka dan Pemrograman l'likrokontroler AI89S52
Push ACC
mov A, KeYDataor1 A, #0F0hcpl A
li, Column-Found"aln, R0, Try-Next-ColumnPoP ACC
seLb C
ret
Column-Found:PoP ACC
mov A, *4c1r C
subb A, R0
clr C
ret
end
Program diawali dengan memanggil subrutin Check-Key-Pressed' Subrutin
ini berfungri t"'tt'k- membaca buti'' Kolom akan berada di logika 0'
sedangkan baris akan meniadi input (dengan mengirim data OFH ke KeyData
atau P1). KeyDaradibaca dan disimpan di register A untuk kemudian di-OR-
kan dengan FOH dJ;il*ptu*""1"n' Jika ada saklar yang ditekan' A tidak
akan bernilai 0 dan bit C tiu" di-set' Sedangkan iika tidak ada saklar yang
ditekan,Aakanbenilai0danbitCakand-i-'"'"t'Programakankembalimemanggilrrb-ti'tCi"ck-Key-Pressediikatidakadasaklaryangditekan'
|ika ada saklar yang ditekan' Program kemudian akan mencari baris dengan
memanggil ,ubrutin Find-Riw' KeyData akan dibaca lagi dan disimpan di
register A. Baris dicari dengan mengecek,4 bit bawah register A' Register A
akan digeser ke kanan -"tioi C (instruksi rrc)' Bit C kemudian dicek dengan
instruksi inc, jika bit C=0 berarti baris ditemukan' jika C=l pengecekan
dilanjutkan sampai 4 kali' R0 berfungsi sebagai pencacah 4' Baris yang
bersangkutan didapat dengan mengurangi bilangan 4 dengan isi R0' Bit C
akan di-set jika baris dilemukan dan di-reset jika tidak ada baris yang
ditemukan. Data baris selanjutnya akan disimpan di register B'
Hal selaniutnYa adalah mencarl
l;inl (,itltttttn. Kolotn tlicari tlt'rrgarr
kolom deng,atr rnernarrggil sttbrtll in
trtt'tnbttal st't iall kolorll lrt't lr rgrk:r () sltt tt
0perasi Port lnput/0utput
per satu (bergantian). R0 menyimpan konstanta 4 sebagai pencacah kolom.
Register A akan menyimpan data untuk menentukan kolom mana yang akan
berlogika 0, data awal adalah EFH, artinya kolom 4 (C3) yang pertama kali
berlogika 0. Register A akan digeser ke kiri (instruksi rl) dan dikirim ke
KeyDara. Setiap kali kolom diaktifkan, KeyData akan dibaca kemudian di-
OR-kan dengan FOH dan dikomplemenkan. ]ika ada saklar yang ditekan, A
tidak akan bernilai 0 (karena salah satu bitnya berlogika i); sedangkan jika
tidak ada saklar yang ditekan, A akan bernilai 0. Nilai kolom didapat dengan
mengurangi konstanta 4 dengan isi R0.
Nilai kolom kemudian akan disatukan dengan nilai baris (baris sebelumnya
disimpan di B). Pertama register A, yang menyimpan data kolom, akan di-
swap kemudian akan di-OR-kan dengan register B, yang menyimpan data
baris. Dengan demikian register A akan menyimpan data kolom di nibble atas
dan dara baris di nibble bawah. Data kemudian ditampilkan melalui 8 buah
LED yang terhubung ke P0. Data kolom dan baris akan bernilai 0 sampai 3.
Sebagai contoh jika saklar KEY1 yang ditekan maka data yang akan
ditampilkan adalah 10H (KEY1 terhubung ke baris R0 dan kolom Ci). Tabel
5.1 memperlihatkan data yang akan terbaca untuk setiap saklar.
Tobel 5.1 Soklor don Doto yong Terboco
Saklar Data,Terbaca
KEYO 00H
KEYl 10H
KEY2 20H
KEY3 30H
KEY4 01H
KEY5 11H
KEY5 21H
KEY/ 31H
KEYS 02H
KEY9 12H
KTiYIO 22H
t5l
KEY1l 32H
KEYl2 03H
KEY13 13H
KEY14 23H
KEYl5 33H
154Teknik Antarmuka dan Pemrograman I'likrokontroler AT89S52
BAB 6ANT.\RM U KA DENGAN Dl,PlzlY
Bab 5 telah membahas bagaimana menggunakan porr-porr AT89S52 untukmenyalakan LED, membaca saklar dan keypad matriks. Bab ini akanmenjelaskan bagaimana AT89S52 digunakan untuk mengendalikan perangkatyang biasa dipakai untuk menampilkan data yaitu display arau alat peraga.
Display yang digunakan adalah display 7 segmen, dot matriks , LCD karakterdan LCD grafik.
6.I DISPI.AY 7 SEGMEN
Display 7 segmen merupakan display yang terbentuk oleh 7 buah LED(ditambah I LED untuk menampilkan titik) yang dirangkai untuk menampil-kan bilangan heksadesimal. Kedelapan LED tersebut bisa dirangkaikanmembentuk rangkaian common anoda atau common katoda. Pada contohaplikasi buku ini yang dipakai adalah 7 segmen common anoda karena jenisini bisa langsung dihubungkan dengan port mikrokontroler melalui sebuahresistor. Gambar 6.1 memperlihatkan konfigurasi segmen dan rangkaianekuivalen 7 segmen jenis common anoda.
Display 7 segmen, seperti ditunjukkan oleh Gambar 6.1, terdiri aras segmen-segmen yang diberi nama segmen A, B, C, D, E, F, dan G serra segmen DPuntuk menampilkan tanda titik. Dengan mengatur segmen-segmen mana
yang menyala, display 7 segmen bisa menampilkan bilangan heksadesimal (0,
i, 2, ..., A, B, C, D, E, F). Tabel 6.1 memperlihatkan segmen mana saja yangharus dinyalakan untuk menampilkan bilangan heksadesimal ini, ON berartinyala dan OFF berarti mati.
Ada banyak cara untuk mengendalikan display 7 segmen denganmikrokontroler, di antaranya dengan menggunakan IC dekoder 7 segmen,dihubungkan langsung dengan mikrokontroler, dengan teknik multiplek, dandengan menggunakan IC register geser. Subbab ini akan membahas teknik-teknik tersebut.
Common Anoda
Ieknik Antarmuka dan Pemrograman l'likrokontroler AI89Sil Antarmuka dengan Display
AngkaSegmen
A B C D E r G
D OFF ON ON ON ON OFF ON
E ON OFF OFF ON ON ON ON
F ON OFF OFF OFF ON ON ON
6.I.I IC DEKODER 7 SEGMEN
IC dekoder 7 segmen adalah IC yang berfungsi untuk mendekode dataheksadesimal atau BCD (Binary Coded Decimal) menjadi data 7 segmen(bilangan heksa atau BCD adalah data 4 bit sedangkan 7 segmenmembutuhkan data 7 bit). Salah satu contoh IC dekoder 7 segmen adalah IC74L547.
IC 74L547 adalah IC dekoder BCD ke 7 segmen (mengubah data BCDmenjadi data 7 segmen) dengan kolektor terbuka dan dengan keluaranberlogika rendah pada segmen yang nyala, sehingga sesuai unruk 7 segmenjenis common anoda. Gambar 6.2 memperlihatkan lambang lC 74L547 diskematik, pin VCC (14) dan GND (7) tidak ditunjukkan.
Gombor 5.2|C741547 Dekoder 8(D ke 7 Segmen
IC 74L547 mempunyai 4 bit masukan (untuk data BCD), 3 bit kendali dan 7bit keluaran untuk dihubungkan ke display 7 segmen. Pin D0 - D3 adalah pinmasukan untuk data BCD. LT , RBI , da., BVRBO adalah pin kendali. Pin
tf qr-p resr) merupakan pin untuk menguji segmen, membuat pin iniberada di logika rendah akan menyalakan semua segmen (dengan pinBI/ltUO beracla cli logika tinggi). Pin AW (ripple btanking inpur) yangrlihcri logika rt.rrtllh (rlcngan pin LT berada di logika tinggi) akanrn(,rnatikiln s('nllrir \(.Hnr(.rr Plr<llr slat clibcri data 0 di masukan BCD. Selain itu,
t57156
A
uffi*\H'fJo"on
D
{a) Honli6utasi 7 Segmen (b ) Rangka ian Ekirrelen
Gombsr 6.1 DisPloY 7 Segmen
Tobel 6.1 DisPloY 7 Segmen
SegpenAngle
A B C D E F G
0 ON ON ON ON ON ON OFF
1 OFF ON ON OFF OFF OFF OFF
2 ON ON OFF ON ON OFF ON
3 ON ON ON ON OFF OFF ON
4 OFF ON ON OFF OFF ON ON
5 ON OFF ON ON OFF ON ON
6 ON OFF ON ON ON ON ON
7 ON ON ON OFF OFF OFF OFF
8 ON ON ON ON ON ON ON
9 ON ON ON ON OFF ON ON
A ON ON ON OFF ON ON ON
B OFF OFF ON ON ON ON o!( )1,'1,'(. ON OFF OFF ON ON ON
ooEEIEE?C03E
ELTFREI 6
EiTFEE
Teknik Antarmuka dan Pemrograman ilikrokontroler AT89552
Gombor 6'3 Rongkoion 7 Segmen dengon l( 74[547
Gambar 6.3 memperlihatkan display 7 segmen dengan IC dekoder 74L547
yang dihubungkan dengan mikrokontroler AT89S52' Program berikut akan
menampilkan bilangan iesimal dari 0 sampai 99 sehingga dibutuhkan 2 buah
rangkaiandiatas.Pinkendalisemuanyatidakdiaktifkan(dihubungkankeVCC, berlogika tinggi), sedangkan pin data dihubungkan ke P1' P1'0 - P1'3
dihubungkan dengan rangkaian pertama unruk menampilkan bilangan
satuan, sedangkan Pl.4 - p1'z dit"U"ngkan dengan rangkaian kedua untuk
menampilkan Puluhan'
; = = = = ==-- = = = = == == = = == = == ==== == == == == == == = = = = == = == == = = == = =
,ptoS,tu* TlLle : "7 Segmen Display with 74LS47'
; File name : TSeqTmenl ' asm
;Version :1'0;Created date : November 13' 2006
. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * ** * * * *
;Microcontroler Pin/Port Assignment. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * *
DisPlaYData egu P1
- ***************************************** i I
; I nt r'r tt,r I RAM m'r1r1r in<;
Antarmuka dengan Display
. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * **
egu 30Hequ 31H
My_NumberBCD_Nlunber
. * * * * * * * * x * * * * ** * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;Main Program- * * * * * * * * * ** * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * *
Org 0000HMain_Prog:
mov My-Number, #0mov DisplayData, My-Number
Main_Prog_Loop:inc My-Nunbercall HexaToDecimalmov DisplayData, BCD-Numbercall Delaymov A, BCD-Numbercjne A, #99H, Main-Proq-Loopmov My-Nlunber, #0FFHsjmp Main-Prog-Loop
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
HexaToDecimal:mov A, My-Numbermov B, #10div ABswap Aorl A, B
mov BCD_Number, Aret
" * * * * * ** * * * * ** * * * * * * * * * * * * * * * * * ** * * * * ** * * * * * * * * * * * * * * * * *
;Delay Routine
mov R6, #0mov R7, #0
Delay_Loop:djnz R6, Delay-Loopdjnz R7, Delay-Loopre[.
r.rrrl
t59
158
pin B?REO akan menjadi output dan menjadi logika rendah' Pin BVRBO
(blanking input/ripple blanking outPut) merupakan pin untuk mematikan
semua segmen dengan tidak melihat pin kendali yang lain bila berada di
logika rendah. Pin ini juga akan menjadi pin output jika pin RBI diaktifkan'
Sedangkan pin A - G adalah keluaran 7 segmen' Keterangan lebih lengkap
bisa dilihat di lembaran data IC ini yang ada di CD pendukung'
Er0olE?B3
Teknik Antarmuka dan Pemrograman l'likrokontroler AI89S52 Antarmuka dengan Display
BCD atau heksadesimal menjadi data 7 segmen. Cara yang paling banyak
dipakai adalah dengan menggunakan look-up tabel. Perhatikan kembaliTabel 6.1 di atas. Dengan mengganti "ON" dengan "0" dan'OFF" dengan "1"
akan diperoleh data apa yang harus dikeluarkan untuk menampilkanbilangan yang diinginkan. Tabel 6.2 memperlihatkan data-data tersebut
dengan segmen A sebagai bit ke-0 sampai segmen G sebagai bit ke-6. Bit ke-7(tidak dipakai) ditetapkan bernilai 1.
t6tr60
Programdiatasmenggunakan2byteRAMinternal(alamat30Hdan3lH).Alamat3OH(My-Number)akanmenyimpanbilanganheksadesimal'sedang.kan alamat 31H (BCD-Number) akan menyimpan bilangan BCD yang akan
dikirimkan ke IC dekoder 7 segmen melalui Pl (DisplayDara)'
Program diawali dengan membuat My-Numbermenyimpan angka 0 sebagai
nilaiawal.KemudianMy-Numberdinaikkandenganinstruksiinc.BilanganMy-Number ini tidak bisa langsung dikirimkan ke IC dekoder karena
tWy-Nu-t", adalah bilangan heksadesimal' sedangkan dekoder hanya
menerima bilangan BCD. OIeh karena itu' My-Number ditbah dahulu
menjadi bilangan BCD dengan memanggil subrutin HexaToDesimal'
SubrutinHexaToDesimalakanmengubahbilanganheksamenjadibilairganBCD sehingga bisa langsung dikirim ke dekoder' Cara yang digunakan cukup
sederhana. Bilangan fr.Lr" "L""
dibagi dengan 10 yang disimpan di register B
dengan instruksi pembagian div' lnstruksi pembagian ini akan menghasilkan
bilangan puluhan yrng Jirl*p'n di A (sebagai hasil pembagian) dan bilangan
satuan yang disimpu.t di ,"gi'ter B (sebagai sisa pembagian)' Instruksi swap
dan orl akan membuat register A menyimpan bilangan BCD dari bilangan
heksa yang diubah d".rgu., bilu"gan puluhan disimpan sebagai nibel atas dan
bilangansatuundisimpansebagainibelbawah'Bilanganiniselanjutnyadisimpan di RAM BCD-Number' Kemudian dikirimkan ke dekoder'
Untuk mengetahui apakah bilangan sudah mencapai 99 atau belum'
digunakan instruksi lompat bersyarat cjne' iika bilangan belum mencapai 99'
iy-Nu-b"r akan terus dinaikkan dan program berulang kembali'
Sebaliknya iika bilangan sudah mencapai 99' My-Number akan diisi FFH
sehingga setelah *"'lo-put kembali ke Main-Prog' My-Number akan
*".rjudi 0 (instruksi inc). iubrutin Delay dipanggil agar perubahan tampilan
display tidak terlalu cePat.
6.1.2 DISPLAY 7 SEGMEN LANGSUNG
Display 7 segmen ienis common anode bisa dihubungkan langsung dengan
ATSgs52,tentuSaiasetelahmelaluiresistorseripembatasarus.Untukitudiperlukan sebuah port untuk mengendalikan sebuah display 7 segmen' Port
tersebut harus mengeluarkan data yang sama dengan data yang dikeluarkan
oleh dekoder 7 segmen. Rangkaian hubungan langsung' display 7 st'gtnt'n
clitunjukkan oleh cambar 6.4. Prog,rarn l'rarus meng,ubalt tl;rtit irl;rrr l)rlirrrllirn
F0.uPtr.lP0.2P0.3P0.4P0.5P0.6
P't .0Pt.'lPr.tP1.3P t.4Pl.5PI.B
Gombcr 6.4 Rongkoion Disploy i Segmen yong dihubungkon longsung
Program di bawah beker;'a sepefti halnya program sebelumnya. yaitumenampilkan bilangan 0 sampai 99 melalui 2 buah display 7 segmen yang di-hubungkan secara langsung. Display 7 segmen pertama dihubungkan dengan
P0 yang akan menampilkan bilangan satuan, sedangkan display 7 segmen
yang kedua dihubungkan dengan P1 yang akan menampilkan bilangan
puluhan.
Hal yang membedakan antara program ini dengan program sebelumnya
adalah adanya penambahan subrutin Segment-Converter. Subrutin ini akan
mengubah data BCD menjadi data untuk menampilkan bilangan tersebut didisplay 7 segmen. Cara yang dipakai adalah dengan menggunakan cara look-up tabel (dengan instruksi movc). Definisi data diperoleh dari Tabel 6.2.
Seperti program sebelumnya, bilangan yang akan ditampilkan disimpan dirncmori yarrg beralamat di 30H (My-Number). Subrutin HexaToDecimalakan rncmisalrklrr bilarrg,an pululran dengan bilangan satuannya. Instruksi
lrr.rrrllrgirrrr rliv rrkrrrr rrrllrrktrkirn lral ini. []ilangan My_Nuntbet- akan dibagi
Ieknik Antarmuka dan Pemrograman l'likrokontroler AT89552 Antarmuka dengan Display
=========;Program Title : "7 Segmen Display with DirectConnecti-on";File name;Version;Created date : November 22, 2006,'Programrner : Usman- * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** ** * * * * * * * * * * * * * * *
r63r62
denganl0,hasilpembagianakandisimpandiAsebagaibilanganpuluhandansisa'pembagian akan disimpan di B sebagai bilangan satuan' Berbeda dengan
subrutin HexaToDecimal padaprogram yang menSSunakan dekoder' di mana
setelah operasi pembagian akan dilakukan penggabungan bilangan puluhan
dengan bilangan satuan, di program ini hasil pembagian dan sisanya akan
l".rgrurrg diubah menjadi data display 7 segmen dengan memanggil subrutin
Segment-Converter danmenampilkannya di display 7 segmen'
: TSegmen2.asm: 1.0
*****************************************Pin/Port Assigrnment
*****************************************
DispData_Unit equ P0DispData_Ten equ P1
*******************************************************Interna1 RAM mapping*******************************************************
My_Number equ 30H
*******************************************************;Maj-n Program- * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * x * * * * * *i
Org 0000HMain_Prog:
mov My_Number, #0
Main_Prog_Loop:
. **************; Microcontroler**************
l_nccallcallmov
My_NumberHexaToDecimalDelayA, My_NunJcer
A, My*Nuniberr1, ll10All
cjne A, #99, Main_Prog_Loopmov My_Nunber, #OFFHsjmp Main_Prog_Loop
- * * * * * * * *x * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * x* * * * * * * * * * * * *
HexaToDecimal:movmovrli v
Tobel 6.2 Dolo DisPloY 7 Segmen
BilanganSegroen Data
GOG F E D C B A
0 0 0 0 0 0 0 CO
1 1 1 1 0 0 1 F9
2 0 1 0 0 1 0 0 A4
J 0 1 I 0 0 0 0 BO
4 0 0 I 1 0 0 1 I
5 0 0 I 0 0 I 0 92
6 0 0 0 0 0 I 0 82
7 1 1 1 I 0 0 0 F8
8 0 0 0 0 0 0 0 80
9 0 0 1 0 0 0 0 90
A 0 0 0 I 0 0 0 88
B 0 0 0 0 0 I I 83
C 1 0 0 0 1 I 0 C6
D 0 I 0 0 0 0 I A1
E 0 0 0 0 I 1 0 86
F 0 0 0 1 1 0 8E
t65r64 Teknik Antarmuka dan Pemrograman ilikrokontroler AT89552
call Seg'menE-Convertermov DisPDaLa-Ten, Amov A, B
cal-1 Segrnent-Convertermov DisPData-Unit, Aret
- * * * * * * * * * * * * * ** * * * * * * * * * ** * * * * * * * * ** * * * * * * * * * * * * * ** ** * *
Segment-Converter:inc Amovc A. @A+PC
ret
db 0c0Hdb 0F9Hdb 0A4Hdb 0B0Hdb 099Hdb 092Hdb 0B2Hdb 0F8Hdb 080Hdb 090H
- * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * ** * *
;Delay Routine. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * *
Delay:mov R6, #0mov R7, #0
Delay-LooP:dlnz R6, DelaY-LooPd\nz R7, DelaY-LooPret
end
6.I.3 DISPLAY 7 SEGMEN DENGAN MULTIPTEKS
Kedua cara mengendalikan display 7 segmen seperti yang telah diielaskan
mempunyai kelemahan, yaitu memerlukan port mikrokontroler yang, lebih
banyak. Semakin banyak display yang dikendalikatr semakin batryak port
Antarmuka dengan Display
yang harus dipakai. Oleh karena itu, ada satu cara untuk mengurangipemakaian port ini, yaitu dengan cara multipleks.
Seperti telah dijelaskan, display 7 segmen memiliki pin common anoda yangakan dihubungkan dengan VCC. Pin ini bisa digunakan untuk menghidupkanatau mematikan display dengan tambahan rangkaian switching, dengansebuah transistor misalnya. Jika 2 buah 7 segmen atau lebih dinyalakan dandimatikan secara bergantian dalam waktu yang sangat cepat, karenaketerbatasan penglihatan manusia, maka display-display tersebut akanterlihat menyala tems secara bersamaan. Hal inilah yang digunakan dalamcara multipleks. Gambar 6.5 memperlihatkan 4 buah display 7 segmen yangdihubungkan secara muhipleks. Resistor yang terhubung ke basis rransisrorbernilai 1 KO, sedangkan yang terhubung ke 7 segmen bernilai 330 f) ataudisesuaikan.
Dalam metode multipleks, setiap pin segmen (A,8,C,..., G, dan DOT)dihubungkan satu sama lain sehingga hanya diperlukan 7 buah pin jika 7segmen dihubungkan langsung arau hanya 4 pin jika menggunakan ICdekoder untuk semua data display. Dan setiap 7 segmen memerlukan I pinpengendali (pir COMMON), sehingga jika ada 4 display 7 segmen,diperlukan 4 pin.
F0.6r,0.-5F0.4F0.3P0.2P1l.1PO,B
Pr.3F1.2P1.1Pl.0
Gombor 6.5 Disploy 7 Segmen dengon Multipleks
Teknik Antarmuka dan Pemrograman }likrokontroler AT89S52 Antarmuka dengan Display
r66
Oleh karena dalam sistem multipleks display dinyalakan secara bergantian
terus-menems, mikrokontroler harus mengendalikan semua pin kendali
display secara terus-menerus pula' Hal ini mengharuskan struktur program
assemblermengerjakan"b"'ti''kendalidisplaysecaraterus-menerus(erzd-less loop) karena kalau program melompat ke alamat program lain untuk
mengeriakan subrutin tuitt ttit"tu lama' akan menyebabkan display berkedip'
Contoh Program berikut akan menampilkan bilangan 0 sampai 9999 pada 4
buah 7 segmen yang termultipleks dengan pin-pin data segmen dihubungkan
langsung ke port mikrokontroler (P0)' Pin kendali dihubungkan ke P1'0
(display Pertama yang menampilkan bilangan satuan)' Pl'1 (kendali display
p"i"fr""i, P1.2 (kendali d'isplayratusan)' dan P1'3 (kendali display ribuan)'
. =================== =======================-==
;Program Title : "7 Segmen Dj-splay with Multiplex"
Disp_Data3Disp_Data4
XHXLYHYLau
ZL
ZO
ZTZ2L-)
CounterlCounter2Counter3
equ 34Hequ 35H
egu 36Hequ 3'7Hequ 3BHequ 39Heqnr 3AHegu 3BH
equ 3CHequ 3DHequ 3EHegu 3FH
egu 40Hequ 41Hequ 42H
Disp_Data1, #0C0HDisp_Data2, #0C0HDisp_Data3, #0C0HDisp_Data4, #0C0H
Pl-, #0F0HR0, #0R1, #0
; File name : TSegmen3.asm
;Version :1'0;Created date : December 05' 2006
: Prosram[er : Usman'::::;;;;;;.-"..--. * ;
' iMain Proqram
llai.ro.o,rrr"r". pin/port Assisrlaren! ors 0000H"j:;.;;;;;;;"--,.., Main-Prog:
DisDDaLa equ "o ffiJ II-Iffif; i3Dis; cTFrl equ P1 0
:;_:-^-., " p1-1 counlerl, +0
Dis;-cTRr3 equ P1.2 counLer2' +o
,i"'o,it*a equ P1.3 counler3 ' +3
. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * ** * *
;Internal ReM mapping. * * * * * * * * * * * * * * * *i * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* * * * * *
movmovmovmov
movmovmov
FlagRegzov
My-NumberHMy-NiunberL
Di sp -Da t-a1
l)i l;1r l),rt .r2
equ 20Hbit FlagReg.0
equ 30Hequ 31H
equ 32Hc(lrt 3 ill
M;r i n_Pror1 l,oop :
;DirrDl,ry l()N
t67
Ieknik Antarmuka dan Pemrograman I'likrokontroler AT89552
setb DisP-CTRL1clr DisP-CTRL2clr DisP-CTRL3clr DisP-CTRL4mov DisPData, DisP-Data1
;DisplaY 2 ON
setb DisP-CTRL2clr DisP-CTRLLc1r DisP-CTRL3clr DisP-CTRL4mov DisPData, DisP-Data2
;Display 3 ON
setb DisP-CTRL3c1r DisP-CTRL1c1r DisP-CTRL2clr DisP-CTRL4mov DisPData, DisP-Data3
;Display 4 ON
setb DisP-CTRL4clr Dj-sP-CTRL1cl-r DisP-CTRL3c1r DisP-CTRL2mov DispData, DisP-Data4
call UPdate-MY-NumbersjmP Main-Prog-Loop
. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Update-My-Number:d)nz Counterl, Not-Updatedjnz Counter2, Not-Updatedjnz CounLer3, Not-Updatecatl Update
NoL-UPdate: Iret:
Update:mov Counter3, #3
mov DPH, My--Nunlberll
Antarmuka dengan Display
mov DPL, My_Nunberlinc DPTRmov My_NumberH, DPHmov My_Numberl, DPLcall Decimal_Adjust
;Check number for >9999 (270FH)mov A, My_NumberHsubb A, #27Hmov B, Amov A, My_Numberlsubb A, #0FHor1 A. B
)nz Under_9999mov My_NumberH, #0mov My_Numberl, #0
Under_9999:ret
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * ** * * **Decimal _Adjust. :
mov XH. My_NurnberHmov XL, My_Numberlmov YH, #03Hmov YL, #0EBHcall DIV16mov A, Z2call Segment_Convertermov Disp_Data4, A
mov XH, 2L
mov XL, Z0mov YH, #0Hmov YL, #64Hcall DIV16mov A, Z2call Segment_Convertermov Disp_Daca3, A
mov Xll , '/,\
ill( )v ): L, i',1)
t69r68
Ieknik Antarmuka dan Pemrograman l'likrokont1glf{qss2
mov YH, #0Hmov YL, #OAH
call- DIV15mov A, Z2
call Segrment-Convertermov DisP-Data2, A
mov A, Z0
call Seqment-Convertermov Disp-Data1, A
ret:
- * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * ** * * * * * ** * * * * * * ** * *
; Aritmethic sub-routine. * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* * * * *
Antarmuka dengan Display r7tr70
mov1callmovcpljncmovmov
div_1:movr1cmovmovr1cmovdlnzmovmovmovmovc1rret
SUB16:movclrsubbmovmovsubbmovmovreL
XH, ASUB16C, ZOVC
div_1XH, ZHXl, ZL
A, R2AR2, AA, R3AR3, AR7, div_1oop23, R322, R221., XHZO, XLzov
DIV16:
-movorl7nzsetbret
div-OK:movmovmovmovmovmovmov
div-looP:c1rmovrlcmovmovrIcmovmovr1cmovmovr1c
A, YHA, YLdiv_OKzov
R1, XH
RO, XLxH, #0xL, #0R3, #0Pt2, #0R7, *16
C
A, RO
ARO, AA, R1
AR1, AA, XLAxl, AA, XHA
IIA, XLC
A, YLZL, AA, XHa vrj
ZH, Azov, c
**********************************************Segment_Converter:
inc Amovc A, @A+PCret.
OCOH
OF9HOA4II0li0lt
dbdbdbrltr
Ieknik Antarmuka dan Pemrograman l'likrokonttoltt N89Sg Antarmuka dengan Display
Setelah dinaikkan, data tersebut dipindahkan lagi ke My_NumberH danMy_Numberl Untuk menampilkan bilangan My_Number ke display, dataMy*Number harus diubah terlebih dahulu ke bilangan desimal 4 digit yangnantinya akan diubah menjadi 7 segmen. Subrutin Decimal_Adjust akanmelakukan hal ini.
Algoritma yang digunakan oleh subrutin Decimal_Adjusr cukup sederhana.Untuk mengubah bilangan heksadesimal 16 bit menjadi bilangan desimal 4digit, program harus mendapatkan nilai ribuan, nilai ratusan, nilai puluhandan nilai satuan dari bilangan rersebut (karena hanya 4 digit maka nilaimaksimalnya adalah 9999. Bilangan 16 bit akan mempunyai nilai maksimal65536). Untuk mendapatkan nilai ribuan, bilangan harus dibagi dengan 1000,
hasilnya adalah nilai ribuan rersebut. Sisa pembagftn akan dibagi dengan 100
untuk mendapatkan nilai ratusan. Sisanya dibagi dengan 10 maka akandidapat nilai puluhannya. Sisa pembagian terakhir adalah nilai satuanbilangan tersebut. Masing-masing hasil pembagian (nilai ribuan, rarusan,puluhan dan satuan) akan diubah menjadi data 7 segmen untuk ditampilkanmelalui subrutin Segment_Converter.
Pembagian dilakukan dengan memanggil subrutin DIVL6, yang merupakansubrutin untuk melalukan pembagian bilangan 16 bit. Subrutin ini akanmembagi bilangan 16 bit X (XH dan XZ) dengan bilangan 16 bit Y (YH danIZ). Hasil pembagian be.rupa bilangan 8 bit (24, sedangkan sisa pembagianberupa bilangan 16 bit (Zl dan ZQ. Pembagian pertama dilakukan untukmendapatkan nilai ribuan. My_nuntberH dan My_Numberl disimpanmasing-masing di XH dan XL sebagai bilangan yang akan dibagi. Bi{anganpembaginya adalah 1000 (03E8H) yang disimpan di f1(03H) dan YL (E8H).Hasil pembagiannya akan disimpan di 22 yang kemudian diubah ke data 7
segmen, melalui subrutin Segment_Converter, lalu disimpan di Disp_Data4(data display ribuan).
Pembagian kedua dilakukan untuk mendapatkan bilangan rarusan. Bilanganyang akan dibagi diperoleh dari sisa pembagian perrama, yang disimpan di Ztdan 22. Bilangan ini akan dibagi dengan 100 (0064H), hasilnya disimpan diDisp_Data3 setelah diubah ke data 7 segmen. Pembagian selanjutnya di-lakukan untuk mendapatkan bilangan puluhan. Pembaginya adalah l0(000AFI). Ilasil 1;ernl;ag,iannya akan disimpan di Disp_Data2, setelah diubahke clata 7 st.l.irrrt'n. llilirrrgarr saruan didapat dari sisa pembagian puluhan(ZQ,rlirrr liurlisurrli rlirrlr,rlr kr'rlrrt;r 7 st,grrrt,rr rlan rlisiml.lart tli Disp Datal.
t73171
db 099Hdb 092Hdb 082Hdb 0F8H
db 0B0H
db 090H
end
Bilangan yang akan ditampilkan disimpan di RAM internal sebagai bilangan
16 bit (2 byte), yaitu My-'NumbetH1"i"t""t 30H) menyimpan bilangan byte
tinggi, d,an My-NumO"'t (^tu^u' 31H) menyimpan bilangan byte rendah'
Data display y..tg "Lu"
ditampilkan juga disimpan di RAM internal' ada 4
byte yang dipakai -"'i"g--"ing untuk menyimpan data display satuan'
puluhan,ratusandanribu-anldldefinisikansebagaiDisp-Datal'Disp-Data2'Disp-DataL, dan Disp-4)' Untuk operasi aritmetika' yang diperlukan untuk
mengubah bilangan ir"tsa tO bit meniadi data display 7 segmen 4 digit'
digunakan variabel byre XH' XL' YH' YL' ZH' ZL' Z0' Z1' 22' Z3' 24' dan
variabel bir ZOV yang dipakai untuk operasi pembagian bilangan 16 bit'
Sedangkan untuk wakti ""du 1d"luy) digunakan 3 variabel yairu Counterl'
Counter2, dan Counter1'
Program diawali dengan memberi nilai awal kepada semua variabel di atas'
My-numberH d,^n 'My-Numberl diisi dengan 0' begitu juga dengan
counterl d.an counter2. Data display diisi dengan nilai yang akan
menampilkan angka 0 di display (0C0H)'
Selanjutnya, program akan mulai mengontrol display' dengan menyalakan
display secara bergantian' Pada saat menyalakan salah satu display' program
akan mematikan display yang lain' DispData (P0) akan mengirimkan data
sesuai denga. dirpfui y""g 'Ja""g dinyalakan' Setelah menyalakan display
ke-4, program ak,"' mJ"t"'ggil subrutin tJpdate-My-Number untuk
kemudian melompat lagi ke subrutin Main-Prog-Loop secara terus-menerus'
My-Numberakan diperbarui kalau nilai.semua Counter (1'2' dan 3)' yang
menjadi pencacah untuk wuktu ttnda (delay)' telah menjadi 0' Di program
ini tidak disarankan untuk menggunakan waktu tunda seperti program
sebelumnya (dengan perintah call) karena akan membuat display berkedip'
My-Nuntberdiperbarui dengan mengg'unakan instruksi inc Dl'}'l'll (l6 bit)'
My Nrtntbt'r'l/ clipindahkatr clahr'rltr kt' DI']l I dan Mv Nrttrtlt'rl' k(' l)l'l'
r75
174Teknik Antarmuka dan Peinrograman l'likrokontroler AT89S51 Antarmuka dengan Display
Teknik register geser pada dasarnya adalah mengirimkan data 7 segmen
secara serial, sehingga hanya dibutuhkan 3 pin pengendali, 1 pin untukmengirim data 7 segmen, satu untuk mengirimkan sinyal clock sebagai sinyalsinkronisasi untuk menggeser bit-bit data, dan satu lagi diperlukan untukkeperluan lain, mereset register geser untuk memadamkan display misalnya(seperti diperlihatkan oleh Gambar 6.6). Register geser yang digunakanadalah IC TTL 74L5164. Display 7 segmen yang digunakan berukuran 4 inci,karena itu dibutuhkan driver karena memerlukan ams yang cukup besar.
Driver yang digunakan adalah IC DS2003 yang merupakan 8 buah transistorDarlington dalam satu kemasan IC. Resistor I KO digunakan antara outpurregister geser dengan basis transistor, sedangkan untuk membatasi arus yangmengalir ke LED, resistor sebesar 560 Q dihubungkan antara 7 segmen
dengan DS2003 (bergantung pada tegangan VCC dan display yangdigunakan).
Register geser yang pertama akan mendapat masukan data dari pin data
mikrokontroler. Bit ke-8 data (QH) dari register geser pertama akan menjadimasukan bagi register geser kedua dan seterusnya sampai register geser
kelima. Masukan clock dan reset semua register diparalel dan dikendalikanlangsung oleh mikrokontroler. Data output masing-masing register akan
dihubungkan ke driver 7 segmen, dengan QA dihubungkan ke driver segmen
A, QB dengan segmen B dan seterusnya sampai QG dihubungkan dengan
segmen G. QH tidak dipakai untuk mengendalikan segmen. Denganhubungan seperti ini, maka data dari mikrokontroler harus dikirimi bit MSB(bit ke-7) terlebih dahulu dan data untuk menampilkan bilangan puluhanribu dikirim terlebih dahulu, disusul oleh data ribuan, ratusan, puluhan dan
satuan.
Pembagian bilangan 16 bit pada dasarnya dilakukan dengan melakukan 16
kali pengurangan bilanga" tO Uit' Operasi pengurangan Pertama merupakan
p"rgorurrgun dengan Persamaan berikut
(pembitang) x 2-15 - Pembagi
untuk menentukan aPakah
(pembilang) x 2-r5 > Pembagi
)ika tidak ada pinjama t (borrow) dihasilkan dari proses Pengurangan
tersebur, bir MSB tui, r."-lsl dari hasil pembagian _akan di-set. Proses
pengurangan selan;utnyu dilanjutkand""g"tl =U'i= 13' "' sampai i = 0' Bit
i"-ia"ri iasil pembagian akan di-set iika operasi pengurangan
(pembilang) * 2'i - Pemba$i
menghasilkan pinjaman' Untuk melakukan oPerasi Pengurangan tersebut
subrutin SuBl6dipanggil' Bit ZOVdigunakan untuk menentukan apakah
ada pinjaman atau tidaf,]Bit ZoV juga digunakan untuk menentukan apakah
pembagi bilangan 0 atau bukan' karena pada operasi pembagian tidak
diperbolehkan p"*uugi udulah bilangan 0'.Hasil pembagian akan disimpan di
register Z3 datt. Zz' "Lu'gf^n ti'" p"*b'gian akan disimpan dt Zl dan Z0'
6.1.4 DISPLAY 7 SEGMEN DENGAN REGISTER GESER
Salah satu kekurangan pengendalian display 7 segmen d"L*": multipleks
adalah ;rrogram harus selalu terus-menerus mengendalikan display' Program
tidak boleh meninggalkan subrutin pengendalian display terlalu lama karena
akan menimUoff.urr'"i"i kedip pada display. )ika ada hai lain y:"9 l1::
dikendalikan, membaca saklar misalnya' mungkin harus melalui insterupsl'
Serain itu, ;it";rr*r"iirspray bertambah, port |ang diperlukan untuk kendali
display juga akan bertambah walaupun po" a"iu tetap' Efek kedip pada
display mungkin akan bertambah kalau iumlah display terlalu banyak' Untuk
itu diperlukan teknik lain untuk mengendalikan display 7 segmen yang bisa
menangani display 7 segmen dengan iumlah besar' sedikit port mikro-
kontroler yang diperlukan' dan program tidak harus selalu menialankan
subrutin pengendalian display secara terus-menerus' Salah satu caranya
l"t*un ."ngg""utun register geser (shift register)'
IC6OO !Jur741d'4 qg
il4L_IF rt3
0?cLK rll
o4f O0
AE
C Cohri]BEF EOM1GDOT
ll.l.4 0urAII,IE AUTB[.lc EUTClH tr l:rUTEr
II.IE OUTEIHF - EUTFIHIJ E OUTG
O G}IE
116111 Bl74164 oE
a4eu- E3
o?CLK O1
o r:. 00
AB
c c0h,tBeF col"tl[iOBT
|l.lA ouTAIHE OUTBIHI |]UTEll.l E 0 urtl|l.lE ouTElllF - 0urF|lt6 d 0uTs
rr 6lt0
rf6o2 E[74164 of
o4Em 03
i2L:LK Dl
oc( E0
AE
C E0luU0EF C0lutl6g0T
[.lA ouTAlllB 0urs|lil] DUTCtitrr 0uT0INE OUTEIHF - OUTFIHG E OUTG
O GHE
rc603 qlUE
14164 65Q4elE o30?
CLK O1o{ 00
AB
C E0lutEEF C0tutlrjODT
rHA ouTA|l.lE ouTBIHC OUTC[.lD 0 uTEIIIE OUTEllrF - ouTFtNG E ortrc
u GHO
IC6O4 qJUE
71116{ oco4
EIF o301
CLK O'Io4 00
AB
C C0lt't0EF COM10EOT
IHA OUTAINB OUTE[.rc ouTcINE OUTDINE OUTEIHF - OUTFtHrj 6 'luTBo rjHE
lT6TeknikAntarmukadanPemrotramanl,likrokontrolerATS9S52
Gombor 6'6 Disploy 7 Segmen dengon Register Geser
Untuk menyalakan segmen' bit data harus berada di logika tingg'i karena
driver transisror yang iipuLui adalah NpN dan memerlukan rt'gang,, urrtuk
nrcnyalakanrrya (basis t ransislor)'
Antarmuka dengan Display
Program berikut akan menampilkan bilangan 0 sampai 65535 (0000H -FFFFH) pada 5 digit display 7 segmen yang dikendalikan oleh register geser.
Tabel data yang digunakan merupakan komplemen dari data 7 segmen dariteknik sebelumnya.
;Program Title : "7 Segmen Displ-ay with shift register,,; File name : TSegirnen4 . asm;Version : 1.0;Created date : January 07, 2007; Progranuner : Usman. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * ** * * * * * * * * * * * * * **
,. * ** * * * * ** * * ** * * * * * * * * * * * * * * * * * * * * * * * ** ** * ** * * ** * * ** * * * *
; Microcontroler Pin/ PorL Assi-gnment- * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** ** ** * *
;7 segment control pinSS_DAT equ P3.5SS_CLK equ P3.6SS_RST equ P3.7
- * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * *,'Internal RAM mapping. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * **
t17
FlagRegzov
My_NumberHMy_NunberL
Disp_Data1Disp_Dat,a2Disp_Data3Disp_Data4Disp_Data5
eqnr 20Hbit. FlagReq.0
32H33H34H35H36H
31H3BH39H3AH']RII
eguequ
eguequequequequ
equequequecTLl
r '( ll I
XHXLYH
YI,'/,t I
30H3l_H
Teknik Antarmuka dan Pemrograman l'likrokontroler AT89S52 Antarmuka dengan Display
r78
ZL
ZO
ZLq1
Z3
3CH
3DH3EH3FH40H
- * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * ** * * * * * * * * * * * ** * x
;Main Program rJr+++*************************. *********************************
Org 0000HMain-Prog:
*" MY-NumberH' #OFFH
mov MY-NumberL' #OFFH
Main-Prog-LooP:
"}r uPdate-MY-Number
call DisPlaY-To-7-Seg;rnentcall DeIaYcall DelaYcall DelaYsjmP Main-Prog-Loop
. * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** ** * * ** * *
Update-MY-Number :
mov DPH, MY-NumberH
mov DPL, MY-NumberL
inc DPTR
mov MY-NwnberH' DPH
mov My-Nr:rnberl, ' DPL
mov XH, MY-NumberH
mov XL, My-Nunlcerlcall Decimal-Adjustret
. * * * * * ** * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * ** * * * * * * * ** * * ** * *
Decimal-Adjust:mov YH, *27Hmov YL, #l-0H
call DIV16mov A, z2mov DisP-Data5' A
equequequequ
movmovmovmovcallmovmov
movmovmovmovcallmovmov
movmovmovmovcallmovmov
movmovret
XH, ZIXL, ZO
YH, #O3HYL, #OE8HDIV16A, ZJZ
Disp_Data4,
XH, ZLXL, ZO
YH, #OHYL, #64HDIV16A, Z2Disp_Data3,
XH, ZLXL, ZO
YH, #OH
YL, #OAHDIV]-6A, 22Disp_Data2,
A. ZO
Disp_Data1,
. * * * * * * * * * * * * * * * * * * * * ** ** ** * * * * * * * * * * * * * * * * * * * * * * * * * ** * *
; AritmeLhic sub-routine. * * * * * * * ** * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * ** * * * * **DIV16:
mov A. YHor1 A. YLjnz div_OKsetb ZOVret
div_OK:mov R1, XHmov R0, XLmov XIl, ll 0
rIr()v XL, tl ()
t79
Ieknik Antarmuka dan Pemrograman I'likrokontroler AT89S52Antarmuka dengan Display
subb A, YLmov ZL, Amov A, XHsubb A, YHmov ZH, Amov ZOV, C
ret
. * * * * * * * * * * * * * * * * * ** * * * * * ** * * * * * * * * ** * * * * * * * * * * * * * ** * * * *Di sp 1 ay_To_7_Seg-ment :
clr SS_RSTmov R0, #5mov R1 , #Dj-sp_Data5
Di sp 1 ay_To_7_Segrment_Loop :
mov A, @R1
call Send_Data_To_Displaydec R1djnz R0, Dj-sp1ay_To_7_segrment_Loopsetb SS_RSTret
Send_Data To_Di-splay :
mov B, #8call Segment_Converter
Send*Data_To_Di sp1 ay_Loop :
r1c Amov SS_DAT, C
clr SS_CLKnopsetb SSnopd)nz B,ret
t8r
t80
mov R3, #0
mov R2, #0
mov R7, *L6
div-looP:cIrmovr1cmovmovr1cmovmovr1cmovmovr1cmov1caIlmovcpljncmovmov
div-l-:movr1cmovmovrlcmovdjnzmovmovmovmovc1rret
SUB16:movcLr
C
A, RO
ARO, AA, R1
AR].. AA, XLAxl, AA, XH
AXH, ASUB16c, zov
div-1XH, ZH
Xl, ZL
A, R2A
R2, AA, R3
AR3, AR7, div-1ooP23, R3
22, R2
ZI, XH
ZO, XLzov
Segmentincmovcret
_Converter:AA, @A+PC
0'7'7H
03 0H
OI,:3II01.'1 il
-CLK
Send_Da ta_To_Di sp 1 ay_Loop
dbdb(ll )
rllrA, XLC]
Teknik Antarmuka dan Pemrograman l'likrokontroler AI89552
db 0B4H
db 0D5H
db 0D7H
db 070Hdb OFFH
db 0F5H
. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * *
Delay:mov R0,mov Rl,
DelaY-LooP:dloz R0,dlnz Kr,ret
end
Antarmuka dengan Display
Subrutin Send_Data*To_Display akan mengubah data heksadesimal menjadidata 7 segmen dan menigirimkannya ke rc74164. Pengiriman data dilakukansecara serial (bit demi bit) melalui subrutin Send*Data_To_Display. Data.yang disimpan di A, akan digeser ke kiri melalui bit C (instruksi rlc).Kemudian melalui operasi pemindahan bit, bit C akan dikirimkan ke pin daralC74164 (SS_DA7). Sinyal clock, yang berfungsi sebagai penggeser bit data,dikirimkan melalui pin SS*CLK dengan instruksi clr dan serb. Instruksi nopdigunakan sebagai waktu tunda I siklus mesin. Menurut lembaran data IC74164, data akan digeser pada saat transisi dari logika rendah ke logika tinggidi pin SS_CLK Seluruh 8 bit data akan dikirimkan, register B dipakai sebagaipencacah bit (8 bit). Program tidak perlu mengonrrol display rerus-meneruskarena lC74164 mempunyai penahan (latch). Display hanya dikontrol kalaudata yang akan ditampilkan berubah. Dengan demikian bisa mengurangibeban kerja mikrokontroler"
6.I.5 PERTIMBANGANPERANCANGAN
Teknik-teknik pengendalian display 7 segmen, seperti yang telah diterangkanpada subbab sebelumnya, mungkin hanya sebagian teknik yang palingbanyak digunakan dalam perancangan display yang berbasis 7 segmen. Caralain mungkin bisa dilakukan dengan menggunakan IC kendali display 7segmen dengan dekoder dan driver yang digabungkan dalam satu kemasan.Namun, dari penjelasan di atas ada beberapa hal yang bisa dipertimbangkandalam merancang sebuah display (penampil data) dengan menggunakan 7segmen, baik ditinjau dari segi hardware maupun software.
Sebuah aplikasi yang hanya akan menampilkan data 2 digit, lebih baikmenggunakan teknik koneksi langsung, kecuali kalau aplikasi tersebutmemerlukan port-port mikrokontroler dengan jumlah besar, mungkin perludipertimbangkan teknik multipleks atau bahkan menggunakan teknikregister geser. Aplikasi lain yang lebih kompleks dengan digit data yang harusditampilkan lebih banyak, lebih baik menggunakan teknik regisrer geser.Tentu saja jumlah IC (atau hardware) yang diperlukan akan menjadi lebihbanyak.
Perlratikan, susunan pin display 7 segmen untuk display dengan ukuran yangbcrbcda akan berbcda pula. Oleh karena itu, pada saat merancang PCB harusst'lalu rnt.ngirt'rr kr, lt,rrrhanrrr clata yang, dikeluarkan oleh pabrik pembuat.llirrrgkarirrr ( rtrt rl;r\',r (Jtt11 ,,, .t'tr1r1rlt.) juga Iarus discsuaikan clclgan
t8lr82
#0#0
$DelaY-LooP
i
!
I
t
Seperti program sebelumnya' bilangan yang akan ditampilkan disimpan di
alamat RAM intern ^r 1iy_Nr-t"itt d,un My-Numberl). Subrutin update-
My-Number utur, "'"--[rbarui nllai My-NumberH dan My-Numberl'
Dengan menggunaka" "'t*ti" Decimat-Adju'er dan pembagian bilangan 16
bit (DIV16), subrutin t"t ;t'*' akan mendapatkan bilangan puluh ribuan
(disimpan di Disp-Data'If' bilangan ribuan (Disp-Data$' bilangan ratusan
(Disp-Data31, bilangan puluhan (Disp-Dara) dan bilangan satuan
(Disp-DataI)' Bilangan My-Nu-t"' akan ditampilkan ke display 7 seg'men
;"";; memanggil subrutin Display-To-7-Segment'
Subrutin Disptay-To-7-Segment diawali dengan mereset IC 74164 dengan
membuat pin RST Uu'togi"k" rendah; tujuannya agar semua output register
geser berlogika rendah (ilurnutikutt display)' sehingga pada saat pengiriman
data tidak membuat it'nf", seperti berbayang (efek dari penggeseran data)'
Register R0 dipakai '"Uug"i
pencacah butyuktyu digit (dalam contoh ini 5
digit), sedangkan Rl aiiut"l untuk menyimpan alamat digit yang akan
ditampilkan. Seperti telah dijelaskan' bilangan puluh ribuan-yang pertama
kali dikirimkan, maka R1 diisi dengan alamat Disp-Data5' Dengan meng-
gunakan mode pengalamatan tak langsung' digit demi digit akan dikirimkan
ke display. Setelah selesai' semua data digit diklti*ktt'' deng'arr mcmangg'il
subrutin Send-Dara-To-Display' pin RST \C74164 akan clibcri logika tinggi
untttk mcnyalakan clisplay kernbali'
184 Ieknik Antarmul<a dan Pemrograman l'likrokontroler AI89552
kebutuhan arus display 7 segmen. Semakin besar ukuran display, semakin
besar arus yang dibutuhkan.
Struktur software pun harus diperhatikan agar tidak menimbulkan efek kedippada display. |ika jumlah display yang diperlukan menjadi sangat banyak danbeban mikrokontroler menjadi sangat tinggi, mungkin diperlukan lebih darisatu mikrokontroler untuk mengendalikannya. Satu mikrokontrolerberfungsi sebagai pengendali display dan yang lainnya berfungsi sebagai
pengendali utama sistem, yang juga akan mengendalikan mikrokontrolerdisplay.
6.2 DISPLAY DOTMATRIKS
Display dot matriks terbentuk oleh beberapa LED (berbentuk "dot") yangdisusun membentuk matriks 5 kolom dan 8 baris (5xB) atau dengan ukuranlain. Kolom bisa berfungsi sebagai katoda (common katoda) dan baris sebagai
anoda (common anode) atau sebaliknya. Gambar 6.7 memperlihatikan displaydot matriks dengan kolom sebagai katoda dan baris sebagai anoda. Dengansusunan yang seperti ditunjukkan oleh Gambar 6.7, display dot matriks bisa
menampilkan tidak hanya angk, tetapi juga huruf atau bahkan gambar(grafik). Susunan nomor pin bisa bervariasi sesuai dengan ukuran display dan
pabrik pembuat. )enis display dot matriks inilah yang akan dibahas di dalam
buku ini.
Konfigurasi dispray. dot matriks mengharuskan teknik terrenru unrukmengendalikannya, baik hardwa." *u.,pr., software. Tidak seperti dispray 7segmen yang hanya memerlukan I byte data untuk menampilkan dara,display dor matriks memerrukan Jebih banyak dara untuk menamp,kan data,apalagi kalau data yang akan ditampilkan adaiah ar," gr"nk. Untukmenampilkan dara ke dispray dot matriks, hal pertama yurrg t "'*, d,akukanadalah menenrukan LED di kolom dan baris mana saja yang harusdinyalakan' Namun, karena konfigurasinya, LED tidak bisa dinyarakansekaligus' LED hanya bisa dinyarak* p". kolom (scanning koi-) arau perbaris (scanning baris).
?:"S.., p.or", p"ryulaan kolom rtu,_iburi, yang sangatcepar' display akan terrihar mera,r,pirkan data yang diinginkarr. t".rtu ,ajamikrokontroler han_dispray agar dispray JilT';ffi;tr fiLrj:l:T fl:T,lorom
arau baris ke
Teknik antarmuka yang akan digunakan (scaning kolom atau baris) harusmemperhatikan kebutuhan port mikrokontrorer atau komponen luarpendukung yang diperlukan. Sebuah IC driver display dot matriks me-mungkinkan untuk mengendalikan display dot macrils dengan mudah crarisisi sofrware dan hanya m"-botrhku, sedikit porr mikrokontrorer.Masalahnya, IC jenis ini surit didapa*an di pasaran, karena iturah diperlukanteknik terrentu. Regisrer geser dapat digunakan untuk menghemar port.Keluaran register geser yang paling ,-r- adalah g bit clan bil dig.rnakununruk mengendalikan kolom, ,"hi.rggu saru dispiay dor matriks hr";;menggunakan 5 bir' sisanya bisa digunakan unruk mengendarikan koromdisplay yang lain. pemilihan baris
-yang akan diaktitkan bisa dilakukandengan menggunakan rransisror yang difiingsikan sebagai sakrar. Teknik inimempakan teknik scanning baris. Gambar 6.g memperlihatkan sebuahdisplay dor matriks yang dikendalikan dengan reknik ini dengan meng-gunakan sebuah IC regisrer geser 74164 da. g buah transist"o, sebagaipemilih baris.
seperti terlihat pada Gambar 6.g, kolom (common karode)dikendarikan olehIC register geser dan baris (common anode) dikendalikan oleh transistor.Untuk menyalakan LED pada sr.ratu baris, baris yang b"rrurrgkrrr. hu.r,tertrubung ke vCC dengan mengaktifkan rransisror (kendari baris ROwcTRLbcrada di logika rendah karena digunakan rransisror pNp) dan keluaranrt'gislt'r gt's.r hrr'rs berada di rogika iendah. Daram menampirkan dara, barisl)('r'ra*ir <lirktillirrrr r)('llirlr. kari secrangka, [raris ya,g rai. harus clirnarikan
Antarmuka dengan Displayr85
KOLOI\,I
BARIS ' "^*,'l
4
5
a
a
I
,4
5
6
7
I
(a) Display frd Matrils (b) Ran8kara( Ek:ml
Gombor 6.7 Disploy Dot Motriks don Rongkoion [kuivolennyo
KOLOM -
t
(b) Rangkaran Ek:mlen
CooCL-)
C-
oooooocooooooooooocoOOCCoooo
Ieknik Antarmuka dan Pemrograman I'likrokontroler AI89552 Antarmuka dengan Display
Data yang dikirim disesuaikan dengan apa yang akan ditampilkan, apakahgrafik atau karakter (angka dan huruf). Misalnya rangkaian anrarmukaGambar 6.8 akan digunakan untuk menampilkan huruf "A" dengan ukuranfont 5x7 (dengan demikian baris ke-8 tidak digunakan). Untuk itu harusditentukan LED mana saja yang harus dinyalakan. Perhatikan Gambar 6.9.
Gumbor 6.9 Tompilon Huruf "A"
Untuk menampilkan huruf "A", kolom ke-2, 3 dan 4 di baris pertama harusmenyala. Di baris ke-2, kolom yang harus menyala adalah kolom ke-l danke-5. Tabel 6.3 memperlihatkan LED mana saja yang harus dinyalakanbeserta data heksanya untuk menampilkan huruf A.
Tobel 6.3 lobel Doto unluk Huruf "A"
t87t86
(ROWCTRL-1 berlogika rendah dan ROWCTRL yang lain berada di logika
tinggi). Oleh karena pada saat menyalakan LED keluaran register geser harus
berada di logika rendah, untuk mematikan display tidak bisa dilakukan
dengan mereset register geser (dengan membuat pin CLR berlogika rendah)'
Jadi, dalam aplikasi ini pin CLR akan selalu berada di logika tinggi'
Mikrokontroler kemudian akan mengirim data untuk kolom dari baris
pertama. Proses pengiriman data dilakukan secara serial melalui DM-DAT
i"ngun sinyal clock dikirim melalui DM-CLK (sama dengan pengiriman data
serial ke display 7 segmen pada teknik register geser)' Lalu dilaniutkan
dengan mengaktifkan blris kedua (dengan data kolomnya dikirimkan), baris
ketiga, dan seterusnya sampai baris ke_8. Setelah merryalakan baris ke-8'
mikrokontroler kembali mengulang dari baris pertama secara terus-menerus
agar data tetap tertampilkan dengan benar'
toooocoaaoocaaaooooa
.CC)C)ooo
-d(i+sEts@?==33=ts=F.J66.JOogdECCETEE
rforafl-
ouuouo
EEEHEHEE
0E v EasE d dii
Bads(Da (D6) (D5)
C1
(D4)
O,(D3)
C3
(D2)
c4(D1)
C5
(D0)
Data
(H)
1 0 0 0 I 0 0 0 11
2 0 0 0 0 I 1 I 0 OE
J 0 0 0 0 1 I 0 OE
4 0 0 0 0 I I 0 OE
5 0 0 0 0 0 0 0 0 00
6 0 0 0 0 1 I 0 OE
0 0 0 0 I I 0 OE
8 X X X x x x X x X
Gombor 6.8 Anlormuko Disploy Dol Molriks
t89r88 Ieknik Antarmulta dan Pemrograman Mikrokontroler AT89S52
Data yang dibutuhkan untuk menampilkan hur-uf A (dan juga huruf yang
lain)adalahTbyte.Bitke-5,ke-6danke-7(D5'D6danD7)tidakdiper-gunakan sehingga bit-bit ini tidak perlu dikirimkan' Dengan memperhatikan
f,rbrrngrn antara bit data der.rgan kolom yang dikendalikannya serta
,u.rgkuirn antarmuka yang ditunjukkan oleh Gambar 6'8' bit data yang
pertama kali dikirimkan adalah bit ke-0 (D0)'
Prograrn di bawalr akan menampilkan huruf ..A,, ke display secara tenrs-
rnenerus. Kendali baris (ROWCTRL) dihubungkan dengan P0' DM-DAT dan
DM-CLK masing-masing dihubungkan dengan P2'6 danP2'7 '
;Program Title : "Dot Matrix Display 1"
;Fi1e name : DotMatrixl-'asm;Version : 1.0;Created date : JanuarY 17, 2001
;Programmer i Usman. * * * ** * * * * ** ** ** * * ** ** * ** ** ** * * * * * * ** ** * * * * * * * ** ** ** * * **
; Microcontroler Pin,/ Port AssignmenL- ** * ** ** * * ** ** ** * * *** ** ** ** ** * * * * ****** * * * * * * * **** *** * **
;Dot Matrix Control PinROWCTRL equ P0
DM-DAT equ P2.6DM-CLK equ P2.1
- * ** * * ** ** * * * * * * ** * * * ** ** * * * * ** ** * * * * * * * **** ** ** ** ** * * **
;Main Progiram. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * *
Org 0000HMain-Prog:
mov R0, #OFEH
mov DPTR, #Char-Datamov t1 , l+t
Main-Prog-LooP:mov ROWCTRL, #0FFHclr Amovc A, @A+DPTR
ca1.1. Send,DM-Data ColomTn()\/ Iio\^Jtl'l'iil ,, 110
Antarmuka dengan Display
mov A, R0r1 Amov R0, Ainc DPTRcafl Delayd)nz B, Main*Prog*Loopsjmp Main_Prog
Send_DM_mov
Send*DM_rrcmovc1rnopnopsetbnopdjnzret
Delay:movcallret
Data*Co1om:R1, #5
Data_Co1om_Loop:ADM-DAT, C
DM-CLK
DM-CLK
R0, Send_DM_Data_Co1om_Loop
R3, #01Delay_1
Delay_1:mov R4, #2FH
Delay_2:mov R5, #0AIJdjnz R5, $
djnz R4, Delay_2djnz R3, Delay_1ret
Char Data:db OEH, 1EH, 1EH, 1EH, OOH, 1EH, 1EH
end
Pengiriman 7 byte data program dilakukan dengan cara membaca tabeiclengan tabcl data disimpan di alamat Char_Data. Register R0 menyimpanclata baris, rriliri rwllnya aclalah FEH (baris pertama yang aktif). Register B
I
Antarmuka dengan Display
MyNumber akan diperbarui kalau bir updateFlag di-set dengan memanggii
subrutin Ch eck-Del a y-Cou n ter.
Untuk menampilkan data ke display, diperlukan algoritma yang sedikit unik.
Oleh karena display akan difungsikan untuk menampilkan karakter, akan
menjadi lebih mudah jika data dalam formar ASCII. MyNumber (dalam
bilangan desimal akan memerlukan 5 digit atau 5 byte) akan diubah ke data
ASCII melalui subrutin HexToASCII, sebuah subrutin yang sangat sederhana
untuk mengubah bilangan 0 sampai 9 dalam heksa menjadi "0" sampai "9"
dalam ASCIL Tentu saja setelah MyNumber dipecah menjadi bilangan puluh
ribuan, ribuan, ratusan, puluhan dan satuan melalui subrutin Decimal
Adjusr.
Data-data ASCII tersebur akan diubah menjadi format data 7 byte. Data 7
byte diperoleh dengan cara yang sama seperti untuk mendapatkan data huruf,,A". Dalam program, data-data tersebut dideklarasikan dalam tabel data di
alamat Char*Data. Oleh karena program hanya akan menampilkan.CoUNTER" dan 5 digit angka, tidak semua karakter ASCII dideklarasikan
menjadi data 7 byte, hanya huruf kapital (A-Z) dan angka (0-9) yang diubah.
Tujuannya untuk menghemat memori program. Namun karena di dalam kata
yang akan ditampilkan ada spasi, maka tabel data dimulai dari karakter spasi.
Menur-ut tabel karakter ASCII, bilangan heksadesimal untuk karakter spasi
adalah 20H, untuk angka "0" adalah 30H, sedangkan untuk huruf "A" data
heksanya adalah 4lH. Kode-kode ASCII di antara spasi dan angka "0" serta
kode ASCII anrara angka "9" dan huruf "A" yang ridak digunakan, ditetapkan
sebagai spasi (dengan data 7 byte-nya 1FH, 1FH, 1FH, 1FH, 1FH, lFH, IFH)'
t9r
r90 Ieknik Antarmuka dan Pemrograman I'likrokontroler AT89552
berfungsi sebagai pencacah 7 (banyaknya byte)' Sebelum mengirimkan bit-bit
data, program akan mematikan display dengan mengirim FFH ke port
ROWCTRL. Dengan instruksi movc byte pertama data dibaca dan dikirimkan
melalui subrutin Send-DM*Data-Colom' Setelah data kolom dikirimkan'
data baris y"r,g t".ri-p1" ai nO akan dikirimkan melalui port ROWCTRL'
Data baris kemudian akan di'e'uaikan sehingga baris seianjutnya diaktifkan
dengan instruksi rl melalui akumulator' Sebelum mengaktifkan baris
selanjutnya, subrutin Delay dipanegil agar display tidak terlihat menyala
semua. Waktu t\nda (delai)hu*, Ji."ruaikan, jika terlalu lama, display akan
terlihat berkedip dan jika terlalu cepat' display akan terlihat redup atau
menyala semua. Hal ini akan diulang sampai ketuiuh byte data terkirimkan'
Dan program akan mengulang dari awal lagi agar display bisa menampilkan
data dengan benar.
Subrutin send_DM_Data_colom pada dasarnya sama dengan sub.rurin yang
dipakai untuk mengirimkan data ke register Eeser yang dipakai pada display 7
segmen. Register Rl digunakan sebagai pencacah bit' Karena hanya 5 bit
yalng dikirim, R1 akan dii,i dt''gu' 5' Bit ke-O (D0) adalah bit yang pertama
kali dikirimkan sehingga digutta-kan instruksi rrc untuk menggeser D0 l<e C'
Bit C kemudian aku,i*dikirimkan ke register geser melalui pin DM-DAT'
Sinyal clock dikirimkan melalui pin DM-CLK'
6.2.1 DISPtAY DOT MATRIKS MENAMPITKAN
KARAKTER
Contoh program di bawah akan menampilkan' seperti biasa' bilangan 16 bit
(MyNumber) ke 16 buah display dot matriks' Dengan konfigurasi fisiknya'
display hanya akan bisa menampilkan sampai 13 karakter (di mana
p"n".rrpurur,.dalamPCBtidakadajarakantaradisplaydotmatriksyangsatudengan yang lain dan juga harus ada jarak 1 kolom antarkarakter)'
Rangkaiannya ditunjukka" ol"h Gambar 6'10' karena ukurannya tidak semua
komponen ditamPilkan'
Seperti telah diterangkan, program akan menampilkan bilangan 16 bit (0
sampai 65365) a"ng"u.' tt'i" ICOtn'ruER" di depannya' Submtin untuk
mengolah bilangan ieLsa tO bit (2 byte) sama dengan yang telah dipakai oleh
program sebelumnya (Subbab 6'1'3' Display 7 Segmen deng'an Mtrltipl''ks)'
Progratrrnrcrrglralliskatrwaklulryarttltttkrrret-rgirinl(lilli|kr..lir1,liry.
DISPLAY 2
=aEirs
ii;irllE
f'ISFLAY 1
a5 i =3
r93t92 Ieknik Antarmuka dan Pemrograman l'likrokontroler AI89S52 Antarmuka dengan Display
FlagRegzovUpdateFlag
My_NurnberHMy_NumberL
XHXLYHYLZH
ZL
ZO
z1-
Z2Z3
Counter
Char_Buff
2AHFlagReg. 0
FlagReg. 1
30H31H
32H33H34H35H36H37H
3BH39H3AH3BH
3CH
50H
equbirbir
FnililalFl I --- ,'
Roil/rTEa? T-:r- " 'RoillrFL llEErtur-TRL-4[--+ 'Eo!iltTFL rL-:- ' 'ROXt'TFL 6IRnil,cTPt-7 f---e,.RnricrF+Es,
equegu
equequ
9s,equequegu
equequequegu
oil,oAIEU_CLr
Gombor 6.10 Disploy Dot Motriks l3 Digil
;Program Title : "Dot Matrix Display 2"; File name : DoLMat.rix2 . asm
,'Version : 1 .0;Created date : January 21, 2001
;Programmer i Usman. * * * ** * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;Microcontroler Pin/Port Assignment*******************************************************
;Dot Matrix Control Pj-nROWCTRL equ P0
DM-DAT equ P2.6DM-CLK equ P2.7
*******************************************************fnternal RAM Mapping***************************************** I A l A l A l
^ I ^
r ^ ^ ^
,rrtn Program- * ** * * ** ** * * ** * * ** ** * ** ** * * ** *** * ** * * ** ** * * * * * ** ** *** * * *
Org 0000HMain_Prog:
mov My NumberH, #0mov My-Numberl, #0mov Counter, #50call rnitial Data
Main_Prog_Loop:call Display-My-Nurnbercall Check-DelaY-Counterjnb UpdateFlag, Main-Prog-Loopclr UpdateFlagMOV ROWCTRL, #OFtrHcall Update-My*Numberczrl I nsi(llI To-DM-Data-Conwerterr;jtrr1 r M,rirt l'tor; LooJl
DISPLAY 16
Teknik Antarmuka dan Pemrograman l'likrokontroler AT89552
. * *** * * * ** ** * * ** ** * * *** ** ** ** * * * * ** * *** * * * ** ** ** ** ** ** **
Initial_Data:mov DPTR, #Initial-lisPlaY-Datacall Save-ASCII-Data-To-RAMcall ASCII-To-DM-Data-Converterret
rni t ia l--Dl splay-Data :
db 'couNTER 00000' ,0,.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
Save-ASC I 1-DATA-TO-RAM :
mov R1, #Char-BuffSave-ASC I I-Data-To-RAM-Lo oP :
clr Amovc A, GA+DPTRjz Save-ASCII-Data-To-RAM-Exitmov @R1, Ainc DPTR
i-nc R1
sjmp Save-ASCIl-Dat.a-To-RAM-LoopSave-ASC f I-Da t a-To-RAM-Exi- t :
ret,.
* * * * * *** * ** * ** * ** * * * * * ** ** ** ** ** ** **** ** * ** **** ** ** ****ASC f I-To*DM-Da La-Conver t er :
call Blank DisPlaY
Antarmuka dengan Display
calI DM_Data_Adjustmov B, #07h
Get_DM_Data_Loop :
clr Amovc A, GA+DPTRmov @R0, Ai-nc DPTR1nC RU
djnz B, GeL_DM_Data_Loopret
DM_Data_AdjusL:Mov YL, DPLmov YH, DPH
mov A, XLadd A, YLmov ZL, Amov A, XHaddc A, YHmov ZH, Amov DPL, ZLmov DPH, ZHret
. * ** ** ** * ** * **** ** * * * ** * *** ** ** ** ** ** * * ** * ******** ** * * **Display_My_Number:
mov R5, #07Hmov R6, #oFEHmov R7, #B0Hmov R0, #80H
Di sp 1 ay_My_Number_Loop :
mov ROWCTRL, #OFFHcall Send-DM-Data-To-Displ-aymov ROWCTRL, R6movr1movcall
A, R6AR6, ADelay
inc R7
mov A, R7rnov ll0, n<ljtr;t li',, l)r:;lrl,ry My
t95t94
mov R2, #13mov R0, #95H
;13 Drgrt;Alamat byLe terakhir
mov R1, #Char-Buff+12ASCI I To-DM-Data-Converter-Loop :
mov A, @Rl
subb A, +20Hmov XL, Amov YL, #07call MUL-Bmov XL. Z0mov XH, ZLdec R1
call Get-DM-Datadjnz R2, ASCII-To-DM-Data-Converter-Loopret
,. *********************************************i
I I ^
I A l I l A
Cet-DM I).tta;rr)()v l)l"l'll, llr'lr.r t I),lt ,r
in
Antarmuka dengan Display
mov @R0, Ainc R0
dlnz R1, Blank_Drsplay_Loop1mov B, #80setb DM_DAT
Blank_Display_Loop2 :
call DM_C1ockdjnz B, Blank_Display_Loop2reL
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
ue-Ld.y:mov R1, #01call Delay_1ret
Delay_l-:mov R3, #2FH
nol rrr ?.urLqt _a .
mov R2. #0AHdjnz R2, $
djnz R3, Delay_2djnz R1, Delay_1ret
,. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Check_Defay_Counter:djnz Counter, Check-De1ay-Counter-Exltsetb UpdaLeFlagrmov Counter, #50
Check*De 1ay_Counter_Exi t :
ret
/. * ** ** * *** ** * * ** *** * * ** * * **** ** * *** * * * *** ***** ** * *** ****Updal-e_My_Number:
mov DPH, My_NumberHmov DPL, My_Numberlinc DPTRmov My*Nr.LmberH, DPHmov My_Numberl, DPLmov XH, My_NumberHmov XL, My_Numberlcal I l),'r'irurl AdiustI ('t
r97t96 Teknik Antarmuka dan Pemrograman l,likrokontroler AI89S52
ret
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Send-DM-Da ta-To-Di sP 1 aY :
mov R4, #16Send*DM-Da ta-To-Da sP 1 aY-LooP :
mov A, @R0
calf Send-DM-Data-Co1omRO
RO
RO
RO
RO
RO
RO
R4, Send-DM-Data-To-Display-LoopreL
Send-DM-Data-Colom:mov B, #5
Send-DM-Da ta-C o 1 om-LooP :
rrc Amov DM-DAT, C
call DM-Clockdjnz B, Send-DM-Data-Co1om-LooPSETb DM-DATcall DM-Clockret
DM-C1ock:clr DM-CLKnopnopsetb DM-CLKnopret
- * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Biank-DisPlaY:mov A, #OFFH
mov R0, #B0Hmov R1, #LL2
Il I ;rnk I) i :;J;1 aY Locrp.I :
1ncinc.incincincincincdjnz
Ieknik Antarmuka dan Pemrograman Mikrokontroler AT89S5I
- * * * ** ** ** * * * * ** * * ** * ** * * * * * * ** ** ** ** * * ** * ** * * *** * *** ** *
Decimal-Adjust:movmovcall DIV16movcal-1mov
movmovmovcallmovcallmov
movmovmovmovcalImovcalImov
movmovmovmovcallmovcallmov
movcallmovret
Antarmuka dengan Oisplay
HexToASCII:inc amovc a, @a+pcret
db '0'db '1'^1-
t.') |
db '3'db ,4'db 's'db '6'db "1'db '8'db '9'
,. * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * x * * * * * * * * * * * * ** * *
; Aritmethic sub-routine,.
* * * * * ** * ** * * * * * * * ** * ** ** * * ** ** ** ** *** * * * * * ** * ** **** ** **DTV16:
mov A, YHorl A. YLJnz div_OKsetb ZOVret
t99t98
YH, +2'}HYL, #1OH
HexToASCIIChar-Buff+8, e
XH, Z1-
XL, ZO
YH, #O3HYL, #OEBHDIV16A, Z2HEXTOASCIIChar-Buff+9, a
XH, ZLXL, ZO
YH, #OH
YL, #64HDIV16
HexToASCIIChar-Buff+10, A
XH, Z\XL, ZO
YH, #OH
YL, #OAH
DIV16
HeXTOASCIIChar-Buff+11,
A, ZO
HexToASCIIChar-Buff+12.
div_OK:movmovmovmovmovmovmov
div_loop:c1rmovr1cmovmovr:1cfil()vITI( )\,1
R1, XHRO, XLxH, #0xL, #0R3, #0R2, #0R7, #L6
C
A, RO
ARO, AA, R1A
l{1, A. *********************************
':t
t
Teknik Antarmuka dan Pemrograman Mikrokontroler ATB9S52 Antarmuka dengan Display
mov ZO, Aret
,. * * * * * * * * * * * * * x * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *Char_Data: (lihat di CD pendukunq)
end
Program diawali dengan memberikan nilai awal kepada MyNumber(My_NumberH dan My_Numberl) dan kepada Counter. Counter adalahalamat RAM internal 3CH yang digunakan sebagai pencacah wakru tunda.Selanjutnya program akan memanggil subrutin Initial_Data untuk meng,inisialisasi RAM internal yang digunakan sebagai penyimpan data display.
Seperti telah dijelaskan, program ini akan menampilkan l3 karakter ASCII.Karakter-karakter yang akan ditampilkan disimpan di RAM inrernal, untukitu diperlukan 13 byte memori yang di dalam program ini berada di alamatawal Char_Buff (50H). Subrutin yang akan menyimpan karakter ke RAMadalah subrutin Save_To_RAM dengan menggunakan metode pembacaantabel data. Karakter yang akan disimpan adalah "COLINTER 00000". Subrutinini akan membaca data yang tersimpan di memori program dengan instruksimovc. DPTR akan menyimpan alamat di mana data berada. Data akandipindahkan ke RAM internal melalui mode pengalamaran tak langsungdengan register Rl sebagai penunjuk alamat (Char_Bufl). Data diakhiridengan 0, sehingga ketika program membaca data 0 artinya semua karaktertelah terbaca dan tersimpan di RAM.
Setelah semua karakter tersimpan di RAM, subrutin Initial*Data akanmemanggil subrutin ASCII_To_DM_Data_Convet'rer unruk mengubah dataASCII menjadi format data 7 byte dan menyimpannya di RAM. Seperti telahdijelaskan bahwa setiap display memerlukan data sebesar 7 byte maka untukmengendalikan ke-16 display diperlukan memori sebesar 7x76 byte (ll2byte), namun dengan konfigurasi display dot matriks hanya bisa dipakaiuntuk menampilkan l3 karakter (ada satu kolom jarak antar karakter, olehkarena itu 3x7 byte memori digunakan untuk menyimpan data spasi). Alamatawal untuk menyimpan dataT byte adalah 80H (berada di alamat RAM 128l)yte atas), narnlln karena ada data spasi yang harus disimpan, alamat awalst'srurlllirrlrrryir rrrrlrrk rnt'rryimpan karakter format 7 byte adalah 80H+21byte
()5I l
20t
rlcmovmovr1cmov1cal1movcp1jncmovmov
div_1:movr1cmovmovr1cmovdjnzmovmovmovmovclrteL
SUB16:movclrsubbmovmovsubbmovmovret
MUL-B:movmovmu1lnov
Ax1, AA, XHAXH, ASUB].6C, ZOV
L
div-1XH, ZHXl, ZL
A, R2l
R2, AA, R3
AR3, AR7, div*looPq) D1
1'Z , KZ
ZL, XHZO, XLzov
A, XLL
A, YLZL, AA. XHA, YH
ZH, AZOV, C
A" XLB, YLAB7,1 , rl
Ieknik Antarmuka dan Pemrograman l'likrokontroler AI89552
Sebelum dilakukan konversi ASCII ke 7 byte, seluruh alamat RAM yang
dipakai harus diinisialisasi dengan data FFH. Selain itu display juga harus
dipadamkan (semua keluaran register geser berlogika tinggi) pada saat
pertama kali catu daya dinyalakan, karena register geser akan berada di
kondisi acak. Ini dilakukan dengan memanggil subrutin Blank-Display. Pada
subrutin Blank-Display, semua memori yang beralamat awal 80H sampai 112
byte berikutnya akan diisi FFH (R0 akan menjadi penunjuk alamat memori
dan R1 sebagai pencacah 112). Untuk memadamkan display, pin DM-DATdi-set di iogika tinggi kemudian sinyal clock dikirimkan sebanyak 80 kali(5x16).
Proses pengubahan data ASCII menjadi format data 7 byte dilakukan dengan
algoritma sebagai berikut. Register R2 berfungsi sebagai pencacah 13
(banyaknya karakter yang akan ditampilkan), R0 menyimpan alamat awal
penyimpanan data 7 byte (95H) dan Rl menyimpan alamat karakter yang
akan diubah. Pengubahan dilakukan untuk karakter terakhir terlebih dahulu(beralamat Char-Buff + 12) karena rancangan skematik mengharuskan data
karakter yang dikirim harus karakter terakhir.
Karakter yang akan diubah pertama dikurangi dengan 20H (tabel data diawalidengan karakter spasi yang dalam bilangan heksadesimal adalah 20H). Hasilpengurangan tersebut kemudian dikalikan dengan 7 (melalui perkalian
bilangan 8 bit di subrutin MUL-&). Lalu hasil perkalian (bilangan 16 bit) akan
ditambahkan dengan DPTR yang menyimpan alamat awal Char-Data(subrutin DM-Data-Adjust). Dengan demikian akan didapat alamat awal
untuk data 7 byte dari karakter yang bersangkutan. Data 7 byte dibaca
dengan instruksi movc dengan DPTR menyimpan alamat awal data. Register
B digunakan sebagai pencacah 7 (7 byte) dan register R0 menyimpan alamat
RAM tempat penyimpanan data. Hal ini dilakukan di subrutin Get-DM-Datasampai semua karakter diubah dan disimpan di memori.
Proses pengiriman data 7 byte ke register geser dilakukan di subrutin
Display-My-Number. Register R5 dipakai sebagai pencacah baris (7 baris),
R6 menyimpan data baris dengan nilai awal baris 1 yang aktif GEH),sedangkan R7 dan R0 digunakan sebagai penunjuk alamat RAM tempat
penyimpanan data 7 byte (80H). Sebelum mengirim data serial, display
dimatikan terlebih dahulu dengan mengirim data FFH ke port R()WC'fRl'.Data baris kemudian dikirimkan ke ROWCTRI setelah clata 7 bylt'ttrrtukbaris I dikirirnkan. Sitrna lralnya rlcngarr prognun l\tt fi'littt il.* l .lrrtt. rl,rtrt lr;tt is
akan digeser ke kiri untuk mengaktifkan baris selanjurnya. R7 akandinaikkan unruk menunjuk ke alamat data 7 byte dari baris yang aktif. R7 inihanya menunjuk ke aramat baris untuk karakter u*rl i"rg' dikirimkan,sedangkan alamar dara sesungguhnya ditunjukkan oleh R0.
Pengaturan R0 dilakukan di subrutin send-DM-Data*To_Dispray. R4 di-gunakan sebagai pencacah r6 (banyaknya dispray). Setelah data dibaca dandisimpan di A melalui insrruksi pengaramatan tak rangsung, data dikirimkanmelalui subrutin send-DM*Data-Corom. R0 akan dinaikkan 7 kari untukmenunjukkan alamar baris dari karakter selanjutnya yang akan ditampirkansampai seluruh data untuk ke-r6 display terkirimka, ia.ir.n kenyataanya 21byte pertama adalah dara spasi). Adu- ,",, hal yang -embedaka, anrarasubrutin pengiriman_data kolom anrara program DotMatriksr.asra denganprogram DotMatriks2.asm. pada program DotMatriks2.asm, seterah 5 bit datadikirim, program akan memarikan l kolom sebagai jarak antar karakter,dengan membuat DM-DAT berrogika tinggi dan mengirim sekari sinyarclock.
Nilai My-Numberakan diperbarui dengan mengecek bit tlpdateFtag,jika di-set berarti MyNumber akan diperbarui dan jika tidak, prog.r- kembalimelompat ke Main_prog_Loop. pengecekan bit Uparrcnr/dilakukan disubrutin check-Detay-counter yang merupakan subrutin waktu tunda.subrutin ini akan mengurangi memori counter (yang diberi n,ai awar 50).lika counter bern,ai o, bit LrpdateFhg akan di-set d,an counterdiisi lagidengan 50. Metode waktu t,r.,du ,"p"rti ini dilakukan karena untuk me-ngendalikan dot matriks, program akan selaru melakukan scanning terhadapdisplay (program terus-menerus mengirim data ke register geser). Samadengan cara waktu tunda untuk display 7 segmen dengan metode multipreks.Subrutin tlpdate-My-Number akan memperbarui nirai MyNumDer (samadengan subrutin yang dipakai untuk dispray 7 segmen). Seteiah didapat nilaipuluh ribuan, ribuan, ratusan, puluhan dan satuan akan diubah ke data ASCII(subrutin HexToASCIT). Data ASCII-nya akan disimpan di RAM untukrnenyimpan karakter, puruh ribuan disimpan dj alamat char_Buff+g, ribuanrli alamat char Buff+9 dan sererusnya. Untuk memperbarui data display,srrlrrurin ASCI. To DM-Data-converter dipanggir lagi. progam kemudian;rkirn melornptt kc Mtin prog*Loop. pada saat uka, m"mperb-arui data yangirkrrr tlirarrrlrilkirrr (tl.rrir* rrar i,i My Number), dispray harus dimatikantlcrrl.irrrr nr('non ,rJ'rrlL,rrr l,r,rr;ir,rrrlirli hilris (port RowcTRt, clikirimi dara
Antarmuka dengan Display
Ieknik Antarmulo dan Pemrograman l'likrokontroler AT89552Antarmuka dengan Display
akan diambil data,ya dengan tombol open pada dialog untuk membuka filepilih file bitmap yang akan di-ekstrak. File bitmap yang akan di-ekstrak ha,.smemiliki formar B0x8 dengan warna monokrom. ]ika file yang dibuka selainformat ini, aplikasi akan membangkitkan error. Setelah file dipilih, denganmengklik tombol open pada dialog pembuka file, Bitmap Extractor akanmengekstrak data-data file bitmap dan mengkonversinya menjadi formarbahasa assembler 8051 (tabel data). untuk menggunakan data, cukup kliktombol copy dan paste di file assembler. Pastikan bahwa ukuran bitmap yangdipilih (Bitmap.9zze) adalah 80x8.
Gombor 6.12 Iompilon Bilmop [xtroctor
File bitmap merupakan file standar kompurer unruk menampilkan grafik.Ukurannya dinyatakan dengan piksel (analogi dengan display dot matriks Ipiksel berarti I dot). File ini memiliki Header file yang berisi informasitentang file tersebut (ukuran dan warna). Dalam format bitmap monokrom, Ipiksel dinyatakan dengan 1 bit. Untuk piksel yang berwarna hitam, bit yangbersangkutan akan bernilai 0 sedangkan piksel yang berwarna putih bit yangmewakilinya akan bernilai 1. Ini sangar sesuai dengan format data untukdisplay dot matriks, sehingga program tidak perlu melakukan konversi lagi.Posisi grafik di dalam file adalah terbalik dengan posisi grafik yang terlihat diIayar monitor, baris pertama di layar moniror akan berada di baris terakhir ditlalam file birmap.
Kcmbali ke program DotMatrix?.asm. Data grafik, dari file bitmap yang telahtlickstrak, didefinisikan dalam tabel data dengan alamat Graphic_Data. Darairri terdiri aras B0 byre (8ox8 bit). program akan membaca data ini danrrrt'rranrlrilkurrrryir Pt,r'buris. Ini clilakukan di subrutin Disptay_Graphic.lir'liisrcr ll-r rlrlirrrr,rk,rrr ,;,,l,rrllrri pr.rrt lrt,lrlr baris (li baris), R6 cligunakan sebagai
205
FFH). Kalau tidak, display akan terlihat berkedip' Sebenarnya dengan
dimatikannyadisplay,.f"tt"aiptetapterlihat(seluruhdisplay)'tetapidalambeberapa pemakaian mungkin masih bisa diterima'
6.2.2DISPLAYDoTMATRIKSSEBAGAIPENAMPILGRAFIK
Seperti telah dijelaskan, display dot matriks dapat menampilkan grafik'
Resolusi grafik yang dapat diperoleh bergantung pada berapa banyak dot
matriks yang digunaku, du,-, bagaimana dot matriks tersebut disusun dan
tentu saja hanya bisa menampilkan grafik monokrom (hitam putih)' Sebagai
contoh display yang dipakai ol"h p'ogu- DotMatriks2'asrn bisa menampilkan
grafik dengan resolusi 80xB piksel (lebar 80 dan tinggi 8)'
Untuk menampilkan grafik, tentukan lebih dahulu grafik apa yang akan
ditampilkan untuk display. Kemudian dari gambar tersebut dikonversi ke
bentuk data dot -utrik, (data per baris)' Metode yang paling mudah adalah
menggunakan aplikasi komputer untuk membuat gambar (Microsoft Paint
misalnya). Sebagai contoh, rangkaian 16 buah display dot matriks digunakan
untuk menampilkan gambar beresolusi 80x8 seperti yang ditunjukkan oleh
Gambar6.ll.Pertamabuutluhgambarbarudenganformat80xS(Width=80danHeight:8)denganwarnamonokrom'setelahitugambarlahsesuaidengan yang diinginkan, lalu simpan ke file dengan format file bmp
monokrom.
Gombor 6.1I Iompilon Progom DotMotriks3'osm
Isifilebmp(bitmap)yangtelahtersimpanbisadilihatdengansebuahsoftware unruk mena-piff.u" isi sebuah file dalam format data heksadesimal
(misalnyaHEdit3)ataudengansebuahaplikasisederhanasepertiBitmapExtractor, yang dibuat dengan bahasa pemrograman Borland Delphi' 6' File
exe dan source code dari Bitmap Extractor berada di CD pendukungl
|softwarePendukung|BitmapExtractor.Perludiperhatikansoftwareinimasih sangat sederhana, dengan penangan error (error hantll<) yang
sederhana pula. cambar 6.12 memperlihatkan tampilan l)r()llrirllr llitrttitlt
lt'.rtt.itt.lrtr. Irt'rrggrrrraurrnya ctrkrrP tntttllllt. l)('rlillllil hrrkir lilc l)lllll'rlr yilllll
0F0H,03FH, orrn, ouei, orFi,-orrn, iltion, orrroEFH, 09FH, oFFH, 079H, oFFH, oFFH, 03FH, 03Fl08FH, oCFH, oFEH, 07EH, 0FFH, 0FEH, 0FFH, 6CFtO3FH, OE7H, OFCH, OFEH, O7FH, OFCH, OFFH, OCFIO7FH, OF7H, OF9H, OFFH, O3FH, OFgH, OFFH, OETI0FFH, 0F3H, 0F3H, oFFH, 09FH, 0F3H, SFFH, gFTtOFFH, OF9H, OC7H, OFFH, OC7H, OC7H, OFFH, OFBIOFFH, OFCH, O1FH, OFFH, OFOH, 01FH, OFFH, OF9I
by [ang Usman (u 2manroyEhoo,co
ioolrl h
idbrdb
louiooidb'io,III
i,
i
t 207
206 Teknik Antarmuka dan Pemrograman I'likrokontroler AT89552
penyimpan data pengendali baris dan DPTR menyimpan alamat
GraPhic-Data.
Pertama display akan dimatikan dengan mengirim FFH ke port ROWCTRL'
Data display per baris yang akarr ditampilkan dibaca dengan memanggil
subrutin Read-Row-Dira dan menyimpannya di RAM' Subrutin ini
menggunakan R7 sebagai pencacah 10 (tiap baris terdiri atas 10 byte' 80
kolom atau 8x10 Ult=rO Uyiel dan R0 akan menyimpan alamat RAM tempat
penyimpanan data' Setelah data terbaca dari memori progam dan disimpan di
memori data (RAM), program akan mengirimkannya ke display (subrutin
S en d- D M- Da ra-To- D i sP I a Y)'
Subrutin Send-DM-Dhta*To-Dkplay akan mengirim data display yang
tersimpan di RAM ke register geser' R0 menyimpan alamat RAM di mana
data display tersimpan, "'udu"!ku" R4 digunakan sebagai pencacah 10
(banyaknya data Per baris dispiay adalah 10 byte (8x10 bit)" Bit-bit data
dikirimkan melalui subrutin Send-DM-Data-Colom' Cara pengiriman data
melalui subrutin ini pada dasarnya sama dengan cara pengiriman data pada
program DotMatrix2.asm' Bedanya dalam program DotMatrix3'asm' seluruh
fi, (S Uir) dikirimkan' Register B menjadi pencacah 8 bit' Data harus terus-
menerus dikirimkan ke diJplay agar display tetap menampilkan grafik dengan
benar. Oleh karena itu, sei"l't'' '"-"u data baris dikirimkan' program akan
kembali untuk mengirim data baris pertama (kembali dari awal)'
. ========= ====-'=========================;Program TiLle : "Dot Matrix Display 3: Graphic"
;File name : DotMatrix3'asm;Version : 1'0;Creat.ed 'date : JanuarY 21' 2007
;Programmer " Usman. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * *
- * ** ** ** ** * *** * * ** * * * *** * * * ** * * ** ** ** * * * * * * *** ** **** * * **
;Microcontroler Pin/PorL AssignmenL, * ** * * * ** * * * ** ** ** * * * ** * * * * * * * * * * * * * * * * * * * **** * * * * ** ** **
;Dot Matrix Control PinROWCTRL egu P0
DM-DAT egu P2 '6DM-CLK equ P2 '1
. **************************************; Ir)l,'l t),i I l(nM M,tl)l)i1)(l
Antarmuka dengan Display
. * * * ** * * ** ** * * ** * * * * * * * ** ** **** ** ** * * ** ** *** * * **** * * * * * *
Char_Buff equ 50H
- * * * *** * ** * * * * ** * * ** * * * ** ** * * * * ** * * ** ** * * * ** ** **** ** ** * *;Main Prog'ram. * ** * * * * *** * ** ** * * * * * ** * * ** * * * * * * * * ** ** ** * ** * * * * * * * * * * **
Org 0000HMain_Prog:
call Dl-sp1ay_Graphicsjmp Main_Prog
,. * ** * * ** ** ** *** * ** ** * ** ** ** ** * * ** ** * * * * ** *** * * ** ** ** ** **
Di. splay_Graphic :
mov R5, #OBHmov R6, #0FEHmov DPTR, #Graphic*nata
Di splay_Graphic_Loop :
mov ROWCTRL, #OFFHcall Read_Row_DatacaIl Send_DM_Data_To_Displaymov ROWCTRL, R6mov A, R6r1 Amov R6,Acall Delaydjnz R5, Display_Graphic_Looprel-
/. * ** * *** * * * ** * **** ** ** * * * * * ** ** * * ** * * * * ** ** * ** * *** * * * ** *
Read Row Data:mov R7, #10mov R0, #Char_Buff
Read_Row_DaLa_Loop :
C]T Amovc A, @A+DPTR
mov @R0, Ainc DPTRinc R0djnz R7, Read_Row_Data*Loopret
,. r l r * * r l l A tr A r r ***-***************************************
llr,rrrl l)M l).rt,r'l'r, I)i ri[)l;ty:lit'lr,rr llrl I r(.)
Ieknik Antarmul<a dan Pemrograman Mikrokontroler AT89552
mov R4, #10Send-DM- Da t a-To-D i sP 1 aY-LooP :
mov A. GRO
call Send-DM-Data-Co1omdec R0
djnz R4, Send-DM-Data-To-Display-LoopreL
Send-DM-Data-Co1om:mov B, #8
Send-DM-Data-Co I om-LooP :
rTC AMOV DM-DAT, C
call DM-C1ockdjnz B, Send-DM-Data-CoIom-LooP
DM-Clock:c1r DM-CLKnopnopsetb DM-CLKnopret
,. ** ** * * *** * * ** ** ** ** * ** ** ** * * ** ** ** * * * * ** * *** * **** **** **
Antarmuka dengan Display
db000H, 02EH, 074H, 000H, 089H. 0D0H, 002H, 0E7H. 040H, 0OBH
dbOOOH, O2FH, OF4H, OOOH, OBFH, ODOH, OO2H, OtrFH, O4OH, OOBH
dbOOOH, O2FH, OF4H. OOOH, OBFH, ODOH. OO2H, OFFH, 04OH, OOBH
dbOBOH.077H. OEEH, OO1H. ODFH, OBBH, OO7H, O7EH, OEOH, O1DH
dbOCOH, OFBH, ODFH, OO3H, OEFH, O7CH, OOFH, OBDH, OFOH, O3EH
dbOE1H, OFDH, OBFH, OB7H, OF6H, OtrEH, OlFH, ODBH, OF8H, OTFH
dbOF3H, OFEH, O7FH, OCFH,0tr9H, OFFH, 03FH, OE7H, OFCH, OFFH
end
6.3 tCD KARAKTER 16X2LCD atau Liquid A'ystal Disphy sekarang semakin banyak digunakan, dariyang berukuran kecil, seperti LCD pada sebuah MP3 player, sampai yangbemkuran besar seperti monitor PC atau televisi. Warna yang dapatditampilkan bisa bermacam-macam, dari yang 1 warna (monokrom) sampaiyang 65.000 warna. Pola Qtattern) LCD juga bisa bervariasi, dari pola yangmembentuk display 7 segmen (misalnya LCD yang dipakai untuk jam tangan)sampai LCD yang bisa menampilkan karakter/teks dan LCD yang bisamenampilkan gambar.
LCD sangat berbeda dengan display 7 segmen atau display dor marriks. Untukrnenyalakan LCD diperlukan sinyal khusus (gelombang AC). Oleh karena itu,diperiukan sebuah IC driver yang khusus ;'uga. Pada LCD yang bisamenampilkan karakter (LCD karakter) dan LCD yang bisa menampilkangambar (LCD grafik), diperlukan memori unruk membangkitkan gambar(CGROM atatt Character Generator ROM dan juga RAM untuk menyimpandata (teks atau gambar) yarg sedang dirampilkan (DDRAM atau Display DaraRA M. Diperlukan pula pengen dali (controller) untuk berkomunikasi denganrn i krokontroler.
Subbab irri irl<ln rnembahas bagaimana AT89S52 digunakan untuk me-rrgt'nrlulikrrrr l,t ll ) liirr;rkrcr l6x2 baris. Sementara subbatr berikutnya akanrlrt'rrrlxrlr:rs l.t I I 1ir,rlrl. t.'.1() r {r,l Pikst'l).
209
208
Delay:movcallret
Delay-l:mov
Delay-2:mov
R1, #01Delay-1
R3, #2FH
R2, #0Alidjnz R2, $
djnz R3, DelaY-2dlnz R1. DelaY-lret
. * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Graphic-DaLa:db
OBCTI ,071H, OBEH,031H, OC6H, O3BH, OC7H, OlBH' OE]II' 0I('II
2t0 Ieknik Antarmuka dan Pemrograman I'likrokontroler AI89S52
LCD karakrer adalah LCD yang bisa menampilkan karakter ASCII dengan
format dot matriks. LCD jenis ini bisa dibuat dengan berbagai ukuran, 1
sampai 4 baris, 16 sampai 40 karakter per baris dan dengan ukuran font 5x7
atau 5x10. LCD ini biasanya dirakit dengan sebuah PCB yang berisi
pembangkit karakter dan IC pengendali serta driver-nya. Walaupun ukuran
LCD berbeda-beda, tetapi IC pengendali yang digunakan biasanya sama,
sehingga protokol komunikasi dengan IC juga sama. Antarmuka yang
digunakan sesuai dengan level digital TTL (Transistor-transistor logic)
dengan lebar bus data yang bisa dipilih 4 bit atau 8 bit. Pada bus data 4 bit,
komunikasi akan 2 kali lebih lama karena data atau perintah akan dikirimkan
2 kali, tetapi karena mikrokontroler sangat cepat, hal ini tidak akan menjadi
masalah. Penggunaan bus data 4 bit akan menghemat pemakaian port
mikrokontroler. Subbab ini akan membahas bagaimana mengendalikan LCD
dengan AT89S52. LCD yang digunakan adalah LCD dengan ukuran 16x2 (16
karakter 2 baris) buatan Optrex, Sharp, Densitron atau yang seienis dengan IC
pengendali HD44780U dari Hitachi. Lembaran data LCD dan HD44780U bisa
dilihat di CD penduktng\Da rasheet.
6.3.I RANGKAIAN ANTARMUKA tCD
Umumnya, sebuah LCD karakter akan mempunyai 14 pin untuk
mengendalikannya. Pin-pin terdiri atas 2 pin catu daya (vcc dan vss), 1 pin
untuk mengatur contrast LCD (Vee), 3 pin kendali (RS' R"/W dan E), 8 pin
data (DB0 - DB7). Pada LCD yang memputyai back lighr, disediakan 2 pin
untuk memberikan tegangan ke dioda back light (disimbolkan dengan A dan
K). Tabel 6.4 memperlihatkan pin-pin LCD dan fungsinya'
pin catu daya (vcc dan vss) dihubungkan dengan catu daya TTL, 5 Volt dan
0 Volt (ground) yang akan menyediakan catu daya bagi IC pengendali. Pin
Vee akan menyediakan tegangan untuk LCD untuk mengai)r contrasr LCD'
Dalam aplikasi di mana suhu berubah-ubah, mungkin diperlukan rangkaian
yang khusus untuk mengatur tegangan vee agar menyesuaikan dengan
perubahan suhu, karena LCD sangat rerpengaruh oleh suhu. contrast LCD
akan berubah jika suhu berubah (lembaran data LCD memperlihatkan
bagaimana rangkaian untuk memberikan tegangan ke pin vee). Secara
sederhana tegangan Vee bisa diberikan melalui pin tengah sebuah trimPot
(trimer potentiometer), yang mempunyai nilai l0 KO - 22 KC). (lihat (ianrbar
6. r 3).
Antarmuka dengan Display
Pin-pin pengendali (RS, R/W dan E) dihubungkan dengan port mikro-kontroler" Pin RS (Regkter selecr) digunakan untuk memilih apakah datayang dikirimkan ke LCD itu instruksi arau dara. Jika RS=0, berartimikrokontroler sedang mengirimkan sebuah instruksi; sebaliknya, jika RS=1,berarti mikrokontroler sedang me,girimkan data. Pin Nw (Read,4vrite)digunakan untuk menenrukan apakah operasi baca atau tulis. |ika R/w=0berarti akan menuliskan data atau instruksi ke LCD sedangkan jika R/w=lberarti akan membaca data dari LCD. Kebanyakan aplikasi, tidak ada prosespembacaan data dari LCD, karena itu pin ini bisa langsung dihubungkandengan GND untuk menghemat pemakaian pin mikrokonrroler. pin E(Enable) berfungsi untuk mengeksekusi dara arau instruksi yang dikirimkandari mikrokontroler. Sinyal yang dikirimkan berupa pulsa positif.
LCU_87LD 0_00LC0_O5LCD 04Lco:03LC 0_02LCo 0rLCE:oo
LCO-ELCE-RS
LC tl_Rrtu
(s) LCD dengan Mode I Eit
-&) LCD dengan lvlode 4 Eit
Gombsr 6.13 Antormuko L(D
I']in DBO - DB7 merupakan bus data untuk mengirimkan arau membaca datarlan instruksi ke LCD (dua arah). Dalam mode 4 bit hanya DB4-DB7 yangtlipakai, st'tllngka,-' pin DR0-DB1 dibiarkan terbuka. DB7 juga bisa digunakanst'lrrgai l,il 'ir;rrrri l.('.1) (lrttsv llql RF). Seperti direrangkan c.li clalam
2il
LCII ElcolRs
LCEI RATU
OE?086D85E94D83EIB!ErE loE0
ERSFfrru H
E87EI86ES5tr 84EE3OB?o8t080
EE5RNJU H A
LCO D?LC0_trsLCD-OfLC D-04
2rl
'i
2t2 Ieknik Antarmuka dan Pemrograman Mikrokontroler AI89S52
lembaran data, LCD memerlukan waktu untuk memproses data atau instruksiyang diterimanya. Jauh lebih lambat bila dibandingkan dengan kecepatan
mikrokontroler. Untuk itu perlu dilakukan pengecekan status LCD sebelum
mengirimkan data atau instruksi selanjutnya. Hal ini bisa dilakukan dengan
membaca BF melalui operasi baca (pin R/W=l dengan RS=0). Jika BF atau
DB7 = 1 berarti LCD sedang mengolah data atau mengeksekusi sebuah
instruksi, instruksi atau data selanjutnya harus menunggu sampai BF=0.
Cara lain yang bisa dilakukan, seperti yang akan digunakan dalam buku inijika pin R/W langsung dihubungkan dengan GND, adaiah dengan
memberikan waktu tunda di antara 2 data atau instruksi. Artinyamikrokontroler harus menunggu sebelum rnengirimkan data atau instruksiselanjutnya, setidaknya selama waktu yang diperlukan oleh LCD untukmengeksekusi data atau instruksi yang telah diterimanya (bisa dilihat dilembararr data).
Dua pin terakhir adalah pin untuk memberikan regangan ke LED backtightLCD, pin anoda (A) dan katoda (K). Seperti terlihat pada Gambar 6.13, sebuahresistor digunakan untuk menghubungkan pin A dengan tegangan +5v,sedangkan pi, K langsung dihubungkan dengan GNo. nesiJtor rerseburdigunakan untuk mengarur ams yang menglair ke LED backlightsekaligusmengatur kecerahan backlight. Lembaran data akan menyebutkan berapaams yang diperlukan, sehingga nilai resisror pembaras bisa ditentukan.
6.3.2 PEMROGRAMAN TCD
Pemrograman LCD pada dasarnya adarah pengiriman data atau instruksi keIC pengendali LCD. IC pengendari LCD dilengkapi oleh 2 buah register g bit,register instruksi (rR = instruction regtster) dan register artu 1"rn = dataregister). IR akan menyimpan instrrrksi-instruksi yang dikirimkan olehmikroko*troler, seperri menggeser kursor atau membersihkan layar LCD danjuga menyimpan alamat DDRAM atau RAM pembangkit karakier (.GRAMatau Character Generator RAM. DDRAM terdiri atas g0 byte (alamat)sedangkan .GRAM mempunyai 64 byre (alamat). IR hanya bisa ditulisi. DRakan menyimpan data dari mikrokontroler secara sementara seberumkemudian secara oromatis akan dikirimkan ke DDRAM atau GGRAM. DRjuga akan menyimpan data sementara pada saat pembacaan DDRAM atau.GRAM' Setelah operasi pembacaan selesai, DR akan diisi dengan dataDDRAM atau CGRAM alamar seranjutnya. pemilihan IR (instruksi) atau DR(data) dilakukan melalui pin RS, RS = 0 akan memilih IR dan RS = I akanmemilih DR. Berikut adarah conroh subrutin untuk mengirim data daninstruksi ke LCD. Dara arau instruksi yang akan dikirimkan disimpan diregister A. untuk mengirim data digunakan subrutin write-Data sedangkanuntuk mengirim instruksi digunakan subrutin Write*Command.Wri te-Data:
mov LCD_DA, Ar;et.I> LCI) RSr'l r L('l) IiW
:ir,llrl,('l)l,l
Antarmuka dengan Display
DB7 bisa digunakan sebagai bitstarus sibul< (busy flag)
Tobel 6.4 Fungsi-fungsi Koki l(D
No Nama Funpr Keterangan
Vss Canr daya (0 V atau GND)
) Vcc Catu daya +5 V
J Vee Tegangan LCD
4 RS Register Selecc,unttkmemilih mengirim perir-rrah
atau data (Input)
'0" memilih r-egister perintah
"l" register data
_5 R/W ReadtWite, Pin unrukpengendali baca atau tulis(lnput)
"0" rulis
"1" baca, dalam banyak aplikasi,
tidak ada proses pembacaan data
dari LCD, sehingga R/W bisa
Iangsung dihubungkan ke GND
6 E Ena ble unruk rrengakti{kanLCD unruk memulai operasi
baca atau tulis (Input)
Pulsa:
Rendah-Tinggi-Rendah
a
14
DBO_
D87
Bus data (Inpur/Output) Pada operasi 4 bit hanya I)114
DB7 yang dipakai, ylng lrrirr
st'baiknya tlihrrlrrttrllk,rrr lic t iNI)
2r4 Teknik Antarmuka dan Pemrograman lilikrokontroler AI89552
nopc1r LCD_Ecall Delay_20ret
Write_Command:mov LCD DA, Aclr LCD_RSclr LCD*RWsetb LCD Enopclr LCD_Ecall Delay_20ret
Subrutin Delay_20 dipanggil sebagai waktu tunda, menunggu LCD
menyelesaikan instruksi atau mengolah data yang diterimanya. Subrutin diatas hanya bisa digunakan untuk mode 8 bit. LCD-DA bisa dideklarasikan
sebagai P0, misalnya. LCD*RS, LCD_RW dan LCD*E bisa dideklarasikan
sebagai P1.0, P1.1 dan P1.2.
Untuk mode 4 bit, karena hanya diperlukan 7 pin, 4 untuk data dan 3 untukpengendali, maka sebuah port bisa digunakan untuk data dan pengendali.
Misalnya P1 digunakan untuk mengendalikan LCD dalam mode 4 bit. Pl.4 -P1.7 dihubungkan dengan data LCD (DB4 - DB7), P1.0 dihubungkan dengan
RS, P1.1 dengan pin R/W dan P1.2 dengan pin E. Hal penting yang perludiperhatikan adalah, pada saat menempatkan byte instruksi atau data di bus
data, LCD tidak memengaruhi pin-pin pengendali. Untuk itu perlu dilakukansedikit penyesuaian dari subrutin di atas. Selain itu pengiriman dilakukan 2
kali. Berikut adalah subrutin dalam mode 4 bit.
Write_Dat-a4:push ACC
orl A, #OFHorl LCD_DA, #0F0Han1 LCD_DA, Asetb LCD_RSclr LCD_RWsetb LCD_Enopcl r LCD_Epop ACC
swap A
Antarmuka dengan Display
orl A, #0FHor1 LCD-DA, #OFOHanl LCD_DA, Asetb LCD_Enopc1r LCD_Ecall Delay_20ret
Write_Command4:push ACCor1 A, #0FHor1 LCD-DA, #OFOHanl LCD-DA, Aclr LCD*RSclr LCD_RWsetb LCD_Enopclr LCD_Epop ACCswap Aor1 A, #0FHor1 LCD-DA, #OFOHanl LCD_DA, Asetb LCD_Enopclr LCD_Ecall Delay_20ret
Register A, yang menyimpan byre insrruksi arau data, pertama disimpan dimemori stack untuk pengiriman nibble berikutnya. Kemudian di-oR-kandengan 0FH, nibble aras rerap dan nibble bawah akan menjadi FH. port dataLCD kemudian di-oR-kan dengan FOH, nibbre atas (dara) akan menjadi FHdan nibble bawah (kendali) tidak berubah. port data LCD ini kemudian akandi-AND-kan dengan register A. hasilnya nibble aras LCD_DA akan menjadinibble atas dari instruksi atau dara yang akan dikirim, sedangkan nibblebawahnya terap. Proses selanjutnya adalah memberitahu LCD bahwa nibbleatas instruksi atau data siap untuk dikirimkan. pin LC-D_RWakan berlogikarcndah (()), st'tlangkar.r RS disesuaikan (0 untuk instruksi dan I untuk dara),kt'rntrrliirrr 1rrrl.;ir P,silit tlikirimkan ke pin LCD E. Selan]'utnya nibble bawahirrslrttksi itl,rtt rl,rt,r ,,r,r1,,likilirtrk11. llyf c itrstruksi atau clata yang scbelum,ya
2r5
2t6 Teknik Antarmuka dan Pemrograman I'likrokontroler AT89S52
disimpan di RAM (stack) diambil kembali dengan instruksi pop dan disimpan
ke register A. Instruksi swap akan menukar nibble atas dan bawah register A.
Proses selanjutnya sama dengan proses pengiriman nibble atas. Setelah byte
instruksi atau data dikirimkan, subrrrtin Delay*20 dipanggil untuk menunggu
LCD memproses instruksi atau data yang diterimanya. |ika dilakukan metode
pengecekan bit BF (flag sibuk), pengecekan harus dilakukan setelah nibble
atas dan bawah (1 byte lengkap) dikirimkan.
Sebelum bisa menerima data atau instruksi, LCD perlu diinisialisasi terlebih
dahulu. Proses inisialisasi ini akan mengatur mode kerja LCD (mode 8 bit
atau 4 bit), mengatur ukuran font, dan juga mengatur mode entry (posisi
kursor dan posisi display). Proses inisialisasi diawali dengan mereset LCD.
Pada dasarnya proses reset LCD bisa dilakukan dengan mengatur tegangan
Vcc seperti ditunjukkan oleh Gambar 6.74 pada saat pertama kali catu daya
dihidupkan. Jika kondisi ini dipenuhi, LCD akan mereset sendiri, jika tidak
LCD harus direset secara software. Walaupun demikian disarankan untuk
selalu mereset LCD secara software.
Gombor 6.1 4 Vcc untuk Resel [(D
Proses inisialisasi LCD dilakukan sebagai berikut. Setelah catu daya
dihidupkan, mikrokontroler harus menunggu setidaknya 15 milidetik
sebelum mengirim instruksi untuk inisialisasi. Inisialisasi diawali dengan
mereset LCD secara software dengan mengirim instruksi 30H sebanyak 3 kali.
Pada saat ini LCD masih bekerja dalam mode 8 bit. Lembaran data
menyebutkan hanya DB4 - DB7 yang berpengaruh (tepatnya DB7 = DB6 = 0
dan DB5 = DB4 : 1 atau 0011 xxxx), sehingga pada mode 4 bit, hanya nibble
atas yang harus dikirimkan. Setelah itu instruksi untuk mengatur konfigurasi
fungsi LCD bisa dikirimkan. Pada mode 4 bit sebelum mengirim instruksi
konfigurasi ini, perlu dikirimkan terlebih dahulu instruksi 20H (DB7 = DB6 =
0, DB5 = I dan DB4 = 0, DB3 - BDO = 0) untuk memberitahu l,(-ll) brhwa
mode 4 bit akan dipilih. Instruksi 20ll dikirim dalam tnotlt'll bir.,rtlirryrt
sckali kirirn, schingga bytc aktual yang tt'rkirirn rrtlalalt ltrtttyrt tttl,lrlr',rt;r"
Antarmuka dengan Display
Instruksi untuk mengatur konfigurasi LCD ditetapkan sebagai berikut:
untuk mode 8 bit DB4 (M) akan selalu I dan unruk mode 4 bit DB4 akanselalu 0. Perlu diperhatikan juga pada mode 4 bit instruksi dikirimkan 2 kalidengan nibble atas dikirimkan terlebih dahulu. Bit N akan menentukanapakah kedua baris display akan digunakan arau tidak, N = 1 akanmengaktifkan kedua baris display dan N = 0 berarti hanya 1 baris yangdigunakan. Bit F akan menentukan ukuran font, F = 1 ukuran font yangdipilih adalah 5x10 dan F = 0 ukuran font yang dipakai adalah 5x7.
Setelah menentukan konfigurasi LCD, instruksi inisialisasi selanjutnya adalahmengirimkan instruksi untuk memarikan display (Display Ofi, byteinstruksinya adalah 08H. Lalu dikirimkan insrruksi unruk membersihkandisplay (Display Clear), 01H. Instruksi ini pada dasarnya akan mengisiDDRAM dengan karakter spasi (20H). Instruksi terakhir yang harusdikirimkan pada proses inisialisasi LCD adalah instruksi untuk mengaturmode entry (Entry Mode ser), yang ditetapkan sebagai berikut:
Bit I/D (increment/decrement mode) akan menentukan apakah kursor akanbergeser ke kiri (pengurangan posisi kursor) arau bergeser ke kanan (posisikursor bertambah) setelah pengiriman data. I/D = I akan membuat posisikursor bergeser ke kanan (incremenr) dan I/D = 0 akan membuar posisikursor bergeser ke kiri (decrement) setelah pengiriman data display. Bit S
akan menentukan apakah seluruh display akan bergeser atau tidak. s = I akanmembuat display bergeser dan S : 0 akan membuar display tidak bergeser.Arah pergeseran ditentukan oleh nilai bit I/D. Setelah instruksi mode entrydikirimkan, proses inisialisasi selesai. Namun perlu diperhatikan, setelahinisialisasi, display dalam keadaan mari (karena instruksi Display off), untukitu perlu dikirimkan instruksi untuk menghidupkan display agar data yangdikirimkan ke LCD bisa tertampil. Instruksinya ditentukan sebagai berikut
DR7
o
D86 D85 D84 DB3 D82 DBl DBO
0 0 0 'I I C B
7tl
DB7 D86 D85 D84 D83 DB2 DB1 DBO
0 0 M N F x x
DB7 D86 DB5 DB4 D83 D82 DBI DBO
0 0 0 0 0 UD S
2r8 Teknik Antarmuka dan Pemrograman I'likrokontroler AT89S52
Bit C mengatur apakah kursor akan ditampilkan atau tidak; C = 1 kursor akan
ditampilkan dan c : 0 kursor tidak ditampilkan. Posisi kursor ditentukan
oleh byte yang ada di penunjuk alamat. Bit B dipakai untuk mengatur apakah
karakter di posisi kursor berkedip arau ridak, B = 1 karakter akan berkedip,
dan B = 0 karakter tidak berkedip'
Berikut adalah subrutin untuk proses inisialisasi untuk mode 8 bit dan 4 bit.
LCD difungsikan dengan mengaktifkan kedua barisnya dan ukuran font 5x7
GONFTG = 38H). Kursor diatur bergeser ke kanan dengan display tidak
bergeser (ENTRYMODE = 06H). Byte instruksi terakhir akan menghidupkan
display, kursor ditampilkan dan karakter tidak berkedip (OCH)' Berikut
adalah subrutin inisialisasi LCD dengan mode 8 bit:
INiLLCD-BBiT:mov DPTR, #Initial-Datamov B, #B
TniLLCD-BBit LooP:clr AMOVC A, @A+DPTR
call Write-CommandiNC DPTR
dlnz B, IniLLCD-BBit--Loopret
Init-ia1-Data:db 3OH,3OH,3OH,3BH, OBH, O]-H, O6H, OCH
sedangkan untuk mode 4 bit subrutinnya sebagai berikut:
INiILCD-4BiT:mov B. #3mov A, #30H
IniLLCD-4Bit-Loop1:mov LCD-DA, Aclr LCD-RSc1r LCD-RWsetb LCD-Enopc1rcalldj nzmot,MOV
:;tlt lr
LCD-EDelay_2 0
B, IniLLCD-4Bit-Loop1A, #2OHLCD-DA, Ar,('t) t.l
Antarmuka dengan Display
nopclr LCD_Ecall Delay_20mov DPTR, #IniLi,al_DaLamov B, #5
InitLCD_4Blr Loop2:cfr Amovc A, GA+DPTRcall Write_Command4inc DPTRdjnz B, InitLCD_4Bit t-oop2ret
Init-ia1_Data:db 2BH, OBH, O].H, O6H, OCH
Setelah proses inisialisai, LCD siap untuk menerima data atau instruksiselanjutnya. Selain instruksi yang digunakan untuk proses inisialisasi, LCDjuga dilengkapi dengan instruksi-instruksi lain untuk mengatur kursor,
display atau menentukan pengalamatan RAM internal, dan juga pengirimanatau pembacaan data (operasi data).
Instmksi-instruksi kursor dan display terdiri atas:
1. Home cursor, yaitu instruksi untuk menempatkan posisi kursor di posisi
paling kiri baris pertama display. Byte instruksinya:
DB7 D86 D85 DB4 DB3 DB2 DBI DBO
0 0 0 0 0 0 I X
X adalah tidak peduli (bisa 0 atau 1).
2. Memindahkan kursor atau pengalamatan DDRAM. Posisi kursor bisa
dipindahkan atau ditempatkan di mana saja di alamat DDRAM. Posisi
kursor pada dasarnya memperlihatkan alamat DDRAM. Di lembaran data
LCD, perintah ini sama dengan pengaturan alamat DDRAM. Posisi kursorakan menentukan di mana data akan ditampilkan. Byte instruksinya:
A0 - 46 adalah alamat DDRAM. Pada LCD di mana kedua barisdirktilk:rn. baris pertama mempunyai alamat 00H - 27H sedangkan
irlirruirt l<r',lrrr lrt.r'irlirrrrat 401 I 6711, sc'perti akan di;'elaskan kernudian.
2t9
DB7 D86 DB5 DB4 D83 DB2 DB1 DBO
1 A6 A5 4,4 A3 A2 A1 AO
220 Ieknik Antarmuka dan Pemrograman l'likrokontroler AI89552
Kursor atau display ON/OFF dan kursor berkedip' Kursor biasanya
sebuah garis bawah (underline), oleh karenanya dinamakan kursor garis"
Kursor bisa disembunyikan atau ditampilkan, tetapi tetap memperlihat-
kan tempat karakter atau data berikutnya di DDRAM. Karakter di mana
kursor berada bisa diatur apakah akan berkedip atau tidak. Instruksinya
sebagai berikut.
Bit D menentukan apakah display mati atau hidup, jika D = 1
menghidupkan display dan D = 0 akan mematikan display' Bit C dan B
bisa dilihat pada penjelasan mengenai inisialisasi LCD. Dari sini bisa
didefinisikan instruksi-instruksi untuk kursor dengan display hidup (D =
1):
a. Kursor mati (CUR-OFI = OCH
b. Kursor hidup/garis (CUR-LLNA = OEH
c. Karakter berkedip dan kursor mati (CHAR-BLIN$ = ODH
d. Karater berkedip dan kursor hrdup (COMB-CU$ = )FH
Sedangkan untuk mematikan display dengan kursor mati dan karakter
tidak berkedip (DISP-OFO adalah 08H.
Menggeser kursor atau display. Kursor atau seluruh display bisa digeser
ke kiri atau ke kanan. Instruksinya sebagai berikut:
D87 DB6 DB5 DB4 D83 DB2 DB1 DBO
0 0 0 1 S/C R/L x x
S/C menentukan apakah hanya kursor atau seluruh display yang digeser,
S/C = 0 hanya kursor yang digeser dan S/C = 1 seluruh display akan
digeser. R/L menentukan arah pergeseran (ke kiri atau ke kanan). R/L = 0
arah pergeseran adalah ke kiri dan R/L = 1 kursor atau display akan
digeser ke kanan. Instruksi pergeseran kursor atau display:
a. Menggeser kursor ke kiri 6HLFT-CURL) = 70H
b. Menggeser kursor ke kanan (SHIFT-CUR$ = l4H
c. Menggeser display ke kiri (SI{IFT-DISPL) = 18H
d. Menggeser display ke kanan (SHIFT-D$Pfl = I Cll
Antarmuka dengan Display
Membersihkan display. Instruksi ini akan memberikan karakter spasi(ASCII 20H) ke DDRAM. Selain itu juga akan membuar kursor padaposisi awal (home), yaitu di posisi kiri baris pertama. Instruksinya adalahDISP-CLR=OIH.
Pengalamatan CGRAM. Instruksi ini akan memilih alamar di CGRAMpada saat pengiriman atau pembacaan data oleh mikrokontroler.Instruksinya dinyatakan sebagai berikut:
A0 - A5 adalah alamar CGRAM. Pengalamatan ini berguna unrukmenampilkan karakter-karakrer yang tidak ada di CGROM. Tentu sajakarakter-karakrer rersebur harus didefinisikan terlebih dahulu. Lihatsubbab selan;'utnya untuk mengetahui bagaimana menampilkan karakterbukan standar.
Operasi data, ter-utama penulisan data, mungkin inilah yang paling seringdilakukan pada pemrograman LCD. Penulisan dara bersama dengan insrruksipengalamatan DDRAM akan menentukan apa dan di posisi mana data akanditampilkan. Alamat DDRAM bisa diatur untuk naik arau turun (yang diaturpada saat inisialisasi LCD) setelah penulisan data, sehingga program hanyaperlu mengirim alamat awal DDRAM, selanjutnya program hanya perlumengirimkan data yang akan ditampilkan. Ini bisa mengurangi instruksi atauprogram yang diperlukan. Data yang harus dikirimkan ke LCD adalah dataASCII atau data yang sesuai untuk menampilkan karakter seperti ditunjukkanoleh lembaran data LCD. Data karakter ini diprogram oleh pembuat LCDdan disimpan di cGRoM. Ada sekitar 192 karakter yang bisa ditampilkan, 96karakter ASCII (dipilih dengan mengirimkan kode ASCII-nya), 64 karakterJepang (huruf kana), dan 32 karakter khusus seperti huruf Yunani.
Digit
Earis 1
Eans 2
Fosisi DisplayE g 39.1fl
Alanrrat DDRAII
Gonrbor 6.15 Alomol DDRAM don Posisi Disploy
22r
5.
6.
DB7 D86 D85 DB4 D83 DB2 DBI DBO
0 0 0 0 D C B DB7 D86 D85 D84 DB3 DB2 DBI DBO
0 1 A5 A4 A3 A2 AI AO
l0H NJH 0:t- rl3H 04H 05H J6H l7H I]EH 26H 27H
{DH 41 H 4:H 43H 44H 45H 4EH +7H 4EH 6EH 57F
777 Teknik Antarmulta dan Pemrograman Mikrokontroler AT89552
Seperti telah disebutkan, LCD dilengkapi dengan 80 byte DDRAM sehingga
LCD bisa menyimpan sampai 80 karakter. walaupun demikian, tidak semua
ke-80 karakter LCD tersebut bisa ditampilkan, bergantun8 pada ukuran LCD.
Misalnya untuk LCD dengan 16 x 2 maka hanya 32 karakter yang bisa
ditampilkan, sisanya "disembunyikan". Melihat karakter yan8 tersembunyi
bisa dilakukan dengan instruksi menggeser display ke kiri atau ke kanan.
Alamat DDRAM ditentukan sebagai berikut. Baris pertama mempunyai
alamat 00H - 27H sedangkan baris kedua mempunyai alamar 40H - 67H.
Gambar 6.15 memperlihatkan hubungan alamat DDRAM dengan posisi
display.
Setelah inisialisasi, alamar DDRAM akan berada di 00H, sehingga data yang
dikirimkan setelah inisialisasi akan ditampilkan di digit ke-1 baris pertama'
Misalnya contoh program berikut akan menampilkan tuiisan "BELAJAR
LCD" di baris pertama.
call InitLCD-8BiLmov A, #'B'call Write-Datamov A, #'E'cati wriLe-Datamov A, #'L'call write-Datamov A, #'A'call write-Datamov A, #'J'call Write-Dal-amov A, #'A'call Write-Datamov A, #'R'call Write-Datamov A, #'call write-Datamov A, #'L'cail Write-DaLamov A, #'C'call Write-DaLamov A, #'D'call Write-DaLa
Apabila tulisan tersebut ingin ditampilkan di baris kedua L(ll)' rnaka lral
pcrtama yang, harus clilakukan adalah mcncmpatkan ktttsot' tli l,;rris kt'tlttrt
Antarmuka dengan Display
sebelum mengirimkan data. Alamat digit pertama di baris kedua adalah 40H
(0100 0000 dalam biner), instruksi untuk memindahkan kursor ke alamat
40H adalah 1100 0000 dalam biner atau COH, sehingga program di atas akan
menjadi:
callmovcallmovcallmovcallmovcallmovcallmovcallmovcalimovcallmovcallmov^^ I lLdIA
movcallmovcall
Mengacu pada contoh di atas, alamat posisi display atau kursor untuk LCD
x 2 baris dapat ditentukan, seperti ditunjukkan oleh Gambar 6.16.
Fc'sisi Display4 v &, 1s1*
D3
INiILCD_8BiTA" #OCOH
Write_CommandA, # 'B'Wrlte_DataA, #'E'WriLe*DataA * , T,,
WriLe_DataA, #'A'Write*DataA, #'J'Write_DataA, #'A'Write*DataA, #'R'Write_DataA, #'Write_DaLaA, #'L'Write_DataA, #'C'Write_DatatL, +t D
Write_Data
t6
Digit
Earis 1
Earis 2
EI]H Lq1 l- Ll-17 E4H1ESH EEH 87H EEH BEH EFH
ilIF c1l- Ljr CsHiC4H]C5H,CEH :7H CBH IEr- CFI-
Alarrmt DDRAI'"'I
Gombor 6.16 Alumot Posisi Disploy untuk l-(D l6 x 2 Boris
Ieknik Antarmulo dan Pemrograman Hikrokontroler AT89552
Selain instruksi penulisan (instruksi atau data), LCD juga dapat dibaca
(instruksi pembacaan). Instruksi pembacaan hanya bisa dilakukan untukmembaca bit status sibuk (BF) dan membaca data DDRAM atau CGRAM.
DDRAM atau CGRAM yang tidak dipakai untuk menampilkan data bisa
digunakan sebagai memori multiguna untuk menyimpan data lain.
BF dibaca untuk mengetahui apakah LCD sudah menyelesaikan instruksi
yang dikirimkan kepadanya atau belum. Program harus menunggu sampai BF
= 0 sebelum mengirim instruksi atau data selanjutnya. Berikut adalah
subrutin untuk membaca bit BF dalam mode 8 bit.
Read_LCD_Status :
c1r LCD_RSsetb LCD-RWmov LCD-DA, #0FFHsetb LCD_Enopmov A, LCD_DAjb ACC.7. Read-LCD-Statusclr LCD-Eclr LCD-RWret
BF berada di bit ke-7 data yang dibaca (DB7). Data dibaca dan disimpan diakumulator. Selanjutnya bit ke-7 register A akan dicek apakah I atau 0dengan instruksi jb, dan progam akan berulang sampai bit ke-7 data yang
dibaca 0. DBO - DB6 akan terbaca sebagai alamat DDRAM atau CGRAM dari
instruksi sebelumnya. Pada mode 4 bit, pembacaan BF harus dilakukan
setelah semua nibble dikirimkan. Contoh program di buku ini menggunakan
metode waktu tunda, tidak dengan pengecekan bit BF.
Untuk membaca isi DDRAM atau CGRAM, hal pertama yang harus
dilakukan tentu saja dengan menentukan alamat mana yang akan dibaca
dengan instruksi pengalamatan DDRAM atau CGRAM. Contoh subrutin
berikut akan membaca isi DDRAM dalam mode 8 bit.
Read_DDRAM:clr LCD_RSsetb LCD_RWmov LCD*DA, #OFFHsetb LCD_DAnoprn()v A, T,(lD I)n
Antarmuka dengan Display
Misalnya untuk membaca alamat OFH:
mov A, #BFHcall Wri-te_Commandcall Read_DDRAM
Seperti halnya penulisan DDRAM atau CGRAM, bergantung pada inisialisasi,setelah pembacaan kursor akan bergeser ke kiri atau ke kanan. Sehingga tidakdiperlukan pengiriman alamat selanjutnya jika alamat yang akan dibacaadalah berurutan.
6.3.3 APLIKASI LCD MODE 4 BIT
Contoh aplikasi program berikut akan memperlihatkan bagaimana mem-program LCD dalam mode 4 bit dan menerapkan instruksi-instruksi LCDseperti membersihkan display (D[SP_CL$, menghidupkan atau mematikankursor atau display dan menggeser kursor. LCD bekerja pada mode 4 bit. Portdata dan kendali dihubungkan ke P1 AT89S52. Program ini merupakansimulasi untuk pintu elektronik; untuk membuka pintu tersebur, angka ataupassword harus dimasukkan. Sebuah keypad matriks 4x4 digunakan sebagai
media untuk memasukkan angka dan dihubungkan ke P3 (KEY_DAT). P2.0digunakan sebagai pengendali pintu (DOR_CTRL), jika di-set pinru akanterbuka.
Memori internal Key_Counter (30H) digunakan sebagai penghitungbanyaknya digit angka yang telah dimasukkan (dalam program ini 5 digit)sedangkan Data_Buff (31H) digunakan sebagai alamat awal penyimpan angkayang dimasukkan, oleh karena digunakan 5 digit maka diperlukan 5 bytememori untuk menyimpan angka. Memori bit ID_Flag digunakan sebagai bituntuk menentukan apakah angka atau ID yang dimasukkan sesuai atau tidak,jika sesuai ID_Flag akan di-set, jika tidak ID*Flag akan di-reset. SedangkanMax_DigFlag digunakan sebagai bit untuk menentukan apakah jumlah digitangka yang dimasukkan sudah mencapai maksimum (5 digit) atau belum. ]ikasudah, maksirnum bit ini akan di-set; jika belum, bit dalam kondisi reser (0).
)75774
c1r LCD_Ec].r LCD*RWret
776 Ieknik Antarmuka dan Pemrograman l'likrokontroler AT89552
;Program Tltle : "1-6 x 2 LCD Demonstration";Fi1e name : LCDCharl.asm;Version :1.0;Created date : February 24, 200i;Programmer i Usman
,. * ** ** * * * * ** * * * * ** * * * ******** ** ***** * ** *** ** ** **** * *****
,. * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * ** * * * * * *
,'Microcontroler Pin/Port Assignment,.
* ** ** * * * * * * ** ** * * *** ** * * * * * * * * * * ** * * ** * * * * * ** **** * * * * **
;LCD Control PinLCD-DA equ P1
LCD-RS egu P1.0LCD-RW equ P1.1LCD E equ P7.2
Antarmuka dengan Display
CUR*LINECHAR-BLINKCOMB-CIIRSHIFT-CURLSHIFT CURR
HOME-CUR
data OEH
data ODH
data OtrH
data 10Hdata 74Hdata 02H
;Display fnstructionDrSP_OFtr data OBH
DISP_ON data OEH
SHIFT_DISPL data 1BHSHIFT-D]SPR daLa lCHDISP_CLR data 01H
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;Main Program. *** ** ** ** * * ** ***** * * * * *** * ** **** ** **** ** * ** * * * * ** ** * ***
Org 0000HMain_Proq:
clr DOR*CTRLmov Key_Counter, #0mov TestFlag, #0cafl rnitLCD_4Bitcall WelCome_Messaqecall Input_ID_Message
KeyPad_Scanning:call Check_Key_Pressedjnc KeyPad_Scanning
call Find_Rowmov B, Ajnc Get_Column
Loopl:call Check_Key_Pressedjc Looplsjmp KeyPad Scanning
(;et Colurnn :
c-a l I l,'i n<'l Cof umn1;W. ll) A
,,r I /\, ll
171
KEYDATDOR-CTRL
equ P3equ P2.0
. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * *
;Internal RAM Mapping- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
TestFlag equ 20HID_Flag bit TestFlag.0Max DiqFlag bit TestFlag. l
Key-Counter equ 30HData_Buff equ 31H
. *** ** * * ** * * ** * * **** * **** ** * * ** ** ** * * ** ** * ** * * * * ** ** ** **;Constanta Definition,.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
;LCD command definition; rnitialization dataSOFT-RST data 3BHSET4BIT data 20HCONFIG data 2BHENTR\1VIODE dat.a 06H
;Cursor I nstruct ronCUR OIJF <]AT:T OCI-I
228 Ieknik Antarmuka dan Pemrograman l'likrokontroler AT89552
jnc Read_KeyData
Loop2:call Check_Key_Pressedjc Loop2sjmp KeyPad_Scanning
. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Read_KeyData:push ACC
mov A, Key_Countercjne A, #5, Check-For_KEYOsetb Max-DlgPlag
Check_For_KEY0:pop ACCcjne A. #00H, Check_For_KEY1mov A, #'0'jmp Loop3
Check_For*KEY1:cjne A, #10H, Check_For_KEY2mov A, #'1'jmp Loop3
Check_For_KEY2:.cjne A, #20H, Check_For-KEY3
Antarmuka dengan Display 729
jmp Loop3
Check_For_KEY6:cjne A, #21H, Check_For_(Ey7mov A, #'6'jmp Loop3
Check_For_KEY7:cjne A, #31H, Check*For_KEyBmov A, #''l '
jmp Loop3
Check_For_KEYB:cjne A, #02H, Check_For_KEygmov A, #'B'jmp Loop3
Check_For_KEY9:cjne A, #L2H, Check_For_KEy10mov A, #'9'jmp Loop3
Check_F or_KEY1 0 :cjne A, #22H, Cb^eck_For_KEy11jmp Check_ID_DaLa
Check_For_KEYl1 :
mov A, #,2, cjne A, #32H, Loop_Exitjmp Loop3 Tot A, KeY-Counter
)z Loop_ExitCheck_For*KEy3. dec Key_Counter
cjne A, #30H, Check-For-KEY4 clr Max*DigFlagmov A, #,3 , dec R1
jmp Loop3 mov @R1, #0mov A, #SHIFT_CURL
Check_For_KEy4: call Write_Command4cjne A, #01H, Check-For-KEYS mov A, #'mov A, #, 4, call Write*Data4jmp Loop3 mov A, #SHTFT-CURL
call_ Write_Command4jml, l,oop ExitCheck_For_KEY5:
cjne A, #11H, Check-For-KEY6mov A, #'5' l'oo1 rl:
Teknik Antarmuka dan Pemrograman l'likrokontroler AT89S52
jb Max-DigFtag, LooP-Exitmov @R1, Ainc Rl-
inc Key-Countermov A, #'*'call Write*Data4
Loop-Exit:call Check-KeY-Pressedir- Looo Exitjmp KeYPad-scanning
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Check-Key-Pressed:mov KEYDAT, #OFh
call DelaY-20MOV A, KEYDAT
or1 A, #0F0hcpl Aiz No Kevsetb C
retNo_Key:
clr C
ret
. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * *
Find-Row:MOV A, KEYDAT
mov R0, #4
Try-Next*Row:trc Ajnc Row-Founddjnz R0, Try-Next-Rowsetb C
ret
Row-Found:mov A. #4subb A, R0
cIr C
ret
Antarmuka dengan Display
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * *
Find_Column:mov R0, #4mov A, #OEFhpush ACC
Try_Next _ Co1 umn :
pop ACC
mov KEYDAT, Ar1 Apush ACC
mov A, KEYDATorl A, #0F0hcpl A
Jnz Column_Founddlnz R0, Try_Next-Columnpop ACC
setb C
ret
Column_Found:pop ACCmov A, #4c1r C
subb A, R0clr C
ret
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Check_ID_Data:clr ID_Flagmov R1, #Data_Buff
Check_Dj-git1 :
mov A, #'3'subb A, GR1jz Check-Digit2jmp ID_Check_Messag'e
Check_nigit2:inc R1mov A, #'9'subb A. @R1
jz. Chcck_Digit3jnrl r II) ('l)cr--k Message
(')rcr'1.: l)i,rrlt:
2lt210
232 Teknik Antarmuka dan Pemrograman l,likrokontroler AI89S52 Antarmuka dengan Display 2i3
inc R1
mov A, #'7 '
subb A, @R1
)z Check_Digit4jmp ID-Check-Message
Check_oigit4:inc R1
mov A, #' 2'subb A, GR1
Jz Check-Digitsjmp ID_Check*Message
Check_Digit5:inc R1mov A, #'3'subb A, GR1
)z Check_ID_OKjmp ID_Check_Messagie
Check_ID-OK:setb ID_FIag
ID_Check_Message :
call Clear-Displaymov A, #CUR_OFFcall Write_Command4mov DPTR, #ID-Check-Message-Data1call Send-Text-To-LCDmov A. #0C0Hcall write-Command4mov DPTR, #fD-Check-Message-Data2call Send_Text-To LCDcall Long_De1aymov R4, #3
Display_Blink:mov A, #DISP_OFFcall Write-Command4call Long-Delaymov A, #CUR-OFFcall Write_Command4call Long_De1aydlnz R4, Display-B1ink
jb ID_FIag, ID_Check_OKcal l Clear- -Di splay
mov DPTR, #ID_Check_fnvalid Datalcal-1 Send_Text*To_LCDmov A, #0C0Hcall Write_Command4mov DPTR, #ID_Check_Invalid_DaLa2call Send_Text_To LCDcafl- Long_Delaycall lnput_ID_Messagejmp Loop*Exit
ID_Check_OK:setb DOR*CTRLcall Clear*Displaymov DPTR, #ID_Check_OK_Data1call Send_Text_To LCDmov A, #0C0Hcall Writ.e_Conunand4mov DPTR, #ID_Check_OK_Data2call Send*Text_To LCDcall Long_Delayjmp Main_Prog
ID_Check_Mes sage_Data1 :
db 'ID Checking: now, ,0ID_Check_Mes sage_Data2 :
db 'Please wait...',0f D_Check_Inval id_Data1 :
db 'Invalld fD...,,0ID_Check_f nval id_Data2 :
db 'Please try again, , 0ID_Check_OK_Dat.a1 :
db 'rD check OK. . . ' ,0ID_Check_OK_Data2 :
db 'Please enter...,,0
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * ** * * * * * * * * * * * * * * *tnput_ID_Message :
call Clear_Dlsplaymov DPTR, #InpuL_ID_Message_Datacall Send_Text*To_LCDmov n, [0C0FIcal I Wr il r' ('ornrrurncl4
ril()v A, ll('()l4lt ('l,l{
Teknik Antarmul<a dan Pemrograman Mikrokontroler AI89S52
call Write-Command4call Cfear-Data-Buffermov R1, #DaLa-Buffclr DOR-CTRLret
Clear-Data-Buf fer :
mov B, #5mov R1, #Data*Buffcfr A
Clear-Data-Buf f er-LooP :
mov @R1, Ai-nc R1
dlnz B, Clear-DaLa-Buffer*LooPclr Max-DigFlagmov Key-CounLer, #0ret
Input_ID-Mes sage-Data :
db 'Please inPut ID: ' ,0
. *** **** ** ** ** **** * * * **** ** ** **** ** ** ** ** *** ** ** *** **** *
Welcome_Messaqe :
mov DPTR, #Welcome-Message*Data1call Send-Text-To LCD
mov A, #0C0Hcall Write-Command4mov DPTR, #Welcome-Message-Data2call Send*Text-To-LCDcall Long-De1aYret
Welcome-Message-Data1 :
db . WELLCOME TO "
O
Welcome-Message*Data2 :
db .U_2 TECHNOLOGIES',0
,. * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Send_Text-To LCD:clr AMOVC A, GA+DPTRjz Send-Text-To-LCD Exir-cal.i Wri t e D;rt a4
Antarmuka dengan Display
inc DPTRsjmp Send_Text_To LCD
Send_Text_To,LCD_Exi t :
ret
. ** * ** * * ** ** * * *** *** * ** ** * * ** ** ** ** ** **** * ** ** ** ** * * ****;LCD Control Routine,.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * ** * *INiILCD-4BiT:
mov B, #3mov A, #SOFT_RST
IniLLCD*4Bit_Loop1:mov LCD-DA, Acfr LCD_RSclr LCD_RWSeTb LCD-Enopclr LCD_Ecall Delay_20djnz B, InltLCD_4Bit Looplmov A, #SET4BITmov LCD-DA, Asetb LCD_Enopclr LCD_Ecall Delay_20mov DPTR, #Initial Datamov B, #5
InirLCD_4Bit Loop2:c1r AmoVC A. @A+DPTR
call Write_Command4inc DPTRdjnz B, InirLCD_4Bit_Loop2ret
tnitial Data:
235234
dbcltR_oFF
CONFIG, DISP-OFF, DISP-CLR, ENTR\'}{ODE,
,. l ***** a l l r *********************************************
('lr';rr l)ill1rl,ry'ill()v A. lll)ll;1,('1,11
236 Ieknik Antarmuka dan Pemrograman l'likrokontroler AI89552
call Write-Connnand4ret
.*******************************************************Write_Data4:
push ACC
orl A, #OFH
or1 LCD_DA, #0F0Hanl LCD-DA, AseLb LCD_RSclr LCD-RWsetb LCD-Enopc1r LCD-Epop ACC
swap Aor1 A, #0FHorl- LCD-DA, #0F0Hanl LCD-DA, Asetb LCD-Enopclr LCD-Ecall Delay-20ret
.*******************************************************Write-Command4:
push ACC
or1 A, #0FHor1 LCD-DA, #0F0Hanl LCD-DA, Aclr LCD-RSclr LCD RW
setb LCD-Enopclr LCD-Epop ACCswap Aor1 A, #OFHorl LCD-DA, #0F0Hanl LCD-DA. ASCTb LCD-Enop
Antarmuka dengan Display
clr LCD_Ecall Delay_20ret
- * * * ** * * * * * * * * ** ** * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *Delay_20:
mov R7, #1call De1ay10ret
De1ay10:mov R3, #20
Delayl0loop:mov F.2,#255djnz R2, S
djnz R3, DelaylOloopdjnz R7,De1ay10reL
Long_De1ay:mov R6, #200
Long_De1ay_Loop:call Delay_20djnz R6, Long_De1ay_Loopret
end
Pertama program akan menampilkan pesan selamat datang. Kemudian akanrnenampilkan pesan agar orang yang akan memasuki pintu tersebutmemasukkan ID-nya. Program lalu akan mengecek ID yang dimasukkantersebut, kalau ID tersebur sesuai, program akan membuka pintu; jika tidakcocok dengan ID yang telah diprogramkan, program akan memberitahu danmeminta untuk memasukkan ID kembali. ID yang digunakan merupakan 5digit angka, yaitu 397 23.
Program diawali dengan me,ginisialisasi LCD agar bekerja pada mode 4 bitdengan memanggil subrutin InitrcD-4Bit (penjelasan mengenai subrutin inibisa dilihat di subbab 6.3.2 Pemrogramar LCD). pesan selamat datangdilakukan dengan memanggil subrutin welcome_Message. Subrutin ini akanmenampilka. rulisan' WELLCOME To " di baris pertama LCD dan "U-2TECHNOI,oGI[s" rli baris kedua. pengiriman karakter dilakukan di subrutin,larttl 'll'tt /,t /1'11 nrt,rrllgrrlirkarr rrret6tlc taht'l data. Teks yang akan
137
Ieknik Antarmul<a dan Pemrograman l'likrokontroler AT89S52Antarmuka dengan Display
Pengecekan tombol dilakukan dengan membandingkan isi register A, yang
telah diambil kembali dari memori melalui instruksi pop, dengan konstanta-
konstanta pembacaan tombol (mengacu kepada Tabel 5.1). Apabila yang
ditekan adalah tombol angka, register A akan diisi dengan karakter ASCII
angka tersebut, misalnya jika tombol 1 (KEY1) yang ditekan register A akan
diisi dengan "1" (30H). Program akan melompat ke Loop3wtuk menyimpan
angka tersebut ke RAM. Sebelum melakukan penyimpanan data, bitMax*DigFlag dicek terlebih dahulu. |ika di-set, angka tidak akan disimpan
karena angka yang dimasukkan telah 5 digit. ]ika Max-DigFlag = 0, angka
disimpan ke memori melalui mode pengalamatan tak langsung dengan R1
menyimpan alamat Data-Buff (Rl dlisi Data-Buffdi awal program). Setelah
penyimpanan, Rl dinaikkan (instruksi inc) agar menunjuk ke alamat se-
lanjutnya untuk menyimpan digit berikutnya. Begitu j,rg, dengan
Key*Counteryang berfungsi sebagai pencacah digit. Kemudian program akan
menampilkan karakter ke LCD. Angka yang dimasukkan tidak
ditampilkan karena bersifat rahasia. Program akan melompat kembali ke
KeyPad Scanaraguntuk membaca tombol berikutnya.
Jika tombol ENTER (KEY10) yang ditekan, program akan melompat ke
subrutin Check-ID-Dara untuk membandingkan ID yang dimasukkan
dengan ID yang telah tersimpan di memori program ("39723"). Pengecekan
dilakukan dengan menggunakan instruksi pengurangan mode pengalamatan
tak langsung, dengan Rl menyimpan alamat Data-Buff. Register A diisidengan digit pertama ID ("3") kemudian dikurangi oleh digit pertama angka
yang dimasukkan yang tersimpan di Data*Buff (ditunjukkan oleh Rl). fikasama, register A akan menjadi 0 dan program akan mengecek digit selanjut-
nya. Penunjuk alamat digit selanjutnya (Rl) akan dinaikkan dan A akan diisidengan digit kedua ("9"), kemudian dikurangi lagi dengan digit kedua angka
yang dimasukkan. Begitu seterusnya sampai semua digit dicek. lika semua
digit cocok, maka program melompat ke Check-ID-O( untuk mengeset bitID-Flag, jika tidak program langsung melompat ke lD-Check-Message. BitID-Flag tetap dalam kondisi reset (bit ini di-reset di awal subrutin
Check_ID_Data).
Subrutin lD-Check-Message akan menampilkan Pesan bahwa proses
pengecekan ID sedang berlangsung. Subrutin ini akan menampilkan tulisan"ID Checking now" cli baris pertama dan "Please wait..." di baris kedua. Pada
kontlisi irri rlirl,lrrv rkirrr bct'kctlip j kali. R4 dig,unakan sebag,ai pt'ncacah 3.
i
I
219
218
dikirimkandidefinisikand.alamtabeldata'Tabeldatainidiakhiridengan0,sehingga jika subrutin membaca 0 berarti semua teks telah dikirimkan
(instriksl jz). Untuk menampilkan teks di baris kedua LCD' instruksi
penempatan kursor dilakukan terlebih dahulu dengan mengirimkan alamat
COH ke LCD.
Setelah menampilkan pesan selamat datang' program akan meminta untuk
memasukkan ID dengan memanggil subrutin Input-ID-Message' Subrutin ini
akanmenampilkantulisan..PleaseinputlD:,,dibarispertama,sedangkanbaris kedua akan menampilkan ID yang dimasukkan' Dalam contoh program
inilDterdiriatas5digit".'g1."'Padasaatinikursordiaturuntukditampilkandengan karakter prdu po,i'i kursor berkedip' Oleh karena itu' sebelum
meri'ampilkan ID, terlebih dahulu dikirimkan instruksi untuk menghidupkan
kursor dan membuat karakter berkedip (COMB-CU{' Di subrutin ini juga
semua memori penyimpan angka (dengan alamat awal Data-Buf)' pencacah
digir. (Key-Coirtrr) du, bit Max-DigFlag diinisialisasi dengan diberi nilai
awal 0 (subrutin Clear-Data-Buffer)'
ID dimasukkan melalui ke1ryad matriks 4x4 yang dihubungkan ke P3'
Penjelasan mengenai bagaimana membaca keypad 4x4 bisa dilihat di Bab 5'
Dalam contoh program"ini tidak semua saklar digunakan' hanya 12 saklar
yang digunakan. Mengacu kepada Gambar 5'4' saklar yang digunakan adalah
KEYo-KEYSsebagaitombolangka0-g,KEY1OsebagaitombolENTERdanKEYl1 sebagai tombol CLEAR' Pembacaan keypad dilakukan di subrutin
KeyPad-Scinrrg'. Setelah mengetahui ada tombol yang ditekan' Program
kemudian akan mengecek tombol mana yang ditekan dan melakukan hal
yang sesuai dengan tomUot tersebut' Ini dilakukan di subrutin Read*KeyData'
Sebelum melakukan pengecekan tombol' subrutin Read-KeyDara terlebih
dahulu mengecek "prt"f'*u"gLa
yang dimasukkan sudah 5 digit atau belum
dengan membaca isi Key*Cointer' lnidilakukan dengan instruksi cjne dan isi
Krl-Couot"rterlebih i^t"'rt" dipindahkan ke register A' mengingat instruksi
cjne tidak mengenal alamat memori sebagai operand pertama' Tentu saja
register A yang menyimpan d'ata kolom dan baris dari tombol yang ditekan
harus disimpan dulu dengan instruksi push' |ika Key-Counter sudah bernilai
5, bit Max-DigFtag aka" di'"t, jika belum program langsung melompat ke
Check-For-KeY1.
Teknik Antarmuka dan Pemrograman }likrokontroler AT89S52
Instruksi untuk mematikan display @fSP-OFn dan menghidupkan display
dengan kursor 11,ati (CtlR-OFl) dlkirimkan dengan jeda waktu di antara
kedua instruksi tersebut dengan memanggil subrutin Long-Delay' Hal ini
dilakukan 3 kali, sampai R4 bernilai 0.
Program selanjutnya mengecek bit ID-Flag. Jika bit ini di-set berarti ID
cocok sehingga program akan melompat ke subrutin ID-Chek-OK'
Pengendali pintu (DOfi_ CTRL) akan di-set dan pintu akan dibuka. Lalu
display akan menampilkan "ID check oK..." di baris pertama dan "Please
enter...,, di baris kedua. Setelah menampilkan tulisan ini progam akan
melompat kembali ke Main_Prog. ]ika bit ID_Flag = 0, artinya ID tidak
cocok, program akan menampilkan "Invalid ID .'." di baris pertama dan
"Please try again" di baris kedua. Lalu progam akan memanggil subrutin
Inpu t-ID-Message dan kembali membaca keypad.
Tombol terakhir adalah tombol CLEAR (subrutin check-For*KEY10.
Tombol ini digunakan untuk menghapus satu digit angka yang terakhir
dimasukkan. Pertama isi pencacah dtgit (Key-Counter) dlbaca dan disimpan
di A. Kemudian dicek apakah 0 atau bukan. Jika 0 maka program akan
melompat ke Loop-Exituntuk kembali membaca keypad. ]ika bukan 0, maka
Key*Counter akan dikurangi 1, begitu juga Rl sehingga alamat penyimpan
angka berkurang 1. Kemudian alamat terakhir tersebut diisi data 0. Bit
Max_DigFlagjuga di-reset sehingga program akan mengetahui bahwa digit
yang dimasukkan belum 5 digit. Kemudian kursor LCD akan digeser ke kiri
dan mengirimkan karakter spasi di posisi kursor tersebut. Oleh karena setelah
pengiriman data kursor akan bergeser kembali ke kanan, maka kursor sekali
lagi digeser ke kiri. Pada saat inilah terlihat proses penghapusan berlangsung.
Program selanjutnya melompat ke Loop_Exit untuk kembali membaca
keypad.
6.3.4 MENAMPILKAN KARAKTER DENGAN CGRAM
Selain bisa menampilkan data yang telah diprogram di CGROM seperti telah
dicontohkan oleh program LCDCharl.asm, LCD juga bisa menampilkan
karakter yang diprogram sendiri dengan menggunakan CGRAM' Dengan 64
byte memori maka CGRAM bisa menampilkan sampai 8 karakter. Data-data
yang akan membentuk karakter yang diinginkan hams dikirimkan tt'rlebil.l
dahulu ke CGRAM, karakter tcrscbut kcmudial cliparlggil tlt'trgatr
rncrrgirinrkan rlata ()l I 7ll kc l)l)ltAM (trnttrk kitrrtktcr kt' I rl'rtrr vitrrli
Antarmuka dengan Display
dikirimkan adalah 0H, dan seterusnya). Contoh program berikut akanmenjelaskan bagaimana menampilkan karakter dengan CGRAM.
Gombor 6.1 7 Korokter dengon (GRAM
Hal yang pertama dilakukan adalah mendefinisikan karakter yang akanditampilkan, kemudian mendefinisikan data-data yang harus dikirimkanuntuk karakter yang bersangkutan dan mengirimkannya ke GGRAM. caramendefinisikan data hampir sama dengan cara mendefinisikan data untukdisplay LED dot matriks. setiap karakter memerlukan 7 byte data (1 byte perbaris dengan ukuran karakter 5x7). Karena hanya 5 kolom yang digunakan.maka bit ke-5 - ke-7 tidak digunakan. Bit harus bernilai 1 jika kolom yangbersesuaain menyala dan bernilai 0 jika mati. Begitu juga untuk baris ke-g,karena tidak akan digunakan harus diberi nilai 0. Gambar 6.17 memper-lihatkan karakter-karakter yang akan ditampilkan daram contoh program ini.
Misalnya untuk karakter pertama; data bisa didapat seperti yang ditunjukkanoleh rabel 6.5. D0 adalah bit untuk kolom ke-l (dihitung dari kanan ke kiri).D5 - D7 yang tidak berpengaruh ditetapkan sebagai 0. Dengan cara yangsama dapat diperoleh data untuk karakter-karakter yang lain, sepertiditunjukkan oleh Tabel 6.6. Byte ke-S yang semuanya bernilai 0 tidakdiperlihatkan oleh tabel.
141
Tobel 6.5Doto untuk (orokler Pertomo
Baris D7 D6 D5 D4 D3 D2 DI DO Heksa
1 0 0 0 I T 1 1 IFH2 0 0 0 I 0 I 0 I 15HJ 0 0 0 I 0 I 0 I 15H4 0 0 0 I 1 1 lFH5 0 0 0 1 0 0 I 15H6 0 0 0 1 0 I 0 1 15H7 0 0 0 I I I I 1FHft 0 0 0 0 0 0 0 0 00H
Iobel 6.6 Dolo unluk Seluruh Korokter
Kamkter Byt l Byte2 Byte 3 Byte 4 Byte 5 Byte 6 Byte 7
H IFH 15H 15H lFH 15H 15H 1FH
H 11H 11H 1BH 1FH 1BH 11H 11H
11H 11H OEH OAH lBH 11H 11H
E 1FH lFH OEH 04H OEH 1FH 1FH
H 1FH 15H 1FH 15H 1FH l5H 1FH
i 03H 03H 07H OFH OFH 1FH 1FH
E 18H lCH 1EH lFH lFH IFH lFH
ffi 1FH 04H 04H 1FH 11H 1rH llH
Teknik Antarmul<a dan Pemrograman Mikrokontroler AT89S52
program berikut akan menampilkan karakter-karakter yang teiah ditentukan
,".r"brr, ke LCD. LCD tetap bekerja pada mode 4 bit' Program akan
menampilkan tulisan "KARAKTER CGRAM:" di baris pertama dan karakter-
karakter yang telah didefinisikan di baris kedua'
Setelah menginisialisasi LCD untuk bekeria pada mode 4 bit' program akan
mengirimkan data-data untuk menampilkan karakter yang telah dibuat ke
"lu-ut CGRAM melalui subrutin Write*Pattern-To-CGRAM' Alamat awal
CGRAM yang dipakai adalah 00H, sehingga program akan mengirimkan 40FI
sebagai plririuh ke LCD untuk mengakses alamat 00H CGRAM' Ken.rudian
data-data dikirimkan dengan membaca tabel data byte demi byte' Ilcgistc'r R0
digunakan seltagai p.'n.r.ul., karaktt,r (8 karakrcr) tlittr tcgislt'r ll st'bagli
Antarmuka dengan Display
pencacah byte per karakter (8 byte). Setelah data-data dikirimkan, programkemudian akan memanggil ke-8 karakter tersebut di baris kedua layar LCDdengan mengirimkan karakter 0H * 7H dengan alamat awal COH.
,'Program TiLle : "CGRAM Demonstration";File name : LCDChar2.asm;Verslon :1.0,'Created date : November 22, 2007,'Prograrnrner : Usman. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * *,.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * *
;Microcontrofer Pin/Port Assignment,.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;LCD Control PinLCD_DA equ P1LCD_RS equ P1.0LCD_RW equ P1.1LCD_E equ P1-.2
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
,' Constanta Def ini-Lion. * * * ** ** ** ** * * ** ** * * * ** ** * * * * **** **** * * *** ** **** ** **** **
,'LCD comrnand def inition; Initialization dat,a
241
747
SOFT-RSTSET4BITCONFIGENTR\'},4ODE
data 3BHdata 20Hdata 2BHdata 06H
;Cursor fnsLructionCUR_OFF dat-a OCH
CUR_LINE data OEH
CIAR_BLINK data ODH
COMB_CLIR data OtrH
SHIFT_CURL data 10HSHIFT_CURR dat-a l4HHOME_CUR data 02H
;lli:;y,l.r1' Irrj;l Iltef ionl)lj;l' ll"l,' rl,rl;r OBH
l)ll;l' ll l ,i,rl,r OI,:ll
245744 Ieknik Antarmuka dan Pemrograman I'likrokontroler AT89S52
SHIFT-DISPLSHIFT-DISPRDISP-CLR
data 18Hdata 1CH
data 01H
. * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * **
;Main Program. * ** *** * * ** * ** *** * *** ** * * ** * * * * ** ** ** * * * * ***** * * ** * ** * **
Org 0000HMain-Prog:
call rniELcD-ABitcall Write-Pattern-To-CGRAMcaff Message-DisPlaYmov A, #0C0H
call Write-Command4mov B, +B
mov A, #0H
Main-Prog-Loop:push ACC
call WriLe-Data4pop ACC
inc Ad)nz B, Main-Prog-Loopsjmp $
Message-DisPlaY:mov A. #080Hcall Write-Command4mov DPTR, #Message-Datacalt Send-Text-To LCD
ret
Message-Dafa:db'11ry1q6fER CGRAM:''0
- * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Send-Text-To-l,CD:cl-r Amovc A, @A+DPTR
jz Send-Text-To LCD-Exitcall Write-Data4inc DPTR
sjmp Send-Text-To*LCD
Antarmuka dengan Display
Send_Text_To_LCD_Exi L :
ret
Wrl te_Pat t ern_To_CGRAM :
mov DPTR. #Pattern_Datamov R0, #Bmov A, #40Hcall Write_Command4
Wr j- te_Pa t t ern_To_CGRAM_Loop 1 :
mov B, #BWr i t e_Pa t t ern_To_C GRAM_Loop2 :
C-LT AmOVc A, @A+DPTR
call Write_Dat.a4inc DPTRdjnz B, Y'irite_Pattern_To_CGRAM_Loop2djnz R0, WriLe_Pattern_To_CGRAM_Loop1ret
Pattern Data:db 1FH, 15H, 15H,db 11H, 11H, 1BH,db 11H, ILH, OEH,
db 1FH, 1FH, OEH,db 1FH, 15H, 1FH,db 03H,03H,01H,db 1BH, 1CH, 1EH,db 1FH,04H,04H,
1FH,15H,15H,1FH, 1BH, I]H,OA]J, 1BH, 11H,O4H, OEH, 1FH,15H,1FH,15H.OFH, OFH,1FH,1FH,1FH,1FH,1FH, 11H, 11H,
1FH, O
1l-H,011H,01FH, O
1FH, O
_L]]n, u
1FH, O
11H, O
, * *** * ** * * ** *** * ** * * * * *** ** * * ** * * * * ** ** ** * ** **** * * ** ** **; LCD Cont rol RouLine- * * * * * * *** ** **** ** * * *** ** ** ** ** ** **** * * *** * *** **** * * * * **I II i TLCD-4Bi L :
mov B, #3mov A, #SOFT_RST
rrriLLCD_4Bit. Loopl:mov LCD_DA, Aclr LCD_RSr:1r LCD RW
:;(r1. b L(:l) I;l
Il( )l).lt l,('l) l:
741Ieknik Antarmuka dan Pemrograman Mikrokontroler AT89S52
call DelaY-20djnz B, rnitl,cD-4Blt-LooplMO\,r A, #SET4B]TMOV LCD-DA, Asetb LCD-EnopCIT LUU-.L
call DelaY-20mov DPTR, #Initial -Datamov B, #5
InitLCD-4Bit LooP2:clr Arnovc A, @A+DPTR
call Write-Command4inc DPTR
djnz B, rnitlCD-4Bit Loop2
ret
Init-ial-Data:db, CONFIG, DISP-OFF' DISP-CLR' ENTRYMODE'
CUR-OTF
. *** *** * ** **** ** ******* ** ** * * ** * * * * *** * * * * ** ** ** *** *** **
Clear-DisPlaY:mov A, #DISP-CLRcall Write-Command4ret
Antarmuka dengan Display746
. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * ** * *
Writ.e_Command4 :
push ACC
anIseLbnopc1rcallret
or1or1an1c1rc1rsetb LCD_E
LCD-DA, ALCD-E
LCD_EDelay_2 0
A, #OFHLCD-DA, #OFOHLCD-DA, ALCD_RSLCD_RW
nopc1rpopswaporlor1an1setbnopclrcal-1ret:
LCD-EA r'-r-
AA, #OFHLCD_DA, #OFOHLCD-DA, ALCD-E
LCD_EDelay_20
. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Write-Data4:push ACC
orl A, #oFHorl LCD-DA, #0F0H
anl LCD-DA, A
setb LCD-RSc1r LCD-RWsetb LCD-Enopclr LCD-Epop ACC
swap A
or1 A, #0FHor'1 LCD I)A, il 0 f"0lI
- * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * *
Delay_20:mov R7, #l-call De1ay10ret
De1ay10:mov R3, #20
DelaylOloop:mov R2,#255d)nz R2, $dj nz It-l , DelaylOloopcl-j rrz Il / , I)r'l ;ry1 0I ('t
749
i
I
248
Antarmuka dengan DisplayIeknik Antarmuka dan Pemrograman Mikrokontroler AT89S52
Long-Delay:mov R6, #200
Long-De1ay-Loop:call DelaY-20djnz R6, Long-Delay-Loopret
end
6.4 tcD GRAFIK 240X64Berbeda dengan LCD karakter, LCD grafik bisa menampilkan gambar dan
juga karakter. Secara sederhana prinsip kerja LCD grafik sama dengan LED
dot matriks dengan ukuran dot atau piksel yang lebih kecil. Gambar atau
grafik dibentuk dengan memprogram (menyalakan atau mematikan) piksel.
ietiap piksel diwakili oleh 1 bit data. Semakin banyak piksel semakin banyak
pula data yang diperlukan. Seperti halnya LCD karakter, data display
dikirimkan ke RAM. Oleh karena banyaknya data yang diperlukan, maka
RAM yang dipakai juga berkapasitas besar, 2 KB * 64 KB'
LCD grafik yang akan dibahas dalam buku ini adalah LCD grafik dengan
resolusi 240 x 64 piksel dari perusahan Data Image corportion. LCD ini
menggunakan IC pengendali T6963C dari Toshiba, sehingga pembahasan bisa
diterapkan ke semua LCD grafik yang menggunakan IC ini sebagai
pengend.ali. Diagram blok LCD ini ditunjukkan oleh Gambar 6'18'
CONTEOLLER
T6963C
CSLT(
64 COI!,IrMoN DRVER I,Ail0x1
r+LCD PAI.IEL240X64 DOTS
240 sEG
SEGi/ENT ORIVEET6A39xS
t:]
EH sRPJI.{
ThernristorRT1:3.3H
?l5C17661
DC TO DIVLCD
oro+DE]
iRD,/CE
-la/n -------l
/RESET------.>FS
-}/1 /R ->
!DD,V55
Gombqr 6.18 Diogrom Elok l"(D Grofik 240 x 64
IC T6963C sebagai pengendali akan mengendalikan seluruh fungsi LCD.Sebagai driver yang akan memberikan sinyal untuk menyalakan LCDdigunakan sebuah T6A40 dari Toshiba sebagai driver common (64 common)dan 3 buah IC T6A39 sebagai driver segmen (240 segmen). Untuk menye-diakan tegangan ke IC driver dan LCD, digunakan pengubah DC ke DCSC17661. Sedangkan untuk menyimpan data display, LCD dilengkapi dengan
SRAM (Sratic RAM) sebesar 8 KB. T6963C bisa mengalamati RAM sampai 64KB dan hanya RAM statis yang bisa digunakan karena T6963C tidakmendukung RAM dinamis (DRAM). Mikrokontroler berkomunikasi dengan
LCD melalui bus data dan sinyal-sinyal pengendalinya yang disediakan olehT6963C. Gambar 6.19 memperlihatkan pin-pin yang dimiliki oleh LCD,sedangkan T abel 6.7 memperlihatkan fu ngsi-fu ngsinya.
LCD bekerja dengan tegangan 5 Volt (TTL). Catu daya dihubungkan ke pinVDD (+5 Volt) dan pin VSS (GND). Pin FGND (frame GND) juga bisa
dihubungkan ke GND. Pin ini terhubung dengan bezel (bracker LCD) yanglrisa berfurrgsi sebagai anti listrik statis (electro static). Tegangan kontrasclirnasukkarr rrr<'lalui pin PWM Qtulse width modulation). Tegangan ini bisa
250 Ieknik Antarmul<a dan Pemrograman Mikrokontroler 4T89552
diperoleh dengan menggunakan sebuah potensiometer 10K - 20K, seperti
pada LCD karakter.
Gombor 6.19 Anlormuko L(D Grofik
Antarmuka dengan Display
Bus data terdiri atas 8 bit (DB0 - DB7) dan bersifat 2 arah (bacaltulis). Operasi
baca/tulis dikendalikan oleh RD dan WR. Pin RD = 0 dan Wn = f berarti
membaca data dari LCD, sedangkan RD = I dan Wn = O berarri menulis dara
ke LCD. Pin CD akan menentukan apakah byte yang sedang dibaca atau
ditulis adalah command (instruksi) atau data display. CD = t berarti instruksi
dan CD = 0 berarti data display. Sebelum operasi baca/tulis dilakukan, pinCE hu*r berada di logika rendah untuk mengaktifkan LCD. Dalam banyakaplikasi, pin ini bisa langsung dihubungkan ke GND.
Pin FS (font select) digunakan unruk memilih ukuran karakter yang akanclitampilkan dalam area 8 x 8. ]ika FS = 0 karakter akan ditampilkan denganrlkuran 5 x 7 dan jika FS : 1 karakter yang akan ditampilkan berukuran 6 x 8.I)ada area gralik dengan ukuran font yang dipilih 6 x 8, maka bit ke-6 dan bitkt, 7 rllli tl;rt;r tlis;rl:ry ticlak akan ditampilkan di LCD. Pin RST adalah pinrtrrlttk rrt,'t,',,,'t l(: 'l'('()():l( l tlurr bcrsilat aktif n,ndah. Sctelah catu claya
25r
Ltl tr_DILrl D_trlLrl tr_01LC D-N3Lrl D-n4Lf,tr triLrl D_trELC 0_t'7
Lrl E_R tlLf, TI-IIUELCD-CDLC E-L: ELrl0_F s
LCE RST
DBOoEl r.,0[DBiEI 83n84E|ES Ptrriul086NB?
F:E 'r,,ss
1'r.JFl
CDEE Fr:itloF ! l,lf,DEEi t,lrll
No Nama Fur,g, Keterangan
9 RST- Reset, unruk mereset LCD(aktifrendah)
Input, RST { akan mereser
LCD
10 PWM Tegangan unrul< kontras
LCDInput, tegangan atau sinyalPWM
11 DBl
Data Bus (DBO - DB7) Input/Output
72 DBO
13 D83
t4 DB2
15 DB5
16 D84
t7 DB7
18 D86
19 NC1 Tidak dipakai
20 FS Font select, pernilih ukuranfont
Input, FS = I font6x8, FS=0
5x7
Tobel 6.7 Fungsi-fungsi l(oki LtD 6rofik
No Nama Fungsi Keterangan
1 Vss Caru daya (0 V atau CND)
2 FGND GND untuk frame LCD
J NCO Tidak dipakai
4 VDD Catu daya (+5Q
5 RD Read, sinyal kendali baca
(aktif rendah).Input, RD =Odan WR=lberarti operasi baca
6 WR Wri te, sirlyal kendali baca
(aktif rendah)Input, RD =1dan WR=0berarri menu-lis ke LCD
7 D Command/Dara pemilihregister (instruksi atau data)
Input, C/D = 1, register
instruksi
CYD +, register data
8 CE Chip Enable,untukmengaktifkan LCD (aktif
rendah)
Input, CE =0LCDaktif dan
siap menerima data atatr
instruksi. ('Jl I l.( ll ) tirlirkaktif
252 Teknik Antarmuka dan Pemrograman l'likrokontroler AT89S52
diterapkan ke LCD, pin ini harus berada di logika rendah minimal selama 6
siklus clock T6963C. Subrutin berikut akan mereset LCD.
ReseI_LCD:clr LCD-RSTnopnopsetb LCD-RSTret
6.4.1 PEMROGRAMAN TCD GRAFIK
Seperti halnya LCD karakter, pemrograman LCD grafik juga akan mengatur
fungsi dan mode kerja yang dimiliki oleh IC pengendali T6963C. Tidak semua
fungsi dan mode kerja T6963C bisa dikendalikan mengingat rangkaian
internal LCD telah mengatur fungsi-fungsi T6963C agar sesuai dengan
ukuran LCD yang ditanganinya.
6.4.1.1 lnisiolisosi ICD Grofik
Sebelum bisa menerima data dan menampilkannya, T6963C harus diinisiali-sasi untuk mengatur fungsi dan mode kerja LCD. Inisialisasi ini dilakukan
setelah catu daya dinyalakan dan setelah LCD di-reset. Dalam inisialisasi inijuga akan ditentukan alamat awal grafik (GH = Graphic Home), area grafik
(GA = Graphic Area), alamat awal teks (TH = Text Home) dan area teks (TA =Text Area) yang pada dasarnya merupakan pemetaan memori (RAM
mapping) agar tidak terjadi tumpang tindih antara data teks dan grafik.
Secara sederhana pemetaan RAM LCD bisa diterangkan sebagai berikut. GH
merupakan alamat awal RAM untuk data grafik atau alamat awal untukmenyimpan data atribut teks pada mode teks atribut (di mana grafik tidak
ditampilkan). Sedangkan GA memperlihatkan banyaknya byte data grafik
dalam satu baris. TH adalah alamat awal di RAM untuk data teks, sedangkan
TA memperlihatkan berapa karakter yang bisa ditampilkan dalam satu baris
teks. Data yang tersimpan di alamat GH akan ditampilkan sebagai 6 atau 8 bit(piksel) pertama di baris paling atas, sedangkan data yang tersimpan di TH
akan ditampilkan sebagai karakter pertama pada baris paling atas LCD. GH
bisa diatur sebelum atau setelah TH begitu juga sebaliknya.
Antarmuka dengan Display
Untuk LCD dengan resolusi 240 x64 diperlukan 1920 byte untuk mode grafikpenuh jika ukuran font 8 x 8 (tiap baris terdiri atas 240 piksel atau 240/8 = 30byte. Oleh karena ada 64 baris, maka total byte yang diperlukan 64 x 30 =1920 byte). Untuk mode teks dengan ukuran font 8 x 8, dalam satu baris bisamenampilkan 240/8 = 30 karakter. Satu karakter membutuhkan 8 pikselkolom dan 8 piksel baris, sehingga LCD dengan ukuran 240 x 64 bisamenampilkan karakter sebanyak (24018) x 6al8) = 240 karakter. Dengandemikian untuk mode teks diperlukan data sebesar 240 byte. |adi memoriyang diperlukan untuk mode grafik dan teks penuh adalah sebesar 2160 byte.
lika data grafik (GH) diatur untuk menempati alamat awal RAM (0000H),maka alamat awal data teks (TH) harus berada minimal 1920 byte sesudahnyauntuk mode grafik penuh (0780H). Area lain digunakan untuk menyimpandata karakter CGRAM dan dara atribut. Gambar 6.20 memperlihatkan contohpemetaan memori LCD.
Area CGRAlvl (1[24 byte)
Area Teks fl2fit1 byte)
Area data atribut
Area Grafik (512tJ byte)
251
1 FFFH
l CtlttH1 EFFH
l TtltlH1 EFFH
1 4[[H1 SFFH
tt[[[H
Gombor 6.20 (onloh Pemeloon RAM
154 Ieknik Antarmuka dan Pemrograman I'likrokontroler AT89552
Seperti telah dijelaskan, GA dan TA menentukan berapa byte data dan berapa
kolom karakter yang dibutuhkan per baris. GA dan TA harus ditentukandengan melihat pin FS, font dipilih pada 8 x 8 atau 6 x 8, dan juga ditentukanagar memudahkan pada saat pengalamatan memori. Pada mode 6 x 8, bit ke-7dan ke-6 data akan diabaikan. Misalnya jika font diatur pada 8 x 8, maka GAdan TA bisa ditentukan sebagai berikut. Dalam satu baris display ada 240 bit,sehingga untuk menampilkan grafik satu baris penuh diperlukan 240/8 = 30
byte. Ini berarti juga bisa menampilkan 30 karakter. Oleh karena itu, GA dan
TA bisa ditetapkan sebagai 30 atau 1EH.
Setelah GH, GA, TH dan TA ditentukan, data-data tersebut harus dikirimkanke IC pengendali LCD. Ada hal yang membedakan antara LCD karakter danLCD grafik. Pada LCD karakter, instruksi hanya terdiri atas 1 byte, sedangkan
pada LCD grafik sebuah instruksi bisa disertai dengan 2 byte atau 1 byte data(seperti GH, GA, TH atau TA). Selain itu, sebelum mengirimkan byteinstruksi atau data selanjutnya, diharuskan untuk membaca status LCDmengingat lembaran data TC6963C tidak secara ;'elas menyebutkan waktuyang diperlukan untuk setiap instruksi. Oleh karena itu, cara waktu tunda
sangat tidak disarankan untuk diterapkan pada LCD grafik.
Status LCD dibaca dengan operasi pembacaan, CD = t, nO = O, WR= t dmCf = O. LCD akan memberikan data status di bus data. Status dibaca dengan
mengecek bit 0 (STA0) dan bit I (STAI) secara bersamaan. Jika STA0 = 0,
artinya sebuah instruksi sedang dieksekusi; dan jika STA0 = 1, LCD siap
untuk menerima instruksi atau data selanjutnya. STA1 memperlihatkanproses pembacaan atau penulisan internal tengah berlangsung. STA1 = 0proses tersebut sedang berlangsung, dan jika STA1 = 1 LCD siap untukmenerima data atau instruksi yang baru. Dengan demikian mikrokontrolerharus menunggu sampai kedua bit tersebut di-set sebelum mengirimkan data
atau instruksi ke LCD. Berikut adalah subrutin pembacaan status LCD dalambahasa assembler 8051. Tabel 6.8 memperlihatkan keterangan tiap bit yangdibaca.
LCD_Read_SLatus :
mov LCD_DAT, #0FFHsetb LCD_CDc1rmov
LCD-RDA, LCD-DAT
setb LCD RD
Antarmuka dengan Display 255
cl neret
a, #03H, LCD_Read*SLaLus
Instruksi untuk menentukan alamat GH, GA, TH, dan TA merupakaninstruksi dengan 3 byte, 2 byre data (GH dan GA atau TH, dan TA), dan 1
byte instruksi. Byte data dikirim terlebih dahulu diikuti oleh byte instruksi.
Pada saat pengiriman byte data, LCD harus berada pada mode data (pin C Dberada di logika rendah), sedangkan pada saat pengiriman instruksi LCD
berada di mode instruksi (CD berada di logika tinggi). Berikut adalah
subrutin untuk mengirim data (Data_Write) dan instruksi (Cmd_Write).Dataatau instruksi yang akan dikirimkan disimpan di akumulator. Sebelum data
atau instruksi dikirimkan, status LCD dibaca terlebih dahulu dengan
rnc'ma n ggi I str brtrti n LCD_Rea d*S ta tu s.
D:rl;r Wr il,':l ,ul:l r /'\( '( '
Tsbel 6.8 Keterongon Bil Slotus L(D
Bit Fungsl Keterangan
Bit-0
(sTAo)
Bir-1
(srA1)
Bit starus yang memperlihatkan apakah
LCD liap
menerima instruksi atau tidal<
Bit status yang memperlihatkan apakah
ICDsiap memtaca atau menrilis data
Bit starus pada mode pembacaan data auto(auto read)
Bit status pada mode penulisan data auto(,autl uvnre)
Tidak dipakai
Bit status yang memperlihatkan mode
operali LCD
FIag error pada mode screen peek dan
screen copy
Bit kondisi kedip
0 = sibuk
1 = siap
0: sibuk
1 =-1iap
0 = sibuk
1: sfap
0 = tidak aktif
1 = aktif
0 = sibuk
1 = siap
Bit-2
(sTA2)
Bit-3
(sTA3)
Bit-4
Bit-5
(s:rAs)
Bit-6
(sTA6)
Bit-7
(srA7)
0 = tidak error
1 = eror
0 = display mati
1 = display normal
anI .), #03H
2s6 Ieknik Antarmuka dan Pemrograman llikrokontroler AI89S52
cafl LCD_Read-Statusclr LCD*CDpop ACC
Dara_Writel:mov LCD-DAT, Aclr LCD-WRsetb LCD_WR
ret
Cmd_Write:push ACCcall LCD_Read_StatusSCTb LCD-CDpop ACCcalf Data-Writelret
Data yang akan dikirimkan disimpan di DPTR, sedangkan instruksi disimpan
di A. Berikut adalah subrutin untuk mengirm 2 byte data dan 1 byte
instruksi.
Send-3Byte-Command:push ACC
mov A, DPLcall Data-Wri-temov A, DPH
call Data_WriLepop ACC
call Cmd_Writeret
Instr-uksi unruk menentukan alamat GH adalah 42H (SET-GH = 42H),
menentukan area grafik adalah 43H (SET:GA = 43H), alamat TH adalah 40H
(SET-TH = 40H) dan menentukan area teks adalah 4lH (SET-TA = 41H).
Subrutin-subrutin di bawah ini akan menentukan GH, GA, TH dan TA.
Alamat GH berada di 0000H (GH) dan GA = 00iEH. Sedangkan alamat THberada di 0780H (TH) dan TA = 001EH. Ukuran font adalah 8x8.
Graphj-c_Setting:mov DPTR, #GH
mov A, #SET_GHcall Send_3Byte-Commandmov DPTR. #GAmov A, #SET GA
Antarmuka dengan Display
call Send_3Byte_Commandret
Text_Setting:mov DPTR, #THmov A, #SET_THcall Send_3Byte*Commandmov DPTR, #TAmov A, #SET_TAcall Send_3Byte_Commandrel:
Setelah menentukan GH, GA, TH, dan TA atau pemetaan memori, halselanjutnya yang harus dilakukan dalam inisialisasi LCD grafik adalah
menentukan mode LCD (mode ser). Mode ini akan menentukan apakah LCDakan menampilkan grafik dan teks, dengan pola penggabungan OR, EXORatau AND, atau LCD hanya akan menampilkan teks (mode atribut teks).
Selain itu juga akan menentukan apakah teks yang akan ditampilkan berasal
dari CGROM internal atau dari CGRAM. Instruksi ini merupakan instruksi 1
byte dengan tidak memerlukan data. Byte instruksinya adalah sebagai
berikut.
DB7 D86 DB5 DB4 DB3 D82 DB1 DBO
I 0 0 0 CG MD2 MD1 MDO
Bit MD2 - MDO menentukan mode display:
l. MD2-MDO=000,modeOR
2. MD2-MDO:001. mode EXOR
3. MD2-MDO=011,modeAND
4. MD2 - MDO = 100, mode atribut teks
Bit CG menentukan apakah display akan menampilkan teks dari CGROMinternal atau dari CGRAM. CG = 0, karakter 00H - 7FH akan ditampilkandari CGROM internal dan karakter 80H - FFH akan ditampilkan dariCGRAM. CG = 1 semua karakter (00H - FFH) akan ditampilkan dariCGRAM. Subrutin di bawah ini akan mengirim pengaturan mode ke LCD.Gambar 6.21 memperlihatkan mode penggabungan grafik dan teks.
258 Teknik Antarmuka dan Pemrograman I'likrokontroler ATB9552
ffi.,AI{D'
Keterangan bit-bit instruksi pengaturan mode display:
1. Bit G, bit yang menentukan apakah grafik akan
G = 1 data grafik akan ditampilkan dan G = 0ditampilkan. Pada mode teks atribr.rt, bit C harus
Antarmuka dengan Display
2.
mode ini hanya akan menampilkan teks, tetapi data atribut menempatialamat grafik.
Bit T, bit yang menentukan apakah data teks akan ditampilkan atau tidak.T = 1, teks akan ditampilkan; dan T = 0, data teks tidak akan ditampilkan.
Bit C, bit yang menentukan apakah kursor ditampilkan atau tidak. C = 1,
kursor akan ditampilkan; dan C = 0 jika kursor tidak akan ditampilkan.
Bit B, bit yang menentukan apakah kursor akan berkedip atau tidak. B =I kursor akan berkedip dan B = 0 kursor tidak berkedip.
Submtin di bawah akan mengatur mode display. Data pengaturan didefinisi-kan dalam konstanta DISPLAY MODE.
Set_Display_Mode :
mOV A, #DISPLAY-MODEcall Cmd_Writeret
Dengan dikirimkannya mode display, LCD telah siap untuk menerima data
dan menampilkannya. Subrutin di bawah merupakan subrutin inisialisasi
LCD grafik. Subrutin ini akan memanggil subrutin-subrutin yang telah
dijelaskan di atas.
Initialize LCD:call Reset LCDcall Graphic*Sett-ingcall TexL_Settingcall Set LCD_Modecall Set_Dlsplay*Moderet
6.4.1.2 lnstruksi Penempolqn Kursor
Instruksi ini akan menempatkan posisi kursor di display. Berbeda dengan
LCD karakter di mana kursor bisa bergeser setelah pembacaan atau penulisan
data, di LCD grafik posisi kursor tidak berubah. Instruksi ini terdiri atas 3
byte; byte pertama menentukan posisi kolom (posisi X), byte kedua adalah
posisi baris (Y), sedangkan byte ketiga adalah byte instruksi ZlH(,987_CUSO$. Berikut adalah subrutinnya. DPTR menyimpan posisi kursor.l'osisi kolorn disirnpan di DPL dan posisi baris disimpan di DPH.
259
Set*LCD_Mode:mov A, #LCD_MODEcali Cmd_Writeret
ditampilkan atau tidak.data grafik ticlak akan
di st-t klrt'rlr wlrllrrrptrrr
WffiJ.
4,
Grafik Teks
(aJ Data Grafik dan Teks
[bJ Mode Fenggaburrgarr
Gombor 6.21 Mode Penggobungon Grofik don Teks
Setelah mode LCD ditentukan, sebenarnya proses inisialisasi telah selesai
dilakukan. LCD telah siap untuk menerima data display, namun pada saat iniLCD masih belum bisa menampilkannya karena display dalam keadaan mati.
Untuk itu, di proses inisialisasi ini bisa ditambahkan pengiriman instruksipengaturan mode display. Instruksi ini akan menentukan apakah grafik, teks,
atau kursor ditampilkan atau tidak, dan juga apakah kursor akan diaturberkedip atau tidak. Instruksinya terdiri atas 1 byte.
DB7 D86 D85 D84 DB3 DB2 DB1 DBO
I 0 0 1 G T (, B
,,EXOR',,oR,,
Antarmuka dengan Display
yang menunjukkan alamat dan I byte adalah byte instruksi 24Ll
(SET-ADDR\ Byte pertama adalah alamat orde rendah dan byte kedua
adalah alamat orde tinggi. Berikut adalah subrutinnya, alamat RAM disimpan
di DPTR dan juga contoh subrutin mengirim data 34H ke alamat 0000H.
Set_Address-Pointer :
mov A. #SET-ADDRPcall Send*3Byte-Commandret
Send_DaLa:mov DPTR, #0000Hcall Set-Address-Pointermov A, #34Hcalf DaLa-Writeret
6.4.1.5 Inslruksi Penulison dqn Pembqcoon Dotq
Instruksi ini digunakan setelah menulis atau membaca I byte data dari RAM
untuk menentukan apakah alamat RAM yang tersimpan di penunjuk alamat
(address pointer, ADP) berubah atau tidak. Seperti telah dijelaskan bahwa
pada LCD grafik, kusor dan juga penunjuk alamat tidak bisa diatur pada
inisialisasi untuk naik atau turun secara otomatis. Untuk itu perlu dikirimkaninstruksi ini setelah mengirim atau membaca 1 byte data RAM. Instruksi inimerupakan instruksi 1 byte, yang mengatur apakah penunjuk alamat berubah
(naik atau turun I byte) atau tetap setelah penulisan dan pembacaan data.
Tabel 6.9 memperlihatkan instruksi ini.
Tobel 6.9 lnslruksi Penulison don Pembucoon Doto
26r260 Teknik Antarmuka dan Pemrograman l'likrokontroler AT89552
Set_Cursor_Pointer :
mov A, #SET_CURSORcafl Send_3Byte_Commandret-
Pada display dengan ukuran 24O x64, posisi X (kolom) akan mempunyai nilai00H - lDH, dan posisi Y (baris) akan mempunyai nilai 00H - 07H.
6.4.1.3 lnslruksi Pemilihon Polo Kursor
Instruksi ini digunakan untuk memilih pola kursor, tentu saja untukmelihatnya kursor harus ditampilkan dengan instruksi mode display. Ada 8pola kursor yang bisa dipilih mengingat I karakter membutuhkan 8 baris,yaitu pola kursor 1 baris, 2 baris, sampai 8 baris. Instruksi ini merupakaninstruksi 1 byte, 1 baris kursor dipilih dengan mengirimkan instruksi A0H, 2
baris dipilih dengan mengirimkan A1H, dan seterusnya sampai 8 baris, makainstruksi yang harus dikirimkan adalah A7H. Berikut contoh subrutin untukmemilih pola kursor 2 baris.
Set._Cursor_Pat tern :
mov A, #0A1Hcall Cmd_Writeret.
".tN::ZlWllV;1
Kursrlr I Uans l{urs'rr 2 Earis Kursnr B Earis
Gombor 6.22 Polo Kursor
6.4.1.4 lnstruksi Penuniuk Alqmot RAM
Instruksi ini digunakan untuk menentukan alamat awal RAM pada proses
transfer data dari atau ke RAM LCD. Alamat memori yang ditunjuk harussesuai dengan pemetaan memori yang telah ditentukan pada proses
inisialisasi, kecuali data yang dikirim atau dibaca bukan rlall rrntukditampilkan di layar LCD. lnstruksi ini tcrcliri atas 3 byt(',2lrytr';rtlrl:rlt rlrrtrt
Kursnr B EarisKursur 1 BarisInstrulcsi Fungsi Keterangan
COH Penulisan data, ADP naik WR-INC-ADP
C1H Pembacaan data, ADP naik RD INC ADP
C2H Penulisan data, ADP turun WR_DEC_ADP
C3H Pembacaan data, ADP rurun RD DEC ADP
C4I I
(:51 I
Penulisan data, ADP tetap WR ADP
l'r'nrlrrt lurn rlata, ADP tctap RD ADP
757
!
iTeknik Antarmuka dan Pemrograman l'likrokontroler AI89S52
Berikut adalah contoh penulisan I byte data (34H) ke alamat 0000H.Penunjuk alamat diatur agar naik 1 byte setelah penulisan, sehingga
penunjuk alamat menjadi 0001H.
Send_Data:mov DPTR, #0000Hcall Set_Address_Pointermov A, #34Hcall Data_Writemov A, #WR-INC-ADPcall Cmd_Writeret
6.4.1.6 Pengolurqn Register Offset
Instruksi ini digunakan dalam menentukan alamat RAM pada saat menampil-kan karakter yang dibangkitkan melalui CGRAM. Pemetaan memori dalam
proses inisialisasi hanya menentukan area RAM untuk data grafik dan area
teks, sedangkan tempat menyimpan data untuk karakter yang dibangkitkandari CGRAM harrrs ditentukan terpisah dari proses inisialisasi. AlamatCGRAM yang bisa dipakai bergantung pada bit G pada instruksi modedisplay. Seperti telah diterangkan, pada saat G = 0, karakter yang akan
dibangkitkan dari CGRAM adalah karakter 80H - FFH (128 karakter),sedangkan pada saat G = 1, semua karakter 00H - FFH (256 karakter) akan
dibangkitkan melalui CGRAM. Setiap karakter membutuhkan 8 byte, karenaitu memori yang dibutuhkan untuk CGRAM adalah 1024 byte (1 KB) pada G
= 0 dan 2048 byte (2 KB) pada saat G = 1.
Misalnya 8 buah karakter (80H - 87H) akan dibangkitkan melalui CGRAMdengan alamat awal CGRAM 0870H. Maka hal pertama yang harus dilakukanadalah mengirim data karakter (8 byte) ke RAM LCD dengan alamat awal0870H (menggunakan insrruksi penunjuk alamat RAM). Sebelum
menampilkannya ke layar, dengan mengirimkan data 80H - FFH ke area teks
di RAM, instruksi pengaturan register offset harus dikirimkan terlebihdahulu. Cara penentuan register offset adalah sebagai berikut. Gambar 6.23
memperlihatkan hubungan antara alamat CGRAM dengan karakter yangdibangkitkannya.
Antarmuka dengan Display
415 l\1 d 41l A'12 411 A10 Aq A,I pa A1 A]
Regisier Oflsel l(arakter CGRAlvl Scan Baris
Gumbor 6.23 Hubungon Alomol (GRAM dengon l(orokternyo
Lima bit atas dari alamat CGRAM (A1l -A15) adalah register offset, S bitberikutnya (A3 - Al0) adalah karakter CGRAM (80H - FFH jika bit G = 0atau 00H - FFH jika G = 1), 3 bit terakhir akan ditentukan sendiri olehT6963C. Jika alamat awal CGRAM adalah 0870H (0000 1000 0111), makaregister offset adalah 01H.
Instruksi register offset merupakan instruksi 3 by.te. Byte pertama adalahregister offset, byte kedua adalah 00H. Kedua byte ini harus dikirim sebagai
data. Dan byte terakhir adalah byte instruksi 22H (SE7:OFFSEI). Subrutinuntuk mengatur register offset adalah sebagai berikut.
Set_Of fset_Regi ster :
mov DPTR, #OFFSET_REGmov A, #SET-OFFSETcall Send_3Byte_Commandret
Contoh program di subbab selanjutnya akan memperlihatkan bagaimanamenampilkan karakter yang dibangkitkan melalui CGRAM.
6.4.1.7 Penulison dqn Pembocqqn Doto OtomqtisInstruksi penulisan dan pembacaan otomatis (auto write/rea@ sangat bergunadalam menulis atau membaca blok data ke atau dari RAM, misalnya pada saat
mengirimkan data grafik untuk 1 layar penuh. Pada instruksi ini tidakdiperlukan mengirim instruksi penulisan atau pembacaan untuk mengaturpenunjuk alamat seperti jika mengirim atau membaca 1 byte data, penunjukalamat akan secara otomatis naik I byte setelah 1 byte data dikirim ataudibaca.
263
164 Ieknik Antarmuka dan Pemrograman l'1ikrokontroler AT89552
Tobel 5.1 0 lnslruksi Penulison don Pemboroon D0t0 0tomolis
Untuk mengaktifkan mode otomatis pada operasi penulisan atau pembacaan,
setelah alamat awal transfer data ditentukan dengan instruksi penunjukalamat, maka instruksi untuk mengaktifkan mode otomatis harus dikirimkan.Setelah itu LCD siap untuk menerima atau mengirim blok data. )ika semua
data telah terkirim atau terbaca, mikrokontroler harus mengirimkan instruksi
untuk mematikan mode otomatis, jika tidak LCD tidak akan bisa memproses
instruksi selanjutnya karena pada mode ini semua byte diperlakukan sebagai
data.
Contoh subrutin berikut akan mengirim 1920 byte data dalam mode
otomatis. Data grafik yang akan dikirimkan didefinisikan di alamat
Graphic-Data (tidak ditunjukkan di sini). R1 dan R2 digunakan sebagai
pencacah 64 dan 30 (64 x 30: 1920 byte).
Send*Ful l_Graphic_Data :
mov DPTR, #GH
cal-1 Set_Address_PoinLermov A. #AUTO_WR_ONcall Cmd_Writemov DPTR, #Graphic_Datamov R1, #64
Send_F'ul 1_Graphic_Data*Loop1 :
mov R2, #30Send_Fu 1 l_Graphi c_Da t a_Loop2 :
clr Amovc A, @A+DPTR
call Data*Auto_WriteInC DPTRdjnz R2, Send_FuI1*Graphic-Data-Loop2djnz R1. Send_Fu11_Graphic_Data-Loop1mov A, #AUTO WR-OFPcall Cmcl Wri ter() t
Antarmuka dengan Display 265
6.4.1.8 lnstruksi Screen Peek don Screen Copy
Instruksi screen peei digunakan untuk membaca I byte data yangditampilkan. Data yang terbaca merupakan data display penggabungan antara
grafik dan teks dengan pola gabungan ditentukan oleh mode LCD pada saat
inisialisasi. Instruksi screen peek ini dikirimkan setelah mengirimkan alamatdisplay yang akan dibaca melalui instruksi penunjuk alamat. Setelah instruksiini dikirimkan, yang didefinisikan sebagai instruksi 1 byte EOH, bit 5TA6pada saat pembacaan status harus dibaca. Bit 5TA6 akan di-set jika alamatyang dikirimkan berada di luar area grafik dan akan direset jika alamat yangdikirimkan berada di dalam area grafik. Jika 5TA6 = 0, data bisa langsung
dibaca dengan instruksi pembacaan 1 byte. Jika 5TA6 = 1 T6963C akan
mengabaikan instruksi ini.
Instruksi screen copy, untuk membaca 1 baris data yang ditampilkan di layarLCD kepada memori area grafik dengan alamat awal ditentukan olehinstruksi penunjuk alamat. Instruksi ini akan diabaikan oleh T6963C jikagrafik dalam mode atribut teks. Seperti halnya instruksi screen peek, bit5TA'6 harus dicek setelah instruksi screen copy (EBH) dikirimkan. Instruksiini hampir sama dengan instruksi screen peeking, bedanya instruksi ini akan
membaca 1 baris data.
6.4.1.9 lnslruksi Atribut Teks
Instruksi ini digunakan untuk mengatur fungsi-fungsi atribut pada mode atri-but teks. Instruksi ini akan mengatur mode display pada setiap karakter/teksyang ditampilkan. Seperti diketahui, pada mode atribut teks data grafik tidakakan ditampilkan di layar LCD mengingat pada mode ini area grafik dipakaiuntuk menyimpan data atribut. Ada 2 fungsi atribut: fungsi gambar negatif(negative image/inverse video) dan fungsi kedip (blinking). Area RAM mode
atribut adalah sama dengan area grafik yang ditentukan pada saat inisialisasi.Walaupun pada mode atribut, data grafik tidak akan ditampilkan; grafik tetapharus ditampilkan melalui instruksi mode display. Tabel 6.11 memperlihat-kan fungsi-fungsi atribut dengan byte instruksinya. Hanya 4 bit bawah dariinstruksi yang berpengaruh.
Untuk rnt.rrgaktifkan fungsi atribut, cukup dengan mengirimkan salah satu
byte instrrrksi yirng I('l('anturn dalarn Tabel 6.-lI ke area RAM atribut (area
lirirlik), l),rl,r,rlrrl'rrl ilrrtrrk klrruktcr/t('ks l)crtalna yang nrcncrnPati alarnilt
InsEul$i Fungri Keterangan
BOH Penulisan otomatis ON AUTO WR ON
82H Penulisan otomatis OFF AUTO*WR-OFF
BlH Pembacaan otomatis ON AUTO-RD-ON
83H Pembacaan otomatis OFF AUTO RD OFF
766 Teknik Antarmuka dan Pemrograman l'likrokontroler AI89552
awal area teks harus dikirimkan ke alamat awal RAM atribut. Sebagai contoh
jika alamat awal area teks (TH) adalah 0870H dan alamat awal area atribut(GH) adalah 0000H, maka untuk membuat karakter ke-16 meniadi berkedip
dengan mode display negatif, byte ODH harrs dikirimkan ke alamat 000FH.
6.4.t .I O lnstruksi Set/Reset Bit
Instruksi ini berguna untuk mengeset atau me-reset sebuah bit dari sebuah
alamat RAM yang ditunjukkan oleh penunjuk alamat secara individu.
Instruksi I byte ini ditentukan sebagai berikut. Bit ke-3 (D3) dari byte
instruksi menentukan apakah operasi set atau reset. Jika bit D3 = 0 berarti
akan mereset bit dan jika D3 = 1 adalah operasi set. Bit ke-0 sampai ke-2 (D0
- D2) menentukan bit mana yang akan di-set atau di-reset (000 untuk D0,
001 untuk D1 sampai 111 untuk D7). D4 - D7 dari instr-uksi harus bernilai L
Oleh karena itu, untuk instruksi reset, byte instruksi akan bernilai FOH - F7H
dan byte instruksi set akan bernilai F8H - FFH.
6.4.2 LCD GRAFIK MENAMPILKAN GAMBAR240 X 64
Contoh program berikut akan memfungsikan LCD grafik untuk
menampilkan gambar saja. Port data (LCD-DAf dihubungkan dengan P0
AT89S52. Pin kendali baca (LCD-RD dan kendali tulis (LCD-|Z,?) masing-
masing dihubungkan dengan P3.7 dan P3.6. Sedangkan pin CE, CD dan RST
dihubungkan dengan P3.3, P3.4, dan P3.5. llkuran font dipilih 8x8 dengan
menghubungkan pin FS ke GND.
Antarmuka dengan Display
F- lE Fightinu
(a) t-larnbar 1
(b) Garnbar 2
Gombor 6.24 Gombor yong Akon Ditompilkon
Alamat GH ditentukan di 0000H dengan GA : lEH (30 byte per baris),sedangkan TH ditentukan di alamat 1400H dengan TA = lEH. LCD diset padamode OR, tetapi hanya data grafik yang akan ditampilkan di layar. programakan menampilkan 2 gambar secara bergantian. Gambar yang akanditampilkan di layar ditunjukkan oleh Gambar 6.24. Perhatikan bahwa teksyang ada dalam gambar adalah teks yang dibuat pada saat membuat gambartersebut, bukan teks yang dibangkitkan oleh CGROM atau CGRAM. Databitmapnya diperoleh dengan menggunakan program Bitmap Erftractor seperriyang telah digunakan pada saat menampilkan grafik di display dot matrik,dengan memilih ukuran gambar 240 x 64. Untuk menampilkan yang lain,tinggal membuat gambar yang diinginkan dengan ukuran 240 x 64, kemudiandatanya didapat dengan Bitmap Extractor.
Seperti telah diterangkan sebelumnya, pada file bitmap monokrom, bit yangmewakili sebuah piksel akan diset jika piksel tersebut berwarna putih danakan di-reset jika piksel tersebur hitam. Sedangkan pada LCD grafik adalahkebalikannya. Oleh karena itu, sebelum dikirim ke RAM, LCD data di-komplemen-kan terlebih dahulu dengan instruksi cpl (lihat subrutinl)raw-Fl6Fighrer). Gambar yang ditampilkan di layar dipilih dengan merihatstatus bit Flag2. llka Flag] di-set, gambar I yang akan ditampilkan, dan jikallag) di-reset program akan menampilkan gambar 2. Selang waktu antaragirrnbar
.l rlurr garnhar 2 dilakukan dengan memanggil subrutin Detay.
761
Tobel 6.1 I lnslruksi Alribut Ieks
Insuul$i Furresi Keterangan
00H Display normal NORM DISP
0sH Display nesatif NEG*DISP
03H Display dilarans INH DISP
OBH Displav normal berkedip BLINK NOR DISP
ODH Display neqatif berkedip BLINK NEG DISP
OBH Display terlarang berkedip BLINK_INH-DISP
#-16 lHigfrt;tg {Frkor..
268 Teknik Antarmuka dan Pemrograman t'likrokontroler AT89552
;Program Ti-tle : "Graphic LCD: 240 x 64 Graphic";Display ModeDISPLAY_MODE eguSET_ADDRP egu
I AUTO_WR_ON equ; AUTO-WR-OFF equ
Antarmuka dengan Display 269
;File name,'Version
FlagF1ag0
: LCD Grafik 1.asm: 1.0
98H24H
OBOH
OB2H;Created date : March 23, 2001;Programmer : Usman- *** ** * * ** ** * *** ** ** ** * * * * *** ** ** ** ***** * * * ******* ** ****
,. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;Microcontroler Pin/Port Assignment- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
LCD-CE equ P3.3LCD_CD egu P3.5LCD-RST equ P3.4LCD-WR equ P3.6LCD-RD equ P3.7LCD-DAT equ P0
' * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *;Main Prog.ram. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Ors 0000HMain_Prog:
call rnitialize LCDMain_Prog_Loop:
call Draw_Fl6Fightercall Delaysjmp Main_Prog_Loop
call Graphic_settingcall Text_settingcall Set LCD_Modecall Set_Display_Moderet
. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * *ReseI_LCD:
c1r LCD_RSTnopnopsetb LCD*RSTret
,- * ** * * ** * ***** ** ******* ** ** ** **** * *** **** * ** **** ** * *****
t iraphic_Setting:mov DPTR, #GHmov A, #SET_GHca.l. L,)encl 3 Byte_Commandrn()\/ l)1,'l'll, ll(;nril( )v A. il:;l,l't' ( :n
;hternal RAM Mapping Initialize r'cD:cIr r-CD cE
' call Reset raDequ 20Hegu F1ag.0
. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; ConsLanta Declaration. * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * *
; LCD Initi alize commmand definiLionGH equ 0000HGA equ 001EHTH egu 1700HTA equ 001EH
SET-GHSET-GASET-THSET-TA
;LCD ModeLCD-MODE
egu 42Hequ 43Hequ 40Hequ 41-H
egu BOH
Ieknik Antarmulta dan Pemrograman l.likrokontroler AT89S52
call Send-3BYte-Commandre1:
- *** ** **** * * **** *** * * * * ** * * ** ** * * ** ****** * ** **** ****** **
TexL-setting:mov DPTR, #THmov A, #SET-THcall Send-3BYte-Commandmov DPTR, #TAmov A, #SET-TAcall Send-3BYte-Commandret
. * * t ** ** * * * * * * **** ** * ** ** ** ** ** ** * *** ** ***** ** ** ** ** * * **
Set*LCD-Mode:mov A, #LCD-MODEcall Cmd-WritereL
Set-Dlsplay-Mode :
mov A, #DISPLAY-MODEcafl Cmd-Writeret
Set-Address-Pointer :
mov A, #SET-ADDRPcall Send-3BYte-Commandret
,. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Send-3BYte-Command:push ACC
mov A, DPLcall Data-Writemov A, DPH
call Data-Writepop ACC
call Cmd-Writeret
. * * * ** * * * * * * ** ** * * ** * * * ** * * ** * * * * * * * * ** ** * * * *** * ** ** ** * *
Data_Write:push ACC
call LCD-Read-Statlrsicl r LalD.Ct)
Antarmuka dengan Display
pop ACC
Data_Writel:mov LCD-DAT, Ac1r LCD_CEclr LCD_WRnopnopnopnopnopsetb LCD_WRsetb LCD_CEret
Cmd_Write:push acccall LCD_Read_SLatusseLb LCD-CDpop acccall Data_Writ.eLret
LCD_Read_Status :
mov LCD-DAT, #OFFHsetb IICD*CDclr LCD_RDclr LCD_CEnopnopnopnopmov A, LCD_DATsetb LCD_RDsetb LCD_CEanl a, #03Hcjne a, #03H, LcD_Read_statusret
,. * ** * * ** * * ** ** ** ** ** * ** ** ** *** * * ** * ** * * * * ** * ** ** * * * ** * * *
l)iita_Auto_Write:nrrch Lc/-
rTrov LCD DAT, #OFFHl).lt.l nlrl,, Wr it r' [,oop:
7n2i0
Teknik Antarmul<a dan Pemrograman l',likrokontroler AT89552Antarmuka dengan Display
call Cmd_Writeret
. * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *Delay:
mov R5, #80Delay_Loop:
mov R0, #110mov Rl-, #100call Delay_Loop1djnz R5, De1ay_Loopret
Delay_Loopl:djnz R0, $
djnz Rl, Delay_Loop1ret
- * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * ** * * **Graphic_DaLa1: (lihat di file assemblernya dj- CD)
- * ****** *** *** **** ** * * * ** * * * *** ** **** ** * * * ** * * **** **** **Graphic_Data2: (l1hat di file assemblernya di CD)
6.4.3 MODE ATRIBUT TEKS DAN KARAKTER CGRAM
Contoh program berikut akan mendemontrasikan mode-mode teks atributdan bagaimana menampilkan karakter, dengan CGROM dan CGRAM, ke
LCD grafik. LCD diatur pada mode CGROM dan mode atribut teks(LCD_MODE = 84H). Grafik dan teks dihidupkan karena data atribut akan
menempati area garfik. Kursor tidak ditampilkan dan teks diatur untuk tidakberkedip (DISPLA Y_MODE = 84H).
Memori LCD diatur sebagai berikut. Area grafik menempati alamat awal(GH) di 0000H dengan area grafik (GA) adalah 0028H (40 byte per baris).
Area grafik ini digunakan untuk menyimpan data atribut teks karenaprogram tidak akan menampilkan gambar. Area teks menempati alamat awal('l-H) di 1700H dengan area teks (TA) 0028H (40 karakter). Pemilihan GA dan'l'A pada 0028H dikarenakan pada contoh ini ukuran font ditentukan 5 x 8([S dihubungkan ke logika tinggi). Dengan demikian layar bisa menampilkan.120 teks ((240/6) x 6a/$). Pada ukuran 6 x 8, hanya 6 bit bawah dari datayrrng akarr rliprost,s tlari dara yang dikirim ke LCD. Data karakter CGRAMrlisitnputt rli :rl;rttrrt irw;rl llt00ll. Olch karcna bit C = 0 (mode l.CD), maka
{
273tl7
setbclrclrnopnopnopnopmovsetbsetbanfcj nec1rpopcallret
LCD-CDLCD-RDLCD_CE
A, LCD-DATLCD-RDLCD-CEA, #OBHA, #08H, Data-Auto-WriLe-LoopLCD-CDACC
Data-Writel
. * ** * * * * * * ** ** * * ** * * * ** * * * * * * x* ** * * * * * * *** * * * * * * * * * ** * **
Draw-F1 6FighLer :
mov DPTR, #GH
call Set-Address-Pointermov A, #AUTO-WR-ONcall Cmd-Writejb Flag0 ,Draw-FL62mov DPTR, #Graphic-Data1seLb Flag0s jrip Draw-It
Draw-F162:mov DPTR, #GraPhic-Data2c1r F1ag0
Draw*It:mov R1, *64
Send-Ful l-GraPhi c-Data-LooP1 :
mov R2, #30Send-FuI l-GraPhic-Data LooP2 :
clr AMOVC A, GA+DPTR
cp1 Acal-1 Data-Auto-Writeinc DPTR
djnz R2, Send-FulL-Graphic Data-Loop2djnz R1 , Send-Pu11--Graphic-Dar-a Looplmo\/ A, #AtrTO -WR Ot''F
715714 Ieknik Antarmuha dan Pemrograman l,likrokontroler AT89S52
karakter yang dibangkitkan melalui CGRAM adalah karakter 80H - FFH.
Karakter 80H akan menempati alamat 1C00H di CGRAM (1800H + (80H
x8)).
Setelah menginisialisasi LCD, program akan melakukan pembersihan memori
dengan mengirimkan data 00H ke semua alamat memori LCD dengan
memanggil subrutin Clear-Memory. Ini dilakukan untuk menghindari
tampilan acak di layar LCD mengingat isi memori akan berada di kondisi
acak pada saat catu daya pertama kali dinyalakan. Dengan menggunakan
penulisan otomatis, data 00H dikirimkan ke memori LCD. Alamat awal
ditentukan 0000H (GH) dengan instruksi penunjuk alamat. DPTR digunakan
sebagai pencacah alamat. Untuk mengetahui apakah alamat telah mencapai
lFFFH atau belum, digunakan sebuah metode sederhana. Isi DPH disimpan
di A, kemudian A dikurangi dengan 1l'H (byte tinggi alamat). Hasil
pengurangan disimpan di register B. Selan;'utnya DPL disimpan di A dan A
dikurangi dengan FFH (byte rendah alamat). Kemudian A akan di-OR-kan
dengan register B. DPTR diperbarui dengan instruksi inc. |ika DPTR telah
berisi IFFFH, operasi logika OR A dan B akan menghasikan 0 di register A
dan proses penghapusan memori berarti telah selesai. |ika belum 0,
penghapusan memori terus dilan;'utkan ke alamat memori berikutnya.
Instruksi untuk mereset mode penulisan otomatis perlu dikirimkan sebelum
keluar dari submtin ini.
Program kemudian akan mengirimkan data untuk membangkitkan karakter
CGRAM. Contoh karakter CGRAM dalam program ini adalah karakter
CGRAM yang sama dengan contoh pada LCD karakter (seperti ditunjukkan
oleh Tabel 6.6). Pengiriman data karakter CGRAM dilakukan di subrutin
CGRAM-Seting. Alamat awal CGRAM adalah 1800H, karena itu nilai
register offset yang harus dikirimkan adalah 03H (OFFSET-REQ. Nilai
regi ster offs e t dikirimkan melalui subrutin S e t- Offs e t- R egi s t e r "
Subrutin Send-CGRAM-Data akan mengirimkan data-data untukmembangkitkan B karakter CGRAM (CGRAM-Data). Oleh karena itudiperlukan 64 byte data. Alamat 1C00H, sebagai alamat CGRAM untuk
karakter 80H, dikirimkan terlebih dahulu ke penunjuk alamat' Kemudian
dengan instruksi penulisan data otomatis, 64 byte dikirimkan ke RAM. R0
berfungsi sebagai pencacah 64byte.
Antarmuka dengan Display
Setelah mengirimkan data-data CGRAM, program akan menampilkan teksdengan memanggil subrutin Send_Text. Teks ditampilkan di baris ke-1, 2, 3,4, 6, dan terakhir menampilkan karakter CGRAM di baris ke-7. Alamat awaltiap baris ditentukan dengan konsranra LINEI_ADDR, LINE2_ADDR , ...,LINET_ADDR. Alarnat awal baris perrama sama dengan alamar TH. Alamatawal baris kedua adalah TH+TA, baris ketiga adalah TH+2TA, baris keempatTH+3TA dan seterusnya.
Teks dikirimkan dengan merode look-up table dan juga dengan modepenulisan otomatis. Tidak seperti LCD karakter yang bisa secara langsungmengirimkan data ASCII, T6963C menggunakan kode karakrer yang berbedadengan kode ASCII. Lembaran data T6963C rnemperlihatkan dalam kodekarakter u,tuk mode cGRoM terdapat selisih 20H dengan kode karakterASCIL lika program terap menggunakan kode ASCII, maka harus dikurangidengan 20H terlebih dahulu sebelum dikirimkan ke area memori teks. Initidak berlaku jika karakter dibangkirkan melalui CGRAM. Dalam conrohprogram ini, pengiriman teks yang dibangkitkan dengan CGROM danCGRAM dilakukan di subrutin yang terpisah. Subrurin SendText akanmengirimkan kode CGROM, di dalamnya rerdapat instruksi pengurangansebelum data dikirimkan ke RAM, sedangkan SendText2 akan mengirimkankode karakter CGRAM (80H - 87H) dan data tidak dikurangi dengan 20H.
Subrutin terakhir dari program rni (Atribute_Text_Demo) adalah men-dernonstrasikan mode atribut teks. Tulisan di baris ke-4 ("U-2 Technologies")rnerupakan area teks yang akan mendapatkan data atribut. Mode atribut yangdidemontrasikan adalah mode display normal (NORM_DLS\, display normalberkedip (BLINK_NOR*DIS], display negatif (NEG_DIS\, display negatifberkedip (BLINK_NEG_DISfl dan g,abungannya. Program kemudian akanrnengulangi pengiriman mode atribut secara terus-menerus.
; Program Title : "Mode Teks Atribut dan Karakt.er CGRAM";lrile name : LCD Grafrk 2.asm;Version : 1.0;(lreated date : Marcln 26, 2007i l)r'oqrammer : Usman
*************************************x**
^ ***Ai t r * l ********************************************
M ict-olottl t o lr,t l'i ;/Port- As;si qnment,
q
716 Ieknik Antarmul<a dan Pemrograman I'likrokontroler AT89S52Antarmuka dengan Display
LCD*CE eguLCD_RST equLCD_CD equLCD_WR equLCD_RD eguLCD_DAT egu
P3.3P3 .4P3.5P3.6P3.7PO
AUTO-WR-ONAUTO-WR-OFFAUTO*RD-ONAUTO-RD-OFF
OFFSET-REGSET-OFPSET
BLINK*NOR-DISPBLINK-NEG-DISP
equ 0B0Hequ 0B2Hequ 0B1Hequ 0B3H
equ 0003Hequ 22H
equ 00Hegu 05Hegu 03Hegu OBH
equ ODH
, * ****** **** **** ** * * * ** ** **** ** * * **** ** * * * ** ** ** ** **** **; rnternal RAM Mapping NORM DrsP
. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * NEG-DI S P, fNH DISP
- * ** **** ** * * ****** ** * * *** *** * ** ** **** * * * * * ** ** ** **** ** **; Constanta Declaration. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * *
;LCD Inil-ialize commmand definitlonGH equ 0000HGA egu 0028HTH egu 1700HTA equ 0028H
' * ** * * ** ****** * * ** ** * * * **** ** ** ** ** ** * * * * *** * * ****** ** **;Main program,.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *Org 0000H
Main*prog:call Init.ia1i-ze LCDcall Clear_Memorycall CGRAM_settrngcall Send Text
Main_prog_Loop:call Atrlbut_Text_Demosjmp Main_prog_Loop
- * ** * * ** * * ** ** * ***** * ** * * ** * * * * * *** ** ** *** * * ** * * ** ** ****Atribut_Text_Demo:
mov DPTR, #REMARKTEXT0 ^cafl Set_Address_pointermov DPTR, #Normal_Display_Textcall SendTextmov A, #NORM_DISPmov B, #16mov DPTR, #GH+?gHcafl Send*Atribut Datacall Delay
ln()v ltl,',',',,lli|IMARI(TEXTr',rl I lir'l r\ri,lr,',',; l)ointrlr
SET-GHSET-GAJE] 1N
JE] lN
LINEI-ADDRLINE2-ADDRLINE3*ADDRLINE4-ADDRL]NE6*ADDRLINET*ADDRREMARKTEXT
;LCD ModeLCD MODE
equ 42Hequ 43Hequ 40Hegu 47H
equ 1700Hequ L12BHeqll 1750Hequ 1718Hegu 17CBHegu 17F0Hequ 1789H
egu B4H
;Display ModeD]SPLAY-MODE egu 9CH
SET*ADDRP equ 24H
il
719278 Teknik Antarmuka dan Pemrograman Mikrokontroler AT89552 Antarmuka dengan Display
mov B, #6MOV DPTR, #GH+78H+10call Send*Atribut_Datacall Delayret
. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Normal*Display_Text :
db ' (Normal Display) ' ,0
Normal_Di splay_B1 ink_Text :
db ' (Normal Display Blink) ' ,0
Negati f_Display_Text :
db ' (Negatif Dlsplay) ' ,0
Negat i f_Di splay_81 ink_TexL :
db ' (Negratif Display Blink) ' ,0
Combination_Text :
db '(Kombinasi) ',0- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Send Atribut Data:push ACCcall Set_Address_Pointermov A, #AUTO_WR_ONcall Cmd*Writepop ACC
Send_ALribuL_Data_Loop :
call Data_Writedjnz B, Send_Atribut_DaLa_Loopmov A, #AUTO_1,{R_OFFcall Cmd_Writeret
,. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Delay:mov R5, #100
Delay_Loop:mov R0, #110mov Rl, #100ci'rll l)r'l,ry Loopl<l jrr:' li'r, l)r'l,ry [,ort1.r
mov DPTR, #Normal-Display*Blink-Textcall SendTextmov A, #BLINK-NOR-DISPmov B, #16mov DPTR, #GH+7BHcall Send-Atribut-Datacall Delay
mov DPTR. #REMARKTEXT
call Set-Address-Pointermov DPTR, #NegaLif-DisPlaY-Textcall SendTextmov A, #NEG-DISPmov B, #16mov DPTR, #GH+78Hcall Send_Atribut-Datacalf Delay
mov DPTR, #REMARKTEXT
call SeL-Address-Pointermov DPTR, #Negatif-Oisplay-B1ink-Textcal-1 SendTextmov A, #BLINK-NEG-DrSPmov B, #l-6mov DPTR, #GH+7Bncall Send-Atribut-Datacall Delay
mov DPTR, #REMARKTEXT
call Set-Address-Poi-ntermov DPTR, #Combination-Textcall SendTextmov A, #BLINK-NOR-DISPmov B, #4mov DPTR, #GH+7BHcall Send-Atribut-Data
mov A, #NEG-DISPmov B, #6mov DPTR, #GH+7BH+4call Send-AtrlbuL-Data
mov A, #BLINK NEG DTilP
28rI
i
I
280Antarmuka dengan Display
Ieknik Antarmul<a dan Pemrograman Mikrokontroler AI89552
ret
Delay_Loop1:dlnz R0, $
djnz R1, Delay_Loop1reL
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * *
Clear_Memory:mov DPTR, #GH
call Set_Address_Pointermov A. #AUTO_WR_ONcall Cmd_Write
mov DPTR, #0000HClearMemoryloop:
c1r Acall Data_Auto*wrltemov A, DPH
subb A, #1FHmov B, Amov A, DPLsubb A, #OFFHorl A,Binc DPTR
ClearMemoryl.oopA. #AUTO WR OFtr
cafl Cmd_Writeret
,, * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Send_Text:mov DPTR, #LINE1-ADDRcaLf Set_Address*Polntermov DPTR, #My_Textlcall SendText
callmovcall
movcallmovcall
movcaflmovcall
movcallmovcallret
Set_Address_PointerDPTR, #My_Text3SendText.
DPTR, #LINE4_ADDRSet_Address_PointerDPTR, #My_Text4SendText
DPTR, #L]NE6-ADDRSet_Address_PointerDPTR, #My_Text5SendText
DPTR, #LINE7-ADDRSet_Address_PoinLerDPTR, #My_Text6SendText2
)12mov
movcallmo\rcall
DPTR, #LINE2-ADDRSet_Address_PointerDPTR, #My_Text2SendText
' * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * ** * * * * * * * * * * * *My_Text1:
db ' MODE ATRIBUT TEKS DAN KARAKTER CGRAM ' , O
My_Texc2:db ,,0
My_Text3:db .CONTOH ATRIBUT TEKS' , O
My_Text4:db 'U-2 Technologies, ,0
My_Text5:db 'CONTOH KARAKTER CGRAM"O
My_Text6:db 80H, 81H, 82H, 83H, 84H, 85H, B6H, 87H, 0
- * * * * * * * ** * * * * * * * * * * * * * * * * * * * ** * * ** ** * * * * * * * * * * * * * * * * * * *SendText:
mov A, #AUTO_WR_ONcall Cmd_Write
ljt:nd_Text_Loop:clr Amovc A, @A+DPTRjz. ilr'nrl Text- Exit:;rrlr[ r A. ll ;]0ll
mov DPTR, #I.,INE3 N]II)]t
1
281282 Ieknik Antarmuka dan Pemrograman l,likrokontroler AT89552 Antarmuka dengan Display
- *** * *** ** * * ** ** * ****** * * *** * * * ** * * ** ** *** * * **** ** **** **Init ia1 i ze_LCD :
c1r LCD_CEcall Reset*LCDcall Set*LCD-Modecall Graphic-Settingcal I Text-Settingcall Set_Display-Moderet
. * * * ** * * ** ** ** ** ** * * * ** * * ** ** ** ** ** ** * *** * ** ** ** ** * * *** *ReseL_LCD:
clr LCD_RSTnopnopnopnopnop
call Data-Aulo_lrlrite djnz R0, send_cGFAM Dara Loopinc DPTR A, +AI]To wR oFFsjnp send_Texr_Loop call Cynd_wrire
Send Text Exit: rerA, +AT]IO WR,OFF
call Cnd Write CGRAM_Data:ret db 1FH, 15H, 1511, 1FH, 15H, 15H, 1FH, 001't
tr liX: 11X: tBX; ill: 13X; 11X: llfi; 33XSendText2: db lFH, 1FH, oEJr, 04H, oEH, 1FH, lFH, 0011
A, *AUTO_WR_ON db 1FE, 15H, 1FH, 15H, 1FH, 15H, 1FX, 00Hcall Crd_Write db 03H, 03H, 07r{, 0FH, oFH, 1FH, 1FH, 0011
send_Text Loop2: db 18u, 1cH, 1E11, 1FH, 1FH, 1Fr{, 1FX, 00Hc1r A db 1FE, 04H, 04H, 1FH, 11H, 11E, 11H, 00H
A, @A+DPTRjz send Text ExiE2call Data Auro wriEe Ser_Offser Regisrer:inc DPTR DPTR, +OFFSET-REG' sjnp Send_Text-Iroop2 A, +SET OFFSET
Send,Texl Exit2 r call Send_3ByEe_CordEndA, +AUTO WR OFF ret
call Cmd_Writeret
CGRAM_Setting:cal-I Set_Offset_Registercall Send*CGRAM_Dataret:
Send_CGRAM_Data :
mov DPTR, #1C00Hcall SeL_Address_Point.ermov A, +AUTO_WR_ONcall Cmd_Write
mov R0, #64mov DPTR, #CGRAM-DaIa
Send_CGRAM_Dat a_Loop :
clr Amovc A, GA+DPTR sctlr LCD RSTcall Data_Auto_Write rt.linc DPTR
fl;l
Ieknik Antarmuka dan Pemrograman l'likrokontroler AI89552
- ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Graphic_SetLing:mov DPTR, #GH
mov A, #SET_GHcall Send-3Byte-Commandmov DPTR, #GAmov A, #SET-GAcall Send-3Byte-Commandret
,. ** * ** ** ******* * ** *** ** ** ** ** ** ******** ** * ** ****** **** **
Text_Setting:mov DPTR, #THmov A, #SET-THcall Send-3Byte-Commandmov DPTR, #TAmov A, #SET-TAcall Send-3Byte-Commandret
,. *** ** ** * * ** **** ** * * * * *** ** * * ****** ** ***** ** ** * *** ** ** * *
Set_LCD_Mode:mov A, #LCD-MODEcall Cmd-Writeret
Set_Display_Mode :
mov A, #DISPLAY-MODEcall Cmd-Writeret
Set Address-Pointer:mov A, #SET*ADDRPcall Send-3Byte-Commandret
,. * * * * * * * * * * * * * * * ** * * * * * * * ** * * * * * * * * * * * * * * * * * * * ** * * ** * * * *
Send_3Byte-Command:push ACCmov A, DPLcall Data-Wri-temov A, DPHcal-1 Data-Write
Antarmuka dengan Display
pop ACC
call Cmd_Writeret
,. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * *
Data_Write:push ACC
call LCD_Read-Statusc1r LCD_CDpop ACC
Data*Writel:mov LCD-DAT, Ac1r LCD*CEclr LCD_V\IR
nopnopnopnopnopsetb LCD_WRseLb LCD_CEret
Cmd_Write:push acccal-1 LCD_Read_Statussetb LCD-CDpop acccall Data_WritelreL
LCD_Read_SLatus :
mov LCD-DAT, #OFFHsetb LCD_CDc1r LCD_RDclr LCD_CEnopnopnopnopmov A, LCD_DATset-Ir LCD_RD
:;r'l lr L('l) CE,rttl .r, ll0:tll
2Bs
Teknik Antarmuka dan Pemrograman l'likrokontroler AI89S52
cJ nereL
a, #03H, LcD_Read-Status
. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Data_Auto_Write :
push ACCmov LCD-DAT, #OFFH
Da ta_Aut o_Wr i t e_Loop :
SCTb LCD-CDclr LCD_RDclr LCD_CEnopnopnopnopmOV A, LCD-DATsetb LCD_RDsetb LCD_CEanl A, #OBHcjne A, #08H, Dat-a-Auto-Write-Loopclr LCD*CDop ACCcall Data_Writelret
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * *
end
6.4.4 LCD GRAFIK MENAMPITKAN GAMBAR DANTEKS
Contoh program terakhir dari pembahasan LCD grafik adalah bagaimana
menampilkan gambar dan teks secara bersamaan. Memori LCD ditentukansama dengan program sebelumnya, GH di 0000H dan TH di 1700H. Ukurankarakter ditentukan 8 x 8 (FS = 0) untuk memudahkan pengiriman data
grafik. GA dan TA disesuaikan dengan ukuran karakter (001EH). LCD diaturpada mode OR, grafik dan teks ditampilkan. Kursor juga ditampilkan dan
diatur berkedip dengan ukuran kursor 8 baris.
Setelah menghapus memori, grafik ditampilkan terlebih dahulu (subrutin
Draw-Picture). Proses pengirimannya sama dengan Program sebclumnya,
bedanya dalam program ini setelah I byte data dikirimkatr, pt,,13titttt akatr
Antarmuka dengan Display
memanggil subrutin Delay, sehingga gambar tidak akan langsung tertampil
tetapi akan ditampilkan per baris dengan selang waktu ditentukan oleh
subrutin Delay.
Teks ditampilkan melalui submtin Send-Text dan SendText. Dalam program
ini, teks tidak dikirimkan dengan mode penulisan otomatis karena dalam
program ini, program akan menampilkan kursor dan kursor harus di-
tempatkan sesuai posisi karakter yang sedang ditampilkan. Teks tidak
ditampilkan di kolom awal, tetapi ditampilkan di samping gambar. Konstanta
LINET-ADDR sampai LINES-ADDR mendefinisikan alamat memori tempat
teks akan ditampilkan. Setelah mengirimkan alamat tersebut ke IC
pengendali T6963C melalui subrutin Set-Address-Pointer karakter (yang
dibaca melalui metode look-up) dikirimkan melalui subrutin Data-Write.
Agar alamat selanjutnya tidak perlu dikirimkan lagi, instruksi untuk
menaikkan isi penunjuk alamat (WR-fNC-ADfl dikirimkan.
Hal yang baru dari program ini adalah subrutin Update-Cursor-Position.
Subrutin ini akan menempatkan kursor setelah sebuah karakter dikirimkan.Posisi baris disimpan di RAM Line-Cur (3lH), sedangkan posisi kolom
disimpan di Col-Cur (30H). Setiap kali karakter dikirimkan, posisi kolom
kursor akan dinaikkan; dan setiap kali ganti baris, posisi baris kursor akan
dinaikkan sementara posisi kolom akan dikembalikan ke posisi awal kolom
(13). Dalam program ini karakter akan menempati kolom ke-13 dari tiap baris
kata yang ditampilkan. Isi DPTR perlu disimpan ke memori stack terlebih
dahulu sebelum mengirimkan instruksi pengiriman posisi kursor (subrutin
Set-Cursor*Pointer). Oleh karena isi DPTR masih diperlukan (karena
menyimpan alamat memori program yang menyimpan data karakter)'
subrutin Set*Cursor-Poinrer menggunakan DPTR untuk menyimpan posisi
kursor.
Program kemudian akan mengulang mengirimkan gambar dan menampilkan
teks setelah menunggu beberapa saat dan mengapus memori.
==========;Program Title : "Graphic LCD: Graphic and Text";File name : LCD Grafik 3.asm;Version :1.0; Createcl clate : APril 02 , 200'7
; ProrlL ltnrrrr ,r : Usman
28i285
******************************
288 Ieknik Antarmul<a dan Pemrograman l'likrokontroler AI89552
. * * * ** ** * * ** ** * *** ***** * * * * * * ** ** * * * * * * * * ***** * *** **** **;Microcontroler Pin/Port Assignment*******************************************************
LCD_CE equLCD_CD equLCD-RST eguLCD_WR eguLCD_RD equLCD_DAT egu
*******************************************************Internal RAM Mapping*******************************************************
Antarmuka dengan Display
LTNEI-ADDRLINE2-ADDRLINE3-ADDRLINE4-ADDRLINES-ADDRLINE6-ADDRLINET ADDRLINEB-ADDR
17 ODH
Ll2BHL7 49HL7 67H17 B4H17A3H17COH17DEH
. * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * *;Main Program- * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * *
Org 0000HMain_Prog:
call rniLialize_LCDcall Clear_Memory
Ma j-n_Prog_Loop:call Draw_Picturecall Send Textcall Long_Delaycall Long_Delaycall Long_Delaycall Long_Delaycalf Long_De1aycall Long_Delaycall Long_De1aycall Long_Delaymov Col_Cur, #30mov Line_Cur, #0call Update_Cursor_Positioncall Clear_Memorysjmp Main_Prog_Loop
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * **Draw_Picture:
mov DPTR, #GH
call SeL_Address_PoinLermov A, #AUTO_WR_ONcall Cmd_Writemov DPTR, #Graphic*DaLalrTr()v ll I , ll 64
Ilcttrl l,'r I I tir,rl,lti, l),rl .t T,or:lp1 :
289
P3 .3P3 .5P3 .4P3.6P3.7PO
equequequequequequequequ
Col_Cur equLj-ne_Cur equ
30H31H
*******************************************************Constanta Declaration
;LCD InitializeGH equGA eguTH equTA egu
SET_GH equSET_GA eguSET_TH equSET_TA egu
;LCD ModeLCD_MODE equ
;Display ModeDISPLAY-MODE
SET-ADDRPSET-CURSOR
AUTO-WR-ONAUTO-WR-OFPWR-TNC-ADP
commmand definitron0000HOOlEH1700HOOlEH
42H43H40H4IH
80H
9FH
24H2lH
OBOH
O82HOCOTI
equegu
equequequ
29r290 Teknik Antarmuka dan Pemrograman Hikrokontroler AI89S52 Antarmuka dengan Display
R2, +30Send_Fu]] Graphic_Data_Loop2 r Col-Cur., #13
clr A mov Line Cur, #4A, @A+DPTR DPTR, +I,INE5 ADDR
cp1 A call Set Adalress-PoinEerca1] Data AuEo_t/rite DPTR, *My TexE5inc DPTR call SendTextcau Delaydjnz R2, Send_Ful1 Graphic-Datsa-Loop2 Col-Cur, *13djnz R1, Send_Full Graphic,Data-Loop1 Line-Cur, *5
A, *AUIIO h]R OFF DPTR, *LINE6_ADDRcall cmd wriEe call set-Address Poinlerret DPTR, +MY Tex!6
call SendTexE
Send-Text: Col-Cur, +13Col Cur, +13 Line-Cur, +6Line Cur. *0 DPTR, +LINE7-ADDRDprR, *r,rNEl ADDR call set_Address Poinrer
call Ser_Address_Pointe v DPTR, +My_Text7DPTR, +My Textl call SendText
call sendTexEtrlov Co1_cur, +13
col Cur, +13 Line-Cur, +7mow Line Cur, +1 DPTR, *LINE8-ADDR
DPTR, *LrNE2_ADDR call Set_Address PoinEercal] Set_Adatress Poinre DPTR, *My-TexE8
DPTR, +l"ly_Text2 call SendTextcall SendText iet
Line_cur, *2 My Texrl:DPTR, *LINE3-ADDR alb 'U 2 Tectmologries ',0
call set Address_PoinEer My_Text2:DPTR, *My Text3 db 'TE!O{I( AIIIARMU(A ',0
call SendText My_Text3:db ' DAN PEMROGRAI4AN ',O
Col Cur, *13 !4y Text4:Line_Cui, +3 db ' MIKROKONTROLER ',0DPTR, *LfNE ,ADDR My Text5:
call Set_Address Pointer db ' AT89S52 ' ,0DPTR, *My T'exE4 lvly 'l'i ;r l r, :
cal l scn'lll)xt ru' ' o
Antarmuka dengan Display
. ***** * * * * *** *** * ****** ** ** ** **** *** * **** *** * * ** *** * ** **Graphic_Sett ing:
mov DPTR, #GHmov A, #SET_GHcaIl Send_3Byte_Commandmov DPTR, #GAmov A, #SET_GAcall Send_3Byte_Command
ret
,. * ** * * ** * *** ** * * * * ** *** ** ** ** * *** * * **** * * * ** * * ** ** ** * * **
Text_Setting:mov DPTR, #THmOV A, #SET-THcall Send_3Byte_Commandmov DPTR, #TAmov A, #SET_TAcall Send_3Byte_Commandret
. **********Set_LCD_Mode:
mov A, #LCD_MODEcall Cmd_Wrlteret
Set_Display_Mode :
mov A, #DTSPLAY-MODEcall Cmd_Writeret
Set_Address_Pointer :
mov A, #SET-ADDRPcall Send_3Byte_Commandret
Update_Cursor_Posi tion :
push DPLpush DPH
mov DPL, Col_Curmov DPH, Line_Curca I I llr'l Crtrsor Pointerp()l) I)l'll
291191 Ieknik Antarmul(a dan Pemrograman l,,likrokontroler AI89552
My_Text7:db ' Pernrograman LCD ' ,0
My_Text8:db ' Grafik 240 x 64 ' ,0
- * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
SendText:Send_TexL_Loop:
clr Amovc A, @A+DPTRjz Send_Text_Exitsubb A, #20Hcall DaLa_Wrltemov A. #WR_INC_ADPcall Cmd_Writeinc DPTRcall Update_Cursor_Positioni-nc Col_Curcall Long_Delaysjmp Send_TexL Loop
Send_Text_Exit:ret
- * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Initiallze LCD:clr LCD*CEcall Reset LCDca11. Graphic_Settingcall Text_Settingcall Set_LCD_Modecalf Set_Disp1ay_Moderel:
. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
ReseL_LCD:clr LCD_RSTnopnopsetb LCD RSTret
rTeknik Antarmuka dan Pemrograman l,likrokontroler AI89552
Set*Cursor-Pointer :
mov A, #SET-CURSORcall Send-3Byte-Commandret
,. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Send-3ByLe-Command:push ACC
mov A, DPLcall Data-Writemov A, DPH
call Data*WriLepop ACC
call Cmd-Writeret
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * *
Data_Write:push ACC
call LCD-Read-StaLusclr LCD-CDpop ACC
Data_Wril-e1:mov LCD-DAT, Aclr LCD-WRsetb LCD-WRret
Cmd Write:pr-,st acccall LCD-Read-Statussetb LCD-CDpop acccall Data-Writelret
LCD_Read_SLatus :
mov LCD-DAT, #0FFHsetb LCD-CDclr LCD-RDMOV A, LCD DAT
Antarmuka dengan Display
seLb LCD RD
anl a, #03Hcjne a, #03H, LCD*Read*SLaLusret
. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Dat.a--Auto_Write :
push ACC
mov LCD-DAT, #OFFHDa ta_Aut o_Wr i t e_Loop :
seLb LCD_CDc1r LCD_RDmov A, LCD-DATseTb LCD*RDan1 A, #OBHcjne A, #08H, Data_Auto*Writre_Loopclr LCD_CDpop ACC
call Data_Writelret
,. * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * *
Clear_Memory:mov DPTR, #GH
call Set_Address_Pointermov A, #AUTO_WR_ONcall Cmd_WriLe
mov DPTR, #0000HClearMemoryloop:
clr Acall Data_Auto_Writemov A, DPHsubb A, #1FHmov B, Amov A, DPLsubb A, #0FFH
or1 A, Binc DPTR
)nz ClearMemoryloopmov A, #AUTO_WR_OFFca l 1 ('rrrrl Wri t-et{'l
795794
pop DPLret
"'I!
I
796 Teknik Antarmul<a dan Pemrograman I'likrokontroler AI89552
- * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * **Long_De1ay:
mov R5, #BLong_Delay_Loop:
mov R0, #11-0mov R1, #100call Long*Delay_Loop1djnz R5, Long_Delay_Loopret
Long_De1ay_Loop1 :
djnz R0, $
d)nz R1, Long_Delay_Loop1ret
Delay:mov R5, #2
Delay_Loop:mov R6, #11mov R7, #10call Delay-Loop1djnz R5, Delay_Loopret
Delay_Loop1:djnz R6. S
djnz R7, Delay_Looplret
, ** *** ** ** ********** ***** ** ************** *** **** **** ****Graphlc_Data1: (bisa dilihat di CD pendukung)
BABTTIMER DAN PORT .,ERIAT
Bab 2 dan Bab 3 telah menjelaskan fungsi-fungsi Timer (0, 1, dan 2) dan portserial dalam mode-mode kerja yang dimiliki oleh mikrokontroler AT89S52.Bab ini akan menjelaskan bagaimana membuat program assembler untukmengendalikan Timer dan port serial AT89S52.
7.7 TIMER
Mode kerja Timer 0 dan 1 dikendalikan oleh SFR TMOD, nibble bawah (bit 0- bit 3) mengendalikan Timer 0 sedangkan nibble tingginya (bit 4 - bir 7)
mengendalikan Timer l Mode kerja ditentukan oleh bit MxO dan Mxl (x = 0untuk Timer 0 dan x = 1 untuk Timer l). Bit C/Tx menentukan apakah Timerbekerja sebagai timer (pulsa dari osilator internal) atau counter (pulsa dariluar). Sedangkan bit GATEx akan mengaktifkan operasi Timer. Bit TRO danTRl di register TCON akan menghidupkan atau memarikan Timer 0 dan l.Bit TFO dan TFl (masih di register TCON) berfungsi sebagai bit statusoverflow Timer 0 dan Timer 1. Register TLO dan THO adalah register datauntuk Timer 0, sedangkan TLl dan TH1 adalah register data untuk Timer 1.
Kedua register tersebut bisa di-kaskade membentuk register 16 bit.
Timer 2 dikendalikan oleh 2 register T2CON dan T2MOD. Register T2CONmengatur fungsi kerja Timer 2 dan juga menyimpan bit status Timer 2. BitTF2 merupakan bit status overflow Timer 2. EXF2 merupakan bit statusadanya transisi sinyal di pin T2EX pada mode capture dan reload. RCLK danTCLK berfungsi untuk mengatur Timer 2 sebagai pengarur baud rate portserial. EXEN2 dan CP/ RL2 akan mengaktifkan pin T2EX sebagai masukanpada mode capture dan reload. TR2 sebagai bit untuk menghidupkan atau
mematikan Timer 2. C/T2 akan memilih Timer 2 sebagai timer atau counrer.Register T2MOD, yang hanya aktif 2 bit, berfungsi untuk mengarur apakahAT89S52 akan nrerrgeluarkan sinyal clock di pin T2 (diatur oleh bit T2OE)dan mt.rr11;rtrrr :rPirkrrh 'l'imer bekerja sebagai counter naik atau turun (bitlX:liN).'l'itrrcr ,) rrrr.rrrilrki 4 rt,gislr.r dara (1'1,2, TI t2, RCAI,2l, dtn RCAP2li).
Teknik Antarmuka dan Pemrograman l'likrokontroler AT89552
Ada 4 mode kerja yang bisa dipilih untuk Timer 0 dan 1' mode 0' 1' 2 dan 3'
Mode 0 memfungsikan Timer 0 dan 1 sebagai pencacah 13 bit' Timer akan
overflow setelah 2r3 atau 8192 cacahan. Mode I akan memfungsikan Timer 0
dan 1 sebagai pencacah 16 bit. Timer akan overflow setelah cacahan ke 216
atau 65536 cacahan. Mode 2 memfungsikan Timer 0 dan 1 sebagai pencacah 8
bit auto-reload, pada saat overflow data yang tersimpan di register TH akan
dipindahkan ke TL dan proses pencacahan dimulai kembali. Pada mode ini
banyaknya cacahan untuk overflow ditentukan oleh data yang ada di TH
sebagai nilai auto-reload. Pada mode 3, hanya Timer 0 yang diaktifkan dan
menjadi 2 buah timer 8 bit yang terpisah (TLO dan THO melakukan
pencacahan secara individu). Register TLO dikendalikan oleh bit-bit
pengendali Timer 0 dan bisa membangkitkan interupsi Timer 0' sedangkan
iHO dit "rraalikan
oleh bit-bit pengendali Timer 1 dan bisa membangkitkan
interupsi Timer 1. Pada mode ini, Timer 1 masih bisa digunakan, misalnya
sebagai pembangkit baud rate port serial di mana tidak diperlukan interupsi
Timer.
Timer 2 agak berbeda dengan Timer 0 dan 1' Ada 3 mode kerja yang bisa
dipilih, mode capture' auto-reload dan juga sebagai pembangkit baud rate
,rrt k port serial. Mode capture akan meng-capture data di TL2 dan TH2 ke
regirte, RCAP2L dan RCAP2H pada saat ada transisi 1-ke-0 di pin T2EX
(ditentukan oleh bit EXEN2 di register T2CON). Setelah di-capture, Timer 2
tidak akan melakukan cacahan dari awal, tetaPi akan melanjutkan
cacahannya. Mode auto-reload beroperasi hampir sama dengan mode auto-
reload Timer 0 dan 1. Perbedaannya pada Timer 2, register data Timer 2 tetap
bekerja sebagai register 16 bit. Saat Timer 2 overflow atau ada transisi 1-ke-0
di pin T2EX, Timer 2 akan melakukan auto-reload dengan data auto-reload
ditentukan secara software di register RCAP2L dan RCAP2H' Timer 2 akan
melakukan cacahan dari awal. Dalam mode auto-rel0ad, Timer 2 bisa diatur
untuk melakukan cacahan naik atau cacahan turun melalui bit DCEN
(register T2MOD). Pada mode cacahan naik, Timer 2 akan melakukan
cacahan dari nilai auto-reload sampai FFFFH, sedangkan pada cacahan turun,
Timer 2 melakukan cacahan dari FFFFH turun sampai nilai auto-reload'
Timer 1 dan 2 juga bisa digunakan sebagai pengatur baud rate untuk port
serial, yang akan dijelaskan di subbab berikutnya. Keteraug,an lebih ielas
mengenai operasi Timer bisa dilihat cli Bab 2 clan Bab ll. Ililb irri ilkart
menjelaskan bagaimana rnentpr()!lrilrn 'l'irnt'r tlt'ttglttt llt()(l(' lll()(l(' k,'t;;tttyit'
Iimer dan Port Serial
7.1.1 OPERASI TIMER O
7.l.l.l Mode O dqn Mode I
Mode 0 dan 1 pada dasarnya berfungsi sama; mode 0 akan mengaktifkanTimer sebagai pencacah 13 bit, sedangkan mode I mengaktifkan Timersebagai pencacah 16 bit. Sumber pulsa bisa diambil dari luar (Timer sebagai
pencacah) ataupun dari osilator internal (sebagai timer). Hal ini diaturmelalui register TMOD. Timer 0 dipilih dengan mengatur nibble rendahTMOD dan Timer 1 dipilih dengan mengatur nibble tinggi register TMOD.Karena pada mode 0 dan 1 kedua Timer beroperasi sama persis, dalam bukuini hanya akan dibahas bagaimana mengoperasikan Timer 0 yang bekerjadalam mode 0 dan 1. Gambar 7.1 memperlihatkan kembali susunan registerTMOD.
L.'15E LSE
:iATEI C/T1 I',r'l I 1 Mltl GATEI] C/TO Irrlll I I'"{[t-t
Gombor 7.1 Susunon Register IM()D
Timer 0 dipilih dengan membuat bit GATE0 berlogika 0 dan diaktifkandengan mengeset bit TRO di register TCON. Operasi pencacah atau pewaktu(yang memilih sumber pulsa) ditentukan oleh bit C/T0, sedangkan modekerja ditentukan oleh bit M01 dan M00. Untuk memfungsikan Timer 0
sebagai timer dalam mode 0, register TMOD harus diisi dengan 80H,sedangkan untuk mode 1 TMOD harus diisi 8lH.
Contoh program berikut memperlihatkan bagaimana mengoperasikan Timer0 dalam mode 0. AT89S52 bekerja dengan kristal 12 MHa dengan demikian 1
siklus mesin adalah 1 mikrodetik. Dalam mode 0, Timer 0 akan mengalamioverflow setelah 8192 pdetik. Dua buah display 7 segmen dihubungkansecara langsung ke P0 dan Pl untuk menampilkan bilangan heksadesimal dari00H - FFH, dengan 7 segmen yang terhubung ke P0 akan menampilkanrribble rendah dan 7 segmen yang terhubung dengan P1 akan menampilkanrribtrle tinggi. Ole.h karena laju overflow Timer 0 sangat cepat untuk diikuti,rrraka rligurlrkrrrr ll7 scl:irgai 1'rr.ncacah waktu tunda yang dikurang,i sr.tiap kali'l'irrrt,r 0 rrrt.tr1,,,rl,rrrrr ,,v,,rllow. Arrgku yang, akarr clitarnpilkarr rlisirnpan tli
299298
TIIUIER 1 TII,..,IER 0
l0r100 Teknik Antarmuka dan Pemrograman Mikrokontroler AT89S52
register B. Display akan diperbarui setiap kali isi R7 mencapai 0. Jika nilaiawal R7 adalah 122 (7AH), yang didefinisikan dengan konstanta
My-Counter, maka display akan diperbarui setiap 8192 x 122 = 999.040
mikrodetik atau sekitar 1 detik. Software akan selalu mengecek bit TFO yang
menandakan apakah Timer 0 overflow atau tidak, jika overflow R7 akan
dikurangi. Begitu seterusnya sampai R7 menjadi 0. Register B akan dinaikkan
setelah R7 menjadi 0. Kemudian data di B ditampilkan ke display 7 segmen
melalui prosedur Update-Display. Berikut programnya.
;Program Title : "Timer 0 in Mode 0";Fi1e name : Timer 0 Mode O.asm;Version : 1.0;Created daLe : Apri-l 19, 2007; Prograrnmer : Usman. * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
,' Microcontroler Pln,/ Port Assignment. * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * *
Timer dan Port Serial
anc Bmov A, Bcall Update_Displaysjmp Main_prog_Loop
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *Update_Display:
push ACCanl A, #0FHcalf Segnnent_ConverLermov LOW_DIGIT, Apop ACCswap Aanl A, #0FHcall Segment_Convertermov HIGH-DIGIT, Aret
Segrment_Converter:inc Amovc A, @A+pCret.LOW-DlGIT
HIGH-DIGIT
dj nzmov
eguequ
PO
P1
,. * ** * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * *
; Constanta Declaration- * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * ** * * * * * * * *
Delay_Count equ 7AH
. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * *
org 0000HMain_Prog:
mov TMOD, #80Hmov B, #0mov A, Bcall UpdaLe-Displaymov R7, # Delay-Countsetb TRO
Main_Prog_Loop:' jnb TF0, S
c1r TFO
dbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdb
lI trl
OCOH
OF9HOA4H
OBOH
099H092H082HOFSH
080H090H088H083HOC6H
OA]-H
OB6HOBEH
R7, Main_Procl LooF)R7 , llDelay Corrrrl
Teknik Antarmuka dan Pemrograman Mikrokontroler AI89S52
Contoh program berikutnya adalah memfungsikan Timer 0 dalam mode 1'
Programnya sama dengan program mode 0 di atas' TMOD diisi dengan 81H'
Dalam mod.e 1, Timer akan mengalami overflow setelah 65536 cacahan yang
sama dengan 65536 mikrodetik dengan frekuensi osilator 12 MHz' Iika
My-Courteradalah 15 maka display akan diperbarui setiap 15 x 65536 =
983.040 mikrodetik atau mendekati 1 detik'
: ========= ========:=;Program Title : "Timer 0 in Mode 1"
;File name : Timer 0 Mode 1'asm
;Version : 1.0;Created date : APriI 19, 2007
;Programmer : Usman. * * * * * * * * * * * * * ** * * ** * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * *
- * * * ** * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;Microcontroler Pin/ Port Assignment. *******************************************************
LOW DIGIT equ P0
HIGH-DIGIT egu P1
. **** *** ** ** ** * * ** ** * * * * * * * * * * * * * ** ** ** ** * ** * *** * * * *** **
;Constanta Definition- *******************************************************
My-CounLer equ l-5
. * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
org 0000HMain_Prog:
mov TMOD, #B1Hmov B, #0mov A. B
calf UPdate-DisPlaYmov R7, #MY-Countersetb TRO
Main_Prog_Loop:jnb TFO, S
c1r TFO
djnz R7, Main-Prog-Loopmov R7, #MY-Counl-erinc ll
mov A, B
call Update-Displaysjmp Main-Prog-Loop
. ***** ** * * ** ** ** ** ** * ** **** ** * *** * * **** ** *** *** * ** ** * ** *
Update-Display:push ACC
anl A, #OFHcall Segment-Convertermov LOW-DIGIT, Apop ACC
swap Aanl A, #0FHcall Segment-Convertermov HIGH_DIGIT, Aret
Segrment-Converter :
inc AmoVC A, @A+PC
ret
db 0c0Hdb 0F9Hdb 0A4Hdb 0B0Hdb 099Hdb 092Hdb 0B2Hdb 0F8Hdb 080Hdb 090Hdb 088Hdb 083Hdb 0c6Hdb 0A1Hdb 086Hdb OBEH
end
Iimer dan Port Serial 301102
Teknik Antarmul<a dan Pemrograman l'likrokontroler 4T89552
7.1.1.2 Mode 2 dqn Mode 3
Mode 2 adalah mode auto-reload, Timer bekerja sebagai pencacah 8 bit(register TL). Pada saat mengalami overflow, isi register TH akan disimpan ke
register TL. Dalam mode ini Timer tidak akan mencacah dari 0 sampai FFH,
tetapi akan mencacah dari nilai auto-reload. Timer akan mengalami overflow
setelah 255 - TH cacahan. Dengan frekuensi osilator 72 MHz, waktu
overflow paling lama adalah 255 mikrodetik di mana nilai auto-reload (TH)
bernilai 0. Nilai TH ditentukan secara software.
Contoh program berikut memanfaatkan Timer 0 yang bekerja di mode 2
untuk membangkitkan frekuensi (gelombang kotak) dalam daerah frekuensi
audio sehingga jika dihubungkan dengan speaker akan membangkitkan suara.
Dua buah saklar yang dihubungkan ke P2.l (Up-Slh danP2-2 (Down-Slil)
digunakan untuk mengatur THO (nilai auti-reload), menambah atau
mengurangi. Untuk menampilkan nilai THO digunakan 2 buah display 7
segmen yang terhubung dengan P0 dan Pl. Sedangkan speaker dihubungkan
dengan P2.O (SPK-Our) melalui sebuah resistor 220 Q. Cara lain untuk
menghubungkan speaker dengan mikrokontroler adalah dengan kapasitor
elektrolit. Nilai kapasitor yang bisa digunakan adalah 10 pF - 100 pF. Pada
saat menghubungkan speaker dengan resistor, port atau pin mikrokontroler
yang terhubung harus dijaga agar tidak berada di logika 0 dalam waktu yang
lama. ]ika tidak, arrs DC akan mengalir ke speaker dan bisa merusaknya.
Gambar 7.2 memperlihatkan cara menghubungkan speaker dengan resistor
dan kapasitor.
program diawali dengan menginisialisasi Timer 0 untuk bekerja di mode 2
dengan mengisi register TMOD dengan 82H. Sementara THO diisi 40H
sebagai nilai awal auto-reload, nilai ini kemudian ditampilkan ke display 7
segmen. Semua pin yang terhubung ke saklar dan speaker diberi logika tinggi.
Timer 0 diaktifkan dengan mengeset bit TRO. Sebuah alamat bit (Tone-Flag)
digunakan sebagai bit yang menunjuk apakah pin SPK-Our sedang berlogika
tinggi atau rendah.
Program selanjutnya membaca saklar. lika saklar Up*SWyang ditekan. nilai
THO akan ditambah l; jika saklar Down-SWyang ditekan' nilai THO akap
dikurangi 1. Program kemudian menampilkan nilai THO baru tersebut ke
display 7 segmen.
Timer dan Port Serial
(a) Speaher dengan Resisturr (b) Speaker detrgarr F-al,asitor
Gombor 7.2 Csrs Menghubungkon Speoker ke Mikrokontroler
Bagian utama dari contoh program ini adalah subrutin Generate_Tone.Subrutin ini akan mengirimkan gelombang kotak ke pin spK_our. periodegelombang ditentukan oleh laju overflow Timer 0 pada mode 2. Agarfrekuensi gelombang berada pada daerah frekuensi audio, register R7digunakan sebagai pencacah 60H (nilai lain akan menghasilkan frekuensiyang lain pula). Program akan mengecek bit Tone_Ftag, jika bit ini 0,program akan mengubah sPK-our menjadi berlogika l, sebaliknya jika 1,program akan mengubah sPK-our menjadi 0. program akan mengubah bitTone-Flag sesuai dengan logika di pin spK_out. Software akanmempertahankan kondisi 0 atau 1 di sPK_our dengan mengecek sampai bitTFO di set dan R7 menjadi 0, sehingga spK*out akan mengeluarkangelombang kotak dengan siklus kerja (dury cycle) 50 o/o, artinya periodeIogika I dan 0 sama. Gelombang kotak ini akan menyebabkan speakermengeluarkan suara dengan frekuensi yang sama dengan frekuensigelombang kotak tersebut.
; ============================= ==========;Program Title : ,,Tj_mer 0 in Mode 0 : Tone Generat.or,';File name : Tj-mer 0 Mode 2.asm; Version : 1.0;Created date : April 21, 200j; Programmer : Usman**********************************************
*************************************
30s
I'in/Pot:t Assignment
Ieknik Antarmuka dan Pemrograman l'likrokontroler AI89552Timer dan Port Serial
jb Down_SW, Read_Sett ingr_Exl tcafl Delay:nb Down_SW, S
dec THO
mov A, THO
sjmp UpdaLe*DisplayRead_Settingr*Exit:
ret
- * ** * * **** ** * *** ** ***** ** ** ** * * * * ** ** * * ** * * * **** ** * * * * * *
Generat.e Tone:R7, #60HTone_Flaq, SPK_Out_Low
SPK_Out_High:setb SPK_Outjnb TFO, $djnz R7, SPK_Out_Hlghclr TFOsetb Tone_Flagret
SPK_Out_Low:clr SPK_Outjnb TF0, S
djnz R7, SPK_Out_Lowclr TFOcl r Tone_F1agret
,. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Update_Dlsplay:push ACC
an1 A, #OFHcall Segrment_Convertermov LOW_DIGIT, Apop ACC
swap Aanl A, #0FHcall Segment_Convert.ermOV HIGH-DIGfT, Aret
307306
. * ****** ** *** * ** ** ******* * * ** ** ** ** * * **** * * * ** ** * ** * ** * *
;Internal RAM MaPPing. * *** * ** * * ** *** * ** * * * ** * * * * * * * * * * *** * * **** ** ** ** ** ** *** *
LOW-DIGlTHIGH-DIGIT
SPK_OutUp-SWDown SW
FlagTone_F1ag
equ P0
equ P1
equ P2.0equ P2.Legu P2.2
equ 20Hequ F1ag.0
movjb
. *** **** ** **** **** *** ****** ** ****** * * **** * **
org 0000HMain_Prog:
mov TMOD, #82Hmov THO, #40Hmov A, THocall UPdate-DisPlaYsetb TRO
setb SPK-Outsetb Up-SWseLb Down-SWsetb Tone-Flag
Main_Prog_Loop:call Read-setting-SWcall Generate-Tonesjmp Main-Prog-LooP
- *** ** **** ** ** ** * *** * ** ** * *** **** ** ** ** ** * ** ** **** ** * * * *
Read_Setting-SW:setb SPK-Outjb Up-SW, Check-Down-SWcatrl DelaYjnb Up-SW, $
inc THO
mov A, THO
sjmp UPdate-DisPlaY
Check Down SW:
109108 Teknik Antarmuka dan Pemrograman I'likrokontroler AT89552
Segment-Converter :
inc Amovc A, @A+PC
ret
db 0c0Hdb 0F9Hdb 0A4Hdb 0B0Hdb 099Hdb o92Hdb 082Hdb 0F8Hdb 0B0Hd.b 090Hdb OBBH
db 083Hdb 0c6Hdb 0A1Hdb 086Hdb 08EH
- ********************** *********************************Delay:
mov R0,mov R1.
Delay-LooP:djnz R0,djnz Rl-,ret
end
lnrcr dan Port Serial
\'llt9s52 akan terlihat memiliki 4 Timer, 2 buah timer 8 bit dengan 2 sumberrrrtt'rupsi (TLO dan THO), Timer 1 tanpa sumber interupsi dan Timer 2.
r.,rrr(oh program berikut memfungsikan Timer 0 pada mode 3. RegisterIN4OD diisi 83H. Program akan menampilkan bilangan heksadesimal dari
I r( )l I FFH ke 2 buah display 7 segmen yang terhubung ke P0 dan Pl. Seperti
l,,r,lrr contoh program Timer pada mode 0 dan 1, bilangan yang akan,lrtrrrnpilkan disimpan di register B. Display diperbarui setiap TLO dan THOrrr,'rrgalami overflow. Dalam mode ini TLO dan THO adalah 2 pencacah 8 bitr.rrrg terpisah. TLO dan THO akan mengalami overflow setelah 256 cacahan,rr,rrr 256 mikrodetik dengan frekuensi osilator 12 MHz, yang terlalu cepatrrrrtrrk diikuti. Oleh karena itu digunakan R0 (sebagai pencacah 256) dan R7
r1'r.nc'acah 8).
I lt) diaktifkan pertama kali dengan mengeset TRO. Program kemudian,r'nunggu sampai TLO mengalami overflow (dengan membaca bit TF0). Hal,,rr tliulangi sampai R0 menjadi 0 sehingga diperlukan cacahan sekitar 256 x'r'(, 65536. Selanjutnya proBram akan mengaktifkan THO dengan mengesetI li l. Dengan cara yang sama THO ditunggu sampai mengalami overflow danlit)tlikurangi sampai 0, sehingga waktu yang diperlukan untuk kedua proses,lr ,rtirs adalah 2 x 65536 cacahan arat 731072 mikrodetik dengan frekuensi 12
\ll lz lt7 digunakan sebagai pencacah 8 sehingga total waktu yang diperlukan,,l,rlrrlr 8 x 13IO72 = 7048576 mikrodetik atau kira-kira I detik.
i,r1)'rram Title : ,,Timer 0 in Mode 3,,I rlc ndrle : Timer 0 Mode 3.asm' r:ilon : 1.0
, 'r , .. rl.ed date : April 26 , 2OO'1i 'r , )( ll atrruter : USman, ^ ^ { tr ************ ********************** ****************
I ^
r r ^*******************************************x******
rl r,'r ocrontroler Pin/Port. Assignmentr r I r r ******************+*******************************
PO
P1
#0#t_00
$Delay LooP
Mode terakhir dari Timer adalah mode 3 yang hanya berlaku untuk Timer 0'
Pada mode ini, TLO dan THO akan menjadi 2 register 8 bit terpisah' 1'1.0
dikendalikan oleh bit-bit pengendali Timer 0, sedangkan THO dikendalikarr
oleh bit-bit pengendali Timer 1 (TRl dan TFl register TCON), termasttk
interupsinya. TLO bisa difungsikan sebagai pencacah sumber pulsa dari luar
atau dari osilator internal, sedangkan THO hanya bisa mencacah ptrlsa tlarr
osilator internal. Pada mode ini Timer t hanya bisa difungsikatr scbitgiri tirrr,'r
yang tidak bisa membangkitkan interupsi, clalatn mcnt'trlttkutr brttttl ratt' Pott
serial misalnya. Dengan demikian, kctika 'l'irrrt'r 0 lrt'kt'rjrt tli trrt'tlr' l,
t,r rW .-DIGITII ] (;II DTGTT
equequ
leknik Antarmul<a dan Pemrograman I'likrokontroler AT89S52 Iimer dan Port Serial
caIl Segrment_ConverLermov HIGH-DIGIT. Aret
Segment_Converter:inc Amovc A, @A+PC
ret
db 0c0Hdb 0F9Hdb 0A4Hdb 0B0Hdb 099Hdb 092Hdb 0B2Hdb OFBH
db 0B0Hdb 090Hdb OBBH
dt, 0B3Hdb 0c5Hdb 0A1Hdb 086Hdb OBEH
end
7.1.2 OPERASI TIMER 2
Ada 4 mode kerja yang bisa dilakukan oleh Timer 2: mode auto-reload 16 bit,mode capture 16 bit, sebagai pembangkit gelombang kotak, dan sebagai
pembangkit baud rate untuk port serial. Pada mode auto-reload, Timer 2 bisabekerja sebagai pencacah naik atau turun (diatur oleh bit DCEN dan arahcacahan ditentukan oleh pin T2EX), sedangkan mode auto-reload bisa diatursecara otomatis pada saat overflow (pencacah naik) atau undeflow (pencacah
turun), atau adanya transisi 1-ke-O di pin T2EX (ditentukan oleh bit EXEN).Nilai auto-reload adalah data yang tersimpan di regisrer RCAP2H danIiCAP2t, (16 bit). Pada mode pencacah naik, TL2 dan TH2 akan melakukanpr.ncacllrirn srrnrprri l,'ilril1 (ovcrflow). Pada saat ini data di RCAP2H danli(;n l'?1. tliprn,l,rlrL,rrr li,t' 'l'll2 rlan 'l'1,2 clan cac:ahan akan clirntrlai lagi dari
3il3t0
My-Counter equ B
. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * *
org 0000HMaln-Prog:
mov TMOD, #B3Hmov B, #0mov A, B
call Update-DisPlaYmov R7, #MY-Count-ermov R0, #0
Main-Prog-LooP:TL0_Loop:
setb TROjnb TFO, $
c1r TFO
djnz R0, TL0-LooPclr TRO
THO Loop:seLb TR1jnb TFI-, S
cf r TFl-c1r TR1dlnz R0, TH0-LooPdjnz R7, TL0-LooP
inc B
mov A, B
call UPdate-DisPlaYmov R7, #MY-Countersjmp Main-Prog-LooP
. * ** * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * *
Update-DisPlaY:push ACC
anl A, #oFHcall SegmenL-Convertermov LOW-DIGIT, Apop ACC
swap Aan1 A, #otrH
Teknik Antarmuka dan Pemrograman I'likrokontroler AT89S52
data tersebut. Pada mode cacahan turun, Timer 2 akan melakukan cacahan
dari FFFFH tumn sampai nilai cacahan (TH2 dan TL2) menjadi sama dengan
nilai yang tersimpan RCAP2H dan RCAP2L. Timer 2 dikatakan mengalami
underflow dan TH2 dan TL2 akan diisi FFFFH sebagai nilai auto-reload dan
cacahan dimulai lagi.
Mode capture ditentukan oleh bit EXEN2 dan bit CP/ RL2 dan aktif kalau
kedua bit ini di-set. Timer 2 bekerja sebagai timer atau pencacah 16 bit
dengan mode pencacahan naik (pada mode capture, Timer 2 tidak bisa diatur
sebagai pencacah turun). Sinyal kendali capture berasal dari pin T2EX'
transisi 1-ke-0 di pin ini akan menyebabkan isi register TH2 dan TL2 dibaca
atau di-capture dan disimpan ke register RCAP2H dan RCAP2L.
Sebagai pembangkit gelombang kotak, Timer 2 akan mengatur frekuensi
gelombang yang dikeluarkan melalui pin P1.0. Siklus kerja gelombang adalah
50o/o, artinya periode pulsa "tinggi" dan "rendah" akan sama. Frekuensi
dikeluarkan dengan mengeset bit T2OE. Keterangan lebih rinci mengenai
Timer 2 bisa dilihat di Bab 3. Subbab ini akan menjelaskan bagaimana
membuat program assembler untuk memfungsikan Timer 2 pada mode auto-
reload, capture dan pembangkit gelombang kotak, sedangkan contoh program
untuk operasi Timer 2 sebagai pembangkit baud rate port serial bisa dilihat di
subbab berikutnya.
7.1.2.1 Mode Auto-Reloqd l6 Bil
Contoh program berikut adalah jam digital dengan menggunakan Timer 2 di
mode auto-reload 16 bit. Sebuah LCD karakter 16 x 2 dihubungkan dengan
P1 dalam mode 4 bit. Sementara 3 buah saklar dihubungkan ke P3'0
(Mode-SW), P3.1 (Up-SW) dan P3.2 (Down-SW) yang digunakan untuk
mengatur jam dan menit. Saklar Mode-SW digunakan untuk mode peng-
aturan, jam atau menit, sedangkan tIp-SW dan Down-SW digunakan untuk
menaikkan atau menurunkan jr- atau menit sesuai dengan mode
pengaturan.
RAM internal digunakan untuk menyimpan data waktu. RAM internal
Second_Reg (32H) digunakan untuk menyimpan detik, Minure Reg (331I)
digunakan untuk menyimpan menit, dan Hour-Reg (34H) untuk mt-nyimpan
data jam. Set_Counter (30H) digunakan untuk menyitnparr clata p('llgattlra11
setiap kali Mocle_,9W dittkan. ,9ct ()tuntct' 0 lx'titrti rrtt'rrrttttpilkrttt jitttr
Timer dan Port Serial
secara normal (bukan mode pengaturan). Set_Counter: 1 berarti sedang
dalam mode pengaturan jam dan Set_Counter = 2 berarti sedang dalam modepengaturan menit. Data pengaturan ini digunakan pada saat penekanan saklar
W-SW dan Down_SW. Terakhir, Disp_Counrer (31H), digunakan sebagai
pencacah 5 detik untuk menormalkan mode display kalau pada modepengaturan pengguna jam digital ini tidak mengembalikan ke mode normalatau tidak menekan saklar lagi setelah 5 detik.
Timer 2 bekerja pada mode auto-reload 16 bit dengan arah cacahan naik(T2MOD = 0 dan T2CON = 0). Nilai auto-reload ditentukan secara software(RCAP2H = 3CH dan RCAP2L: AFH), sehingga Timer 2 akan mengalamioverflow setelah FFFFH - 3CAFH : C350H atau 50000 cacahan. R7
digunakan sebagai pencacah 20 agar jumlah cacahan menjadi 20 x 50000 =
1000000 dengan frekuensi osilator 12MHz ini berarti I detik.
Program diawali dengan menginisialisasi LCD agar bekerja dalam mode 4 bit(penjelasan lebih rinci mengenai LCD karakter bisa dibaca di Bab 6). Timer 2diinisialisasi agar bekerja pada mode auto-reload 16 bit. Semua alamat RAMinternal yang dipakai diberi nilai awal. RAM penyimpan data jam diberi nilai0, Set*Counter dan Disp*Counter masing-masing diberi 0 dan 5. Sedangkan
r.rilai auto-reload disimpan di RCAP2H (3CH) dan RCAP2L (AFH), begitu
iuga TH2 dan TL2 diberi nilai awal yang sama.
Data jam diperbarui dengan memanggil subrutin Update_Time, tentu sal'a
setelah Timer 2 dijalankan dengan mengeset TR2. R7 diberi nilai 20 sebagai
pencacah software. Program kemudian akan menunggu sampai Timer 2
overflow dan diulang sampai R7 menjadi 0 (waktu tunggu ini 1 detik denganlrekuensi 12 MHz). Setelah selesai, program akan menaikkan data detik dan
rlicek apakah sudah mencapai 60 atau belum. |ika sudah mencapai 60, detikrkan dinolkan dan data menit ditambah 1 Kemudian data menit dicekirpakah sudah mencapai 60 atau belum, jika sudah, data menit akan dinolkantlarr data jam ditambah l. Jika jam sudah mencapai 24, jam akan dinolkan.Sistcrn jam yang dipakai adalah sistem 24 jam. Jika data waktu (jam, menitrlrrrr cletik) sudah dibaca, jam akan ditampilkan ke LCD melalui subrutinI ) isp lay.-'l"i m e_To_LCD.
tlrrtrrk bisa ditarnpilkan di LCD, data jam, menit dan detik harus diubah ter-It'lrilr clalrultr rncnjacli clata ASCII. I-lal ini dilakukan di subrutin.\lt,rrt/ 'l rt l.(.'l). l)irt;r irrrrr, rnt'rrit utuu tlctik yang tersimpan di A terlebih
lt33r2
lr5I t4 Teknik Antarmul<a dan Pemrograman Mikrokontroler AT89S52
dahulu dibagi dengan 10 untuk mendapatkan bilangan puluhan dan satuan.
Instruksi pembagian div akan melakukan hal ini, hasilnya A akan
menyimpan bilangan puluhan dan sisa pembagian yang merupakan bilangan
satuan disimpan di B. Pengubahan menjadi ASCII dilakukan dengan
memanggii subrutin convert_To_ASCII, yang menggunakan metode tabel
data. Setelah menjadi bilangan ASCII' data segera dikirim ke LCD'
Setelah menampilkan waktu, program mengecek apakah pada saat itu sedang
dalam rnode pengaturan atau bukan dengan membaca Set-Counter. Jlka
alamat memori ini bernilai 0, maka pada saat itu bukan sedang dalam mode
pengaruran dan program akan kembali ke submtin utama. Jika tidak nol,
prog,ram akan melompat ke subrutin Cursor On untuk menampilkan kursor
di posisi jam atau menit bergantung pada mode pengaturan saat itu.
Kemudian program akan mengecek apakah pada saat itu mode pengaturan
telah berlangsung selama 5 detik atau belum dan tidak ada penekanan saklar
selama itu. Jika ya, program akan mengembalikan ke mode normal dan jika
tidak program akan menampilkan kursor, sesuai isi Set-Counter saat itu. Jika
Set_Counterbernilai 1, program akan menampilkan kursor di posisi bilangan
satuan jam (alamat LCD C5H), sedangkan jika isinya 2, kursor ditampilkan di
posisi bilangan satuan menit (C8H). Setelah itu program akan kemhali ke
subrutin utama.
Setelah menampilkan waktu, program akan membaca saklar. Pertama
program akan membaca Mode-SW. Jika tombol ini ditekan, maka
set_counrer akan dinaikkan dan subrutin Mode_Display akan dipanggil.
Subrutin Mode_Displayakan membaca dan mengecek isi Set-Counreruntuk
menentukan mode pengaturan. Jika isinya 1, maka mode pengaturan jam
akan diaktifkan, program akan menampilkan tulisan "' ATUR JAM " di
baris pertam alayar LCD. )ika Set-Counret"bernilai 2, mode pengaturan menit
yang akan diaktifkan. " ATUR MENIT " akan tampil di LCD setiap kali
mode-mode ini diaktifkat. Isi Disp_counter akan direset meniadi 5. Jika
Set_Counterbernilai 3, program harus mengembalikan mode pengaturan ke
mode normal dan isi Set*Countet-direset kembali menjadi 0.
|ika saklar Mode-SW tidak ditekan, program akan membaca saklar Up-SW
dan Down_Sltr{ Kedua sakiar ini akan menambah atau menumnkan lam atau
menit bergantung pada mode pengaturan yang sedang aktif saat itu. Jika tidak
sedang dalam mode pengaturan (Set.CoLtnter= 0), Program akarl kcrnbrli ke
subrutin utama. Jika .9ef (:ottrttt,t' l, ltrognrttt itkutt tttt'ttltrttlritlt itlittt
Iimer dan Port Serial
mengurangi jam, dan jlka Set*Counter : 2 program akan menambah ataumengurangi menit. Untuk jam, nilai maksimum adalah 23 dan unruk menitnilai maksimumnya 59, sehingga pada saat jam atau menit ditambah telahmencapai nilai maksimum masing-masing, jam atau menit akan dikembalikanke 0. lika setelah dikurangi nilai ;'am arau menir menjadi FFH, maka akandikembalikan menjadi nilai rnaksimum (23 untuk jam dan 59 untuk menit).Disp_Counter akan selalu diisi 5 pada saar proses penambahan araupengurangan data jam atau menit. Berikut adalah programnya secara lengkap.
;Program Title : "Jam Diqital",'File name : Timer 2 Auto Reload.asm;Version : 1.0;Created date : Apr11 30, 200'7;Author : Usman. * ** * * ** * * * * ** * * * * ** ** * * * * * * * * * ** * *** ** * * * ** * * * * * * ** ** **
,. ** * ** * * * * ** **** ** *** **** * * ** * * * * ** * * * * ** * ** ** * * *** * ** * *
;Microcontroler Pin/Port Assignment,.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;LCD ConErol PinLCD_DA equ P1LCD_RS equ P1.0LCD_RW equ P1.1LCD_E egu PL.2
Mode_SW equUp_SW equDown*SW equ
P3.0P3.1P3.2
Internal RAM*******************************************************
Set_CounterD].sp_Counter
Second ReEMinut e RegII()l.l r lilrl
equ 30Hequ 31H
equ 32Hequ 33Hequ 34H
Teknik Antarmuka dan Pemrograman I'likrokontroler ATB9552
;Constanta Definition- * ** ** ** *** * * * ** * * ** * * * ** * * ** * * ** * * * * ** * * * ** * * ** ** ** * * **
My-Counter data 20
,'LCD command def init-lon; Initializat.ion data
3t73r6 Timer dan Port Serial
Update_Time:mov R7, #My_CounLer
Update-Time*Loop1 :
jnb TF2, $
clr TF2djnz R7, Update-Time-Loopl
Update_Time_Loop11 :
inc Second-Regmov A, Second_Regcjne A, #60, update-Time-Loop2mov Second_Reg, #0lnc Minute_Regmov A, Minute_Regcjne A, #60, Update-Time-Loop2mov Minute_Reg, #0lnc Hour-Regcjne A, #24, Update-Time-Loop2mov Hour_Reg, #0
Update_Time_Loop2 :
call Display*Tlme-To-LCDret
- * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Read_SW:jb Mode_SW, Read-Up-SWcall Delay_20inc Set_Countercall Mode*Displayret
Read_Up_SW:jb Up_SW, Read-Down-SWcall Delay_20mov A, Set-_CounLerjnz Increment_ret
Increment_:mov Disp_Counter, #5cjne A, #L, Inc-Minuteinc Hour_Regmov A, Hour_Regcjne A, #24, Increment-Exltmov Hour_Reg. #0l; jrrrl , Itrcr-cmr:nt..-Exit
lrrc Mittrtl,':
SOFT-RSTSET4BITCONFIGENTRYMODE
data 3BHdata 20Hdata 2BHdata 06H
;Cursor InstructionCUR-OFF dATA OCH
CUR-LINE data OEH
CHAR-BLINK data ODH
COMB-CLIR data OFH
SHIFT-CURL dAIA 1OH
SHIFT-CURR dATA 1-4H
HOME-CrIR data 02H
;Display InstructionDISP-OFF data 08HDISP-ON data OEH
SHIFT-DISPL dat-a 1BH
SHIFT-DISPR data 1CH
DISP-CLR data Ol-H
- ** * ** ** * * ***** * ** ** * * *** * * * * ** ** * * * * **** * ** * * * * ** **** **ors 0000H
Main_Prog:call fnitLCD-4Bitcall Initializationcall DisPlaY-TimeseLb TR2mov P3, #OFFH
Main-Prog-LooP:call Update-Timecafl Read-SWsjmp Main-Prog-Loop
. ********************************
Teknik Antarmuka dan Pemrograman l,{ikrokontroler AT89552 Iimer dan Port Serial lr93r8
inc Minute-Regmov A, Hour_Regcjne A, #60, Increment-Exitmov Minute-Req, #0
_Lncrement Exat:call Display-Time-To LCDret
Read_Down_SW:jb Down*SW, Read-Sw-Exitcall Delay-20mov A, Set_Counter)nz Decrement*ret
Decrement_:mov Disp_Counter, #5cjne A, #1, Dec-Mindec Hour-Regmov A, Hour_Regcjne A, #OFFH, Read-SW-Exitmov Hour-Reg, #23sjmp Read_SW*Exit
Dec_Min:dec Minute_Regmov A. Minute-Regcjne A, #0FFH, Read-SW*Exitmov Minute_Reg, #59
Read SW Exit-:call Display_Time-To LCDret
Mode_Display:mov A, #BOHcafl WriLe-Command4mov A, Set_CounLercjne A, #1, Mode2-Checkmov Disp-Counter, #5mov DPTR, #Mode1call Send-String-To-LCDret
Mode2_Check:cine A, ll2., MorlcJ (llrcr'l<
mov Disp_CounLer, #5mov DPTR, #Mode2call Send_String_To LCDreL
Mode3_Check:cjne A, #3, Mode_Check_Exitmov SeL_Counter, #0call Di splay-Time
Mode_Check_Exit :
ret
Model:db
Mode2:db
' ATUR JAM "O
' ATUR MENfT ' , O
. *** ** * * ** **** ** **** * ** ** ****** ** * * ** * *** * * * ** * ** * ** ** **fnitialization:
mov T2MOD, #0T2CON, #O
mov 'IH2, #3CHmov 'IL2, #0AFHmov RCAP2H, #3CHmov RCAP2L, #OAFHmov Second_Reg, #0mov Minute_Req, #0mov Hour_Reg, #0mov Set_CounLer, #0mov Disp_Counter, #5ret
- * ** ** *** * ** ****** * * * **** * * * * ** * * *** * ***** ** ** * * ** *** * **Display_Time:
mov A, #B0Hcall Write_Command4mov DPTR, #Time_MSGcall Send*String_To LCDret
Display_Time_To_LCD:mov A, #0C4Hr'.r II WritcCommand4IIr()\/ A, ll()ln Ilr,r1
32 t120 Ieknik Antarmulo dan Pemrograman l'likrokontroler AT89552
call Send_To-LCDmov A, #':'call Write_Data4mov A. Minute-Regcall Send_To_LCD
a +'. '
call write_Data4mov A, Second-Regcall Send_To-LCD
mov A, Set*Counterjnz Cursor-Onmov A, #CUR-OFFcall Write-Command4ret
Cursor_On:djnz Disp-Counter, DisP-Cursormov Disp-Counter, #5mov Set-Counter, #0call Display-Timecall Display-Time-To LCDret
Di-sp_Cursor:cjne A, #7, CursorOn2mov A, #0C5Hcall Write-Command4mov A, #COMB*CURcall Write-Command4ret-
CursorOn2:mov A, #0CBHcall Write-Command4mov A, #COMB-CLIRcall Write-Command4ret
Time_MSG:db ' TIMER 2 DEMO ',O
. * ** ** ** * * *** * ** ** * * * ** * * * * ** * * * * * * ** ** * * * * * * * * * * * * * * * * *
Send-To-LCD:mov B, #10
Iimer dan Port Serial
div AB
call ConverL-To-ASCIIcalI Wrlte-Data4MOV A, B
call Convert-To-ASCIIcall Write-Data4ret
ConverL_To-ASCII :
inc Amovc A, @A+PC
ret
db '0'db 'l-'db '2'db '3'db '4'db 's'db '6'db 'J'db 'B'db '9'
,.*******************************************************Send_String-To-LCD :
clr AMOVC A, @A+DPTR
)z Send-S t.r j-ng-To-LCD-Ex j- tcalI write_Data4inc DPTR
sjmp Send-String-To LCD
Send-string-To LCD-Exit :
ret
. * ** **** ** ** * * ** ** ** *** **** **** ** * * **** **** * *** * * * ** ** **;LCD Control Routine. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * *
INiLLCD-4Bit :
mov B, #3rn()v n, #SOFT-RST
1l)il l,('l) 4llil l,oopl :
il! ,\/ l,( 'l ) I )i\, n
Ieknik Antarmuka dan Pemrograman l'likrokontroler AI89552
cfr LCD_RSc1r LCD-RWsetb LCD-Enopc1r LCD-Ecall Delay-20djnz B, Init-LCD-4Bit-t ooP1mov A, #SET4BITmov LCD-DA, Asetb LCD-Enopclr LCD-Ecall Delay-20mov DPTR, #lnitial-Datamov B, #5
InitLCD-4Bit Loop2:clr AMOVC A, @A+DPTR
call Write*Command4inc DPTRdjnz B, rnitlcD_4Bit Loop2ret
lniLial_DaLa:db CONF]G, DISP-OFF, DISP-CLR, ENTRYMODE,
CUR-OFF
/. * ** ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Clear-Display:mov A, #DISP-CLRcall Write-Command4ret
,.***************************x***************************Write_Data4:
push ACC
or1 A. #OFHorl LCD*DA, #0F0Hanl LCD DA, Asetb LCD-RScIr LCD_RW
SEIb LCD Enop
Timer dan Port Serial 323122
LCD-EACC
AA, #OFHLCD-DA, #OFOHLCD-DA, ALCD-E
LCD-EDelay_20
- * ** * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Write_Command4:push ACC
orl A, #0FHorl LCD_DA, #0F0Hanl LCD_DA, Aclr LCD_RSc1r LCD-RWsetb LCD_Enopc1r LCD_Epop ACC
swap Aorl A, #0FHorl LCD_DA, #0F0Hanl LCD_DA, Asetb LCD_Enopclr LCD_Ecall Delay_20ret
,. * ** ** * ** ** * **** * * *** ***** * ** ** ** **** **** * ** ** ** ** ** ** **
Delay_20:mov R7, #1call Delayl0ret.
I)c1ay1 0 :
nl()v Il l, l,ilOl)r'l;ry I o1,,,,,1,:
clrpopswapor1or1anlsetbnopc1rcallret:
124 Teknik Antarmulo dan Pemrograman l,likrokontroler AI89S52
mov F.2,#255djnz R2, S
djnz R3, DelaYl0LooPdlnz R7, DelaYl0ret
end
7.1.2.2 Mode Coplure
Dalam contoh berikut akan didemonstrasikan Timer 2 yang bekerja di mode
capture 16 bit. Sebuah saklar terhubung ke pin T2EX (P1.1) sebagai pemicu
caprure eksternal. Apabila saklar ini ditekan, data di TH2 dan TL2 akan di
capture ke RCAP2H dan RCAP2L. Sebuah LCD grafik digunakan untuk
menampilkan data register Timer 2 (TH2 dan TL2) dan register capture Timer
2 (RCAP2H dan RCAP2L). LCD bekerja pada mode atribut teks sehingga
hanya reks yang akan ditampilkan. Ukuran font dipilih 6 x 8 sehingga dalam
satu garis bisa menampilkan sampai 40 karakter'
program diawali dengan menginisialisasi Timer 2 agar bekerja pada mode
caprure (T2MOD = 0 dan T2CON = 09H). Pin T2EX di-set agar berfungsi
sebagai input dan bir TR2 di-set untuk mengaktifkan Timer 2. Program
diteruskan dengan menginisialisasi LCD grafik untuk bekerja pada mode teks
atribut. Alamat awal grafik ditentukan di 0000H dengan area grafik 28H,
sedangkan alamat awal teks ditentukan di 1700H dengan area grafik 28H.
Memori grafik "dibersihkan" dahulu mengingat sebuah RAM akan berada
pada kondisi acak ketika pertama kali catu daya dinyalakan. Program
kemudian mengirimkan data teks ke area memori teks, 7 baris teks
ditampilkan di layar LCD dengan teks di baris ke-3 diatur agar berkedip
normal (data atribut BLINK_NOR_DISP dlkirimkan ke area grafik yang
bersesuaian dengan area teks baris ke-3).
Bagian utama dari program ini adalah pembacaan register data (TH2 dan TL2)
dan register capture Timer 2 (RCAP2H dan RCAP2L) melalui subrutin
Read*Timer-Register dan menampilkannya ke layer LCD. Pertama program
membaca register TH2 dan TL2, kemudian menyimpannya di R0 dan Rl'
Penunjuk alamat RAM LCD diatur ke 17C3H sebagai alamat awal untuk
menampilkan TH2 dan TL2 (4 karakter). Sebelum dikirimkan ke mcmori
teks, data TH2 dan TL2 diubah terlebih clahulu rneniacli 2 karaktcr ASCII di
Iimer dan Port Serial
subrutin Hexa_To_ASCII, tentu saja setelah dikurangi dengan 20H agar
sesuai dengan format data LCD grafik. Kemudian program akan mengecek bitEXF2 untuk mengetahui apakah ada proses capture atau tidak. Jika bit EXF2
di-set, artinya ada proses capture (saklar ditekan), program akan membaca
register capture RCAP2H dan RCAP2L dan menyimpannya ke R0 dan Rl.Subrutin Delay dipanggil untuk menghilangkan efek bouncing pada saat
penekanan saklar. Program kemudian mengubahnya menjadi karakter ASCIIdan mengirimkannya ke memori LCD. Penunjuk alamat LCD diatur pada
17EBH.
Berbeda dengan contoh program jam digital, program ini tidak menggunakan
metode tabel look-up untuk mengubah data heksa menjadi data ASCII.
Bilangan heksadesimal yang akan diubah disimpan di register A. SubrutinHexa_To_ASCII akan mengubah bilangan heksa menjadi data ASCII,
hasilnya adalah 2 karakter ASCII yang tersimpan di A dan R2, dengan Amenyimpan digit atas dan R2 menyimpan digit bawah. Program menyimpanbilangan heksa yang akan diubah di R2. Pertama A di-AND-kan dengan OFH
untuk mendapatkan Nibble bawah. Kemudian proBram akan mengecek
apakah bilangan berada di antara 0 dan 9 atau di antara AH dan FH. likabilangan berada di antara 0 dan 9, pengurangan bilangan 9 dengan bilangan
heksadesimal tersebut tidak akan menghasilkan pinjaman luar (borrow). Ataupenambahan F6H (100H - AH) ke bilangan heksa tersebut tidak akan
menghasilkan bawaan (carry). Misalnya bilangan tersebut adalah n. ]ika n
berada di antara 0 dan 9, bit C tidak akan di-set ketika n dijumlahkan dengan
F6H (program melompat ke No_Adiusr). Untuk mendapatkan kode ASCII-nya. n harus diambil kembali dan kode ASCII untuk bilangan 0 (30H) harus
ditambahkan. Setelah ditambahkan dengan F6H, n harus ditambahkandengan AH ini berarti sama dengan menambahkan 100H ke n yang
menghasilkan bilangan n tetap berada di A. Dalam program penambahan AHdan 30H ke n dilakukan sekaligus dengan menambahkan 3AH ke n. Hasilnya
adalah kode ASCII untuk bilangan n dan disimpan di R2.
Jika n berada di antara AH dan FH, penambahan F6H dengan n akan
rnengeset bit carry. Kode ASCII untuk karakter 9 adalah 39H, sedangkan
kode ASCII untuk karakter A adalah 41H, bukan 3AH, karena itu bilangan nlrarus ditambahkan dengan 7 (4lH - 3AH : 7H) sebelum ditambahkanilengan llA ll rrntuk mendapatkan kode ASCII-nya. Program kemudian
tlillnjtrtkrrn rrrrtrrk nrt'ngrrbah nibble atas menjadi kode ASCII. Sebelr,rm
125
127126 Ieknik Antarmul<a dan Pemrograman Mikrokontroler AI89S52
keluar dari subrutin ini, bit C di-reset dulu karena kode ASCII ini harus
dikurangi dengan 20H sebelum dikirimkan ke memori LCD.
| -========;Proqram Title : "Timer 2 Capture Mode"
;Fi1e name : Timer 2 Capture.asm;Version : 1.0;Created date : May 08, 2007; Prograrnmer : Usman. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;Microcontroler Pin/Port AssignmenL. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * *
LCD-CELCD-RSTLCD-CDLCD-WRLCD-RDLCD-DAT
T2EX
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
,' Const-anta DeclaraLion. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;LCD Initiafize commmand deflnj-tionGH equ 0000HGA equ 0028HTH equ 1700HTA equ 0028H
42H43H40H4lH
LINEI-ADDRL]NE2-ADDRLINE3*ADDRL]NE4_ADDRLINEs-ADDRLINE6 ADDR
1700H1128H1750HT11 BH
1'lA0r r
l '/ctirr
Iimer dan Port Serial
LINET*ADDRLINEB-ADDR
;LCD ModeLCD_MODE equ
equ 17F0Hequ 1B1BH
B4H
9CH
24H
equequegueguequequ
P3 .3P3 .4P3 .5P3 .6P3.7PO
;Display ModeDISPLAY_MODE equ
SET_ADDRP equ
AUTO-WR-ONAUTO-WR-OFFAUTO-RD-ONAUTO*RD-OFF
OFFSET-REGSET-OFFSET
NORM-DISPNEG-DISPINH DTSPBLINK-NOR_DISPBLfNK-NEG-DISPWR-]NC-ADP
equ 0B0Hegu 0B2Hegu 0B1Hequ 0B3H
equ 0003Hequ 22H
egu 00Hegu 05Hequ 03Hegu OBH
egu ODH
equ 0C0H
equ Pl-.1
SET_GH equSET_GA equSET_TH equSET_TA egu
,. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;Main Program,,
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *Org 0000H
Ma i n_Prog:call rnitialize_Timer2call rnitialize LCDcafl Clear_Memorycall Send Text
mov DPTR, #0050Hmov B, #2BHmov A, #BLINK_NOR_DISPcall Send_Atrlbut Data
equeguequequequc(lu
329328 Teknik Antarmuka dan Pemrograman l'likrokontroler AT89S52
Main-Prog LooP:call Read-Timer-Regj-stersjmp Main-Prog-Loop
- * * * * * ** * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Initialize Timer2:mov T2MOD, #0mov T2CON, #09Hsetb T2Exsetb TR2ret
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Read Timer-Register:mov R0, TH2
mov Rl-, TL2mov DPTR, #17C3Hcall Set-Address-Pointercall DisPlaY-Dat-ainb ExF2, No-Captureclr EXF2call DelaYcall DelaymOV RO, RCAP2H
mov R1, RCAP2Lmov DPTR, #17EBHcall Set-Address-Polntercall DisPlaY-DaLa
No_Capture:call DelaYret
,. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
DispJ-ay-DaLa:mov A, R0
call Hexa-To-ASCIIcall Send-To-LCDmov A, R1
calf Hexa-To-ASCI1call Send-To LCDret
- * *** * ** **** *** * * *** * **** * * ** ** * * ** ** ******* * * * * * * * *x* **
Hexa-To-ASCII:mov R2, Aan1 A, #0FHadd A, #0F6Hjnc No_Adjust-add A, #07H
No_Adjust:add A, #3AHxch A, R2swap Aanl A, #0FHadd A, #0F6Hjnc No_Adjust2add A, #07H
No_Adjust2:add A, #3AHclr C
reL
Send_To_LCD:subb A, #20Hcall Data_Writemov A, #WR_INC-ADPcall Cmd_Writemov A, R2
subb A. #20Hcall DaLa Writemov A, +Wn*fUC anPcafl Cmd*Writeret
Timer dan Port Serial
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Send_Atribut_Da La :
push ACCcall Set_Address_Point-ermov A, #AUTO_WR_ONcall Cmd_WriLepop ACC
Send_Atr i but_Data_Loop :
call [);rtaWriterl jrr:r l{, llr,rrrl At-,ribut_,Dat-a Looptll()\/ A. ll nl I'l'( ) Wll OIJIr
330 Ieknik Antarmul<a dan Pemrograman Mikrokontroler AT89552
call Cmd-Wrlteret
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Delay:mov R5, #5
Delay_Loop:mov R0, #50mov Rl, #50call DelaY-LooP1djnz R5, DelaY-LooPreL
Delay-Loop1:djnz R0, $
dlnz R1, DelaY-LooP1ret
- * * * * * * * * * ** * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Clear-Memory:mov DPTR, #GH
call Set-Address-Pointermov A, #AUTO-WR-ONcall Cmd-WriLe
mov DPTR, #0000HClearMemoryloop:
c1r Acall Data-Auto-WriLeMOV A, DPH
subb A, #1FHmov B. Amov A, DPLsubb A, #0FFHorl A, B
inc DPTR
)nz ClearMemorYlooPmov A, #AUTO-WR-OFFcall Cmd-Writeret
Timer dan Port Serial
Send Text:mov DPTR, #LINE1-ADDRcall Set_Address_pointermov DPTR, #My_Text1call SendTextret
,. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
My_Text1:db 'TEKNIK ANTARMUKA DAN PEMROGRAMAN ATB9S52,,
My*Text.2:db
My_Text3:db ' TIMER 2 DEMO: CAPTURE MODE ,
My_Text4:db | * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * I
My_Text5:db 'DATA REGTSTER (TH2 & TL2) : 0000H',
My_Text6:db 'CAPTURE DATA (RCAP2H & RCAP2L) : OOOOH',db r****************************************,,0
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *SendText:
mov A, #AUTO-WR-oNcall Cmd_WriLe
Send_Text_Loop:clr Amovc A, @A+DPTRjz Send_Text_Exitsubb A, #20Hcall Data_Auto Writeinc DPTRsjmp Send_Text_Loop
Send_Text_Exit:mov A, #AUTO_WR_OFFcall Cmd_Writeret.
,. * * * * * * * * * ** ** * * ** * ** **** * * ** ** ** * * ** * * ** * ** * *** ** ** * * **lrritiali:.rr. L('l):
r'lt l,('l) I'1,:
r',rl I 1r,..:r.l l,('t)
3l r
Timer dan Port Serial
Ieknik Antarmuka dan Pemrograman l'likrokontroler AT89S52
Set_Display_Mode :
call SeT-LCD-MOdC MOV A. #DfSPLAY-MODEcall Graphic-setting call Cmd-WriLecall Text-setting retcall Set-DisPlaY-Moderet SeL_Address_pointer:
- ******************************************************* mov A, #SET-ADDRP
Reset LCD: call Send_3Byte_Commandc1r LCD_RST ret
3il332
nopnopnopnopnopSETb LCD-RSTret
- * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Graphic-Sett ing :
. *** * * * * ** ** ** * * * * *** ** ** ** * * ***** * **** * * * ** ** * *** ** ** * *Send_3Byte_Command:
push ACC
mov A, DPLcal l Data_V[ri temov A, DPHcall Data Writepop ACC
call Cmd_Writeret
DPTR, +GH
call Send-3Byte Coftnand Data-Write:DPTR, +cA push ACC
call send,3Byte-Coflmand clr rcD-CDrer pop ACC
o"ti;Yt t"r"o_oor, o
Text-seEting: cL rcD CE
DPTR, +TH CIT I,CD_!!R
call Send 3Byte,Comnand no!)DD'I R, {TA NOP
A, +sET TA nopcall Send-3Byte Coirdna-nd nopret serb I-CD WR
setb LCD,CEret
Set-LCD-Mode:
call Cmd_Write pushreE (:alt li,t) u{,ad Status
r(l l) lr'lr r'lr
Ieknik Antarmuka dan Pemrograman I'likrokontroler AT89S52 Iimer dan Port Serial
7.1.2.3 Pembongkit Clock
Pembahasan terakhir mengenai rimer 2 adalah memfungsikan Timer inisebagai pembangkit clock (gelombang kotak) yang akan dikeluarkan melaluipin T2 (pin P1.0) dengan siklus kerja 50olo. Frekuensi gelombang korakditentukan oleh frekuensi osilator (Timer 2 akan mencacah pulsa dari osilator
internal ctT2=o) dan nilai reload yang rersimpan di RCAp2H dan RCAP2Lyang dinyatakan dengan persamaan berikut
Frekuensi clock =Frekuensi Osilator
4 x (65536 *IRCAP2II, RCAP2L])
untuk mengakti{kan pin T2 sebagai keluaran gelombang kotak, bit T2oEharus di-set. Timer 2 bekerja sebagai pencacah 16 bit, terapi pada saaroverflow, isi register RCAP2H dan RCAP2L akan disimpan ke TH2 dan TL2;Timer 2 tidak akan membangkitkan interupsi.
Contoh program berikut akan memfirngsikan Timer 2 sebagai pembangkitgelombang kotak. Dua buah saklar dihubungkan ke p0.0 dan p0.l yangdigunakan untuk mengatur frekuensi yang akan dikeluarkan (Llp_sw danDown_SW) dengan cara menambah (Up*SW) atau mengurangi (Down_SW)isi register RCAP2H dan RCAP2L. Program diawali dengan menginisialisasiTimer 2 untuk bekerja sebagai pembangkit gelombang kotak dengan bitT2oE di-set agar pin T2 (P1.0) berfungsi sebagai ourpur. Dengan frekuensi 12MHz frekuensi yang bisa dikeluarkan adalah 45 Hz - 3 MHz. Register Timer2 (THz dan TL2) dan regisrer capture (RCAP2H dan RCAp2L) diberi niraiawal 0. Setelah Timer 2 diaktifkan dan bit T2oE di-set. gelombang kotakakan keluar dari pin T2 dengan frekuensi 45 Hz.
Program kemudian akan membaca saklar (Read_SW), jika saklar Up_SWyang ditekan, program akan menaikkan isi register RCAP2H dan RCAp2Ltrntuk menaikkan frekuensi; dan jlka Down-swyangditekan, program akanrnenurunkan isi RCAP2H dan RCAP2L unruk menurunkan frekue,si.
; I)rog:ram Title : "Clock Generat.or";lri1e name : Timer 2 Clock Generator.asm;Vr:rsiorr : 1.0;('rCrzttcrl rl,rlr, : Nowcmber 23, 2001;Artl ltr)t : lll;trr,rrr
315
pop acccall Data-Writ-e1ret
LCD_Read_Status :
MOV LCD-DAT, #OFFH
setb LCD-CDclr LCD RD
clr LCD-CEnopnopnopnopmovsetbsetbanIcj nereL
A, LCD-DATLCD-RDLCD-CEa, #03Ha, #03H, LCD-Read-SLatus
,. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Data-Auto-Write :
push ACC
mov LCD DAT, #OFFH
Da ta-Aut o-Wr i t e-LooP :
setb LCD-CDLCD-RDLCD-CE
A, LCD-DATLCD_RDLCD_CEA, #O8HA, #08H, Data-Auto-Write LooPLCD-CDACC
Data-Writel
cfrc1rnopnopnopnopmovsetbsetban1cjnec1rpopcallret
end
317316 Teknik Antarmuka dan Pemrograman lvlikrokontroler AI89S52
, ***** * * ** ******** ** * * * ** * * * * ** ** ** * * *** * * * * ** ** **** ** * *; Microcontroler Pin/ Port Assignment. * ** ***** * *** *** * * ** * ** ** **** ** * * * *** ** ** * **** **** * * ** **
Timer dan Port Serial
mov RCAP2H, DPHmov RCAP2L, DPLsetb TR2ret
Read_Down*SW:jb Down_SW, Read_SW_Exitcall Delav 20c1r TR2mov XL, RCAP2Lmov XH, RCAP2Hmov yH, #0mov yL, #1call SUB16mov RCAP2H, ZHmov RCAP2L, ZLsetb TR2
Read_SW_Exi-t:reL
,. * **** * * ** * * * * ** * * * ** ** * * * * ** * * ** ** ** * * * * * ** ** *** * ** ** * *
'I fmerz -Lnat:mov T2MOD, #04Hmov T2CON, #02Hmov RCAP2H, #0Hmov RCAP2L, #0Hret
. *** * * ****** ** *** * ** * * * ** ** ** ** *** * ** *** * * * * **** ** * * ** * *
; Internal RAM. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Up_SW equDown_SW equ
FlagReq equzov bir
XH equXL eguYH equYL equZH equZL equ
ZO
LI
aa
Z3
equequeguequ
P0 .1P0 .2
20HFlagReg. 0
37H3BH39H3AH3BH3CH
3DH3EH3FH40H
. * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
ors 0000HMain_Prog:
call Timer2 rnitMai-n__Prog_Loop :
call Read_SWsjmp Main_Prog-Loop
- * * * * * ** * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Read_SW:Read_Up_SW:
jb Up-SW, Read-Down-SWcall Delay_20cl-r TR2mov DPH, RCAP2Hmov DPL, RCAP2Linc DPTR
SUB16:movclrsubbmovmovsubbmovmovret
*************************************************
A. XL
A, YLZL, AA, XHA, YHZH, AZOV, C
139ll8 Teknik Antarmulta dan Pemrograman l,likrokontroler AI89552
call De1aY10ret
De1ay10:mov R3, #20
Delayl0LooP:mov R2,#255djnz R2, $
djnz R3, DelaYl0l,ooPdjnz R7, DeIaYl0ret
end
V.2 PORT SERIAT
seperti telah dijelaskan di Bab 2, AT89S52 dilengkapi dengan sebuah port
,".iul yrrg bisa diprogram untuk melakukan komunikasi serial asinkron
(UART) dua arah penuh (fult duplex). Port serial ini dikendalikan oleh scoN
yang mengatur mode kerja dan juga menyimpan bit-bit status port serial'
Duta yung akan dikirimkan arau diterima disimpan di register SBUF. Menulis
data ke register ini berarti mengirimkan data melalui port serial, sedangkan
membaca data dari SBUF berarti membaca data dari port serial. Walaupun
SBUF dalam SFR hanya menempati sebuah alamat, tetapi secara hardware
sBUF memiliki 2 bufffer yang terpisah untuk pengiriman dan penerimaan
data sehingga memungkinkan untuk rrenerima dan mengirimkan data secara
bersamaan. Kecepatan data (baud rate) ditentukan oleh frekuensi osilator
dengan menggunakan Timer 1 atau 'fimer 2 sebagai pernbangkit baud rate.
Bit SMOD di register PCON digunakan untuk menggandakan baud rate'
Ada 4 mode yang bisa dipilih dengan mengatur bit SMO dan SM1 di register
SCoN: mode 0, 1, 2, dan 3. Mode 0 memfungsikan port serial sebagai register
geser (untuk komunikasi serial sinkron). Data dikirimkan dan diterima
melalui pin RXD dengan bit LSB dikirim atau diterima terlebih dalrulu,
sedangkan pin TXD akan mengeluarkan sinyal clock sinkronisasi. Mode I ' 2'
dan 3 merupakan mode serial uART (asinkron)" Data dikirim melalur pirr
TXD dan diterima melaiui RXD. Hai yang membedakan di antara mocle troclt'
ini adalah jumlah bit data dan baud rate. Mode yang paling, st'ring, cligtrnakan
adalah mode 1 (B bit data, I bit start tlan I bit stoP tlclrgatt bittrtl rirlt' yrrrtg lrrsrt
Iimer dan Port Serial
diatur). oleh karena itu, trrnya mode 0 dan mode I yang akan dibahas didalam bab ini.
7.2.1 MODE O: REGISTER GESER
Program 7segmen4.asm, yang dibahas di Bab 6, memperlihatkan bagaimanamengendalikan 5 buah display 7 segmen dengan menggunakan register geserdengan IC TTL 74L5164. Data dikirimkan bit demi bit dengan caramenggesernya melalui bit c kemudian mengirimkan bit C tersebut ke pindata dengan MSB dikirim terlebih dahulu. Sedangkan clock dikirimkandengan meng-setb dan meng-clr pin clock. Register B digunakan sebagaipencacah 8. Dengan menggunakan port serial yang bekerja di mode 0,subrutin send-Data-To-Displaybisa disingkat sebagai berikut, rentu saia porrserial terlebih dahulu harus diinisialisasi untuk bekerja pada mode 0.Send_Data_To_Di splay :
call Segment_Convertermov SBUF, Ajnb TI, S
c1r TIret
subrutinnya menjadi sangat singkat, tidak memerlukan instruksi untukmenggeser data atau instruksi setb dan clr untuk mengirirnkan clock dan jugatidak memerlukan register B atau RAM sebagai pencacah. Data yangtersimpan di akumulator tinggal ditransfer ke register SBUF, maka cpU akansecara otomatis mengirimkan data bit demi bit melalui pin RXD dengan bitLSB dikirimkan terlebih dahulu dan sinyal clock dikirimkan melalui pinTXD. Tabel data untuk menyalakan display 7 segmen disesuaikan kembalimengingat bit yang perrama kali dikirim berbeda dengan programsebelumnya. Seperti telah dijelaskan, menulis ke register sBUF akan memulaipengiriman serial dengan mode yang telah ditentukan. Setelah mentransferdata ke SBUF, program tinggal menunggu apakah proses pengiriman telahselesai atau belum dengan mengecek bit TI. ]ika bit ini di-set berarti prosespengiriman telah selesai. Program hams me-reser bit TI kembati agar prosesper.rgiriman data selanjutnya bisa dilakukan.
IJntuk rncr.rginisialisasi porr serial agar bisa bekerja di mode 0, register scoNharus clilrcri rrilrri o. l':rcla mode ini tidak perlu mengir.risialisasi Tirner sebagai
|t'tttbitttlilitt l,,ttt,l t,tl,'lirtt'tur battci ratr'(utarr lcbih tcl)utnyil kt.<.t.puturr c.lor.k)
34t140 Ieknik Antarmuka dan Pemrograman Mikrokontroler AT89552
dalam mode 0 adalah 1/12 frekuensi osilator. Dengan frekuensi 12 MHz,
frekuensi clock adalah 1 MHz. Lembaran data IC 74L5164 menuliskan bahwa
IC ini sanggup menerima sinyal clock sampai 25 MHz, lebih dari cukup
untuk menerima sinyal I MHz.
,. =========;Program Title : "Port Serial Mode 0:7 Segmen Displaywith shift regisLer";Flle name : Port SerLal Modeo-asm
;Version : 1.0;Created date : MaY 23, 2007Prograrnrner : Usman**********************************************x********
*******************************************************Microcontroler Pin/Port AssignmenL*******************************************************
;7 seg'ment control PinSS-DAT egu P3.0SS-CLK equ P3.l-SS RST equ P3.1
*******************************************************TnLernal RAM mappinE+******************************************************
Iimer dan Port Serial
ZH
ZLZO
ZI22Z3
-6q" 3BH
egu 3CHequ 3DHegu 3EHequ 3FHequ 40H
FIagReg equzov bir
My_NurnberHMy_NumberL
Disp_DaLa1Disp_Data2Disp_Data3Disp_Data4Disp_Data5
XHXLYHYI,
20HFlagReg. 0
equequ
equequequequequ
equequequa)(lt l
30H31H
2'U
33H34H35H36H
3"/H3BH39IIin ll
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *;Main Program,. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
orq 0000HMain_Prog:
mov SCON, #0mov My_NumberH, #0FFHmov My_Nrunberl,, #OPFH
Main*Prog_Loop:call Update_My_Numbercall Display_To_7_segnnent.call Delaycalf Delaycall Delaysjmp Main_Prog_Loop
,. *** * *** *** *** ****** * ** * * ** ** * * * * * * ** **** * **** * * ** ** ****Update_My_Number:
mov DPH, My_NumberHmov DPL, My_Numberlinc DPTRmov My_NurnberH, DPHmov My_Numberl, DPLmov XH, My_NumlcerHmov XL, My*Nurnberl,call Decimal_Adjustret
- * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *Decimal_Adjust:
mov YH, #21Hmov YL, #10Hc;rll DIV1 6
Teknik Antarmuka dan Pemrograman Hikrokontroter AT89552
movmov
movmovmovmovcall-movmov
movmovmovmovcallmovmov
movmovmovmovcallmovmov
movret
. * ** * * * * * ** * * * ** ** * * * ** ** * * ** ** ** *** * * * * * * ** ** ** ** ** * * **
; Aritmethic sub-routine. * ** * * * * ** ** ** ** * * *** * ** * * * * * * * * * * * * * * * ** * * * ** * * ** * * ** **
Timer dan Port Serial 143142
DIV16:movor1
setbret
div-OK:
A, YLdiv-OKzov
A, Z2Disp-Data5, A
XH, Z1
XL, ZO
YH, #O3H
YL, #OEBH
DIV16A, 22Disp-Data4, A
XH, Z\XL, ZO
YH, #OH
YL, #64HDIV16A, 22DisP-Data3, A
XH, Z1-
XL, ZO
YH, #OH.YL, #OAHDIV16A. Z2
Disp-Data2, AA, ZO
Disp-Data1, A
mov R1, XHmov R0, xLmov XH, #0mov XL, #0mov R3, #0mov R2, #0mov R7, #16
div_loop:c1r C
mov A, R0rlc Amov R0, Amov A, R1rlc Amov R1, Amov A, XLrfc Amov Xl, Amov A. XHrlc Amov XH, Alca11 SUB16mov C, ZOVcpl Cjnc div_lmov XH, ZH
mov X1, ZL
div_l:movrlcmovmovr1cmovd)nzmovmovmovmovclrtll
A, R2AR2, AA, R3
AR3, AR7, div23, R322, R227, XHZO, XL'/,ov
_loop
Ieknik Antarmuka dan Pemrograman I'tikrokontroler AT89S52
SUB16:mov A, XLclr C
subb A, YLmov ZL, Amov A, XH
subb A, YH
mov ZH, Amov zov, cret
. * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Di sp 1 ay-To-7 -Segment
:
clr SS-RSTmov R0, #5mov Rl-, #DisP-Data5
Di sp 1 ay-To-7-S egment-Loop :
mov A, @R1
call Send-Data-To-DisPlaYdec R1
djnz R0, Display-To-7-SegmenL-Loopsetb SS RST
ret.
Send-DaL a-To-D i sP 1 aY :
call Segrment-ConverLermov SBUF, Ajnb TI, S
clr TIret
Segrment-ConverLer:inc Amovc A, @A+PC
ret
OEEH
OOCH
OCTH
OBFH
O2DH
OABH
OEBH
OOEH
Iimer dan Port lerial
db OFFHdb OAFH
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *Delay:
mov R0, #0mov R1, #0
Delay,Loop:Jnz R0, $djnz R1, Delay_Loopret
end
7.2.2 MODE l: KOMUNIKASI SERlAt UART
Untuk mengatur port serial agar bekerja pada mode 1, regisrer SCoN diisi50H (bit SMO = 0, SM1 = 1 memilih mode l, bit SM2 : 0, mode multiprosesordimatikan, REN = I untuk mengaktifkan penerimaan. Bit-bit yang lain 0),kemudian menentukan baud rate. Jika Timer 1 digunakan sebagai pembangkit baud rate, Timer I harus bekerja pada mode 2 (TMOD: 20H). Nilaiauto-reload (TH1) akan menenrukan baud rarenya, misalnya untuk baud rate9600 bps pada frekuensi 11,0592 MHz, nilai rl{1 adalah FDH (rihat Bab 2untuk menentukan baud rate yang lain). Setelah menentukan nilai rH1,program harus mengakrifkan Timer I dengan cara mengeset bit TR1. Berikutadalah subrutin untuk menginisialisasi port serial pada mode 1 dengan TimerI sebagai pembangkit baud rate.
Seriaf_Port*Init :
mov SCON, #50Hmov TMOD, #20Hmov TH1, #OFDHsetb TR1r:et
]ika Timer 2 yang digunakan sebagai pembangkit baud rate, bit TCLK danRCLK di register T2coN harus diset (umumnya pengiriman dan penerimaanrnenggunakan baud rate yang sama). Timer 2 bekerja pada mode auto-reload16 bit, di mana pada saat overflow nilai auto-reload yang disimpan diItcAP2tl clan RCAP2L akan dipindahkan ke TH2 dan TL2. Nilai auto-reloadirrilah yirrrg irkrrrr rnt'ncntukan baucl rate. Rab 3 telah mcnjelaskan tentang lralitti, tttisltlrrt',r trtrlrrl' l,;rrrtl r.lrtt'(XdX) bPs clt'ngan frt.ktrt.rrsi Il,05()2 Mllz trilui
34s344
dbdbdbdbd"b
dbdbdb
341346 Teknik Antarmuka dan Pemrograman Mikrokontroler AI89S52
RCAP2H adalah FFH dan RCAP2L adalah DCH. Kemudian bit TR2 di-set
untuk menjalankan Timer 2; karena bit ini juga terletak di register T2CON,
maka T2CON bisa langsung diisi 34H'
Serial-Port-Init:mov SCON, #50Hmov RCAP2H, #OFFH
MOV RCAP2L, #ODCH
mov T2CON, #34Hret
proses pengiriman atau penerimaan data bisa dilakukan setelah port serial
diinisiaiisasi. Pengiriman dilakukan dengan menuliskan data ke register
SBUF.Programharusmenungsuseluruhdata(8bit)selesaidikirimkandenganmenunsgusampaibitTldi_set'Setelahselesai'bitTlharusdi-resetkembali agar pengiriman selanjutnya bisa dilakukan' Berikut ini subrutin
untuk mengirim; data yang akan dikirimkan disimpan di A'
Serial-Transmit :
MOV SBUF, Ajnb TI, $
c1r TIret
pada proses penerimaan, program harus mengecek apakah data telah diterima
denganlengkapataubelumdenganmengecekbitRi.}ikabitinidi.set,berarti data telah lengkap diterima dan SBUF bisa dibaca. Setelah selesai, bit
Rlharusdi-resetkembaliagardataselanjutnyabisaditerima.Subrutinberikut adalah subrutin pembacaan data serial. Data yang telah diterima
disimpan di A.
Serial-Receive:jnb RI, $
mov A, SBUF
clr RIret
Pada contoh program berikut, AT89S52 akan membaca port serial dan
mengirimkannYa kembali'
;========= ==========;Program Title : "Port Serial Mode 1"
;Fi1e name : Port Serial Mode 1'asm
;Version : 1.0;Created daLe : MaY ?1, ?OO1
Iimer dan Port Serial
,'Prograrnmer : Usman-,.
* * * ** * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
,. * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * x * * **
;Main Program,.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *Org 0000H
Main_Prog:cal-f Serial Port Inlt
Main_Prog_Loop:call Serial_Receivecall Serial_Transmitsjmp Main_Prog_Loop
,. * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * ** * * * * ** * * **
Seria 1_PorL_Ini t :
mov SCON, #50Hmov TMOD, #20Hmov TH1, #0FDHsetb TR1retl
Serial_Transmi t :
mov SBUF, Ajnb TI, $clr Tfret
Seri-a1_Receive :
jnb RI, $mov A, SBUFc1r RTret
end
Untuk menguji program di atas bisa dilakukan dengan menghubungkan portserial AT89s2 dengan port serial komputer PC. Port serial PC biasanya rerdiriatas
.l atau 2 port (yang disebur COM1 atau COM2). Pada pC-pC lama,biasarryir rrr.rrligrrrrakan konektor DB25 male (25 pin), di samping konektor
Ieknik Antarmuka dan Pemrograman llikrokontroler AI89152
DB25 female untuk port paralel (printer) dan konektor DB9 male, sedangkan
pada PC keluaran terbaru hanya menggunakan konektor DB9 male.
Berbeda dengan mikrokontroler, di mana Ievel digital untuk port serialadalah level TTL (logika 1 dinyatakan sebagai 5 V dan logika 0 sebagai 0 V),port serial PC menggunakan level RS-232. Standar RS-232 dikeluarkan oleh
EIA (Elecn'onics Industry Association). RS adalal'r singkatan dari
Recomt'nded Srandard. Dalam RS-232 logika 1 dinyatakan sebagai Markdengan level tegangan antara -3 dan -25 V (negatif), sedangkan logika 0
dinyatakan sebagai Space dengan level tegangan antara 3 dan 25 V (positif.).
Dengan adanya perbedaan level Jogika ini, port serial mikrokontroler tidakbisa secara langsung dihubungkan dengan port serial komputer. Diperlukansebuah pengubah level logika dari TTL ke R5-232 dan sebaliknya.
IC MAX232 dari Maxim Incorporation adalah IC pengubah level RS-232
yang memiliki sebuah charge pump yang bisa menghasilkan tegangan +10 Vdan -10 V dari tegarlgan catu daya 5 V. Tegangan-tegangan ini dihasilkandengan proses pengisian dan pernbuangan 4 buah kapasitor luar yang
dihubungkan dengan rangkaian pengganda tegangan internal yang dimilikioleh iC ini. MAX232 mempunyai 2 penerima (RS-232 ke TTL) dan 2
pengirim (TTL ke RS-232), cukup untuk menghubungkan pin TXD dan RXD
mikrokontroler dengan port serial PC. Gambar 7.3 memperlihatkanrangkaian antarmuka RS-232 dengan IC ini. Hanya 1 penerima dan 1
pengirim yang dipakai. Konektor DB9 juga hanya 3 pin yang digur.rakan,
yaitu pin GND (5), RX (2) dan TX (3). Kabel yang harus digunakanmenyesuaikan dengan konektor DB9 yang digunakan (male atau female), bisa
hubungan lurus (straighr) atau silang (cross).
KE Prn F-1.0
{rixD)Ilar'r P1n P-1.1
(TXD)
i+lV
::rrf T
Untuk mengirim dan menerima dara dari port seriar, diperlukan program(software) yang bisa dibuat dengan Delphi arau visuar Basic misalnya, araubisa juga menggunakan program H;,perTerminal yang merupakan programbawaan windows (pada windows 9g bergantung pada saat menginsta,windows)- Untuk menjalankan HyperTerminal, krik start ) An program )Accessories ) comm,nications ) HyperTerminal. ]ika tampil korak dialogyang menyakan informasi lokasi, klik tombor Cancer kemudlan tombor resdan tombol OK, maka akan muncul tampilan seperti Gambar 7.4.
Iimer dan Port Serial349
t!"*,"-",*Edd.h4 idctForE,,,co to, ilr..od,eda
ss$!q6H41 or I chkl
IGomhor 7.4 Tompilon HyperTerminol
I- lirrPI
I
+ !,\r'
RI III R] L]UTTI IUT T1 Iiltl1+f,], DINC:+ E:0UTt2.
T] rl llrRIII]
6ll0
$ tirt.rorressse
Enter dela,ls ,or l|€ phohe number thdt yw want to dialj
Country/region I
Ateocode: t --**
Phonenumber: i-*^-*- *
Connecrusmo. '@iryi -
l_- oK-l cancer i
Gombor 7.5 Pernilihon port 5eriol
Gombqr 7.3 Arrlornruko R5-232 denqon l( MAX23?
Timer dan Port Serial l5r150 Teknrk Antarmulta dan Pemrograman l,likrokontroler ATB9552
Masukkan nama koneksi lalu tekan o,(, misalnya "Mikro AT89S52". Lalu
akan muncul kotak dialog untuk mengatur port yang digunakan' pilih COMl
(atau COM2 bergantung pada konfigurasi komputer yang digunakan) dan
tekan tombol OK. Kemudian akan muncul kotak dialog COMI Properties
(Gambar 7.6) yangberfungsi untuk mengatur baud rate' jumlah bit data' bit
stopdarrpengendalialirandata(FlowControl),Baudrateg600bps,bitdata8, bit paritas Noae bit stop 1 dan Flow Control None'
Setelah itu HyperTerminal siap digunakan' Ketik di keyboard PC' maka
HyperTerminal akan mengirimkan karakter ASCII sesuai tornbol keyboard
yangclitekankeportserial.Karakterinikemudiandibacaolehmikro.kontroler dan dikirimkan kembali ke PC' Hyper'ferminal akan menerima
data tersebut dan menarnpilkanya di layar HyperTerminal'
Put Settinos ]
Gombor 7.6 Pengoturon Porl Seriol
Selain pin RX (pin penerima) dan TX (pin pengirim)' yang biasa digunakan
dalam komunikasi serial UART, pin-pin port serial yang lain digunakan
untuk komunikasi dengan modem (modulator-demodulator-l). Sebuah rno
dem digunakan unruk komunikasi data melalui saluran telepon, sehingga
sebuah PC bisa terhubung dengan jaringan komputer (interrrct). 'l'abcl 7'l
memperlihatkan pin-pin port serial koncktor I)l]9'
Gombor 7.7 HyperTerminol Berkomunikosi dengon AI89S52
Tobel 7.1 Susunon Pin Konektor DB9
Teknik Perrogran.:n dan Allarmuka I'likrokontroler 0I89S52
Pin NamaSignal Fuogp,
I DCD Data Carrier Detect, sinyal kendali dari modem yang
menyatakan bahwa modem telah menerima sinyalcarier valid dari modem lain.
2 RXD Sinyal data dari modem ke PC (penerimaan).
J T)C) Sinyal data dari PC ke modem (pengiriman).
4 DTR Data Tetminal Ready, sinyal kendali dari PC kemodem, untuk mengaktifkan modem.
5 GND Sinyal ground
6 DSR Data Set Ready, sinyal kendali dari modem ke PC
yang menyatakan bahwa modem siap mengirim atau
menerima data
7 R]'S Request To Send, sinyal kendali dari PC yangmt'nandakan bahwa PC siap menerima data
Clear To ,Send, sinyal kendali dari modem yang
menandakan bahwa modem siap menerima data
Ring Indicator sinyal kendali ke PC, tanda bahwa
saluran telepon berdering
152 Teknik Antarmul(a dan Pemrograman lvlikrokontroler AT89S52
BAB BINTERUP'I
Dalam contoh program dari Bab 5 sampai Bab 7 telah diperlihatkan bagai-mana AT89S52 membaca masukan dari luar, mengendalikan Timer dan
membaca data dari port serial. Semua contoh program menggunakan metodepolling atau scanning, AT89S52 secara aktif "menanyakan" apakah ada yangmeminta layanan atau tidak. Pada saat membaca keypad matriks 4x4,
AT89S52 diprogram untuk terus-menerus membaca keypad tersebutwalaupun tidak ada keypad yang ditekan. Pada saat bekerja dengan Timer,AT89S52 secara terus-menerus membaca bit status overflow Timer (TFx)
sampai TFx di-set (Timer overfloy). Begitu juga pada saat membaca data dariport serial, bit RI terus dicek. Apa yang bisa dilihat dari semua contohprogram itu adalah AT89S52 tidak melakukan hal lain selain mengecek bitstatus tersebut.
Dalam aplikasi yang sederhana, seperti contoh-contoh program tersebut dimana mikrokontroler hanya menangani satu permintaan layanan, hal initidak akan menjadi masalah. Pada aplikasi yang lebih kompleks, cara di atas
kurang efektif. Mikrokontroler harus menanyakan (polling) ke semua
perangkat yang terhubung kepadanya. Walaupun semua permintaan akan
terlayani, tetapi akan terjadi keterlambatan karena perangkat yang memer-lukan layanan harus menunggu giliran sementara yang tidak memerlukantetap harus dicek.
Agar perangkat bisa dilayani secara cepat (real time), maka perangkat ter-sebutlah yang meminta layanan ke mikrokontroler. Perangkat akan me-ngirimkan sinyal atau bit status ke mikrokontroler sehingga mikrokontrolerakan meninggalkan pekerjaan yang sedang dilakukannya untuk menanggapi
sinyal atau bit status tersebut. Mikrokontroler akan memanggil subrutinkhusus yang telah ditentukan alamat awalnya dan mengerjakan perintah-perintah dalam subrutin tersebut. Setelah selesai, mikrokontroler akan
kembali rncngr.rjakan program atau kembali ke alamat program di mana
tcrjarlirryir l)lr):i(,s l)(,nritnggilan tadi clan me-reset kembali bit-bit terscbut.
355ls4 Teknik Antarmuka dan Pemrograman Mikrokontroler AI89552
Cara inilah yang dinamakan inrerupsi. Subrutin khusus yang dipanggil
tersebut dinamakan subrutin layanan interupsi (ISR), sedangkan alamat awal
ISR disebut sebagai vektor interupsi.
pemanggilan ISR mirip dengan pemanggilan sebuah subrutin oleh instruksi
call. Bed,anya dalam instruksi call, program secara eksplisit melakukan
pemanggilan (dikendalikan oleh program). Sedangkan dalam interupsi proses
pemanggilan ISR tidak dikendalikan oleh program, tetaPi dikendalikan secara
h".d*u.e (baik sinyal interupsi dari luar atau dari internal mikrokontroler)
dan bisa terjadi kapan saja.
AT89S52 memiliki 6 buah sumber interupsi, yaitu 2 intempsi eksternal
(Iil\lTo dan II{II ), 3 interupsi Timer (Timer 0, 1, dan 2) dan 1 interupsi port
serial. Sumber-sumber interupsi ini dikendalikan oleh register IE dan IP. IE
akan menentukan interupsi mana saja yang akan diaktifkan, sedangkan IP
mengatur urutan prioritas interupsi jika lebih dari satu sumber interupsi
diakti{kan. Bit-bit pembangkit interupsi terdapat di register TCON (interupsi
eksternal dan Timer 0 dan 1), scoN (port serial) dan T2coN (Timer 2). Bab
2 dan Bab 3 telah menjelaskan hal ini.
Dengan adanya 6 sumber interupsi berarti AT89S52 memiliki 6 vektor
interupsi. Interupsi eksternal, INTg du.r IN-f 1 , memunyai vektor interupsi
di alamat 0003H dan 0013H, Timer 0 dan Timer 1 di alamat 0008H dan
001BH. Port serial dan Timer 2 memunyai vektor interupsi di alamat 0023H
dan 002BH. |arak antarvekror inrerupsi sangat dekat, karena itu pada
program yang memakai lebih dari satu interupsi tidak disarankan untuk
menuliskan semua instruksi ISR di alamat vektor interupsinya karena bisa
menempati alamat vektor interupsi yang lain.
Cuplikan program berikut memperlihatkan bagaimana mengatur vektor-
,r"kro, interupsi AT89S52. Dalam program diperlihatkan interupsi eksternal
INt0 du.t port serial diaktifkan. Pada saat terjadi interupsi eksternal, program
akan memanggil subrutin di alamat 0003H QNT7-rsn yang kemudian akan
melompat ke subrutin Interruptl-Subrutin. Sedangkan jika terjadi interupsi
dari port serial, program akan memanggil subrutin di alamat 0023H
(Seriat-Port-ISR) yang akan memanggil subrutin Read-Data-From-PC'
Alamat 0000H (Reset-Vector) adalah alamat reset, di mana AT89S52 akan
memulai programnya setiap kali reset'
lnterupsi
. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * ** * * ** * * * * **,'Int.errupt Vector Jump Table. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
org 0000HReset_Vector:
lmp Main_Prog
org 0003HINTO-TSR:
jmp InLerruptl_Subrutin
org 0008HTimer0_ISR:
reti
org 001-3HINTI-ISR:
reti
org 0018HTimerl_ISR:
reti
org 0023HSerial_PorL_ISR:
call Read_Data_From_PCreti
org 002BHTimer2_ISR:
Reti
8.1 INTERUPSI EKSTERNAL
Interupsi eksternal diterima oleh AT89S52 melalui pin P3.2 (Eksternal0) dan
pin P3.3 (Eksternal l) dengan mengeset bit EXO atau EXI register IE. Tentusaja bit pengaktif interupsi global (EA) juga harus di-set. Sinyal interupsi bisa
transisi dari 1-ke-0 di pin interupsi (trunsitional activated) atau dengan logikaO (level at't iv;rret7) dengan mengatur bit IT0 atau IT1 register TCON. Pada saat
rcrladi 1'rt,r'rrlrirlrirrr sirryal di pin-pin tersebut sesuai dengan kondisi bit IT0 danI'l'1, rrrakir nrtlnrl),,r r.kstt.rnal akan dibangkitkan dan bit IIiO atau bit IFll akan
357156 Ieknik Antarmuka dan Pemrograman J'likrokontroler AI89552
di-set (berganrung interrrpsi eksternal yang mana yang aktif). Kemudian
program akan memanggil ISR di alamat 0003H atau 0013H.
8.t.1 INTERUPSI EKSTERNAL: DISPLAY DOTMATRIKS
Program berikut merupakan hasil modifikasi dari program DotMatrix2.asm.program yang dibahas di Bab 6 tersebut menampilkan bilangan 16 bit(My-Numbet'H dan My-NumberL) ke display dot matriks. Bilangan
diperbarui kira-kira per detik yang diatur secara software dan display akan
menampikan bilangan 0 - 65535. Dalam program yang telah dimodifikasi ini,
bilangan diperbarui secara manual melalui 2 buah saklar. Kedua saklar
tersebut masing-masing terhubr.rng dengan pin P3.2 dan P3.3 yang
merupakan pin untuk menerima sinyal interupsi dari luar. Dalam program ini
kedua sumber interupsi diaktifkan jika adanya transisi dari l-ke-0 di pin
masukan interupsi (saklar ditekan). Interupsi diaktifkan di subrutin
Interrupt-Inrr dengan mengeset bit EXO (eksternal ke-Q), EX1 (eksternal 1)
dan bit interupsi global EA. Sedangkan untuk mengatur agar interupsi
diaktifkan dengan transisi sinyal bit IT0 dan bir IT1 diset'
Saklar ridak dibaca secara eksplisit, program hanya mernbaca 2 alamat bit di
subrutin tlpdate*ll'IyNumber, yaitubir Inc-Flag dan bit Dec-Flag- Jika salah
satu bit di-set berarti telah terjadi penekanan terhadap salah satu saklar atau
telah terjadi interupsi. Bit Inc-Flag dikendalikan oleh interupsi eksternal ke-
0 (oleh saklar yang terhubung ke pin P3.2), sedangkan bit Dec-Flag
dikendalikan oleh interupsi eksternal ke-1 (oleh saklar yang terhubung ke
pin P3.3). |ika terjadi interupsi eksternal 0' program akan memanggil
subrutin INT7_ISR yang beralamat awal di 0003H. Agar tidak terjadi efek
kedip yang besar di display pada saat terjadinya interupsi, program akan
memarikan display dengan mengirim data FFH ke port RowcTRL. Subrutin
Anti-Debounce dipanggil untuk mengatasi masalah bouncing pada saat
penekanan saklar, sehingga interupsi hanya teriadi satu kali. Terakhir
program akan mengesetbit Inc_Flag. Hal yang sama terjadi pada saat terjadi
interupsi eksternal ke-1, bedanyabit Dec-Flag yang diset.
Bilangan akan ditambah satu iika bit lnc_Flag di-set dengan subrutin pt'n
jumlahan 16bit (ADDl6) dan akan dikurangi satu iika bit [)cc [,'l;tg yang di
set (dengan subrutirr pengurangln l6 bit .9t /lth'r). l)t'rrlgrrrr rlltrrikirrrr sakl:rt.
lnterupsi
yang terhubung ke P3.2 (interupsi eksternal 0) berfungsi sebagai tombol"naik", sedangkan saklar yang terhubung ke p3.3 berfungsi sebagai tombol"turun".
========== ==========;Program Title : ,, Interupsi Eksternal : Dot Matrj_xDisplay";File name : Interupsi Extl-.asm;Version : 1.0;Created date : June 6, 20Oj,'Programmer : Usman,.
* * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
,. * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * x * * * * * * * * * * * * * * * * *
;Microcont.roler pin/port Assignment,. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * *
;Dot Matrix Control pinROWCTRL egu p0DM_DAT egu p2.6DM_CLK equ p2.j
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *; Internal RAM Mapping,. *** *** * ** * * ** * * ** ** ***** * *** ** **** * * * *** * **** ** ** ** ** **
FlagRegzovInc_F1agDec_Flaq
My_NumberH equMy_Nurnlcerl equ
equequequequeguegu
equ()qu
' ,( Jtl
equ 20Hbit F1agReg.0bit PlagReg.1bit FlagrRegr. 2
30H31H
32H33H34H35H36H3tH
3BH3 9IIJAII
359158 Ieknik Antarmuka dan Pemrograman Mikrokontroler AI89S52
,1
Char_Buff
3BH
equ 50H. * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * >r * * * * **
; Interrupt Vector Jump Table,.
* ** * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
org 0000HReset_Vector:
jmp Main_Prog
org 0003HINTO-fSR:
mov ROWCTRL, #OFFHcall Anti_Debouncesetb Inc_Flagreti
org 0013H]NT1-TSR:
mov ROWCTRL, #OFFHcall Anti_Debouncesetb Dec_FIagreti
,. *** ** ** ** * *** * * ** ** * ****** * * ** ** ** **** ** * ** * * ** * ***** **
;Main Program. ** *** * * ** * *** **** ** *** ** ** * * ** **** ** ** ** * **** ** * *** ** **Main_Prog:
mov My_NtunberH, #0mov My_Numberl, #0mov FlagReg, #0call Initial*Dacacall- Interrupt_fnit
Main_Prog_Loop:call Display_My_Nrunbercall Update_MyNumbersjmp Main_Prog_Loop
- ********************************************* ******* ***fnterrupt_Init:
setb EXO
ln teru psi
setb Exlsetb IT0setb rT1setb EAret
. * ** ** ** ** ** * * ** * *** ** * * * ** ** * * * * * * ** * ** * * ** ** ** ** * *** **Anti_Debounce:
mov 2lH, R1mov 22H, R2mov 23H, R3call Delaycall Delaymov R1, 2lHmov R2, 22Hmov R3, 23Hret
' ****************************** *************************Update_MyNumber:
mov XH, My_NumberHmov XL, My_Numberlmov YL, #01mov YH, #0jnb Inc_Flag, Check_DecFlagca1L ADD16clr fnc_F1agsjmp Update_MyNrunber_Loop
Check_DecF1ag:jnb Dec_F1ag, Update_MyNurnberExircall SUB16cJ.r Dec t'Iag
Upda t e-trlyNurnb".-l,o op,mov My_NrmberH, ZHmov My_Numberl, ZLmov XH, My_NumberHmov XL, My_Nurnberlcall Decimal_Adjustcall ASCII_To_DM_Data_Converter
Update_MyNumberExit :
ref
36r360 Ieknik Antarmuka dan Pemrograman l'likrokontroler AI89552
,. ***** ** ******** ** ****** * ** ** ** ****** ** ** * ** ** ** ********
lniLial-Data:mov DPTR, #Initial-Di-sP1aY-Datacall Save-ASCII-Data-To-RAMcall ASCII-To-DM-Data-Converterret
Ini tial-Di splay-Data :
db 'couNTER 00000' ,0
- ***** ** * * ** *** * **** * * * **** * * * * ** ** ** * * ** * **** **** ** ** **SaVE-ASC I I-DATA-TO_RAM :
mov R1, #Char-BuffSave_ASC T I-Dat a-To-RAM-LooP :
c1r AmoVC A, @A+DPTR
Jz Save-ASC I I-Da t a-To-RAM-Exi tmov GR1, Ainc DPTR
i-nc R1
sjmp Save-ASCII-Data-To-RAM-Loop
Save-ASC I I_DATA_TO-RAM-EX i L :
call Blank-Displayret
. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
ASCII To-DM-Data-Converter :
I nteru psi
. * ** ** x* ** ** ** ** * * ***** * * * * * * * * ** ****** ** * * * * * ** * * ** * * * *
Get_DM_Data:mov DPTR, #Char-Datacall DM_DaLa-Adjustmov B, #07h
Get_DM_Data Loop:clr AmoVC A, GA+DPTRmov @R0, Ainc DPTRinc R0dtnz B. Get_DM_Dat-a-Loopret
DM-Data-Adjust:mov YL, DPLmov YH, DPHmov A, XLadd A, YLmov ZL, Amov A, XH
addc A, YHmov ZH, Amov DPL, ZLmov DPH, ZHret
,. * ** ** ** **** ******* * * **** ** ** **** ** ** ** ** * * *** * * ** ******Display*My_Number :
R5, #07HR6, #OFEHR7, #80HR0, #80H
Number_Loop:ROWCTRL, #OFFHSend_DM_Da ta_To_Di sp I ayROWCTRL, R6A, R6AR6, AI)r'1,1Yt; ;
mov R2, #13mov R0, #95H
;13 Digit;
mov R1, #Char-Buff+12
ASC I I_To_DM_Da ta-Converter-Loop :
mov A, GRl
subb A, #20Hmov xL, Amov YL, #07call MLIL_8mov XL, Z0mov XH, Ztdec R1call Get-DM-Datadjnz R2, ASCf I-To DM-Dat,a -Convortt-'t LooJr
ret
movmovmovmov
Display_My_movcallmovmovr1mov<:;r I I
itt,'
361162 Teknik Antarmuka dan Pemrograman I'tikrokontroler AT89S52
mov A, R7
mov R0, Adjnz R5, DisPlaY-MY-Number-LooPret
,. * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Send-DM-Da ta-To-Di sP I aY :
mov R4, #16Send-DM-Da ta-To-Di sP 1 aY-LooP :
mov A, @R0
calI Send-DM-Data*Colominc R0inc R0
inc R0
inc R0
inc R0
inc R0
inc R0
djnz R4, Send-DM-Data-To-Display-Loopret
Send-DM-Data-Colom:mov B, #5
Send-DM-Da La-C o 1 om-LooP :
rrc Amov DM-DAT, C
call DM-C1ockdjnz B, Send-DM-DaLa-Colom-LooPSCIb DM-DATcall DM-CIockret
DM-Clock:Clr DM-CLKnopnopsetb DM-CLKnopret
lnterupsi
. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * *
Blank_Display:mov A, #0FFHmov R0, #80Hmov R1, #OFFH
Blank_Disp1ay_Loop1 :
mov @R0, Ainc R0djnz R1, Blank_Display_Loop1mov B, #80SEIb DM-DAT
Blank_Display*Loop2 :
call DM_Clockdjnz B, Blank_Display_Loop2ret
- * ** * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * ** * *Delay:
mov R1, #01call Delay_1ret
. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Decimal_Adjust:
Delay_1:mov
Delay_2:movdj nzdjnzdjnzret
movmov
R3. #2FH
P.2, #OAHR2, $R3, Delay_2R1, Delay_1
Char_Buff+8, A
XH, Z1-
XI,, ZO
YII, iI O3IIil,, ll ot,Iilt
YH, #2'7HYL, #1OH
call DIVI-6mov A, 22call HexToASCIImov
movmovmovIn( )\/
Ieknik Antarmuk, drn Perrograman Mikrokontroler AI89552lnterupsi 365
364
callmovca1 1mov
movmovmovmovcaIlmovcallmov
movmovmovmovcalImovcallmov
movcalImovreL
DIV16
HexToASCIIChar-Buff+9, A
XH, ZT
XL, ZO
YH, #OH
YL, #64HDIV]-6
HeXTOASCIIChar-Buff+10, A
XH, 23-
XL, ZO
YH, #OH
YL, #OAHDIVl6A, Z2HexToASCIIChar-Buff+11, A
A, ZO
HeXTOASCIIChar-Buff+l2, A
dbdb
'8''9t
, * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; Aritmethic sub-routine. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *DfVl-6;
movorljnzsetbret
div_OK:movmovmovmovmovmovmov
A, YHA, YLdiv_OKzov
R1, XHRO, XLXH, #O
xL, #0R3, #0R2, #0R7, #t-6
. * ** **** ** *** * *** * *** ** * * ** ** * *** ** * * **** * * *** ** ** ** * * **
HexToASCIf:incmovcreL
AA, @a+pc
'0',1',2,,3',4,'5''6',1,
div_1oop:c1r C
mov A, R0rlc Amov R0, Amov A, R1rfc Amov R1, Amov A, XLrlc Amov X1, Amov A, XHr1c Amov XH, Alca11 SUBl6mov C, ZOVcpl C
jnc dlv_l-mov XH, ZH
mov X], ZL
dbdbdbdbdbdbdbdb
367366 Teknrk Antarmuka dan Pemrograman Mikrokontroler AI89S52 lnterupsi
d"r-;";", ",
;ila di cD pendukung; * * *
" * * * * * * * * * * * * * * * * * *
end
8.1.2 MEMBACA KEYPAD 4X4 DENGAN INTERUPSI
Cara pembacaan keypad matriks 4x4 dengan cara polling arau scanning padaaplikasi yang lebih kompleks mungkin kurang efektif. Untuk itu rangkaiankeypad perlu dimodifikasi sehingga setiap kali salah satu tombol keypadditekan, akan menghasilkan sinyal yang bisa digunakan unruk mem-bangkitkan interupsi. Mikrokontroler akan melakukan polling atau scanninghanya jika ada salah satu tombol yang ditekan. Hal ini bisa mengurangi bebankerja mikrokontroler. Pada saat tidak membaca keypad, mikrokontroler bisadiprogram untuk melakukan tugas lain, misalnya berkomunikasi dengan PC.
Gambar 8.1 memperlihatkan bagaimana membangkitkan sinyal interupsi darikeypad matriks 4x4. Sinyal interupsi didapat dengan meng-AND-kan semuabaris. Sinyal interupsi harus dibangkitkan fika salah satu keypad ditekan.Untuk itu baris harus berada di logika tinggi dan kolom berada di logikarendah. Pada saat tidak ada penekanan tombol, seluruh masukan gerbangAND berada di logika tinggi, sehingga keluarannya juga akan berlogikatinggi. fika terjadi penekanan salah satu tombol, baris dan kolom dari tombolyang bersangkutan akan terhubung. Ini akan membuat salah satu masukan
dari gerbang AND akan menl'adi rendah, sehingga keluaran gerbang ANDjuga akan rendah. Transisi logika (dari 1-ke-0) inilah yang akan memberikansinyal interupsi ke mikrokontroler. Saat terjadi interupsi ini, program akanmelompat ke subrutin pelayanan intempsi. Di subrutin inilah keypad dibacauntuk mengetahui tomboi mana yang sebenarnya ditekan.
div-1:movrIcmovmovrlcmovdlnzmovmovmovmovc1rret
SUB16:movcfrsubbmovmovsubbmovmovret
ADD16:movaddmovmovaddcmovmovrel
MUL-8:movmovmu1movmovret
A, R2
AR2, AA, R3AR3, AR7, div-looP23, R3
22, R2
Z1 ,XHZO, XLzov
A, XLC
A, YLZL, AA, XHA, YHZH, Azov, c
A, XLA, YLZL, AA, XHA, YHZH, Azov, c
A, XLB, YLABZL, B
ZO, A
Ieknik Antarmuka dan Pemrograman I'likrokontroler AI89S52
Gombor 8.I Keypod Molriks 4x4 dengon lnterupsi
Program berikut akan memperlihatkan bagaimana membaca keypad 4x4
d"nlr. metode interupsi. Sinyal interupsi keypad (keluaran gerbang AND
,".ukhir; dihubungkan dengan masukan interupsi eksternal ke-0 (pin P3.2).
Interupsi akan aktif pada saat ada transisi i-ke-0 di pin interupsi'
Mikrokontroler dihubungkan dengan komputer melalui port serial yang
bekerja di mode 1 dengan baud rate 9600 bps. Inisialisasi interupsi dan port
serial dilakukan di subrutin Interrupt-Int dan serial-Port-Init. Baris dan
kolom keypad dihubungkan melalui port P1 (KeyData) dengan baris
terhubung ke P1.0 - P1.3 dan kolom terhubung ke Pi.4 ' P1.7. Di awal
program port ini diberi data OFH sehingga semua baris akan berlogika tinggi
isebagai porr masukan) dan semua kolom berlogika rendah (sebagai port
keluaran).
Tugas utama mikrokontroler dalam program ini adalah tilt'tnba<'a data yang,
dikirim oleh PC melalui port scrial. Mikrokontrolt't rtkrrtt trrcttl',ltllriskirtt
lnterupsi
waktunya untuk mengecek bit RI (bit penerimaan data serial) di subrutinSerial_Receive. fika ada data yang diterima, mikrokontroler akanmengirimkan kembali data tersebut melalui port serial. Misalnya jikakarakter "A" diterima, mikrokontroler akan mengirimkan "Received
Character: A". Subrutin Transmit_Data_Block akan mengirimkan blok bytedalam tabel data melalui port serial. Tabel data hams diakhiri dengan byte 0.
Dalam contoh program ini data yang akan dikirim tidak mungkin 0 karenadata berupa karakter ASCII.
Pada saat terjadi interupsi dengan ditekannya salah satu tombol, programakan memanggil ISR di alamat 0003H QNT)_fSh. Sebelum memanggilsubr-utin untuk pembacaan keypad, ISR akan menyimpan register-regisreryang digunakan dalam subrutin utama ke memori stack (register A, B danDPTR) dengan instruksi push untuk kemudian diambil kembali setelah
subrutin interupsi selesai dikerjakan dengan instruksi pop. Ini harusdilakukan karena subrutin interupsi juga memakai register-register ini, kalautidak disimpan mungkin akan mengacaukan program utama mengingat isinyatelah bembah.
Proses pembacaan keypad sama dengan proses pembacaan keypad yang telahditerangkan di Bab 5. Subrutin Anti_Debounce dipanggil untuk meng-hilangkan efek bouncing penekanan tombol. Setelah tombol yang ditekanteridentifikasi, dengan mengecek data baris dan kolom berdasarkan data
Tabel 5.1 menggunakan instruksi cjne, program akan mengirimkan nama
tombol yang ditekan melalui port serial. Tombol diberi nama KEY0 - KEYF.
Misalnya ketika KEYA yang ditekan program akan mengirimkan "KEY A ispressed.".
Menguji program ini bisa dilakukan dengan menggunakan HyperTerminaldengan parameter data 8 bit, bit rate 9600 bps, 1 stop bit dan tanpa bir pariras.Komputer dihubungkan dengan mikrokontroler melalui antarmuka RS-232.
Pengiriman karakter dari PC dilakukan dengan menekan tombol keyboardpada HyperTerminal, sedangkan pengiriman data karakter darimikrokontroler dilakukan dengan menekan salah satu tombol pada keypad.I{yperTerminal akan menampilkan karakter yang diketik atau nama tombolyang, ditekan.
;l'rotlt,rtrt 'l'illr' : "Tnterupsi Eksternal : Ke1.pac1 4x4";1.'ill rr,rrr,. : li.yl t,trl 4'.<4 rlr'rrr1;rn lntorrrlxli.;r:;rn
369368
37 t370 Teknik Antarmuka dan Pemrograman l'likrokontroler AI89552
,'Version : 1 .0;Created date : June 10, 2007;Programmer : Usman- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * " ** * * * *
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;Microcontroler Pin/Port Assignment*******************************************************
KeyData equ P1
*******************************************************Interrupt Vector Jump Table*******************************************************
org 0000HReset_Vector:
jmp Main-Prog
org 0003HINTO-ISR:
push ACCpush Bpush DPHpush DPLcall Anti_Debouncecall Read-KeyPadpop DPLpop DPHpop Bpop ACCret.i-
. * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * **
;Main Program. * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Main_Prog:call Interrupt-Initcall Serial-Port-Inltmov KeyData, #0FH
Main_Prog_Loop:call Serial Receive
lnterupsi
mov B, Amov DPTR, #MY Text
Main_Prog_Loop1 :
call Transmit Data BlockMain_Prog_Loop2 :
mov A, Bcall Serial_Transmitmov A, #ODH
call SeriaL_Transmits jmp Mai-n_Prog_Loop
MY_Text:db 'Received Character: ',0
. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
InLerrupL_Init:setb EXO
setb IT0setb EAret
. * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
Anti_Debounce:call Delaycall Delayret
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Seriaf_PorL_Init :
mov SCON, #50Hmov TMOD, #20Hmov TH1, #OFDHsetb TR1reL
Serial Transmit:movjnb
SBUF, AmrC
c1r TIret
l7lil7 Teknik Antarmuka dan Pemrograman l'likrokontroler AT89S52 lnterupsi
Serial_Receive:j"b RI, S Display Dara:
A, SBU! check_For,KEY0:clr Rr cjne A, #00E, Checllpor KEylr.et A, *,0,
jnII) Loop3Transmit Datsa Block:
clr A Check_For-KEY1:A, GA+DPTR cjne A, +10H, Check_For_KE\2
jz Transmit_Data Block Exi! A, #,1,catl Serial_Transnil jrp Loop3in. DPTRsjmp Transmit_Data_Bfock Check_For KEy2:
Transmit Data Block-ExiE: cjne A, *20E, Check For l,,Ey3ret mov A, +,2,
Read KeyPad: Check-For KEy3:call check Key Pressed cjne _ a, *30H, Check_For_KEy4jnc Read-KeyPad-Exit mov'. A, #,3,
jmp Loop3call Find_Ro!,,
B, A check For_(EY4:jnc ce!-Colunm cjne A, *01H, check_For_xEys
A, #'4 'Loopl: j^p Loop3
call check Key Pressedjc Loopl check_For_xEy5.
cjne A, +11H, Check_For-rilY6Read,KeyPad-B<it : A, #,5,
rel j.p Loop3
GeE-Co1um: Check For (Ey6:call Find_Colum cjne A, #21H, Check For t,Ey7swap A nov A, #,6,or1 A, B jmp Loop3jnc Display_Data
Check_For_xEY7 :Loop2: cjne A, +31H, Check_For KEYS
call Check_Key Pressed A, #,7,jc Loop2 jnp r,oop3sjmp Read (eyPad. Ex i I
( 1,'r.I Ji" r'r ','rl.
Teknik Antarmuka dan Pemrograman Mikrokontroler AIB9552 I nterupsi 175174
cjne A, #02H, Check-For-KEYgmov A, #'B'jmp LooP3
Check-For-KEY9:cjne A, #12H, Check-For-KEY1Omov A, #'9'jmp LooP3
Check-For-KEY10 :
. cjne A, #22H, Check-tror-KEYl1mov A, #'A'jmp LooP3
Check-For-KEY1 1 :
cjne A. #32H, Check-For-KEY12mov A, # 'B'jmp LooP3
Check-For-KEYL2:cine A, #03H, Check-For-KEY13mov A, # 'C'jmp LooP3
Check-For-KEY13 :
cjne A, #13H, Check-For-KEY1Amov A, # 'D'jmp LooP3
Check-For-KEY14 :
cjne A, #23H, Check-For-KEY15mov A, # 'E'jmp LooP3
Check-For-KEY15 :
cjne A, #33H, DisPlaY-Data-Exitmov
Loop3:Pushmovcallpop
A, # 'F'
ALL
DPTR, #MY-Text2Transmi t-Data. -R1 ockACC
call Serial_Transmltmov DPTR, #My_Text3calf Transmit_Data_Blockmov A, #0DHcall Serial Transmit
Display_Data_Exit:call Check_Key_Pressedjc Display_Data_Exj-tjmp Read_KeyPad_Exit
MY_Text2:db ,KEY',O
MY_Text3:db is pressed. ,0
. * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *Check_Key_Pressed:
mov KeyData, #OFhmov A, KeyDaLaorl A, #0F0hcp1 A)L No_Keysetb C
retNo_Key:
clr C
ret
,. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Find_Row:mov A, KeyDatamov R0, #4
Try_Next_Row:Trc Alnc Row_Founddjnz R0, Try_Next_Rowsetb C
ret
Ilrlw IJr rr r r rr I '
176 Teknik Antarmuka dan Pemrograman l'likrokontroler AI89S52 lnterupsi
dlnz R3, Delay_2d)nz R1, Delay_1ret.
end
8.2 INTERUPSI TIMER
Interupsi rimer 0 dan Timer 1 dibangkitkan jika Timer mengalami overflowdengan di-setnya bit TFO (Timer 0) dan TFI (Timer 1), kecuali jika Timer 0bekerja pada mode 3. Pada mode ini, Timer 0 bekerja sebagai timer 8 bitterpisah (TLO dan TH0). TLO dikendalikan oleh bit-bit pengendali rimer 0,sedangkan THO dikendalikan oleh bit-bit pengendali rimer 1 sehingga padamode ini, Timer 1 tidak bisa membangkitkan interupsi. Timer 2 akanmembangkitkan interupsi jika salah satu bit, TF2 atau EXF2, di-set. Bir TF2akan di-set apabila Timer mengalami overflow, sebagai pencacah naik; arauunderflow, sebagai pencacah turun. Sedangkan bit EXF2 akan di-set jika adatransisi 1-ke-0 di pin T2EX di mana pada saat itu Timer 2 difungsikan padamode capture. TF2 dan EXF2 di-oR-kan, artinya jika salah satu bit di-set,interupsi rimer 2 akan dibangkitkan. oleh karena itu. software harusmengecek bit mana yang sebenarnya membangkitkan interupsi Timer 2.Dalam mode capture pun Timer 2 akan mengalami overflow yang akanmengeset bit TF2.
Pada saat difungsikan sebagai pembangkit baud rate untuk port serial, Timer1 tidak akan membangkitkan interupsi, sedangkan Timer 2 masih bisamembangkitkan interupsi jika ada transisi di pin T2EX. Dengan demikianakan didapat interupsi eksternal tambahan dengan alamat ISR sama denganISR Timer 2.
8.2.1 MENGATUR KECEPATAN MOTOR DC DENGANPWM
Cara pengendalian motor DC yang diterangkan di Bab 5 hanya bisamenghidupkan dan mematikan motor. Dengan mengatur regangan DC kemotor tersebut, keceparan motor bisa diatur dari 0 (mati) sampai kecepatanmaksirnum (tt'gangan DC maksimum). Salah satu caranya adalah dengannrcmProgliilrr A'l'tt9S52 unruk mengeluarkan sinyal PWM (pul.se widthrttttt/tr/,tltttrtl ,tl.ttt rttotlttlitsi lcbar Prrlsa.
'l't'knik itri titlirk rnt,rnt,rlrrkan l)A(,
311
movsubbc1rret
Delay-l:mov R3,
Delay_2:mov P.2,djnz R2,
A, #4A, RO
C
. * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Find-Column:mov R0, #4mov A, #0EFhpush ACC
Try-Next-Column:pop ACC
mov KeYData, A
r1 Apush ACC
mov A. KeYDataorl A, #0f0hcpl A
)nz Column-Founddjnz R0, TrY-NexL-Columnpop ACC
setb C
reL
Column-Found:pop ACC
mov A, #4clr C
subb A, R0
c1r C
ret
. * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Delay:mov R1, #01call DelaY-lret
#2FH
#OAH
179378 Teknik Antarmuka dan Pemrograman Mikrokontroler AI89552
untuk menghasilkan tegangan DC, tetapi hanya diperlukan sebuah filter
pelewat frekuensi rendah (LPF = low pass filter) dan 1 pin mikrokontroler.
Sinyal PWM yang diumpankan ke sebuah LPF akan menjadi tegangan DC
rata-rata (RMS - root mean square) dari sinyal PWM tersebut'
sinyal PWM dibangkitkan dengan mengatur siklus keria (duty cycle) sebuah
gelombang kotak. Siklus kerja adalah periode di mana gelombang kotak
berada di logika tinggi (waktu oN). Sebagai contoh jika dalam satu siklus
waktu oN dan waktu oFF sama, maka siklus kerjanya adalah 50o/o. Atau,
siklus kerja dikatakan 20olo iika waktu oN-nya adalah 1/5 dari periode
gelombang kotak. Semakin tinggi siklus kerja semakin lama waktu ON'
sehingga semakin tinggi pula regangan rata-rata DC-nya. Siklus kerja l00o/o
artinya gelombang selalu ON setiap waktu.
Gambar 8.2 memperlihatkan rangkaian untuk mengendalikan motor DC
dengan sinyal PWM. Kapasitor 1 pF membentuk LPF dan akan memfilter
sinyal PWM yang dikeluarkan oleh pin mikrokontroler. Sinyal PWM ini
kemudian akan menjadi masukan bagi transistor darlington yang akan
menguatkannya untuk menggerakkan motor. Semakin besar sinyal masukan,
semakin besar pula keceparan moror. Tegangan vcC diatur tidak melebihi
tegangan kerja motor, sedangkan transistor darlington dipilih agar mamPu
menangani ams yang mengalir ke motor.
Program Timer0_INT_DCMotor.asm mendemontrasikan bagaimana me-
ngendalikan kecepatan motor DC dengan PWM' Sinyal PWM dikeluarkan
.rr"lulri pin P1.2 (PWM*Out). Dua buah saklar terhubung ke PI.O (tlp-sw)
dan P1.1 (Down-SW) berfungsi untuk mengatur kecepatan yang diinginkan
dan ditampilkan ke 2 buah display 7 segmen yang terhubung ke P3
(LOW_D\G|T dan P2 (HIGH_DIGI dalam bilangan heksadesimal (00H -FFH). Alamar bit PWMFlag digunakan untuk menyimpan status pin
PWM_out. Jika bit PWMFtag di-set berarti keluaran PWM sedang berlogika
tinggi, dan jika bit PWMFlag= 0 berarti PWM-out sedang berlogika rendah'
Program tidak langsung membaca pin PWM-Ouf karena pin ini digunakan
untuk mengendalikan be\an berimpedansi rendah yang bisa menyebabkan
kesalahan bila dibaca. Alamat dcyde (30H) menyimpan nilai kecepatan yang
dimasukkan melalui kedua saklar, sedangkan dcyclec adalah nilai korn-
plemen dari dcycle. Nilai awal unruk dcycle adalah 00H sehingga dCyc'la(.
akan bernilai FFH. Nilai dcyclecini jug,a sebag,ai nilai auto reloacl awal.
lnterupsi
Dari Port 1KL-,*=--v
Gombor 8.2 Mengendolikon Kerepoton Motor D( dengon PWM
Timer 0 diatur agar bekerja di mode 2 (mode auto-reload 8 bit) denganinterupsinya diaktifkan (bit ETO dan EA di-set). Sinyal PWM dikeluarkan didalam subrutin inter-upsi Timer 0, dengan membuat pin PWM_Ourberlogika1 (PWM ON) dan 0 (PWM OFF) secara bergantian setiap kali Timer 0mengalami overflow (terjadi interupsi). Waktu PWM ON dan PWM OFFditentukan oleh nilai dCycle dan dCycleC. Misalnya pada saat pertama kalinilai awal untu.k dCycle adalah 0 dan dCycleCadalah FFH. Interupsi Timer 0pertama akan membuatpin PWM_Ourdt-ser (PWM ON). Bir PWMFlag |ugaakan di-set dan THO akan diisi dengan dCycleC (FFH) sebagai nilai auto-reload. Timer 0 akan mengalami interupsi lagi setelah satu cacahan (satu
siklus). Pin PWM_Ourdan bit PWMFlag sekarang di-reset (PWM OFF) danTHO akan diisi dengan dCyde (00H). Artinya Timer 0 akan mengalamiinterupsi lagi setelah 256 cacahan (256 siklus). Dengan demikian pada saar
nilai kecepatan minimum (0), PV/M ON akan terjadi selama 1 siklus mesindan PWM OFF terjadi selama 256 siktus. Jika frekuensi osilator 12 MHz,PWM ON akan ter;'adi selama 1 mikrodetik dan PWM OFF selama 256mikrodetik. Dengan cara yang sama pada saat kecepatan maksimum (FFH),PWM ON akan terjadi selama 256 mikrodetik dan PWM OFF akan terl'adiselama I mikrodetik.
l8r380 Ieknik Antarmulo dan Pemrograman l'likrokontroler AT89552
(b ) I.,ecepatan Ir,'Iaks itnutu
Gqmbor 8.3 SinYol PWM
Kecepatan motor bisa diubah dengan menekan tombol LIp-SW :unt.uk
menambah kecepatan motor dan tombol Down-swuntuk menguranginya.
Mikrokontroler mempunyai tugas utama untuk membaca penekanan kedua
tombol ini.
;Program Title : "Interupsi Timer 0: Mot'or DC dengan PWM
lnterupsi
*******************************************************FlagRegPWMFlag
dCycledCycleC
equ 20Hbit F1agReg.0
equ 30Hegu 31H
;Fi1e name : TimerO-IIXI-DCMotor . asm
,'Version : 1. 0
;Created date : June 19, 200'/
; Prograrnrner : Usman. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * x * * * * * * * * * *
. ******************************************************* mOV A' dCyClecpl A
;Microcontroler Pin/Port Assignment. * **** ** *** * * * ** * * ** *** * * ** ** ** ** ** ** * * ** *** *** * ** * * ** * *
;7 Segment Control PinLOW-DIGIT equ P3
HIGH-DIGIT CqU P2
*******************************************************fnterrupt Vector Jump Table*******************************************************
org 0000HReset_Vector:
jmp Main_Prog
org 0008HTimer0_ISR:
call Generate PWM
reti
. * ** ** ** ** ** **** ********* ** ** **** * * ****** * ** * * ** *** * ****;Main Progiram, * ** * * * * * * * * ** * * * * ** * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *Main_Prog:
mov dCycle, #0
mov dCycleC, Amov FlagReg, #0call TimerO Tnit
Main_Prog_Loop:call Read_SWcall Update_Dj-sp1aysjmp Main_Prog_Loop
. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *;Key InPutUp-SWDown-SW
equ P1.0equ P1 .l-
; PWM signal outPutPWI4-Out equ PL '2
,. ***********************************l*****
r * I I *r l' ta l t A a I
; lnlerna I RAM MaPP i nq
Read_SW:jbcal-fjnbmovi rr<'
lll( )v
Up_SW, Read_DownswDelayUp_SW, $A, dCyclenr l('yc lr:, A
ia ) KecepatarL lr,'litrir:rrurn
383182 Teknik Antarmul<a dan Pemrograman I'likrokontroler AI89S52
cpl Amov dCycleC, Aret
Read_DownSW:jb Down-SW. Read-SW-Exit:call Delayjnb Down-SW, S
mov A, dCycledec Amov dCycle, Acpl Amov dCycleC, A
Read_SW_ExiL:ret
. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Update_Display:mov A, dCyclepush ACCanl A. #0FHcall Segrment--Convertermov LOW-DIGIT, Apop ACC
swap Aanl A, #0FH
lnterupsi
db 0B0Hdb 090Hdb OBBH
db 0B3Hdb 0c6Hdb 0A1Hdb 086Hdb OBEH
. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
Timer0 Init:mov TMOD, #B2Hmov THO, dCycleCsetb TRO
setb ETO
setb EA
ret
,. * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * **
Generate_PWM:Motor_ON:
jb PVlrlvlFlag, Motor_oFFsetb PWM_OutseLb PWMFlagmov TH0, dCycleCret.
. * ** * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Delay:mov Rl-, #01call- Delay_1ret
Delay_1:mov R3, #2FH
Der l;ry ,l :
nlr ,\/ li:l , l, 0AI I
call Segment-Convertermov HfGH-DIGIT, A Motor-OFF:ret clr PWM_Out
clr PInIMFlagSegment_Converter: mov TH0, dCycle
inc A retmovc A, @A+PC
ret
db 0c0Hdb 0F9Hdb 0A4Hdb 0B0Hdb 099Hdb 092Hdb 0B2Hdb OFBH
184 Teknik Antarmul<a dan Pemrograman Mikrokontroler AI89S52
dlnz R2, $
djnz R3, Delay-2djnz R1, Delay-lret
end
8.2.2 TIMER 2: INTERUPSI EKSTERNAL TAMBAHAN
Ada 2 bit yang bisa membangkitkan interupsi Timer 2: TF2 dan EXF2 yang
di-OR-kan sehingga interupsi akan dibangkitkan jika salah satu bit di-set.
TF2 bekerja seperti halnya bit TFO dan TFl, namun karena Timer 2 bisa
difungsikan sebagai pencacah turun maka bit TF2 akan di-set dan
membangkitkan interupsi pada saat Timer 2 mengalami underflow. Overflow
Timer 2 juga bisa dikendalikan dari luar (pin T2EX) dengan syarat bit EXEN2
di-set. Pada mode capture, adanya transisi 1-ke-0 di pin T2EX akan
mengakibatkan data yang ada di register Timer 2 (TH2 dan TL2) akan dibaca
dan disimpan di register capture (RCAP2H dan RCAP2L) pada saat inilah bit
EXF2 di-set. Oleh karena ada 2 bit yang bisa membangkitkan interupsi Timer
2 (TF2 atau EXF2), maka software harus mengecek kedua bit tersebut untuk
mengetahui bit mana yang sebenarnya membangkitkan interupsi. Interupsi
Timer 2 diaktifkan dengan mengeset bit ET2 dan bit EA.
Perhatikan kembali cara pembacaan keypad 4x4 dengan metode interupsi
eksrernal. Keempat baris yang di-AND-kan akan memberikan sinyal interup-
si (dalam contoh interupsi eksternal ke-O) ke mikrokontroler setiap kali salah
satu tombol ditekan. Dengan sedikit modifikasi di software dan hardware,
pembacaan tombol dilakukan pada saat interupsi Timer 2 terjadi. Sinyal
interupsi keypad (keluaran gerbang AND terakhir) dihubungkan ke pin T2EX
(P1.1), sedangkan kolom dan baris dihubungkan ke P2. Mikrokontroler tetap
dihubungkan dengan PC melalui port serial yang bekerja di mode 1 dengan
baud rate 9600 bps yang dibangkitkan oleh Timer 1. Timer 2 bekeria di mode
capture dan interupsinya diaktifkan.
Seperti program sebelumnya, mikrokontroler akan secara terus-menerus
membaca data dari port serial yang dikirimkan oleh komputer dan me-
ngirimkannya kembali. lika ada tombol keypad yang ditekan, interupsi Timer
2 akan terjadi. Program kemudian akan memanggil ISR di alamat 002Blt,
vektor interupsi Timer 2. Hal pertama yang, harus dilakukan adalah
lnterupsi
mengecek apakah interupsi terjadi karena Timer 2 overflow atau adanya
transisi negatif di pin T2EX dengan membaca bit EXF2 apakah di-set atau
tidak. |ika bit ini tidak di-set, berarti interupsi terjadi karena Timer 2
mengalami overflow, bukan karena penekanan tombol. Program akan
langsung keluar dari Timer 2 ISR. Jika bit EXF2 di-set, berarti tombol keypad
ada yang ditekan yang menyebabkan adanya transisi negatif di pin T2EX dan
akan menyebabkan terjadinya capture register Timer 2 ke register capture.
Namun program akan mengabaikan hal ini.
Dalam program ini sinyal capture digunakan untuk menandakan bahwa telah
terjadi penekanan tombol. Mikrokontroler harus melakukan pembacaan
tombol, mengidentifikasi tombol mana yang ditekan dan mengirimkan nama
tombol tersebut ke PC melalui port serial. Di akhir subrutin pelayanan
interupsi bit EXF2 harus di-reset secara software. Jika tidak, AT89S52 akan
selalu membaca adanya interupsi Timer 2.
;Proqram Title : "Interupsi Timer 2: Interupsi EksternalTambahan";File name : Timer2_fNT.asm,'Version : 1.0,'Created date : June 23, 2001,'Programmer : Usman. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
,'Microcontroler Pin/Port Assignmenl-,.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
KeyData equ P2
,. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; fnterrupL Vect.or Jump Table,.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
org 0000HReset_Vector:
jmp Main_Prog
org 002BHTimcr2 TSR:
jrrl, lt,XF2, Timer2 ISR_Exit1,tt:;lr n('('
187386 Teknik Antarmuka dan Pemrograman I'likrokontroler AT89552
push B
push DPHpush DPLcall Ant.i-Debouncecall Read-KeyPadpop DPLpop DPHpop Bpop ACC
clr ExF2Timer2-ISR-Exit:
reti
,. * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;Main Program,.
* * * * * * * * * * * ** * * * * ** * * * * * * * * * * * * * ** ** * * ** * * * * * * * * * * * * * * *
Main_Prog:call Ti-mer2-Initcall Serial-Port-Initmov KeyData, #0PH
Main,Prog_Loop:call Seria1 Receivemov B, Amov DPTR, #MY_TEXT
Main_Prog_Loop1 :
call Transmit-Data-B1ockMain-Prog-LooP2 :
mov A, B
call Serial-Transmitmov A, #0DHcalI Se:rial-Transmitsjmp Maln-Prog-Loop
MY_Text:db 'Received CharacLer: ',0
- ***** **** *** *** **** *** ** * * * * ** ** * * * * * x ** * * * * * ** * * ** ** **
Timer2-Init:mov T2MOD, #0mov T2CON, #09Hsetb TR2setb ET2
lnterupsi
setb EAret
- * * * * * * * * * ** * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * *
AnLi_Debounce:call Delaycall Delayret
- * * * ** * * * * ** * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * *Serial_Port_Init :
mov SCON, #50Hmov TMOD, #20Hmov TH1, #0FDHsetb TR1ret
Serial_Transmitmov SBUF, Ajnb TI, $c1r TIreL
Serial_Receive:jnb Rr, S
mov A, SBUFc1r RIret
TransmiL_Data_B1ock:c1r Amovc A, @A+DPTR
Transmit Data Block Exitcall Serial Transmi-tinc DPTRsjmp Transmit_Data Block
Transmi t_Data_B1ock_Exi t :
ret
. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Read__KeyPad:Clheck_Key_Pressedlir,,rrl KoyPad Irxit
c';r I I
itt,'
189188 Ieknik Antarmuka dan Pemrograman l\,likrokontroler AI89552
cal,L t rnd Rowmov g, Ajnc Get-Column
Loopl:call Check-Key-Pressedlc Loopl
Read_KeyPad_Exit :
ret,.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
GeL Column:call Find-Columnswap Aor1 A, Bjnc Display-Data
Loop2:call Check-Key-Pressedjc Loop2sjmp Read-KeyPad-Exit
,, * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Display*Data:Check_For*KEY0:
cjne A, #00H, Check-For-KEYI-mov A, #'0'jmp Loop3
Check For KEY1:cjne A, #10H, Check*For*KEY2mov A, #'1'jmp Loop3
Check_For_KEY2:cjne A, #20H, Check-For-KEY3mov A, *'2'jmp Loop3
Check_For_KEY3:cjne A, #30H, Check-For-KEY4mov A, #'3'jmp Loop3
lnterupsi
Check_For_KEY4:cjne A, #01H, Check_Por_KEY5mov A, #'4'jmp Loop3
Check_For_KEY5:cjne A, #11H, Check_For_KEY6mov A, #'5'jmp Loop3
Check_For_KEY6:cjne A, #21H, Check_For_KEY7mov A, #'6'jmp Loop3
Check_For*KEY7:cjne A, #31H, Check_For_KEY8mov A, #'7 '
jmp Loop3
Check_For_KEY8:cjne A, #02H, Check_For_KEYgmov A, #'B'jmp Loop3
Check_For_KEY9:cjne A, #12H, Check_For_KEYI-0mov A, #'9'jmp Loop3
Check_Por_KEYl0 :
cjne A, #22H, Check_For_KEY11mov A, #'A'jmp Loop3
Check_For_KEY11 :
cjne A, #32H, Check_For_KEYL2mov A, # 'B'jmp Loop3
Teknik Antarmulo dan Pemrograman l'likrokontroler AT89S52 lnterupsi
Check_Key_Pressed:rnov KeyData, #0Fhmov A, KeyDataorl A, #0F0hcpl Ajz No_Keysetb C
reLNo_Key:
clr C
ret
. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *Find Row:
mov A, KeyDatamov R0, #4
Try_Next_Row:rrc Ajnc Row_Foundd)nz R0, Try_NexL_Rowsetb C
ret
Row_Found:movsubbc1rret
Fi-nd_Column:mov R0, #4mov A, #OEFhpush ACC
Try_Next_Col-umn:pop ACC
mov KeyDaLa, Ar1 Apush ACCmov A, KeyDataor1 A, #0F0h
( 'o I utnn lrottnd
39r
Check_For_KEYI2 :
cjne A, #03H, Check-For-KEY13mov A, # 'C'jmp Loop3
Check_For_KEY13 :
cjne A, #13H, Check-For-KEY14mov A, # 'D'jmp Loop3
Check*For-KEY14 :
cjne A, #23H. Check-For-KEY15mov A, # 'E'jmp Loop3
Check_For_KEY15 :
cjne A, #33H, DisPlaY-Data-Exitmov A, #'F'
Loop3:push ACCmov DPTR, #MY-Text2call Transmit-Data*Blockpop ACC
call Serial-Transmitmov DPTR, #MY-Text3call Transmit-Data-BIockmov A, #0DHcaff Serial Transmit
Display_Data-Exit:call Check-KeY-Pressedjc DisPlaY-Data-Exitjmp Read-KeyPad-Exlt
MY_Text2:db 'KEY ' ,0
MY*Text3:db ' is pressed. ' ,0
A, #4A, RO
C
r:1r I
irr:
193392 Ieknik Antarmuka dan Pemrograman Mikrokontroler AT89552 lnterupsi
mikrokontroler tidak tahu persis kapan data akan diterima, sehingga selama
menunggu data, mikrokontroler bisa diprogram untuk melakukan pekerjaan
lain.
Kembali ke program cara pembacaan keypad dengan metode interupsi eks-
ternal. Mikrokontroler diprogram untuk membaca data dari port serial ketika
tidak ada keypad yang ditekan. Contoh program berikut mendemontrasikan
kebalikan dari program sebelumnya, membaca keypad dengan cara polling,
sedangkan data dari PC diterima melalui interupsi port serial'
Port serial diatur untuk bekerja di mode 1 dengan baud rate 9600 bps yang
dibangkitkan oleh Timer 1. Interupsi port serial diaktifkan dengan mengeset
bit ES dan bit EA. Keypad 4x4 dihubungkan ke P2 tanpa sinyal inter-upsi.
Setelah menginisialisasi port serial, program akan melakukan pembacaan
keypad secara terus-menerus dan akan mengirimkan nama tombol yang
ditekan ke PC melalui port serial.
Ketika ada data yang diterima dengan di-setnya RI, program akan memanggil
ISR port serial yang beralamat di 0023H. Seperti telah dijelaskan, interupsi
port serial bisa dibangkitkan oleh bit TI (pengiriman) atau bit RI
(penerimaan), karena itu program harus mengecek bip mana yang mem-
bangkitkan interupsi. Jika bit RI yang di-set, berarti telah ada data yang
diterima, maka program akan langsung membaca data yang diterima dari
register SBUF dan menyimpannya di register A. Data ini kemudian
dikirimkan kembali melalui port serial. fika bit TI yang di-set, pada saat
pengiriman nama tombol yang ditekan, interupsi port serial tetap terjadi.
Namun karena mikrokontroler diprogram hanya untuk merespons interupsi
port serial yang diakibatkan oleh penerimaan data, maka interupsi tersebut
akan diabaikan.
;Prog'ram Title : "Interupsl Port Serial dan Kelpad 4x4";File name : SeriaI-IM.asm;Version : 1.0;Created date : June 24, 2007; Prog'rammer : Usman. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * *
. * * * * * * * * * * * **** * * *** ** * * * * * * ** * * * * ** ** * * * ** ** ** ** *** ** *,.Micror'()nl r()l cr Pin/Port Assignment
djnzpopsetbret
Column_Found:popmovclr
R0, Try_Next_ColumnACCC
ACCA, #4C
Rl-, #01Delay_1
R3, #2FH
R2, #OAHR2, $
R3, Delay_2R1, Delay_1
subb A, R0c1rret
. * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Delay:movcalfret
Delay_l-:mov
Delay_2:movdj nzdjnzdjnzret:
end
8.3 INTERUPSI PORT SERIAL
Sumber interupsi terakhir yang dimiliki oleh AT89S52 adalah interupsi yang
dibangkitkan oleh port serial. Interupsi port serial bisa dibangkitkan bilasalah satu bit, RI atau TI, di-set. Artinya interupsi bisa terjadi baik pada saat
penerimaan atau pengiriman. Karena itu dalam ISR port serial, software harus
melakukan pengecekan apakah penerimaan (RI) atau pengiriman (TI) data
yang membangkitkan interupsi. Tetapi, dalam banyak aplikasi mikrokon-troler hanya diprogram untuk merespons interupsi yang dibangkitkan olch
penerimaan data mengingat pada saat pengiriman mikrokontrolcr "talru"
kapan harus melakukan peng,iriman clata. I'atla slill pt'ttt't ittritltt,
395194 Ieknik Antarmul<a dan Pemrograman l'likrokontroler AI89S52 lnterupsi
******************************************************* Cal]- Sefial TfanSmitKeyData egu P2 ret
*** ** ********** ** ** * ****** **** **** ***** * * ** **** ***** * ** MY_Text:InterrupL Vector Jump Tab1e db 'Received Character: ',0*******************************************************
org 0000HReset_Vector:
jmp Mai-n_Prog
org 0023HSerialPort_ISR:
jb RI, Receive_Eventret.i
. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * ** * * * * * * * * * *
Seraal- Port 1n1t :
*or icoN, #5oHmov TMOD, *20Hmov TH1, #0FDHsetb TRI-seLb ES
setb EAret
Receive_Event: Serial_TransmiE:push ACC SBUF, Apush B jnb TI, S
call Read_Serial_Data clr TIpop B retpop AcCreli serial Receive:
:"1 RI, S
;Main Proqram clr RI
Main_Prog:call Serial_PorE_rniE Transmit_Data_Block:
c1r A
call Read_KeyPad jz Transmil-Dala Block Exitsjnll) Main_Prog_rroop call serial_Transnit
. inc DPTR
i.Jj".i:i_;.",. ** ,,"""1ff._,"31ix:ffi,'i,"*-
A, SBUF retc1r RI
DP?R, +I4r_Texl Read_xeyPad:call Txansrnit_Data_Block call Check Key Pressed
A, B jnc Read KeyPad_Exitcall Serial_Transmit
A, #oDH ..rll r;irnl lnry
Ieknik Antarmul<a dan Pemrograman l,likrokontroler ATB9S52
mov B, Ajnc GeL-Column
Loopl:call Check-KeY-Pressedjc LooPl
Read-KeyPad-Exit :
ret
. * **** ** ** ** *** * ** * * * ** ** ** ** * * ** ** ** ** ** * ** **** ** **** **
Get-Column:call Find-Columnswap Aor1 A, Bjnc DisPlaY-Data
Loop2:call Check-KeY-Pressedlc Loop2sjmp Read-KeYPad-Exit
. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Display-Data:Check-For-KEY0:
cjne A, #00H, Check-For-KEYlmov A, #'0'jmp LooP3
Check-For-KEY1:cjne A, #10H, Check-For-KEY2mov A. #'1'jmp LooP3
Check-For-KEY2:cjne A, #20H, Check-For-KEY3mov A, #' 2'jmp Loop3
Check-tror-KEY3:cjne A, #30H, Check-For-KEY4mov A, #'3'jmp LooP3
lnterupsi 397396
Check_For_KEY4:cjne A, #01H,mov A, #'4'jmp Loop3
Check_For_KEYS:cjne A, #11-H,mov A, #'5'jmp Loop3
Check_For_KEY6:cjne A, #21H,mov A, #'6'jmp Loop3
Check_For_KEY7:cjne A, #31-H,mov A, #'7 '
jmp Loop3
Check_For_KEYB:cjne A, #02H,mov A, #'8'jmp Loop3
Check_For_KEY9:cjne A, #12H,mov A, #'9'jmp Loop3
Check_For_KEY10 :
cjne A, #22H,mov A, # 'A'jmp Loop3
Check_For_KEY11 :
c jne A, #32H,mov A, #'B'jmp Loop3
Check_For l<.F,Y1,2:
cjno n, il03H,rl( )\/ A , ll 't' '
Check_For_KEYs
Check_For_KEY6
Check_For_KEY7
Check_For_KEY8
Check_For_KEYg
Check_For_KEY10
Check_For_KEY11
Check_For_KEY12
Check_For KEY13
199398 Ieknik Antarmuka dan Pemrograman Mikrokontroler AIB9552 lnterupsi
jmp Loop3 cPl Alz No-Key
Check_For_KEy13 : setb C
cjne A, #13H, Check For KEY14 retA, *,D, No_Key:
jmp Loop3 c1r C
Check_For_rlEY14:
mov A, #,E, Find_Row:jmp Loop3 A, KeYData
mov R0, +4Check_For_rGY15 .
cjne A, *33s, DispLay-Dala-Exit Trv-Nexl-Rovr:
joc Row_FoundLoop3: djnz R0, Tr.y Next-Row
push Acc selb C
DPTR, *My_Tex!2call Transmi t_Da !a-Bl ockPoP ACC Ro\r/ Found:call Serial_Transnit A, 44nov DI{R, *My Text3 sr.rbb A, R0
call TransmiE_DaEa-Block clr C
nov A, +0DH retcaII Serial_Transmil
Display-DaEa_rxi a: Find-colllm:
jc Display_DaEa_Exit A, +oEFhjnlp Reaal KeyPad D(it Push ACC
Try-Nexr Colum:My-Tex!2: pop ACC
rIAMy_Text3: push aCC
db ' is pressed. ',0 A, KeyDataorl A, *0F0h
r cp1 Acheck-(ey-plessed: j,\z Colunn-Eound
KeyData, {oFh danz R0, Tr.y NexE Colllrm
or1 a, *oFoh :r,t tr
Ieknik Antarmuka dan Pemrograman I'likrokontroler AT89552
ret
Column-Found:pop ACC
BAB 9ANTARMUKA DENGAN
,INYAI ANATOG
Mikrokontroler adalah perangkat digital yang beker;'a dengan prinsip-prinsip
elektronika digital. Namun dalam banyak aplikasi, temtama aplikasi sistem
kendali, mikrokontroler diharuskan untuk mampu berkomunikasi dan me-
nangani sinyal analog. Sebagai contoh, sebuah sensor suhu memiliki keluaran
tegangan. walaupun ada sensor suhu dari Dallas Semiconductor yang
keluarannya sudah digital. Mikrokontroler tentu sa;'a tidak bisa menangani
sinyal analog secara langsung. Sinyal analog tersebut harus diubah terlebih
dahulu menjadi sinyal digital, dan untuk ini bisa digunakan sebuah IC
pengubah analog ke digitai (ADC : analoSJ ro digital converter). Banyak jenis
mikrokontroler telah dilengkapi dengan ADC internal, sedangkan
mikrokontroler yang tidak memiliki ADC internal bisa menggunakan ADC
eksternal.
Pada aplikasi lain, mikrokontroler diharuskan untuk memberikan tegangan
analog ke suatu sistem, misalnya memberikan tegangan DC untukmengendalikan kecepatan sebuah motor DC. Bab 8 telah memberikan sebuah
contoh bagaimana mikrokontroler diprogram untuk menghasilkan sinyal
PWM, yang pada dasarnya adalah sinyal DC apabila di-filter. Untuk aplikasi
yang memerlukan tegangan yang lebih akurat, mikrokontroler memerlukan
sebuah rangkaian atau IC yang bisa mengubah data digital menjadi sinyal
analog (DAC = digital to analog converrer), yang juga bisa sebagai fasilitas
internal mikrokontroler atau lC DAC eksternal.
Bab ini akan menjelaskan bagaimana mikrokontroler AT89S52 digunakan
untuk menangani sinyal analog, baik itu dengan menggunakan ADC/DAC
atau dengan menggunakan teknik yang lain. Oleh karena AT89S52 tidak
dilengkapi oleh ADC atau DAC internal, maka digunakan ADC atau DAC
eksternal. Mengingat kompleksnya teori tentang ADC, maka hanya akan
dibahas bagairnana menangani sinyal DC dengan ADC, walaupun secara
prirrsip (alir l)('nirnlSnarr sinyal AC juga lrampir sama. [Jntuk aplikasi yang
movc1rsubb A. R0
c1r C
ret
A, #4
end
401402 Ieknik Antarmuka dan Pemrograman l'likrokontroler AI89S52
lebih kompleks diperlukan ADC yang lebih baik, dengan frekuensi sampling
yang lebih tinggi dan jumlah bit data yang lebih besar.
9.I ANTARMUKA DENGAN ADC
Salah satu ADC yang sering dipakai adalah ADC0804 yang banyak dibuat
oleh perusahaan pembuat IC seperti National Semiconductor, Texas
Instruments, Harris Semiconductor dan lain-lain. ADC0804 adalah ADC 8 bitdengan sebuah masukan diferensial. ADC bekerja pada tegangan TTL (5 V)
sehingga bisa langsung dihubungkan dengan mikrokontroler AT89S52
dengan tidak memerlukan rangkaian pengubah logika. Gambar 9.1
memperlihatkan susunan pin ADC0804 yang dikemas dalam kemasan DIP 20
pin.
Proses konversi dilakukan dengan membuat pin CS dan WR secara
bersamaan berada di logika rendah. Pada saat ini ADC akan berada pada
kondisi reset. Konversi akan dimulai dengan membuat pin WR berlogika
tinggi: Teknik konversi ADC ini menggunakan teknik succesive
approximatioiz dengan waktu konversi sekitar 100 mikrodetik. Pin INTR
akan di-reset setiap kali proses konversi selesai, dan ini bisa digunakan, sesuai
dengan nama pin tersesbut, untuk menginterupsi mikrokontroler. Data
digital bisa dibaca di bus data (D0 - D7) dengan membuat pin kendali baca
RD berlogika rendah. Dengan proses pengendalian seperti ini, ADC0804 bisa
berjalan tanpa mikrokontroler (stand alone mode). Caranya pin CS dan RD
langsung dihubungkan dengan logika rendah (ground), sedangkan pin WR
dihubungkan langsung dengan pin INTR walaupun harus ada saklar yang
akan menghubungkan pin WR dengan ground untuk memulai proses kon-
versi. Data bisa dihubungkan dengan 2 buah display 7 segmen melalui IC
dekoder BCD ke 7 segmen.
Pin Verf/2 dihubungkan dengan tegangan referensi untuk proses konversi,
yang bisa dihubungkan dengan tegangan setengah dari tegangan catu (1/2
Vcc) atau bisa diatur melalui potensiometer. Pin AGND (analog grounct) dan
DGND (digital groun@ bisa langsung dihubungkan dengan g,round catu claya.
Tegangan analog diferensial dihubungkan dengan pin Virrr darr Vin. fika
bukan sinyal diferensial, sinyal dihubung,kart clcngan pirr Vin r , st-tlatrgkatt pirr
Vin- dihubungkan dcngan grourrtl tatu tlityit. I)t'nBrttt t('llirrrliirrr V(:(:5 V,
Antarmuka dengan Sinyal Analog
sinyal input maksimum adalah 5 V. Penyesuaian sinyal diperlukan jika ADCdioperasikan untuk menangani sinyal masukan lebih dari 5 V, misalnyadengan menggunakan rangkaian pembagi tegangan.
cS
ND
WR
CLI{ IN
INTR
Vin+
Vin-
A GND
\rref/2
D GND
Vcc
CLI( N
DO
D1
D?
D3
D4
D5
D6
D7
Gombor 9.1 Susunon Pin AD(0804
Pin terakhir adalah pin CLKIN dan CLKR yang mempakan pin untuk sinyalclock yang dibutuhkan oleh ADC pada saat proses konversi. Sinyal clock bisaberasal dari luar, misalnya dari mikrokontroler, yang dihubungkan ke pinCLKIN, sedangkan pin CLKR dibiarkan terbuka. Atau bisa juga menggunakanpembangkit clock internal. Rangkaian clock internal membutuhkanrangkaian RC eksternal yang dihubungkan ke pin CLKIN dan CLKR (seperti
Gambar 9.2). Frekuensi sinyal clock dihitung dengan persamaan berikut:
"11.lRC
dengan nilai R = l0 K. Keterangan lebih rinci mengenai ADC0804 bisa dilihatdi lembaran data yang disertakan dalam CD pendukung buku ini.
Gambar 9.2 memperlihatkan rangkaian ADC0804 yang digunakan untukmembaca tegangan DC dari potensiometer. Tegangan referensi (VREF/2)
didapat dengan mengatur potensiometer VR2 sekitar 2,5 V. ADC bekerjadengan sinyal clock dari pembangkit clock internal dengan resisror dankapasitor eksternal yang akan menghasilkan frekuensi clock sekitar 600 kHz.
120?19318lL t7
-s 16
6157 lit81391210 tl
Vl?110K
1 qka
+
1.,
Il'.'
I
10K
ErBl
oBl0840E!II EB
BB?
imUEFNrls
\,fiEFE AtrC0804
CLKR
EEz7DLKlll o El(J
2.2t<
I _ _-Ll4
4R110K
!L1-T- rsoort"
I
404 Ieknik Antarmul<a dan Pemrograman l'likrokontroler AT89S52
Gqmbur 9.2 AD( Memboco Tegongon D(
Contoh program berikut memperlihatkan bagaimana membaca data ADC dan
mengirimkannya melalui port serial pada baud rate 9600 bps. Data keluaran
aDC,dihJbungkan dengan PO (ADLDarr), pi, WR dihubungkan dengan
PI.OlUDC-tl,?), ll\rTR dengan Pl.1 (ADC-lMf' pin CS dengan Pl'2
UdC-CAhan pin RD dihrbrrgkan dengan ground.
pembacaan ADC dilakukan di subrutin ADC_Read. Pin ADC_CS dan
ADC_WR di-clr untuk mereset ADC, kemudian setelah 3 siklus mesin
(instruksi nop) pin ADC-WR di-set untuk memulai proses konversi.
Mikrokontroler akan menunggu sampai proses konversi selesai dengan
membaca pin ADC_INT. |ika pin ini di-set, port data ADC dibaca dan
disimpan di register A. Data ADC kemudian dikirimkan melalui port serial.
Data yang dikirimkan bukan data heksa, tetapi nilai tegangan DC yang ada di
pin masukan ADC. Oleh karena itu, data heksa yang terbaca harus dir-rbah
dulu menjadi nilai desimal yang sesuai.
Seperti telah diterangkan dengan rangkaian yang, dittrrritrl<krrrr olch ( iittnbitr
9.2, tegangan input maksimutn adalah 5 V. ()lt'lt krrrt'ttrt,ttlrt 255 rtilirr
Antarmuka dengan Sinyal Analog
kuantisasi, maka tegangan 1 LSB adalah 51255 = 0,019 V atau 19 mV. |ika dataADC diketahui maka nilai tegangan DC yang sesuai bisa dicari denganpersamaan berikut:
Voc=Data, 5 ,255
Subrutin Get_ADC_Voltage menggunakan persamaan di atas untuk meng-ubah data heksa ADC menjadi nilai tegangan DC yang sesuai. Namun karenabahasa assembler tidak bisa menangani bilangan pecahan secara langsung,maka diperlukan sebuah teknik untuk melakukannya. Pertama data ADCdikalikan terlebih dahulu dengan 5000 (1388H) dengan memanggil subrutinMULS_I6, subrutin untuk mengalikan bilangan 8 bit dengan bilangan 16 bir.Data ADC yang sebelumnya disimpan di A dipindahkan ke XL (bilangan 8bit), sedangkan angka 5000 disimpan di YL (88H) dan YH (l3H) sebagai
bilangan 16 bit. Hasilnya adalah bilangan 24bityang disimpan di, dari bytetinggi ke byte rendah, 22, 21, dan 20.
Hasil perkalian kemudian dibagi dengan 255. Subrutin DIV32 merupakansubrutin pembagian bilangan 32 bit. Bilangan yang akan dibagi disimpan diX3, X2, Xl dan X0sedangkan bilangan pembagi disimpan di Y3, Y2, Yl danYO. Bilangan hasil perkalian (22, Zl dan 201 disimpan masing-masing di X2,Xl dan XO, sedangkan XSdiisi dengan 0. Bilangan pembagi (255) disimpan diI'4 sementara Yl, Y2 dan Y3 diberi nilai 0. Hasil pembagian, yang jugabilangan 32 bit, disimpan di 25, 24, 23 dan 22 sementara sisa pembagianadalah bilangan 16 bit disimpan di Z0 dan Zl. Dalam kenyataannya hasilpembagian tidak akan melebihi 5000 (nilai maksimum terjadi pada saat dataADC maksimum yaitu FFH atau 255). Hasil pembagian adalah tegangan DCdalam satuan mV, sedangkan sisa pembagian diabaikan.
Oleh karena nilai tegangan akan dinyatakan dalam satuan V dengan 3 angkadi belakang koma, tegangan DC dalam mV harus dibagi dengan 1000(03E8H). Pembagian dilakukan di subrutin pembagian 16bit (DIV|@, karenaseperti telah dijelaskan hasil pembagian 32 bit tidak akan melebihi 5000 (16
bit). XL dlisi 22 dan XH diisi dengan 23, yang menyimpan tegangan DCdalam mV. Sedangkan bilangan pembagi diisi dengan 1000, YL = E8H danYH=03H.
Hasil pembag,ian l6 bit ini adalah nilai tegangan DC dalam satuan V, sedang-kan sisa pcrrrbirgiirrrrrya digunakan untuk mendapatkan angka di belakang
406 Ieknik Antarmuka dan Pemrograman I'likrokontroler AI89552
koma. Nilai tegangan DC kemudian diubah menjadi karakter ASCII dan
disimpan di Volt_Value. Untuk mendapatkan angka pertama di belakang
koma (per sepuluh), sisa pembagian Z0 dan Zl dibagi dengan 100 melaluipembagian 16 bit. Hasilnya disimpan di Dec_l setelah diubah menjadi
karakter ASCII. Sisa pembagiannya dibagi lagi dengan 10 untuk mendapatkan
angka kedua di belakang koma (per seratus) dan disimpan di Dec-2 setelah
dijadikan karakter ASCII. Sisa pembagian terakhir adalah angka ketiga dibelakang koma (per seribu) yang disimpan di Dec_3 juga setelah diubahmenjadi karakter ASCII.
Setelah nilai tegangan DC dalam karakter ASCII didapatkan, kemudian
dikirimkan melalui port serial. Jika digunakan HyperTerminal, misalnya data
ADC yang terbaca adalah 69H (105) akan terbaca "Voltage: 2,058V". Hasil
pembacaan mungkin tidak akan persis sama dengan tegangan DC jika diukurdengan multimeter. Hal ini bergantung pada tegangan catu daya ADC (VCC)
dan tegangan referensi (Yrefl2). Jika kedua tegangan ini bisa stabil di 5 V dan
2,5 V hasil pembacaan dengan ADC dan multimeter bisa sama. Karena ituprogram ini bisa digunakan sebagai voltmeter DC dengan tegangan
maksimum yang bisa diukur 5 V.
,. ===== ==== ======= ---;Program Title : "Pembacaan Tegangan DC dengan ADC"
; File name : AilC. asm;Version :1.0;Created date : Ju1 14, 2007; Proqrarnmer : Usman. ** * ** ** ** * * *** * * * ** * * * * * ** * * * * * * * * ** ** ** * ** * * ** ** ** *** *
. * *** * ** ** * * ** * * ** * * * ** *** * ** * * ** * * ** * * * * * ** * * ** * ** * ** * *
;MicroconLroler Pin/Port Assignment*******************************************************
Antarmuka dengan Sinyal Analog 407
***************************************************** * t
Internal RAM mapprng
;ADC controlADC_DataADC-WRADC-CSADC TNT
equ P0equ P1.0equ P1 .l-egu Pl .2
FlagRegzovVC
YSac
ZADJ
x0x1
x3
ZHZL
PRO
PR1PR2PR3
Volt*ValueDec_1Dec ?.
Doc 1
20HFlagReg. 0FlagReg. 1t,-LagReg. 2
FlagReg. 3
FlagReg. 4
30H31H32H33H
34H35H36H31H
3BH39H3AH3BH3CH3DH
3EH3trH
40H4tH
42H43H
44H45H46H47H
4BH49H4AH4BH
eguequequequequequ
equegu
egu
equequeguequ
equeguequeguequegu
equequ
equequ
equequ
equequequequ
eqllequeguequ
YO
Y11Z
Y3
ZO
ZL22
Z4LJ
XHXL
YHYL
Ieknik Antarmuka dan Pemrograman I'likrokontroler AT89S52
. * * * **** ** ** ** ** ** *** ** * * * * * * ** * * ** ** ** ** *** ** * * ** x * ** **
;Main Program. *** * * ** **** ** **** ** ***** ** * * ** * * * * ** * * * ** ** ** * * * *** ****
Org 0000HMain_Prog:
cafl Serial-Port-Init
Main-Prog-Loop:call ADC-Readcall Send-ADC-Datasjmp Main-Prog-Loop
- *** ** * * * * **** * * * * * * * *** * *** *** * *** ** * * * * * ** ** ** * *** *** *
Serial-Porc-fnit:mov SCON, #50Hmov TMOD, #20Hmov THl, #OFDH
setb TR1rel:
Serial-Transmi t :
mov SBUF, Ajnb TI, $
clr TIret
. * * * ** * * * * ** * *** ** *** * * * * ** * * ** ** ** ** ** * * * * * ** ** ** * *** * *
ADC-Read:clr ADC-CSclr ADC-WR
nopnopnopsetb ADC-WRjnb ADC-INT, S
MOV A, ADC-DATA
ret*x*************************i*x**********x***
Send ADC-Data:call Get-ADC*Voltagemov DPTR. #Voltage--MSG
Send-ADC-Data -l ,oop :
Antarmuka dengan Sinyal Analog 409408
c1r AmoVC A, @A+DPTR
1z Send_Voltage_Va1uecall Serial Transmltinc DPTRsjmp Send_ADC_Da1-a_Loop
Send_Vol tage_Va1ue :
mov A, Volt Valuecall Serial_Transmitmov A, #','call Serial_Transmil:mov A, Dec_1call Serial_Transmitmov A, Dec_2call Serial_Transmitmov A. Dec_3call Serial_Transmitmov A, #'V'call Serial_Transmitmov A, #0DHcall Serial TransmitreL
Voltage*MSG:db 'Voltage: ' ,0
- **************************************Get_ADC_Voltage:
;Mu1tip1y with 5000 (1388H)mov XL, Amov YH, #13Hmov YL, #8BHcall 14lll,8_16
;Divlded by 255mov Y0, #0FFHmov YL, #0mov Y2, #0mov Y3. #0mov X0, ZO
mov X1, Z7mov X;l , 7,?.
4t0 Teknik Antarmuka dan Pemrograman l'likrokontroler AT89552 Antarmuka dengan Sinyal Analog
movcall
x3, #0DIV32
;Convert VolL Value to ASCIImov YL, #0EBHmov YH, #03mov XL, 22
mov XH, Z3
call DrV16mov A, 22caIl Hexa-To-ASCIImov Volt-Value, A
dbdbdbdbdbdL)
dbdbdbdb
'0''1''2','3',,4,'5''6',7,rol
'9'
PSW, #O
A, XLB, YLABZO, AB
A, XLB, YHAB0
A, RO
21., AAAP
22, A
I)IIJ, X3lll.r, Y')
movmovmovmovcallmovcallmov
movmovmovmovca1 Imovcallmov
movcallmovret
. *** **** * * ** ** ** **** * **** ** * **** ******* ** * * * * * * * * * * * * * **
HeXa-TO-ASCII:
- * * * ** * * ** * * * * * * * ** * * ** * *** * * * * * * * * * * ** * * * ** * * * * * *** * * **MTILB-16:
movmovmovmu1movpushmovmovmu1popaddmovc1raddcmovret
. * *** * * * ** *** * *** * ** * ** * * ** ** ** ** ** ** ** ** * * * ** ** ** ** * ***
XL, ZOvU ry1
YL, #100YH, #O
DIV16A, Z2Hexa_To-ASCIIDec_l, A
XL, ZO
?!jil, LL
YL, #10YH, #O
DIV16A, Z2HeXA-TO-ASCIIDec_2, A
A, ZO
HeXA-TO-ASCIIDec_3, A
DIV32:movor1orlor1)nzsetbret
div32_ok:movII]OV
A, Y3AV,
A, Y1A, YO
div32_okzov
1ncmovc A, @A+PC
reL
4ll4t2 Ieknik Antarmulo dan Pemrograman Mikrokontroler AI89552 Antarmuka dengan Sinyal Analog
mov PR1, Xlmov PR0, x0mov X3, #0mov x2, #0mov x1, #0mov X0, #0mov R6, #0mov R5, #0mov R4, #0mov R3, #0mov R7, #32
div32_1oop:clr C
mov A, PRO
rlc Amov PRO, Amov A, PR1
r1c Amov PR1, Amov A, PR2
rlc Amov PR2, Amov A, PR3
r1c Amov PR3, Amov A, X0r1c Amov X0, Amov A, X1rlc Amov x1, Amov A, X2rlc Amov x2, Amov A, x3r1c Amov X3, Alcal1 SUB32mov C, ZOV
cpl C
jnc div32-1mov X3, 23mov X2, 7'2
movmov
div32_1:movr1cmovmovrlcmovmovrlcmovmovrlcmovd)nzmovmovmovmovmovmovc1rIEL
Xl, ZLXO, ZO
A, R3AR3, AA, R4AR4, AA, R5AR5, AA, R6AR6, AR"7 , div32_1oop25, R624, R523, R422, R3
20, x0zov
*********************************************
A, X0C
A, YO
ZO, AA, X1A, Y1Z1-, AA, X2A, vz
A, X3A, Y323, AZOV, C
SUB32:movclrsubbmovmovsubbmovmovsubbmovmovsubbmovmovret,
4r54t4 Teknik Antarmulta dan Pemrograman l'likrokontroler AT89S52
. * * * * * * * * * * * * * * * x * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * *
Antarmuka dengan Sinyal Analog
djnzmovmovmovmovc1rret
R7, div_loop23, R371 p')
21., XHZO, XLzov
SUB16:mov A, XLc1r C
subb A, YLmov ZL, Amov A, XH
subb A, YHmov ZH, Amov ZOV, C
ret
end
9.2 PEMBANGKITAN SINYAT ANATOGSelain bisa membaca sinyal analog mikrokontroler juga bisa diprogram untukmembangkitkan sinyal analog. Contoh yang paling sederhana adalah ketika
mikrokontroler diprogram untuk mengeluarkan sinyal PWM menggunakan
Timer. Sinyal PWM jika dilewatkan ke LPF akan menghasilkan sinyal DC
yang sebanding dengan siklus kerja sinyal PWM tersebut. Kelemahannya
adalah, besarnya tegangan DC sulit ditentukan karena sinyal PWM sangat
bergantung pada frekuensi dan perancangan LPF yang sesuai. Cara yang lain
yang paling sering digunakan adalah menggunakan pengubah digital ke
analog (DAC = Digital to analog converter). Mikrokontroler AT89S52 harus
menggunakan DAC eksternal karena tidak difasilitasi dengan DAC internal.
Dengan bantuan DAC, mikrokontroler AT89S52 bisa digunakan untukmembangkitkan sinyal DC, seperti untuk mengendalikan kecepatan motor,
atau membangkitkan sinyal AC, musik misalnya, seperti yang akan
dicontohkan dalam subbab berikut.
Dalam sebuah sitr.rs di internet, mikrokontroler PIC (buatan Microchip) bisa
dipnrgrlrrr rrrrl rrk rncngeluarkan suara atau balrkan musik deng,an hanya
rnt'rrligrrrrirkrrrr .' l,rr;rlr r t'sislor tlan st'bualt klpasitor! Algoritrna yarrg dipakai
DIV16:movor1i.^-)tLL
setbret
div-OK:movmovmovmovmovmovmov
div-1oop:clrmovrlcmovmovr1cmovmovr1cmovmovr1cmov1cal1movcplt-^J 1rU
movmov
div-1:movrlcmovmov11cmov
A, YHA, YLdiv-OKZOV
R1, XHRO, XLxH, #0xL, #0R3, #0P.2, #0R7, #16
C
A, RO
ARO, AA, RlAR1, AA, XLAx1, AA, XHAXH, ASUB16C, ZOV
div-1XH, ZH
Xl , ZL
A, R2
AR2, AA, R3
AR3, A
4114r6 Teknik Antarmuka dan Pemrograman llikrokontroler AI89S52
adalah Binaty Time Contanr. Subbab ini akan menunjukkan bahwa, dengan
menggunakan algoritma yang sama, AT89S52 juga bisa diprogram untuk itu.
9.2.1 MENGATUR KECEPATAN MOTOR DC DENGANDAC
Salah satu IC DAC yang terkenal adalah DAC0832. DAC ini adalah DAC
dengan resolusi 8 bit dan memakai tegangan catu daya dari 5V - 15V. IC
dirancang agar bisa dengan mudah dihubungkan dengan mikrokontroler atau
mikroprosesor terkenal. Dengan teknik double-buffered DAC ini bisa
mengeluarkan tegangan sambil membaca data berikutnya, sehingga bisa
dengan segera memperbarui tegangan keluaran. Teknik DAC yang digunakan
adalah R-2F. ladder.
Diagram blok DAC0832 diperlihatkan oleh Gambar 9.4. Data digital yang
akan diubah menjadi analog dihubungkan dengan bus data DIO - DI7. Ada 2
sinyal kendali penulisan, yaitu pin Wn1 dun WR2. Kedua sinyal ini
masing-masing digunakan untuk mengendalikan kedua buffer atau latch I bit
digital yang dimiliki oleh DAC ini. WRI bersama dengan pin CS 1c,lrp
select) dan pin ILE (inpur latch enable) akan mengendalikan buffer data yang
pertama (S-bit input regisrer). Data dari mikrokontroler akan masuk ke buffer
pertama dan di-latch pada saat sinyal WRl berubah dari logika rendah ke
logika tinggi, sementara pin CS berada pada logika rendah dan pin ILE
berada di logika tinggi. Dalam aplikasi pin CS bisa langsung dihubungkan ke
ground catu daya dan pin ILE dihubungkan ke pin VCC. Pin WR2 akan
mengendalikan buffer yang kedua bersama dengan pin )GER (transfer
control signal) yang akan mentransfer data dari buffer pertama ke buffer
kedra (*-bit DAC register) dan mentransfer data tersebut ke bagian DAC'
Sama dengan buffer pertama, pin WRI harus bertransisi dari logika rendah
ke logika tinggi, sementara pin )GER berada di logika rendah dan bisa
langsung dihubungkan ke ground.
Antarmuka dengan 5inyal Analog
Gombor 9.3 Susunon Pin DA(0832 l(emoson DlP20
Pin VREF (reference voltage input) adalah pin yang akan menyediakantegangan untuk rangkaian R-2R ladder internal. VREF bisa dihubungkandengan tegangan dari +10V sampai -10V. Keluaran DAC adalah arrsdiferensial melalui pin IOUT1 dan IOUT2; jika akan diubah menjaditegangan diperlukan sebuah penguat operasional (op-amp). Pin RFB(feedback resistor) digunakan untuk menyediakan tegangan umpan balik darikeluaran op-amp melalui resistor Rfb internal. Pin ini harus selalu dipakaidan tidak disarankan menggunakan resistor eksternal agar match denganrangkaian R-2R ladder internal. Pin VCC adalah pin yang akan menyediakancatu daya ke DAC. Tegangan VCC bisa menggunakan +5V sampai +15V.Lembaran data mengatakan DAC akan bekerja optimum pada saat VCCdihubungkan dengan + 1 5V.
0t00HDt2tr l3tr t4ntftrlrlDI]
4t94 t8 Teknik Antarmul<a dan Pemrograman I'likrokontroler Ai89552 Antarmuka dengan Sinyal Analog
(lvlsB)DI7DI6NTE
Di4DI3ril,frtl
(LSE)DrO
ILE
VITEF
IOUT2
l,llJTl
rTFB
ICl DACOfi:?:
Dari F2 r1(VEl)[1.:-
dan F2 1 ftTF:2) |t.lc
ii-4GND
| 'rnFi--ovccI
t_-l-l!l+clqn
L------- -----JGombor 9.4 Diogrom Blok DAt0832
Rangkaian yang ditunjukkan oleh Gambar 9.5 adalah rangkaian DAC yang
digunakan untuk mengendalikan kecepatan motor DC. Keluaran DAC
dihubungkan dengan sebuah op-amp (IC2A) sehingga arus diferensial diubah
menjadi tegangan. Tegangan keiuaran op-amp ini negatif terhadap ground
catu daya. DAC bekerja dengan tegangan +5V, sehingga pada saat data DACFFH (255) tegangan output op-amp IC2A adalah -5V. Oleh karena iru,
diperlukan sebuah penguat pembalik teBangan agar bisa digunakan untukmembias transistor driver motor Qi. IC2B berfungsi sebagai penguat
pembalik tegangan, dengan nilai penguatan - (R3/R1). Dengan nilai R1 dan
R3 sama (10K) nilai penguatan IC2B adalah -1.
Keluaran IC2B digunakan untuk membias kaki basis Ql dengan R2 berfungsi
sebagai pembatas arus. Kapasitor C1 dan dioda D1 berfungsi sebagai
pengaman mengingat motor adalah beban induktif yang akan menghasilkan
tegangan balik yang bisa merusak transistor saat catu daya dimatikan. Dengan
nilai penguatan -1, tegangan keluaran IC2B ditentukan dengan persamaan
v.u.=5, D"t'voit255
Ir:2E LhI3?4
E.} lLIH
Gombor 9.5 DA( Digunokon untuk Mengendolikon Molor D(
IC2A dan IC2B menggunalan LM324 yang merupakan IC 4 buah op-ampdalam 1 kemasan, dengan demikian hanya diperlukan 1 buah LM324. IC inimemerlukan catu daya simetris agar bekerja dengan baik; dalam rangkaiandigunakan tegangan +10V dan -10V. Semenrara moror bekerja dengantegangan +10V.
Program MotorDC-DAC.asm bekerl'a berdasarkan rangkaian di atas. port
data DAC dihubungkan dengan Pl (DAC_Data), sedangkan pin WRIdihubungkan dengan pin P2.0 (DAC_WRI) dan pin WR2 dihubungkandengan pin P2.1 (DAC_WR). Dua buah saklar digunakan unruk menambahkecepatan, tlp SW(P2.2), dan mengurangi kecepatan moror DC, Down_SW(P2.3). l)rogrrrrr s('cilra terus menerus tnembaca kedua saklar ini. Jika salahsitlr.t sitklirr rlitr.l".;rrr. l)l()lll'ant aklrr rnt'rlPt'rbarrri rlata I)A(l yalrg rlikirimkan,
XFEIi
n1
TIF12O'L , Pi lrlrl-*tw\.n
LJII.J4[01
tr l0oltEI?D13E14old0lEtt ll
lrUElWEi[iERrtEVEEF
411420 Ieknik Antarmul<a dan Pemrograman I'likrokontroler AI89l52
bergantung pada saklar mana yang ditekan. Data DAC disimpan di register A,
dengan nilai awal 0, sehingga motor pertama kali dalam keadaan mati'
Proses pengiriman data DAC dilakukan di subrutin DAC-Outpur. Pertama
data yang disimpan di A diletakkan di port dara DAC. Kemudian pin
DAC_WRI dan DAC_WR2 di-set. Data dimasukkan ke register pertama
DAC dengan membuat pin DAC*WRI bertransisi negatif. Proses terakhir
adalah mentransfer data dari register pertama ke register kedua dengan
membuat transisi negatif di prn DAC-WR2. Setelah ini tegangan baru akan
keluar dari DAC sesuai data yang dikirimkan.
;Progiram Title : "MengaLur Kecepat-an Motor DC dengan DAC
;File name : MotorDC-DAC.asm;Version : 1.0;Created date : JulY 21, 2001;Proqrammer : Usman
,. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;Microcontroler Pin/Port Assignment. * *** * ** ** **** ** *** * * **** ** ** **** ** ** * * *** ** ** ** *** * ** * *
Antarmuka dengan Sinyal Analog
. * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *Read*SW:
lb Up_SW, Read_DownSWcall Delayjnb Up_SW, $inc Aret
Read DownSW:jb Down*SW, Read_SW_Exitcall Delayjnb Down_SW, $dec A
Read*SW_Exit:reL
. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * *DAC_Output:
mov DAC_Data, Asetb DAC_I,VR1
setb DAC_WR2
cfr DAC_WR1
setb DAC_WR1
c1r DAC_WR2
selb DAC-WR2ret
- * ***** * ****** ** **** * ** ** ** * * * * ** * * * * ** ***** ** ** **** ** **Delay:
mov R1, #01cafl Delay_lreL
Delay_l:mov R3, #2FH
Delay_2:mov R2, #0AIld)nz R2, $djnz R3, Delay_2djnz R1, Delay_1ret
crt<l
;DAC Control PlnDAC_Data equDAC_WRI eguDAC_WR2 equ
;Key InpuLUp_SWDovrn_SW
egu P2.2equ P2.3
P1P2.OP2.L
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * *
;Main Program. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Main_Prog:mov A, #0call DAC-OutPut
Main_Prog-Loop:call Read-SWcall DAC_Outputs jmp Main-Proq-.Loop
Teknik Antarmuka dan Pemrograman tlikrokontroler AI89552
g.2.2 MEMBANGKITKAN MUSIK DENGAN DAC R.2R
IC DAC0832 yang telah dibahas di subbab sebelumnya pada dasarnya diben-
tuk oleh rangkaian resistor yang terdiri atas 2 buah nilai yang akan
mengubah data digital (bilangan heksa) menjadi tegangan DC yang sesuai'
Runfkuia., ini dikenal dengan rangkaian R-2R. Dengan demikian sebuah
DAC bisa dibangun dengan menggunakan rangkaian R-2R-tersebut. Tentu
saja, tingkat ketelitian DAC ini tidak sebaik IC DAC0832. Tetapi untuk
aplikasi yang sederhana, seperti kotak musik yang akan dibahas ini, rangkaian
ini bisa dipakai dengan pertimbangan lebih ekonomis'
10uF1oK 1oK 10K 10K 1oK 1oK 1g4
Amplifier
Antarmuka dengan Sinyal Analog
dan pengiriman semakin lambat akan menghasilkan nada yang lebih rendah.
Namun relatif sulit untuk mengatur kecepatan agar menghasilkan nada yang
sesuai. Oleh karena itu, dalam contoh aplikasi yang dibahas di buku ini,semua nada yang akan dimainkan direkam dan diambil datanya.
Piano yang akan digunakan dalam buku ini adalah sebuah piano yang dibuat
dengan program Delphi (PianoEx Vl.01.Program ini dibuat oleh ZiZii Wan
([email protected]) yang bersifat oPen source dan bisa di-download diwww.PianoEx.com, lengkap dengan source code-nya. Program ini meng-
gunakan perangkat MIDI (Musical Instrament Diginl Interface) yang
dimiliki oleh PC. Perangkat MIDI adalah perangkat yang bisa mengeluarkan
suara alat musik, seperti piano, drum, gitar dan lain-lain. Selain sebagai piano'
program ini juga bisa memainkan file midi. Gambar 9.7 memperlihatkan
program PianoEx.
Gombar 9.7 Progrom Piono
Cara menggunakan program ini sangat mudah. Program ini dilengkapi
dengan tombol-tombol untuk pengaturan volume, mengatur berapa tuts
piano yang akan ditampllkan (Group) dan mengatur oktaf ke berapa dari tuts
yang ditampilkan tersebut (Octave). Selain itu, program ini juga dilengkapi
dengan informasi tentang perangkat midi yang terinstal diPC (Midi Out dan
Midi In), yang dengan ini pengguna bisa memilih perangkat midi mana yang
akan digunakan. Pada saat memainkan file midi, prograrn ini juga akan
menampilkan informasi file midi tersebut, jumlah track atau aiat musik yang
ada di file tersebut dan tuts-tuts piano yang sedang dimainkan akan terlihat
clitekan.
473411
10Ki2D
lD4
Gombor 9.6 Rongkoion DA( R-2R
Contoh aplikasi berikut akan memfungsikan mikrokontroler AT89S52 untuk
menghasilkan musik dengan menggunakan DAC R-2R. Oleh karena kom-
pleksnya sinyal audio, dalam contoh aplikasi ini mikrokontroler hanya
diprogru- untuk menghasilkan nada tunggal (mono roze)' dalam hal ini
suara piano.
Algoritma untuk menghasilkan bunyi piano cukup sederhana. Pertama suara
piano direkam terlebih dahulu. Kemudian bentuk gelombang sinyal yang
dihasilkan dianalisis dan diubah menjadi data digital yang sesuai. Data-data
tersebut kemudian disimpan di memori program mikrokontroler- Untuk
menghemat memori, cukup satu gelombang saja yang diambil' Pada saat
-"-ui.rkurlrrya kembali, mikrokontroler tinggal membaca data tersebut dari
memori dan mengirimkannya ke DAC. |ika pengiriman data dilakukan sama
dengan kecepatan Pada saat merekam, yaitu frekuensi sampling' data yang
akan dihasilkan akan sama dengan suara asii piano tersebut. Panjang, nada
yang dihasilkan ditentukan berapa kali dan berapa lama gelombang terscbut
dikirimkan ke DAC, sedangkan untuk menghasilkan nada yang lairr bisa
dilakukan dengan mengatur kecepatan peng,irirnar.r data; perlgiritnarr st'trtrtkitt
cepat akan menghasilkan nada yang lebih tirrggi (f rt'ktrt'ttsi yirtrg lt'hilr tirrggi)
I
1
,-.'Ii
c.b e1.b1 c2-b2 c3 b3ir .Eq qr c?r s4 4ra *t v.qq. ? qr4.
II lil II tll Ii lll l:llsr. Ill
oPe" P'6v
: qd n Mflr4nl
, - UU,orr, SoundMgt*erabre Synln .: i sroP B*a .1 !
0,,*. .,.,',,, c-F ] rl"* - fl-r----rr *;l
Volume sp.ed 'o -:-i Ime ;o0oBoooD , t
. ....... €11 -.t :
474 leknik Antarmuka dan Pemrograman lulikrokontroler AI89S52
Gombor 9.8 Tompilon Progrom GoldWove
Untuk merekam suara piano yang akan dimainkan bisa menggunakanprogram apa saja, misalnya program GoldWave. Program evaluasinya bisa di-download di www.GoldWave.com. Program ini memiliki banyak fitur untukmengedit file audio. Dengan bantuan encoder, baik yang sudah ada diGoldWave sendiri atau bersifat plug-in, GoldWave bisa digunakan untukmengkonversi file audio dari suatu format ke format yang lain, misalnya dariwav ke mp3 atau sebaliknya. Tampilan program GoldWave diperlihatkanoleh Gambar 9.8.
[Lra[]? rrrd I.r.jt"r,Numberolchannels: ffiil.
Sampling rate 8000 v ;lnitiallilelenqth(HH:MM:SS.II,'Z,OO:: *11
Pre.elJ
w
t-PLl l- c""*r lT H"h I
Gombor 9.9 Pengoluron untuk Filp Boru
Untuk mulai merekam, pertama buatlah sebuah filetombol .A/epy. Kemudian akan muncul dialog untuktersebut (Gambar 9.9). tJntuk contoh aplikasi ini, lilc
Antarmuka dengan Sinyal Analog
(Number of Channell dengan frekuensi sampling (Sampling rare) 8000 agarukuran file audio tidak terlalu besar. Panjang file audio diatur agar bisamerekam semua nada piano yang nantinya akan dimainkan, misalnya 2menit. Setelah itu klik tombol oK maka akan muncul file audio baru(Gambar 9.10).
Sebelum mulai perekaman, atur terlebih dahulu saluran mana dari soundcard
yang akan direkam dengan mengklik rombol t*m atau melalui menuoption/ control Properties. Atau, melalui shortcut dengan menekan Fl 1. Lalusetelah muncul dialog control Properties pilih tab volume (Gambar 9.11).Pllth wav out Mix dan atur volumenya agar pada saat perekaman revelsinyal audio tidak terlalu kecil dan tidak terlalu tinggi (terpotong). Setelahmengklik tombol O( proses perekaman siap dimulai dengan meng,klik
tombol {* '. GotdWave sekarang mulai melakukan perekaman. Not-not
piano yang akan dimainkan melalui conroh aplikasi ini dimainkan. orehkarena panjang file audio yang dibuat oleh GoldWave hanya 2 menit, makamemainkan not-not piano yang direkam harus dalam waktu 2 menit. Gambar9.12 menunjukkan GoldWave yang sedang melakukan proses perekaman.]ika not-not telah direkam, proses perekaman bisa dihentikan dengan meng-
klik tombol {
F{. Edlt Effat V.w Tftl Opt@r whd.w r€lp
N., q6 i{! cq &r 9/
r1t;;,) rl-"1 o t t,trt,- illi Li iJ.ei.iAr:a* o roIp g o! "q *;:,?: {t} i} ,.-.e" @}
'00oi,bo $di,lo 'oii,m,m 'mi,ir,io m,od,h roo,qi,ii 'do,orb; ,r;o,oi,fo ,;,;iio ,;,oi,io''i,,0,;-to;"o;,
nrm ?:00,0m o 0 m0ba;oo.oo0(2r00,0@) E ,06 I udrm,6d B4e3, in00m WaveP<MsrM.dl6ht A00nH,audio bam dengan
mengatur file baru
atrrlio lurnrs rnorro
Gombor 9.10 File Audio Boru
Teknik Antarmuka dan Pemrograman l'likrokontroler AT89S52
"r pl6y a Record O Volum8 {1 Visual X Devi[e F Test
Volumedevrce:soundMAYDrgrtnlAudto w
i covlayer -W t.:':I .-. , *zr'.f;utcroplone -ffiiiii
aux -ffi ':t.:,:'
tinetn -ffi ichone -ffi fiii :..:'
WaveoutMix -W.; ',
+ 23 ffsele.t
+ J3 I l5elect
+ zi lllserecr
i zt ,llsul".t+ 'ro r f-]selecl
i roo 1;.1saot
+;':i gsetecr
t--q _l r;;;;- | -;;e -l
Se,e'ah se,esai *",.u"I,i1,;l'i"H::T::J:::mbang dari se,iap no,
yang dimainkan. Untuk mengambil saru gelombang dari sebuah not, data
audio yang sesuai dengarr not tersebut diperbesar tampilannya dengan
qmenggunakan tombol ; (Zoom,La). Kemudian pilih satu gelombang penuh
dengan mengklik kiri mouse pada posisi awal kemudian klik kanan. Setelah
muncul meil) pop up pilih Set Start Markerdan pilih Set Finish Markerpada
posisi akhir gelombang. Setelah dipilih satu gelombang klik tombol troP!
in(Copl dan paste sebagai file audio baru dengan mengklik tombol PHeq (Paste
|/ew). Simpanlah file audio baru tersebut sebagai file wav (berekstensi ..wav)
dengan format 8 bit mono. Pada dialog penyimpanan file pilihlah atribut filepcM unsigned I bit, mono. Untuk not-not yang lain dilakukan dengan cara
yanS sama.
Antarmuka dengan Sinyal Analog
Flle Edt Effect Vrew Tool Ootions Wndow H.lg
z ..',',t & , Xl :.il.r op{. tu& Cu Copg F.l . s.t
Jt :; )t r! .- A $ I }' E ; * ilii i# l; .q,1,\ ry : o to ro g o!.qit{t+ $ s ca " @
P!<
,co-dri,!o
E'oido,o'oo,oo,io !o,ol,ho oooirio
0 m0 to 2:!0,0!0(2i00,000)
i,h 'q91911sir
E 154 :hhcensed Ut4c
16 bit, 80m H:, 128 bor, mono
r20 00r0lr:0 mr0lr10 00r01r50
Gombor 9.1 2 GoldWove podo Sool Perekomon
Setelah semua not yang akan dimainkan disimpan sebagai file wav, selanjut-
nya tinggal mengambil data audio yang tersimpan dalam file wav tersebut
dan mengubahnya dalam format bahasa assembler 8051. Pada file wav
dengan format 8 bit mono, data audio bisa langsung dibaca dan dikirimkan ke
DAC 8 bit. Jika kecepatan pengiriman sama dengan frekuensi sampling filewav tersebut, suara yang dihasilkan akan sama dengan file wav asli, tentunya
bergantung juga pada kualitas DAC yang digunakan.
Mengambil data audio dari sebuah file wav bisa dilakukan dengan mengguna-
kan program sederhana seperti Wave File Extractor (Gambar 9.14). Cara
penggunaan program ini cukup sederhana, tinggal buka file wav yang akan
di-ekstrak dengan meng-klik tombol Open. Setelah memilih file dalam dialog
pembuka file, program akan secara langsung membaca byte-byte data audio
dalam file tersebut dan mengubahnya ke dalam format agar bisa digunakan
dalam bahasa assembler 8051 (tabel data). Setelah itu tinggal mengklik
tombol Copydan di-paste di file assembler. Data selalu diakhiri dengan 0.
471476
File Edrt El'fe(t VEw Tool Ophont Wndow Help
I i,l 4 &New OD.n S.u. @ Cd ht
Ir.J: I :i:,- I {\ l riffi.E * illi i#'Xi e;';"i'.H+ " ?t:}*?),!:_,: "L_" : +. l,l , I ..,,,, " l@ltrE ;tWW:;:{Wi
419428 Teknik Antarmuka dan Pemrograman l'likrokontroler AI89552
Forma, fi,e wav ,"*,:^r:::;l:lT HT::T::an ukuran ,idak ,ebih
dari 5 KB. fika file wav yang dibuka bukan format tersebut, program akan
memberikan pesan error, begitu juga jika ukuran file lebih dari 5 KB.
Pembatasan ukuran file dilakukan mengingat dalam contoh aplikasi ini hanya
digunakan untuk membaca file wav yang terdiri atas satu gelombang dari
sebuah not piano. Program Wave File Extractor dan source code-nya bisa
ditihat di CD pendukung buku ini.
iLoou_-----:,..:
tryr--l
dbdbdbdbdbdbdbdb
t
Oesiqned by Kdng Usmnn (u-Zmin@yahDo Eo,id)
Antarmuka dengan Sinyal Analog
Program MusicBox_DAC_R2R.asm dirancang agar mudah memainkankembali not-not tersebut. Untuk memainkan sebuah lagu, program tinggalmengombinasikan not-not mana yang harus dimainkan dan mengaturpanjang pendeknya nada atau not tersebut. Dalam bahasa assembler, data-data sebuah not diberi label sesuai dengan nama not tersebut. Not-not yangakan dimainkan terdiri atas 3 oktaf, sehingga label data adalah DoO - TiO(untukoktaf pertama), Dol -Ti1 (Oktaf ke-2), dan Do2*T12 (Oktaf ke-3).
,'Program tj-tle : "Membangkltkan Musik dengan DAC R-2R;Fl1e name : MusicBox_DAC R2R.asm,'Version : 1.0;Created dat.e : Jul 28, 200'7Prograrnmer : Usman*******************************************************
*******************************************************Mj-crocontroler Pin/PorL Assignment*******************************************************
Audio_Out equ P2
*******************************************************fnternal RAM Mapping
*********************************************FlagDelay_F1ag
equ 20Hequ F1ag.0
Tone_Durat.ion equCounter_l0 egu
30H31H
*******************************************************fnterrupt Vector Jump Table*******************************************************
org 0000HReset_Vector:
jmp Main_Prog
org 0008HTimer0 llili:
rl jrr:t ('()r urtcr' 10, Timer0 TSR lixi.t.III(,\/ ('r,111I|1't I0, ll?,it
Gombor 9.14 Wove file Exlrotlor
43r410 Teknik Antarmuka dan Pemrograman Hikrokontroler AI89552
djnz Tone-Duration, Tlmer0-fSR-Exltsetb Delay-F1ag
Timer0_I SR*Exi t :
reti
. * ** **** ** ** ** * * ** ** * ** ** * * ** * * * * * * ** **** * * * ** ****** ** **;Main Proqram,,
* **** * * * * ** ** ** **** * ** ** * * ** * * * * * * * ***** * * * ** ** * * *** * * *
Main_Prog:call Timer0_Initclr Delay_Flagmov Counter-10, #25
Main_Prog-Loop:mov DPTR, #Putri-Panggungcall Play_Songmov DPTR, #Kopi-Dangdutcall Play_Songsjmp Main_Prog-Loop
,. * * * ** ** ** * * * * ** * * ** * * * * * * * * * * * ** * * ** ** * * * * * * * ** * * * * ** * *
Put.ri-Panggung: (Data lengkap ada di CD pendukung)
. ** *** * * ** * * * * ** ** ** * ** * * * * ** * * ** * * * * * * * ** * * ** ** * *** * * **Kopi_Dangdut: (Data lengkap ada dl CD pendukung)
. ***** ** *** * * * ** ** ***** * * * * ** ** ** * * * * ** *** * * ** ** ** ** * * **Timer0_IniL:
mov TMOD, #82Hmov TL0, #10mov THO, #10setb ETosetb EAret
. *** ** * * ** **** * * *** * * ** * * ** *** *** * * ** * * * * * ** ** ** ** *Play_Song:
;Read tonec1r Amovc A, @A+DPTR
mov B, A
Antarmuka dengan Sinyal Analog
;Read tone durationclr Ainc DPTRmoVC A, @A+DPTRmov Tone_Durat.ion, A
inc DPTR;Duratj,on=0 --> ExitJz Play_Song_Exitmov A, B
,'tone=O --> haltjz Silent rone
call Send_Audio_Datasjmp play_Song
Silent_Tone:mov Audio_Out, #80hsetb TRojnb Delay_Flag, S
clr Delay_F1agc1r TROsjmp play_Song
Play_Songr_Exi L :ret
- ** **** * ** ** * * * * * ** * * ** ** * ******** * ** * * * ** * * ** * * ** *Send_Audio_Data:
push DpHpush DpL
Check_Tone10:cjne A, #10,Check_Tone20mov DPTR, #DoOjmp Send*Audio_Data_Loop1
Check_Tone2 0 :cjne A, #20,Check_Tone30mov DPTR, #ReOjmp Send_Audio_Data_Loopl
Clrr-'t'k 'l'r ,11r' 10 ;
Ieknik Antarmulta dan Pemrograman Hikrokontroler AT89552 Antarmuka dengan Sinyal Analog 431412
cjne A, #30.Check-Tone40mov DPTR, #M10jmp Send-Audio-Data-Loop1
Check*Tone40:cjne A, #40,Check-Tone50
Check_Tone51:cjne A, #51,Check_Tone61movjmp
DPTR, #So1Send_Audio_Data_Loop1
Check_Tone61:cjne A, #61,Check_Tone71mov DPTR, #La1sjmp Send_Audio_Data_Loop1
Check_Tone71:cjne A, #71,Check_Tone12mov DPTR, #Ti1sjmp Send_Audio_Data_Loop1
Check_Tone12:cjne A, #12,Check_Tone22mov DPTR, #Do2sjmp Send_Audio_Data_Loop1
Check_Tone22:cjne A, #22,Check_Tone32mov DPTR, #Re2sjmp Send_Audio_Data_Loop1
Check_Tone32:cjne A, #32,Check_Tone42mov DPTR, #Mi2sjmp Send_Audj-o_Data_Loop1
Check_Tone42:cjne A, #42.Check_Tone52mov DPTR, #Fa2jmp Send_Audio_Data_Loop1
Check_Tone52:cjne A, #52,Check_Tone62movjmp
DPTR, #So2Send_Audi o_Da t a_Loop 1
Check_Tone62:cjnc n, #62,Check Tone72
Check-Tone50:cine A, #50,Check-Tone60
movjmp
movjmp
movjmp
movjmp
movjmp
movjmp
movjmp
DPTR. *PAOSend-Audio-Data-l,ooP 1
DPTR, #SOO
Send-Audio-Data-LooP 1
DPTR, #LaOS end-Audi o-Da t a-LooP 1
DPTR, #TiOSend-Aud i o-Da t a-LooP 1
DPTR, #DO1
S end-Aud i o-Da t a-Lo oP 1
DPTR, #Re1Send-Audio-Data-LooP1
DPTR, #Mi1Send-Audi o-Data-LooP1
Check-Tone60:cjne A, #60,Check-Tone70
Check-Tone?0:cjne A, #70,Check*Tone11
Check-Tonell-:cjne A, #11,Check-Tone2L
Check-Tone21:cjne A, #21,Check-Tone31
Check-Tone3l-:cjne A, #31-,Check-Tone41
Check-Tone4L:cjne A, #41,Check-Tone51mov DPTR, #FA1jmp Send Audio Data T,ooP1 III( )\/ trt"l't(, ll),;t?
Ieknik Antarmul<a dan Pemrograman llikrokontroler AI89S52Antarmuka dengan Sinyal Analog
nopnopnopret
,. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;Wav DaLa Definition,.
* ** ** **** *** * ** ** * * * * * ** * * ** ** * *** ** * * ** * ** **** ** ** * * **DoO: (Data lengkap ada di CD pendukung)ReO:MiO:FaO:So0 :
LaO:Ti0:Do1:Re1:Mi1:Fa1:So1:La1:Ti1:Do2:Re2:Mi2:Fa2:.So2:LaZ z
Ti2l.Do3:
End
Program diawali dengan menginisialisasi Timer 0 agar bekerja pada mode 2
(auto-reload 8 bit) dengan nilai auto-reload 10 dan interupsinya diaktifkan(subrutin Timer0_Init). Timer 0 digunakan untuk mengatur panjangpendeknya not yang sedang dimainkan. Panjang pendeknya not disimpan diTone_Duration (30H). Setiap kali interupsi Timer 0 terjadi, nilai yang
tersimpan di Tone_Duration akan dikurangi. Dikombinasikan dengan
Counter_l0yang diberi nilai awal 25, data yang tersimpan dt Tone_Duration
akan menglrasilkan panjang nada yang sesuai. Jika nilai Tone_Duration telah
rncnjirrli 0. rrlrrrrrl ltit Dc,lay Flag akan di sct untuk rrrt'nandakan bahwa
435
jmp Send-Audio-Data-LooP1
Check-Tone72:cjne A. #72,Send-Audio-Data-Exitmov DPTR, #Ti2
Send-Audio-Data LooPl :
push DPH
push DPL
Send-Audi o-Dat a-LooP2 :
setb TRO
^1- 7\LAI
movc A, @a+DPTR
mov Audio-Out, A
call MY-DelaYcall MY-DelaYinc DPTR
)nz Send-Audio-Data-LooP2if Delay-F1ag, Send-Audio-Data-Exitpop DPL
PoP DPH
sjmP Send-Audio-Data-LooP1
Send-Audi o-Da t a-Ex i t :
clr Delay-Flagclr TRO
mov Audlo-Out, #B0h
PoP DPLpop DPH
PoP DPL
PoP DPH
rel:
My-De1aY:nopnopnopnopnopnopnopnop
431436 Ieknik Antarmuka dan Pemrograman I'likrokontroler AT89552
sebuah not telah selesai dimainkan. Program ini dicoba dengan frekuensi
osilator 11,0952 MHz. Untuk frekuensi yang lain nilai-nilai tersebut harus
diatur kembali.
program kemudian akan mulai memainkan lagu. DPTR diisi dengan alamat
awal dari lagu yang akan dimainkan. Sebuah not dinyatakan dengan 2 byte
data, byte pertama menyatakan not yang bersangkutan sedangkan byte kedua
menyatakan panjang not tersebut. Untuk memudahkan, not dan panjangnya
dinyatakan dengan bilangan desimal. oleh karena ada 3 oktaf, not dinyatakan
sebagai 10, 20, 30, ..., 70 untuk oktaf pertama, 11, 21, 31, "', 71 untuk oktaf
kedua, dan 12, 22,32,...,72 untuk oktafketiga. Angka 0 digunakan untuk
menyatakan berhenti. Sedangkan panjang not dinyatakan dengan bilangan 16
dan kelipatannya (16, 32,64,... tetapi tidak boleh melebihi 255 karena
kompiler 8051 akan menyatakan error). Lagu harus diakhiri dengan 0,0.
Lagu dimainkan di subrutin Play-Song. Pertama program membaca not yang
akan dimainkan dengan instruksi pengalamatan berindeks movc. Not yang
terbaca kemudian disimpan di regisrer B. Kemudian DPTR dinaikkan sekali
untuk menuniuk ke alamat panjang not. Masih menggunakan mode
pengalamatan berindeks, panjang not dibaca dan disimpan di Tone-Duration'
Sekali lagi, isi DPTR dinaikkan sekali untuk menunjuk ke not berikutnya.
Program kemudian mengecek panjang not yang terbaca' |ika paniang not
sama dengan 0, ini berarti akhir dari lagu. Program akan langsung keluar dari
subrutin Play-Song. Jika panjang not bukan 0, program akan mengecek not
yang terbaca. Not yang disimpan di B dikembalikan ke register A untuk
dicek. fika data not ini 0, maka program akan melomPat ke subrutin
Silent-Tone. Sesuai dengan namanya, di subrutin ini program tidak
memainkan not apa pun (berhenti) selama panjang not yang terbaca. Timer 0
diaktifkan dan program akan menunggu sampai bit Delay-Flag di-set, setelah
itu melompat kembali ke awal subrutin Play_song untuk membaca not
selanjutnya. Port Audio_out yang terhubung dengan DAC R-2R diberi nilaig0H. Pada saar berhenti atau tidak memainkan not, Port Audio-out tidak
diberi nilai 0 agar tidak menimbulkan pop noise pada saat pertama memain-
kan nor. Data 0 jika dikirimkan ke DAC akan menghasilkan te8angan
minimal. Bit Delay_Flag di-reset kembali agar nada berikutnya bisa dimain-
kan.
Antarmuka dengan Sinyal Analog
)ika not yang rerbaca bukan 0, program akan memanggil subrutinSend*Audio_Data. DPTR yang menyimpan alamat not yang sedangdimainkan disimpan di memori stack, karena di subrutin ini DprR digunakanpada pengalamatan berindeks dalam membaca data audio dari not yangsedang dimainkan. Register A yang menyimpan not dibaca dan dibanding-kan. Misalnya jika A menyimpan 3l (not Mi oktaf kedua), maka ketikadibandingakan dengan 31 dan sesuai, DPTR akan diisi dengan alamat awaldata audio untuk nor Mi oktaf kedua (yaitu MiI). Kemudian programmelompat ke subrutin Send_Audio_Data_Loop 1.
Di subrutin Send_Audio*Data_Loopl inilah data audio dibaca dandikirimkan ke DAC. DPTR yang menyimpan alamar awal data audio untuknot yang bersangkutan disimpan ke memori stack. Seperti telah diterangkan,data audio hanya cukup untuk menghasilkan satu gelombang. Untukmenghasilkan sinyal audio dengan durasi yang sesuai, dara audio harusdikirimkan berulang-ulang (mungkin sampai rarusan kali). oleh karena itu,alamat awal data audio harus disimpan untuk mengirimkan gelombang audioberikutnya. Program akan membaca dan mengirimkan data audio denganmode pengalamatan berindeks ke port Audio_Out. Subrutin My_Delaydipanggil 2 kali setiap 1 byte data untuk mengatur agar frekuensi audio yangdihasilkan tidak terlalu tinggi. selama satu gelombang penuh belum selesai,program akan mengulang proses ini dengan penunjuk alamat data (DpTR)dinaikkan 1 kali setiap selesai mengirimkan 1 byte data.
Jika data audio terbaca 0, ini berarti data untuk satu gelombang telah di-kirimkan. Program kemudian akan membacabit Delay_Flagyang menenru-kan panjang nada. Bit ini diatur oleh interupsi Timer 0 yang diaktifkan disubrutin ini. Selama bit Delay_Flag belum di-set, program kembali membacadan mengirimkan data not tersebut. Alamat not yang tadi disimpan dimemori stack diambil dan disimpan kembali di DPTR, dan programmelompat kembali ke Send-Audio-Data-Loopl.J1ka bit ini di-set, berarti notyang bersangkutan telah selesai dimainkan. Program kemudian melompat kesubrutin send-Audio-Data-Exit. Bit Delay-Flag di-reset kembali agar bisadigunakan untuk memainkan not selanjutnya. Timer 0 dimatikan, sedangkanport Audio_Outdiberi data 80H. Sebelum keluar dari subrutin Send_Audio_Data, alamat not berikut yang harus dimainkan dibaca kembali dan disirnpandi DPTII. Namun karena di subrutin Send_.Audio D;tta l.oopl .juga arla
irrstrtrksi pcttyitttpitttatr DPTR ke stack, pt'ngarnbilrrr clilllitrkirn 2 kirli.
Ieknik Antarmuka dan Pemrograman l'likrokontroler AT89S52
ProgramkemudianakanmelompatkembalikeawalsubrutinPlay-Songuntuk memainkan not berikutnya sampai lagu selesai dimainkan. Dalam
contoh program ini, 2 buah lagu dimainkan secara berulang-ulang'
Dari hasil pengamatan terhadap suara yang dihasilkan' not-not yang
dimainkan sudah sesuai dengan yang diharapkan' Tetapi suara tidak bisa
menyamai suara piano yang dihasilkan oleh komputer mengingat sinyal
piano yang dihasilkan oleh piano memiliki bentuk gelombang yang lebih
kompleks. Suara yang dihasilkan oleh mikrokontroler hanya berdasarkan 1
gelombang dari sebuah not. Selain itu, cukup sulit untuk menentukan
k"."pur"n. pengiriman byte-byte data audio agar sama dengan frekuensi
sampling seperti yang dihasilkan oleh komputer' Namun sinyal ini masih
lautr teUlt, "analog" daripada sinyal yang dihasilkan oleh program Timer yang
dibahas di Bab 7 (program Timer 0 Mode 2'asm)'
Pengembangan lebih lanjut dari program ini adalah sebuah piano dengan
-enggrr.rrkun keypad matriks 4x4. Dengan 16 keypad cukup untuk
-"rrf.irr.r.t piano 2 oktaf. Mikrokontroler diprogram untuk membaca keypad
dan memainkan not sesuai dengan keypad yang ditekan' Tentu saja harus
ditentukan dulu not apa yang akan dimainkan dan keypad mana yang akan
memainkan nor tersebut. Not harus tetap dimainkan selama keypad ditekan'
Keluaran DAC R-2R mungkin belum cukup untuk menggerakkan sebuah
speaker. oleh karena itu, diperlukan sebuah penSuat (amplifier). Gambar
9.15 -"-p"rlihatkan sebuah amplifier menggunakan IC TDA2002 atau
TDA2003, yang bisa menghasilkan daya sebesar 10 W' VR100 digunakan
sebagai pengatur volume, untuk mengatur besar kecilnya level sinyal audio
yurg -urrrt ke amplifier. IC ini memerlukan tegangan catu daya sebesar 12
V
Antarmuka dengan Sinyal Analog
Rl04Oan BAlll i-,\^
5t(6
Gombor 9.15 Amplifier Mono
9.2.3 MIKROKONTROTER YANG BISA BERBICARA
Contoh program yang dibahas di subbab sebelumnya masih menghasilkansrtara mono roae walaupun data audio diambil dari file wav, tetapi programhanya mengambil data untuk satu gelombang. Pertanyaanya, jika file wavyang berisi suara rlzre roae, musik misalnya, semua datanya diambil dandikirimkan ke DAC dengan cara yang sama, apakah suara yang dihasilkanakan sama dengan suara asli jika file wav tersebut dimainkan dengan
komputer? lawabannya bisal Hal yang terpenting adalah mikrokontrolerharus diprogram agar bisa mengirimkan data ke DAC sama dengan frekuensisampling file wav tersebut. DAC lebih baik menggunakan IC agar kualitassuara bisa lebih baik. Masalahnya file wav memiliki ukuran yang sangat
besar. Sebuah file wav yang menyimpan 1 detik audio dengan format mono 8
bit pada frekuensi sampling 8 kHz akan memiliki ukuran 8 KB. Sudah cukupuntuk menghabiskan memori flash internal AT89S52.
Memori tambahan bisa menjadi solusi. Data audio bisa disimpan di EEPROM
eksternal yang diakses sebagai memori data. EEPROM sebesar 64 KB bisa
menyimpan suara sampai 8 detik. |ika diinginkan mengakses memori lebihdari 64 KB, diperlukan teknik multipleks tetapi ini membutuhkan portmikrokontroler yang lebih banyak. Cara lain adalah dengan menggunakar.r ICklrusus, ntisrlttyrr ISD2560 dari Winbond yang bisa mt,rekarn dan mcmainkan
439418
Ieknik Antarmul<a dan Pemrograman Mikrokontroler AT89S52
kembali suara atau musik selarna 60 detik. Walaupun harga IC khusus tnr
relatif mahal, tampaknya cara inilah yang paling banyak digunakan'
Alternatif lain untuk membuat mikrokontroler agar bisa "berbicara" atau
memainkan musik, seperri yang akan dibahas di buku ini, adalah dengan
menggunakan teknik yang dikembangkan oleh Roman Black
1***.ro-rnblack.com/pic sound.htm) pada Desember 2001. Dalam artikel
yang berjud',il."Record + Play Fast I Bit Sound on a PIC", Roman Black
*"rre.r.rgkun bagaimana memainkan suara dengan mikrokontroler PIC
dengan hanya menggunakan 1 atau 2 pin PIC! Pin PIC ini dihubungkan
dengan rangkaian RC dengan nilai resistor dan kapasitor yang telah
ditentukan. Data audio yang dikirimkan secara serial (Dr7 steam) dengan bit
rate yang sesuai akan mengakibatkan proses pengisian dan pembuangan
muaran listrik di kapasitor (charge and discharge). Proses inilah yang akan
menghasilkan regangan keluaran yang mendekati sinyal audio asalnya. Teori
ini kemudian dinamakannya dengan teknik atau algoritma Binary Time
constant (BTc). Kata Time constanr digunakan karena rangkaian RC
mempunyai tetapan waktu atau Time constant dalam proses pengisian dan
pembuangan muatannya.
9.2.3.1 Algoritmo BTc
Secara sederhana, algoritma BTc bekerja berdasarkan karakteristik rangkaian
RC. Perhatikan rangkaian RC yang ditunjukkan oleh Gambar 9.16 dengan
tegangan masukan vin dan tegangan keluaran vout. Misalnya tegangan vinbisa berubah 0 atau 5 volt, atau dalam istilah digital bit "0" dan bit "1". Pada
saar vin 5 volt (bit "1"), akan terjadi proses pengisian kapasitor. Tegangan
keluaran vout akan naik secara eksponensial menuju ke tegangan 5 volt
(vin). Jika vin tetap pada 5 volt, kapasitor akan terus diisi dan tegangan vout
pun akan rerus naik. Namun jika vin kemudian berubah menjadi 0 volt,
kapasitor akan mulai membuang muatannya. Tegangan vout akan turun
mendekati 0 volt. Proses kebalikan akan terjadi; jika tegangan vin tetap pada
0 volt maka tegangan vour akan rerus turun mendekati 0 volt. Namun jika
kemudian vin berubah meniadi 5 volt, kapasitor akan diisi lagi dan vout
akan naik lagi.
Antarmuka dengan Sinyal Analog
Vout
|ika perubahan Vin dari 0 Volt menjadi 5 Volt atau sebaliknya, diatursedemikian rupa dengan kecepatan (bit rate) tertentu maka tegangan Voutjuga bisa diatur, misalnya untuk menghasilkan gelombang suara atau audio.Nilai resistor dan kapasitor, yang akan menentukan tetapan waktu, juga harusditentukan dengan benar. Jika nilai R atau C terlalu besar, yang akanmenghasilkan tetapan waktu yang besar, maka perubahan tegangan di Voutakan menjadi lambat. Hal ini tentu akan membuat Vout tidak bisa mengikutiperubahan yang sangat cepat pada Vin. Sebaliknya, jika nilai R dan C terlalukecil, yang menghasilkan tetapan waktu yang terlalu kecil, perubahan yangcepat akan ter;'adi di Vout. Hal ini akan bermasalah jika perubahan Vin tidakterlalu cepat.
\-rf*t--1\---
(bJ Yor:t
Gsmbor 9.1 7 Hubungon Vin don Voul
Pertanyaannya, bagaimana menghasilkan aliran bit (bit stream) yang apabiladikirimkan ke rangkaian RC akan menghasilkan regangan audio yang sesuai.
Tentu saja aliran bit harus diambil dari sampel (byte data) sinyal audio, baikitu diambil langsung dari keluaran sebuah ADC atau diambil dari sebuah filepenyimpan data audio (file wav). Dalam BTc, 1 bit akan mewakili I byte data,sehingga ukuran file wav akan dipadatkan (compress) dengan rasio 8 : 1.
Sekarang tinggal bagaimana mengubah 1 byte data (yang memiliki 256 nilaikemungkinan, jika file wav memiliki format 8 bit) menjadi 1 bit data (yanghanya memiliki 2 kemungkinan yaitu 0 atau 1).
Secara serlcrhuna algoritma BTc bisa dijelaskan sebagai berikut" R.angkaian
llC akrtr tttt'tttpttttV;ti t('Bapgan kcluaran rnrksimum (Vrr.,r) 5 V.lt ciarr
t('Btttll.llltt tttttrttrtrtnr (V^,r,,,) () Volt. I)1l1tn ul96r'itrr-r1 Il'J't t(.,lillAup lrwlrl st,lirlrr
44t
-rI=
Gombor 9.16 Rongkoion R(
ffinoorrroororruorrE
(a) liin
443447 Teknik Antarmuka dan Pemrograman I'likrokontroler AI89552
dimulai dengan 2.5 Volt (setengah Vu^r)' Byte pertama file wav dibaca dan
dibandingkan dengan 2.5 Volt ini. |ika level file wav lebih tinggi dari
tegangan 2.5 V, ini berarti harus ada kenaikan tegangan di tegangan output'
n.rrgu., kata lain kapasitor harus diisi (charge)' Oleh karena itu' byte pertama
.kar, -"-prrnyai nilai bit "1". Sebaliknya jika level file wav lebih rendah dari
2.5 Volt, ini berarti harus ada penumnan tegangan di tegangan keluaran atau
kapasitor harus membuang muatannya (discharge)' Byte kedua kemudian
dibacudandibandingkandenganbytepertama.}ikalevelbytekedualebihtinggi daripada byte pertama, byte kedua akan diubah menjadi bit 1 dan jika
k"bih ,"rrduh, byte kedua akan diubah menjadi bit 0' Begitu setemsnya
sampai seluruh byte yang ada di file wav diubah menjadi bit-bit yang sesuai'
Tentu saja hal itu tidak bisa dilakukan oleh mikrokontroler. oleh karenanya
diperlukan sebuah software komputer untuk melakukan hal ini. Roman Black
juga m"ny"diakan software untuk itu, yang bisa di-download di situsnya'
SJt*u." yang dinamakannya BTc Sound Encoder l ' l bisa mengubah file wav
menjadi format data BTc untuk mikrokontroler PIC (tabel data) atau diubah
meniadi file biner. Software ini juga bisa menghitung nilai resisror dan
kapasitor yang diperlukan berdasarkan frekuensi sampling file wav yang akan
diubah.
Penggunaan software ini cukup mudah' File wav yang akan diubah dibuka
rn"tutlri menu File/open wav file .wav. BTc versi 1.1 membatasi ukuran file
wavsampai530000sampel.MengubahfilewavmenjadifiletabeldataBTcunruk mikrokontroler PIC, dilakukan melalui menu FilelExport PIC
assembler file .ASM. Sebelufir melakukan hal ini, perlu dilakukan
pengaturan-pengaturan, melalui menu-menu yang telah disediakan'
Menu Algor. Type digtnakan untuk menentukan tipe algortima yang
digunakan. Ada 2 tipe yang dapat dipilih: I bit atau 1'5 Drr' Pilihan ini
."rr".rt.rku.t apakah pada saat memainkan BTc audio (playback) digunakan 1
bit atau 2 bit. Tipe 1 bit artinya BTc audio akan dimainkan dengan 1 bit
(rangkaian Gambar 9.16). Teknik ini dinamakan RC-1' Sedangkan 1'5 bit
artinyaBTCaudiodimainkanmelalui2bitdandinamakanRC.2(rangkaianGambar 9.19). Walaupun menggunakan 2 bit' namun ukuran data yang'
dihasilkanpadasaatencoding,akansamadengantekniklbit.Padasaatplayback,Bitke-2akansamadenganBitsebeiumr-rya.Jikar-radalalrbityang,"durrg dimainkan, maka Bit 1 aclalah n clan []it 2 atlrrlrrh rr l' Selrt'ltlrrr
Antarmuka dengan Sinyal Analog
memainkan data BTc, Bit 1 dan Bit 2 diberi nilai awal masing-masing 1
Bit I dan 0 untuk Bit 2.
untuk
Gombor 9.1 8 BIc Sound [ncoder l.l
Menu Fineness digunakan unruk menenrukan tetapan waktu rangkaian RC,
dengan kata lain faktor Fineness akan menentukan nilai resistor dankapasitor untuk rangkaian RC. Ada B pilihan, yaitu: BTc4, BTc5, BTc6, BTc8,BTc11, BTc16, BTc21, dan BTc 32. BTcS artinya tegangan keluaran rang,kaianRC, tegangan pengisian atau pengosongan kapasitor, akan naik atau turun 1/8dari tegangan maksimum (ketika pengisian) dikurangi regangan sekarang atautegangan sekarang dikurangi tegangan minimum (ketika pengosongan). NilaiFineness yane rendah, misalnya BTc4, akan membuat rangkaian RC memilikitanggapan transien yang lebih cepar karena harus berubah % setiap langkah,memungkinkan untuk memainkan sinyal audio berfrekuensi tinggi, tetaprlebih banyrk sinyal noise-nya. Sedangkan nilai yang ringgi, misalnya BTc16,rncrnililii tiurll,lirl)iur yang lebih lambat. Nilai ini sesuai untuk memainkan
Teknik Antarmul<a dan Pemrograman l'tikrokontroler ATB9S52
frekuensi lebih rendah karena
sinyal noise yang lebih kecil.bandwidrh-nya lebih sempit namun dengan
Eitl
Eit2
Gombqr 9.19 Dekoder Rt-Z
Melihat nilai resistor dan kapasitor dapat dilakukan melalui menu
Special,/output Filter Model (Gambar 9.20). Nilai kapasitor tetap 0.22 prF
,"d"rrgk.r, nilai resistor bergantung pada nilai Fineness yang digunakan'
Misalnya Gambar 9.20, digunakan BTc11 dengan tipe algoritma 1.5 bit, maka
nilai resistor yang digunakan adalah 2 x 5161 f) (9012 f))'
Gombor 9.20 l(olok Diolog 0ulpul Iiher Model
Selain itu, terdapat juga tombol untuk memainkan file wav asli dan file wav
yang telah diubah menjadi BTc audio melalui komputer. Keterangan lebih
rinci mengenai penggunaan program ini bisa dilihat di file bantuan (help)
yang ada di software tersebut.
Antarmuka dengan Sinyal Analog
9.2.3.2 Memoinkqn BTc AudioUntuk memainkan BTc audio, mikrokontroler tinggal mengirimkan bit-bitdata yang berasal dari file wav melalui software BTc Sound Encoder. Tidakdiperlukan rumus atau persamaan matematis untuk memainkan BTc audioini, karena semuanya sudah dilakukan oleh program komputer. Mikro-kontroler hanya perlu diprogram untuk mengirimkan bit-bit data dengan bitrate yang sesuai.
Namun karena hasil dari BTc Sound Encoder adalah tabel data dalam formatmikrokontroler PIC, tabel data yang dihasilkan tersebut perlu diubah keformat yang sesuai dengan rnikrokontroler AT89S52. Sebuah sofrwarediperlukan untuk melakukan hal ini mengingat ukuran tabel data yangdihasilkan cukup besar, yang akan memakan waktu lama jika dilakukansecara manual. Software yang dimaksud adalah PIC2C5/ BTc Data TableConverrer 1.O (Gambar 9.2 1 ).
Gombor 9.21 Penguboh lobel Doto Formot Pl( ke AT89S52
Tabel data format PIC hasil dari BTc Sound Encoder yang disimpan sebagai
file assembler diubah dengan cara membuka file tersebur dengan tombolOpen. Secara otomatis pengubah data akan membaca file tersebut danmengubahnya menjadi format tabel data yang sesuai unruk AT89S52. Tabeldata hasil pengubahan bisa langsung digunakan ke dalam bahasa assembler
AT89S52 dengan cara menekan tombol Copy dar' di-paste di bahasa
assembler tersebut. Program PIC2C51 BTc Data Table Converter bisadiperolch di CD pendukung buku ini.
445
I
Frequency= 8000H2 BTc= I1
E = 5]61 ohms
-rII:
l: r:r :llr' --. -- il
dbdbdDdbdbdbdbrrbdbdbrrb
096H , 0A6H , 0ACH , 06fiH , 09AH , 0g6H , 669H -056H , 055H ,099H , 056H , 05AH , 0A5H , 055H05sH , 055H , 055H , 05sH, 055H , 055H , 05sH055H , 0s5H , 055H , 055H , 056H , 055H , 055H055H , 059H , 05sH , 0s5H , 055H , 09sH , 055H055H , 055H , 659H, 055H , 04DH , 0931t , 055H0ssH , 04cH , 6GDH , 059H, 055H ,055H ,05sH069H , 0s5H , 055H , 055H , 05sH , 0s5H , 055H055H , 055H , 055H , 055H , 055H , 055H , 059H0c5H,655H,0J5H, ossr, $rH, osstt, ossn05sH, 0ssH,055H,055H, 0s5H,0s5H,055H e
)
441446 Teknik Antarmuka dan Pemrograman l'likrokontroler AT89S52
;Program Title : "Memainkan BTc Audio",'File name : BTc-Audio. asm
;Version : 1.0;Created date : August 11, 2001;Programmer i Usman- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;Microcontroler Pin/Port Assignment*******************************************************
BTc-Out equ P2
*******************************************************Internal RAM*******************************************************
BTc-Buffer equ 20HBTc-Bit0 equ BTc-Buffer' 0
BTc-Bit1 equ BTc-Buffer.1
Control*F1ag equ 2LHPlayBack-Flag equ Control-trlag.0Last-BiL equ Control-Flag.1
Bit-Counter equ 30H
*******************************************************
Antarmuka dengan Sinyal Analog
mov R2, #01Hmov R3, #01Hmov Bit_Counter, #Bsetb BTc_Out.0c1r BTc_Out.1setb Last Bltc1r PlayBack_F1aqmov DPTR, #BTc-WaveDaTa
Read_BTc_DaLa*Loop1 :
clr Amovc A, @A+DPTRpush ACC
or1 A, R1or1 A, R2or1 A, R3jz Read_BTc_Datapop ACC
mov 3, 2
mov 2, 1
mov R1, Asetb TROjnb PlayBack-Flag, $
clr PlayBack_F1agc1r TRO
inc DPTRsjmp Read_BTc_Data_Loop1
. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Timero_Inii:ors 0000H TMoD, +82H
Reser veccor: TLo, *085H]jtrp Main Pros THo, +085H
selb EA
org 0008H setb ETo
Tinero-ISR: retcall P lay BTc }ud:o
Play_BTc_Audio:C' Last-BiL
rila:n Prog: tsr'c-BrL I , ucall Timero Init rlc a
Reaat BTc_Dara I ryr. Bito, C
R1, +01H l"rr:l 'til ' C
Teknik Antarmulo dan Pemrograman l4ikrokontroler AI89552
mov BTc-Out, BTc-djnz Bit-Counter,setb PlayBack-F1agmov Bit-Counter,
Play_BTc*Audio-Exit :
reti
BufferPlay*BTc-Audio-Exit
#8
. ********************************i
BTc_WaveData:(Bisa dilihat di CD pendukung)
End
Program BTc_Audio.asn di atas adalah program untuk memainkan BTc audio
dengan dekoder RC-2 yang terhubung ke P2.0 dan P2.l (BTc-Out). Program
ini akan memainkan file wav yang menyimpan suara yang mengatakan
" welcome to programming and interfacing microcontroller AT89S52'. Ftle
wav sepanjang 5.5 detik dan memiliki format 8 bit mono dengan frekuensi
sampling 8 kHz diubah menjadi BTc audio dengan nilai Fineness BTcl1. Data
audio hasil konversi dari file wav disimpan di tabel data, yang karena
ukurannya yang besar tidak ditunjukkan di sini, BTc-WavData. BTc Encoder
akan menentukan nilai resistor 5161 (^) (2R = 10322 ,f) atau kira-kira 10 KO).
Program terdiri atas 2 bagian utama, pembacaan tabel data dan pengiriman
bit-bit data ke dekoder RC-2. Pembacaan tabel data dilakukan di program
utama sedangkan pengiriman bit-bit data dilakukan melalui interupsi Timer
0. Timer 0 bekerja pada mode 2 (auto-reload 8 bit) dengan nilai auto-reload
menentukan bit rate (kecepatan bit) pada saat memainkan data BTc audio. Bit
rate harus ditentukan dengan menyesuaikan format file wav dan bagaimana
file wav tersebut di-enkode oleh enkoder BTc. File wav dengan frekuensi
sampling yang lebih tinggi atau di-enkode dengan rrilai Fineness yang lebih
tinggi, memerlukan bit rate yang lebih tinggi. Artinya la;'u overflow/interupsi
Timer 0 harus tinggi, dengan kata lain nilai auto-reload (TH0) harus tinggi
pula.
Pembacaan tabel data dilakukan di subrutin Read-BTc-Dara. Subrutin
diawali dengan menyimpan 01H ke register R1, R2, dan R3. Ketiga register
ini digunakan untuk mengetahui akhir tabel data. lika ketiga register ini di-
oR-kan dengan A dan menghasilkan 0, maka itu adalah byte terakhir dari
tabel data (dalam hal ini tabel data diakhiri deng,an 4 bytc rllta bcrrrilai 0).
Antarmuka dengan Sinyal Analog
Internal RAM Bit_Counter diisi dengan 8 yang menunjukkan banyaknya bitdata. Port BTc_Out (P2) ya.rg terhubung dengan dekoder BTc di-set di bit ke-
0 dan di-clr di bit ke-l. Dua alamat bit, masing-masing Last_Bit dan
PlayBack_Flag, digunakan untuk menyimpan bit terakhir yang dikirimkandan status pengiriman data BTc. iika bit PlayBack di-set artinya semua bitdari byte data yang dibaca telah selesai dikirimkan ke dekoder BTc.
DPTR kemudian diisi dengan alamat awal tabel data BTc-WaveData dan bytetabel data dibaca dan disimpan di akumulator. Program kemudian mengecek
apakah ini byte terakhir atau bukan. Byte data disimpan dulu di memoristack, lalu di-OR-kan dengan register R1, R2, dan R3. |ika operasi inimenghasilkan 0 di A, program kemudian akan melompat kembali ke Read-
BTc_Data untuk memainkan BTc audio dari awal. iika bukan 0, dilanjutkanke baris instruksi selanjutnya. Byte data diambil kembali dari memori. Isiregister R2 dipindahkan ke R3, R1 ke R2 dan byte data yang baru dibaca
disimpan ke R1. Dengan demikian R1, R2, dan R3 akan menyimpan 3 byte
data terakhir. Timer 0 dijalankan dengan mengeset bit TR0. Program
kemudian menunggu sampai bit PlayBack-Flag di-set sebagai tanda bahwa
semua bit telah dikirim ke dekoder RC-2. Program akan kembali me-reset bitPlayBack*Flag dan mematikan Timer 0. Isi DPTR dinaikkan dan program
kembali membaca byte data BTc audio (program melompat ke Read-
BTc*Data_Loop 1) .
Pengiriman data ke dekoder RC-2 dilakukan setiap kali terjadi interupsiTimer 0. Setelah program membaca 1 byte data, Timer 0 akan diaktifkan.Ketika mengalami overflow, interupsi Timer 0 akan terjadi dan program
melompat ke alamat ISR Timer 0 (TimerO-lSfl. Program kemudianmemanggil subrutin Play*BTc-Audio. Bit Last-Bit yang menyimpan bitterakhir dipindahkan ke C. Bit C kemudian dipindahkan kebir BTc_Bitl,bitke-1 dari BTc-Buffer. Byte data BTc yang disimpan di A digeser ke kiri dan
disimpan ke bit C karena dalam BTc bit MSB harus dikirim terlebih dahulu.
Bit C kemudian ditransfer lagi ke BTc-Bir0, bit ke-0 dari BTc-Buffer (bit ke-
n), dan kebit Last-Bit akan menjadi bit ke-(n-1) pada pengiriman berikutnya.BTc-Buffer yang sekarang menyimpan bit ke-n dan bit ke-(n-1), kemudiandikirimkan ke dekoder RC-2 (BTc-Our) arrinya bit ke-n dan bit ke-(n-l)dikirimkan secara simultan. Dalam BTc dengan dekoder RC-2, tidakdisararrkln urrtuk mengirimkan kedua bit dalam waktu yang berbeda
449448
Teknik Antarmul<a dan Pemrograman l,likrokontroler AT89552
(melalui instruksi bit) karena bisa menimbulkan noise yang lebih besar pada
sinyal audio. /
Bit-Counter dikurangi, jika sudah 0 ini berarti 1 byte data telah selesai
dikirimkan ke dekoder RC-2. Bit PlayBack_Flag di-set dan Bit_Counterdiisilagi dengan 8 agar subrutin di program utama membaca byte data
selanjutnya. lika Bit_Couarer belum 0, maka pada interupsi Timer 0
selanjutnya, program akan mengirim bit selanjutnya dari byte data yang
sedang dibaca.
Hasilnya? Kalimat " lVelcome to programming and interfacing micro-controller AT89S52' bisa didengar dan dikenali walaupun noise masih sangat
tinggi. Untuk mengurangi noise ini, bisa dilakukan dengan menambah filterpelewat rendah (low pass lilter). LPF bisa menggunakan sebuah filter aktif(dengan op-amp) atau mengguuakan rangkaian RC (Gambar 9.22). Dengan
penambahan LPF, noise bisa ditekan dan kualitas suara BTc menjadi lebihbaik.
Bit0
Audio 0ut
Gqmbor 9.22 Dekoder RC-2 dengon Filter
Cara lain untuk meningkatkan kualitas BTc audio adalah dengan memper*besar frekuensi sampling sinyal asal (file wav) atau mengubah nilai Fineness
menjadi BTc16 atau BTc32. Tetapi ukuran tabel data akan menjadi besar dan
mungkin diperlukan sebuah memori eksternal untuk menyimpan data BTc
audio. Selain itu, frekuensi sampling atau nilai BTc yang lebih tinggimemerlukan kecepatan data yang tinggi pula. Oleh karena keterbatasanfrekuensi osilator yang hanya sampai 24 MHz, AT89S52 dipastikan tidak akan
bisa memainkan BTc audio dengan frekuensi sampling yang tinggi. File
bantuan (help) yang menyertai program enkoder menjelaskan teknik-teknikyang bisa dilakukan untuk meningkatkan kualitas BTc audio.
Antarmuka dengan Sinyal Analog
secara umum, jika hanya untuk mengeluarkan rrorce, teknik BTc audioadalah solusi yang ekonomis. untuk musik, BTc audio masih kurang sesuaimengingat musik adaiah sinyai kompleks dengan komponen dan lebarfrekuensi yang lebih banyak. Dibutuhkan filter yang dirancang dengan baikuntuk memainkan musik melalui BTc audio. solusi yang terbaik adalahmenggunakan IC penyimpan audio.
45r
Eitl
452 Teknik Antarmul<a dan Pemrograman l'likrokontroler AT89552
BAB IOR -485r JARINGANMIKROKONTROLER
Mikrokontroler AT89S52 dilengkapi dengan sebuah port serial, yang dengan
fasilitas komunikasi multiprosesornya memungkinkan beberapa AT89S52
saling berkomunikasi dan membentuk jaringan. Namun diperlukan sebuah
koneksi khusus untuk membentuk jaringan mikrokontroler. Protokol
komunikasi jaringan juga harus dikembangkan agar komunikasi berjalan
dengan semestinya.
Salah satu tipe komunikasi yang paling sering digunakan untuk membentukjaringan mikrokontroler adalah standar RS-485. Standar yang mempunyainama resmi TIA/EIA-485-A untuk menandakan badan yang mengembang-
kannya, yaitt Electronics Industry Association (EIA) dan Telecommuni-
cations Industry Association (TIA), adalah tipe koneksi yang murah dan
sederhana. Dokumentasi yang dikeluarkan oleh EIA/TIA mengenai RS-485
ini tidak secara spesifik menyebutkan mengenai protokol komunikasi yang
bisa digunakan. Namun, dalam banyak aplikasi, RS-485 menggunakan proto-
kol kornunikasi yang terkenal yaitu komunikasi serial UART. Dengan
demikian setiap mikrokontroler yang dilengkapi dengan port serial yang
mendukung UART bisa dengan mudah dihubungkan dengan jaringan RS-
485.
I O.I TINJAUAN STANDAR RS.485
to.r.r SPEslFlKASl DASAR RS-485
Berbeda dengan standar RS-232 yang menggunakan ground bersama
(common ground), RS-485 menggunakan 2 buah kabel untuk menyalurkan
sinyal data dan kebalikannya dengan tidak menggunakan ground bersama.
Sistem ini clinamakan dengan sinyal diferensial atau balanced. Sementara RS-
232 atatr sistcrrr grourrcl bersama dinamakan sinyal unbalanced atau single'
i
Ieknik Antarmuka dan Pemrograman Mikrokontroler AT89552 R1485: Jaringan Mikrokontroler
lukan 2 buah kabel (untuk sinyal A dan B) di mana sinyal A dan B untukdriver dan penerima diparalel (biasanya di internal IC RS-485 seperti terlihatpada Gambar 10.1). Sedangkan sistem dupleks penuh memerlukan 4 kabel,
masing-masing 2 untuk sinyal A dan B, driver dan penerima yang terpisah.
I.ICC
E
.t-t
GI'JT]
(aJSimbol (Lr) Iderrrasal DII' B Firr
Gombor l0.l l( R5-485 (SN75l 76)
I O.I .2 TOPOLOGI JARINGAN RS.485
IJENGTEIhI FEI{ERI1IA
Gqmbor 10.2 Sistem Bolonre RS-485
Jaringan RS-485 yang paling sederhana terdiri atas sebuah pengirim dan
penerima RS-485 yang saling berhubungan (Gambar 10.2). Tipe hubungan
seperti ini adalah sistem komunikasi searah Qimplex). Pengirim dan
penerima bisa dihubungkan dengan jenis kabel apa saja, namun jika jarak
antara pengirim dan penerima sangat jauh, disarankan untuk menggunakanjenis kabel yang dinamakan twisted-pair. Pada transmisi data digitalberkecepatan tinggi, radiasi elektromagnetik (EMI = electromagnetic
interference), baik yang dihasilkan oleh saluran transmisi atau yang diterima
dari sumber lain, akan mengganggu sistem jika tidak ditangani dengan benar.
Penggunaan kabel jenis twisted pair akan mengurangi pengaruh EMI.
|aringan komunikasi 2 arah minimal dibangun oleh 2 buah transceiver RS-
485 yang bisa dihubungkan dengan sistem 2 kabel (2 arah bergantian) atau
sistern 4 kalrt'l (2 arah penulr). Pada sistem hubungan seperti ini kedua
455454
ended.Dalam Rs-485 sinyal data yang tidak dibalik dinamakan dengan sinyal
A, sementara sinyal kebalikannya dinamakan dengan sinyal B' Sebuah IC
pengubahlevelRS-4S5diperlukanuntukmengubahsinyallevelTTLmenjadiiinlA Unrced RS-485 (disebut dengan pengirim ata:u rransmitter ata]u
dri,er)d.anjugauntukmengubahsinyalRS-4S5menjadisinyalTTL(disebutpenerimaatalreceiver).Pengirimdanpenerimabiasanyadibuatdalamsatu.nip fC, misalnya SN75176 dari Texas Instruments atau MAX485 dari Maxim'
IC ini dinamakan dengan TransceiverRS-485'
penerima RS-485 bekerja dengan membaca perbedaan teganSan antara sinyal
A dan sinyal B. |ika sinyal A lebih besar minimal 200 mV dari sinyal B'
keluaran penerima akan berlogika tinggi' Sebaliknya' jika sinyal B lebih besar
minimal 200 mV dari sinyal A, keluaran penerima akan berlogika rendah'
Perbedaan tegangan di bawah 200 mV akan mengakibatkan keluaran yang
tidak terdefinisi di keluaran penerima' Sebuah driver RS-485 harus
mempunyai perbedaan minimal 1'5 V antara sinyal A dan B'
Salah satu keuntungan dari sistem diferensial adalah ketahanannya terhadap
gangguan noise. Walaupun sinyal noise akan selalu hadir di sinyal A dan B'
namun hampir semua noise yang menumPang tersebut memunyai level yang
sama (disebut common mode noise), sehingga nilai perbedaan tegangan
antaraAdanBakantetapsamawalaupunditumpangiolehsinyalnoise.Berbeda dengan sinyal unbalancedyang akan membaca perbedaan tegangan
antara sinyal data dengan sinyal ground di mana jika perbedaannya minimal
3 V akan dibaca sebalai logika tinggi, dan perbedaan di bawah 1 V akan
dibaca sebagai logika rendah. Sinyal noise yang menumpangi sinyal data serta
noise yang ada di sinyal ground akan menyebabkan salah pembacaan level
digital.
Dengan ketahanannya terhadap noise, panjang kabel RS-485 bisa lebih jauh
daripadapanjangsaluranpadaRS_232.SpesifikasiyangdikeluarkanolehEIAiTIA menetapkan p"r,ju.,g maksimum kabel RS-485 adalah 4000 kaki
(kira-kira 1219 meter). ieda.rgkan kecepatan data maksimum adalah 10 Mbps
itvtega bit per second), walaupun pada kecepatan maksimum panjang kabel
hurlu ,"-pai 50 kaki (15 meter)' Pada jarak maksimum' kecepatan data
hanya 90 kbps (kilo bPs)'
Standar RS-485 mendukung komunikasi dua arah bergantian (half duplc'u)
dan dua arah penuh (full duplex)' Sistem dupleks sctcngah hanya mctncr
RCEEDE
DI
456 Teknik Antarmuka dan Pemrograman l'likrokontroler AT89552
transceiver tersebut bisa berkomunikasi 2 arah, walaupun pada sistem halfduplex arah komunikasi harus bergantian.
Gqmbor 10.3 Sistem Holf Duplex [5-485
"li \--./^r-r-,.-ti1-'a-y'-1-, t\
'tTt
=F_t_[u::,iJJJl__)yfliif i-- \f\/'\ r\ /-'i ='r7- 7ff---/t[t--<+_JJ.JJ._,1 /*_/*J._,/*J <"J-TFI,IISCE /tETEA IISC tIUE E
Gombor 10.4 Sislem tull Duplex RS'485
faringan RS-485 yang "sebenarnya" dibentuk oleh beberapa transceiver RS-
485 yang saling berhubungan. fika menggunakan transceiver dengan bagian
penerima mempunyai impedansi masukan 12 kO, 32 buah transceiver bisa
dihubungkan ke jaringan. Namun, jika menggunakan IC dengan impedansi
masukan yang lebih besar, jaringan bisa dibangun sampai 256 buah
rransceiver. Sistem 2 kabel diperlihatkan oleh Gambar 10.5. Dalam sistem
jaringan seperti ini, pada saat iaringan dalam keadaan idle hanya 1 pengirim
dari sebuah transceiver yang terhubung ke jaringan, sedangkan transceiver
yang lain terhubung ke jaringan melalui penerimanya. Pin pengendali
pengirim dan penerima yang akan mengatur hal ini. Transceiver yang ter-
hubung sebagai pengirim dinamakan Master, sedangkan transceiver-
transceiver lain dinamakan slave. Transceiver yang bertindak sebagai master
akan mengatur komunikasi jaringan. Setiap slave diharuskan memilikiidentitas atau alamat yang berbeda satu sama lain. Pada saat komunikasi,
master akan mengirimkan alamat slave yang dituju. Hanya slave yang
alamatnya sesuailah yang akan merespons permintaan dari master. Master
kemudian akan mengaktifkan penerima RS-485-nya (dan tentu saia peng,irim
dimatikan), slave yang dimaksud kemudian merespons dengan meng,aktifkan
pengirim (penerima rnati). Tcntu sajl slavt'ltarlts tnt'trttnggrr sarnpiti trt'tlt'riltt,t
RS-485: Jaringan l,likrokontroler451
RS-485 master telah diaktifkan, jika tjdak, data akan hilang. Semua ini diaturoleh software protokol jaringan. Jika diinginkan, sebuah slave bisaberkomunikasi dengan slave yang lain, masrer juga harus diberi alamat.Tetapi software akan menjadi lebih rumit.
TRAI'IStEI1ER-1 TRAI'.I5|EI?nR-Z TRAhI5CEII/EH_N
Gombor I 0.5 Joringon RS-485 dengon Sistem 2 Kobel
Pada sistem 4 kabel (Gambar 10.6), juga berlaku hubungan masrer dan slave(Transceicer-1 bertindak sebagai master). pengirim dan penerima master bisaterus diaktifkan sehingga master tidak perlu melakukan switchingpengirimdan penerima. Di sisi slave, hanya bagian penerima yang bisa terusdiaktifkan, sedangkan pengirim terap harus dikendalikan mengingat dalamsuatu waktu hanya boleh ada satu slave yang mengaktifkan pengirimnya.Master tetap bertindak sebagai pengendali jaringan, dan slave akanmelakukan respons ]'ika menerima alamar yang sesuai yang dikirimkan olehmaster. Dalam tipe jaringan seperri ini, tidak dimungkinkan sebuah slavemelakukan komunikasi langsung dengan srave yang lain. software pengarurjaringan bisa dibuat lebih mudah daripada sofrware untuk mengatur jaringandengan sistem 2 kabel.
TEIHSCIIVTR TEAI{ S I] E IV EB
!ll
TRAhISCEII/EH-I!
459458 Teknik Antarmuka dan Pemrograman l'likrokontroler AI89552
TRAI'JSCEIWR-1
TF.AI.ISCEIIIER-2 TRANSCEII/TR* TF.AI{SCEIl/ER-(N-1)
Gombor I0.6 Joringon RS-485 dengon Sislem 4 Kobel
Selain tipe jaringan yang telah diterangkan di atas, RS-485 juga memung-
kinkan lebih dari satu master dalam jaringan. Namun hal ini membutuhkan
protokol jaringan yang lebih rumit agar tidak terjadi tabrakan data (dara
collisions) di mana dalam satu waktu beberapa master berinisiatif melakukan
komunikasi. Untuk itu diperlukan metode untuk mendeteksi error dan sistem
yang memungkinkan untuk mengirimkan kembali data yang rusak.
Hal lain yang perlu diperhatikan ketika merancang jaringan RS-485 adalah
masalah impedansi dan pembebanan jaringan. Impedansi yang tidak cocok
(unmatch) antara pengirim, penerima dan saluran transmisi (impedansi
karakteristik kabel) akan mengakibatkan sinyal yang dikirimkan oleh
pengirim tidak semua diserap oleh penerima, tetapi akan dipantulkan
kembali ke pengirim. Sinyal pantulan ini bisa menyebabkan kerusakan data.
Mencocokkan impedansi antara pengirim, penerima dan saluran transmisi
(impedance matching) bisa menghilangkan sinyal pantulan ini.
Catatan-catatan aplikasi yang dikeluarkan pengembang atau pembuat IC atau
sistem RS-485 menyebutkan, untuk mengatasi masalah impedansi jaringan
bisa dilakukan dengan menambahkan resistor terminasi (termination resisto)
di kedua ujung jaringan (pada Gambar 10.5 resistor harus dipasang di
Transceiver-1 dan Transceiver-N). Nilai yang paling umum dipakai adalah
biasa dipakai dalam jaringan ini
(aJ Sistern 2 Kabel (bJ Sistem 4 Kabel
Gqmbor 10.7 Resistor lerminosi
Namun penambahan resistor ini memberikan efek pada pembiasan jaringan.Normalnya transceiver RS-485 mempunyai resistor bias internal, kira-kira100 kO yang menghubungkan terminal A dengan VCC (pull up) danmenghubungkan terminal B dengan GND (pull down). Kedua resistor bias iniakan menjaga agar tegangan terminal A lebih positif daripada reganganterminal B (perbedaan minimal 200 mv). Sehingga, pada saat pengirim tidakaktif, keadaan logika jaringan bisa diketahui. Penambahan resisror terminasiakan mengakibatkan perbedaan tegangan jatuh menjadi beberapa mVsehingga bisa menyebabkan kesalahan pembacaan data. untuk itu resistorbias eksternal harus dipasang, yaitu resistor pullup yang menghubungkanterminal A dengan VCC dan resisror pull down yang menghubungkanterminal B dengan GND. Pada sisrem 4 kabel, resisror bias harus dipasang disisi penerima. Nilai resistor bias bergantung pada nilai resistor terminasi yangdigunakan. Nilai resistor bias yang kecil akan membuar sistem menjadi kebihkebal terhadap noise, namun pemakaian daya menjadi tinggi. Nilai resisrorbias yang tinggi bisa mengurangi pemakaian daya. lika jarak antar-transceivercukup pendek, resistor rerminasi dan pembiasan mungkin tidak diperlukan.
R5-485: Jaringan l'likrokontroler
120 O karena jenis
memiliki impedansikabel twis te d -pa i r y an g
karakteristik 120 O.
46t460 Ieknik Antarmulta dan Pemrograman I'likrokontroler AT89S52
DATA II{
DATA OUT
Gombor I0.8 Resistor Bios
untuk hal-hal yang lebih detail mengenai perancangan jaringan RS-485 bisa
dilihat di cataran-catatan aplikasi yang dikeluarkan oleh pengembang RS-485,
misalnya Maxim (www.maxim-ic.com), B&B Electronics (www'bb-elec'
com), atatTexas Instrumertts (www.ti.com) dan masih banyak lagi'
1O.2 JARINGAN R5-485 DENGAN AT89S52
Salah satu contoh aplikasi RS-485 adalah pemantauan output produksi di
sebuah pabrik. Misalnya sebuah pabrik mempunyai beberapa line produksi di
mana setiap line mempunyai alat pemantau output berupa display yang
menampilkan output aktual dan target yang harus dicapai' Alat Pemantau
tersebur dihubungkan dengan sebuah komputer yang ada di kantor manajer
atau supervisor produksi melalui jaringan RS-485 sehingga bisa memantau
kondisi output setiap line tanpa harus pergi ke line tersebut,yang jaraknya
bisa cukup jauh.
|aringan RS-485 untuk alat pemanrau produksi ini ditunjukkan oleh Gambar
10.9. Komputer bertindak sebagai master jaringan, sementara alat pemantau
yang berupa display bertindak sebagai slave. Display, yang dibangun oleh
mikrokontroler AT89S52, akan menampilkan output aktual dan output target
yang harus dicapai berdasarkan waktu yang diperlukan untuk I output
(waktu standar). Waktu standar dan total jumlah output yang harus
dikerjakan oleh setiap line dikirimkan oleh komputer' Setiap line bisa
memproduksi barang yang berbeda. selain itu, komputer setiap saat (setiap I
detik misalnya) akan mengecek data yang tertampil di display, schingg,a clata
R1485: Jaringan I'likrokontroler
yang tampil di layar monitor komputer akan sama dengan data yangtertampil di display.
Kcrmputer Display Linel Display Line2 Display Line3(lulaster) (ila:,,e-1) (S1a,"'E-2) (S1ar,,e_B)
Gombqr I0.9 Joringon Alot Pemontou Produksi
Jaringan dirancang unruk sistem 2 kabel (dua arah bergantian). Protokol pundirancang untuk 2 kabel, namun dengan sedikit modifikasi protokol rersebutbisa dibuat untuk sistem 4 kabel.
IO.2.I RANCANGAN HARDWARE
Hardware dari sistem ini terdiri atas komputer dengan anrarmuka RS-232 keRS-485 dan unit display yang akan menampilkan ourput aktual (5 digit) danoutput target (iuga 5 digiQ. Display menggunakan 7 segmen yang dikendali-kan menggunakan register geser sehingga diperlukan 10 buah 7 segmen danl0 buah register geser.
lO.2.l.l Anlormukq RS-232 ke RS-485
Antarmuka RS-232 ke RS-485 akan mengubah sinyal RS-232 dari port serialkomputer men;'adi sinyal TTL untuk kemudian diubah menjadi sinyal RS-485. Rangkaiannya ditunjukkan oleh Gambar 10.10.
[anngan R5-485
Ieknik Antarmuka dan Pemrograman Mikrokont'|91AI89552 R1485: Jaringan tlikrokontroler
sedangkan IC911 digunakan untuk menyediakan sinyal untuk mengatur arah
data RS-485 (mengirim atau menerima). Tegangan eksternal 5 Voltdiperlukan untuk memberikan tegangan catu daya untuk lC opto-isolator danIC transceiver RS-485. Untuk mengurangi pengaruh noise dari catu daya,
kapasitor 100 nF perlu dipasang di ketiga IC sebagai filter catu daya.
Pemasangan kapasitor ini harus sedekat mungkin dengan IC.
Sinyal DTR (data terminal ready) dan RTS (request to send) dari PC
digunakan untuk menyediakan tegangan untuk photo transistor IC912, dimana RTS menyediakan tegangan positif dan DTR menyediakan tegangan
negatif. Selain itu RTS juga digunakan sebagai sinyal pengendali untukmengatur arah aliran data IC RS-485 yang diatur secara software. Pada saat
mengirim, RTS harus berada di tegangan negatif (space). Keadaan ini akanmenyebabkan photo transistor di IC912 dan LED di IC911 mati. KeluaranIC911 akan berada di VCC (logika tinggi). Sinyal kendali untuk pengirim
(DE) dan penerima ( nf ) tCStS saling dihubungkan. Pada kondisi ini, bagian
pengirim IC9l3 akan aktif sehingga data yang dikirimkan dari port serialkomputer bisa dikirimkan ke jaringan RS-485. Pada saat menerima, RTS
harus berada di tegangan positif (mark) untuk mengaktifkan IC912 danmembuat keluaran IC91 1 berada di logika rendah yang akan mengaktifkanbagian penerima IC913. Sinyal DTR selalu berada di tegangan negatif.
10.2.1.2 Unit Disploy
Diagram blok unit display diperlihatkan oleh Gambar 10.11. Unit ini terdiriatas blok ADDRESS sebagai penentu alamat untuk unit display, blok display 7
segmen untuk menampilkan output target dan output aktual, sebuah saklarsebagai sensor output aktual, dan blok RS-485 yang akan menghubungkanunit ke jaringan. Display 7 segmen menggunakan teknik register geser;
karena dirancang untuk menampilkan 10 digit (masing-masing 5 digit untuktarget dan aktual), maka diperlukan 10 buah 7 segmen dan 10 buah registergeser. Penjelasan mengenai cara kerja display bisa dilihat di Bab 6.
Bagian ADDRESS dibangun oleh sebuah saklar DIP16 (8 saklar). Pada posisiON mikrokontroler akan membaca "0", sedangkan pada posisi OFF akanmembaca logika "l". Dengan menggunakan 8 bit alamat unit display bisa
clikembarrgkrrn srrrnpli 256 buah, tentu sal'a jarrngan dibangun dengan
rnt,nrpt'r'lrutikirn rtrrrrtlirr l{S 4ft5.
46i462
P"9ll4Iir
F54B-5,T;{
D91l1N4148
rf9135I'l-/-51f6E
Gqmbor I0'10 Anlormuko RS-232 ke R5-485
Rangkaian pengubah RS-232 menjadi sinyal TTL menggunakan 3 buah opto-
isolator (IC910, IC911, IC912), sehingga akan menghasilkan rangkaian
terisolasi antara komputer dengan jaringan RS-485 (dalam gambar terdapat 2
simbol ground yang berbeda yang menunjukkan adanya isolasi tersebut)'
ICgl0menyediakansinyalTXdarikomputerdandiubahmenjadisinyalT.I'1,yang kemudian disalurkan ke IC pengirim RS-485 (1C91:l)' IC9.l 2 mcncrirna
drt, ao.; penerima RS 485 claD rnengttbaltlryir rrrcrriiltli sirryal lis 2:i2'
A l.l-:cK DHNHrl W
1r,I414E+ | ICe1oH11L1 +
I t rtflo5 11i8 r I----l -l rl I { 4HTA Vl]C
K 6HtlHil \,b
I liD4ft,!neg oEE
Teknik Antarmuka dan Pemrograman Mikrokontroler AIB9552
@I
AT89552
Gombor l0.l I Diogrom Blok Unit Disploy
Gumbor 10.12 Soklor Pengolur Alomot
Seperti halnya antarmuka RS-485 untuk RS-232, mikrokontroler dihubung-
kan dengan jaringan RS-485 melalui IC transceiver dari Texas Instruments
sN75176. Pin D dan R dihubungkan dengan port serial mikrokontroler,
sedangkan pin pengendali, DE dan yang saling dihubungkan' dihubungkan ke
pin rt".e. Logika ,,01, di pi, ini akan mengaktifkan bagian penerima dan logika
"1" akan mengaktifkan Pengirim'
RS-485: Jaringan l,likrokontroler
Deri TX (P3.1He Rri (F3.0J
Dari F1 .3
5tJ75176E
-Gombor 10.13 Anlormuko RS-485
Sebuah saklar dihubungkan ke pin P3.2. Saklar ini digunakan untuk mem-
berikan tanda setiap kali sebuah barang telah selesai diproduksi. Pembacaan
saklar dilakukan melalui interupsi eksternal ke-0.
1O.2.2 PROTOKOL JARINGAN DAN RANCANGANSOFTWARE
Software untuk mengatur jaringan RS-485 ini adalah software untukkomputer yang berfungsi sebagai master dan software untuk unit display
yang bertindak sebagai slave. Software komputer dibuat dengan bahasa
pemrograman Delphi 6 yang dirancang untuk bisa berkomunikasi dengan
jaringan RS-485 melalui port serial PC. Sedangkan program untuk unitdisplay dirancang dengan memanfaatkan fasilitas komunikasi multiprosesoryang dimiliki oleh AT89S52 (bit SM2).
10.2.2.1 Prolokol Komunikosi Joringon
Protokol komunikasi antara master dan slave perlu didefinisikan terlebihdahulu sebelum merancang software-nya. Pada dasarnya ada 2 protokolkomunikasi antara master dan slave, yaitu pengiriman data pengaturan ke
unit display dan permintaan data dari unit display oleh komputer. Data
pengaturan yang dikirimkan ke unit display adalah waktu standar (standard
rime), yaitu waktu yang diperlukan untuk memproduksi 1 buah produk dan
total jtr rnlrrh procluk yang hanrs dihasilkan oleh line produksi yanB
lrclslrrgkrrt.rrr lirrl;rrrgk:rrr tlatl yang clikirimkln rlari urrit display ke kornputt'r
465464
SallarOutput
INTI
{:
-L
466 leknik Antarmul<a dan Pemrograman l'likrokontroler AI89S52
adalah sama dengan data pengaruran (waktu standar dan jumlah produksi)
ditambah dengan output target berdasarkan waktu standar dan output aktual
pada saat itu.
Sebelum mengirimkan perintah untuk mengirim data pengaturan atau mem-
baca data dari unit display, master akan mengirimkan alamat unit display
yang bersangkutan terlebih dahulu. Unit display dengan alamat yang sesuai
akan merespons pengiriman alamat tersebut, sehingga proses selanjutnya bisa
dilakukan. Jika tidak ada respons dari unit display yang bersangkutan' berarti
unit display tersebut sedang tidak aktif (off line).
Formar komunikasi serial yang digunakan adalah UART dengan data 8 bit
dan 1 bit paritas dengan kecepatan 9600 bps (pada AT89S52 port serial
bekerja pada mode 3). Bit paritas bisa diatur menjadi bit 1 atau bit 0' Pada saat
mengirimkan alamar bit paritas diatur menjadi bit 1, semua slave yang
terhubung ke jaringan akan menerima alamat I byte ini. Slave dengan alamat
yang sama akan merespons. Setelah ini bit paritas diatur menjadi bit 0,
sehingga jika ada data di jaringan hanya master dan slave dengan alamat yang
sesuai yang akan bisa menerima.
I,,IASTEE lAppREsSl lEOllMAHD"l TD TII.IEIPROD QTY
SLAVE
Gombor I Pengoluron
Gambar 10.14 memperlihatkan protokol komunikasi untuk mengirim data
dari komputer (master). Pertama master akan mengirimkan alamat slave yang
dituju (1 byte yang dalam contoh program alamat yang akan dikirim adalah
01H,02H atau 03H), bit paritas diset menjadi bit 1. Semua mikrokontroler
slave akan menerima byte alamat ini karena pada saat ini bit SM2 di-set. Jika
alamatnya sesuai, slave yang bersangkutan akan merespons dengan
mengirimkan byte ACK (acknowledge) yang didefinisikan sebagai karakter,,!,, (tanda seru). Pada saar ini, bit paritas di-set meniadi bit 0 (komputer
mengubah pengaruran port serial), pada mikrokontroler dilakukan dengan
mereser bit ke-9 yang dikirim (bir TB8) dan bit SM2 direset juga. Master
kemudian mengirimkan byte perintah (COMMAND) untuk mengirim data
pengaruran unit dispiay. Byte perintah yang dikirirnkan adalah karaktcr "A"
(41H). Slave yang aktil kernttcliar.r akatr tnt'tnbacrt bvlr'Pt'rirttrtlr irri tllrr
R5-485: Jaringan l.likrokontroler 461
menjawab dengan mengirimkan kembali byte ACK sebagai tanda bahwaslave siap menerima data.
Master kemudian mengirimkan data ke slave yang bersangkutan ,yaitu waktustandar (STD TIME) dan jumlah produksi untuk line tersebur (PROD QTY).STD TIME dinyatakan dalam detik dan dalam program ditentukan I - 100
detik. Data ini dikirimkan langsung dalam data heksa 1 byte (01H - 64H)sehingga slave bisa langsung menyimpannya ke memori. Sedangkan PROD
QTY dikirimkan dalam karakter ASCII, data ini bisa bernilai I - 65000 ataudalam bilangan heksa 0001H - FDE8H. Misalnya jika PROD QTY adalah2000 (07D0H) maka data yang akan dikirimkan ke slave sebanyak 4 byte.yaitu karakter "0" (30H), "7" (37H), "D" (44H) dan "0" (30H). Slave yangmenerima harus mengubah data yang diterima dari karakter ASCII menjadibilangan heksa 16 bit sebelum menyimpannya ke memori.
MAETER IAppREssl lEoMMAtrp-l
SLA\/E @Gombqr 10.15 Protokol unluk memboro dolo dori Slove
Protokol untuk membaca data dari slave diperlihatkan oleh Gambar 10.15.Seperti halnya pada saat mengirimkan data pengaturan, master pertama kaliakan mengirimkan hlamat (1 byte) dan slave yang mempunyai alamat yangsama akan mengirimkan byte ACK. Setelah menerima byte ACK, master akanmengirimkan byte COMMAND, untuk membaca data dari slave. ByteCOMMAND didefinisikan sebagai karakter "R" (52H). Tentu saja pada saat
ini bit paritas telah diatur menjadi bit "0", sehingga komunikasi hanya terjadiantara master dengan slave yang mempunyai alamat yang sama.
Setelah menerima byte COMMAND, slave akan mengirimkan byte ACKterlebih dahulu. Data yang dikirimkan oleh slave adalah STD TIME (waktustandar), output aktual saat itu (ACTUAL), output targer berdasarkan waktustandar (TARGET), dan jumlah produksi (PROD QTY). Data-data inidikirimkan dalam bentuk bilangan l6 bit yang telah diubah menjadi karakterASCII, jumlah keseluruhannya adalah 15 byte. Misalnya pada saat pengaruranSTD adalah 5 detik, jumlah produksi 2000 (07D0H), output aktual adalah 100
(64H) dan output target adalah 102 (66H), maka slave akan mengirimkan data"!050066006407D0". Master hanrs mengolah data ini sesuai dengan ururantlatl.
m0.1 4 Prolokol unluk
mMengirim Doto
Teknik Antarmuka dan Pemrograman I'likrokontroler AI89552
protokol komunikasi yang diterangkan di atas sanSat sederhana, tidak ada
penanganan error namun cukup untuk master dan slave saling berkomuni-
kasi. Untuk aplikasi yang lebih kompleks mungkin diperlukan penanganan
error ini. Salah satu caranya adalah dengan menambahkan check sarn pada
data yang dikirim, biasanya 1 byte. Penerima data harus mengecek byte
check sum ini. Jika ada kesalahan di check sum, penerima harus meminta ke
pengirim untuk mengirim ulang data tersebut' Byte check sum didapat
d".rgun meniumlahkan semua byte data, kemudian di-AND-kan dengan FFH'
Kemudian bilangan 100H dikurangi dengan hasil penjumlahan dan operasi
AND tersebut, hasilnya adalah byte check sum'
Mengingat kecepatan antara komputer dan mikrokontroler yang berbeda'
maka waktu tunda antara penerimaan dan pengiriman data dari master dan
slave atau sebaliknya juga harus dipertimbangkan. )ika tidak, data bisa hilang.
10.2.2.2 Soflwqre unluk Kompuler (Moster)
Software komputer dibuat dengan bahasa pemrograman Borland Delphi 6'
Source code-nya bisa diperoleh di CD pendukung buku ini lSoftware Pen'
dukunglRs-485 PC Program' Tampilan programnya diperlihatkan oleh
Gambar 10.16. Untuk mengirim data pengaturan dilakukan dengar:r menekan
tombol .9end, tentu saja setelah memilih line dan menentukan waktu standar
danjumlahproduksi.}ikalineyangbersangkutantidakaktif(offline)'program akan menampilkan pesan bahwa line tersebut off line' Untuk
memoniror kondisi setiap line, dilakukan dengan menekan tombol Monitor
O1\/makaprosramakanmembacadatadarisetiaplinedanmenampilkannyadi layar.
Untuk berkomunikasi dengan port serial, software ini menggunakan sebuah
komponen ActiveX d'art Microsoft yaittt mscomm32'ocx (MSComm)'
Komponen ini harus di-instal dan di-register ke sistem windows terlebih
dahulu sebelum menialankan program RS-485 Master' jika tidak' program
tidak akan bisa dijalankan. Kecuali jika di komputer telah ter-instal program
visual Basic, karena MSComm adalah komponen bawaan visual Basic. Untuk
menginstalMSComm,bisadilakukandenganmenjalankanfileinstalasiyang,dudiCDpendukurrg|softwarePendukung|Rs.48,PCProgram|MSContntInstaller. Begitu juga kalau komponen ini akan digunakar.r di dalarn I)clplri'
komponen harus di-irnpor clan cli instal ti'rlt'bih rlahtrltr'
RS-485: Jaringan l'likrokontroler
Gombor 10.16 Progrom l(omputer sebogoi Moster
Setelah diinstal dan di-register ke Windows melalui program instalasi,Mscomm diimpor ke Delphi melalui men:u Component/Import ActiveXControl. Melalui kotak dialog Import ActiveX, pil1h Microsoft Comm Conrrol6.0 (Version 1. 1) lalu klik tombol Install. MSComm yang telah terinstal akanberada di palet komponen ActiveX densan nama MSComm dan memunyaiikon gambar telepon. Penjelasan lengkap mengenai Delphi bisa dilihat diliteratur atau buku mengenai Delphi. Cara penggunaan komponen MSCommcukup mudah dan sederhana. MSComm memunyai properti, fungsi danprosedur yang cukup lengkap untuk mengendalikan port serial. Salah satupropertinya adalah RTSEnable yang bisa digunakan untuk mengatur pin RTS
yang dalam contoh aplikasi di bab ini digunakan untuk mengarur IC RS-485pada saat mengirim atau menerima data.
469
468
Setting
Line :il""-- -istandar Time (51 ijb*"-
-
"ilProd. Qty iisoo - 5i
Line Monitor Bead data"'oK
Lrne 01 0N LINE Line 02 OFF LIHE Line 03 0N LINE
STDTime= g STDTime= [ ,STDTime= 10Prod. Gty = 500 Prod. Oty = Q Prod. Oty = 1500
rTarget = J, Target = Q Target = g
,,Actual = J Actual = Q Actual = Q
4714i0 Ieknik Antarmul<a dan Pemrograman l'likrokontroler AI89552
Gombor l0.l7l(olok Diolog Mengimpor Komponen AcliveX diDelphi
properti-properti dan fungsi atau prosedur yang dimiliki oleh MSComm yang
digunakan dalam contoh aplikasi RS-485 di antaranya:
l. commPort, adalah properri yang digunakan untuk memilih port serial
yang akan digunakan. Sebuah PC minimal memiliki sebuah port serial
yang diidentifikasikan sebagai coMl. PC yang lain mungkin memiliki
lebih dari 1 port seriai (misalnya COMI, COM2 dan seterusnya)'
CommPort, dengan tipe data integer (bilangan bulat), digunakan untuk
memilih COM mana yang akan dipilih, CommPort : 1 berarti COMI
yang dipilih.
Settings, digunakan untuk menentukan baud rate, jumlah bit data,
mengatur bit paritas dan bit stop (stop 6rr). Misalnya untuk mengatur
port serial pada baud rate 9600 bps, 8 bit data, tanpa bit paritas dengan 1
bit stop, maka nilai Settings adalah '9600,n,8,1'. Nilai Settings ini harus
disesuaikan dengan port serial yang terinstal di komputer, jika port serial
tidak mendukung nilai Settings yang dimasukkan, program akan
menampilkan pesan kesalahan. Untuk bit paritas, ada beberapa pilihan:
R1485: Jaringan Hikrokontroler
a. n (none) = tidak menggunakan bit paritas,
b. e (even) = paritas genap, bit paritas akan bernilai 1 jika bit " 1 " dalamdata berjumlah genap.
c. o (.odd) = paritas ganjil, bit paritas akan bernilai I jika bit "1" dalamdata berjumlah ganjil.
d. m (mark) = bit paritas selalu bernilai 1.
e. s (space) = bit paritas selalu bernilai 0.
Pada saat mengirimkan alamat slave, bit paritas harus bernilai 1, makanilai Settings adalah '9600,m,8,1' sedangkan jika sedang membaca datadari slave bit paritas harus bernilai 0 maka nilai Settings adalah'9600,s,8,1'. Dalam baris perintah Delphi akan menjadi
MSComm.Setting:='9600,m,8,1' ;
atatl
MSComm.Settj-ng:='9600,s, B, 1,' ;
3. RTSEnable, digunakan untuk mengatur pin RTS dengan tipe dataBoolean. lika bernilai True, pin RTS akan berada di tegangan mark(positif); jika bernilai False, pin RTS akan berada di tegangan space(negatif). Dalam program RS-485, RTSEnable harus bernilai False saat
mengirim dan bernilai True saat menerima.
PortOpen, digunakan untuk membuka driver port serial sebelummengirim atau menerima data. Tipe datanya Boolean, port serial akandibuka fika PortOpen bernilai Tr-ue dan ditutup jika bernilai False.
Pengiriman Settings harus dilakukan sebelum port serial dibuka(PortOpen bernilai False), jika tidak akan muncul pesan kesalahan.
Output, digunakan untuk mengirim data ke port serial setelah port serialdibuka dengan properti PortOpen. Tipe data untuk Output adalahVariant atau bisa apa saja (integer, string, byte atau lainnya). Namundalam banyak aplikasi tipe data yang dikirimkan berbentuk string(karakter ASCID. Misalnya untuk mengirimkan karakter "A" (41H) makaperintah programnya adalah
MSComm. Output : = 'A' ,'
atau untuk mengirim bilangan 01H (misalnya pada saar pengirimanalamat), maka perintahnya adalah
Mjl(lrrlrrr.l)rrt yrrrt : -Chr ( 1) ;
4.
5.
2.
4134n Teknik Antarmuka dan Pemrograman l'likrokontroler AT89S52
6. Input, digunakan untuk membaca data yang diterima oleh port serial.
Misal
My-DaLa: = MSComm. Input;akan membaca data port serial dan disimpan di sebuah variable bernama
My-Data.
7. InBufferCount, adalah properti yang menunjukkan banyaknya byte yang
diterima oleh buffer port serial. ]ika tidak ada data yang diterima,
InBufferCounr akan bernilai 0. Setelah dibaca dengan perintah Input,
InBufferCount akan kembali menjadi 0.
Seperti telah dijelaskan, bahwa pada dasarnya tugas utama program komputer
ini adalah mengirim data pengaturan ke unit display (slave) dan membaca
data dari unit display. Pengiriman data pengaturan dilakukan pada saat
menekan tombol Send.Programnya dalam bahasa Delphi adalah
procedure TForml.ButtonlClick (Sender: TObject) ;
var S: string;Time*Out, i: integer;
beginMSComml . Portopen: =fa1se;MSComml.Settings :=' 9600,m, B. 1' ;
MSConnnl . Portopen: =true;MSComml- . RTSEnabIe : =fa1se ;
MSComml. Output : =chr (ComboBoxl . f temlndex+1 ) ;
Sleep(1);MSCornrnl . Portopen: =fa1se; ,
MSComml.Settings :=' 9600,s, B,L' ;
MSComml . Portopen: =true;MSComml . RTSEnable: =true;
Time-Out: =0;S:='Line 0'+IntToSLr(ComboBoxl.ftemlndex+1) +' is off-line' ;
Labelg.Caption:='Try to connect Lo Line 0' +
IntTostr ( ComboBoxl . Itemlndex+1 ) ;
Update;while MSComml. InBufferCount=0 dobeginApplication . ProcessMessages ;
inc (Time,Out) ;
Sleep(100);if Time-Out>10 then
R1485: Jaringan Mikrokontroler
beginMessageBox (Handle, pchar ( S ) , pchar (Application . Title ) ,
MB_OK or MB_TCOIWARNING) ;
Label9 . Caption: = ' Ready' ;
exit;end;
end;Label9.Caption: =' ConnecLed Lo Line
0' +IntToStr (ComboBoxl . ItemTndex+1 ) ;Update;
S: =MSComml . Input;MSComml . RTSEnabf e : =f alse ;
Label9.Caption: ='Send settj-ng data. . .Line0' +Int.ToStr (ComboBoxl . Ttemlndex+1 ) ;update;
MSComml.Output:='A' ;Sleep(1);Ti-me-Out: =0;MSComml . RTSEnable : =true ;
while MSComml. InBuf ferCount.=0 dobeginAppl ication . ProcessMes sages ;
inc (Time_Out) ;Sleep(100);if time_Out>10 then
beginMessageBox (Handfe, pchar (S ), pchar (Application. Title),MB*OK oT MB_fCONWARNING) ;
Label9 . Caption: = ' Ready' ;
exit,'
end;end;Label9 . Caption: = 'OK' ;
Caption: =Application . Title;S: =MSComml . Input;MSComml . RTSEnable: =false;Sleep(10);S : =fntToHex ( SplnEdit2 .Value, 4 ) ;MSComml.Output : =char (SpinEditl.Value) ;
Sleep (2 ) ;
for r: I 1,,,1 do
414 Ieknik Antarmuka dan Pemrograman I'likrokontroler AT89S52
beginMSComml. OuLPut :
Sleep(2);end;
Sleep(1);MSComml- . RTSEnableSleep(10);Label9.Caption:='end;
-ctil.
Ready';
Program diawali dengan menginisialisasi port serial pada baud rate 9600 bps,
8 bit data, 1 bit stop dengan bit paritas bernilai I dengan Settings bernilai
'9600,m,8,1'. Setelah membuka port serial dengan mengeset PortOpen
rnenjadi True, pin RTS dibuat menjadi bertegangan negatif dengan mengeset
RTSEnable menjadi False untuk pengiriman data. Kemudian alamat slave
dikirimkan dengan perintah Output. Alamat slave ditentukan dengan rnenu
drop dwon, yaitu komponen ComboBoxl. Alamat slave sendiri ditentukan
oleh ltemlndexkomponen ini. Itemlndex adalah nilai indeks dari menu yang
dipilih yang diawali dari 0. Dalam program ini comboBoxl mempunyai 3
item (01,02,03); jika dipilih item '03" maka nilai Itemlndex adalah 2. oleh
karena itu, agar Itemlndex menjadi nilai alamat perlu ditambahkan dengan 1.
Keterangan mengenai ComboBox bisa dilihat di file bantuan (Help) dari
program Delphi.
Setelah mengirimkan alamat, program akan mengubah seting port serial dan
mengubah pin RTS menjadi positif untuk penerimaan data. Untuk itu port
serial perlu ditutup terlebih dahulu karena setting hanya bisa dikirimkan
pada saat port serial dalam kondisi tertutup. Untuk menerima data dari slave
dengan alamar yang sesuai, bit paritas harus bernilai 0 (Setting = '9600,s,8,1',).
Program kemudian akan mengecek byte ACK dari slave yang dimaksud
dengan membaca InBufferCount. Selama InBufferCount bernilai 0, program
akan rerus menunggu sampai 1 detik (variabel Time-Out bernilai 10 dengan
wakru runggu 100 milidetik). |ika byte ACK tidak diterima, berarti line yang
bersangkutan tidak terhubung dengan jaringan (off line), dan program akan
menampilkan pesan. Jika byte ACK diterima, program akan membaca byte
ACK untuk mengosongkan InBufferCount dan bersiap untuk mengirimkan
byre perintah (COMMAND). Waktu tunggu diperlukan karena mikro-
kontroler lebih lambat bila dibandingkan dengan kompute r'
R1485: Jaringan l,likrokontroler
Byte COMMAND dikirim dengan mengubah pin RTS terlebih dahulumenjadi negatif. Pada saat ini tidak diperlukan mengubah seting port serial(bit paritas tetap bernilai 0) karena komunikasi hanya akan terjadi antara
master dengan slave yang memiliki alamat yang sama. Byte COMMANDyang dikirimkan adalah byte untuk pengiriman data pengaturan yaitukarakter 'A'. Sekali lagi program akan mengecek byte ACK yang dikirimkanoleh slave sebagai tanda bahwa slave telah mengenali perintah yang dikirim-kan oleh master. Jika byte ACK tidak diterima, program akan menampilkanpesan.
Setelah menerima byte ACK, program RS-485 Master akan melgirimkan data
pengaturan sesuai dengan protokol yang telah didefinisikan di atas" Nilaiwaktu standar (STD TIME) diperoleh dengan membaca SpinEditl.Value.Oleh karena STD TIME mempunyai nilai maksimal 100, (64H) maka nilai inilangsung dikirimkan ke slave. PROD QTY didapat dengan membaca nilaiSpinEdit2. Nilai ini diubah dulu menjadi bilangan heksadesimal 4 digit(perintah InToHex). Kemudian ke-4 digit tersebut dikirimkan satu per satu
dengan waktu tunda 2 milidetik tiap digit mengingat kecepatan mikro-kontroler yang lebih lambat.
Tugas kedua dari program komputer ini adalah melakukan monitoringterhadap semua line produksi. Program akan membaca data dari semua unitdisplay setiap 600 mili detik. Fungsi di bawah ini digunakan untuk membaca
data dari unit display.
function TForml- . Read_Sfave_Setting ( S1ave_Address : byte ) :
string;var S: string;
Ti-me_OuL: integer;Label Loop;beginPorLStatus : =fa1se;Result:='0','MSComml . Portopen : =fa1se ;PortSt-atus: =false;MSComml.SetLings :=' 9600,m, B, 1' ;MSComml . Portopen : =true,'PortStatus: -true; ;
MSComml " RTSEnable : =false ;
MSConrrn I . t )rrt Jlrt : =chr (S1ave Address ) ;
475
411416 Ieknik Antarmuka dan Pemrograman l'likrokontroler AI89S52 R5-485: Jaringan l,likrokontroler
Result : =MSComml . lnput ;
Label9.Caption:='Read data. . .OK' ;
Update;Loop:PortStatus : =Lrue,'end;
Prosesnya hampir sama dengan proses pengiriman data pengaturan, diawalidengan pengiriman alamat unit display yang akan dibaca. Alamat slave
didapat dari variabel Slave-Address. Jika byte ACK tidak diterima (unitdisplay yang bersangkutan off-line), fungsi ini akan menghasilkan '0'. ]ikabyte ACK diterima, program akan melanjutkan dengan mengirimkan byreCOMMAND untuk pembacaan data, mengirimkan karakter'R'.
Data yang akan diterima adalah sebanyak l5 byte, karena itu program harusmenunggu sampai InBufferCount bernilai 15. Bila dalam 800 milidetik nilaiInBuffetCount tidak bisa mencapai 15, bisa berarti komunikasi dengan slave
telah terputus, karena itu nilai (result) dari fungsi Read_Slave_Setting adalah'0'.
Data yang diterima dari slave kemudian diolah untuk ditampilkan. Olehkarena data yang diterima adalah bilangan heksadesimal bertipe string,program kemudian membaca karakter ke-2 dan ke-3 sebagai STD TIME danmengubahnya menjadi bilangan desimal, karakter ke-8 sampai ke-11 sebagai
TARGET, dan seterusnya. Program lengkapnya bisa dilihat di CD pendukungbuku ini.
10.2.2.3 Soflwore unluk Mikrokonlroler (Slove)
Software mikrokontroler dirancang untuk menerima dan mengirim data ke
komputer melalui port serial, membaca saklar output melalui interupsieksternal, memperbarui output aktual dan output target sesuai waktu standardan mengendalikan 10 buah display 7 segmen.
,'Program Tit.le : "RS-485 Slave Program",'File name : RS 485 Slave.asm;Version :1.0,'Createcl date : September 16, 2007;Pro<Jrrrtttnl('r' : Usman,. i A I A l l r a r r A r A t l* *****{* ********************* **********
Labelg.Caption:='Send address of lj-ne0' +IntTostr ( Slave-Address ) ;
Update;Sleep(1);MSComml . PortOpen: =false;MSComml . Settings : = ' 9 6 0 0 , s , B , 1 ' ;MSComml . RThreshold: =1 ;
MSComml . PortOPen : =true ;
MSComml . RTSEnable: =true,'Labelg.Caption:='Check ACK signaf of line0' +IntToStr ( Slave_Address ) ;Update;'I'ame Uut : =U;while MSComml. InBufferCounL<1 dobegininc (Time_Out) ;
Sleep (30) ;
if Time-OuL>10 thenbegin
Resu1t: ='0' ;goto Loop;
end;end;S: =MSComml . Input;MSComml . RTSEnable: =fa1se;MSComml . Output.: = 'R' ;
Sleep(1);MSComml . RTSEnable : =true ;
Labelg.Caption:='Read dara from fine0' +IntTostr ( Slave-Address ) ;
Update;Ti-me-OuL: =0;while MSComml.InBufferCount<15 dobegininc(Time Out);Sleep (80) ;if Time_Out>10 then
beginResult: ='0' ;
goto LooP;end;
end;//Sleep(1);
419478 Ieknik Antarmul<a dan Pemrograman I'likrokontroler AT89552
. * * * * * * * * * * * * * ** * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
,'Microcontroler Pin/Port Assignment*******************************************************
;7 segment control PinSS-DAT equ P1.0SS-CLK equ P1.1SS-RST equ Pt.2
RS485A-ADDR egu P2
RS4B5-DIR equ P1.3
*******************************************************Internal RAM mapping*******************************************************
FlagReg equ 20HZOV bit F1agReg.OError_F bit F1agReg.1Output-Flag bit FlagReg.2Target_Flag bit PlagReg.3
Address4S5 equ 30H
DIG*Bfrl egu 31HDIG_Bfr2 egu 32HDIG_Bfr3 egu 33HDIG_Bfr4 equ 34HDIG-Bfr5 equ 35H
RS-485: Jaringan l,likrokontroler
ACT_HACT*L
TG-HTG-L
PQ_HPQ-L
equ 41Hequ 42H
equ 43Hequ 4411
egu 45Hequ 46H
XH
XLYH
YLZH
ZL
ZA
ZTq')
egu 36Hequ 37Hegu 38Hequ 39Hegu 3AHequ 3BH
equ 3CHequ 3DHegu 3EH
Data-Buf f equ 4'/H
Timer*Counterl egu 50HTlmer-Counter2 egu 51H
. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * *
;Constanta Definition*******************************************************
;Command DefinitionSETTING_CMD equ 'A'DATAREQ_CMD equ 'R'ACK equ 'l'CMD_ERROR equ 'E'
*******************************************************InterrupL Vector Jump Table*******************************************************
org 0000HReset_VecLor:
jmp Main-Prog
,. * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * *
org 0003HfNTO-TSR:
jnb Setting-Flag, INTO-ISR-Exitcall Update-ActuaI-OuLPut
INTo_ISR_Exit:reti
. * * * ** * * * * * * * * ** ** * * * * * * * * * * * * * * * * * * * ** * ** * * ****** ** ** **or(t 0023H
fl.r i.rll',,rI Illli:23 egu 3FHStandard-Time equ 40H
48r480 Teknik Antarmuka dan Pemrograman Mikrokontroler AT89S52
jbreti
Rf, Receive_Event
Receive_Event:push DPHpush DPLpush ACCpush B
call Check_Addresssetb SM2
setb TB8clr RS485_DIRpop Bpop ACCpop DPLpop DPHretl
- * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * *** * * * * * * * * * * * + * * * * *
;Main Program- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Main_Prog:call Serial-Port-IniLcall TimerO-fnitcall InterrupL-Initcall Data-Init
Main_Prog_Loop:Update_Ta rget_Output :
jnb TF0, $c1r TFOdjnz Timer_Counterl, Update-Target-Outputmov Timer_CounLerl, #7AHinc Timer-Counter2c1r C
mov A, Standard-Timesubb A, Timer_CounLer2)nz Update-Target-Output-Exitmov Timer-Counter2, #0jnb Target-F1ag, Update-Target
Upda te-Target-Output-Exi t :
sjmp Main_Prog-Loop
R1485: Jaringan Mikrokontr:oler
Update*Target:mov DPL, TG-Lmov DPH, TG-Hinc DPTRmov B, DPHmov A, PQ_Hclr C
subb A, Bpush ACCmov B, DPLmov A, PQ-Lc1r C
subb A, Bmov B, Apop ACC
orl A, Bjnz Target_Not_Finishsetb Target_Flag
Target_Not_Finish:mov TG_H, DPHmov TG_L, DPLcall SS_DIsplay_Commandsjmp Main_Prog_Loop
. * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *Seri-al_Port_Ini t :
mov SCON, #0F0Hmov RCAP2H, #OFFHmov RCAP2L, #0D9Hmov T2CON, #34Hclr RS4B5_DIRret
Serial_Transmi t :
mov SBUF, Ajnb TI, $clr TIret
Serial llr:ceive:.j nlr lil, $nl( )\./ A , l ;l {l ,1,'
483482 Teknik Antarmuka dan Pemrograman I'likrokontroler 4T89552
c1r RIret
Send_ACK'mov A, #ACKcall Seri-al Transmi-tret
Send_CMDError:mov A, #CMD-ERRORcall Serial Transmitret
,. * * * * * ** * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * *
Check_Address:mov A, SBUFclr RIc1r C
R1485: Jaringan Mikrokontroler
call Send*Dataret
Command_Error:call Send_CMDErrorret
,. * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * *
Get_Setting:clr RS4B5_DIRmov R0, #Data-Buffmov R1, #5
Get_SeLting*Loop:call Serial--Receivemov @R0, Ainc R0dlnz R1 , Get-Setti-ng*Loop
subb A, Address4S5 Setting Save:jz Aallress Match Stanalard Time, Data-BuffreE R0, #Data-Buff+1
call Convert 2ASC T rchar-ToHexaAdah:ess_l4atch: Po-H, a
call Delay inc R0
c1r SM2 call Convert-2Asc I Ichar-ToHexacIr TB8 P0 L, Asetb RS485 DIR rcT-E, +0
call send_ACK mov ACT-L, +0
c1r RS485_DIR TE-H, *0call serial-Receive 'IE-L' *o
Check Corrnand: c1r OutPuL-F1agcall Delay cL: TargeE Flagcjne A, #SETTTNG cMD, Checllcomand2 seEb setting-Flaqcall Delay selb TRo
setb Rs485_DrR rel:call Send ACK
clr RS485_DrR Convert-2ASCIIChar ToHexa:r.ets A, GRO
call ASCII_To_HeXCheck-Cormand2: swap A
cjne A, +DATARELCI@, Conmand,Error n, A
call Delay ir!' lllr
485484 leknik Antarmuka dan Pemrograman I'likrokontroler AI89S52 R1485: Jaringan I'likrokontroler
A, eRO call De]aycall Ascrr,To-Hex cli Rs485-DrRorl A, B ret
ASCII-To Hex: B, Ac1r Error_F swap Aclr C anl A, *00FI{add A, +0D0H aca1l NibldIoASCIIjnc Not-Num call serial-TransniEaald A. +0F6H xch A, B
jc Hex-Try anl A. +00Fhadd A, #0Ar acall NibIeToASCIIre! cau Serial-TransmiE
retHex_Try:
ctr ACC.5 NibIeToASCIr:add A, +0F9I] add A, +036hjnc NoE-Num jnb Acc.6, skiPadd A, +oFAE add L,*7jc No!-Num SkiP:ant A, +OFH subb 4,*6ret rel
setb Error F Tirner0 hit:ret nov TMOD, *818
Timer Counterl, *7AIl
Send_DaEa: r.e!setb RS485_DIR
R0, *standard Tine hierrupt-hit:R1, +? setb Exo
Senal,DaEa-Loop: seib 1T0
A, @R0 seEb Es
call Send-ASCII Dala seib FA
in. RO ret
djnz R1, send Dala Loop
487486 Teknik Antarmulo dan Pemrograman I'likrokontroler AI89S52
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Data_Init:mov TG_H, #0Hmov TG-L, #0Hmov ACT_H, #0Hmov ACT_L, #0Hmov PQ_H, #0mov PQ_L, #0mov Standard-Time, #0call SS-DIsplay-Commandmov FlagReg, #0mov Address485, RS4B5A-ADDRret:
,. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Update_Ac Lual_OutpuL :
push DPHpush DPLpush ACCpush B
call Delaycall Delayjb OuLput-Flag, UpdaLeActualExit
Do_Update:mov DPL, ACT Lmov DPH, ACT Hi-nc DPTR
mov B, DPH
mov A, PQ_H
c1r C
subb A, Bpush ACCmov B, DPLmov A, PQ-Lclr C
subb A, Bmov B, Apop ACCorl A, Bjnz UpdateActualsetb Output_Flag
R1485: Jaringan Mikrokontroler
UpdateActual:mov ACT_H, DPH
mov ACT-L, DPLcall SS-Display-Command
UpdateActualExj-t :
pop Bpop ACCpop DPLpop DPH
ret
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * *
; 7 Segmen Routine,.
* * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * *
SS_Display-Command:clr SS_RSTmov XH, TG_Hmov XL, TG-Lcall Decimal_Convertermov R0, #05Hmov R1, #DIG-Bfr5
SS_D i sp 1 ay_Command-Loop 1 :
mov A, @R1
call SS-Serial-Datadec R1dlnz R0, SS-Display-Command-Loop1mov XH, ACT_Hmov XL, ACT_Lcall Decimal-Convertermov R0, #05mov R1, #DIG-BfrS
SS_D i sp 1 ay_Command-Loop2 :
mov A, GR1
call SS-Serial-Datadec Rl-d)nz R0, SS-Display-Command-Loop2setb SS-RSTret
" * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
SS-Se::i;r I I)ata:m()v ll, ll 0B
r',r I I liii l),rl ,r (:()nv()r I ()r'
I
489488 Teknik Antarmuka dan Pemrograman l'likrokontroler AT89552 R1485: Jaringan llikrokontroler
SS_Serial-_Data Loop:
YH, #27HYL, #1OHDIV16dt Lz
DIG_BfrS, aXH, Z7XL, ZO
YH, #O3HYL, #OE8H
DIV16:movor1)nzsetbret
div_OK:movmovmovmovmovmovmov
div_1oop:clrmovrlcmovnl()vr lr'
YL, #64HDIV16
DIG_Bfr3, aXH, 21-
XL, ZO
YF{, #00YL, #OAHDIV].6dI LZ
DIG*Bfr2, aXH, ZLXL, ZO
YH, #OO
YL, #01DIV16d, lJZ
DIG_Bfr1, a
A, YHa, YLdiv_OKzov
11, XHr0, XLxH, #0xL, #013, #012, #0r7, #L6
C
a, r0ar0, a,1, r j,l
movcallmovmovmovmovmovmovcallmovmovmovmovmovmov^-11udfr
movmovret
rlcmovc1rnopsetbnopdjnzret
ASS_DAT, C
SS-CLK
SS-CLK
B, SS_Seriaf_Data_Loop
SS_Data_Converter:inc Amovc A, @A+PCret
dbdbdbdbdbdbdbdbdbdb
01'7H03 0HOE3HOFlHOB4HOD5H
ODTH
07 0HOFFHOF5H
. * ** * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * **
. * * * * * * * ** * * * * ** * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * *Decimal_Converter:
movmovcallmovmovmovmovmovmovcall- DrV16
d., LZ
DrG_Bfr4, aXH, Z1-
XL, ZO
YH, #OO
movmovmovmovmov
49t490 Teknik Antarmuka dan Pemrograman Mikrokontroler AI89S52 R5-485: Jaringan l'likrokontroler
O"tty,mov R5, #0mov R6, #0
Loopl:djnz R5, $
djnz R6, Looplret
end
Port serial diinisialisasi untuk bekerja pada mode 3 (9 bit data) denganinterupsinya diaktifkan dengan Timer 2 digunakan sebagai pembangkit baudrate pada frekuensi osilator 12 MHz. Pada awal program bit SM2 di-setsehingga mikrokontroler akan bisa membaca byte alamat yang dikirimkanoleh master. Penerimaan byte perintah dari master dilakukan melaluiinterupsi port serial ini. Untuk membaca saklar output dilakukan melaluiinterupsi eksternal, sehingga akan mengurangi beban kerja mikrokontroler.Timer 0 bekerja pada mode 0 (timer 13 bit) digunakan sebagai timer unrukmemperbarui output target sesuai waktu standar.
Pada saat master mengirimkan byte alamat, semua slave yang terhubung akanmengecek alamat tersebut (terjadi interupsi port serial). Program akanmelompat ke alamat ISR port serial (0023H) untuk melakukan pengecekanbyte alamat tersebut dengan memanggil subrutin Check_Address. Bytealamat yang diterima tersebut disimpan di register A untuk kemudiandibandingkan dengan alamat slave yang bersangkutan yang disimpan dialamat RAM internal Address495. Alamat slave diperoleh dengan membacaP2 (R5485_ADD$ dan disimpan di Address495. Cara membandingkanalamat dilakukan dengan mengurangi isi register A yang telah menyimpanalamat dari master dengan memori internal Address495, hasilnya akan 0 jikaalamat sesuai.
|ika alamat sama, mikrokontroler akan mengirimkan byte ACK (karakter "!").Pada saat ini bit SM2 dan bit ke-9 atau bit paritas (TB8) bernilai 0. PinR5485_DIRyang menentukan arah data, di-set pada saat slave mengirim datake master dan di-clr pada saat menerima data dari master. Tahap selanjutnyaadalah menerima byte COMMAND yang dikirimkan oleh masrer. Ada 2kemungkirrln bytr'(:()MMAND yang akan diterima, yaitu master mengirim-karr tlatrr lr(.nliirturrrrr (lrytr' (;()MMANI) ylng tlitcrinta ,9li'l'7'/NG CMD atau
movmovrlcmovmovr1cmov1ca11movcp1jncmovmov
div_1:movr1cmovmovr1cmovdjnzmovmovmovmovc1rret
rL, aa, XLaXl , aa, XHaxH, aSUB16c, ZOV
div_1XH, ZHXl , ZL
a, 12aLZ, d
a, r3a
r7, dlv_loop23, r322, 12ZL, XHZO, XLzov
,*******************************************************5T1816:
mov a, XLc1r csubb a, YLmov ZL, amov a, XH
subb a, YH
mov ZH, amov ZOV, cret
Teknik Antarmuka dan Pemrograman I'likrokontroler AI89552
karakter "A") atau master meminta data (byte COMMAND yang diterima
DATAREqCMD atatt karakter "R"). Iika byte GoMMAND tidak dikenali,
mikrokontroler akan mengirimkan byte CMD-ERROft (karakter "E")'
pembacaan data pengaturan yang dikirimkan oleh komputer dilakukan di
subrutin Get-Setting. Namun sebelumnya mikrokontroler harus mengirim-
kan byte ACK sebagai tanda bahwa byte COMMAND telah dimengerti oleh
mikrokontroler. Seperti telah didefinisikan dalam protokol komunikasi,
komputer akan mengirimkan 5 byte data, yaitu STD TIME (1 byte) dan
pRoD qTY (4 byte karakter ASCII). Data diterima dari komputer dan
disimpan di memori sementara (Data_Buffl dengan metode pengalamatan tak
l"ngrrr.rg, dengan R0 menyimpan alamat memori dan R1 sebagai pencacah 5
byt".
Byte-byte tersebut kemudian dipindahkan ke alamat yang telah ditentukan
dalam pemetaan memori. Byte STD TIME langsung disimpan di alamat
Standard-Time karena STD TIME dikirim dalam bilangan heksadesimal,
sedangkan 4 byte PROD QTY harus diubah terlebih dahulu dari 4 byte
karakter ASCII menjadi bilangan 16 bit yang kemudian disimpan di PqHdan PQL. Pengubahan ini dilakukan di subrutir convert-2ASCllChar-
ToHexa, subrurin yang akan mengubah 2 karakter ASCII meniadi 1 byte
bilangan heksadesimal. Karakter ASCII dibaca dengan metode pengalamatan
tak langsung dengan R0 digunakan sebagai penuniuk alamat (Data Buff+I)
dan disimpan di A. Pengubahan sebenarnya dilakukan di subrutin
ASCII-To-Hex.
Pertama karakter ASCII tersebut dicek apakah berada di antara 0 sampai 2FH
atau tidak, jika ya berarti karakter tersebut bukan digit heksadesimal karena
dalam tabel ASCII karakter "0" dalam bilangan heksadesimal adalah 30H' Hal
ini bisa dilakukan dengan mengurangi karakter ASCII tersebut dengan 30H.
Jika bit C di-set, artinya ada bit pinjaman, berarti karakter ASCII berada di
bawah 30H (bukan digit heksadesimal). Cara ini memerlukan 2 instruksi,
yaitu meng-clr bit c sebelum instruksi PenguranSan dan instruksi
pengurangan itu sendiri. Cara lain yang dapat dilakukan adalah dengan
menambahkan DOH kepada karakter ASCII (DOH = 100H - 30H) sePerti yanS
dipakai dalam subruth ASCII-To-Hex di atas. ]ika karakter ASCII tersebut
bernilai kurang dari 30H, maka penjumlahan tersebut tidak akan meng,eset
bit c. Program akan langsung melompat ke label Not- Num dan bit Error l"
di-set.
R1485: Jaringan l'likrokontroler
Selanjutnya, jika hasil penjumlahan mengeset bit C, karakter ASCII dicek lagiapakah kurang dari 3AH atau tidak (karakter "0" - "9"). Oleh karena karakterASCII sebelumnya telah ditambahkan dengan D0H, maka program harusmengecek apakah akumulator menyimpan bilangan kurang dari OAH.
Dengan cara yang sama F6H ditambahkan ke akumulator (F6H = 100H -OAH). Jika penjumlahan ini menghasilkan bit bawaan, program akanmelompat ke Hex_Tryyang artinya bilangan hasil lebih dari 9 (karakter "A" -"F" atau "a" - "f'). ]ika tidak, berarti karakter ASCII berada di "0"- "9",
akumulator kemudian ditambahkan dengan OAH untuk mendapatkanbilangan heksadesimal yang benar (dari 0 - 9).
Selanjutnya adalah mengubah karakter 'A" - 'F" atau "a" - "f' menjadibilangan heksadesimal AH - FH di subrutin Hex_Try. Pertama bit ke-5 darikarakter ASCII di-clr, tujuannya untuk mengubah karakter "a" - "f' (hurufkecil) menjadi karakter "A" - "F" (huruf kapital). Berdasarkan tabel karakterASCII, huruf kapital diawali dari 4lH dan karakter ASCII untuk huruf kecildiawali dari 61H. Oleh karena kode ASCII untuk karakter "A? (41H) adalah
lebih 7 daripada kode ASCII untuk karakter "9" (39H), maka akumulatoryang menyimpan kode ASCII harus dikurangi 7, atau ditambahkan denganF9H (F9H = 100H - 7). Dari sini, hanya jika kode ASCII dengan bit ke-5 di-reset, tidak berada di antara "9" dan "A" akan mengeset bit C. ]ika tidak,program akan melompat ke Not_Num yang menandakan bahwa kode ASCIIyang diterima bukan bilangan heksadesimal.
fika bit C di-set, karakter ASCII berada di karakter "A" atau di atasnya. Halterakhir adalah menentukan apakah kode ASCII berada di bawah karakter"F". Untuk itu akumulator harus dikurangi 6 atau ditambah FAH. Jika bit Cdi-set, kode ASCII berada di atas karakter "F" (bukan bilangan heksadesimal);jika tidak, bilangan heksa akan berada di nibble bawah akumulator. Untuk ituregister A di-AND-kan dengan OFH dan bilangan heksadesimal yangdimaksud tersimpan di A yang kemudian disimpan ke alamat PQH danPqH. Tentu saia hal ini dilakukan 2 kali.
Setelah menyimpan data pengaturan yang dikirim oleh komputer, mikro-kontroler akan mereset memori yang digunakan untuk menyimpan outputaktual @Cf_H dan ACT_L) dan output target ( TG_H dan TG_L). Timer 0
kemudian diaktifkan sehingga mikrokontroler akan mulai menghitungoutput target sesuai waktu standar.
493497
495494 Ieknik Antarmuka dan Pemrograman I'likrokontroler AT89S52
Apabila byte COMMAND yang diterima adalah byte untuk meminta data,
mikrokontroler akan mengirimkan data melalui subrutin Send_Data. Sesuai
dengan protokol komunikasi, data-data dikirimkan sebagai karakter ASCII.
Untuk itu data diubah terlebih dahulu menjadi karakter ASCII. SubrutinSend_ASCILData akan mengubah bilangan heksadesimal menjadi karakterASCII (oleh subrutin NibbleToASCIl) dan mengirimkannya ke komputer.Penjelasan mengenai subrutin NibbleToASCII bisa dilihat di Bab 7. Data yang
dikirim terdiri atas 14 byte (bilangan heksadesimal akan menjadi 2 bytesetelah diubah menjadi ASCII) ditambah dengan 1 byte ACK.
Pembacaan saklar ouput dilakukan dengan menggunakan metode interupsi.Setiap kali saklar tersebut ditekan, interupsi eksternal 0 akan dibangkitkandan program akan melompat ke alamat ISR interupsi eksternal 0 gNT-fSR
atau 0003H). Hal pertama yang dilakukan adalah membaca bit. Setting_Flag.
|ika bit ini belum di-set, berarti data pengaturan belum dikirimkan olehmaster (komputer), dan program tidak akan memproses interupsi ini lebihlanjut dan langsung keluar dari subrutin interupsi eksternal 0.
Program kemudian akan memanggil subrutin Update_Actual_Output jlkadata telah dikirim dari master (brr Setting*Flagdt-set). Setelah menyimpan isiDPTR, akumulator, dan register B ke memori stack serta memanggil subrutinDelay untuk menghindari bouncing, program akan mengecek bitOutput_Flag. lika bit ini di-set, berarti output aktual sudah sama dengan
jumlah produksi (PROD QTY), dan program langsung keluar dari subrutininterupsi. iika tidak, program akan menambah I jumlah aktual yang dalam
program disimpan sebagai ACT_H dan ACT_I dengan cara dipindahkan ke
DPTR yang kemudian DPTR dinaikkan dengan instruksi inc. Setelah
dinaikkan, isi DPTR kemudian dibandingkan dengan isi RAM yang
menyimpan PROD qIY (Pqg dan PQ_L). fika keduanya sama, bitOutpur_Flag akan di-set. Isi DPTR kemudian disimpan kembali ke ACT_I{dan ACT_L Program kemudian mengirimkan nilai baru ini ke display
dengan memanggil subrutin SS_Display_Command. Setelah mengambilkembali isi register yang disimpan di memori stack, program akan keluar darisubrutin interupsi ini.
/ika tidak terjadi interupsi (eksternal atau port serial), mikrokontroler akan
menghabiskan waktunya untuk menjalankan program di subrutin MainProg_Loop. Mikrokontroler akan membaca bit ovcrflow 'l'irne'r 0 ('l'1.'0), dimana Timer 0 bekcrla rli nrorlt,0 (tirncr lll bit) tlirrr irkurr lktil jikl rlltir
R1485: Jaringan l,likrokontroler
pengaturan telah dikirimkan oleh komputer. Timer 0 akan mengalamioverflow setiap 8192 mikrodetik dengan dibantu oleh Timer_counterl yangdiisi 7AH (122), maka akan ada waktu tunda sebelum mikrokontrolermengerjakan program selanjutnya sekitar 8192 x 122 = 999.g40 mikrodetikatau kira-kira 1 detik. Register Timer_counter2 kemudian dinaikkan dankemudian dibandingkan dengan waktu srandar (standard_Time). lika sama,output target harus dinaikkan dan dibandingkan dengan jumlah produksi(prosesnya sama dengan proses unruk ourput aktual). Bit Target_Flagakan di-set iika output target telah mencapai jumlah produksi. Display kemudiandiperbarui, dan program akan melompat kembali ke Main_prog_Loop.
Proses pengiriman data ke display 7 segmen dilakukan dengan teknik registergeser, seperti yang telah dijelaskan di Bab 6 (program Tsegmen4.asm).Bedanya dalam program ini menggunakan l0 buah 7 segmen, sehinggapengiriman data dilakukan 2 kali.
495 Teknik Antarmuka dan Pemrograman ilikrokontroler AI89S52
BAB IIAI.I\T PENGEMBANGAN
Untuk mengembangkan aplikasi berbasis mikrokontroler, diperlukan sebuahalat pengembangan (development tool yang meliputi sofrware dan hardware.Software digunakan untuk membuat program mikrokontroler dalam bahasa
assembler atau dalam bahasa tingkat tinggi (bahasa C misalnya), meng-compile, dan memprogramkannya ke memori flash internal AT89S52.Sedangkan hardware digunakan untuk antarmuka dengan komputer pada
saat memprogram memori flash internal. Oleh karena AT89S52 mendukungin-system programming, maka hardware di sini adalah sistem minimum.Salah satu software untuk keperluan ini adalah Programmer 2. 15.
I I.I PROGRAMMER 2.15Programmer versi 2.15 adalah sebuah software yang secara khusus di-kembangkan untuk memprogram, membaca, atau menghapus memori flashinternal mikrokontroler AT89S52. Programmer 2.15 |uga dilengkapi dengan
editor teks yang bisa digunakan untuk membuat program dalam bahasa
assembler 8051 yang kemudian di-compile dengan 8051 Cross AssemblerdariMetalink Corporation (ASM5 1.exe).
I I.I.I INSTALASI PROGRAMMER 2.I5File-file yang diperlukan untuk menginstal Programmer 2.15 bisa ditemukandi CD pendukung lProgrammer 2.15. Untuk memulai instalasi tinggalmenjalankan file Setup.exe. Setelah muncul window selamat datang (Gambar
11.1), klik tombol l/exr dan ikuti proses instalasi seterusnya. Ketika prosesinstalasi menanyakan serial number (Gambar 11.2), ketik serial number-nya'1458-DFG-7896-0KIL" lalu klik tombol Nextlagi. Kemudian muncul dialoguntuk menentukan di mana lokasi folder tempat menginstal Programmer.Klik tombol Browse untuk mengganti lokasi penginstalan atau langsung kliktombol M,.rt. Ikuti proses intalasi selanjutnya sampai selesai.
499498 Ieknik Antarmuka dan Pemrograman t'likrokontroler AI89S52 Alat Pengembangan
Choo$e De$tinalion Locdtion
Select lolder where Setup will install files
Setup will install Programmet in the followrng folder.
To instell to lhis folder. Elick Next. To install to a dillerent lolder, click Browse and seleclanolher foldet.
Destination Folder
C:\ProEam Files\U-2 Technoloqies\ProEammer
:q::l
_tHhWtP I----t
1- N"rD I cancet I-.- :
Gombor I 1.3 Pemilihon Iokosi lnslolosi
Programmer 2.15 bekerja dengan baik di Windows 98, 2000, atau XP. UntukWindows Vista, Pogrammer 2.15 belum bisa berfungsi dengan baik, terutama
pada proses compile dan proses download ke memori flash. Pada saat
menginstal, pada Windows 2000 atau XP harrs login ke Windows sebagai
administrator; jika tidak, instalasi mungkin tidak akan berjalan dengan baikatau walau bisa diinstal, Programmer tidak bisa berjalan dengan baik.
II.I.2 CARA MENGGUNAKAN PROGRAMMER 2.I5Programmer dijalankan dengan menjalankan flle Programmer.exe yang ter-dapat di folder yang ditentukan pada saat instalasi atau dengan menggunakan
shortcut di Start MenuWindows. Tampilan awal Programmer diperlihatkanoleh Gambar 11.4.
I t.l.2.l Membuol dqn Meng-Compile ProgromAssembler
Programmer 2.15 dilengkapi dengan editor teks yang berfungsi untuk mem
buat program dalam bahasa assembler. Jika editor teks ini tidak terlihatkarena ditutup misalnya, bisa dimunculkan kembali dengan membuat fileasscrrrlrlt'r lrrrrtr rlt.rrgan menggunakan menu FilelNew(shortcut CTRL+N atau
Gqmbqr I l.l Window Selomot Dotong
Welcome to Proqrammer Setup
This program will install Ptoqtamma onyout computer. lt is
stronqly recommended that you eHit Ell\y'indows ptollramsbelore runninq this Setup program.
lJser lnlormation
Enter you registration infotmdtion.
Pleare enter your name, the nEme of the company fot whom you work and the ptoducl
serial number.
Name: lr..unq Liirun
Company: lU 2 r"chnologies
,-5eilal: ll
.. ,1 . ::*. i
Gombqr I 1.2 Memosukkon Seriol Number
50t500 ir:l.nik Antarnuka dan Pemrograman Miki,rkontroler AT89S52
Gombor I 1.4 Iompilon Awol Progrommer
Setelah disimpan, program bisa langsung di-compile melalui menu
Assembler/Compile (shortcut F9 atau tombol / )' Programmer kemudian
akan memanggil dan menjalankan cross assembler 8051. seperti telah
dijelaskan, Programmer menggunakan cross assembler 8051 dari Metalink
corporation (file ASM51.exe) yang merupakan sebuah aplikasi DoS. Secara
normal jika program ini dijalankan melalui promptDOS akan meminta nama
file dalam formar Dos (8 karakter), namun melalui Programmer r1ama lilc
program assembler tetap bisa melg,gunakall ilttlran Wirrtlows (narna filc
Alat Pengembangan
panjang), dan pada saat di-compile, Programmer-lah yang akan mengubahnama file panjang tersebut menjadi format DOS.
Pada saat meng-compile, ASM51 akan menghasilkan 2 file, yaitu file listing(dengan ekstensi lst) dan file heksa (dengan ekstensi hex). Programmer akanmembuka file listing tersebut dan melakukan pengecekan kesalahan program(error). Jika ditemukan error dari file listing, Programmer akan membaca
semua error dari file listing (error summar) dan menampilkannya diwindow Assembler Report untuk mempermudah perbaikan kesalahan
tersebut. Pada saat ini, file heksa yang dihasilkan oleh ASM5I akan dihapusoleh Programmer, kecuali jika sebelumnya file heksa telah terbentuk. ASM5 itetap akan menghasilkan file heksa walaupun di program rerdapat error,tetapi file heksa yang dihasilkan tidak akan berisi data.
DI*B€}
BIPORT FOR Slaue.aso:ERROR N17:EnnoR [17:tRf,0R sl7:ERn0R A17:ERn0R [17:En80n s2:
tl ;rs:uillsfl Tjs,iii:,$"iii''
t:r{- l
tombol D; ,tu, dengan membuka file assembler yang sudah-ada dengan
FitelOpen (shortcut CTRL+O atau dengan mengklik tombol @1' P'og'^
assembler yang telah selesai dibuat atau di-edit bisa langsung disimpan
dengan melrrt File/Sare(shortcut CTRL+S atau tombol EI; ,ru, File/Save As
jika diinginkan disimpan dengan nama file yang baru. File bisa disimpan
sebagai file assembler dengan ekstensi asm, sebagai file teks (ekstensi txt) atau
tipe file lain. Namun disarankan untuk menyimpannya sebagai file assembler
alar file tersebur bisa dibuka dengan Programmer ketika di klik ganda di
Windows Explorer.
bit desiqn.torbit desiqnatorbit designatorbit designatorbit desionator
RsT Pin stntur I Underircd (Mcrocohofl.r rs und.frcd) Ern checl. . .&ne
Gombor I 1.5 Progrommer Menemukon l(esolohon podo Progrom
|ika Programmer tidak menemukan kesalahan di file listing, Programmerakan membuka file heksa yang dihasilkan dan menuliskan pesan di windowAssembler Report "NO ERROR FOUND"" File heksa yang dibuka terseburbisa langsung di-download ke memori flash AT89S52 seperri yang akandijelaskan.
Fib E& vE{ ^'+ilhr
Pi9rylmn9 whd:w Hlh
D6}$g : ,,:f .': ,q qP.i,:irf"rlit S S ^ ,it 0
RsI qnstatusr Undtfin.d (M,oo.onholler it undefin.d)
IIBLESt2l ,128,t29 ,il3 0,[31 ,1360,
Teknik Antarmuka dan Pemrograman I'likrokonttol'lAl8gg Alat Pengembangan
Dalam ASM51, sebuah program assembler bisa mengakses atau menggunakan
subrutin atau tabel data dari file assmbler yang lain. Caranya dengan
menggunakan sebuah pengarah yain $INCLUDE, misalnya
SINCLUDE ( C : MyASM. asm)
Pengarah INCLUDE mensyaratkan nama file beserta letak direktorinyadituliskan secara lengkap. |ika nama direktori tidak dituliskan, ASM51 akan
mencari file di direktori yang sama dengan letak ASM51.exe. Nama file dan
direktori tersebut harus dalam format DOS, yang akan menyrlitkan jika filetersebut terletak di direktori dengan nama direktori dan nama file yangpanjang. Oleh karena itu, Programmer menyediakan fasilitas untukmengubah nama file tersebut menjadi format DOS, yaitu melalui menu
Assembler/Include File (atuu to.rrbol H ).
0pen file to be included in the program
el,r:r J iss:-i
Gombor I1.7 Kolok Diolog lnclude tile
Sebuah kotak dialog akan muncul seperti diperlihatkan oleh Gambar 11.7.
File include dibuka dengan tombol buka, pada kotak dialog buka file, pilihlahfile yang dimaksud. Secara otomatis, Programmer akan mengubah nama filedan direktorinya menjadi format DOS dan menampilkannya di kotak editdengan pengarah INCLUDE di depannya. Untuk memasukkan deklarasi inike dalam program assembler, klik tombol Insert. Pernyataan INCLUDE iniakan diletakan pada posisi kursor di file assembler, untuk itu harus dipastikanprogram atau subrutin yang menggunakan deklarasi (konstanta, alamatmemori, pendefinisian port dan lain-Iain) di bawah pernyataan INCLUDE.Pernyatan INCLUDE bisa diletakan di akhir program sebelum pernyataan
END, jika file INCLUDE hanya berisi subrutin yang bisa dipanggil dengan
instruksi call atau instruksi jmp.
Menu-menu lain yang digunakan dalam pembuatan program assembler
adalah menu-menu standar seperti Copy, Paste dan lain-lain yang terdapat dimc'nu li./rr. Selain itu Programmer juga menyediakan menu untuk mencetak(l't'ittt), hirik prograrn assembler, file listing ataupun file heksa yang aktif saat
503502
ASM51memerlukansemuaalamatSFRdidefinisikandalamprogram,jikatidak ASM51 akan menghasilkan error' Untuk mempermudah' ASM51
menyediakan sebuah furrg,i p"t'g' rah (directive) ke sebuah file yang berisi
definisialamat_alamatSFR.P"d',""tinstalasiProgrammer,file-filedefinisiini di-copy-kan ke direktori tempat i'og'u-"'"t diinstal' misalnya file
MOD51, MOD52 dan sebagainya' Untuk menggunakan file definisi tersebut
dalam bahasa assembler, digunakan tanda "$" (dollar), misalnya jika
menggunakan file MOD52 maka perintah assemblernya adalah
$MOD52
i iii'si oocia0is$rz s127F s\s6a126121 F s46753F
r oor iiaoqr oozslz os75!3 00754400c2 02c203021 8
i oor za oo&oztczzrt120l 36c4F5F008r61 201s639
credte h"x file,,.doncMcs51 Comdler
Gombor I 1.6 Tidok odo [rror di dolom Progrom
Programmer2.15akansecaraotomatismenambahkaninstruksitersebutkedalam bahasa assembler pada saat compile' Walaupun instruksi itu tidak
dimasukkankedalamprogramasal,instruksitersebutbisadilihatdifilelisting.Padasaatdijalankan,ASM5lakanmencarifileMoD52padadirektoriyang"sama dengan ASM51'exe, jika tidak ketemu ASM51 akan mencari file
tersebut di drive A. oreh karena itu tidak diperkenankan menghapus file-file
yang ada pada direktori tempat Programmer terinstal karena akan membuat
Programmer tidak akan bekerja dengan benar'
o6E6 I B,Bffi G,6 B S
:1 000530050F8:1 000638606300302uuE:10007300f5!5C395FoC
1 0008308F 0D0E 0{qF07:1800930S02:l 0Bofi3outtYYU:1 00083087421t
Teknik Antarmuka dan Pemrograman l'likrokontroler AI89S52
itu. Pencetakan dilakukan melalui mer:u File,/Prinr (shorcut CTRL+P atau
tombol H ), du.i kotak dialog pencetakan, pilih file mana yang akan dicetak'
Gombor I1.8 Kotok Diolog Pencetokon
programmer menggunakan port paralel (port printer) pada saat memprogram
memori flash AT89S52, karena itu iika printer yang digunakan masih
menggunakan port paralel, proses pencetakan dan pemrograman harus
dilakukan secara bergantian.
11.1.2.2 Memprogrom Memori Flqsh AT89S52
program assembler yang sudah di-compile dengan tidak ada kesalahan bisa
langsung diprogramkan arau "di-download" ke memori flash AT89S52. Pro-
grammer menggunakan port paralel untuk proses download ini. Selain itu'
diperlukan rangkaian antarmuka khusus agar Programmer bisa memproSram
atau membaca isi memori flash AT89S52 seperti yang akan dibahas di subbab
selanjutnya.
Sebelum melakukan proses download atau operasi pembacaan memori, perlu
dilakukan proses pengaturan terlebih dahulu. Proses Pengaturan dilakukan
melalui men' programming/Setup (shortcut F7 atau tombol {[] ;. r"rrg-
aturan ini dilakukan untuk memilih alamat port Paralel' mode bit pengunci
memori (memory lock bit), dan menentukan kondisi pin RST setelah proses
download selesai.
Alamat port printer d.iatur dengan memilih LPTI Address. Ada tiga alamat
yang bisa dipilih melalui meut drop down yaioJ_ 278, 378 atau 3BC. Alamat
port printer yang terinstal bisa dilihat baik melalui BIOS, dengan masuk ke
menu BIOS pada saat PC dinyalakan, atau melalui ment Device Manager
yang ada di windows, caranya dari Control l'anel pililr ,s'vsrt'rr. Sett'lah
Alat Pengembangan
muncul kotak dialog SystemProperties, pilih tab Hardware lalu klik tombolDevice Manager. Dari kotak dialog tersebut pilih Ports (COM&LPf dan klikkanan untuk melihat properties-nya. Dari kotak properties tersebut, pilih tab
Resource, alamat port printer bisa dilihat di I/O Range. Ilustrasi yang ada dibuku ini mungkin akan berbeda dengan komputer yang lain.
Chip Type LPT I Address
1., : ':
Lock Bit Protection Mode
r* Mode l
i"' Mode 2
i* Mode 3
.'i[;J*J
l? Direct Programming
*-] 78 ..i".1,
HST Pin State after Programming
ii Low
r' High
Supply Voltaqe lVolt] .
| ' "-" " '""'"'".. --*- - - *- -1
--J
X'Tal Frequenc! [MHz]i- --':-"- - *-- *- "-"**l| .,-.,.)
:-:
Gombqr I 1.9 (olok Diolog Pengoluron
Mode pengunci memori bisa dipilih dengan mengklik pilihan Lock BitProtection Mode. Ada 4 mode yang bisa dipilih: mode 1, 2, 3 dan 4.
Keterangan mengenai mode-mode telah dibahas di Bab 3, secara singkat bisa
dijelaskan bahwa mode 3 dan mode 4 akan membuat memori flash AT89S52
terkunci (tidak bisa dibaca kembali atau diprogram lagi tanpa dihapus
terlebih dahulu).
Programmer versi 2.15 ini hanya bisa digunakan untuk memprogram mikro-kontroler AT89S52, karena itu menu untuk memilih tipe mikrokontroler(Chip Type) tidak bisa diubah-ubah. Walau demikian, beberapa mikrokon-troler yang dikeluarkan oleh Atmel mempunyai protokol pemrograman yang
sama, misalnya AT89S51 (dengan memori flash internal 4 KB) menggunakan
protokol 4 byte yang sama dengan AT89S52. Oleh karena itu Programmer
2.15 juga bisa digunakan untuk memprogram memori flash AT89S5l.
505504
fhoice the Document
la Assembler File
I-' Listing File
; ' Hexa File
f
507506 Teknik Antarmuka dan Pemrograman Mikrokontroler AI89S52
File Aation
;+i!m
view Help
ge @ E a€EA:] !j[ INNOVATION
*; * computer; ;, Disk drives
1 1/ Display adapters
+-.;l DvDicD-RoMdrives'I: ,S Floppy ditk controllers
+ .,!$ Floppy diskdrives
it tA IoE ATA/ATAPI conlrollErs
i+: ip Keyboards
+l I l4ire and other pointing devices
ir * l"lonitors
-. J po*s(coualpr)/ Communications Po* (Col*l1 )
JESEMreINi+l *- Processort
. e 5c51 and RAID conhollert+ $ sound, video and game Eontrollers
+ t, slorage volumes
+ "J Syslem devires
* { Universal Serial 8us controllers
Gombor I I '10 l(olok Diolog [)evice Monoger
Hal yang harus diperhatikan adalah kapasitas memori. Programmer akan
menghitung ukuran memori dari file heksa yang akan diprogramkan' Jika
ukuran memori itu melebihi ukuran memori AT89S52, Programmer akan
memberikan pesan dan proses pemrograman tidak akan bisa dilakukan. Jika
yang diprogram adalah AT89S51, maka Proses Pemrograman akan tetap bisa
berlangsung (walaupun file heksa melebihi 4 KB). Namun AT89S51 hanya
akan menerima memori maksimum sebesar 4 KB (0000H - QFFFH). Ketika
Programmer mengirimkan data untuk alamat di atas alamat 0FFFH, misalnya
1000H, maka oleh AT89S51 akan dianggap sebagai alamat 0000H. selama
ukuran memori kurang dari 4 KB, Programmer 2.15 bisa digunakan untuk
memprogram AT89S51.
Alat Pengembangan
General'i PortSettihgs Diivet.
',1p e,int", eo,t lLett;:PEesource setlings:
i nu**"" ryp" s"tii"g
llti@ or7B-037F
DetBils Resources
g Use automdtic settings
Conflicting device list:
tto ioniticts.
[-lra:l T c*"r-l
Gombar I I.l I Alomot Porl Printer
Sebelum melakukan pemrograman, Programmer akan membaca isi memoriAT89S52 yang akan diprogram. Ada 4 kemungkinan dari hasil pembacaan ini,yaitu memori AT89S52 masih kosong, sudah terprogram, memori flash telahterkunci (bit pengunci memori telah diprogram), atau Programmer tidak bisamembaca status memori karena mikrokontroler yang terpasang di soketsudah rusak atau yang terpasang memiliki protokol pemrograman yangberbeda (misalnya AT89S8252) atau tidak terpasang sama sekali. Programmerakan langsung melakukan pemrograman jika membaca isi memori masihkosong, sedangkan jika memori terprogram atau terkunci, Programmer akanmemberikan konfirmasi apakah proses pemrograman akan tetap dilanjutkanatau tidak, karena proses pemrograman akan menghapus isi memori yang ada.
Hal ini ditentukan oleh pilihan Direct Programming. Jlka Direct Program-ming diplllh, dengan mengecek kotak cek (check box), Programmer akanlangsung melakukan proses pemrograman, jika tidak sebuah konfirmasi akanditanyakan oleh Programmer. ]ika Programmer tidak bisa membaca statusmemori, proses pemrograman tidak akan bisa dilakukan.
Setelah proses pemrograman selesai, mikrokontroler bisa diatur untukIarrg,sung rnt'rrjalankan program yang baru saja diterimanya dengan mengatur
Ieknik Antarmuka dan Pemrograman I'likrokontroler AT89S52 Alat Pengembangan
jika di tengah proses pemrograman catu daya terputus atau ada alamat
memori flash yang tidak bisa diprogram (yang menyebabkan proses verifikasigagal), Programmer akan menghentikan proses pemrograman.
Programming the Flash Memory Aray...
reffi
Gombor I l.l 2 Proses Pemrogromon Sedong Berlongsung
I 1.t.2.3 Membqco don Menghopus Memori FloshAT895s2
Selama bit pengunci memori diprogram pada mode 1 dan 2, isi memori flash
AT89S52 masih bisa dibaca kembali. Menu untuk membaca kembali isi
memori flash AT89S52 adalah Programming/Read Flash Memory (shortcut
F3) atau melalui tombol IEI . Seperti hainya proses pemrograman, pembacaan
memori juga diawali dengan mengecek koneksi antara Programmer (PC)
dengan perangkat pemrograman (FP-S100X) dan status memori AT89S52.
]ika koneksi tidak terdeteksi atau status memori tidak bisa dibaca, proses
pembacaan tidak akan dilanjutkan.
Sebuah window akan tampil untuk memperlihatkan data yang terbaca sesuai
dengan alamatnya (dengan nama "AT89S52 - Flash Buffer (8 kbytes").
Berbeda dengan proses pemrograman, yang hanya memprogram sesuai
dengan alamat yang ada di file heksa, proses pembacaan dilakukan untuksemua alamat memori dari 0000H - 1FFFH (8 KB). Memori yang kosong akan
menghasilkan data FFH untuk semua alamat, sedangkan memori dengan bitpengunci diprogram pada mode 3 dan 4 akan menghasilkan data 01H, 02H,
03H, 04H, ..., FFH, 00H, 01H, ..., FFH yang berulang. Programmer akan
menampilkan jalannya proses pembacaan memori dan proses ini bisa
dihentikan dengan mengklik tombol Cancel.
509
508
kondisi pin RST setelah pemrogramar (RST Pin state after Programing)' Ada
2 pilihan yaitt Lowdan^High'fika pilihannya Low' setelah pemrograman pin
Rit ^kr.t menjadi logika rendah (0 V) dan AT89S52 akan langsung
menjalankan program, ,"d"ttgk"" jika pilihannya High' setelah pemrograman
pin RST t"t"p alogika tinggl (5 V) dan AT89S52 tetap dalam keadaan reset'
Untuk menjalankan afgSIiZ yang dalam keadaan reset ini bisa dilakukan
dengan ment Programming/Run ie'ic" (shortcut F6) atau dengan mengklik
-rLtombol
Setelah melakukan pengaturan dan menyimPannya dengan mengklik tombol
OK darikotak dialog Pengaturan' Proses Pemrograman bisa segera dilakukan
melalui ^"nu Progir-i;'g/f'og*- Flash Memory (shortcut F2) atau
dengan meng-klik tombol lffi ' O"t'8"' catatan harus ada file heksa yang aktif
saat itu, misalnya hasil dari compile program assembler yang telah dibuat'
|ika tidak "d"
iil" heksa yang aktif' Programmer akan memberikan konfir-
masiuntukmembukafileheksa'Kotakdialogpembukafileakanditampilkanuntuk membuka file heksa yang akan diprogramkan' Untuk membuka file
heksasecaramanualbisadilakukanmelaluimenlAssemb]er/LoadHexaFi]e
(shortcut F6) atau dengan tombol ffi ' *""o ini juga bisa digunakan untuk
memProglamkan file h'eksa hasil compiler yang lain, misalnya file heksa yang
terbentuk dari comPiler C'
Proses pemrograman akan segera dilakukan' sebuah kotak dialog akan di-
tampilkan untuk menunjukkan jalannya pemrograman' Pertama Programmer
akanmengecekkoneksidenganrangkaianantarmukapemroSraman(yangdinamakan dengan Fp-slooxt |ika koneksi tidak terdeteksi, misalnya karena
kabel FP-S100X belum dihubungkan dengan port printer atau- catu daya
belum dinyalakan, Programmer "ku' -"tb"rikan pesan bahwa komunikasi
dengan FP-S100X tefan gagal dan proses pemrograman tidak akan
berlangsung' Sedangkan jika' ioneksi berhasil' Programmer akan membaca
ukuran file heksa dan membaca status memori AT89S52 seperti yang telah
dijelaskan di atas'
Proses pemrograman ditunjukkan melalui Progress bar (Gaybar 11'12)'
ProsespemrogramaninibisadibatalkanmelaluitombolCance].Programmerakan memberikan konfirmasi pembatalan' )ika pembatalan dilakukan'
Programmer akan menghentikan proses l)('lnrogramiln tlan lika titllk'
l)r,gramrnt r akan melan jutkal prost.s pcnlr()gr iunrrr sirtttPlti st'lt'slri Kt't ttilli
5il5t0 Teknik Antarmuka dan Pemrograman l'likrokontroler AT89552
Gombor I l.l3 Proses Pembocoon Memori Flosh
Hasil pembacaan memori yang tersimpan di buffer ini bisa disimpan menjadi
file heksa melalui menu ,4sserz bler/Save Flash Buffer to Hex.&7e (shortcut
Fl1) atau mengklik tombol ffi. fo,"k dialog penyimpanan file akan muncul
untuk meminta nama file heksa yang akan disimpan. Format file heksa
disimpan dengan mengikuti aturan file heksa yang dikeluarkan oleh Intel.
Seperti telah dijelaskan, sebelum melakukan pemrograman atau pembacaan
memori, Programmer akan mengecek status memori flash AT89S52. Untukmengetahui status memori flash tanpa harus melakukan proses pemrograman
atau pembacaan isi memori flash, bisa dilakukan dengan menu Programming/
Chip Status (shortcut F5) atau mengklik tombol B. Oau 4 kemungkinan
status memori yaitu memori terprogram Qtrogrammea), memori terkunci(Locked), memori kosong (Blank), dan status memori tidak bisa terbaca
(Undefrned).
Microcontroller Memory 5tatus: Locked
Alat Pengembangan
Fasilitas terakhir adalah menu unruk menghapus memori flash ATS9S52.Untuk menghapus isi memori flash AT89S52 dilakukan dengan menu
Programming/chip Erase (shortcur F4) arau dengan mengklik tombol B.Programmer akan memberikan konfirmasi apakah proses penghapusanmemori akan dilakukan atau tidak. Seperti proses yang lain, prosespenghapusan memori juga akan diawali dengan proses pengecekan koneksiPC dengan FP-Sl00X dan srarus memori Flash AT89S52.
Chip Erase will erase the contents of the Chip Memory! !
Are you sure to continue?
No _i
Gombor I I.l5 (onfirmqsi penghopuson Memori
I I .2 ANTARMUKA PROGRAMMERunruk bisa melakukan proses pemrograman memori flash ATg9s52, pro-grammer memerlukan sebuah rangkaian antarmuka yang akan menghubung-kan komputer melalui port paralel dengan sisrem minimum ATg9s52.Rangkaian anrarmuka (yang dinamakan dengan Fp-s100x) bisa dibuat dalamsatu PCB (Printed circuit Board) dengan sistem minimum arau dibuatterpisah.
t t .2.r RANGKATAN ANTARMUKA (Fp-S r oox)Rangkaian antarmuka (FP-s100x) digunakan unruk menghubungkan sistemminimum AT89s52 dengan kompurer melalui port printer. Rangkaian inidirancang agar bisa melakukan pemrograman memori flash secara ISp denganmenggunakan sedikit komponen. sebuah IC buffer digital (IC101) digunakanagar setelah proses pemrograman AT89s52 bisa langsung menjalankanprogram tanpa harus memutuskan hubungan antara Fp-s100x dengan sistemminimum (terutama jika rangkaian Fp-Sl0oX dibuat dalam satu pCB dengansistem minimum). Pada saat pemrograman, pin RST akan berada di logikatinggi. Hal ini akan membuat pengendali buffer juga akan berada di logikatinggi. St'hingga semua buffer akan bekerja dan komunikasi anrara komputer
rhBqrEbl$BE^.90
I5 AS Ff tt 8! FF 20 '!
tD t2no 12 00 tf D2 91 aa EE ,g 2einr932007cd7a1!r41056qeo0e363108F20arr83E52Ct3152!G328520
rd t:!@c:,B':!D!:
0M!:tlrr:
0m!:cmt:0c0:00t:nda:
Gombqr I I.l4 Slolus Memori lerkunri
5r35t2 Ieknik Antarmuka dan Pemrograman l''likrokontroler AT89552
dengan sistem minimum akan terjalin. Sedangkan saat pin RST berlogika
rendah, semua buffer tidak akan aktif dan buffer menjadi berimpedansi tinggi(high impedance). Pada kondisi ini sistem minimum bisa bekerja tanpa
terpengaruh oleh koneksi dengan port printer walaupun koneksi tidak
diputus.
Apabila rancangan PCB FP-S100X disatukan dengan sistem minimum, buffer
harus menjadi tidak aktif saat tidak dihubungkan dengan komputer. Oleh
karena itu, sebuah resistor pull down dipakai untuk menghubungkan semua
pengendali buffer dengan GND. Hal yang harus diperhatikan adalah pemilih-an tipe IC buffer. Untuk rancangan PCB yang disatukan, sebaiknya
digunakan tipe IC 74HC726. Karena jika digunakan tipe 74L5126 pada saat
tidak dihubungkan dengan komputer, akan ada tegangan sekitar 2.0 V di pin
12 dan pin kendali semua buffer walaupun ada resistor pull down. Hal iniakan membuat IC101 menjadi aktif dan keluaran pin RST (pin 11) akan
menjadi berlogika tinggi, yang akan me-reset AT89S52.
cN1 01
FST
+5V
c4021nF
Alat Pengembangan
Transistor Q101 digunakan untuk memberikan sinyal koneksi dengankomputer. Programmer akan mengecek koneksi dengan membaca keluarankaki kolektor transistor ini (sinyal DEVSTATE). lika FP-S100X belumdihubungkan dengan komputer atau catu daya belum dinyalakan,Programmer akan memberikan pesan error.
Untuk menghubungkan FP-S100X dengan komputer, digunakan kabelkhusus (Gambar 11.17). Kabel ini terdiri atas konektor DB25 rzale untukdihubungkan dengan port printer komputer dan sebuah konektor 6 pinuntuk dihubungkan dengan FP-S100X. Panjang kabel sebaiknya diatur agartidak melebihi 2 meter karena kabel yang terlalu panjang akan menghasilkansinyal noise yang lebih tinggi, yang akan memengaruhi proses komunikasiantara komputer dengan FP-S100):.
11.2.2
Gombor I l.l 7 Kobel Antormuko tP-Sl 00)(
SISTEM MINIMUM AT89S52
Sistem minimum adalah rangkaian minimum yang diperlukan agar AT89S52bisa menjalankan program. Rangkaian ini meliputi rangkaian osilator danrarrgkaian reset (untuk power on reset). Oleh karena AT89S52 memilikitttt'tttot i l)t ()grllt)) itrtcrnal, maka rangkaian untuk mengakses memori
(P1.n(F1 .E)(Pl .s)
MISOMOSt
R1 041rlflH
G101cs45
tc10174HC1 2E
R1 032K2
=
Gombor I l.l6 Rongkoion tP-5100X
(:I.l1 D3
IH4 OUT4IH3 OUT3OUTI INIIH? OUT2
5t55t4 Teknik Antarmul<a dan Pemrograman l,,likrokontroler AT89552
program eksternal (yaitu IC latch untuk alamat) tidak diperlukan selama
AT89S52 hanya menggunakan memori program internal yang dimilikinya.Resistor pull up eksternal diperlukan P0 karena keluaran P0 bersifat drain
terbuka.
Rangkaian sistem minimum yang diperlihatkan oleh Gambar 11.18 menS-
asumsikan bahwa AT89S52 akan selalu mengerjakan program yang ada di
memori flash yang dimilikinya (pin EA dihubungkan dengan VCC). Osilator
menggunakan sebuah kristal 11.0592 MHz (X400), mengingat pada frekuensi
ini banyak baud rate standar yang bisa dibangkitkan oleh AT89S52 pada
komunikasi serial.
Gombor I l.l8 Sislem Minimum AI89S52
Rangkaian reset disusun oleh C403 dan R400 untuk mereset pada saat catu
daya pertama kali dinyalakan. Sedangkan saklar SW400 digunakan untukmereset AT89S52 secara manual. Untuk keperluan pemrograman, tinggal
menghubungkan FP-SI00X dengan sistem minimum ini melalui pin-pin
seperti ditunjukkan oleh gambar. Semua port A'l'ttt)S52 rlihtrbtrngkan clengatr
---------
Alat Pengembangan
konektor 8 pin agar mudah untuk dihubungkan dengan rangkaian lain. GNDharus dihubungkan dengan rangkaian rersebur. Namun hal ini bergantungpada saat merancang PCB. Aplikasi mikrokontrorer yang lebih spesifikmemungkinkan semua perangkat atau IC yang dikendalikan oleh mikro-kontroler dibuat dalam satu PCB, sehingga rangkaian sistem minimum bisadisesuaikan dengan aplikasi.
I I.2.3 RANGKAIAN CATU DAYAsistem minimum dan rangkaian Fp-S100X memerlukan tegangan DC 5 vuntuk beroperasi. Tegangan ini bisa diperoleh langsung dari rumler teganganAC 220 v (PLN)' tentu saia setelah melalui proses penurunan tegangan danpengubahan ke tegangan DC oleh rangkaian regulator. Gambar 11.19 mem-perlihatkan sebuah rangkaian regulator sederhana yang akan menyediakantegangan 5 V dari sumber AC, transformator tidak diperlihatkan.
IC30B 78115
Gombor I l.l9 Rongkoion Cotu Doyo
Rangkaian regulator ini menggunakan sistem penyearah penuh dengan 2buah dioda, karena itu rransformator yang digunakan harus jenis cr (centertap) dengan tegangan AC sekunder 12y atau disesuaikan. Tegangan AC daritransformator akan disearahkan oleh dioda D300 dan D301. Kapasitorelektrolit c300 berfungsi sebagai filter yang akan menghaluskan tegangan DCyarrg rrrlsih lrt'rilcnyut dari rangkaian penyearah. Sebuah IC regulator
P0.0/AD0 P2.0l4€P0.i/AD1 P7.1/AP0.:/AI)2 P2.2tA10P0.3/AD3 P2.31411PO.4JAD4 P7.4IA1'P0.6/AD5 P?.5/Al3F0.6/ADE P2.6/A14P0.7/AD7 P2.7t415
P3 O/RXDF3.1,G9_P3.24!f9F3.3/[.1T1P3.tr0P3.5trLP3.B4g8P3,?/RORST
TALI
+
rSts
Pl.0mP 1 .1/rn. E(
Pl.2P1 .3P1 .4
P1.5rM0SlFt.8,l1,llS0P1,7/SCK
FSEii
ArE/FFEE
oz
11.0592 MHz
Esool I L
csorl -t "ro,10nr| -l* 100pF/16v
5r6 Teknik Antarmul<a dan Pemr:ograman Mikrokontroler AT89S52
tegangan digunakan untuk menurunkan dan menstabilkan tegangan yanS
sudah disearahkan menjadi tegangan 5 V. Keluaran IC regulator di-filter lagi
oleh kapasitor C301 dan c302. Sedangkan sebuah LED (D302) digunakan
sebagai indikator. IC regulator 7805 bisa menyediakan arus sampai 1 A, yang
cukup untuk rangkaian sistem minimum dan FP-S100X. ]ika diinginkan arus
yang lebih besar, sebuah penguat arus dengan transistor perlu digunakan.
DAFTAR PU'T'\T(A
Sencer Yeralan, Ashutosh Ahluwalia, Programming and Interfacing the
805 1 Microcontroller, Addison-Wesley, 1995
Myke Predko, Programming and Customizing the B051 Microcontroller,
McGraw-Hill,1999
Http://www.intel.com, MCS@ 5l Microcontroller Family Userb Manual,
Intel Corp., 1994
|ohn Wharton, An Introduction to the Intel@ MCS-517M Single-Chtp
Microcompu ter Family Intel Corp., 1980
http://www.atmel.com, A tm el 805 I Microcontrollers Ha rdware Manual,
Atmel Corp.,2004
http://www.atmel.com, A W9 Series Hardwate Description, Atmel Corp.,
t9q7
htrp://www.RomanBlack.com, Record + Play Fast l-Bit Sound on a PICRoman Black, 2001
Mariano Baron, Speech Waueform Encoder, Atmel Application |ournalNumber 7 Winter 2006, Atmel Corp., 2006
http://www.bb-elec.com, RS-422 and RS-485 Aplication Nore B&B
Electronics Manufacturing, 2006
|an Axelson, Designing RS-485 CircuiC Circuit Cellar, 1999