Anda di halaman 1dari 48

30

BAB VII
ARSITEKTUR MIKROKONTROLER
Mikrokontroler dibangun dari elemen dasar yang sama dari sebuah komputer. Sistem
dasar mikrokontroler terdiri dari CPU, RAM, ROM, I/O dan timer yang terintegrasi dalam
sebuah chip IC.
Mikrokontroler merupakan suatu komponen elektronik berkerja sesuai dengan
perintah/ program yang diberikan kepadanya. Mikrokontroler digunakan untuk orientasi
kendali, seperti pemroses sinyal digital, system kendali mesin-mesin industry dll

Gambar 4.2 . Sistem mikrokontroler secara umum

Berbagai jenis mikrokontroler, produk dari berapa vendor diantaranya dari Intel,
Maxim, Microchip, Motorolla, ATMEL dll. Beberapa seri mikrokontroler diantaranya adalah
8031, 68HC11, 6502 , 2051, 89S51/52, AVR 8535 dan lain lain
Arsitektur MCS-51 merupakan salah satu jenis arsitektur mikrokontroler dari Intel
dan banyak diproduksi oleh ATMEL dll.
Tabel 1. perbandingan beberapa seri mikrokontroler MCS-51 buatan atmel.
Nomor Flash RAM EEPROM Pin
Seri (KBytes) (Bytes) (KBytes) I/O Timer UART SPI ISP
AT89C51 4 128 - 32 2 1 - -
AT89S51 4 128 - 32 2 1 - Ya
AT89C52 8 256 - 32 3 1 - -
AT89S52 8 256 - 32 3 1 - Ya
AT89C2051 2 256 - 15 2 1 - -
AT89S2051 2 256 - 15 2 1 - Ya
AT89C4051 4 256 - 15 2 1 - -
AT89S4051 4 256 - 15 2 1 - Ya
AT89S8252 8 256 2 32 3 1 1 Ya
AT89S8253 12 256 2 32 3 1 1 Ya
Keterangan:
31

 Flash adalah suatu jenis Read Only Memory yang biasanya diisi dengan program hasil
buatan manusia yang harus dijalankan oleh mikrokontroler
 RAM (Random Acces Memory) merupakan memori yang membantu CPU untuk
penyimpanan data sementara dan pengolahan data ketika program sedang running
 EEPROM (Electrically Erasable Programmable Read Only Memory) adalah memori
untuk penyimpanan data secara permanen oleh program yang sedang running
 Pin I/O adalah kaki untuk jalur keluar atau masuk sinyal sebagai hasil keluaran
ataupun masukan bagi program
 Timer adalah modul dalam hardware yang bekerja untuk menghitung waktu/pulsa
 UART (Universal Asynchronous Receive Transmit) adalah jalur komunikasi data
khusus secara serial asynchronous
 SPI (Serial Peripheral Interface) adalah jalur komunikasi data khusus secara serial
secara serial synchronous
 ISP (In System Programming) adalah kemampuan mikrokontroler untuk dapat
diprogram langsung dalam sistem rangkaiannya

4.1 Konfigurasi Mikrokontroler ATMEL 89S51

Mikrokontroler AT89S51 memiliki CPU 8 bit, Osilator internal dan rangkaian


pewaktu, RAM internal 128 byte, Flash memori 4 Kbyte, Lima buah jalur interupsi (dua
buah interupsi eksternal dan tiga buah interupsi internal), Empat buah programmable port
I/O masing-masing terdiri dari delapan buah jalur I/O, Sebuah port serial dengan kontrol
serial full duplex UART, Kecepatan melakukan interuksi per siklus 1 us pada f= 12 Mhz.

Gambar 4.3. Blok diagram MC 89S51 Gambar 4.4. Konfigurasi Pin 89S51
32

Mikrokontroler AT89S51 memiliki pin berjumlah 40. Masing-masing pin pada


mikrokontroler AT89S51 mempunyai kegunaan sebagai berikut:
a. VCC,Tegangan supply, dihubungkan dengan tegangan 5 Volt.
b. GND, Ground, dihubungkan ke Vss atau ground.
c. Port Input/ output
Port Input/ output pada mikrokontroller AT89S51 terdiri dari empat buah port, setiap
port terdiri delapan bit. Masing-masing bisa diakses sendiri-sendiri maupun diakses secara
bersama sama. Pada port 1 dan port 3 terdapat penambahan fungsi khusus yaitu masukan
luar untuk MOSI, MISO, serta SCK untuk port I dan interrrupt, timer, serial, IRD serta IWR
untuk port 3. Bila digunakan ROM dan/atau RAM ekstenal maka port 0 dan port 2 menjadi
address bus. Port 0 juga bergantian menjadi data bus. Yang bertugas mengaturnya adalah
ALE dan PSEN yang bekerja sama dengan pin RD dan RW.

Port 0
Port 0 merupakan port paralel 8 bit dua arah. Bila digunakan untuk mengakses
memori luar, port ini sebagai bus data dan memultipleks alamat memori 8 bit terrendah (A7
– A0) saat mengakses memori luar. Port 0 juga memerlukan kode byte pada saat
pemrograman flash.

Port 1
Port 1 adalah sebuah port input/ output 8 bit bidirectional (dua arah). Output buffer
port 1 dapat pula menjadi sumber dari 4 TTL input. Selain sebagai port input/ output, P1.5
sampai P1.7 mempunyai fungsi alternatif yaitu untuk memasukkan program/ perintah ke
mikrokontroler
P1.5 adalah MOST (master data output, slave data input untuk kanal ISP)
P1.6 adalah MISO (master data input, slave data output untuk kanal ISP)
P1.7 adalah SCK (master clock output, slave clock input untuk kanal ISP)
Port 2
Port 2 adalah sebuah port input output 8 bit bidirectional. Buffer output port 2 dapat
berfungsi sebagai sumber 4 input TTL. Port 2 mengeluarkan alamat 8 bit terkiri (A15 – A8)
selama pengambilan dan program memori eksternal dan selama pemasukan ke data memori
eksternal yang menggunakan pengalamatan 16 bit
Pada port 1, port 0 dan port 2 (jika tidak memakai memori eksternal) maka
pengaksesan bisa dilakukan pada tiap pin secara sendiri-sendiri atau dalam satu kumpulan
port 8 bit.
33

Port 3
Port 3 adalah sebuah port input/output 8 bit bi-directional. Buffer output port 3 dapat
berfungsi sebagai sumber 4 input TTL. Port 3 AT89S51 juga melayani berbagai macam
fungsi-fungsi khusus seperti pada AT89S51 yaitu sebagai berikut:
Tabel 2. Fungsi utama pin port 3
PIN Fungsi
P3.0 RXD (serial input port)
P3.1 TXD (serial output port)
P3.2 INTO (external interrupt 0)
P3.3 INTO (external interrupt 0)
P3.4 TO (timer 0 external input)
P3.5 TI (timer 1 external input)
P3.6 WR (external data memory writd strobe)
P3.7 RD (external data memory read strobe)

d. Riset
Reset berfungsi untuk membuat eksekusi program mulai dari awal, meng-Clear-kan
semua RAM, memberhentikan dan memulai semua aktivitas dari awal. Pin RST ini
merupakan pin reset mikrokontroler AT89S51. Reset dari mikrokontroler tersebut adalah
aktif High (1) lalu kembali bernilai low.
Reset ini pada prakteknya membutuhkan nilai RC = 82ms, kemudian program mulai
di jalankan setelah pin reset diberi tegangan 0 Volt ( Low “0”). Agar kondisi tersebut di
peroleh di perlukan rangkain eksternal power-on reset .
Prinsip kerja rangkaian ini adalah pertama kali power supply di ON kan maka
kapasitor akan charge, karena pada saat kondisi pertama ON tegangan pada kapasitor adalah
0 Volt. Maka pada pin RST muncul tegangan +5 Volt. Setelah beberapa saat kapasitor penuh
dan tegangan di kapasitor menjadi +5 Volt dan tegangan di Resistor 0 Volt, sehingga pin RST
menjadi 0 Volt.

Gambar 4.6. Rangkaian Power on reset


34

e. ALE/PROG
Pulsa output Address Latch Enable untuk memberikan alamat byte rendah selama
mengakses memori eksternal. Pin ini juga merupakan input pulse program (PROG) selama
pemrograman Flash.
Pada operasi normal ALE dipancarkan pada 1/6 frekuensi oscilator secara konstan,
dan bisa digunakan untuk tujuan external timing atau clock. ALE hanya aktif selama ada
instruksi/ perintah ke memori luar.

f. PSEN
Program Store Enable adalah membaca strobe ke memori progam ekstemal. Saat
AT89S51 mengeksekusi kode dan memori program eksternal, PSEN teraktifkan dua-kali
setiap putaran mesin (machine cycle)

g. EA/Vpp.
External Access Enable, EA harus terhubung ke GND untuk fetch kode di lokasi
memori program eksternal. EA harus terhubung ke Vcc untuk eksekusi-eksekusi program
internal. Pin ini juga menerima 12 volt programming enable voltage (Vpp) selama
pemrograman flash.

h. Pin Oscillator
Sepasang pin XTAL 1 dan XTAL 2 diberi kristal eksternal yang di bypass dengan dua
buah kapasitor kira-kira 30 pF ± 10%. Kristal yang dipakai umumnya 12 MHz, tetapi apabila
diinginkan kecepatan yang Iebih tinggi dapat dipakai kristal dengan frekuensi sampai 24
MHz. XTAL1 adalah Input ke pembalikan penguat osilator (inverting oscillator amplifier)
dan input ke clock internal pengoperasian rangkaian. Sedangkan XTAL2 adalah Output dan
pembalikan penguat osilator.

Gambar 4.7. Rangkaian Kristal AT 89S51


35

4.2 Rangkaian Minimum Sistem


