hello
I am using the powertip pc1602-H. I want to program this lcd whit a atmega uC in asm. I thryed this code:
Code:
;wim peperkamp
.include "m168def.inc"
; definitie vab de stuurlijn
.equ E = PinC5
.equ RW = PinC4
.equ RS = PinC3
.equ BF = PinB7
; lcd instructies
.equ clear_LCD = 0b00000001
.equ home_LCD = 0b00000010
.equ set_LCD = 0b00111000
.equ LCD_on = 0b00001110
.equ entry_mode = 0b00000110
; definitie var
.def buffer = r16 ;data van naar lcd
.def temp = r18
.ORG 0x0000
rjmp main
;**************subroutine unit initialiseer poort c in plaats van d*********
init: ldi temp, 0b11111111 ;poortc als uitgang
out DDRC, temp
cbi PORTC, E
cbi PORTC, RS
cbi PORTC, RW
ret
;************************ routine voor gereed test lcd**********************
busy_flag: ldi temp, 0b00000000 ;poortb op ingang
out DDRB, temp
cbi PORTC, RS ;intructie wordt verzonden
sbi PORTC, RW ;LCD in schrijfmodus
sbi PORTC, E
nop
nop
nop
nop
sbic PINB, BF ;lcd gereed?
rjmp busy_flag ;nee, herhaal
cbi PORTC, E ;lcd uit
ret ;lcd gereed
;************************zend data vanuit register buffer naar lcd***********
write_data: rcall busy_flag ;lcd gereed?
ldi temp, 0b11111111;Poortb is uitgang
out DDRB, temp
sbi PORTc, RS ;data wordt verzonden
cbi PORTc, RW ;LCD in schrijf modus
sbi PORTc, E ;activeer lcd
out PORTB, buffer ;verzend data
cbi PORTc, E ;lcd uit
ret
;********************routine zend instructies vanbuit buffer*****************
write_instr: rcall busy_flag ;lcd gereed?
ldi temp, 0b11111111;rb is uitgang
out DDRB, temp
cbi PORTC, RS ;instructie wordt verzonden
cbi PORTC, RW ;lcd in schrijfmodus
sbi PORTC, E ;activeer lcd
out PORTB, buffer ;verzend instructie
cbi PORTC, E ;lcd uit
ret
;********************hoofdprogramma schrijft shit op eerste en tweede regle lcd
main:
ldi temp, (1<<CLKPCE)
sts CLKPR, temp
CLR temp
sts CLKPR, temp
rcall init ;port c initialiseren
ldi buffer, set_LCD ;stel lcd functie in
rcall write_instr
ldi buffer, LCD_on ;schakel lcd uit
rcall write_instr
ldi buffer, clear_lcd ;wis display
rcall write_instr
ldi buffer, entry_mode ;invoer modus
rcall write_instr
;****************schrijf data op eerste regel*******************
ldi buffer,0x93
rcall write_data
ldi buffer,0x24
rcall write_data
ldi buffer,0x36
rcall write_data
ldi buffer,0x97
rcall write_data
;***************schrijf data op tweede regel**********************
ldi buffer, 0b11000000 ;zet op tweede regel
rcall write_instr
ldi buffer, 0x36
rcall write_data
ldi buffer, 0x84
rcall write_data
ldi buffer, 0x12
rcall write_data
ldi buffer, 0x31
rcall write_data
loop:
rjmp loop
This code has no effect on my lcd. This is the first time that I want to program a Lcd. I think that there is something wrong with the initialization. But what?
I hope any one can help me.
meanwhile thx