• Tidak ada hasil yang ditemukan

02.50.0049 Mario Ary Wibowo LAMPIRAN

N/A
N/A
Protected

Academic year: 2019

Membagikan "02.50.0049 Mario Ary Wibowo LAMPIRAN"

Copied!
51
0
0

Teks penuh

(1)

LAMPIRAN

(2)

display_clear equ 01h funcset equ 38h entrymodset equ 06h dispon equ 0ch cursor equ 0eh blink equ 0fh rs_lcd equ p1.4 e_lcd equ p1.5 ram_lcd equ 40h data_lcd equ 41h blink_on bit

cursor_on bit Inisialisasi memori mikro untuk pengaturan LCD

bitsave equ 22h display_clear equ 01h funcset equ 28h entrymodset equ 06h dispon equ 0ch cursor equ 0eh blink equ 0fh data_lcd equ 38h ram_lcd equ 39h portData equ P2

KbdData bit P3.2

KbdClock bit p3.3 ;INT0;P3.2 DataKeyboard equ 35h

Tombol_1 bit P3.0 KeyClk bit P3.2

KeyData bit P3.4 Inisialisai memori pengolahan Keyboard PC

Nbits equ 30h Nbytes equ 31h KeyRtn equ 33h shift bit 0 c_flags equ 21h

busy bit P1.1 strobe bit P1.0

rset bit p1.2

portData equ P2

charcounter equ 42h inisialisasi memori untuk printer

addresscounter equ 43h

Pdata Equ P2

;Strobe bit P1.0 ; to printer

(3)

init bit rset ; to printer

;busy bit P1.6 ; from printer

bounc equ 22h

DL1 EQU 24H

DL2 EQU 25H

busy bit P0.0 inisialisasi memori untuk printer

strobe bit P0.1 stb bit strobe ack bit p0.2 pe bit p0.3 reset_print bit p0.4

m equ 34h

;

Slave_AddrSEE equ 45h

DataSEE equ 46h inisialisasi memori external sda bit p1.6

scl bit p1.7 ;

;

org 0h

ajmp start ;reset org 3h

ajmp KeyBoard ;extrn interrupt 0 org 0bH

ajmp start ;timer 0

org 013h pemetaan alamat

sub-program

ajmp start ;extrn interrupt 1 org 01bh

ajmp start ;timer 1 org 023h

ajmp start ;Serial I/O ;

org 0100h

;=============================== ;sub-program penulisan data 16bit EEPROM ;===============================

Tulis_SEE16b:

Lcall Siapkan16bAlamatSEE

Jc Wrong_Write

Mov A,DataSEE

Lcall KirimDataSEE

(4)

Lcall Buat_StopBit Ret

Wrong_Write1:

Lcall Buat_StopBit

Clr C

Ljmp Tulis_SEE16b

;============================= ;tulis data dari mikro ke EEPROM 16bit ;=============================

Tulis_SEE8b:

Lcall Siapkan8bAlamatSEE

Jc Wrong_Write8b

Mov A,DataSEE

Lcall KirimDataSEE

Jc Wrong_Write8b

Lcall Buat_StopBit

Ret

Wrong_Write8b:

Lcall Buat_StopBit

Clr C

Ljmp Tulis_SEE8b

;============================ ;baca data dari EEPROM oleh Mikro ;============================ Baca_SEE16b:

Lcall Siapkan16bAlamatSEE

Jc Wrong_Read

Lcall Buat_StartBit

Lcall ModeBacaSEE

Jc Wrong_read

Lcall BacaDataSEE

Ret

Wrong_Read:

Lcall Buat_StopBit

Clr C

Ajmp Baca_SEE16b

Baca_SEE8b:

Clr C

Lcall Siapkan8bAlamatSEE

Jc Wrong_Read8b

(5)

Lcall ModeBacaSEE

Jc Wrong_read8b

Lcall BacaDataSEE

Ret

Wrong_Read8b:

Lcall Buat_StopBit

Clr C

Ljmp Baca_SEE8b

;=============================

;cek bit ACK untuk pembacaan dan penulisan data ke EEPROM ;=============================

Ambil_Ack:

Clr C

Setb SDA

Setb SCL

Mov C,SDA

Clr SCL

Ret

;=================================== ;pemetaan penulisan alamat data EEPROM ;===================================

KirimDeviceAddress:

Lcall Buat_StartBit

Push Acc

Mov A,R7

Lcall KirimDataSEE

Pop Acc

Ret

Kirim1WordAddress:

Push Acc

Mov A,B

Lcall KirimDataSEE

Pop Acc

Ret

Kirim2WordAddress:

Push Acc

Mov A,R6

