Anda di halaman 1dari 12

20.

Aplikasi ADC, LCD dan RS232

gambar 13. Buffer RS232

RS 232 di komputer :
1. Space logika 0 : 3 sampai dengan 25 volt
2. Mark logika 1 :-3 sampai dengan -25 volt
3. Daerah antara 3 dan -3 tidak didefinisikan
4. Tegangan open circuit tidak boleh lebih dari 25 volt
5. Arus short circuit tidak boleh lebih dari 500 mA

Pin dari serial


Pin D25
2
3
4
5
6
7
8
20
22

Pin D9
3
2
7
8
6
5
1
4
9

Nama
TD
RD
RTS
CTS
DSR
SG
CD
DTR
RI

Kepanjangan
Transmit Data
Receive Data
Request To Send
Clear To Send
Data Set Ready
Signal Ground
Carrier Detect
Data Terminal Ready
Ring Indicator

Null Modem
1. Cara paling gampang untuk mentransfer file antar komputer
menggunakan protokol Z modem dan X modem
2. Dapat juga digunakan untuk komunikasi dengan uP
3. Hanya menggunakan 3 kabel (TD,RD dan SG)
Mikrokontroler MCS51

152

D9
3
2
5
4
6
1
7
8

D25
2
3
7
20
6
8
4
5

TD
RD
SG
DTR
DSR
CD
RTS
CTS

RD
TD
SG
DSR
DTR
CD
CTS
RTS

D25
3
2
7
6
20
8
5
4

D9
2
3
5
6
4
1
8
7

Port Address dan IRQ


Nama
COM 1
COM 2
COM 3
COM 4

Address
3F8
2F8
3E8
2E8

IRQ
4
3
4
3

PEMROGRAMAN UART
Tabel address register UART INS 8250
Nama register
TX Buffer
RX Buffer
Baud rate divisor Latch LSB
Baud rate divisor Latch MSB
Interrupt Enable Register
Interrupt Identification Reg
Line Control Register
Modem Control Register
Line Status Register
Modem Status Register

Adaptor Primer
03F8H
03F8H
03F8H
03F9H
03F9H
03FAH
03FBH
03FCH
03FDH
03FEH

Adaptor sekunder
02F8H
02F8H
02F8H
02F9H
02F9H
02FAH
02FBH
02FCH
02FDH
02FEH

RX Buffer:
3F8H
Menampung dan menyimpan data yang diterima dari luar.
Data itu harus dibaca oleh CPU 8088 setelah mengecek kepastian
tentang masuknya data.
Mikrokontroler MCS51

153

TX Buffer:

3F8H

Menampung dan menyimpan data yang akan dikirim ke luar.


Data ini dikirim oleh CPU ke TX Buffer setelah mengecek kepastian
tentang diperbolehkannya melakukan pengiriman.
Baud Rate Divisor LSB: 3F8H
Menampung LSB untuk pembagi clock yang dimasukkan ke INS
8250 agar didapat baud rate yang dipilih . Angka pembagi 01H - FFH
Baud Rate Divisor MSB: 3F9H
Menampung MSB untuk pembagi clock yang dimasukkan ke INS
8250 agar didapat baud rate yang dipilih . Angka pembagi 01H FFFFH
Tabel Baud rate:
Baud Rate
50
75
110
134.5
150
300
600
1200
1800
2000
2400
3600
4800
7200
9600

Mikrokontroler MCS51

Angka pembagi (Heksa)


0900H
0600H
0417H
0359H
0300H
0180H
0C00H
0060H
0040H
003AH
0030H
0020H
0018H
0010H
000CH

Angka pembagi (Desimal)


2300
1536
1047
857
768
384
192
96
64
58
48
32
24
16
12

154

Interrupt Enable Register:

3F9H

Menampung pemrograman agar bilamana ada satu keadaan khusus


dapat melangsungkan interupsi ke CPU.

Interrupt Identification Register: 3FAH