Mikrokontroler dapat bekerja jika beri komponen tambahan berupa rangkaian reset dan
clock. Saat power supply diberikan, instruksi yang pertama kali dieksekusi oleh
mikrokontroler adalah instruksi yang tersimpan pada address 0000h. Agar Program Counter
(PC) dapat menunjuk address 0000h pada saat awal, maka mikrokontroler perlu di-reset.
Caranya dengan memberikan pulsa high pada pin Reset selama minimal 2 machine cycle.
Dalam mikrokontroler dikenal istilah Machine Cycle (MC) / Siklus Mesin. 1 MC (Machine
Cycle) = 6 state = 12 periode clock. Jika frekuensi crystal adalah 12 MHz, maka 1 MC =
12/frekuensi crystal = 12/12 MHz =1uS

Gambar 5.8. Sinyal Clock 1 Siklus

Setelah itu baru diberikan pulsa low. Kondisi ini dapat dipenuhi dengan memasang
rangkaian RC yang akan mensuplai tegangan Vcc ke pin 9 selama kapasitor mengisi muatan /
charging. Konstanta waktu pengisian = R X C.

Gambar 5.9. Skema Rangkaian Sistem Minimum


36

Jika pada gambar 5.9 adalah : T=R.C = (8K2Ω)x(10uF) = 82 mS. Setelah kapasitor
terisi, maka pin 9 akan low. Tombol push button dipasang agar pada saat running
Mikrokontroler dapat juga di-reset. Pin EA / External Access harus dihubungkan ke +5V agar
mikrokontroler dapat mengambil byte instruksi dari ROM internal mikrokontroler.

Waktu Eksekusi Instruksi


Waktu eksekusi sebuah instruksi oleh mikrokontroler tergantung dari jenis instruksi
dan frekuensi clock yang digunakan. Setiap instruksi memiliki panjang byte dan jumlah
siklus yang berbeda. Byte instruksi (Byte) menandakan jumlah lokasi memori yang akan
dipakai dan Siklus instruksi (Cycle) menandakan jumlah machine cycle yang dibutuhkan.
Waktu eksekusi dapat dihitung dengan rumus :
Cx 12
Tinst =
Frekuensi .Crystal
Tinst : Waktu yang dibutuhkan untuk mengeksekusi 1 instruksi (Secon)
C : Jumlah machine cycle

Misalkan mikrokontroler dengan frekuensi crystal 12 MHz. Berapakah waktu yang


diperlukan untuk mengeksekusi perintah Mov A,#30h. Dari lembaran data 89S51
Operational Code Mnemonics diketahui instruksi dengan format Mov A,# data adalah
instruksi dengan Byte = 1 dan Cycle = 1. Maka : Tinst = (1x12)/12MHz=1uS

4.3 Memori Internal pada mikrokontraler AT89S51


Memori internal mikrokontroler AT89S51 terdiri dari 3 bagian yaitu Read Only
Memory (ROM), Random Access Memory (RAM) dan Special Function Register SFR

1. ROM / Read Only Memory


ROM adalah memori tempat menyimpan program. Sifat ROM adalah non-volatile,
data/ program tidak akan hilang walaupun tegangan supply tidak ada. Untuk AT89S51
kapasitas ROM adalah 4 KByte. ROM pada AT89S51 menempati address mulai dari alamat
0000 sampai 0FFF.

2. RAM / Random Access Memory


RAM adalah tempat menyimpan data sementara. Sifat RAM adalah volatile, data
akan hilang jika tegangan supply tidak ada. Kapasitas RAM mikrokontroler AT89S51 yaitu
37

128 byte menempati address mulai dari alamat 00 sampai 7F. memori RAM ini dapat diakses
dengan cara pengalamatan langsung maupun tak langsung (indirect)

3. SFR (Special Function Register)


SFR adalah register dengan fungsi tertentu. Misalnya, register TMOD dan TCON
adalah timer control register yang berfungsi mengatur fasilitas timer . SFR pada AT89S51
menempati address 80 s/d FF.

Gambar 5.11. Peta Memori Internal AT89S51

Organisasi RAM Internal


Random Access Memory (RAM) internal pada mikrokontroler AT89S51 dibagi
menjadi 3 bagian yaitu

1. Register serba guna


Register serba guna Terdiri dari beberapa bank data yaitu Bank 0, Bank 1, Bank 2,
Bank 3. Tiap bank register terdiri dari 8 register yaitu R0, R1 sampai R7 masing masing
terdiri dari 8 bit.. Rentang alamat 00 s/d 1F. Bank Register 0 sampai 3 berlokasi dari 0H s.d.
1FH (32 bytes). Pemilihan bank register ditentukan pada register PSW
38

Tabel 3 RAM Internal

2. Bit addressable RAM


Bit addressable RAM adalah RAM yang dapat diakses per bit atau per 8 bit. diperlukan
pada saat menyimpan data yang panjangnya hanya 1 bit. Setiap bit pada lokasi RAM ini
memiliki address sendiri-sendiri. Rentang addressnya adalah dari 20 sampai 2F. Bit
Teralamat (16byte) adalah beralamat dari 20H sampai 2FH. Tiap bit memiliki alamat
langsung (0-7FH). Dapat juga dituju dengan alamat 8-bit nya, 20.0-20.7, 21.0-21.7, dst.
39

3. General purpose RAM


General purpose RAM adalah RAM yang dapat diakses per byte. Ini diperlukan pada
saat kita ingin menyimpan data yang panjangnya 8 bit. Rentang address: 30 s/d 7F. Lokasi
MultiGuna beralamat dari 30H s.d. 7FH untuk RAM data.
Tampak pada table bahwa terdapat kesamaan address antara alamat 00 sampai alamat
FF. maka biasanya source code ditulis setelah address 0FF pada ROM. Hal ini dimaksud agar
data RAM dan SFR tidak terisi oleh byte source code.

4. SPECIAL FUNCTION REGISTER (SFR)


Special Function Register terdapat pada ruang memori RAM yang beralamat 80H
sampai dengan FFH. Tidak semua alamat tersebut dipakai oleh SFR. Pada SFR terdapat
beberapa alamat yang bisa dialamati secara bit dan ada yang tidak bisa dialamati secara bit.
Special Function Register Akumulator adalah salah satunya yang sering dipakai untuk
dialamati secara bit dan mempunyai alamat E0H, misalnya A.0, A.1, A.2, A.3, A.4, A.5, A.6,
dan A.7.
Register fungsi khusus yang digambarkan diatas dapat dijelaskan seperti dibawah ini:
1) Accumulator
Accumulator adalah register yang berfungsi untuk menyimpan data sementara.
Accumulator sering digunakan dalam proses operasi aritmatika, logika, pengambilan data
dan pengiriman data.

2) Register B
Register B dapat digunakan untuk proses aritmatika dan dapat juga difungsikan sebagai
register umum.

3) Register Port
Pada register ini terdapat 4 buah yaitu register port 0, port 1, port 2, dan port 3. Register
port ini digunakan sebagai sarana input/output untuk menyimpan data dari atau ke port
untuk masing-masing P0, P1, P2, dan P3.
4) Register Timer
Mikrokontroller AT89S51 mempunyai dua buah timer 16 bit, yaituTimer 0 dan Timer 1
dibentuk oleh register TH0 dan TL0. Timer 1 dibentuk oleh register TH1 dan TL1.
Perilaku dari register TH0, TH1, TL0 dan TL1 diatur oleh register TMOD dan register
TCON.
40

5) Register Control
Ada beberapa register yang berisi bit-bit kontrol dan status untuk sistem interupsi, counter
atau timer, dan port serial, yaitu register-register IP (Interrupt priority), IE (Interrupt Enable),
TMOD (TimerMode), TCON (Timer Control), SCON (Serial Control), dan PCON ( Power
Control).
a. Register IP digunakan untuk mengaktifkan atau menonaktifkan sarana interupsi. IE.0
sampai IE.6 mengatur masing-masing sumber interupsi, sedangkan IE.7. mengatur
interupsi secara keseluruhan. Jika IE.7 bernilai 0 maka sistem interupsi akan non aktif
atau keadaan dari IE.0 sampai IE.6 tidak diperhatikan.
b. Register TMOD digunakan untuk mengatur mode kerja dari Timer 0 dan Timer 1. Dengan
mengatur mode kerja timer, register ini dapat digunakan mengatur masing-masing timer
untuk diatur menjadi timer 16 bit, timer 13 bit, atau timer 8 bit yang dapat diiisi ulang
secara otomatis. Selain itu, register ini juga dapat mengatur agar proses pencacah timer
dapat dikendalikan melalui sinyal dari luar mikrokontroller.
c. Register TCON digunakan untuk memulai atau menghentikan proses pencacah timer,
mengatur sinyal interupsi dari INT0 atau INT1, serta memantau adanya sinyal masuk ke
INT0 atau INT1.
d. Register SCON digunakan untuk mengatur perilaku dari UART yang diantaranya
memantau proses pengiriman dan penerimaan data seri.
e Register PCON untuk pemakaian daya pada IC (pengotrol mode kerja CPU)

6) Program Status Word ( PSW )


Register PSW ini berisikan informasi status program, masing-masing bit
menunjukkan kondisi/ keadaan Central Processing Unit setelah operasi dijalankan.
Register ini berisi beberapa bit status yang mencerminkan keadaan Mikrokontroller.
Definisi dari bit-bit dalam PSW dijelaskan seperti pada table berikut.
PSW.7 PSW.6 PSW.5 PSW.4 PSW.3 PSW.2 PSW.1 PSW.0
D0H CY AC FO RS1 RS0 OV - P
Bit carry flag (CY) (bit ke - 8) mempunyai dua fungsi yaitu:
1. carry akan menunjukkan apakah operasi penjumlahan mengandung carry (sisa)
atau pada operasi pengurangan mengandung borrow (kurang). Apabila operasi ini
mengandung carry/borrow maka bit ini akan diset satu. Sedangkan jika tidak
terdapat carry/borrow, maka bit ini akan diclear nol.
41

