Komunikasi antara dua mikrokontroller menggunakan jalur serial nampaknya sudah umum dijelaskan, namun bagaimana jika komunikasi tersebut menggunakan bahasa assembly atau bahasa mesin ?, nah inilah yang akan dibahas mengenai bagaimanakah cara agar mikrokontroller MCS-51 bisa berkomunikasi antar sesamanya menggunakan program assembly, software yang digunakan bisa MIDE-51 atau TASM dan T-LINK. berikut bagan prinsip kerjanya yang akan dibuat.
Program Assembly :
;================
;Program kirim
;================
;===Koneksi
LCD RS=p3.2, E=p3.3, Data=P1====
start:
;=======INISIALISASI
HURUF (Lihat tabel ASCII)========
K
equ 01001011b
Z
equ 01000001b
D
equ 01000100b
R
equ 01010010b
W
equ 01010000b
O
equ 01001111b
L
equ 01001100b
U
equ 01010101b
S
equ 01010011b
I
equ 01001001b
;======INISIALISASI
KOMUNIKASI SERIAL===
baud
EQU 0E8h ; 1200 bps
MOV
SCON,#01010000b
MOV
TMOD,#00100000b
MOV
TCON,#01000000b
MOV
TH1 ,#baud
;=====================================
JNB
RI,$ ;Tunggu SBUF berisi data baru
MOV
A,SBUF ;Ambil data
CLR
RI ;Penandaan data sudah diambil
;===================================
mov
R2,#00
loop2:
mov
R2,A
mov
a,R2
MOV
SBUF,a ;Kirim data baru
ret
end
;================
;program
terima
;================
;===Koneksi
LCD RS=p3.2, E=p3.3, Data=P1====
start:
;=======INISIALISASI
HURUF (Lihat tabel ASCII)========
K
equ 01001011b
Z
equ 01000001b
D
equ 01000100b
R
equ 01010010b
W
equ 01010000b
O
equ 01001111b
L
equ 01001100b
U
equ 01010101b
S
equ 01010011b
I
equ 01001001b
;=======INISIALISASI
LCD============
mov
R0,#00111000b ;function set
acall
instlcd
mov
R0,#00000110b ;entry mode
acall
instlcd
mov
R0,#00001100b ;no cursor, blink off
acall
instlcd
mov
R0,#00000001b ;clear display
acall
instlcd
;======INISIALISASI
KOMUNIKASI SERIAL===
baud
EQU 0E8h ; 1200 bps
MOV
SCON,#01010000b
MOV
TMOD,#00100000b
MOV
TCON,#01000000b
MOV
TH1 ,#baud
;=======TAMPIL
HURUF============
;======="KADAR"============
mov
R0,#80h
acall
instlcd
mov
R0,#K
acall
datalcd
mov
R0,#81h
acall
instlcd
mov
R0,#Z
acall
datalcd
mov
R0,#82h
acall
instlcd
mov
R0,#D
acall
datalcd
mov
R0,#83h
acall
instlcd
mov
R0,#Z
acall
datalcd
mov
R0,#84h
acall
instlcd
mov
R0,#R
acall
datalcd
;====TAMPILKAN
ANGKA "3 DIGIT" SECARA MANUAL===
loop2:
;====Ambil
data dari serial port====
JNB
RI,$ ;Tunggu SBUF berisi data baru
MOV
A,SBUF ;Ambil data
CLR
RI ;Penandaan data sudah diambil
;====Serial
End=====
mov
b,#100
div
ab
mov
R0,#086h
acall
instlcd
add
a,#30h
mov
R0,a
acall
datalcd
mov
a,b
mov
b,#10
div
ab
mov
R0,#087h
acall
instlcd
add
a,#30h
mov
R0,a
acall
datalcd
mov
a,b
mov
R0,#088h
acall
instlcd
add
a,#30h
mov
R0,a
acall
datalcd
acall
delay
sjmp
loop2
;=======PROSEDUR
IRLCD===============
instlcd:setb
p3.3
clr
p3.2 ; RS=0 E=1
acall
delaylcd
mov
P1,R0 ;send instruksi
acall
delaylcd
clr
p3.3 ; RS=0 E=0
acall
delaylcd
setb
p3.2 ; RS=0 E=1
acall
delaylcd
ret
;=======PROCEDURE
DTLCD===============
datalcd:setb
p3.2
setb
p3.3 ; RS=1 E=1
acall
delaylcd
mov
P1,R0 ; send data
acall
delaylcd
clr
p3.3 ; RS=1 E=0
call
delaylcd
setb
p3.3 ; RS=1 E=1
call
delaylcd
ret
;=======PROSEDUR
DELAYLCD===============
delaylcd:mov
R1,#00
loop:
inc R1
cjne
R1,#99h,loop
ret
delay:
mov r7,#00h
ulang2:
mov r6,#00h
ulang1:
mov r5,#00h
ulang:
inc r5
cjne
r5,#40h,ulang
inc
r6
cjne
r6,#40h,ulang1
inc
r7
cjne
r7,#40h,ulang2
ret
end
penjelasan:
Jadi mikrokontroler 1 bertugas untuk menerima input keyboard kemudian disimpan ke dalam SBUF dengan variabel input A dengan code mov SBUF,A, kemudian data tersebut dikirimkan serial menggunakan code
Jadi mikrokontroler 1 bertugas untuk menerima input keyboard kemudian disimpan ke dalam SBUF dengan variabel input A dengan code mov SBUF,A, kemudian data tersebut dikirimkan serial menggunakan code
mov R2,A
mov a,R2
MOV SBUF,a
Maka
data akan dikirimkan secara serial, kemudian di mikrokontroller 2 bertindak
sebagai pembaca input mikrokontroller dengan kode mov SBUF,A setelah itu data
dikonversi menjadi karakter huruf yang terkonfigurasi ke LCD.
No comments:
Post a Comment