BAB20 - MCS51 - Aplikasi ADC-LCD-RS232
description
Transcript of BAB20 - MCS51 - Aplikasi ADC-LCD-RS232
Mikrokontroler MCS51 152
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 Pin D9 Nama Kepanjangan
2 3 TD Transmit Data
3 2 RD Receive Data
4 7 RTS Request To Send
5 8 CTS Clear To Send
6 6 DSR Data Set Ready
7 5 SG Signal Ground
8 1 CD Carrier Detect
20 4 DTR Data Terminal Ready
22 9 RI 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 153
D9 D25 D25 D9
3 2 TD RD 3 2
2 3 RD TD 2 3
5 7 SG SG 7 5
4 20 DTR DSR 6 6
6 6 DSR DTR 20 4
1 8 CD CD 8 1
7 4 RTS CTS 5 8
8 5 CTS RTS 4 7
Port Address dan IRQ
Nama Address IRQ
COM 1 3F8 4
COM 2 2F8 3
COM 3 3E8 4
COM 4 2E8 3
PEMROGRAMAN UART
Tabel address register UART INS 8250
Nama register Adaptor Primer Adaptor sekunder
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
03F8H 03F8H 03F8H 03F9H 03F9H 03FAH 03FBH 03FCH 03FDH 03FEH
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 154
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 Angka pembagi (Heksa) Angka pembagi (Desimal)
50
75
110
134.5
150
300
600
1200
1800
2000
2400
3600
4800
7200
9600
0900H
0600H
0417H
0359H
0300H
0180H
0C00H
0060H
0040H
003AH
0030H
0020H
0018H
0010H
000CH
2300
1536
1047
857
768
384
192
96
64
58
48
32
24
16
12
Mikrokontroler MCS51 155
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 156
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 00H SJMP START ;-------------------------------- ; LCD CONSTANTA ;-------------------------------- DISPCLR EQU 00000001B FUNCSET EQU 00111000B ENTRMOD EQU 00000110B DISPON EQU 00001100B
DATAADC EQU 60H START: ACALL INIT_SERIAL ACALL INIT_LCD MOV DPTR,#BARIS1 ACALL PRINTSTRING1 MOV DPTR,#BARIS2 ACALL PRINTSTRING2 ;-------------------------------- ; MAIN PROGRAM
;-------------------------------- MAIN: ACALL CHANNEL_0
Mikrokontroler MCS51 157
ACALL RX ACALL READ_ADC ACALL DISP ACALL TX ; KIRIM KE PC SJMP MAIN CHANNEL_0: CLR P0.5 CLR P0.6 CLR P0.7 RET
CHANNEL_7: SETB P0.5 SETB P0.6 SETB P0.7 RET ;------------------------------------------------- ; 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 ; R2 : SATUAN MOV B,#10 DIV AB MOV R1,B ; R1 : PULUHAN MOV R0,A ; R0 : RATUSAN
MOV A,#0CFH ; PESAN TEMPAT DI KOLOM 15 BARIS 2 ACALL CONTROLOUT
Mikrokontroler MCS51 158
MOV A,R2 ADD A,#30H ; ASCII DARI SATUAN ACALL DATAOUT MOV A,#0CEH ; PESAN TEMPAT DI KOLOM 14 BARIS 2 ACALL CONTROLOUT MOV A,R1 ADD A,#30H ; ASCII DARI PULUHAN ACALL DATAOUT MOV A,#0CDH ; PESAN TEMPAT DI KOLOM 13 BARIS 2 ACALL CONTROLOUT
MOV A,R0 ADD A,#30H ; ASCII DARI RATUSAN ACALL DATAOUT 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 159
;--------------------------------------------------------- ; PROSEDUR PEMESANAN TEMPAT ;--------------------------------------------------------- ; RS : 0 : P3.5 ; E : 0 - 1 - 0 : P3.4 ; DATA : P2 CONTROLOUT: CLR P3.5 ; RS = 0 ACALL DELAY CLR P3.4 ACALL DELAY SETB P3.4
ACALL DELAY MOV P2,A CLR P3.4 ACALL DELAY RET ;-------------------------------------------------------- ; PROSEDUR PENEMPATAN DATA ;-------------------------------------------------------- ; RS : 0 : P3.5 ; E : 0 - 1 - 0 : P3.4 DATAOUT: SETB P3.5 ; RS = 1
ACALL DELAY CLR P3.4 ; E = 0 ACALL DELAY SETB P3.4 ; E = 1 ACALL DELAY MOV P2,A CLR P3.4 ; E = 0 ACALL DELAY RET ;-------------------------------------------- ; 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 A,#FUNCSET ACALL CONTROLOUT ACALL DELAY.INIT.LCD MOV A,#DISPON ACALL CONTROLOUT
ACALL DELAY.INIT.LCD MOV A,#DISPCLR
Mikrokontroler MCS51 160
ACALL CONTROLOUT ACALL DELAY.INIT.LCD MOV A,#ENTRMOD ACALL CONTROLOUT ACALL DELAY.INIT.LCD RET ;----------------------------------------------------------- ; 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 POSISI1: ADD A,#10000000B ; BARIS PERTAMA DEC A ACALL CONTROLOUT
ACALL DELAY.INIT.LCD RET PRINTSTRING2: ACALL POSISI2.1 CLR A MOVC A,@A+DPTR JNZ PRINTSTRINGLOOP PRINTSTRINGLOOP: ACALL DATAOUT ACALL DELAY.INIT.LCD INC DPTR CLR A MOVC A,@A+DPTR
JNZ PRINTSTRINGLOOP RET 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 161
;----------------------------------------- ; 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 162
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 163
if status1=LSR_0 then begin receive; end; until tekan=#27; end; Procedure init_UART; begin port[base_address+LCR] := $83; {format data} port[base_address+DLL] := 12; {baud rate} port[base_address+DLM] := 0; {baud rate} port[base_address+LCR] := $03; {siap untuk receive dan send data} end; {Program Utama} begin clrscr; init_UART; main; end.