2. carry dimanfaatkan sebagai bit ke delapan untuk operasi pergeseran (shift) atau
perputaran.

Bit Auxiliary Carry (AC)


Bit ini menunjukkan adanya carry (bawaan) dari bit ketiga menuju ke bit keempat
pada operasi aritmatika atau dari 4 bit rendah ke 4 bit tinggi. Bit ini jarang digunakan
dalam program, tetapi digunakan oleh Mikrokontroller secara implisit pada operasi
aritmatika bilangan BCD.

Bit Flag 0 (F0)


Bit ini menunjukkan apakah hasil operasinya nol atau tidak. Apabila hasil operasi
adalah nol, maka bit ini diset 1, dan apabila hasil operasinya adalah tidak nol maka bit ini
akan reset nol. Bit ini juga digunakan pada perbandingan dua buah data. Bila kedua data
sama maka akan diset 1 sedangkan jika kedua data itu berbeda maka akan direset nol.
Tabel 5. Pemilihan Bank Register
RS1 RS0 Bank Lokasi Memori
0 0 0 00H – 07H
0 1 1 08H – 0FH
1 0 2 10H – 17H
1 1 3 18H – 1FH

Bit register select (RS)


Register Bank Select Bits (RS0 dan RS1) digunakan untuk menentukan lokasi dari bank
register (R0 hingga R7) pada memori. RS0 dan RS1 selalu bernilai Nol setiap kali system di
reset, sehingga lokasi dari R0 hingga R7 akan berada pada alamat 00H hingga 07H (Bank 0).
Pemilihan bank register pada tabel 2.2.
Bit Overflow (OV)
Bit ini menunjukkan adanya kelebihan atau kekurangan bit pada operasi penjumlahan
atau pengurangan.
Bit parity (P)
Bit ini menunjukkan paritas dari hasil operasi, jika 1 maka hasil operasinya adalah
genap, dan jika 0 maka hasil operasinya adalah ganjil.

7) Stack Pointer
42

Register Stack Pointer (SP) merupakan register 8 bit yang terletak pada alamat 81H,
mempunyai fungsi menyimpan alamat data paling atas pada saat terjadi interrupt. Alamat
data selalu berkurang 2 setelah penumpukan data dan bertambah 2 setelah pengambilan
data dari lokasi tumpukan.

8) Data Pointer
Register data pointer (DPTR) merupakan register 16 bit, terdiri dari DP0 dan DP1.
Untuk menyimpan alamat 16 bit/ masing masing 8 bit untuk dapat mengakses EEPROM
atau eksternal data memori

9) Serial Data Buffer


Serial data buffer (SBUF) digunakan sebagai buffer pada saat data serial akan dikirim
atau diterima. dibagi menjadi dua register yang terpisah, yaitu transmit buffer dan
receiver buffer. Saat data disalin ke serial data buffer maka data sesungguhnya diterima
dan diteruskan ke dan dari serial port. Register ini dioperasikan bersama dengan
akumulator.
43

BAB V
PEMROGRAMAN MIKROKONTROLER
Program pengendali mikrokontroler disusun dari beberapa kumpulan-kumpulan
instruksi/ perintah, instruksi tersebut setara dengan kalimat perintah dalam bahasa manusia
yang hanya terdiri atas predikat dan objek. Dengan demikian tahap pertama pembuatan
program pengendali mikrokontroler dimulai dengan pengenalan dan pemahaman predikat
(kata kerja) dan objek apa saja yang telah dimiliki oleh mikrokontroler. Beberapa cara untuk
menyebut tempat/ alamat data ( ‘Addressing Mode’), antara lain adalah:.

