Kein Problem:
Code:
.include "m128def.inc"
.dseg
.org 0x0100
; benutzerdefinierte Variablen
clock_hour: .byte 1
clock_min: .byte 1
clock_sec: .byte 1
; Ende benutzerdefinierte Variablen
.cseg
.org 0x0000
rjmp init
; Systeminitialisierung
init: .org 0x0030
; Stackpointer initialisieren
ldi R16, high(RAMEND)
out SPH, R16
ldi R16, low(RAMEND)
out SPL, R16
ldi R16, 0xFF ; PORTA (Ausgabe)
out DDRA, R16
ldi R16, 0x00
out PORTA, R16
ldi R16, 0x00 ; PORTB (Eingabe)
out DDRB, R16
ldi R16, 0xFF
out PORTB, R16
ldi R16, 0x42 ; PORTD (Bidirektional)
out DDRD, R16
ldi R16, 0x00
out PORTD, R16
call lcd_init ; LCD initialisieren
call init_extint ; externe Interrups initialisieren
call init_timer ; timer inistialiseren
clr R16 ; loeschen der Uhrzeit
sts clock_sec, R16
sts clock_min, R16
sts clock_hour, R16
sei ; globale Interrupts aktivieren
ldi R16, (1<<INT1)|(1<<INT0)|(1<<INT2)
out GICR, R16 ; General Interrupt Control Register setzen
main: ldi R16, FF ; loesche das Display ;
call write_chr
ldi R16, LF ; Zeilenumbruch
call write_chr
ldi ZL, LOW(zeichenkette<<1) ; lade Zeichenkette für 2.Zeile
ldi ZH, HIGH(zeichenkette<<1)
call write_str ; Ausgabe 2te Zeile
haupt: ldi R16, VT ; Zurueck zum Anfang 1.Zeile
call write_chr
ldi ZL, LOW(leerzeichen<<1) ; Leerzeichen laden
ldi ZH, HIGH(leerzeichen<<1)
call write_str ; und ausgeben
lds R16, clock_hour ; Stunden laden
call write_bcd ; und ausgeben
ldi R16, ':' ; Doppelpunkt
call write_chr ; und schreiben
lds R16, clock_min ; min laden
call write_bcd
ldi R16, ':'
call write_chr
lds R16, clock_sec ; sec laden
call write_bcd
jmp haupt
So, das sollte es gewesen sein... Jetzt vielleicht eine Idee?
MfG, Ozzy
Lesezeichen