Lcall KirimDataSEE

Pop Acc

Ret

BacaDataSEE:

Push B

(6)

Clr A

;================================== ;baca data 16 bit dari EEPROM ke mikro

;==================================

LoopBacaSEE16b:

Push B

Rl A

Setb SDA

Setb SCL

Clr C

Mov C,SDA

Mov Acc.0,C

Clr SCL

Pop B

Djnz B,LoopBacaSEE16b

Lcall Ambil_Ack

Lcall Ambil_Ack

Lcall Buat_StopBit

Pop B

Ret

KirimDataSEE: Push B

Mov B,#8

Send8_bitloop:

Rlc A

Mov SDA,C

Lcall Pulse_SEE

Djnz B,Send8_bitloop

Pop B

Clr C

Lcall Ambil_Ack

Ret

;====================================== ;persiapan komunikasi serial antara EEPROM dengan mikro ;======================================

Pulse_SEE:

Push b

Setb SCL

Clr SCL

Pop B

Ret

Buat_StartBit:

Setb SDA

Setb SCL

Clr SDA

(7)

Ret

Buat_StopBit:

Clr SDA

Setb SCL

Setb SDA

Clr SCL

Ret PageSEE8bWrite:

Clr F0

Push 05H

Lcall Siapkan8bAlamatSEE

Ajmp PageSEEWrite

PageSEE16bWrite:

Setb F0

Push 05H

Loop2PageSEE16bWrite:

Lcall Siapkan16bAlamatSEE

PageSEEWrite:

Mov A,DataSEE

Lcall KirimDataSEE

;

Jc WrongPWrite

Mov R5,#031

LoopPageSEE16bWrite:

Mov A,DataSEE

Lcall KirimDataSEE

Jc Loop2PageSEE16bWrite

Djnz R5,LoopPageSEE16bWrite

Pop 05H

Lcall Buat_StopBit

Ret

;======================================== ;cek kesalahan penulisan data dari EEPROM ke mikro ;======================================== WrongPWrite:

Pop 05H

Lcall Buat_StopBit

Jb F0,PageSEE16bWrite

Ljmp PageSEE8bWrite

Siapkan16bAlamatSEE:

Lcall KirimDeviceAddress

Jc SalahTulisAlamat

Lcall Kirim1WordAddress

Jc SalahTulisAlamat

Lcall Kirim2WordAddress

(8)

Ret Siapkan8bAlamatSEE:

Lcall KirimDeviceAddress

Jc SalahTulisAlamat

Lcall Kirim1WordAddress

Ajmp SalahTulisAlamat

;====================================== ;mode pembacaan dari EEPROM oleh Mikro

;====================================== ModeBacaSEE:

Push Acc ;

Mov A,R7

Setb Acc.0

Mov Slave_AddrSEE,A

Pop Acc

Mov A,Slave_AddrSEE

Lcall KirimDataSEE

Ret DPHSEE8bit:

Mov R7,#0A0H

MOv A,DPH

Anl A,#00000011b

Rl A

Orl A,R7

Mov R7,A

Mov B,DPL

Ret DPTRSEE8bit:

Acall DPHSEE8bit

Acall Baca_SEE8b

Ret DPTRSEE16bit:

Mov R7,#0A0H

Mov B,DPH

Mov R6,DPL

Acall Baca_SEE16b

Ret TulisDPTRSEE8b:

Acall DPHSEE8bit

Acall Tulis_SEE8b

Ret TulisDPTRSEE16b:

Mov R7,#0A0H

Mov B,DPH

Mov R6,DPL

(9)

Ret

;============================== ;inisialisasi kontrol CGRAM dan DDRAM LCD ;============================== init_lcd:

mov a,#funcset call write_control mov a,#dispon call write_control mov a,#display_clear call write_control call dlylcd2

mov a,#entrymodset call write_control ret

;*******delay tulis data LCD ************** dlylcd2:

mov r6,#40h dly2:

mov r7,#0 dly3: djnz r7,dly3 djnz r6,dly2 ret

;***********instruksi tulis LCD********** write_control:

clr e_lcd ;e=0 clr rs_lcd ;rs=0 mov p0,a sjmp dlylcd1

;********************* write_data:

clr e_lcd ;e=0 setb rs_lcd ;rs=1 mov p0,a dlylcd1:

setb e_lcd ;e=1 mov r7,#250 djnz r7,$ clr e_lcd ;e=0 ret

;*******penulisan dua baris LCD************** ;line lcd

line2:

(10)

line1:

mov a,#80h lineout:

call write_control ret

;**********cetak karakter dari keyboard ke lcd*********** ;tampilan karakter