1. Penyebutan data konstan (immediate addressing mode): yaitu MOV A,#20. Data
konstan merupakan data yang berada di dalam instruksi. Contoh instruksi ini
mempunyai makna data konstan 20 (sebagai data konstan ditandai dengan ‘#’) di-
copy-kan ke Akumulator A.
2. Penyebutan data secara langsung (direct addressing mode), cara ini dipakai untuk
menunjuk data yang berada di dalam memori dengan cara menyebut nomor memori
tempat data tersebut berada : MOV A,30. (data yang berada di dalam memori nomor
30 di-copy-kan ke Akumulator. )
3. Penyebutan data secara tidak langsung (indirect addressing mode) yaitu MOV
A,@R0. Tanda ‘@’ dipakai untuk menandai bahwa nomor memori (alamat) disimpan
di dalam register R0. Dalam instruksi ini register R0 dipakai untuk menyimpan nomor
memori ( memori yang alamatnya tersimpan dalam register R0 isinya di-copy-kan ke
Akumulator A.)
4. Penyebutan data dalam register (register addressing mode): MOV A,R5. (data dalam
register serba guna R5 di-copy-kan ke Akumulator A). terdapat beberapa register
serba guna R0 sampai R7 sebagai tempat penyimpan data .
5. Cara penyebutan data dalam memori program yang dilakukan secara indirect (code
indirect addressing mode) yaitu MOVC A,@A+DPTR. MOV digantikan dengan
MOVC, tambahan huruf C tersebut dimaksud untuk membedakan bahwa instruksi ini
dipakai di memori program. (MOV tanpa huruf C artinya instruksi dipakai di memori
data). Sedangkan Tanda ‘@’ dipakai untuk menandai A+DPTR adalah menyatakan
nomor memori yang isinya di-copy-kan ke Akumulator A, dalam hal ini nilai yang
tersimpan dalam DPTR (Data Pointer Register - 2 byte) ditambah dengan nilai yang
tersimpan dalam Akumulator A (1 byte) dipakai untuk menunjuk nomor memori
program.
44

5.1 Pemrograman Dasar


Pada gambar 6.1 merupakan rangkaian mikrokontroler AT8951, masukannya melalui
port 0 yang terdiri dari 8 switch sedangkan pada bagian keluarannya melalui port 2 terdiri
dari 8 buah LED

Gambar 5.1 Mikrokontroler tampilan LED

Program Pengendalian Lampu LED


Program assembler untuk menyalakan lampu LED pada urutan ganjil secara serentak
kemudian bergantian urutan genap secara serentak, lama menyalanya lampu LED yaitu500 µs
ORG 100H
MULAI : MOV P2,#01010101B
ACALL DELAY
MOV P2,#10101010B
ACALL DELAY
SJMP MULAI
;subrutin delay
DELAY: MOV R0,# 250
DJNZ R0,$ ; 2 x 250 µs
RET
END.
45

Program assembler untuk menyalakan 8 lampu LED pada keluaran sesuai dengan
keadaan dari 8 buah switch pada masukannya, lama menyalanya lampu LED adalah 525,5
ms
ORG 100H
START: MOV A, P0
MOV P2, A
ACALL DELAY
SJMP START
;subrutin delay
DELAY: MOV R0,#20
DELAY1: MOV R1,#50
DELAY2: MOV R2,# 250
DJNZ R2,$
DJNZ R1,DELAY2
DJNZ R0,DELAY1
RET
END.
Lama waktu delay adalah ≈ (2 x R2) + 2(R2 x R1) + 2 (R2 x R1 x R0) = (2 x 250) +
2 (250x50) + 2 (20x50x250) = 525,5 ms

Program Pengendalian 7 segment


Gambar 6.2 merupakan sebuah skema rangkaian sederhana dengan hanya sebuah
tampilan 7 segmant, bila akan menampilkan 2 angka berurutan maka diperlukan rangkaian
tambahan seperti rangkaian buffer, driver 7 segmant dan penggeser data.

Gambar 5.2 Mikrokontroler tampilan 7 segment


46

Program untuk menampilkan angka 0 sampai 9 secara berurutan pada 7 segment,


delay selama 500 ms
ORG 100H
Mulai
MOV P2,#10000000B
ACALL DELAY
MOV P2,#00000110B
ACALL DELAY
MOV P2,#10111011B
ACALL DELAY
MOV P2,#10011111B
ACALL DELAY
MOV P2,#11100110B
ACALL DELAY
MOV P2,#11101101B
ACALL DELAY
MOV P2,#11111101B
ACALL DELAY
MOV P2,#00000111B
ACALL DELAY
MOV P2,#11111111B
ACALL DELAY
MOV P2,#11101110B
ACALL DELAY
DELAY:
MOV R5.#250
DELAY 1:
MOV R6.#100
DELAY 2:
MOV R7.#10
DJNZ R7.$
DJNZ R6.DELAY2
DJNZ R5.DELAY1
RET
END

Program Mikrokontroler Pergerakan Motor Stepper


Gambar 6.3 menjelaskan Rotor motor akan berputar searah dengan jarum jam/
berputar ke kanan jika diberi logika 0 dan akan berputar berlawanan arah jarum jam/ berputar
ke kiri jika diberi logika 1, Misalkan motor stepper yang digunakan memiliki setiap 1 putaran
rotor motor melalui 192 step, jika rotor akan diputar sejauh 180 derajat maka akan melewati
96 step, dalam menjalankan motor steper dilakukan setiap 4 step sekali, sehingga untuk
putaran 180 derajat adalah 24 kali
47

Gambar 5.3 Pengendalian putaran motor stepper


Contoh Program Pengendalian Pergerakan Motor Stepper
ORG 100H
MULAI:
MOV R0.#24
PUTAR:
MOV P1.#11111110B
ACALL DELAY
MOV P1.#11111101B
ACALL DELAY
MOV P1.#11111011B
ACALL DELAY
MOV P1.#11110111B
ACALL DELAY
DJNZ R0, PUTAR
SJMP MULAI
DELAY:
MOV R5.#250
DELAY 1:
MOV R6.#100
DELAY 2:
MOV R7.#10
48

DJNZ R7.$
DJNZ R6.DELAY2
DJNZ R5.DELAY1
RET
END

Program Tampilan LCD


LCD M1632 adalah terdiri dari 2 baris dan16 kolom, dimulai dari baris1 paling atas
dan kolom 0 paling kiri. Alamat baris 1 adalah 8X H, alamat baris 2 adalah CX H, X adalah
kolom 0 – F H. LCD ini terdiri dari 32 pin, fungsi pin 1-16 sama dengan fungsi pin 17- 32

Gambar 5.4 konfigurasi pin LCD M1632

Tabel nama dan fungi Pin dari LCD


No Nama Fungsi
1 Vss GND
2 Vcc +5V
3 Vee LCD Contrast
4 RS 1 = Input data, 0 = Input Instruksi
5 R/W 1= Read, 0 = Write
6 E Enable
7 D0 Data 0
8 D1 Data 1
9 D2 Data 2
10 D3 Data 3
11 D4 Data 4
12 D5 Data 5
13 D6 Data 6
14 D7 Data 7
15 VBL+ 4 - 4.2 volt
16 VBL- GND
49

Sebelum menampilkan karakter pada LCD, maka terlebih dahulu harus mengikuti
prosedur- prosedur yaitu: Inisialisasi , Pemesanan tempat dan Penulisan data
a. Inisialisasi terdiri dari:
 Display Clear
0 0 0 0 0 0 0 1
D7 D6 D5 D4 D3 D2 D1 D0
Instruksi ini akan menghapus semua display dan mengembalikan kursor ke posisi awal
(alamat 0)
 Cursor Home
0 0 0 0 0 0 1 X
D7 D6 D5 D4 D3 D2 D1 D0
Instruksi ini mengembalikan kursor ke posisi awal (alamat 0)
 Entry Mode Set
0 0 0 0 0 1 I/D S
D7 D6 D5 D4 D3 D2 D1 D0
Instruksi ini mengatur arah pergerakan kursor dan apakah display akan digeser.ke kiri
atau ke kanan
 Jika I/D = 1 alamat akan dinaikkan dan kursor bergerak ke kanan dan jika I/D = 0
alamat akan diturunkan dan kursor bergerak ke kiri
 Jika S = 1, semua display akan digeser, tetapi posisi kursor tidak berubah,
 Jika S = 1 dan I/D = 1 , display akan digeser ke kanan dan jika S = 1 dan I/D = 0
display akan digeser ke kiri.
 Jika S = 0 , display tidak akan digeser.
 Display ON/OFF Control
0 0 0 0 1 D C B
D7 D6 D5 D4 D3 D2 D1 D0
D = 1, display akan ditampilkan
D = 0, display tidak ditampilkan
C = 1, kursor akan ditampilkan
C = 0 , kursor tidak ditampilkan
B = 1, karakter tempat posisi kursor berkedip
B = 0, karakter tempat posisi kursor tidak berkedip
 Cursor/Display Shift
0 0 0 1 S/C R/L * *
D7 D6 D5 D4 D3 D2 D1 D0
Instruksi ini akan menggerakkan kursor dan menggeser display tanpa mengubah isi
RAM
50

S/C R/L Operasi


0 0 Posisi kursor digeser ke kiri
0 1 Posisi kursor digeser ke kanan
1 0 Seluruh display digeser ke kiri dengan kursornya
1 1 Seluruh display digeser ke kanan dengan
kursornya
 Function Set
0 0 1 DL 1 * * *
D7 D6 D5 D4 D3 D2 D1 D0

DL = 1, panjang data adalah 8 bit


DL = 0, panjang data adalah 4 bit (D7 – D4)
b. Pemesanan tempat
Pemesanan tempat adalah menentukan posisi tampilan karakter pada LCD, dengan cara
membuat RS= 0 dan mengatur E= 0-1-0. Pilih alamat baris dan kolom, untuk baris 1
data yang dikirim pada 8XH atau 1000 xxxxB dan baris 2 data yang dikirim pada CXH
atau 1100xxxxB, sedangkan x menunjukkan kolom 0 - 15 (0H - FH).
c. Penulisan karakter
Penulisan karakter pada LCD di tempat yang telah dipesan dengan cara membuat RS=1
dan mengatur E= 0-1-0, Karakter yang dikirim pada LCD dalam format ASCII.
Gambar 6.4 adalah skema rangkaian hubungan antara mikrokontroler dengan sebuah
LCD yang disangga dengan 74LS245

Gambar 5.5 Mikrokontroler tampilan LCD


51

supaya dapat menampilkan angka 0 pada baris 1 kolom 1 LCD, maka program
asemblernya adalah:
ORG 100H
SJMP START
DCLEAR EQU 00000001B
DEMODE EQU 00000110B
DONOFF EQU 00001100B
FSET EQU 00111000B

START :
ACALL INITLCD
START2:
MOV A,#30
ACALL TAMPIL_LCD
SJMP START2

INISIALISASI_LCD:
MOV A,#DCLEAR
ACALL INISIAL
MOV A,#FSET
ACALL INISIAL
MOV A,#DEMODE
ACALL INISIAL
MOV A,#DONOFF
ACALL INISIAL
RET
;-------------------------------------------------------
; PROSEDUR PEMESANAN TEMPAT
;-------------------------------------------------------
; RS : 0 : P3.5
;E :0-1-0 : P3.4

INISIAL:
CLR P3.5 ; RS=0
CLR P3.4 ; E=0
ACALL DELAY
MOV P2,A
SETB P3.4 ; E=1
ACALL DELAY
CLR P3.4 ; E=0
ACALL DELAY
RET
;-------------------------------------------------------
; PROSEDUR PENULISAN KARAKTER
;-------------------------------------------------------
; RS : 1 : P3.5
;E :0-1-0 : P3.4

TAMPIL_LCD:
SETB P3.5 ; RS=1
52

CLR P3.4 ; E=0


ACALL DELAY
MOV P2,A
SETB P3.4 ;E=1
ACALL DELAY
CLR P3.4 ;E=0
ACALL DELAY
RET
;------------------------------------
; PROCEDURE DELAY
;------------------------------------
DELAY :
MOV R0,#0
ULANG1:
MOV R2,#0
ULANG: INC R2
CJNE R2,#5, ULANG
INC R0
CJNE R0,#5, ULANG2
RET
END
Merujuk dari gambar 6.4, pemrograman dengan menampilkan angka 123 pada baris 1
kolom 1-3 LCD adalah:
;program LCD
ORG 0H
SJMP START
DCLEAR EQU 01 H
FSET EQU 38 H
DEMODE EQU 06 H
DONOFF EQU 0CH
SAT EQU 20H
PUL EQU 21H
RAT EQU 22H

START :
ACALL INITLCD
START2:
MOV A,#123
MOV B,#10
DIV AB
MOV SAT,B
MOV B,#10
DIV AB
MOV PUL,B
MOV RAT,A
MOV A,#80H
ACALL INISIAL
MOV A,RAT
ADD A,#30H
ACALL TAMPIL_LCD
53

MOV A,#81H
ACALL INISIAL
MOV A,PUL
ADD A,#30H
ACALL TAMPIL_LCD
MOV A,#82H
ACALL INISIAL
MOV A,SAT
ADD A,#30H
ACALL TAMPIL_LCD
SJMP START2
INISIAL:
CLR P3.5 ; RS=0
CLR P3.4 ; E=0
ACALL DELAY
MOV P2,A
SETB P3.4 ; E=1
ACALL DELAY
CLR P3.4 ; E=0
ACALL DELAY
RET
TAMPIL_LCD:
SETB P3.5 ; RS=1
CLR P3.4 ; E=0
ACALL DELAY
MOV P2,A
SETB P3.4 ;E=1
ACALL DELAY
CLR P3.4 ;E=0
ACALL DELAY
RET
INITLCD:
MOV A,#DCLEAR
ACALL INISIAL
MOV A,#FSET
ACALL INISIAL
MOV A,#DEMODE
ACALL INISIAL
MOV A,#DONOFF
ACALL INISIAL
DELAY :
MOV R0,#0
ULANG1:
MOV R2,#0
ULANG: INC R2
CJNE R2,#5, ULANG
INC R0
CJNE R0,#5, ULANG2
RET
END
54

Program Mikrokontroler Pengambilan Data ADC

Gambar 5.6 konversi analog to digital

IC ADC0804 adalah IC yang digunakan untuk mengubah besaran sinyal analog menjadi
data digital 8 bit. System pengendalian Mode kerja dari IC ini yaitu Write (WR) adalah untuk
menulis data, Read (RD) untuk membaca data dan interrupt (INTR) menerima perintah baca/
tulis, pelaksaaan perintah tersebut tatkala menerima logika 0.
Untuk membaca data dari ADC terlebih dahulu atur WR = 1, RD = 1, kemudian atur
WR = 0 dan WR = 1, tunggu sampai ada perintah interrupt dari ADC, jika ada, atur RD = 0,
ambil data ADC dari port 1 ke akumulator, simpan data ke memori, setelah itu atur RD=1
Prosedur pengambilan data dari ADC
;---------------------------------------------------
; PENGAMBILAN DATA DARI ADC
; P3.6 : WR
; P3.7 : RD
;---------------------------------------------------
READ_ADC:
SETB P3.6 ; WR = 1
SETB P3.7 ; RD = 1
ACALL DELAY
CLR P3.6 ; WR = 0
ACALL DELAY
SETB P3.6 ; WR = 1
JB P3.2,$
ACALL DELAY
CLR P3.7 ; RD = 0
MOV A,P1
MOV 30,A
55

SETB P3.7 ; RD = 1
RET

5.2 TIMER/ COUNTER


Timer bekerja dengan cara menghitung pulsa clock internal mikrokontroler yang
dihasilkan dari rangkaian osilator. Jumlah pulsa clock akan dibandingkan dengan sebuah nilai
yang terdapat dalam register timer (TH dan TL). Jika jumlah pulsa clock sama dengan nilai
timer, maka sebuah interrupt akan terjadi (ditandai oleh flag TF). Interrupt ini dapat dipantau
oleh program sebagai tanda bahwa timer telah overflow.
Counter bekerja dengan cara menghitung pulsa eksternal pada P3.4 (T0) dan P3.5
(T1). Jumlah pulsa ini akan disimpan dalam register timer (TH dan TL).
Pada dasarnya timer dan counter merupakan sistem yang sama-sama yaitu
menambahkan diri hingga overflow. Timer dapat digunakan untuk menghitung suatu periode
waktu antara kejadian, sebagai jarak waktu antara kejadian, dan menghasilkan baud rate
untuk komunikasi serial. Counter dapat digunakan untuk menghitung jumlah munculnya
suatu kejadian.
Timer sangat diperlukan untuk membuat delay/ tundaan waktu. AT89S51
menyediakan fasilitas timer 16 bit sebanyak 2 buah yaitu Timer 0 dan Timer 1. Timer ini juga
bisa di fungsikan sebagai counter/pencacah.
Pencacah biner untuk Timer 0 dibentuk dengan register TL0 (Timer 0 Low Byte,
memori-data internal nomor 8A) dan register TH0 (Timer 0 High Byte, memori-data internal
nomor 8C). Pencacah biner untuk Timer 1 dibentuk dengan register TL1 (Timer 1 Low Byte,
memori-data internal nomor 8B) dan register TH1 (Timer 1 High Byte, memori-data internal
nomor 8D).
MCS51 merupakan pencacah biner menaik (count up binary counter) yang mencacah
dari $0000 sampai $FFFF, saat kedudukan pencacah berubah dari $FFFF kembali ke $0000
akan timbul sinyal limpahan (overflow).
Untuk mengatur kerja Timer/Counter dipakai 2 buah register tambahan yang dipakai
bersama oleh Timer 0 dan Timer 1. Register tambahan tersebut adalah register TCON (Timer
Control Register, memori-data internal nomor 88, bisa dialamat secara bit) dan register
TMOD (Timer Mode Register, memori-data internal nomor 89).

Gambar 5.7. Alokasi Bit TMOD


56

Tabel 10. Timer Mode

- Bila bit GATE=0 saluran sinyal clock hanya diatur oleh bit TRx (TR0 atau TR1 pada
register TCON). Bila GATE=1 maka pin INT0 (untuk Timer 0) atau pin INT1 (untuk
Timer 1) dipakai juga untuk mengatur saluran sinyal clock.
- C/T harus diberi nilai ‘1’ oleh program user untuk menjalankan mode counter dan diberi
nilai ‘0’ untuk menjalankan mode timer.
- Ml dan MO merupakan dua bit pemilih mode operasi timer/counter

Tabel 11. Mode Operasi Timer/Counter

Gambar 5.8. Alokasi Bit TCON


Tabel 12. Timer Control
57

Keterangan :
- TF1 diberi nilai ‘1’ secara hardware saat nilai Timer/Counter 1 (TH1 dan TLI) mengalami
overflow. TF1 akan diberi nilai ‘0’ secara hardware saat mikrokontroler melompat ke
Interrupt Service Routine.
- TR1 harus diberi nilai ‘1’ oleh program user untuk menjalankan Timer 1.
- TF0 diberi nilai ‘1’ secara hardware saat nilai Timer/Counter 0 (TH0 dan TL0) mengalami
overflow. TF0 akan diberi nilai ‘0’ secara hardware saat mikrokontroler melompat ke
Interrupt Service Routine.
- TR0 harus diberi nilai ‘1’ oleh program user untuk menjalankan Timer 0.

Mengatur Timer
Gambar 6.9 merupakan bagan Timer 1, Rangkaian dibentuk dengan mengatur register
TMOD, sedangkan kerja dari Timer dikendalikan oleh logika di register TCON.

Gambar 5.9 Skema Timer 1 dalam Mode 1


Setelah MCS51 di-reset, register TMOD bernilai $00, hal ini berarti :
1. Bit C/T* =’0’, keadaan ini membuat saklar S1 ke posisi atas (menurut Gambar 6.9),
sumber sinyal clock berasal dari osilator kristal, kemudian frekuensi dibagi 12, pencacah
biner yang dibentuk dengan TL1 dan TH1 berfungsi sebagai timer. Jika sistem yang
dirancang Timer 1 bekerja sebagai timer maka bit C/T* tidak perlu diatur lagi. Tapi jika
sistem yang dirancang Timer 1 bekerja sebagai counter untuk menghitung pulsa yang
masuk lewat kakai T1 (P3.5), maka posisi saklar S1 harus dikebawahkan dengan membuat
bit C/T* menjadi ‘1’.
2. Bit GATE=’0’, menyebabkan output gerbang OR selalu ‘1’ tidak dipengaruhi keadaan ‘0’
atau ‘1’ pada kaki INT1 (P3.3). Dalam keadaan semacam ini, saklar S2 hanya dikendalikan
lewat bit TR1 dalam register TCON. Jika TR1=’1’ saklar S2 tertutup sehingga sinyal clock
58

dari S1 disalurkan ke sistem pencacah biner, aliran sinyal clock akan dihentikan jika
TR=’0’. Sebaliknya jika bit GATE=’1’, output gerbang OR akan mengikuti keadaan pin
INT1, saat INT1=’0’ apapun keadaan bit TR1, output gerbang AND selalu =’0’ dan saklar
S1 selalu terbuka, agar saklar S1 bisa tertutup maka pin INT1 dan bit TR1 harus =’1’
secara bersamaan. Jika sistem yang dirancang menghendaki kerja dari timer/ counter
dikendalikan oleh sinyal yang berasal dari luar chip IC, maka bit GATE harus dibuat
menjadi logika ‘1’
3. Bit M1 dan M0=’0’, berarti TL1 dan TH1 disusun menjadi pencacah biner 13 bit (Mode
0), jika dikehendaki Timer 1 bekerja pada mode 1 seperti terlihat dalam Gambar, maka bit
M1 harus dibuat menjadi ‘0’ dan bit M0 menjadi ‘1’.
Timer akan menghitung pulsa clock dari osilator yang sebelumnya telah dibagi 12.
Agar berfungsi sebagai timer maka :
Bit C/T dalam TMOD harus 0 (timer operation)
Bit TRx dalam TCON harus 1 (timer run)
Bit Gate dalam TMOD harus 0 atau pin INTx harus 1.
Counter menghitung pulsa dari pin input T0 dan T1. Agar berfungsi sebagai counter
maka :
Bit C/T dalam TMOD harus 1 (counter operation).
Bit TRx dalam TCON harus 1 (timer run)
Bit Gate dalam TMOD harus 0 atau pin INTx harus 1.
Setelah reset TMOD bernilai $00, berarti Timer 1 bekerja sebagai pencacah biner 13
bit, sumber sinyal clock dari osilator kristal atau Timer 1 bekerja sebagai ‘timer’, bit GATE
=’0’ berarti pin INT1 tidak berpengaruh pada rangkaian sehingga Timer 1 hanya
dikendalikan dari bit TR1.
Proses inisialisasi adalah proses menentukan nilai semua register yang berkaitan
dengan Timer/ Counter yang akan digunakan agar Timer/ Counter dapat berfungsi
sebagaimana yang dikehendaki. Register yang harus diatur terlebih dahulu meliputi :

1. TMOD dan TCON


Tentukan mode yang akan digunakan (mode 0, 1, 2, atau 3), fungsi yang dipilih
(sebagai timer atau counter), dan external control melalui pin INTx atau internal control
melalui TRx. Pengaturan TCON dilakukan untuk menjalankan timer. Misalnya
Timer/Counter 0 digunakan sebagai timer dalam mode 2 dengan external control dan
59

Timer/Counter 1 digunakan sebagai counter dalam mode 1 dengan internal control, maka
instruksinya adalah:
MOV TMOD, #01011010b
atau
MOV TMOD, #5Ah
Sedangkan untuk menjalankan kedua timer, instruksinya adalah sebagai beikut :
MOV TCON, #01010000b
atau
MOV TCON, #50h
atau
SETB TR0
SETB TR1

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

1. MODE 0.
Mode 0 adalah timer/counter 13 bit. Register TLx (TL0 atau TL1) hanya digunakan
pada 5 bit terendahnya saja sedangkan register THx (TH0 atau TH1) tetap digunakan selebar
8 bit. TLx akan bertambah hingga bernilai 1Fh. Saat ada perubahan nilai TLx dari 1Fh ke
00h, maka THx akan bertambah 1. Nilai maksimal THx dan TLx adalah FF1Fh (THx = FFh
dan TLx = 1Fh). Overflow akan terjadi jika ada perubahan dari FF1Fh ke 0000h. Nilai THx
dan TLx dapat diubah oleh user dalam program.
Dengan mensetting M1 dan M0 = 00 dalam TMOD menyebabkan register THx
berfungsi sebagai counter 8 bit dan register TLx berfungsi sebagai counter 5 bit. Ketika
overflow, TFx akan berlogika 1. Nilai maksimum adalah 8191d atau 1FFFh.

.Gambar 5.10. Timer/Counter Mode 0

2. MODE 1
Mode 1 merupakan timer/counter 16 bit. TLx akan bertambah hingga bernilai FFh.
Saat ada perubahan nilai TLx dari FFh ke 00h, THx akan bertambah 1. Nilai maksimal THx
60

dan TLx adalah FFFFh (THx = FFh dan TLx = FFh). Overflow akan terjadi jika ada
perubahan dari FFFFh ke 0000h. Tetapi nilai THx dan TLx dapat diubah oleh user setiap saat
dalam program.
Dengan mengatur M1 dan M0 = 01 dalam TMOD menyebabkan register THx dan
TLx berfungsi sebagai counter 16 bit. Ketika overflow, TFx akan 1 .Nilai maksimumnya
adalah 65535d atau FFFFh.

Gambar 5.11. Timer/Counter Mode 1

3. MODE 2
Mode 2 adalah timer/counter 8 bit dengan fasilitas auto reload. TLx bertindak sebagai
timer/counter 8 bit. Sedangkan THx berisi suatu nilai tertentu. Auto reload adalah fasilitas
dimana nilai TLx setelah overflow tidak kembali ke 00h namun nilai TLx akan diambil dari
nilai THx.
Misalkan THx berisi 47h maka mulanya TLx berisi 47h kemudian isi TLx akan
bertambah sampai FFh, jika ada overflow pada TLx,maka secara automatis nilai TLx akan
berubah dari FFh ke 47h, sesuai dengan nilai THx. Proses tersebut dikerjakan secara otomatis
secara hardware sehingga user tidak perlu memeriksa apakah nilai TLx sudah overflow dan
tidak perlu mengisi ulang dengan nilai yang baru. Mode 2 ini juga digunakan untuk
menghasilkan baud rate.
Dengan mensetting M1&M0 = 10 dalam TMOD menyebabkan register THx dan TLx
masing-masing berfungsi sebagai counter 8 bit. Ketika overflow, TFx akan 1 .Nilai
maksimumnya adalah 255d atau FFh.

Gambar 5.12. Timer/Counter Mode 2


61

4. MODE 3
Pada mode 3, Timer/Counter 0 akan menjadi dua timer/counter 8 bit, sedangkan
Timer/Counter 1 akan berhenti. TL0 akan menjadi timer/counter 8 bit yang dikendalikan oleh
bit control Timer/Counter 0 (meliputi GATE, C/T , TR0, INT0, dan TF0). TH0 akan menjadi
timer 8 bit (bukan counter) yang dikendalikan oleh bit kontrol Timer/Counter 1 (meliputi
TR1 dan TF1). Jadi TR1 mengendalikan TH0 dan Timer/Counter 1 secara bersamaan.

Gambar 5.13. Timer/Counter Mode 3

Gambar 5.13. Timer/Counter Mode 3

Umumnya Timer/counter 1 dioperasikan dalam mode 2 dan berfungsi sebagai


penghasil baud rate. Jika user ingin menghentikan Timer/Counter 1 tanpa menghentikan
TH0, maka user dapat memindahkan Timer/Counter 1 ke mode 3.
Timer/ Counter pada AT89S51 adalah Up Counter, nilai counternya akan naik dari
nilai awalnya sampai nilai maksimum dan kembali ke nilai nol. Saat menjadi logika nol
(overflow), maka sebuah timer flag akan bernilai 1. Logika Flag ini dapat diuji oleh program
untuk menandakan bahwa counter tersebut telah selesai menghitung, atau flag tersebut bisa
digunakan untuk meng-interrupt program.
Contoh pengaturan pencacah biner 16 bit, isi TMOD dengan instruksi MOV TMOD
#00010000B (Bilangan biner 00010000 diisikan ke register TMOD), berakibat bahwa bit 7
TMOD (bit GATE) bernilai ‘0’, bit 6 (bit C/T*) bernilai ‘0’, bit 5 dan 4 (bit M1 dan M0)
bernilai ‘01’, ke-empat bit ini dipakai untuk mengatur Timer 1, sehingga Timer 1 bekerja
sebagai timer dengan pencacah biner 16 bit yang dikendalikan hanya dengan TR1.
Jika suatu pencacah biner dipakai sebagai counter untuk mencacah jumlah pulsa yang
masuk lewat pin T1 (P3.5), maka instruksinya adalah MOV TMOD,#01010000
62

Perbedaannya dengan instruksi di atas adalah dalam instruksi ini bit 6 (bit C/T*)
bernilai ‘1’. Selanjutnya jika diinginkan sinyal dari perangkat keras di luar chip MCS51 bisa
ikut mengendalikan Timer 1, maka instruksi pengatur Timer 1 akan buat menjadi : MOV
TMOD,#11010000, dari perintah itu terlihat bahwa pada bit 7 (bit GATE) bernilai ‘1’.
Jika bit GATE = ‘1’, selama pin INT1 bernilai ‘0’ pencacah biner belum akan
mencacah, juga pencacah biner belum dapat memulai menghitung sebelum diperintah dengan
instruksi : SETB TR1 Untuk menghentikan proses pencacahan, dipakai instruksi CLR TR1
Bit TR1 dan TR0 yang dipakai untuk mengendalikan proses pencacahan, terletak di
dalam register TCON (memori-data internal nomor 88) yang bisa dialamati secara bit (bit
addressable). Sehingga TR0 dan TR1 bisa diatur secara terpisah (dengan perintah SETB
atau CLR), tidak seperti mengatur TMOD yang harus dilakukan secara bersamaan.
Demikian pula bit penampung overflow pencacah biner TF0 dan TF1, dalam register
TCON keduanya masing-masing bisa di-monitor sendiri oleh program.
Timer/ Counter dapat dihidup dan matikan secara instruksi program dengan mengatur
logika TRx ataupun secara hardware dengan memberikan logika 0 pada pin INTx.
Tabel 13. Isi TMOD sebagai fungsi timer/counter
63

Nilai awal timer/counter harus dimasukkan dulu ke dalam timer register Timer High
(TH) dan Timer Low (TL). Secara umum delay waktu timer (T) dapat dihitung yaitu dengan
cara:
1. Sebagai timer 8 bit. T=(255-TLx)*1uS
2. Sebagai timer 13 bit. T=(8191-THxTLx)*1uS
3. Sebagai timer 16 bit. T=(65535-THxTLx)*1uS
catatan frekuensi crystal yang digunakan adalah 12 MHz.

Contoh : Diinginkan delay waktu 10 mS menggunakan timer 16 bit. Maka nilai THx
dan TLx adalah : T=(65535-THxTLx)*1uS
THxTLx=65535-(T/1uS)
THxTLx=65535-(10mS/1uS)
THxTLx=65535-10000
THxTLx=55535d=D8EFh
Maka THx=D8h dan TLx=EFh
Jika diperlukan, inisialisasi atau perubahan terhadap nilai THx dan/ atau TLx dapat
dilakukan dengan cara mengisikan nilai tertentu ke dalam register tersebut. Misalnya register
Timer/Counter 0 diisi dengan nilai 814Ah dan register Timer/Counter 1 diisi dengan nilai
0CF32h, maka instruksinya adalah sebagai berikut :
MOV TH0, #81h
MOV TL0, #4Ah
MOV TH1, #0CFh
MOV TL1, #32h

Pemakaian waktu tunda


Waktu tunda bisa dibangkitkan secara sederhana sedangkan untuk mendapatkan
waktu tunda yang panjang biasanya menggunakan Timer. Instruksi-instruksi berikut ini bisa
dipakai untuk membangkitkan pulsa ‘0’ dengan lebar 3 mikro-detik pada kaki P1.0
CLR P1.0
NOP ; 1 mikro-detik
NOP ; 1 mikro-detik
SETB P1.0 ; 1 mikro-detik

Instruksi baris pertama membuat P1.0 yang mula-mula ‘1’ menjadi ‘0’, pelaksanaan
instruksi NOP memerlukan waktu 1 mikro-detik (jika MCS51 bekerja pada frekuensi 12
MHz), instruksi SETB P1.0 juga memerlukan waktu 1 mikro-detik, total waktu sebelum P1.0
64

kembali menjadi ‘1’ adalah 3 mikro-detik (baris 2 3 dan 4). Dengan demikian terjadilah pulsa
dengan lebar 3 mikro-detik pada kaki P1.0 seperti terlihat pada Gambar 6.14

Gambar 5.14. Pulsa 3 mikro-detik pada P1.0

Dengan sedikit perubahan instruksi-instruksi di atas bisa membangkitkan sinyal


dengan frekuensi 100 KHz pada kaki P1.0 :

Sinyal100KHz:
CPL P1.0 ; 1 mikro-detik
NOP ; 1 mikro-detik
NOP ; 1 mikro-detik
SJMP Sinyal100KHz ; 2 mikro-detik

Instruksi CPL P1.0 pada baris 1 membalik keadaan pada P1.0, bila mula-mula P1.0
bernilai ‘1’ akan dirubah menjadi ‘0’, sebaliknya bila mula-mula ‘0’ akan dirubah menjadi
‘1’. Total waktu tunda ke-empat baris di atas adalah 5 mikro-detik, sehingga yang terjadi
adalah P1.0 bernilai ‘0’ selama 5 mikro-detik dan bernilai ‘1’ selama 5 mikro-detik berulang
terus tanpa henti, dengan frekuensi sebesar 1/10 mikro-detik = 100.000 Hertz.
Program di atas bisa pula dibuat dengan memakai Timer 1 sebagai pengatur waktu
tunda sebagai berikut :

MOV TMOD,#00100000 ; Timer 1 bekerja pada Mode 2


MOV TH1,#F6 ; Nilai pengisi ulang TL1
SET TR1 ; Timer 1 mulai mencacah
Ulangi:
JB TF1,$ ; Tunggu sampai melimpah
CPL P1.0 ; Keadaan pada P1.0 di-balik
CLR TF1 ; Hapus limpahan pencacah
SJMP Ulangi ; Ulangi terus tiada henti…

Instruksi baris pertama mempersiapkan Timer 1 bekerja pada Mode 2 – Pencacah


Biner 8 bit dengan Isi Ulang, bilangan pengisi ulang ditentukan sebesar F6 yang disimpan ke
register TH1 pada baris 3, instruksi berikutnya memerintahkan pencacah biner mulai
mencacah.
65

Pencacah biner yang dibentuk dengan register TL1 akan mencacah naik, mulai dari
$F6 sampai $FF, saat pencacah melimpah dari $FF ke $00 bit TR1 pada register TCON
akan menjadi ‘1’ dan TL1 secara otomatis di isi ulang dengan bilangan $F6 yang tersimpan
pada register TH1. Hal ini akan terjadi terus menerus dan berulang setiap 10 siklus sinyal
clock ($F6, $F7, $F8, $F9, $FA, $FB, $FC, $FD, $FE, $FF kembali ke $00, total 10 siklus)
Instruksi BIT TR1,$ menunggu bit TR1 menjadi ‘1’, yakni saat pecacah biner
melimpah dari $FF ke $00. Lepas dari penantian tersebut, P1.0 dibalik keadaanya dengan
instruksi CPL P1.0, TR1 dikembalikan menjadi 0 (harus dikembalikan sendiri dengan
instruksi ini), agar bisa ditunggu lagi sampai menjadi ‘1’ kembali setelah instruksi SJMP
Ulangi. Frekuensi dari sinyal di P1.0 sebesar 1 / 16 mikro-detik = 31,25 KHz.
Contoh 1. Timer Mode 0
$mod51
ORG 0000H
LJMP MULAI
ORG 0100H
MULAI: MOV TMOD,#00H ; Timer 0 pada mode 0
MOV TL0,#17H ; T=(8191-THx TLx)*1uS
MOV TH0,#1CH
SETB TR0
LOOP: JBC TF0,SELESAI
SJMP LOOP
SELESAI:
SJMP MULAI
END

Contoh 2. Counter
$mod51
ORG 0000H
LJMP MULAI
ORG 0100H
MULAI: MOV TMOD,#05H ;COUNTER MODE 1
SETB TR0
LOOP: MOV A,TL0
MOV P1,A
SJMP LOOP
END
66

Tugas
1. Tuliskan data yang diisikan pada TMOD,THx dan TLx, jika menggunakan timer1
mode 1 waktu timer 100 ms kemudian tuliskan perintah untuk menjalankan dan
menghentikan timer.
2. Buatlah program bahasa rakitan untuk memberikan logika 1 pada P0.0 selama 10 ms
kemudian berikan logika 0 pada P0.0 selama 10ms. Gunakan timer 0 mode 1
3. Buatlah program bahasa rakitan untuk memberikan logika 1 pada P0.0 selama 10 ms
kemudian berikan logika 0 pada P0.0 selama 10ms. Gunakan timer 1 mode 1 ulangi
sampai 50 kali
4. Buatlah program bahasa rakitan untuk perintah menggunakan timer 0 pada mode 2
dan mode 3
5.
5.3 SERIAL INTERFACE
MCS-51 memiliki kemampuan untuk berkomunikasi secara serial melalui pin RXD
dan TXD. Pada prinsipnya, komunikasi serial adalah melakukan transmisi data per bit.
Komunikasi serial terdiri dari dua macam, yaitu
1. Synchronous serial adalah komunikasi dilakukan hanya ada satu pihak pengirim atau
penerima) yang menghasilkan clock dan mengirimkan clock bersama dengan data.
2. Asynchronous serial adalah komunikasi dua arah (pengirim dan penerima) masing-masing
menghasilkan clock, namun hanya data yang ditransmisikan, Agar data yang dikirim sama
dengan data yang diterima, maka kedua frekuensi clock harus sama. pengirim akan
mengirimkan datanya sesuai dengan frekuensi clock pengirim, dan penerima akan
membaca data sesuai dengan frekuensi clock penerima.
Universal Asynchronous Receiver Transmitter (UART) yang digunakan pada serial
port MCS-51 mendukung komunikasi secara asinkron, bahkan tiga dari empat serial mode
yang dimiliki MCS-51 kompatibel dengan UART.

