Rangkaian Seven Segment pada Mikrokontroler
Rangkaian Seven Segment pada Mikrokontroler
Percobaan 1
DASAR MIKROKONTROLER
Tujuan :
Teori :
Mikrokontroler adalah suatu single chip yang didalamnya terdapat mikroprosesor, RAM, ROM, Timer
dan I/O Port dalam satu kesatuan, sehingga dalam menggunakannya tidak diperlukan penambahan RAM, ROM,
Timer dan I/O Port. Mikrokontroler juga ada yang memiliki Address Bus sehingga memungkinkan mikrokontroler
untuk menambahkan RAM, ROM, I/O Port dan Timer.
MCS-51 adalah nama keluarga mikrokontroler yang dibuat oleh Intel pada tahun 1981 yang produk
pertamanya adalah 8051 dan kemudian dikembangkan oleh perusahaan-perusahan lain. Beberapa jenis
mikrokontroler tersebut antara lain :
1. Intel
Mikrokontroler yang dikembangkan Intel adalah sebagai berikut:
Jenis ROM RAM TIMER I/O SERIAL INTR
PINS PORT Source
8051 4K 128 2 32 1 6
8052 8K 256 3 32 1 8
8031 0K 128 2 32 1 6
2. ATMEL
Mikrokontroler yang dikembangkan ATMEL adalah sebagai berikut:
Jenis ROM RAM TIMER I/O SERIAL INTR VCC PACK
PINS PORT Source
AT89C51 4K 128 2 32 1 6 5 40
AT89LV51 4K 256 2 32 1 6 3 40
AT89C1051 1K 64 1 15 1 3 3 20
AT89C2051 2K 128 2 15 1 6 3 20
AT89C52 8K 256 3 32 1 8 5 40
AT89LV52 8K 128 3 32 1 8 3 40
3. Dallas
Mikrokontroler yang dikembangkan DALLAS adalah sebagai berikut :
Berikutnya 128 byte SFR (Special Function Register) yang berisi kumpulan register yang mempunyai
fungsi khusus antara lain pengontrol timer, interupsi, komunikasi serial, dsb. 8031 mengijinkan penggunaan RAM
eksternal maksimal 64 Kbyte yang hubungannya digambarkan di bawah ini :
Dalam praktikum ini digunakan mikrokontroler jenis AT89C51 atau AT89S51, karena mikrokontroler
tersebut sangat mudah didapat, murah dan mempunyai fasilitas yang canggih. Bahasa pemrograman yang
digunakan adalah Assembly dan C/C++ untuk keluarga MCS-51.
Parallel Port
Untuk melakukan hubungan dengan piranti di luar sistem, dibutuhkan alat I/O (input/output). Sesuai
dengan namanya, alat I/O dapat menerima data dari mikrokontroler dan dapat pula memberi data ke
mikrokontroler.
Ada dua macam perantara I/O yang dipakai yaitu piranti untuk hubungan serial (UART) dan piranti untuk
hubungan paralel (PIO). Parallel port pada 89C51 adalah sebagai berikut:
1. Port 0 sebanyak 8 pins dan terletak di pin 32-39. Untuk menggunakan Port 0 sebagai output maupun input,
masing-masing pin dihubungkan ke resistor pull up sebesar 10K. Ini karena P0 itu adalah open colector yang
digunakan TTL chip, berbeda dengan P1, P2 dan P3. Contoh untuk mengirimkan data ke P0 dengan nilai
55H.
Selain sebagai output, port 0 juga dapat digunakan untuk input. Sebelum data dibaca oleh port 0, port 0
menulis data 1 ke semua pin. Setelah itu data dapat dibaca oleh port 0. Contoh program untuk membaca
data :
MOV P0,#FFH ; menulis data 1 ke semua pin
MOV A,P0 ; data dari P0 dikirimkan ke ACC
2. Port 1 berjumlah 8 pin (pin 1-8). Untuk menggunakan Port 1 sebagai output maupun input, port ini tidak
memerlukan pull up external karena sudah tersedia pull up internal. Contoh program untuk mengirimkan data
sebesar 55H:
Selain sebagai output port 1 juga dapat digunakan untuk input. Sebelum data dibaca oleh port 1, port 1 menulis
data 1 ke semua pin. Setelah itu data dapat dibaca oleh port 1. Contoh program untuk membaca data :
3. Port 2 jumlahnya ada 8 pin (pin 1-8). Untuk menggunakan Port 2 sebagai output maupun input, port ini tidak
memerlukan pull up external karena sudah tersedia pull up internal. Contoh program untuk mengirimkan data
sebaesar 55H:
Selain sebagai output, port 0 juga dapat digunakan untuk input. Sebelum data dibaca oleh port 2, port 2
menulis data 1 ke semua pin. Setelah itu data dapat dibaca oleh port 2. Contoh program untuk membaca data :
4. Port 3 menempati pin 10 sampai dengan pin 17 dengan jumlah 8 pin. Port 3 dapat digunakan sebagai input
atau output. Port 3 tidak memerlukan pull-up resistor, sama dengan P1 dan P2 yang tidak memerlukannya.
Port 3 mempunyai tambahan fungsi seperti Interrupt. P3.0 dan P3.1 digunakan untuk RxD dan TxD serial
komunikasi signal. P3.2 dan P3.3 digunakan untuk Interrupt eksternal. Bit P3.4 dan P3.5 digunakan untuk
Timer 0 dan 1. Sedangkan, P3.6 dan P3.7 digunakan untuk signal WR dan RD.
Prosedur Percobaan :
1. Aktifkan program FSI, kemudian ketik program di bawah ini :
a) LJMP MULAI
ORG 100H
MULAI :
MOV A, #9CH
ADD A, #64H
ADD A, #07H
SELESAI :
JMP SELESAI
b) LJMP MULAI
ORG 100H
MULAI:
MOV A, #9CH
ADD A, #64H
ADDC A, #07H
SELESAI:
JMP SELESAI
b) LJMP MULAI
ORG 100H
MULAI:
MOV A, #81H
MOV B, #25H
DIV AB
SELESAI :
JMP SELESAI
Simpan program pada direktori kerja anda.
Jalankan program (Debug → Start), tekan F7 atau F8 untuk melakukan tracing program kemudian amati
perubahan nilai pada register ACC dan B pada kedua program diatas setelah itu tulis kesimpulan perbedaan
apa yang ada pada kedua program diatas.
3. Ketiklah algoritmanya dari program Assembly dibawah ini, kemudian jalankan tiap perintah :
Catatan : Listing program C/C++ berikut tidak dapat disimulasikan, karena hanya listing padanan dari
program Assembly disebelahnya.
a) LJMP MULAI void main()
ORG 100H {
MULAI : ACC = 0;
MOV A, #00H for (R2 = 0x0A; R2 > 0; R2 --)
MOV R2, #0AH {
ULANG : ACC = ACC + 0x03;
ADD A, #03H
}
DJNZ R2, ULANG while(1);
SELESAI : }
JMP SELESAI
LOOP: ACC++;
INC A }
CJNE A, #09H, AWAL while(ACC != 0x09);
STOP: while(1);
JMP STOP }
LJMP MULAI
ORG 100H
MULAI:
MOV A, #01H
LOOP:
MOV P1, A
MOV B, #02H
MUL AB
SJMP LOOP
5. Buat program untuk membaca nilai pada Port1, kemudian hasil pembacaan dibagi dengan 3, kemudian
hasilnya ditampilkan di Port2 dan sisanya ditampilkan di Port3.
Percobaan 2
AKSES PPI dan MOTOR STEPER
Tujuan :
PPI 8255
Apabila kita memerlukan tambahan port paralel, kita dapat menggunakan IC 8255. PPI 8255 memiliki 3
buah port paralel yang masing-masing panjangnya 8 bit yaitu Port A, Port B dan Port C. Dan mempunyai alamat
sendiri-sendiri dan pada modul praktikum ini, Port A beralamat 0x0A000, Port B beralamat 0x0A001, Port C
beralamat 0x0A002 dan Control Word beralamat 0x0A003.
PPI 8255 merupakan chip I/O produksi Intel yang memiliki 3 buah port I/O yang masing-masing diberi
nama Port A, B dan C. Ketiga port tersebut dibagi menjadi 2 kelompok yaitu kelompok A yang terdiri atas Port A
dan Port C tinggi (bit 4 sampai dengan bit 7) dan kelompok B yang terdiri atas Port B dan Port C rendah (bit 0
sampai dengan bit 3). Tiap-tiap kelompok tersebut diatur oleh rangkaian kontrol untuk masing-masing kelompok.
Blok diagram PPI 8255 ditunjukkan dalam gambar 2.1.
GROUP A
8 BIT BUS DATA I/O
INTERNAL PORT C PC7-PC4
BUS DATA
BIDIRECTIONAL
BUFFER
D7-D0 BUS DATA
GROUP B
I/O
PORT C PC3-PC0
RD
WR
KONTROL
A1 KONTROL GOUP B
LOGIKA GROUP B
I/O
A0 BACA/
PORT B PB7-PB0
TULIS
RESET
CS
Di dalam PPI 8255 terdapat 8 bit penyangga bidirectional tiga keadaan (Buffer 3-state) untuk data
yang terhubung ke CPU, yang berarti bahwa data dapat dikirim atau diterima oleh penyangga dari komputer,
sedangkan keluaran masing-masing port memiliki penyangga (buffer) dan bersifat menahan (latch), sehingga data
yang dikeluarkan ke port akan tetap keadaannya selama tidak diubah atau chip di-reset.
Operasi PPI 8255 yang berhubungan dengan pin-pin masukan dapat dilihat dalam tabel 2.4.
Tabel 2.2 : Mode Operasi PPI 8255
A1 A0 RD WR CS Operasi yang terjadi
Operasi baca
0 0 0 1 0 Port A ke bus data
0 1 0 1 0 Port B ke bus data
1 0 0 1 0 Port C ke bus data
Operasi tulis
0 0 1 0 0 Bus data ke port A
0 1 1 0 0 Bus data ke port B
1 0 1 0 0 Bus data ke port C
1 1 1 0 0 Bus data ke control register
Terdapat 3 macam mode operasi PPI 8255 yang dapat diprogram ke masing-masing port, yaitu :
Sedangkan untuk mode 2, port yang dapat digunakan untuk port masukan atau keluaran hanya port A, dan port C
digunakan sebagai sinyal kontrol perpindahan data dari atau menuju port A.
Pemilihan mode tersebut dilakukan dengan cara mengisikan suatu control word pada control word
register. Format control word register dapat dilihat dalam gambar 2.10. Dalam control word tersebut berisi
informasi tentang mode operasi yang diprogramkan untuk suatu port. Bila diprogram untuk operasi mode 1 atau
mode 2, maka ada dua port yang bekerja sama untuk melaksanakan penerimaan dan pengeluaran data dan
memberikan sinyal untuk kontrol.
Dalam mode 0, ketiga port PPI 8255 hanya berfungsi sebagai port masukan atau keluaran biasa, artinya
data dapat diambil atau diletakkan dari dan ke port secara langsung dengan instruksi IN/OUT ke Port 8255 tanpa
ada sinyal lain yang mengatur proses pengambilan atau peletakan data.
Semua port yang bekerja sebagai port keluaran akan bersifat menahan (latch), artinya data yang sudah
diletakkan ke port keluaran masih tetap selama tidak diubah oleh data lain yang ditulis ke port yang sama atau
akibat adanya sinyal RESET.
Dalam mode 0 tersebut ada 16 macam fungsi port yang dapat dibentuk dari kombinasi bit-bit D 0 sampai D4 pada
control word register. Ke-enambelas macam fungsi port dan control word dapat dilihat pada tabel 2.3
Tabel 2.3 : Enam belas macam control word pada mode 0
Group A Group B
Control Word
D4 D3 D1 D0 Port C Port C
Port A Port B (Hexadesimal)
(Upper) (Lower)
0 0 0 0 Output Output Output Output 80
0 0 0 1 Output Output Output Input 81
0 0 1 0 Output Output Input Output 82
0 0 1 1 Output Output Input Input 83
0 1 0 0 Output Input Output Output 88
0 1 0 1 Output Input Output Input 89
0 1 1 0 Output Input Input Output 8A
0 1 1 1 Output Input Input Input 8B
1 0 0 0 Input Output Output Output 90
1 0 0 1 Input Output Output Input 91
1 0 1 0 Input Output Input Output 92
1 0 1 1 Input Output Input Input 93
1 1 0 0 Input Input Output Output 98
1 1 0 1 Input Input Output Input 99
1 1 1 0 Input Input Input Output 9A
1 1 1 1 Input Input Input Input 9B
MOTOR STEPER
Stepper motor, baik yang mempunyai magnet permanen dan hybrid mempunyai 5 atau 6 kabel
sebagaimana yang ditunjukkan Gambar 2.3, kedua stepping motor tersebut mempunyai center tap pada dua
winding-nya. Pada saat digunakan center tap dari kedua winding tersebut dihubungkan dengan power negatif, dan
kedua kabel winding dihubungkan ke power positif untuk membalik arah.
Gambar 2.3 menunjukkan bagian motor yang mempunyai magnet permanen maupun hybrid yang
bergerak 30 derajat tiap step, dalam hal tersebut perbedaan antara kedua tipe motor ini tidak begitu besar. Winding
motor nomor 1 akan didistribusikan antara kutub stator bagian atas dan bawah, sementara winding motor no 2 akan
didistribusikan pada kutub bagian kanan dan kiri. Rotor ini bersifat permanen dengan 6 kutub, 3 kiri dan 3 kanan,
disusun melingkar.
Untuk memperoleh sudut stepping yang lebih akurat, rotor harus mempunyai kutub-kutub yang lebih
banyak dan haruslah proporsional. Motor 30 derajat pada Gambar 2.3 adalah design motor permanen yang paling
umum. Meskipun untuk stepping sebesar 15 dan 7.5 derajat juga dapat dilakukan. Motor magnet permanen dengan
step 1.8 derajat juga bisa dibuat, deimikian juga dengan motor hybrid yang memiliki stepping sebesar 3.6 dan 1.8
dengan ketepatan resolusi stepping sebesar 0.72 juga dapat dibuat.
Untuk memutar ke arah yang berlawanan perlu manipulasi bit sebagai berikut:
0011 Step 1
0110 Step 2
1100 Step 3
1001 Step 4
kembali ke Step 1
Pada modul mikrokontroler ini stepper motor dihubungkan dengan PPI 8255 yaitu PortA.0 s.d. PortA.3.
Untuk menghubungkan PPI 8255 dengan motor steper perlu interface lagi yaitu IC buffer 74LS245 dan
ULN2803. Mengenai karakteristik dari komponen itu dijelaskan sebagai berikut :
• 74LS245
2 1 8
3 A 0 B 0 1 7
4 A 1 B 1 1 6
5 A 2 B 2 1 5
6 A 3 B 3 1 4
7 A 4 B 4 1 3
8 A 5 B 5 1 2
9 A 6 B 6 1 1
A 7 B 7
1
19 D IR
G
74LS245
- Supply Voltage 7V
- Input Voltage :
- DIR or G 7V
- A or B 5.5V
- Operating Free Air Temperature Range 0º C to 70º C
- Storage Temperature range 65º C to 150º C
74LS245 digunakan sebagai buffer didalam mikroprosesor dan juga dapat digunakan untuk transfer data
dua arah. 74LS245 mempunyai trnasfer data dua arah bus A dan bus B dimana bus tersebut diatur oleh DIR, lihat
tabel kebenaranya.
• ULN2803
8-bit 50V 500 mA TTL compatibel dengan driver input NPN Darlington. Driver ini sangat baik untuk
beban seperti lampu, relay head printer dan juga cocok untuk alat lain yang mempunyai beban yang hampir sama
baik untuk computer, industri, aplikasi praktis. Driver ini mempunyai kemampuan output open collector dan diode
penahan untuk tekanan. ULN2803 adalah didesign compatible dengan standart TTL families.
Prosedur Percobaan:
1. Ketik program di bawah ini kemudian jalankan.
PORT_A EQU 0A000H #include <reg51.h>
CW EQU 0A003H #include <timer.h>
MULAI:
LCALL DELAY
MOV DPTR, #CW
MOV A, #80H
MOVX @DPTR, A
MOV DPTR, #PORT_A
MOV A, #01H
ULANG:
MOVX @DPTR, A
RL A
LCALL DELAY
SJMP ULANG
Modifikasi program diatas dengan mengganti RL menjadi RR
2. Buat program port A sebagai input dan port C sebagai output. Kemudian data yang diinputkan di port A
dapat ditampilkan di port C.
3. Buat program untuk memutar stepper motor dengan metode half step dan full step.
4. Buat program untuk memutar stepper motor ke kiri selama beberapa saat kemudian ke arah sebaliknya
dengan metode full step.
Percobaan 3
Seven segment
Tujuan :
• 74LS138
5 v
6
1 1 5
A Y 0
G 1
2 1 4
3 B Y 1 1 3
C Y 2 1 2
Y 3 1 1
4 Y 4 1 0
5 G 2A Y 5 9
G 2B Y 6 7
Y 7
74LS138
• 74LS47
74LS47 adalah driver untuk mengubah bilangan BCD menjadi data seven segmen, dan seven segmen yang
digunakan adalah common anode.
5 v
16
7 1 3
D 0 A
VC C
1 1 2
2 D 1 B 1 1
5 v 6 D 2 C 1 0
D 3 D 9
3 E 1 5
5 LT F 1 4
4 R BI G
B I/R B O
8
G N D
74LS47
LT
• Seven Segmen
Seven segment adalah sebuah display yang dapat menampilkan angka mulai 0 s.d. 9, dengan menggunakan
driver 74LS47. Ada dua model dari seven segment yaitu : common anode dan common cathode.
SS1
1
2
3
4
5
g
a
b
f
co1
7-Segment
co2
e
d
c
.
10
9
8
7
6
Prosedure Percobaan:
.1 Ketik program di bawah ini, kemudian jalankan.
2. Buatlah program untuk menampilkan angka 1 pada seven segment yang paling kiri, angka 2 untuk seven
segment di sampingnya dan seterusnya sampai angka 8 pada seven segment yang paling kanan.
3. Buatlah program counter-up pada 2 seven segment yang paling kanan, jika angka sudah menunjukan 99 maka
counter akan berhenti.
4. Buatlah program counter pada 2 seven segment LSB. Jika Port C bernilai 1, maka counter-up akan berjalan
dan akan berhenti saat Port C bernilai 0. Counter akan kembali bernilai 0 jika telah mencapai nilai maksimal.
Percobaan 4
TIMER dan COUNTER
Tujuan :
Teori :
Pada mikrokontroler 8051 terdapat dua buah Timer/Counter 16 bit yang dapat diatur melalui perangkat
lunak, yaitu Timer-Counter 0 dan Timer-Counter 1.
Pengontrol kerja Timer/Counter adalah register TCON (Timer Control) yang didefinisikan sebagai
berikut :
Tabel 4.1 Susunan bit dalam register TCON
Timer 1 Timer 0
Timer 1 Timer 0
Clock = 1
1
× freq. XTAL
12
1
=
1
• 12 ×10 6
12
1
=
10 6
= 10 –6 s = 1 µs
a. Sebagai timer 8 bit
• Counter
Pada dasarnya prinsip kerja Counter dan Timer adalah sama, perbedaannya yaitu pada sinyal clock yang
menyebabkan naiknya THn dan TLn. Kalau pada Timer adalah sinyal oscilator (crystal) sedangkan pada
Counter berasal dari eksternal yaitu pin Tn. Untuk kontrol dan modenya sama dengan Timer.
Prosedur Percobaan:
1. Ketik program di bawah ini, kemudian jalankan.
#include <reg51.h>
PORT_A EQU 0A000H
CW EQU 0A003H
at 0x0A000 xdata unsigned char PORT_A;
at 0x0A003 xdata unsigned char CW;
LJMP MULAI
ORG 100H
void delay(unsigned int lama)
{
MULAI :
unsigned int t;
MOV TMOD,#01H
for (t=1; t<=lama; t++)
MOV DPTR, #CW
{
MOV A, #80H
TH0 = 0xD8; TL0 = 0xF0;
MOVX @DPTR, A
TR0 = 1;
MOV DPTR, #PORT_A
while(!TF0);
LOOPING :
TR0 = 0; TF0 = 0;
MOV A, #00H
}
MOVX @DPTR, A
}
ACALL DELAY
MOV A, #0FFH
void main()
MOVX @DPTR, A
{
ACALL DELAY
TMOD = 0x01; delay(1);
SJMP LOOPING
DELAY :
CW = 0x80; delay(1);
MOV R0, #64H
LAGI :
while(1)
MOV TH0, #0D8H
{
MOV TL0, #0F0H
PORT_A = 0; delay(100);
SETB TR0
PORT_A = 0b11111111; delay(100);
ULANG :
}
JNB TF0, ULANG
}
CLR TF0
CLR TR0
DJNZ R0, LAGI
RET
3. Buatlah program simulasi untuk menghitung sinyal input per detik dengan memanfaatkan counter dan jumlah
counter ditampilkan di Port 1 mikrokontroler.
4. Buatlah program timer dengan ketentuan sebagai berikut :
- Saat timer diaktifkan, semua LED pada Port B akan menyala sedangkan pada Port C akan padam semua.
- Setiap ½ detik, LED pada Port B akan padam satu persatu mulai dari MSB sampai LSB.
- Jika semua LED pada Port B padam, maka counter akan bertambah 1. Nilai counter ditampilkan di Port C.
Percobaan 5
Tujuan :
Teori :
Salah satu peralatan I/O yang sering digunakan dalam minimum sistem mikrokontroler 8031 adalah
LCD. LCD dapat dihubungkan melalui jalur port I/O atau secara Address-Data. Untuk meng-inisialisasi LCD perlu
dilakukan beberapa hal :
a. Display Clear
Display clear digunakan untuk membersihkan display/tampilan dan meletakkan cursor pada posisi awal
(address 0).
DB7 DB0
0 0 0 0 0 0 0 1
b. Function Set
Function set digunakan untuk mengeset panjang data.
DB7 DB0
0 0 1 DL 1 * * *
* : invalid bit
DL (Data Length) = 1, panjang data 8 bit (DB7-DB0)
DL (Data Length) = 0, panjang data 4 bit (DB7-DB4)
c. Display ON / OFF
Display ON / OFF mengontrol on/off tampilan, tampilan cursor dan tampilan berkedip.
DB7 DB0
0 0 0 0 1 D C B
D : D = 1, display ON
D = 0, display OFF
C : C = 1, cursor ditampilkan
C = 0, cursor tidak ditampilkan
Memori RAM
RAM disebut sebagai volatile memory ketika daya hilang dari IC akan mengakibatkan hilangnya data.
RAM juga dapat disebut sebagai RAWM (read and write memory). Ada tiga tipe dari RAM, yaitu static RAM
(SRAM), NV-RAM (nonvolatile RAM) dan dynamic RAM (DRAM).
Pada desain ini RAM diletakan pada alamat C000H sampai dengan kapasitas RAM, untuk mengakses
RAM caranya sama dengan mengakses PPI8255 hanya mengubah alamatnya saja.
Prosedur Percobaan:
1. Jalankan program di bawah ini dan perhatikan apa yang terjadi pada LCD display.
#include <reg51.h>
ORG 100H
LJMP START at 0x0E000 xdata unsigned char LCD_C;
at 0x0E001 xdata unsigned char LCD_D;
DISPCLR EQU 00000001B
FUNCSET EQU 00111000B unsigned char DISPCLR = 0b00000001;
DISPON EQU 00001110B unsigned char FUNCSET = 0b00111000;
ENTRMOD EQU 00000110B unsigned char DISPON = 0b00001110;
LCD_C EQU 0E000H unsigned char ENTRMOD = 0b00000110;
LCD_D EQU 0E001H
Percobaan 6
Teori :
ADC (Analog Digital Converter)
ADC 0804 berfungsi untuk mengubah signal analog menjadi signal digital, agar komputer dapat membaca
signal analog maka diperlukan IC ADC 0804 untuk mengubah signal analog menjadi signal digital. ADC 0804
mempunyai input analog maksimal 5 volt, untuk setiap kenaikan bit pada ADC 0804 adalah 0,02 volt.
ADC 0804 mempuyai 1 inputan saja, agar ADC0804 ini mempunyai lebih dari satu inputan diperlukan
multiplexer analog MC4051. Multiplexer ini mempunyai dua buah selector dan 4 input yang akan dipilih.
Keterangan :
1. Port A sebagai keluaran data ADC
2. Port C.0 dan Port C.1 untuk selector input dari potensio yang akan diubah ke digital
Port C.1 Port C.0 Input analog
0 0 Potensio 0
0 1 Potensio 1
1 0 Potensio 2
1 1 Potensio 3
Bit_Decimal =
Vin × 255
Vref
Resolusi adalah 1 bagian dibagi dengan banyaknya tingkatan yang tesedia, atau dengan rumus dapat ditulis :
- Resolusi : 1 / ( 2n – 1 )
DAC 0808 series adalah merupakan IC monolitik 8 bit, dengan kelebihan sebagai berikut :
- Akurasi relatif + 0.19 %
- Arus skala penuh + 1 LSB
- Settling time cepat : 150 ns
- Non-inverting digital input : TTL dan CMOS Compatible
- High speed multiplying slew rate : 8 mA/s
- Tegangan supply + 4.5 V sampai +18 V
- Low power 33 mW untuk tegangan supply +5 V
Keterangan :
1. PORT B sebagai masukan data digital yang akan diubah menjadi analog
2. Untuk Perhitungan Penentuan Bit Decimal dan Volt hampir sama dengan Perhitungan ADC.
Procedure percobaan
Dengan menggunakan Voltmeter, ukurlah tegangan referensi ADC dan DAC
1. Buatlah program untuk membaca data dari ADC ditampilkan di PortB.
2. Buatlah program agar pada DAC mengeluarkan tegangan output 3,25 Volt.
Percobaan 7
KOMUNIKASI SERIAL
Tujuan :
- Mengetahui cara mengakses serial port pada minimum sistem Mikrokontroler 8031
Teori :
Mikrokontroler 8031 juga dilengkapi dengan port serial. Port serial memungkinkan kita mengirim data
dalam format serial. Port serial dalam mikrokontroler 8031 memiliki sifat full duplex, yang berarti dapat mengirim
dan menerima data secara bersamaan. Register penerima dan pengirim pada port serial diakses pada SBUF (serial
buffer). Register pengontrol kerja port serial ini adalah SCON (serial control). Bit-bit SCON didefinisikan sebagai
berikut :
MSB LSB
A. Mode 0
Mode ini bekerja secara sinkron, data serial dikirim dan diterima melalui kaki P3.0 (Rx), sedangkan
kaki P3.1 (Tx) digunakan untuk menyalurkan detak pendorong data serial yang dibangkitkan mikrokontroler. Data
dikirim/diterima 8 bit sekaligus, dimulai dari bit ke-0 sampai dengan bit ke-7. Kecepatan pengiriman data
1
(baudrate) adalah frekuensi kristal yang digunakan.
12
B. Mode 1
Mode ini tetap, yaitu data dikirim melalui kaki P3.1 (Tx) dan diterima melalui kaki P3.0 (Rx), secara
asinkron (juga seperti Mode 2 dan Mode 3). Data dikirim/diterima 10 bit sekaligus, diawali dengan 1 bit start, 8 bit
data mulai dari bit ke-0 sampai dengan bit ke-7, dan 1 bit stop. Pada MCS-51 yang berfungsi sebagai penerima bit
stop adalah RB8 pada register SCON. Baud rate dapat diatur sesuai keperluan. Mode 1, Mode 2, dan Mode 3
dikenal dengan Universal Asynchronous Receiver/Transmitter (UART).
C. Mode 2
Data dikirim/diterima 11 bit sekaligus, diawali dengan 1 bit start, 8 bit data mulai dari bit ke-0 sampai
dengan bit ke-7, bit ke-9 dan 1 bit stop. Pada MCS-51 yang berfungsi sebagai pengirim, bit ke-9 berasal data bit
TB8 dalam register SCON. Pada MCS-51 yang berfungsi sebagai penerima, bit ke-9 ditampung di data bit RB8
1 1
dalam register SCON, sedangkan bit stop tidak ditampung. Baud rate bisa dipilih atau frekuensi
32 64
kristal yang digunakan.
D. Mode 3
Mode ini sama dengan mode 2, tetapi baudrate dapat diatur sesuai dengan keperluan.
E. Baudrate
Baudrate menunjukkan laju kecepatan pengiriman data digital secara seri. Laju baudrate sama dengan
banyaknya bit yang dikirim setiap detik. Pada MCS-51 pengiriman secara serial ditentukan oleh Mode yang telah
ditentukan. Baudrate yang digunakan juga bersesuaian dengan Mode yang digunakan. Pada Mode 0 baudrate yang
digunakan adalah
frekuensi osilasi
Baudrate =
12
Sedangkan baudrate yang digunakan pada Mode 2 tergantung dari isi bit SMOD yang ada pada
register PCON.
1
Jika SMOD = 0 baudrate yang digunakan adalah K= . Jika SMOD = 1 baudrate yang
64
1
digunakan K= .
32
Baudrate = K × frekuensi _ osilasi
Sedangkan baudrate yang digunakan untuk Mode 1 dan 3 dapat ditentukan melalui register Timer 1
dan juga bit SMOD pada register PCON. Jika SMOD = 0 baudrate yang digunakan adalah K=1. Jika SMOD = 1
Baud rate yang digunakan K=2.
K frekuensi _ osilasi
×
32 12 × [ 256 − ( TH 1) ]
Baudrate =
Prosedur Percobaan:
1. Ketik program di bawah ini kemudian jalankan, gunakan file [Link] untuk menerima data
yang telah dikirimkan dari mikrokontroler.
#include <reg51.h>
BAUDLOAD EQU 0F4H #include <timer.h>
LJMP START
ORG 100H void Serial_init()
{
S_INIT: SCON = 0b01010000;
MOV SCON, #01010000B TMOD = 0b00100000;
MOV TMOD, #00100000B TCON = 0b01000000;
MOV TCON, #01000000B TH1 = 0xF4;
MOV TH1, #BAUDLOAD }
RET
void data_out(unsigned char dt_in)
OUT: {
CLR TI TI = 0;
MOV SBUF,A SBUF = dt_in;
TUNGGU: while(!TI);
JNB TI, TUNGGU }
RET
void main()
START: {
LCALL S_INIT TMOD = 0x01; delay(10);
MOV A, #'a' Serial_init();
LCALL OUT while(1)
SJMP START {
data_out('a');
delay(500);
}
}
Tulislah kesimpulan dari program diatas.
Percobaan 8
INTERRUPT
Tujuan :
- Mengetahui dan dapat menggunaan fasilitas interupsi
Apabila CPU pada mikrokontroler sedang melaksanakan suatu program, kita dapat menghentikan
sementara pelaksanaan program tersebut dengan melakukan interupsi. CPU kemudian melaksanakan rutin
pelayanan interupsi tersebut. Setelah selesai CPU akan kembali ke program utama yang ditinggalkan.
Ada dua buah register yang mengontrol interupsi, yaitu IE (Interrupt Enable) dan IP (Interrupt Priority).
MSB LSB
Simulasikan program tersebut. Setelah beberapa saat beri masukan low pada kaki INT 0 (lihat skematik
minimum sistem). Amati apa yang terjadi.
2. Buatlah program simulasi untuk menyalakan semua LED pada Port 1 dan mematikan semua LED pada Port 1
apabila ada interupsi INT 1.
3. Buatlah program simulasi menampilkan data 0x84 jika ada INT0 dan 0x25 jika ada INT1, tetapi INT1
mempunyai prioritas utama. Data tersebut ditampilkan di Port 1
Percobaan 9
RTC DS12887
Tujuan:
- Mengetahui cara mengakses RTC DS12887 dengan MCS 51
Teori
• Tiga interupt secara terpisah, dengan menggunakan software dapat diuji dan tidak digunakan.
Time-of-day alarm once/second untuk once/day
Rata-rata periode dari 122 ms sampai 500 ms.
End of clock update cycle.
Fungsi Pin dari RTC
• AD0-AD7 : Multiplex address atau data
• NC : Not Connection.
• MOT : Bus Type selection.
• CS : Chip Select.
• AS : Address Strobe.
• DS : Data Strobe.
• RESET : Reset Input.
• IRQ : Interrupt Request Ouput.
• SQW : Square Wave Output.
• VCC : + 5 Volt Supply.
• GND : Ground.
Register A
MSB LSB
UIP :
Update Interrupt Progress merupakan flag status yang dapat dipantau. Pada saat UIP bernilai 1, maka update
transfer akan terjadi. Pada saat UIP bernilai 0, maka update transfer tidak akan terjadi sekurang-kurangnya 244 µs.
Informasi waktu, kalender dan alarm di dalam RAM dapat diakses secara penuh pada saat UIP bernilai 0. Ketika
SET bit pada register B bernilai 1, maka update transfer akan dihalangi dan UIP akan bernilai 0.
Tiga bit ini digunakan untuk menghidupkan atau mematikan osilator dan untuk mereset countdown chain. Sebuah
susunan 010 adalah kombinasi dari bit yang digunakan untuk menyalakan osilator dan mengijinkan RTC untuk
memelihara waktu. Sebuah susunan dari 11X akan mengaktifkan osilator tetapi countdowm chain dalam keadaan
reset. Update data selanjutnya dapat terjadi setiap 500 ms setelah susunan bit dari DV0, DV1 dan DV2 adalah 010.
Register B
MSB LSB
SET :
Ketika SET bit adalah 0, Fungsi Update Transfer dalam keadaan normal dengan kecepatan perhitungan setiap satu
detik. Ketika SET bit adalah 1, semua update transfer tidak diijinkan dan program dapat inisialisasi bytes waktu dan
kalender tanpa terjadi sebuah update ditengah-tengah inisialisasi.
PIE :
Periodic Interrupt Enable (PIE). Pada bit ini dapat dibaca atau ditulis yang digunakan untuk mengijinkan atau tidak
mengijinkan Periodic Interrupt Flag (PF) pada register C. Jika pada bit ini bernilai 1, maka periodic interrupt akan
dibangkitkan oleh pin IRQ sebesar kombinasi R3, R2, R1 dan R0 pada register A. Jika pada bit ini bernilai 0, maka
periodic interrupt yang dibangkitkan oleh pin IRQ akan ditahan, tetapi Periodic Flag (PF) pada register C tetap diset
pada periodic rate. Pada pin IRQ digunakan untuk interrupt pada mikrokontroller dan untuk menggunakannya perlu
resistor pull-up.
AIE :
Alarm Interrupt Enable (AIE) bit adalah sebuah bit yang dapat dibaca dan ditulis, ketika bit ini diset 1, mengijinkan
Alarm Flag (AF) bit didalam register C untuk mengintialisasi signal IRQ . Ketika bit AIE diset 0, bit AF tidak
menginitialisasi signal IRQ.. Fungsi yang terdapat di dalam dari DS12887 tidak dapat mempengaruhi bit AIE.
UIE :
The Update Ended Interrupt Enable (UIE) adalah suatu flag bit yang dapat dibaca atau ditulis dan digunakan untuk
mengaktifkan Update End Flag (UF) didalam register C untuk menyatakan (IRQ).Flag ini akan update secara
otomatis setiap satu detik, flag ini diguanakan untuk mennadakan bahwa RTC sudah update. RESET dalam
keadaan low atau SET keadaan high menyebabkan UIE bit menjadi low.
SQWE :
Square Wave Enable (SQWE). Jika pada bit ini bernilai 1, maka besar sinyal yang telah diset melalui kombinasi
RS3, RS2, RS1 dan RS0 akan dikeluarkan melalui pin SQW. Jika pada bit ini bernilai 0, maka pin SWQ akan
berada pada kondisi low.
DM :
Data Mode (DM) adalah bit indikasi apakah informasi waktu dan kalender dalam format BCD atau binary. DM bit
dapat di set dengan program untuk memilih format yang sesuai dan dapat dibaca sesuai dengan keperluan. Bit ini
tidak dapat diubah oleh fungsi internal atau reset. Sebuah kondisi high pada DM menandakan bahwa data adalah
binary sedangkan sebuah low kondisi pada DM maka data adalah Binary Code Data (BCD).
12/24 :
12/24 adalah bit control untuk menetapkan format dari hours bit. Sebuah keadaan high pada pin ini menandakan
mode 24-hours dan sebuah 0 pada pin ini menandakan mode 12-hours. Bit ini adalah dapat dibaca dan ditulis, bit
ini tidak dipengaruhi oleh fungsi internal dari reset.
DSE :
Daylight Saving Enable (DSE) adalah bit yang dapat dibaca atau ditulis. Jika bit ini bernilai 1, maka update akan
terjadi pada saat hari Minggu pertama pada bulan April jam 1:59:59 berubah menjadi 3:00:00 atau pada hari
Minggu terakhir pada bulan Oktober pada saat jam 1:59:59 akan berubah menjadi 1:00:00. Jika bit ini bernilai 0,
maka update waktu tersebut tidak akan terjadi. Bit ini tidak dipengaruhi oleh fungsi-fungsi internal atau RESET.
Register C
MSB LSB
IRQF PF AF UF 0 0 0 0
IRQF :
Interrupt Request Flag bit adalah bit ini akan di set satu jika salah satu dari bit dibawah ini :
PF = PIE = 1
AF = AIE = 1
UF = UIE = 1
PF (Periodic Interrupt Flag) : bit ini bernilai 1 saat sinyal berada pada posisi high.
AF (Alarm Interrupt Flag) : bit ini akan bernilai 1 saat alarm aktif.
UF (Update Ended Flag) : bit ini akan bernilai 1 saat proses update waktu telah selesai tiap 500 µs.
Prosedure percobaan :
1. Baca detik pada RTC lalu tampilkan ke LCD, setelah anda berhasil menampilkan detik ke LCD
lanjutkan ke Jam dan menit ?
2. Seting Jam, Menit, dan Detik sesuai dengan waktu saat ini, kemudian tampilkan di LCD ?
Percobaan 10
Matrix LED
Tujuan :
- Agar mahasiswa dapat membuat display dari Marix LED
Teori :
Matrix LED sering kita jumpai di jalan raya digunakan untuk tampilan jam, informasi dll. Pada
percobaan ini kita belajar bagaimana membuat display matrix LED dengan menggunakan mikrokontroler
AT89S51. Matrix LED yang digunakan adalah dot matrix 7 x 5 dan Common Row katoda. Driver yang digunakan
untuk mengontrol kolom menggunakan 74LS174, dimana IC ini adalah D flip-flop array yang di gunakan untuk
shift register. Sedangkan untuk mengontrol baris menggunakan 7 transistor 2N222 dengan arus maksimal yang
diloloskan oleh kolektor sebesar 1 A.
74LS174
R 1
R
Q 6
2N 2222
Q 1
2N 2222
R 9 R 10 R 11 R 12 R 13 R 14 R 15
220 220 220 220 220 220 220
U 1?
1
2
3
4
5
6
7
R
R
R
R
R
R
R
M a t r ix le d
1
2
3
4
5
C
C
C
C
C
D A TA = P 3 .5
1
0
3
2
3
2
4
5
6
7
1
1
1
1
U 2
1
1
2
2
3
3
4
4
5
5
Q
Q
D
7 4 1 7 4 (S H IF T R E G IS T E R )
C LR
C LK
Q 6
D 6
15
14
9
C L K = P 3 .3
C L R = P 3 .4
Cara memprogram driver matrix diatas, terlebih dahulu pastikan output pada shift register high, dengan
cara set data pada P3.5 lalu beri pulsa dari high ke low sebanyak 5 kali. Setelah semua data output dari Q1-Q5 = 1,
maka kita dapat mulai menggambar di matrix led dengan cara memberikan data pada P1.0-P1.6, lalu Q1 diberi
diclearkan dengan cara clear data pada P3.5 lalu memberi pulsa clock pada pin P3.4.
;P3.3 = clock
;P3.4 = clear
;P3.5 = data
LJMP MULAI
ORG 50H
DELAYLOAD :
PUSH ACC
MOV A, #0FFH #include <reg51.h>
LOOP1 : #include <timer.h>
PUSH ACC
MOV A, #0FFH at 0x50 idata unsigned char Huruf_A[5] =
LOOP2 : {0b11111110,
DEC A 0b00011001,
CJNE A, #00H, LOOP2 0b00011001,
POP ACC 0b00011001,
DJNZ ACC, LOOP1 0b11111110};
POP ACC
RET unsigned int i;
sbit data_ = P3^5;
DELAY : sbit clk = P3^3;
PUSH ACC sbit clr = P3^4;
MOV A, #01H
LOOP1 : void clock (unsigned int jum)
PUSH ACC {
MOV A, #09FH unsigned int w;
LOOP2 : for (w=1; w<=jum; w++)
DEC A {
CJNE A, #00H, LOOP2 clk = 1; delay(1);
POP ACC clk = 0; delay(1);
DJNZ ACC, LOOP1 }
POP ACC }
RET
; prosedur Clock void clear()
CLOCK : {
CLOCKX: clr = 0; delay(1);
SETB P3.3 clr = 1; delay(1);
LCALL DELAY }
CLR P3.3
LCALL DELAY void main()
DJNZ R0, CLOCKX {
RET TMOD = 0x01; delay(10);
CLEAR : clear();
CLR P3.4 P1 = 0xFF;
LCALL DELAY data_ = 1;
SETB P3.4 clock(11);
LCALL DELAY
RET while (1)
{
AMBIL_DATA: P1 = Huruf_A [0];
MOV A, #00H data_ = 0;
MOVC A, @A+DPTR clock(1); delay(5);
RET
for (i=1; i<5; i++)
MULAI : {
LCALL DELAYLOAD P1 = Huruf_A [i];
LCALL CLEAR data_ = 1;
MOV P1, #0FFH clock(1); delay(5);
SETB P3.5 }
MOV R0, #11
LCALL CLOCK
TRAP:
MOV DPTR, #HURUF_A P1 = 0;
LCALL AMBIL_DATA data_ = 1;
MOV P1, A clock(6);
CLR P3.5 delay(5);
MOV R0, #1 }
LCALL CLOCK }
INC DPTR
LCALL AMBIL_DATA
MOV P1,A
SETB P3.5
MOV R0, #1
LCALL CLOCK
INC DPTR
LCALL AMBIL_DATA
MOV P1,A
SETB P3.5
MOV R0, #1
LCALL CLOCK
INC DPTR
LCALL AMBIL_DATA
MOV P1,A
SETB P3.5
MOV R0, #1
LCALL CLOCK
INC DPTR
LCALL AMBIL_DATA
MOV P1,A
SETB P3.5
MOV R0, #1
LCALL CLOCK
ORG 500H
HURUF_A:
DB 11111110B
DB 00011001B
DB 00011001B
DB 00011001B
DB 11111110B
END
Catatan :
CLK = P3.3 //Digunakan untuk mengontrol Kolom
CLR = P3.4
DATA = P3.5
P1.0 – P1.7 digunakan untuk mengontrol Baris
Prosedur Percobaan :
1. Dari contoh program diatas ganti dengan huruf B, lalu tampilkan ke matrix LED ?
2. Dari program diatas tampilkan huruf A dan B secara bersamaan ?
3. Buatlah program untuk membuat tulisan berjalan di matrix LED ?
LAMPIRAN
PERANGKAT INSTRUKSI MIKROKONTROLER 8031
Periode
Mnemonic Deskripsi Byte Osilasi
Operasi Aritmatika
ADD A,#data Add immediate data 2 12
ADD A,@Rn Add indirect address 1 12
ADD A,Rn Add register 1 12
ADD A,addr Add memory 2 12
ADDC A,#data Add carry plus immediate data to accumulator 2 12
ADDC A,@Rn Add carry plus indirect address to accumulator 1 12
ADDC A,Rn Add carry plus register to accumulator 1 12
ADDC A,addr Add carry plus memory to accumulator 2 12
SUBB A,#data Subtract immediate data from accumulator with borrow 2 12
SUBB A,@Rn Subtract indirect address from accumulator with borrow 1 12
SUBB A,Rn Subtract register from accumulator with borrow 1 12
SUBB A,addr Subtract memory from accumulator with borrow 2 12
INC @Rn Increment indirect address 1 12
INC A Increment accumulator 1 12
INC DPTR Increment data pointer 1 24
INC Rn Increment register 1 12
INC addr Increment memory 2 12
DEC @Rn Decrement indirect address 1 12
DEC A Decrement accumulator 1 12
DEC Rn Decrement register 1 12
DEC addr Decrement memory 2 12
MUL AB Multiply accumulator by B 1 48
DIV AB Divide accumulator by B 1 48
DA A Decimal adjust accumulator 1 12
Operasi Logika
ANL A,#data Logical AND immediate data to accumulator 2 12
ANL A,@Rn Logical AND indirect address to accumulator 1 12
ANL A,Rn Logical AND register to accumulator 1 12
ANL A,addr Logical AND memory to accumulator 2 12
ANL addr,#data Logical AND immediate data to memory 3 24
ORL A,#data Logical OR immediate data to accumulator 2 12
ORL A,@Rn Logical OR indirect address to accumulator 1 12
ORL A,Rn Logical OR register to accumulator 1 12
ORL A,addr Logical OR memory to accumulator 2 12
ORL addr,#data Logical OR immediate data to memory 2 12
XRL A,#data Logical Exclusive OR immediate data to accumulator 2 12
XRL A,@Rn Logical Exclusive OR indirect address to accumulator 1 12
XRL A,Rn Logical Exclusive OR register to accumulator 1 12
XRL A,addr Logical Exclusive OR memory to accumulator 2 12
XRL addr,#data Logical Exclusive OR immediate data to memory 3 24
Operasi Bit
RL A Rotate accumulator left 1 12
RLC A Rotate accumulator and carry flag left 1 12
RR A Rotate accumulator right 1 12
RRC A Rotate accumulator and carry flag right 1 12
SWAP A Exchange nibbles in accumulator 1 12
1 12
Transfer Data
MOV A,Rn Move register to accumulator 1 12
MOV A,addr Move memory to accumulator 2 12
MOV A,@Rn Move indirect address to accumulator 1 12
MOV A,#data Move immediate data to accumulator 2 12
MOV @Rn,#data Move immediate data to indirect address 2 12
MOV @Rn,A Move accumulator to indirect address 1 12
MOV @Rn,addr Move memory to indirect address 2 24
MOV DPTR,#data Move immediate data to data pointer 3 24
MOV addr,addr Move memory to memory 3 24
MOVX @DPTR,A Move accumulator to external memory addressed by data 1 24
pointer
Move accumulator to external memory addressed by
MOVX @Rn,A 1 24
register
MOVX A,@DPTR Move external memory addressed by data pointer to 1 24
accumulator
Move external memory addressed by register to
MOVX A,@Rn 1 24
accumulator
PUSH Addr Push memory onto stack 2 24
POP Addr Pop stack to memory 2 24
XCH A,@Rn Exchange indirect address with accumulator 1 12
XCH A,Rn Exchange register with accumulator 1 12
XCHD A,@Rn Exchange low nibbles of indirect address with 1 12
accumulator
Program Percabangan
ACALL Addr Absolute call 2 24
LCALL Addr Long call 3 24
RET Return from subroutine (Non interrupt) 1 24
RETI Return from interrupt routine 1 24
AJMP Addr Absolute jump within 2K byte page 2 24
LJMP Addr Long jump 3 24
SJMP Addr Short jump 2 24
JMP @A+DPTR Jump to sum of accumulator and data pointer 1 24
JZ Addr Jump if accumulator is zero 2 24
JNZ Addr Jump if accumulator is not zero 2 24
CJNE @Rn,#data,addr Compareindirectaddresstoimmediatedata,Jumpifnotequal 3 24
CJNE A,#data,addr Compare immediate data to accumulator,Jump if not equal 3 24
CJNE A,addr,addr Compare memory to accumulator,Jump if not equal 3 24
DJNZ Rn,addr Decrement register and jump if not zero 2 24
DJNZ addr,addr Decrement memory and jump if not zero 3 24
NOP No operation 1 12
DAFTAR PUSTAKA
- The 8051 Microcontroller (Hardware, Software and Interfacing) - James W. Stewart and Kai X. Miao
- The 8051 Microcontroller And Embeded Systems – Muhammad Ali Mazidi dan Janice Gillispie Mazidi