+ All Categories
Home > Documents > IAKAAN TIMUR - WordPress.com

IAKAAN TIMUR - WordPress.com

Date post: 25-Jan-2023
Category:
Upload: khangminh22
View: 0 times
Download: 0 times
Share this document with a friend
264
ks ,11 tl ?i IAKAAN PAN TIMUR
Transcript

ks,11

tl?i

IAKAANPANTIMUR

r-

Teknik Antormuko don

Pemrogromon rtti krokontrolar AIB9552

Urmon

/

Penarbi+ ANDI Yogyokorto

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

[email protected]

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


Recommended