tampilline2: call line2 sjmp outchar tampilline1: call line1 sjmp outchar tampilcharloop: call write_data inc dptr

outchar: clr a

movc a,@a+dptr jnz tampilcharloop ret

tampilinram: clr a

movc a,@a+dptr jz finish_send mov data_lcd,a call send_lcd inc dptr inc ram_lcd sjmp tampilinram finish_send:

ret

;************kirim data ASCII dari mikro ke LCD********* ;send to add lcd

send_lcd: mov a,#9 clr c

subb a,data_lcd jc sendtoram mov a,data_lcd orl a,#30h mov data_lcd,a sendtoram:

(11)

mov a,data_lcd call write_data ret

disp_menu: call init_lcd mov dptr,#text_1 call tampilline1 mov dptr,#text_2 call tampilline2 ret

;--- ; Definisi pemakaian memory ;--- ; =================== ; Awal dari program

; ===================

org 200h

call delay

main: mov bounc,#15

cek_A: jb Tombol_1,main

djnz bounc,cek_A

call print_paket

wt_1: jnb Tombol_1,wt_1

djnz bounc,wt_1

jmp main

;====================== ; Sub Routine Delay

;====================== Delay: mov DL1,#50

Delay1: mov DL2,#0

djnz DL2,$

djnz DL1,Delay1

ret LongDelay:

mov temp,#8

LD4: mov DL1,#0

call delay1

djnz temp,LD4

ret PDelay20:

mov DL1, #100

ajmp PD_Loop

PDelay30:

mov DL1, #150

PD_Loop:

(12)

ret

;============================ ; Routine layanan printer.

;============================ ; routine untuk RESET printer

;============================ reset_printer:

clr init

clr selectin

clr strobe

call delay

setb init

setb strobe

setb selectin

call Longdelay

mov A, #27

call cetak_char

mov A, #54

call cetak_char

ret

;==================================== ; Routine cetak dari DPTR ke printer

;==================================== cetak_data:

clr A

movc A,@A+DPTR

jz exitp

call cetak_char

inc dptr

jmp cetak_data

exitp: ret

;--- cetak_char:

jb busy,cetak_char

mov Pdata,A

call PDelay20

clr strobe

call PDelay20

setb strobe

call PDelay30

ret

;============================ ; penghasil signal strobe

;============================ strobe_pulse:

call PDelay20

clr strobe

(13)

setb strobe

call PDelay30

ret

;============================ ; Routine mencetak tiket

;============================ print_paket:

; call reset_printer ; EPSON

mov dptr,#ending

call cetak_data

mov dptr,#nomora

call cetak_data

;

akhiran:

mov Pdata,#0Dh

call strobe_pulse

mov Pdata,#0Ah

call strobe_pulse

mov Pdata,#0Dh

call strobe_pulse

mov Pdata,#0Ah

call strobe_pulse

mov dptr,#header

call cetak_data

akhire:

mov dptr,#ending0

call cetak_data

ret

;====================

sjmp $

start2:

call init_LCD

call disp_menu

; sjmp $

mov r5,#20

call sebentar

sjmp $

call init_lcd

jmp forever sebentar:

(14)

ret dlybounc:

mov r6,#100 loopb2:

mov r7,#250 loopb1:

nop nop nop

djnz r7,loopb1 djnz r6,loopb2 ret

;

Forever:

JB KbdClock,$ call GetDataKeyboard jnc Forever

acall LCD_Out

clr C

inc r7

mov a,r7

cjne a,#8fh,truske

mov r7,#0c0h

b2: acall write_control mov R7,DataKeyboard acall write_data

clr C

inc r7

mov a,r7

cjne a,#0cfh,b2

clr a

call init_lcd

truske: sjmp Forever ;

LCD_Out:

mov R7, #80h acall write_control mov R7,DataKeyboard acall write_data

ret

;================================== ;Subroutine Get Data From Keyboard

;================================== GetDataKeyboard:

call Get_scancode

(15)

JB KbdClock,$ call Get_Scancode Setb C

call Convert_Scancode jnb acc.7, KbChkOK

mov dptr, #TableKeyboard2 ret

;

KbChkOK:

Acall Konversi_Scancode2

mov a, r1

movc a, @a+dptr mov DataKeyboard, a setb c

ret ;

Konversi_ScanCode2:

Mov DPTR,#TableKeyboard2 movc A,@A+DPTR

mov DataKeyboard,A ret

;

Kybd_pressed: Clr C ret ;

Convert_ScanCode:

Mov DPTR,#TableKeyboard movc A,@A+DPTR

mov DataKeyboard,A ret

;

Get_scanCode: clr A

Jnb KbdClock,$ mov R0,#08h Get_ScanCode2:

