Berikut Script Assembler nya :
.include "m8535def.inc"
.equ timer_value = 0xffca
.equ timer_value100 = 0xfbaf
.cseg
.org 0x0000
rjmp main
main: ldi r16,low(RAMEND)
out SPL,r16
ldi r16,high(RAMEND)
out SPH,r16
ldi r16,0xff
out ddra,r16
rcall InitLCD
Start: ldi r17,0x01
rcall SLcd
Loopx: ldi ZL,low(2*text)
ldi ZH,high(2*text)
rcall WM1LCD
ldi ZL,low(2*text2)
ldi ZH,high(2*text2)
rcall WM2LCD
end: rjmp Loopx
;-----------------------
; Write Message to LCD
;-----------------------
WM1LCD: ldi r17,0x80 ;1st line, 1st col
rcall SLcd
rjmp Wr1
WM2LCD: ldi r17,0xC0
rcall SLcd
Wr1: clr r1
LoopWr1: lpm ;load program memory
mov r19,r0
cpi r19,0
brne NextCHR
ret
NextCHR: rcall WLCD ;write character
adiw ZL,1 ;get next char
rjmp LoopWr1
;-----------------------
; Inisialisasi LCD
;-----------------------
InitLCD: ldi r20,8
LoopDelay: rcall delay5mS
dec r20
cpi r20,0
brne LoopDelay
ldi r17,0x03 ;Function set
out PortA,r17
sbi PortA,6 ;E=1
cbi PortA,6 ;E=0
rcall delay5mS
ldi r17,0x03 ;Function set
out PortA,r17
sbi PortA,6 ;E=1
cbi PortA,6 ;E=0
rcall delay100uS
ldi r17,0x02 ;Function set:4 bit operation
out PortA,r17
sbi PortA,6 ;E=1
; rcall delay100uS
cbi PortA,6 ;E=0
ldi r17,0x28 ;Function set:4 bit op;2lines
rcall SLcd
ldi r17,0x08 ;Turn Off LCD
rcall SLcd
ldi r17,0x0C ;Turn On LCD
rcall SLcd
ldi r17,0x01 ;Clear Display
rcall SLcd
ldi r17,0x06 ;Entry mode set; Inc addr
rcall SLcd
ret
;-----------------------
; Rutin kirim instruksi
;-----------------------
SLcd: mov r18,r17
andi r18,$F0 ;Get high nibble
swap r18
out PortA,r18
sbi PortA,6 ;E=1
cbi PortA,6 ;E=0
;
mov r18,r17
andi r18,$0F ;Get low nibble
out PortA,r18
sbi PortA,6 ;E=1
cbi PortA,6 ;E=0
rcall delay100uS
ret
;-----------------------
; Rutin kirim karakter
;-----------------------
WLcd: mov r18,r19
andi r18,$F0 ;Get high nibble
swap r18
out PortA,r18
sbi PortA,4 ;RS=1
sbi PortA,6 ;E=1
cbi PortA,6 ;E=0
;
mov r18,r19
andi r18,$0F ;Get low nibble
out PortA,r18
sbi PortA,4 ;RS=1
sbi PortA,6 ;E=1
cbi PortA,6 ;E=0
rcall delay100uS
ret
;-----------------------
; Rutin delay 5ms
;-----------------------
delay5ms: ldi r16,0b00000100
out TIMSK,r16
ldi r16,high(timer_value)
out TCNT1H,r16
ldi r16,low(timer_value)
out TCNT1L,r16
ldi r16,0b00000101
out TCCR1B,r16
loop: in r21,TIFR
sbrs r21,TOV1
rjmp loop
ldi r16,0b00000100
out TIFR,r16
ret
;-----------------------
; Rutin delay 100uS
;-----------------------
delay100us: ldi r16,0b00000100
out TIMSK,r16
ldi r16,high(timer_value100)
out TCNT1H,r16
ldi r16,low(timer_value100)
out TCNT1L,r16
ldi r16,0b00000001
out TCCR1B,r16
loop1: in r21,TIFR
sbrs r21,TOV1
rjmp loop1
ldi r16,0b00000100
out TIFR,r16
ret
;text:.db "12345678901234567890", 0
text: .db "-++ Hello Effand ++-",0
text2: .db "Susah ******",0
;create by Effand Bocah Nozh
Untuk Download Rangkaian PCB nya klik disini
Semoga Bermanfaat bagi semua ..
No comments:
Post a Comment
Terimakasih Atas Komentar Anda, Salam JOSS dari HMPS TI UNIKAMA