Menampung pemrograman agar dapat menentukan bagian mana yang
diberi urutan prioritas khusus untuk dapat melangsungkan interupsi ke CPU
Line Control Register:

3FBH

Menampung ketentuan yang dipilih untuk menentukan :


- jumlah bit bagi setiap data
- jumlah stop bit
- memakai parity check atau tidak
- menentukan/mengubah baud rate divisor

Modem Control Register:

3FCH

Menampung pemrograman untuk mengatur modem, terutama


menggunakan saluran DTR dan RTS dari INS 8250 ke modem. INS
8250 bisa diprogram untuk melakukan loop back, yaitu data yang
dikirim dapat diterima sendiri oleh INS 8250. Hal ini digunakan
untuk tes Tx dan Rx. INS 8250 memberi ekstra 2 saluran OUT1 dan
OUT2 untuk disambungkan ke komponen lain sebagai pengatur
enable / disable. Di IBM PC digunakan untuk mengatur saluran
interupsi INTRPT (pin 30). Saluran INTRPT diberi tri state buffer
yang diatur oleh OUT2. Oleh karena itu agar dapat beroperasi

Mikrokontroler MCS51

155

berdasar interupsi dari peralatan lain di luar, maka bit 3 (OUT2) pada
Modem Control Register harus diberi 1.

Modem Status Register: 3FEH


Menampung bit-bit yang menyatakan keadaan tentang hubungan
dengan modem atau perangkat lain yang dihubungkan dengan INS 8250
Untuk melakukan percobaan ini, lakukan langkah-langkah sebagai berikut:
1.

Hubungkan modul MICROTRAINER dengan memasang kabel DB25


dengan LPT1 pada PC. Mode printer adalah SPP atau output only.

2.

Hubungkan kabel serial di modul dengan COM1

3.

Ketikkan di sembarang editor yang anda miliki listing program berikut:

; PROG13.ASM DIGUNAKAN UNTUK MENGAMBIL DATA DARI ADC


; DAN DITAMPILKAN KE LCD SERTA DIKIRIM KE KOMPUTER
; JUMPER OUTPUT : LCD POSISI '0'
ORG
SJMP

00H
START

;-------------------------------; LCD CONSTANTA


;-------------------------------DISPCLR
EQU
FUNCSET
EQU
ENTRMOD
EQU
DISPON
EQU

00000001B
00111000B
00000110B
00001100B

DATAADC

60H

EQU

START:
ACALL
ACALL

INIT_SERIAL
INIT_LCD

MOV
ACALL

DPTR,#BARIS1
PRINTSTRING1

MOV
ACALL

DPTR,#BARIS2
PRINTSTRING2

;-------------------------------; MAIN PROGRAM


;-------------------------------MAIN:
ACALL
CHANNEL_0

Mikrokontroler MCS51

156

ACALL RX
ACALL
READ_ADC
ACALL
DISP
ACALL
TX
SJMP
MAIN
CHANNEL_0:
CLR
CLR
CLR
RET

P0.5
P0.6
P0.7

CHANNEL_7:
SETB
SETB
SETB
RET

P0.5
P0.6
P0.7

; KIRIM KE PC

;------------------------------------------------; PENAMBILAN DATA DARI ADC


; P0.5
:A
; P0.6
:B
; P0.7
:C
; 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
DATAADC,A
SETB
P3.7
; RD = 1
RET
;----------------------------------------------; MENAMPILKAN DATA KE LCD
;----------------------------------------------DISP:
MOV
A,DATAADC
MOV
B,#10
DIV
AB
MOV
R2,B
MOV
DIV
MOV
MOV

B,#10
AB
R1,B
R0,A

MOV
ACALL

A,#0CFH
CONTROLOUT

Mikrokontroler MCS51

; R2 : SATUAN

; R1 : PULUHAN
; R0 : RATUSAN
; PESAN TEMPAT DI KOLOM 15 BARIS 2

157