Jb KbdClock,$ Mov C,KbdData Rr A

mov acc.7,C Jnb KbdClock,$

Djnz R0,Get_ScanCode2 Jb KbdClock,$

(16)

Jnb KbdClock,$ ret

;

Printchar:

mov portData,A

jb busy,$

setb strobe

clr strobe

acall delayp

Setb strobe

acall delayp

ret ;

delayp: mov R7,#2

del1: mov R6,#20

DJNZ R6,$

DJNZ R7,del1

ret ;

hs_:

mov DPTR,#Text_2

lagi2: clr A

movc A,@A+DPTR

cjne A,#'0',Print2

sjmp Out2

Print2: call Printchar

inc dptr

call delay

sjmp lagi2

Out2: ret

; Enter:

mov A,#0dh

call printchar

call delay

mov A,#0ah

call printchar

ret ;

Text_1: DB ' Mario '

Text_2: DB ' HS-Comp '

;*************################************** TableKeyboard2:

; Keyboard Scancodes with shift

(17)

db 0, 0, 'C', 'X', 'D', 'E', '$', '#', 0, 0, ' ', 'V', 'F', 'T', 'R' db '%', 0, 0, 'N', 'B', 'H', 'G', 'Y', '^', 0, 0, 0, 'M', 'J', 'U', '&' db '*', 0, 0, '<', 'K', 'I', 'O', ')', '(', 0, 0, '>', '?', 'L', ':', 'P' db '_', 0, 0, 0, '"', 0, '{', '+', 0, 0, 0 , 0 , 2 , '}', 0, '|' db 0, 0, 0, 0, 0, 0, 0, 0, 2 , 0, 0, '1', 0, '4', '7', 0, 0, 0, '0' db '.', '2', '5', '6', '8', 2 , 0 , 2 , '+', '3', '-', '*', '9', 0 db 0, 0, 0, 0, 2

;*********************####################************* TableKeyboard:

; Keyboard Scancodes

db 0, 1 , 0, 1 , 1 , 1 , 1 , 1 , 0, 1 , 1 , 1 , 1 , 1 , '~' db 0, 0, 0 , 0 , 0, 0 , 'q', '1', 0, 0, 0, 'z', 's', 'a', 'w', '2' db 0, 0, 'c', 'x', 'd', 'e', '4', '3', 0, 0, ' ', 'v', 'f', 't', 'r' db '5', 0, 0, 'n', 'b', 'h', 'g', 'y', '6', 0, 0, 0, 'm', 'j', 'u', '7' db '8', 0, 0, ',', 'k', 'i', 'o', '0', '9', 0, 0, '.', '/', 'l', ';', 'p' db '-', 0, 0, 0, '', 0, 0, '[','=', 0, 0 , 0 , 09h , 0Ah, ']', 0,'|' db 0, 0, 0, 0, 0, 0, 0, 0, 08h , 0, 0, '1', 0, 11h, '7', 0, 0, 0, '0' db '.', '2', '5', '6', '8', 1 , 0 , 1 , '+', '3', '-', '*', '9', 0

db 0, 0, 0, 0, 1 ;

TableKey: DB 00 DB 0F9H DB 00

DB 0F5H,0F3H,0F1H,0F2H,0FCH DB 00H

DB 0FAH,0F8H,0F6H,0F4H DB 0C0H

DB '~' DB 00H DB 00H DB 0C1H DB 0C2H DB 00H DB 0C3H DB 'Q1'

(18)

DB 00H,00H DB ',KIO09' DB 00H,00H DB './L;P-'

DB 00H,00H,00H DB 27H

DB 00H DB '[=' DB 00H,00H DB 0C5H DB 0C6H DB 0AH DB ']' DB 00H DB '\'

DB 00H,00H,00H,00H,00H,00H,00H,00H DB 08H

DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H DB 00H,00H

DB 0DH DB 00H DB 0FBH

DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H DB 0F7H

;

;============================ ; Data area

;============================ header:

DB ' Mario ',0dh,0ah,0dh,0ah

DB 1Bh,'W',02

DB ' --- ',0Dh,0Ah

DB 1Bh,'W',04

DB ' Fakultas Teknologi Industri Dan Informatika ',0Dh,0Ah

DB 1Bh,'W',02

DB ' --- ',0Dh,0Ah

db 0Dh,0Ah,0

nomora: DB 1BH,'W',7,' ',' ','1',' ','4',' ','5',0DH,0AH

DB 1Bh,'W',3

db ' NIP:',0DH,0AH

db 1BH,'W',2,0

ending:db 1BH,'W',2