Gambar 21. komunikasi serial


67

Pada MCS-51, data ditampung sementara dalam register SBUF (Serial Buffer)
sebelum dikirim/diterima. Untuk mengatur mode komunikasi data serial dilakukan oleh
register SCON (Serial Control register). Untuk mengatur baudrate dilakukan oleh register
PCON (Power Control register).
MCS51 dilengkapi dengan 2 register dan beberapa bit tambahan untuk keperluan
pemakai port seri.

SBUF merupakan SFR (Special Function Register) yang terletak pada memori-data
internal dengan nomor 99. SBUF mempunyai kegunaan ganda, data yang disimpan pada
SBUF akan dikirim keluar MCS51 lewat port seri, sedangkan data dari luar MCS51 diterima
port seri diambil dari SBUF pula. Jadi meskipun hanya menempati satu nomor memori-data
internal nomor 99, sesungguhnya SBUF terdiri dari 2 register yang berbeda.

Bit addressable as SCON.0 to SCON.7


SCON merupakan SFR (Special Function Register) yang terletak pada memori-data
internal nomor 98, merupakan register utama untuk mengatur kerja port seri MCS51. Setelah
reset semua bit dalam SCON bernilai ‘0’.
Tabel 20. Serial Port Control

Bit 5-7 SCON yang berkaitan dengan serial port adalah SM0 & SM1 digunakan untuk
pemilih mode komunikasi serial.
Tabel 21. Mode Komunikasi Serial
68