MOV
ADD
ACALL

A,R2
A,#30H
DATAOUT

MOV
ACALL
MOV
ADD
ACALL

A,#0CEH
CONTROLOUT
A,R1
A,#30H
DATAOUT

; PESAN TEMPAT DI KOLOM 14 BARIS 2

MOV
ACALL
MOV
ADD
ACALL

A,#0CDH
CONTROLOUT
A,R0
A,#30H
DATAOUT

; PESAN TEMPAT DI KOLOM 13 BARIS 2

; ASCII DARI SATUAN

; ASCII DARI PULUHAN

; ASCII DARI RATUSAN

RET
;----------------------------------------------------------------------; PROSEDUR MENGIRIM DATA DARI UC KE PC
;----------------------------------------------------------------------TX:
MOV
A,DATAADC
MOV
SBUF,A
JNB
TI,$
CLR
TI
RET
;--------------------------------------------------------------; PROSEDUR MENERIMA DATA DARI PC
;--------------------------------------------------------------RX:
CLR
RI
JNB
RI,$
MOV
A,SBUF
MOV
R3,A
MOV
A,#08FH
; PESAN TEMPAT DI KOLOM 15 BARIS 1
ACALL
CONTROLOUT
MOV
A,R3
ADD
A,#30H
; ASCII
ACALL
DATAOUT
RET
;----------------------------------------------------; PROSEDUR INISIALISASI SERIAL
;----------------------------------------------------INIT_SERIAL:
MOV
SCON,#01010000b
;Set Mode 1
MOV
TMOD,#00100000b ;Set Timer 8 bit auto reload
MOV
TH1 ,#0FDh
;Baud Rate 9600 bps pada kristal 11,0592 MHz
MOV
TCON,#40H
SETB
TR1
;Start Timer 1
RET

Mikrokontroler MCS51

158

;--------------------------------------------------------; PROSEDUR PEMESANAN TEMPAT


;--------------------------------------------------------; RS : 0
: P3.5
;E :0-1-0
: P3.4
; DATA
: P2
CONTROLOUT:
CLR
P3.5
ACALL
DELAY
CLR
P3.4
ACALL
DELAY
SETB
P3.4
ACALL
DELAY
MOV
P2,A
CLR
P3.4
ACALL
DELAY
RET

; RS = 0

;-------------------------------------------------------; PROSEDUR PENEMPATAN DATA


;-------------------------------------------------------; RS : 0
: P3.5
;E :0-1-0
: P3.4
DATAOUT:
SETB
ACALL
CLR
ACALL
SETB
ACALL
MOV
CLR
ACALL
RET

P3.5
DELAY
P3.4
DELAY
P3.4
DELAY
P2,A
P3.4
DELAY

; RS = 1
;E=0
;E=1

;E=0

;-------------------------------------------;
PROSEDUR DELAY LCD
;--------------------------------------------DELAY.INIT.LCD:
MOV
R6,#20H
DLY.LCD.LP:
MOV
R7,#10H
DJNZ
R7,$
DJNZ
R6,DLY.LCD.LP
RET
INIT_LCD:
MOV
ACALL
ACALL

A,#FUNCSET
CONTROLOUT
DELAY.INIT.LCD

MOV
ACALL
ACALL

A,#DISPON
CONTROLOUT
DELAY.INIT.LCD

MOV

A,#DISPCLR

Mikrokontroler MCS51

159

ACALL
ACALL

CONTROLOUT
DELAY.INIT.LCD

MOV
ACALL
ACALL
RET

A,#ENTRMOD
CONTROLOUT
DELAY.INIT.LCD

;----------------------------------------------------------; PROCEDURE LCD BARIS KOLOM LCD


;---------------------------------------------------------POSISI2.1:
MOV
A,#1
POSISI2:
ADD
A,#11000000B ; BARIS KEDUA
DEC
A
ACALL
CONTROLOUT
ACALL
DELAY.INIT.LCD
RET
POSISI1.1:
MOV

