Generating Baud Rate

Port Serial Mode 0:

Mode 0 mempunyai baudrate yang tetap yaitu 1/12 dari frekuensi oscilator. Untuk menjalankan port serial pada mode ini, tidak satupun timer-counter yang perlu diaktifkan. Hanya register SCON yang perlu dikonfigurasikan.



Port Serial Mode 1:

Mode 1 mempunyai baud rate variasi. Baud rate dibangkitkan oleh Timer 1. Untuk keperluan ini, Timer 1 digunakan dalam mode 2 ( Auto-reload ). Dengan persamaan:



Port Serial Mode 2:

Baud rate pada mode ini adalah tetap yaitu 1/32 atau 1/64 dari frekuensi oscilator, bergantung pada nilai dari bit SMOD pada register PCON.

Pada mode ini, tidak ada satupun timer-counter yang digunakan tetapi menggunakan clock internal.

SMOD = 1, Baud rate = 1/32 Frekuensi Oscilator

SMOD = 0, Baud rate = 1/64 Frekuensi Oscilator

Port Serial Mode 3:

Baud rate pada mode 3 ini dapat difariasi dan disetup tepat sama seperti pada mode 1.

SMOD - - - GF1 GF0 PD IDL

SMOD Menggandakan bit baud rate. Jika timer 1 digunakan untuk membangkitkan baud rate dan SMOD = 1, baud rate digandakan ketika port serial menggunakan mode 1, 2 dan 3.
GF1 General purpose bit flag
GF0 General purpose bit flag
PD Bit Power down. Aktivasi bit ini akan memulai operasi Power Down pada 8051
IDL Bit mode Idle. Aktivasi bit ini akan memulai opersi Idle


Gambar 5.2. Interface keypad ke mikrokontroler dan PC

