Code:
;definitionsdatei
.equ DBport= portd ; ausgabeport
.equ RWport= portc ; RS,RW, E
.equ DBddr= ddrd ; datenrichtung ausgabe
.equ RWddr= ddrc ; datenrichtung rs, rw, e
.equ pine= 3
.equ pinrw= 4
.equ pinrs= 5
.device mega8
.include "m8def.inc"
; Stack initialisieren
ldi r16, LOW(RAMEND)
out SPL, r16
ldi r16, HIGH(RAMEND)
out SPH, r16
;****************hier starten********************
rcall ms10
rcall ms10
rcall ms10
rcall ms10
rcall ini
rjmp haupt
;****************Ein/Ausgänge*********************
ddrdaus: ldi r16, $ff ; Datenausgänge DB0-7
out ddrd, r16
ret
ddrdein: ldi r16, 0
out ddrd, r16
ret
ddrcaus:ldi r16, $ff ; kontrollausgänge RS;RW;E
out ddrc, r16
ret
ddrcein:ldi r16, 0
out ddrc, r16
ret
;****************Warteschleifen*******************
ms2:
ldi r24, low (125) ;// 2000 = µs = 2ms; 4 = takte
ldi r25, high (125) ;// 2000 = µs = 2ms; 4 = takte
ms21: sbiw r24,1 ;//2takte
brne ms21 ;//2takte
ret ;//4takte
ms5:
ldi r24, low (1250) ;// 5000 = µs = 5ms; 4 = takte
ldi r25, high (1250) ;// 5000 = µs = 5ms; 4 = takte
ms51: sbiw r24,1 ;//2takte
brne ms51 ;//2takte
ret ;//4takte
ms10:
ldi r24, low (2500) ;// 10000 = µs = 10ms; 4 = takte
ldi r25, high (2500) ;insgesamt 4Takte
ms101: sbiw r24,1 ;//2takte
brne ms101 ;//2takte
ret ;//4takte
;****************Daten/Befehle senden*************
;----------Daten Senden
daten: rcall ddrcaus
rcall ddrdaus
out portd, r17
sbi portc, pinrs
nop
sbi portc, pine
nop
nop
nop
nop
cbi portc, pine
rcall ms2
ret
;----------Befehle Senden
befehl: rcall ddrcaus
rcall ddrdaus
out portd, r17
nop
sbi portc, pine
nop
nop
nop
nop
cbi portc, pine
rcall ms2
ret
;----------Befehl für ini mit zeit
befehlini: rcall ddrcaus
rcall ddrdaus
out portd, r17
nop
sbi portc, pine
nop
nop
nop
nop
cbi portc, pine
rcall ms5
ret
;****************Initialisierung******************
ini: rcall ddrdaus ;ddrd = ausgang
rcall ddrcaus ;ddrc = ausgang
ldi r17, 0x00
out portd, r17
ldi r17, $30 ;$30 = 3 mal auf ausgang
rcall befehlini ; 1 befehl senden
rcall befehlini ; 2 befehl senden
rcall befehlini ; 3 befehl senden
;Function set
;DL = 1 = 8bit-modus, N = 1 = 2 Zeilen,
ldi r17, 0b00111000 ;Funtion set, DL, N, F
rcall befehlini
;Display ON/OFF
ldi r17, 0b00001110 ;Display, ON/Off, cursor an/aus, Block/Unterstrich
rcall befehlini
ldi r17, 0b00000001
rcall befehlini
ret
;----------------Hauptprogramm-------------------
haupt:
ldi r17, '0'
rcall daten
ldi r17, '8'
rcall daten
ldi r17, '/'
rcall daten
ldi r17, '1'
rcall daten
ldi r17, '5'
rcall daten
loop:
rjmp loop
Lesezeichen