Jika SM2 bernilai ‘1’ maka komunikasi multiprosesor diaktifkan

Tabel 22. Mode Komunikasi Multiprosesor

Bit REN (bit 4) dipakai untuk mengaktipkan kemampuan port seri menerima data.
Pada mode 0 (pin RxD/ P3.0) dipakai untuk mengirim data seri (REN=’0’) dan juga untuk
menerima data seri (REN=’1’). Sifat ini terbawa pula pada saat port seri bekerja pada mode
1, 2 dan 3, meskipun pada mode-mode tersebut kaki RxD hanya dipakai untuk mengirim
data, agar pin RxD bisa dipakai untuk menerima data terlebih dulu harus dibuat REN=’1’.
Setelah reset bit REN bernilai ‘0’.
Pada mode 0, nilai SM2 harus ‘0’, REN harus diberi nilai ‘1’ untuk mengaktifkan
penerimaan data. Jika REN diberi nilai ‘0’, maka tidak akan ada penerimaan data.
Pada mode kerja 1, RB8 dipakai untuk menampung bit stop yang diterima, bila RB8
bernilai ‘1’ maka data diterima dengan benar, jika RB8=’0’ berarti terjadi kesalahan
kerangka (framing error). RB8 adalah bit ke-9 yang diterima dalam mode 2 atau 3. Pada
mode 1, RB8 adalah stop bit. Yang diterima. Pada mode 0, RB8 tidak digunakan
Pada mode kerja 2 dan mode kerja 3, port seri bekerja dengan 9 bit data, SBUF yang
kapasitasnya 8 bit tidak cukup untuk keperluan ini. Bit ke-sembilan yang akan dikirim
terlebih dulu diletakkan di TB8 (bit 3), bit RB8 (bit 2) merupakan bit yang dipakai untuk
menampung bit ke-sembilan yang diterima port seri. TB8 adalah bit ke-9 yang dikirimkan
dalam mode 2 atau 3. Nilai bit ini diatur oleh program user.
69