A,#1

ADD
DEC
ACALL
ACALL
RET

A,#10000000B ; BARIS PERTAMA


A
CONTROLOUT
DELAY.INIT.LCD

POSISI1:

PRINTSTRING2:
ACALL
CLR
MOVC
JNZ
PRINTSTRINGLOOP:
ACALL
ACALL
INC
CLR
MOVC
JNZ
RET

POSISI2.1
A
A,@A+DPTR
PRINTSTRINGLOOP
DATAOUT
DELAY.INIT.LCD
DPTR
A
A,@A+DPTR
PRINTSTRINGLOOP

PRINTSTRING1:
ACALL
POSISI1.1
CLR
A
MOVC
A,@A+DPTR
JNZ
PRINTSTRINGLOOP2
PRINTSTRINGLOOP2:
LCALL
DATAOUT
ACALL
DELAY.INIT.LCD
INC
DPTR
CLR
A
MOVC
A,@A+DPTR
JNZ
PRINTSTRINGLOOP2
RET

Mikrokontroler MCS51

160

;----------------------------------------;
PROCEDURE DELAY
;----------------------------------------DELAY:
MOV
R5,#0
U1:
MOV
R6,#0
U2:
MOV
R7,#0
U3:
INC
R7
CJNE
R7,#5,U3
INC
R6
CJNE
R6,#5,U2
INC
R5
CJNE
R5,#5,U1
RET
BARIS1:
DB 'DATA DARI PC: ',0
BARIS2:
DB 'DATA ADC : ',0

4. Simpanlah program yang anda ketik dan beri nama prog13.asm


5. Kemudian keluarlah ke DOS prompt dan ketikkan
A PROG13 <ENTER>
Jika tidak ada kesalahan, tekan <ENTER>
6. Anda akan langsung masuk ke program AEC_ISP, kemudian pilihlah option
A. Load HEX File to flash buffer,
kemudian ketik PROG13.HEX <ENTER> dan tekan
sebarang tombol
7. Pilih E.Program <ENTER> dan tunggu sebentar sampai ada indikator 100
% dan tekan sebarang tombol
8. Pilih I. Reset
9. Kesimpulan apa yang dapat anda tarik ?
.........................................................................................................................

Mikrokontroler MCS51

161

Kemudian ketiklan program di Turbo Pascal :


{ SERIAL.PAS DIGUNAKAN UNTUK KOMUNIKASI SERIAL DENGAN MCS-51}
uses crt;
const
base_address
= $3F8;
DLL
= 0;
DLM
= 1;
LCR
= 3;
MCR
= 4;
LSR
= 5;
LSR_0
= $01; {LSR(0)=1 berarti ada data dari luar yang dikirimkan}
LSR_5
= $20; {LSR(5)=1 berarti ada data yang siap dikirimkan}
var
status, status1, status2, pass : byte;
tekan
: char;
data
: byte;
Procedure receive;
begin
data:=port[base_address];
textcolor(red);write(data,' ');
end;
procedure send;
begin
port[base_address]:=ord(tekan);
end;
procedure main;
begin
repeat
if keypressed then
begin
tekan:=readkey;
textcolor(14);write(tekan);
status:=port[base_address+LSR];
status2:=status and LSR_5;
if status2 = LSR_5 then
begin
send;
end;
end;
status:=port[base_address+LSR];
status1:=status and LSR_0;

Mikrokontroler MCS51

162

if status1=LSR_0 then
begin
receive;
end;
until tekan=#27;
end;
Procedure init_UART;
begin
port[base_address+LCR] := $83;
port[base_address+DLL] := 12;
port[base_address+DLM] := 0;
port[base_address+LCR] := $03;
end;

{format data}
{baud rate}
{baud rate}
{siap untuk receive dan send data}

{Program Utama}
begin
clrscr;
init_UART;
main;
end.

Mikrokontroler MCS51

163