DB ' --- ',0Dh,0Ah DB ' Mesin Ketik Elektronik ',0Dh,0Ah DB ' Berbasis Microcontroller ',0Dh,0Ah

(19)

db 0Dh,0Ah,0 ending0:

DB 0Dh,0Ah,0Dh,0Ah,0Dh,0Ah,0Dh,0Ah,0Dh,0Ah,0Dh,0Ah,0

;

org 60h init_lcd:

mov a,#funcset call controlout mov a,#dispon call controlout mov a,#display_clear call controlout call dlylcd2

mov a,#entrymodset call controlout ret

;********************* dlylcd2:

mov r6,#40h dly2:

mov r7,#0 dly3: djnz r7,dly3 djnz r6,dly2 ret

;********************* ;control out to lcd

controlout: push acc call controllcd pop acc swap a

call controllcd ret

;********************* ;data out to lcd

dataout: push acc call datalcd pop acc swap a call datalcd ret

;********************* controllcd:

(20)

clr acc.0 ;rs=0 mov p1,a sjmp dlylcd1

;********************* datalcd:

clr acc.1 ;e=0 setb acc.0 ;rs=1 mov p1,a dlylcd1:

setb p1.1 ;e=1 mov r7,#250 djnz r7,$ clr p1.1 ;e=0 ret

;********************* ;line lcd

line2:

mov a,#0c0h sjmp lineout line1:

mov a,#80h lineout:

call controlout ret

;********************* ;tampilan karakter

tampilline2: call line2 sjmp outchar tampilline1: call line1 sjmp outchar tampilcharloop: call dataout inc dptr outchar: clr a

movc a,@a+dptr jnz tampilcharloop ret

tampilinram: clr a

(21)

inc dptr inc ram_lcd sjmp tampilinram finish_send:

ret

;********************* ;set up lcd

setuplcd:

mov a,#03h call controlout mov r5,#2 call sebentar mov a,#02h call controlout mov r5,#1 call sebentar ret

;********************* ;send to add lcd

send_lcd: mov a,#9 clr c

subb a,data_lcd jc sendtoram mov a,data_lcd orl a,#30h mov data_lcd,a sendtoram:

mov a,ram_lcd orl a,#80h call controlout mov a,data_lcd call dataout ret

;********************* ;delay time

sebentar:

call dlybounc djnz r5,sebentar ret

dlybounc:

mov r6,#100 loopb2:

mov r7,#250 loopb1:

(22)

nop nop

djnz r7,loopb1 djnz r6,loopb2 ret

;=============================== db ' KETIK ELEKTRIK ',0

text_tanda:

db ' CEK Device-KBD ',0

;============================== Printchar:

mov portData,A

jb busy,$

setb strobe

clr strobe

acall delayprint

Setb strobe

acall delayprint

ret ;

delayprint: mov R7,#2

del1print: mov R6,#20

DJNZ R6,$

DJNZ R7,del1print

ret

cetak_nama:

mov DPTR,#Text_nama1

lagi1: clr A

movc A,@A+DPTR

cjne A,#0,Print1

sjmp Out1

Print1: cjne a,#' ',tr2

mov a,#29h

tr2: call Printchar

inc dptr

call delayprint

sjmp lagi1

Out1: ret

;

cetak_judul:

mov DPTR,#Text_judul

lagi2: clr A

movc A,@A+DPTR

cjne A,#0,Print2

(23)

Print2: cjne a,#' ',tr

mov a,#29h

tr: call Printchar

inc dptr

call delayprint

sjmp lagi2

Out2: ret

; Enter:

mov A,#0dh

call printchar

call delayprint

mov A,#0ah

call printchar

ret kertas:

db 'Kertas Error nop',0

tas: db '================',0

batas: mov dptr,#tas

l1: clr A

movc A,@A+DPTR

cjne A,#0,Pr1

sjmp O1

Pr1: cjne a,#'=',jret

mov a,#3dh

jret: call Printchar

inc dptr

call delayprint

jmp l1

O1: ret

;========================= start:

call init_lcd

mov dptr,#text_nama

call tampilline1 mov dptr,#text_judul call tampilline2 mov r5,#20 call sebentar call init_lcd mov dptr,#text_tanda call tampilline1

clr reset_print

mov r5,#20

call sebentar

(24)

; mov r0,#0ffh ; mov r1,#0ffh ;

;delay: ;wait for settling time ; djnz r0,$

; djnz r1,delay

jmp cek_intriger

reset:

mov P0,0ffh mov P1,0ffh mov P2,0ffh mov P3,0ffh ;

cek_intriger:

setb IT0 ;ext int edge triggered clr shift ;clear shift flag