Bit TI (bit 1) merupakan petanda. Setelah port seri selesai mengirim data yang
disimpan ke-dalam SBUF, bit TI akan bernilai ‘1’ dengan sendirinya, bit ini harus di-nol-kan
dengan program agar 69ias dipakai untuk memantau keadaan SBUF dalam pengiriman data
berikutnya.
Pengiriman data serial dimulai ketika sebuah byte data dikirimkan ke SBUF. TI akan
berlogika 1 ketika data telah selesai dikirimkan. Penerimaan data serial dimulai ketika REN
dalam SCON di set berlogika 1. RI akan berlogika 1 ketika data telah selesai diterima. Data
tersebut kemudian disimpan di dalam SBUF
Sub-rutin Serial Out berikut dipakai untuk mengirim data seri, bisa dipakai untuk
semua mode port seri. Baris 3 menunggu TI menjadi ‘1’, dimaksud untuk memastikan
pengiriman data sudah selesai. Data yang akan dikirim sudah disimpan di A, pada baris 2
data tersebut dikirim melalui port seri dengan cara meletakannya di SBUF. Agar TI bisa
dipakai untuk memantau keadaan SBUF pada pengiriman data berikutnya, pada baris 4 TI di-
nol-kan.
SerialOut:
MOV SBUF,A ; kirim data baru
JNB TI,$ ; tunggu data selesai dikirim
CLR TI ; petanda ada pengiriman baru
RET
Bit RI (bit 0) merupakan petanda. Setelah SBUF menerima data dari port seri, bit RI
akan bernilai ‘1’ dengan sendirinya, bit ini harus di-nol-kan dengan program agar bisa
dipakai untuk memantau keadaan SBUF dalam penerimaan data berikutnya.
Sub-rutin Serial In berikut dipakai untuk menerima data seri, bisa dipakai untuk
semua mode port seri. Baris 2 menunggu RI menjadi ‘1’, dimaksud untuk memastikan sudah
ada data baru yang diterima pada SBUF. Pada baris 3 data pada SBUF diambil ke A. Agar RI
bisa dipakai untuk memantau keadaan SBUF pada pengiriman data berikutnya, pada baris 4
RI di-nol-kan.
SerialIn:
JNB RI,$ ; tunggu SBUF berisi data baru
MOV A,SBUF ; ambil data
CLR RI ; pentanda data sudah diambil
RET

PCON / Power Mode Control Special Function Register


70

Bit Simbol Fungsi


Serial baud rate modify bit . Set 1 oleh program untuk
menggandakan baud rate menggunakan timer 1 pada
7 SMOD
mode 1, 2 dan 3. Clear oleh program untuk menggunakan
baud rate timer 1.
6'-4 Tidak digunakan
3 GFI General pupose user flag bit 1.
2 GF0 General pupose user flag bit 0.
Power down bit . Set 1 oleh program untuk masuk
konfigurasi power down . Semua aktifitas CPU akan
1 PD
terhenti. Cara untuk keluar dari mode ini adalah dengan
melakukan reset.
Idle mode bit . Set 1 oleh program untuk masuk konfigurasi
0 IDL idle mode . Yaitu penghentian pulsa clock
Port seri pada MCS51 bisa dipakai dalam 4 mode kerja yang berbeda.
Mode 0
Mode ini bekerja secara sinkron, data seri dikirim dan diterima melalui kaki P3.0 (RxD), dan
kaki P3.1 (TxD) dipakai untuk menyalurkan clock pendorong data seri yang dibangkitkan

