Witam.
Proszę o pomoc.
Napisałem prosty program do obsługi LCD.
Sprawdzałem przy różnych ustawieniach i nie mam żadnego efektu na wyświetlaczu.
Grzegorz.
Proszę o pomoc.
Napisałem prosty program do obsługi LCD.
Sprawdzałem przy różnych ustawieniach i nie mam żadnego efektu na wyświetlaczu.
Grzegorz.
.include "8515def.inc"
.equ dane = PORTD
.equ ster = PORTC
.equ E = 7
.equ RW = 6
.equ RS = 5
.def acc = r16
.def licznik = r17
.def czas = r19
.cseg
.org 0x00
rjmp Start
.org 0x07
rjmp Timer
.org 0x0B
; 8-BITÓW DANYCH 1 WIERSZ
Start:
ldi acc, 127 ;
out SPL, r16 ; ustawienie wskaˇnika stosu na 127
ldi acc, 3
out TCCR0, acc ; ustaw preskaler na 64 i wystartuj timer
ldi acc, 2
out TIMSK,acc ;włączenie przerwania przepełnienia licznika T0(TOIE0)
sei
ldi czas, 11
Lcdini:
ldi acc,0b11111111
out ster, acc
ldi acc,0
rcall sek
ldi acc, 0xff
out DDRC, acc
ldi acc,0x00
out PORTC, acc
ldi acc,0xff
out DDRD, acc
ldi acc, 0b00110000 ;POCZĄTEK INICJACJI
out dane, acc
rcall Wykom
ldi acc,252
out TCNT0, acc
ldi czas, 2
rcall sek
ldi acc, 0b00110000
out dane, acc
rcall Wykom
ldi acc,252
out TCNT0, acc
ldi czas, 2
rcall sek
ldi acc, 0b00110000
out dane, acc
rcall Wykom
ldi acc,252
out TCNT0, acc
ldi czas, 2
rcall sek
cli
ldi acc, 0b00111000 ;function set
out dane, acc
rcall Wykom
ldi acc, 0b00001000 ;display off
out dane, acc
rcall Wykom
ldi acc, 0b00000001 ;display clear
out dane, acc
rcall Wykom
ldi acc, 0b00000110 ;entry mode set
out dane, acc
rcall Wykom
ldi acc, 0b00001111 ;display on
out PORTD, acc
rcall Wykom ;KONIEC INICJACJI
Busy:
ldi acc,0xff
out dane,acc
sbi ster,RW
cbi ster,RS
sbi ster,E
sbic PIND, 7
rcall Busy
cbi ster,E
cbi ster, RW
ldi acc,0x41
out dane,acc
rcall Wydane
ldi acc,0b11111100
out ster, acc
Petla:
rjmp Petla
Wykom:
sbi ster, E
cbi ster,RS
cbi ster, E
ret
Wydane:
sbi ster, E
sbi ster,RS
cbi ster, E
cbi ster,RS
ret
sek:
out TCNT0, acc ; wartość początkowa licznika
ldi acc, 2
out TIMSK, acc ;odblokuj przerwanie od T0
ldi acc, 3
out TCCR0, acc ; ustaw preskaler na 64 i wystartuj timer
Odlicz:
cp licznik, czas ; odmierza czas 1/244s
brne Odlicz
clr licznik ; zeruj licznik
ret
Timer:
inc licznik ; zwiększa o 1 licznik przepełnień timera T0
ldi acc, 2
out TIFR, acc
reti ;powrót z przerwania