;========================================================
;Program Pengiriman atau penerimaan data dari keypad ke atau dari PC
;Dengan menggunakan port serial
;visit elektronika-elektronika.blogspot.com
;=========================================================
kolom1 bit p2.0
kolom2 bit p2.1
kolom3 bit p2.2
kolom4 bit p2.3
baris1 bit p2.4
baris2 bit p2.5
baris3 bit p2.6
baris4 bit p2.7
;
keyport equ P2
keydata equ 70h
keybounc equ 71h
ORG 0H
JMP START
;
ORG 023H ;Alamat Awal untuk serial Interupsi 23
JMP SERIAL_INT
;
START:
ACALL INIT_LCD
acall TULISAN1
acall Tulisan2
;----------------------Inisialisasi Serial Port----------------------
MOV SCON,#01010000b ;Set Mode 1
MOV TMOD,#00100000b ;Set Timer 8 bit auto reload
MOV TH1 ,#0E8h ;Baud Rate 1200 bps pada kristal 11,0592 MHz
MOV TCON,#40H
SETB TR1 ;Start Timer 1
CLR RI ;Clear Receive Flag
;-----------------------Inisialisasi Interupsi-----------------------
MOV IE,#10010001b ;Set Int 0 Enable, Serial Port Int Enable123
MOV IP,#00010000b ;Prioritas :
; 1. Serial Port Int
;
;L O O P I N G F O R E V E R AND CHEK KEYPAD
;
ulang: acall keypad3x4
mov A,keydata
cjne A,#0FFh,tekan
jmp ulang
;
tekan:
MOV IE,#0 ;Disable all Interrupt;
acall init_lcd
mov r1,#0ceh
acall write_inst
add a,#30h
mov r1,a
acall write_data
mov a,keydata
MOV SBUF,A ;Masukkan Data ke Serial Buffer
JNB TI,$ ;Tunggu sampai pengiriman selesai
CLR TI ;Reset TI Flag
MOV IE,#10010001b ;Interrupt Enable
sjmp ulang
;
write_inst:
mov P1,#0h
mov P0,R1
setb P1.1
clr P1.1
acall delay
ret
;
write_data:
mov P1,#01
mov P0,R1
setb P1.1
clr P1.1
acall delay
ret
;
delay: mov R0,#0
delay1: mov R2,#50
djnz R2,$
djnz R0,delay1
ret
;
;Subrutin menulis kalimat pertama
;
tulis: mov dptr,#tulisan1
mov r3,#14
mov r1,#80h
acall write_inst
tulis1: clr a
movc a,@a+dptr
mov r1,A
inc dptr
acall write_data
djnz r3,tulis1
ret
;
;Subrutin menulis kalimat kedua
;
tulis2: mov dptr,#tulisan2
mov r3,#14
mov r1,#0c0h
acall write_inst
tulis3: clr a
movc a,@a+dptr
mov r1,A
inc dptr
acall write_data
djnz r3,tulis3
ret
;
init_lcd:
mov R1,#03Fh
acall write_inst
acall write_inst
mov R1,#0dh
acall write_inst
mov R1,#06h
acall write_inst
mov R1,#01h
acall write_inst
mov R1,#0ch
acall write_inst
ret
;====================================
; routine u/ baca keypad 4x4
;====================================
Keypad3x4:
mov keybounc,#50
mov keyport,#0FFh
clr kolom1
ul1: jb baris1,key1
djnz keybounc,ul1
mov keydata,#0ch
ret
key1: jb baris2,key2
djnz keybounc,key1
mov keydata,#0dh
ret
key2: jb baris3,key3
djnz keybounc,key2
mov keydata,#0eh
ret
key3: jb baris4,key4
djnz keybounc,key3
mov keydata,#0fh
ret
;
key4: setb kolom1
clr kolom2
jb baris1,key5
djnz keybounc,key4
mov keydata,#0bh
ret
key5: jb baris2,key6
djnz keybounc,key5
mov keydata,#9
ret
key6: jb baris3,key7
djnz keybounc,key6
mov keydata,#6
ret
key7: jb baris4,key8
djnz keybounc,key7
mov keydata,#3h
ret
;
key8: setb kolom2
clr kolom3
jb baris1,key9
djnz keybounc,key8
mov keydata,#0
ret
key9: jb baris2,key10
djnz keybounc,key9
mov keydata,#8
ret
key10: jb baris3,key11
djnz keybounc,key10
mov keydata,#5
ret
key11: jb baris4,key12
djnz keybounc,key11
mov keydata,#02
ret
;
key12: setb kolom3
clr kolom4
jb baris1,key13
djnz keybounc,key12
mov keydata,#09
ret
key13: jb baris2,key14
djnz keybounc,key13
mov keydata,#07
ret
key14: jb baris3,key15
djnz keybounc,key14
mov keydata,#04
ret
key15: jb baris4,key16
djnz keybounc,key15
mov keydata,#01
ret
key16: mov keydata,#0FFh
ret
end
;
Interrupt handle untuk penerimaan data serial dari PC
SERIAL_INT:
CLR RI ;Clear Bit RI
MOV A, SBUF
MOV R3,A
aCALL KONVERSI ;Konversi data ke LCD
MOV R1,#08eH ; C = BARIS 1, D = KOLOM 15
acall write_inst
mov R1,A
acall write_data
RETI
;
;--------------------------------
; PROSEDUR KONVERSI DATA
;--------------------------------
KONVERSI:
KEY1:
CJNE R3,#0,KEY2
MOV R3,#31H
SJMP KELUAR
KEY2:
CJNE R3,#1,KEY3
MOV R3,#32H
SJMP KELUAR
KEY3:
CJNE R3,#2,KEY4
MOV R3,#33H
SJMP KELUAR
KEY4:
CJNE R3,#4,KEY5
MOV R3,#34H
SJMP KELUAR
KEY5:
CJNE R3,#5,KEY6
MOV R3,#35H
SJMP KELUAR
KEY6:
CJNE R3,#6,KEY7
MOV R3,#36H
SJMP KELUAR
KEY7:
CJNE R3,#8,KEY8
MOV R3,#37H
SJMP KELUAR
KEY8:
CJNE R3,#9,KEY9
MOV R3,#38H
SJMP KELUAR
KEY9:
CJNE R3,#10,KEY_STAR
MOV R3,#39H
SJMP KELUAR
KEY_STAR:
CJNE R3,#14,KEY0
MOV R3,#2AH
SJMP KELUAR
KEY0:
CJNE R3,#13,KEY#
MOV R3,#30H
SJMP KELUAR
KEY#:
CJNE R3,#12,KELUAR
MOV R3,#23H
KELUAR:
RET
;
TULISAN1:
DB 'PENULISAN DATA',0
TULISAN2:
DB 'DATA KEYPAD :',0
END


Selamat Mencoba !

Post a Comment

0 Comments