MCS51. Data dikirim/diterima 8 bit sekaligus, dimulai dari bit yang bobotnya paling kecil
(bit 0) dan diakhiri dengan bit yang bobotnya paling besar (bit 7). Kecepatan pengiriman data
=1/12 frekuensi kristal
Jika bit SM1 & SM0 dalam SCON adalah 00, menyebabkan SBUF dapat menerima
atau mengirim data 8 bit melalui pin RXD. Pin TXD digunakan sebagai jalur clock. Baudrate
tetap yaitu 1/12 frekuensi osilator.
Ketika mengirim data, data digeser keluar pin RXD setelah satu pulsa clock. Data
akan berubah ketika clock dalam fase falling edge / transisi dari high ke low.
Ketika menerima data dari pin RXD, data harus disinkronkan dengan pulsa clock
yang dihasilkan pada TXD.
Mode 1
Mode ini bekerja secara asinkron, data dikirim melalui kaki P3.1 (TxD) dan penerima
melalui kaki P3.0 (RxD). Pada Mode 1 data dikirim/ diterima adalah 10 bit sekaligus, diawali
71

dengan 1 bit start, disusul dengan 8 bit data yang dimulai dari bit yang bobotnya paling kecil
(bit 0), diakhiri dengan 1 bit stop. Pada MCS51 yang berfungsi sebagai penerima bit stop
ditampung pada RB8 dalam register SCON secara otomatis. Kecepatan pengiriman data
(baud rate) bisa diatur sesuai dengan keperluan. Mode ini dikenal sebagai UART (Universal
Asynchronous Receiver/ Transmitter).

Ketika SM0 dan SM1 adalah 01, SBUF menjadi 10-bit full-duplex
receiver/transmitter yang dapat menerima dan mengirim data pada waktu yang sama. Pin
RXD menerima semua data dan Pin TXD mengirim semua data.
Pengiriman data diawali dengan start bit, disusul dengan 8 bit data (Least Significant
Bit / LSB terlebih dahulu) dan diakhiri dengan stop bit. Interrupt flag TI akan 1 setiap kali 10
bit dikirim.
Pengiriman data dimulai ketika start bit diterima, disusul dengan 8 bit data dan
berakhir dengan diterimanya stop bit. Data 8 bit disimpan dalam SBUF dan stop bit disimpan
pada RB8 dalam SCON.sedangakan Interrupt flag RI akan berlogika 1 setiap kali 10 bit
diterima.
Mode 2
Data dikirim/ diterima 11 bit sekaligus, diawali dengan 1 bit start, disusul 8 bit data
yang dimulai dari bit yang bobotnya paling kecil (bit 0), kemudian bit ke 9 , diakhiri dengan
1 bit stop.
Pada MCS51 yang berfungsi sebagai pengirim, bit 9 ditampung di bit TB8 dalam
register SCON secara otomatis, sedangkan sebagai penerima, bit 9 ditampung pada bit RB8
dalam register SCON secara otomatis, sedangkan bit stop diabaikan tidak ditampung.
Kecepatan pengiriman data (baud rate) dipilih antara 1/32 atau 1/64 frekuensi osilator kristal.
72

Mode 2 sama dengan mode 1, tetapi jumlah data yang dikirim adalah 11 bit, dimulai
dengan start bit, 9 bit data dan diakhiri dengan 1 bit stop. Data ke-9 disimpan pada TB8
dalam SCON ketika proses pengiriman dan disimpan dalam RB8 ketika proses penerimaan.
Mode 3
Mode ini sama dengan Mode 2, hanya saja kecepatan pengiriman data (baud rate)
bisa diatur sesuai dengan keperluan, seperti halnya Mode 1. Baud rate untuk mode 1 dan 3
dihasilkan oleh Timer 1. Pengaturan baud rate untuk mode 1 dan 3 dapat dilakukan dengan
cara mengubah nilai SMOD, TMOD, dan TH1
Pada mode asinkron (Mode 1, Mode 2 dan Mode 3), port seri MCS51 bekerja secara
full duplex, artinya saat yang sama port seri ini bisa mengirim data sekaligus menerima data.
Register SBUF merupakan register penghubung port seri. Dalam ke-empat mode di
atas, semua instruksi yang mengakibatkan perubahan isi SBUF akan mengakibatkan port seri
mengirimkan data keluar dari MCS51. Agar port seri bisa menerima data, bit REN dalam
register SCON harus bernilai ‘1’. Pada mode 0, proses penerimaan data dimulai dengan
instruksi CLR RI, sedangkan dalam mode lainnya proses penerimaan data diawali oleh bit
start yang bernilai ‘0’. Data yang diterima oleh port seri dari luar MCS51, diambil dengan
instruksi MOV A,SBUF.
Mengambil data dari SBUF dan menyimpan data ke SBUF sesungguhnya bekerja
pada dua register yang berlainan, meskipun nama registernya sama-sama SBUF.

6.4 BAUD RATE


Baud rate adalah frekuensi clock yang digunakan dalam rangka mengatur kecepatan
data pengiriman dan penerimaan data. Satuan baud rate p ada umumnya adalah bps (bit per
second), yaitu jumlah bit yang dapat ditransmisikan selama setiap detiknya.
Baud rate untuk mode 0 bernilai tetap dengan dengancara menghitungnya adalah.

Baud rate untuk mode 2 memiliki 2 variasi tergantung dari kondisi SMOD. Rumus
baud rate untuk mode 2 adalah

Baud rate untuk mode 1 dan 3 dihasilkan oleh Timer 1. Pengaturan baud rate untuk
mode 1 dan 3 dapat dilakukan dengan cara mengubah nilai SMOD, TMOD, dan TH1. Nilai
baud rate dapat diperoleh dengan cara:.
73

Umumnya Timer 1 dioperasikan pada mode 2 (8-bit Auto Reload) sehingga dapat
ditentukan dengan cara:

Jika diinginkan baudrate-nya standar, maka menggunakan crystal dengan frekuensi


11.0592 MHz. Untuk mendapatkan baudrate standar 9600 hertz maka nilai TH1 dapat
dihitung dengan cara

Berdasarkan persamaan diatas user dapat menghitung berapa nilai TH1 yang
dibutuhkan jika diketahui baud rate yang diinginkan dengan cara:.

Pengaturan baud rate yaitu nilai baud rate dan nilai TH1 diusahakan harus tepat dan
bukan nilai pembulatan. Untuk komunikasi serial kecepatan tinggi, pembulatan terhadap
nilai-nilai tersebut dapat mengakibatkan kekacauan dalam proses pengiriman atau
penerimaan. Jika terdapat nilai pecahan, user disarankan untuk mengganti osilator dengan
frekuensi yang sesuai. Untuk komunikasi dengan kecepatan rendah, toleransi terhadap
kesalahan cukup besar sehingga pembulatan masih boleh dilakukan. Misalkan baud rate yang
diinginkan adalah 19200 bps dengan frekuensi osilator 11,0592 MHz. Dengan memasukkan
data ini ke dalam persamaan 5 maka akan didapat persamaan 6.

Jika 2SMOD bernilai ‘1’, maka akan didapat TH1 sebesar 254,5. Untuk menghindari
TH1 berupa pecahan, 2SMOD harus bernilai ‘2’ (SMOD bernilai ‘1’) sehingga didapat TH1
sebesar 253 atau FDh.
74

Untuk mendapatkan baud rate yang lambat, user dapat mengoperasikan Timer 1 pada
mode 1 dengan rumus pada persamaan 7.

Tabel 30. Nilai dan Konfigurasi Baud Rate

Proses inisialisasi bertujuan untuk menentukan mode komunikasi serial dan baud rate
yang digunakan. Register yang harus diatur terlebih dahulu meliputi:
1. SCON
Langkah pertama adalah menentukan mode yang akan digunakan (mode 0, 1, 2, atau
3), kemampuan menerima data, dan nilai bit ke-9. Misalnya mode yang digunakan adalah
mode 1 dengan kemampuan menerima data namun tanpa komunikasi multiprosesor, maka
instruksinya adalah sebagai berikut:
MOV SCON, #01010000b
atau
MOV SCON, #50h
Atau
SETB SM1
SETB REN
Tabel 31. Isi SCON
75

2. TMOD, TH1 dan/atau TL1, PCON, dan TCON


Jika komunikasi serial digunakan dalam mode 1 atau 3, maka langkah berikutnya
adalah menentukan baud rate.
Misalnya Timer/Counter 1 digunakan sebagai timer dalam mode 2 untuk
membangkitkan baud rate 19200 bps, maka instruksinya adalah sebagai berikut :
MOV TMOD, #00100000b
MOV TH1, #0FDh
MOV PCON, #10000000b
MOV TCON, #01000000b
atau
MOV TMOD, #20h
MOV TH1, #0FDh
MOV PCON, #80h
SETB TR1

Contoh Program:
ORG 100H
ACALL Inisialisasi
ACALL TERIMA
ACALL KIRIM
Inisialisasi :
MOV SCON,#50H
MOV TMOD,#20h
MOV TH1,#250
SETB TRI
RET
TERIMA: JNB RI,TERIMA
MOV A,SBUF
CLR RI
MOV P2,A
RET
KIRIM: CLR TI
MOV SBUF,A
JNB TI,$
SJMP TERIMA
END
76

Tugas:
1. Buatlah program untuk menerima data dengan Konfigurasi komunikasi serial mode 1,
Baud rate 2400 BPS kemudian setiap data yang diterima dari port 1 dikirimkan ke
port 0 selama 100 us.

2. Buatlah program untuk mengirim data dengan Konfigurasi komunikasi serial mode 1,
Baud rate 1200 BPS , data yang kirim berasal dari port 0.
3. Jelaskan prinsip kerja rangkaian dibawah ini, buatlah program
untuk
77

4. Jelaskan prinsip kerja rangkaian berikut ini, buat flowchat dan


program

Anda mungkin juga menyukai