mov c_flags,#0 mov bitsave,#0 mov Nbits,#0 mov Nbytes,#0 mov KeyTemp,#0 mov KeyRtn,#0 ;

;* acall LCD_Init ;init LCD

;acall init_lcd

;mov dptr,#ok_msg ;startup msg for LCD ; acall LCD_PutSc

;CALL tampilline2

setb EX0 ;enable external interrrupt 0 setb EA ;enable interrupts

kondisikan_printer_siap:

; mov P0,0ffh

Mov P2,#0FFH ;Set Port 2 sebagai input data printer

; Setb STB ;Set STB sebagai input

; Clr Busy ;Printer sedang tidak sibuk

; Clr PE ;Tidak ada Paper Error

; Setb ACK ;Acknowledge high

clr reset_print

mov r5,#20 call sebentar

setb reset_print

;jb ack,$

;jnb pe,kertas_eror

jmp trus kertas_eror:

(25)

call tampilline2

jnb pe,$

;ret

trus: ;acall init_lcd

mov dptr,#ok_msg ;startup msg for LCD ; acall LCD_PutSc

CALL tampilline2

;call batas

;call enter

call cetak_judul

call enter

;call delayprint

;clr busy

mov r5,#20

call sebentar

call cetak_nama

;call enter

;call delayprint

;clr busy

;call batas

call enter

;clr reset_print

;setb reset_print

mov r5,#20

call sebentar

;call init_lcd

mov dptr,#unshifted

test: clr A

movc A,@A+DPTR

cjne a,#0ffh,test1

call enter

sjmp $

test1: call printchar

inc dptr

call delayprint

jmp test

;sjmp start loopit:

mov r1,Nbytes ;get byte count

cjne r1,#1,loopit ;if no char keep looking mov Nbytes,#0 ;reset count

mov a,KeyRtn ;get char cjne a,#08h,chkctrl

;

; handle back space

(26)

movx a,@R0 ;get status and dd ram addr clr acc.7 ;turn off busy flag

jz at_start ;if not at start of display dec a ;back up 1 pos

at_start:

mov R2,a ;save in R2

setb acc.7 ;make set dd addr cmd acall LCD_CmdWrite ;set dd ram addr mov a,#20h ;get a blank

acall LCD_DataWrite ;erase current pos mov a,R2 ;get dd ram addr setb acc.7 ;set dd ram addr acall LCD_CmdWrite ;back up sjmp loopit ;get next char chkctrl:

jc loopit ;control char

cjne a,#10h,not_home ;check for home mov a,#2

acall LCD_CmdWrite sjmp loopit

not_home:

cjne a,#19h,lt_space ;rest of low control char sjmp loopit

lt_space:

jc loopit

cjne a,#80h,chk_FKeys ;check function keys chk_FKeys: ;always come here code 80 not used jnc FKeys ;handle function keys

acall LCD_DataWrite ;write char sjmp loopit ;go for next one ;

; function keys are encoded with the high bit on ;

FKeys:

cjne a,#82h,FK1 ;handle F1 cpl cursor_on ;toggle cursor bit sjmp do_cursor

FK1:

jnc loopit ;only F1 and F2 handled cpl blink_on ;toggle blink bit do_cursor:

mov a,#0ch ;display on orl a,c_flags ;set cursor state acall LCD_CmdWrite

sjmp loopit

(27)

;

LCD_READ_DATA equ 11b LCD_WRITE_DATA equ 01b

LCD_READ_STS equ 10b ;status read is a comand operation LCD_WRITE_CMD equ 00b

; ;============================================= LCD_PutSc:

clr a

movc a, @a+dptr ; fetch the byte

jz LCD_PutScExit ; exit on End Of String, Nul inc dptr

acall LCD_DataWrite ; display the byte sjmp LCD_PutSc

LCD_PutScExit: ret

;

LCD_PutCmdStr:

clr a ;

movc a, @a+dptr ; fetch the byte

jz LCD_PutCmdExit ; exit on End Of String, Nul inc dptr ;

acall LCD_CmdWrite ; Write the Command sjmp LCD_PutCmdStr ;

LCD_PutCmdExit: ret

;

LCD_DataWrite:

acall LCD_BusyWait ; wait for end of previous cycle mov R0,#LCD_WRITE_DATA ; invoke Write mode movx @R0,a ; send display byte to data port ret

;

LCD_CmdWrite:

acall LCD_BusyWait ; wait for end of previous cycle mov R0,#LCD_WRITE_CMD ; invoke Write mode movx @R0,a ; send command to display ret

;

LCD_BusyWait:

push acc ;save acc

mov R0,#LCD_READ_STS ; goto Read status mode LCD_BusyLoop:

movx a,@R0 ; read data

jb ACC.7,LCD_BusyLoop ; test Busy bit... pop acc ;restore acc

(28)

;

LCD_Init:

mov R0,#LCD_WRITE_CMD ; goto Command mode mov a, #034h ; set 8-bit interface mode

movx @R0,a ; Write command acall LCD_BusyWait

mov R0,#LCD_WRITE_CMD ; goto Command mode mov a, #034h ; set 8-bit interface mode

movx @R0,a ; Write command acall LCD_BusyWait

mov R0,#LCD_WRITE_CMD ; goto Command mode mov a, #01h ; Clear display

movx @R0,a ; Write command acall LCD_BusyWait

mov R0,#LCD_WRITE_CMD ; goto Command mode mov a, #06h ; entry mode - incr, no shift

movx @R0,a ; Write command acall LCD_BusyWait

mov R0,#LCD_WRITE_CMD ; goto Command mode mov a, #0ch ; display on, cursor off

movx @R0,a ; Write command ret

;================================= ;

KeyBoard:

push psw mov c,KeyData mov bitsave.7,c push acc mov a,Nbits

cjne a,#1,bit_1 ;if this is second time sjmp nextb ;ignore

bit_1:

jc nextb ;also ignore if first mov a,KeyTemp ;get key in progress rr a ;move old bits right

orl a,bitsave ;or in next bit

mov KeyTemp,a ;store key so far mov a,Nbits

cjne a,#9,nextb ;do we have the whole byte ? mov a,KeyTemp ;get scan code

cjne a,#2ah,notlson ;is it make left shift? setb shift ;yes - set shift

sjmp cleanup notlson:

(29)

clr shift ;yes clear shift sjmp cleanup

;

; process key ;

notlsoff:

jb acc.7,cleanup ;break key code - ignore push dph

push dpl

jb shift,shiftlook ;check shift state mov dptr,#unshifted ;get unshifted table sjmp skip

shiftlook:

mov dptr,#shifted ;get shifted table skip:

movc a,@a+dptr ;translate scan code pop dpl

pop dph

cjne a,#0,not0 ;check for unsupported key sjmp cleanup ;skip if unsupported not0:

mov KeyRtn,a ;return char mov Nbytes,#1 ;char to process cleanup:

mov Nbits,#0 ;clear # bits

mov KeyTemp,#0 ;clear temp byte sjmp intdone

nextb:

inc Nbits intdone:

pop acc pop psw reti

unshifted:

(30)

db '-' ;scan code 12 db '=' ;scan code 13

db 08h ;scan code 14 - back space db 09h ;scan code 15 - tab

db 'q' ;scan code 16 db 'w' ;scan code 17 db 'e' ;scan code 18 db 'r' ;scan code 19 db 't' ;scan code 20 db 'y' ;scan code 21 db 'u' ;scan code 22 db 'i' ;scan code 23 db 'o' ;scan code 24 db 'p' ;scan code 25 db '[' ;scan code 26 db ']' ;scan code 27

db 0dh ;scan code 28 - return db 0 ;scan code 29 - control db 'a' ;scan code 30

db 's' ;scan code 31 db 'd' ;scan code 32 db 'f' ;scan code 33 db 'g' ;scan code 34 db 'h' ;scan code 35 db 'j' ;scan code 36 db 'k' ;scan code 37 db 'l' ;scan code 38 db ';' ;scan code 39 db "'" ;scan code 40 db '`' ;scan code 41

db 0 ;scan code 42 - left shift db '\' ;scan code 43

db 'z' ;scan code 44 db 'x' ;scan code 45 db 'c' ;scan code 46 db 'v' ;scan code 47 db 'b' ;scan code 48 db 'n' ;scan code 49 db 'm' ;scan code 50 db ',' ;scan code 56 db '.' ;scan code 52 db '/' ;scan code 53

(31)

db 0 ;scan code 58 - cap lock db 81h ;scan code 59 - F1 db 82h ;scan code 60 - F2 db 83h ;scan code 61 - F3 db 84h ;scan code 62 - F4 db 85h ;scan code 63 - F5 db 86h ;scan code 64 - F6 db 87h ;scan code 65 - F7 db 88h ;scan code 66 - F8 db 89h ;scan code 67 - F9 db 8ah ;scan code 68 - F10 db 0 ;scan code 69 - num lock db 0 ;scan code 70 - scroll lock db 10h ;scan code 71 - home db 11h ;scan code 72 - up arrow db 12h ;scan code 73 - page up db '-' ;scan code 74

db 13h ;scan code 75 - left arrow db 0 ;scan code 76 - key pad 5 db 14h ;scan code 77 - right arrow db '+' ;scan code 78

