Translate

Komunikasi Serial antara 2 Mikrokontroller Dengan Assembly

Komunikasi Serial antara 2 Mikrokontroller Dengan Assembly

        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 
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