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 !
No comments:
Post a Comment