db 15h ;scan code 79 - end

db 16h ;scan code 80 - down arrow db 17h ;scan code 81 - page down db 18h ;scan code 82 - ins

db 19h ;scan code 83 - del

db 0ffh

shifted:

db 0 ;scan code 0 not used db 0 ;scan code 1 - esc db '!' ;scan code 2 db '@' ;scan code 3 db '#' ;scan code 4 db '$' ;scan code 5 db '%' ;scan code 6 db '^' ;scan code 7 db '&' ;scan code 8 db '*' ;scan code 9 db '(' ;scan code 10 db ')' ;scan code 11 db '_' ;scan code 12 db '+' ;scan code 13

db 08h ;scan code 14 - back space db 09h ;scan code 15 - tab

(32)

db 'E' ;scan code 18 db 'R' ;scan code 19 db 'T' ;scan code 20 db 'Y' ;scan code 21 db 'U' ;scan code 22 db 'I' ;scan code 23 db 'O' ;scan code 24 db 'P' ;scan code 25 db '{' ;scan code 26 db '}' ;scan code 27

db 0dh ;scan code 28 - return db 0 ;scan code 29 - control db 'A' ;scan code 30

db 'S' ;scan code 31 db 'D' ;scan code 32 db 'F' ;scan code 33 db 'G' ;scan code 34 db 'H' ;scan code 35 db 'J' ;scan code 36 db 'K' ;scan code 37 db 'L' ;scan code 38 db ':' ;scan code 39 db '"' ;scan code 40 db '~' ;scan code 41

db 0 ;scan code 42 - left shift db '|' ;scan code 43

db 'Z' ;scan code 44 db 'X' ;scan code 45 db 'C' ;scan code 46 db 'V' ;scan code 47 db 'B' ;scan code 48 db 'N' ;scan code 49 db 'M' ;scan code 50 db '<' ;scan code 56 db '>' ;scan code 52 db '?' ;scan code 53

db 0 ;scan code 54 - right shift db 0 ;scan code 55 - prt scrn db 0 ;scan code 56 - alt db ' ' ;scan code 57

(33)

db 0 ;scan code 64 - F6 db 0 ;scan code 65 - F7 db 0 ;scan code 66 - F8 db 0 ;scan code 67 - F9 db 0 ;scan code 68 - F10 db 0 ;scan code 69 - num lock db 0 ;scan code 70 - scroll lock db '7' ;scan code 71 - home db '8' ;scan code 72 - up arrow db '9' ;scan code 73 - page up db '-' ;scan code 74

db '4' ;scan code 75 - left arrow db '5' ;scan code 76 - key pad 5 db '6' ;scan code 77 - right arrow db '+' ;scan code 78

db '1' ;scan code 79 - end

db '2' ;scan code 80 - down arrow db '3' ;scan code 81 - page down db '0' ;scan code 82 - ins

db '.' ;scan code 83 - del

(34)
(35)
(36)
(37)
(38)
(39)
(40)
(41)
(42)
(43)
(44)
(45)
(46)
(47)
(48)
(49)
(50)
(51)

Referensi

Dokumen terkait

Tujuan dari penelitian ini adalah untuk melihat berapa besar pendapatan usahatani cengkeh dan kontribusi dari usahatani cengkeh terhadap total pendapatan rumah

Penyakit parasiter pada ikan nila juga disebabkan oleh bakteri yang bersifat.. patogen misalnya bakteri

Penelitian ini bertujuan untuk mengkaji faktor- faktor yang mempengaruhi keputusan warga berperilaku BABs, mengkaji opsi teknologi sanitasi, mengkaji sumber pembiayaan

Calon Mahasiswa MAHASISWA KULIAH Praktikum KRS KTM Daftar Ulang Ujian Tengah Semester (UTS) Ujian Akhir.. Semester (UAS) Ujian Utama (UU) DNS

Sejumlah forum seperti ra pat komisi penyuluhan Aceh, me- nurut Azanuddin, harus menjadi wadah bagi semua pihak terkait untuk dapat memberikan saran dan masukan kepada Pemerintah

Sedangkan beberapa faktor yang diduga sebagai prediktor DE, seperti lama menderita diabetes, indeks massa tubuh (IMT), obesitas sentral yang dinilai dari lingkar perut,

memasukkan faktor diskonto selama waktu jatuh tempo T tahun ke dalam formula harga opsi, diperoleh rumus harga opsi beli model Black Scholes sebagai nilai present

Untuk melaksanakan tugas sebagaimana dimaksud pada Pasal 18 Peraturan Daerah ini, Seksi Bina Media Komunikasi mempunyai fungsi pengumpulan data, penelitian,