Tuesday, September 16, 2008

Interfacing Komunikasi Serial PC dengan AT89S52


Bill of material :

  • IC MAX232 1bh

  • Elko 10uF/16v 5bh

  • DB9/M 1bh

  • Koneltor SIL/M 4pin

Untuk mempermudah pembahasan, komunikasi serial berikut diatur secara Asinkron (mode 1,2 dan 3), dimana Mikrokontrol mengirim data melalui pin TX, dan menerima melalui pin RX. Tetapi Rangkaian berikut ini bisa juga bekerja pada mode 0 (Mengirim dan menerima melalui pin RX dan sinyal Clock melalui pin TX).

  • AT89S52 mengirim data di TX port 3.0 lalu ke PC melalui pin RX (2) konektor DB9/F

  • AT89S52 menerima data di RX port 3.0 dari PC melalui pin TX (2) konektor DB9/F

  • Pin RTS dan CTS hanya sebagai cadangan, bisa di koneksikan ke port I/O mikrokontroller yang kita inginkan.

Karena level tegangan Port Comm Rs232 pada PC adalah logic inverse yaitu low = -12 dan high = +12, diperlukan konverter perubah tegangan menjadi TTL (low= 0 dan High = 5) dengan IC MAX232. Jangan lupa pilih Elko yang kemampuan tegangannya lebih besar dari 12v, karena walau di beri tegangan 5v, MAX mampu memompa jadi 12v (itu gunanya c3 dan c4).


Program yang dipakai untuk melihat data pada PC, bisa memakai Hyperterminal, Lync, Xtalk dsb. yang perlu diperhatikan adalah pengaturan kecepatan Baudrate, Data Bits, Parity, Stop Bits dan Flow control pada program tersebut harus sama dengan pengaturan pada mikrokontrol yang di atur oleh program asembler (lihat Komunikasi dengan Port Serial (Rs 232)).

contoh program 1, mengirim data ke PC, Coba experiment dengan mengganti kata "start" (warna ungu) dengan "$".

; PROGRAM UNTUK MENGIRIM KATA "ACe"
#include
;-----------------------;
;PROGRAM UTAMA ;
;-----------------------;

START:
ACALL INIT ; MOV R1, "B"

MOV R1,#'A'
MOV A,R1
ACALL KIRIM

MOV R1,#'C'
MOV A,R1
ACALL KIRIM

MOV R1,#'e'
MOV A,R1
ACALL KIRIM

SJMP Start ; Ganti "Start" dengan "$" artinya kirim jika di reset

;----------------------------------------;
;PROGRAM KOMUNIKASI SERIAL ;
;----------------------------------------;

INIT: ;INISIALISASI U/ MENENTUKAN MODEnya
MOV SCON,#50H ;SERIAL PORT MODE1 0101-0000
MOV TMOD,#20H ;TIMER1 DI MODE2 #20H
MOV TH1,#0FDH ;KEC BAUDRATE 9600 BPS = #FDH
SETB TR1 ;START TIMER
RET

KIRIM:
MOV SBUF,A ;DATA YANG DIKIRIM MASUK KE A
JNB TI,$
CLR Ti
RET

END

Contoh Program 2 dengan pengaturan CRLF (Ganti baris). Kec Baudratenya sama dengan diatas. cobalah hapus tanda ";" di awal baris "lcall lfeed" pada bagian label "start" (warna kuning).

#include

start:
lcall init
mov a,#'Z'
lcall kirim
mov a,#'O'
lcall kirim
mov a,#'N'
lcall kirim
mov a,#'E'
lcall kirim
mov a,#' '
lcall kirim
lcall crlf
;lcall lfeed ;sekarang coba hapus tanda ";" di awal baris ini
sjmp start ;loop 4 ever

init: ; pengaturan mode dan kec.
mov scon,#50h
mov tmod,#20h
mov th1,#0fdh
setb tr1
ret

kirim: ;Kirim data serial
mov sbuf,a
jnb ti,$
clr ti
ret

crlf: ; ini subrutin crlf
mov a,#0dh
lcall kirim

lfeed: ; yang ini subrutin lfeed (gampang yah)

mov a,#0ah
lcall kirim
ret


end
 

Contoh program3 mengirim kata dengan db

#include
UTAMA:
ACALL INIT_SERIAL
mov dptr,#kata
lcall kirimStr
acall kirim
lcall crlf
lcall lfeed
SJMP $

INIT_SERIAL: ;INISIALISASI U/ MENENTUKAN MODEnya
MOV SCON,#50H ;SERIAL PORT MODE1 0101-0000
MOV TMOD,#20H ;TIMER1 DI MODE2 #20H
MOV TH1,#0FDH ;KEC BAUDRATE 9600 BPS = #FDH
SETB TR1 ;START TIMER
ret

KIRIM: ;kirim ke serial
MOV SBUF,A
JNB TI,$
CLR TI
RET

kirimStr: ;kirim karakter string dalam kode memori
clr a
movc a, @a+dptr
jz _ss01
lcall kirim
inc dptr
sjmp kirimStr
_ss01:
ret

crlf: ;mengatur pindah baris
mov a,#0dh ;tulis ke baris itu juga (niban)
lcall kirim
lfeed: mov a,#0ah ;pindah baris
lcall kirim
ret

KATA:
db "hello "
db "world"
END

0 comments: