


List Program
;======================================================
; Program KODE MORSE
; aT89a51
; INTERFACE KEYBOARD PS2
;======================================================
data_m1 bit 20h.0
data_m2 bit 20h.1
data_m3 bit 20h.2
data_m4 bit 20h.3
data_m5 bit 20h.4
DataKeyboard equ 30h
Datamorse equ 20h
KbdData bit P3.2
KbdClock bit P3.3
rs_LCD bit p1.1
en_LCD bit p1.0
;======================================================
; Program Utama
;======================================================
org 00h
mov datamorse,#0ffh
call hapus_tampilan
call init_LCD
call tulis_atas_1
call tulis_bawah_1
call tunda_long
start: mov datamorse,#0ffh
call tulis_atas_2
call tulis_bawah_2
mulai: JB KbdClock,$
call ambilkeyboard
jnc mulai
clr a
mov a,datakeyboard
sjmp Tombol_1
Tombol_1: cjne a,#'1',Tombol_2
ajmp abjad_ke_morse
Tombol_2: cjne a,#'2',selesai_scan
ajmp morse_ke_abjad
selesai_scan:
clr c
sjmp mulai
abjad_ke_morse:
call tulis_atas_3
call tulis_bawah_3
sjmp awalan_abjad
morse_ke_abjad:
call tulis_atas_4
call tulis_bawah_4
jmp awalan_morse
awalan_abjad:
JB KbdClock,$ ; tunggu bit kbdclock, sampai 0
call ambilKeyboard ; panggil ambil keyboard
jnc awalan_abjad ; lompat ke awalan jika C = 1
call Tampil ; jika C = 0 panggil subrutin lcd out
clr C
mov a,DataKeyboard
mov r3,#16
mov r1,#0c0h
scan_A: cjne a,#'A',scan_B
call TUlis_char_A
jmp awalan_abjad
scan_B: cjne a,#'B',scan_C
call TUlis_char_B
jmp awalan_abjad
scan_C: cjne a,#'C',scan_D
call TUlis_char_C
jmp awalan_abjad
scan_D: cjne a,#'D',scan_E
call TUlis_char_D
jmp awalan_abjad
scan_E: cjne a,#'E',scan_F
call TUlis_char_E
jmp awalan_abjad
scan_F: cjne a,#'F',scan_G
call TUlis_char_F
jmp awalan_abjad
scan_G: cjne a,#'G',scan_H
call TUlis_char_G
jmp awalan_abjad
scan_H: cjne a,#'H',scan_I
call TUlis_char_H
jmp awalan_abjad
scan_I: cjne a,#'I',scan_J
call TUlis_char_I
jmp awalan_abjad
scan_J: cjne a,#'J',scan_K
call TUlis_char_J
jmp awalan_abjad
scan_K: cjne a,#'K',scan_L
call TUlis_char_K
jmp awalan_abjad
scan_L: cjne a,#'L',scan_M
call TUlis_char_L
jmp awalan_abjad
scan_M: cjne a,#'M',scan_N
call TUlis_char_M
jmp awalan_abjad
scan_N: cjne a,#'N',scan_O
call TUlis_char_N
jmp awalan_abjad
scan_O: cjne a,#'O',scan_P
call TUlis_char_O
jmp awalan_abjad
scan_P: cjne a,#'P',scan_Q
call TUlis_char_P
jmp awalan_abjad
scan_Q: cjne a,#'Q',scan_R
call TUlis_char_Q
jmp awalan_abjad
scan_R: cjne a,#'R',scan_S
call TUlis_char_R
jmp awalan_abjad
scan_S: cjne a,#'S',scan_T
call TUlis_char_S
jmp awalan_abjad
scan_T: cjne a,#'T',scan_U
call TUlis_char_T
jmp awalan_abjad
scan_U: cjne a,#'U',scan_V
call TUlis_char_U
jmp awalan_abjad
scan_V: cjne a,#'V',scan_W
call TUlis_char_V
jmp awalan_abjad
scan_W: cjne a,#'W',scan_X
call TUlis_char_W
jmp awalan_abjad
scan_X: cjne a,#'X',scan_Y
call TUlis_char_X
jmp awalan_abjad
scan_Y: cjne a,#'Y',scan_Z
call TUlis_char_Y
jmp awalan_abjad
scan_Z: cjne a,#'Z',scan_0
call TUlis_char_Z
jmp awalan_abjad
scan_0: cjne a,#'0',scan_1
call TUlis_char_0
jmp awalan_abjad
scan_1: cjne a,#'1',scan_2
call TUlis_char_1
jmp awalan_abjad
scan_2: cjne a,#'2',scan_3
call TUlis_char_2
jmp awalan_abjad
scan_3: cjne a,#'3',scan_4
call TUlis_char_3
jmp awalan_abjad
scan_4: cjne a,#'4',scan_5
call TUlis_char_4
jmp awalan_abjad
scan_5: cjne a,#'5',scan_6
call TUlis_char_5
jmp awalan_abjad
scan_6: cjne a,#'6',scan_7
call TUlis_char_6
jmp awalan_abjad
scan_7: cjne a,#'7',scan_8
call TUlis_char_7
jmp awalan_abjad
scan_8: cjne a,#'8',scan_9
call TUlis_char_8
jmp awalan_abjad
scan_9: cjne a,#'9',scan_out
call TUlis_char_9
jmp awalan_abjad
scan_out: cjne a,#00h,LANJUTAN
jmp start
lanjutan:
clr c
jmp awalan_abjad
awalan_morse:
JB KbdClock,$ ; tunggu bit kbdclock, sampai 0
call ambilKeyboard ; panggil ambil keyboard
jnc awalan_morse ; lompat ke awalan jika C = 1
call tampil_b1
clr C
mov a,DataKeyboard
jmp scanning_morse_1
m2: JB KbdClock,$ ; tunggu bit kbdclock, sampai 0
call ambilKeyboard ; panggil ambil keyboard
jnc m2 ; lompat ke awalan jika C = 1
call tampil_b2
clr C
mov a,DataKeyboard
jmp scanning_morse_2
m3: JB KbdClock,$ ; tunggu bit kbdclock, sampai 0
call ambilKeyboard ; panggil ambil keyboard
jnc m3 ; lompat ke awalan jika C = 1
call tampil_b3
clr C
mov a,DataKeyboard
jmp scanning_morse_3
m4: JB KbdClock,$ ; tunggu bit kbdclock, sampai 0
call ambilKeyboard ; panggil ambil keyboard
jnc m4 ; lompat ke awalan jika C = 1
call tampil_b4
clr C
mov a,DataKeyboard
jmp scanning_morse_4
m5: JB KbdClock,$ ; tunggu bit kbdclock, sampai 0
call ambilKeyboard ; panggil ambil keyboard
jnc m5 ; lompat ke awalan jika C = 1
call tampil_b5
clr C
mov a,DataKeyboard
jmp scanning_morse_5
;======================================================
;Subrutine scaning morse
;======================================================
scanning_morse_1:
scan_titik_1:
cjne a,#'.',scan_garis_1
clr data_m1 ; nolkan bit
call tampil_b1
jmp m2
scan_garis_1:
cjne a,#'-',scan_hasil_1
setb data_m1 ; buat logika 1 bit
call tampil_b1
jmp m2
scan_hasil_1:
cjne a,#'=',ulangi_scan_titik_1
jmp mulai_konversi_1
ulangi_scan_titik_1:
jmp awalan_morse
scanning_morse_2:
scan_titik_2:
cjne a,#'.',scan_garis_2
clr data_m2 ; nolkan bit
call tampil_b2
jmp m3
scan_garis_2:
cjne a,#'-',scan_hasil_2
setb data_m2 ; buat logika 1 bit
call tampil_b2
jmp m3
scan_hasil_2:
cjne a,#'=',ulangi_scan_titik_2
jmp mulai_konversi_1
ulangi_scan_titik_2:
jmp m2
scanning_morse_3:
scan_titik_3:
cjne a,#'.',scan_garis_3
clr data_m3 ; nolkan bit
call tampil_b3
jmp m4
scan_garis_3:
cjne a,#'-',scan_hasil_3
setb data_m3 ; buat logika 1 bit
call tampil_b3
jmp m4
scan_hasil_3:
cjne a,#'=',ulangi_scan_titik_3
jmp mulai_konversi_2
ulangi_scan_titik_3:
jmp m3
scanning_morse_4:
scan_titik_4:
cjne a,#'.',scan_garis_4
clr data_m4 ; nolkan bit
call tampil_b4
jmp m5
scan_garis_4:
cjne a,#'-',scan_hasil_4
setb data_m4 ; buat logika 1 bit
call tampil_b4
jmp m5
scan_hasil_4:
cjne a,#'=',ulangi_scan_titik_4
jmp mulai_konversi_3
ulangi_scan_titik_4:
jmp m4
scanning_morse_5:
scan_titik_5:
cjne a,#'.',scan_garis_5
clr data_m5 ; nolkan bit
call tampil_b5
jmp mulai_konversi_5
scan_garis_5:
cjne a,#'-',scan_hasil_5
setb data_m5 ; buat logika 1 bit
call tampil_b5
jmp mulai_konversi_5
scan_hasil_5:
cjne a,#'=',ulangi_scan_titik_5
jmp mulai_konversi_4
ulangi_scan_titik_5:
jmp m5
;============================================
;Subrutine AmbilKeyboard
;===========================================
AmbilKeyboard:
call ambil_scancode ; panggil ambil scan code rutin
tunggu_tombol_dilepas :
cjne a,#0F0h,kybd_tidakLepas ; cek a = 0f0h ? jika tidak lompat
; ke sub kybd_tidaklepas
JB KbdClock,$ ; tunggu bit kbdclock hingga 0
call ambil_Scancode ; panggil sub ambil scan kode
Setb C ; c = 1
call Konversi_Scancode ; panggil sub konversi scan kode
ret
Kybd_tidakLepas:
Clr C
ret
;======================================================
;Subrutine Konversi_ScanCode
;======================================================
Ambil_scanCode:
clr A ; hapus a
Jnb KbdClock,$ ; tunggu kbdclock = 1
mov R2,#08h ; isi R0 dengan nilai 8
Ambil_ScanCode2:
Jb KbdClock,$ ; tunggu kbdclock = 0
Mov C,KbdData ; kopi kbd data ke bit C
Rr A ; putar ke kanan isi akumulator
mov acc.7,C ; kopi isi bit C ke accumulator bit ke 7
Jnb KbdClock,$ ; tunggu kbdclock = 1
Djnz R2,Ambil_ScanCode2 ; kurangi dengan 1 (r0 = 8) sampai 0 jika
; blm 8X lompat sub ambil scankode2
Jb KbdClock,$ ; tunggu kbdclock = 0
Jnb KbdClock,$ ; tunggu kbdclock = 1
Jb KbdClock,$ ; tunggu kbdclock = 0
Jnb KbdClock,$ ; tunggu kbdclock = 1
ret
Konversi_ScanCode:
Mov DPTR,#TableKeyboard ; tabel di kopi ke DPTR
movc A,@A+DPTR
mov datakeyboard,A ; copy a ke ram datakeyboard
ret
;======================================================
; Subrutin Inisialisasi LCD
;======================================================
Init_lcd:
mov r1,#00000001b ;Display clear
acall write_inst
mov r1,#00111000b ;Function set, Data 8 bit,2 line font 5x7
acall write_inst
mov r1,#00001100b ;Display on, ;cursor off,cursor blink off
acall write_inst
mov r1,#00000110b ;Entry mode, Set increment
acall write_inst
ret
;======================================================
; Subrutin Instruksi LCD
;======================================================
Tampil:
mov R1,#0c4h ; copy 0c1H ke Register 1
call write_inst ; panggil sub write inst
mov R1,30H ; copy datakeyboard ke Register 1
call write_data ; panggil sub write data
ret
Tampil_b1:
mov R1,#0c0h ; copy 0c0H ke Register 1
call write_inst ; panggil sub write inst
mov R1,30H ; copy datakeyboard ke Register 1
call write_data ; panggil sub write data
ret
Tampil_b2:
mov R1,#0c1h ; copy 0c1H ke Register 1
call write_inst ; panggil sub write inst
mov R1,30H ; copy datakeyboard ke Register 1
call write_data ; panggil sub write data
ret
Tampil_b3:
mov R1,#0c2h ; copy 0c2H ke Register 1
call write_inst ; panggil sub write inst
mov R1,30H ; copy datakeyboard ke Register 1
call write_data ; panggil sub write data
ret
Tampil_b4:
mov R1,#0c3h ; copy 0c3H ke Register 1
call write_inst ; panggil sub write inst
mov R1,30H ; copy datakeyboard ke Register 1
call write_data ; panggil sub write data
ret
Tampil_b5:
mov R1,#0c4h ; copy 0c4H ke Register 1
call write_inst ; panggil sub write inst
mov R1,30H ; copy datakeyboard ke Register 1
call write_data ; panggil sub write data
ret
No comments:
Post a Comment