Membuat program serial komunikasi PC dengan MCS-51 dimana pada PC dan mikrokontroler terhubung dengan komunikasi serial RS-485 sehingga komunikasi data dalam jarak hingga 1200 meter, Pada aplikasi ini jika kita menekan huruf ‘N’ atau ‘n’ pada hyperterminal maka pada hyperterminal akan muncul nama kita (musbikhin) dan jika ditekan ‘R’ atau ‘r’ akan muncul pada hyperterminal NRP kita (7110040519).
(Crystal : 12MHz, Pengakesasan serial menggunakan metode pooling atau bukan interupt sehingga saat ada serial masuk program sedikit lambat. RS 485 disini menggunakan metode full dupplex )
Rangkaian dan Setting:
Setting virtual Serial (baudrate: 2400) dengan cara klik dua kali pada virtual serial:
Program (Masih Belum Sempurna) :
Program:
org 0h
nop
call initserial ; inisialisasi serial
mov dptr,#MyCharacter
gets: clr A
Movc A,@A+dptr
cjne A,#0,Next ; mengambil karakter pada label mycharacter ‘Tekan Tombol N atau n untuk Nama
R atau r untuk NRP” sampai karakter 0, jika tidak sama ;dengan 0 maka ;akan jump ke label Next
sjmp getin ; karakter sudah dikirim semua (A=0) jump ke getin
Next: call sendout ;menjalankan subrutin sendout
inc dptr ; mengincrement dptr
sjmp gets ; kembali ke gets
getin: call inchar ;memanggil subrutin inchar
cjne A,#’N',next1 ; jika yang ditekan adalah tombol ‘N’ maka akan melanjutkan program ;dibawahnya jika tidak sama dengan ‘N’ maka akan jump ke next1
mov dptr,#namaku ;menampilkan namaku ‘musbikhin’
clr A
Movc A,@A+dptr
cjne A,#0,lanjut
lanjut: call sendout
inc dptr
sjmp gets
next1: call inchar ;memanggil subrutin inchar
cjne A,#’R',next2 ; jika yang ditekan adalah tombol ‘R’ maka akan melanjutkan program ;dibawahnya jika tidak sama dengan ‘R’ maka akan jump ke next2
mov dptr,#nrpku ;menampilkan nrp ‘7110040519’
clr A
Movc A,@A+dptr
cjne A,#0,lanjut2
lanjut2: call sendout
inc dptr
sjmp gets
next2: call inchar ;memanggil subrutin inchar
cjne A,#’n',next3 ; jika yang ditekan adalah tombol ‘n’ maka akan melanjutkan ;program dibawahnya jika tidak sama dengan ‘n’ maka akan ;jump ke next3
mov dptr,#namaku ;menampilkan namaku ‘musbikhin’
clr A
Movc A,@A+dptr
cjne A,#0,lanjut3
lanjut3: call sendout
inc dptr
sjmp gets
next3: call inchar ;memanggil subrutin inchar
cjne A,#’r',next4 ; jika yang ditekan adalah tombol ‘r’ maka akan melanjutkan ;program dibawahnya jika tidak sama dengan ‘r’ maka akan ;jump ke next4
mov dptr,#nrpku
clr A
Movc A,@A+dptr
cjne A,#0,lanjut4
lanjut4: call sendout
inc dptr
sjmp gets
next4: sjmp getin ;kembali ke getin
;
initserial:
mov scon,#52h ; Konfigurasi komunikasi serial mode 1
mov tmod,#20h ; Baud rate 2400 BPS
mov th1,#0F3H
setb tr1
ret
;
inchar:
detecti: jnb ri,detecti ; Deteksi bit RI apakah data sudah diterima atau belum
clr ri ; mengclearkan bit ri
mov a,sbuf ; membaca data yang diterima pada register sbuf
ret ; kembali ke getin
;
Sendout:
detecto: jnb ti,detecto ; Deteksi bit TI apakah data sudah dikirim atau belum
clr ti ; ; sebelum mengirim data, bit TI dinolkan dulu
mov sbuf,a ; ; mengirim karakter pada register A yang berasal dari DPTR
ret ; kembali ke Next
;
MyCharacter:
DB ‘ Tekan Tombol N atau n untuk Nama R atau r untuk NRP’,13,10,0
namaku:
DB ‘ Musbikhin’,13,10,0
nrpku:
DB ‘ 7110040519′,13,10,0
End
Hasil Program setelah dirun :
Tampilan awal saat program dijalankan:
Saat ada penekanan sesuai prosedur:
Semoga bermanfaat bila masih ada kekurangan harap maklum…masih newbie