Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Assembler » Stoppuhr in Assembler

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
14.07.2006, 18:20 Uhr
Michael18964



Ich muss fürs Abitur eine Jahresarbeit machen und bei der muss ich eine Stoppuhr in Assembler programmieren, mit RIDE!!
Ich habe schon Timer und Interrupter soweit schon programmiert, aber ich weiß nicht wie man die Matrix-Tastatur und die LCD-Anzeige ansteuert!
Könnte mir da jemand helfen?
Ist wichtig für mein Abi und ich habe nurnoch eine Woche dafür Zeit
Das ist das was ich bis jetzt habe, ist das bis jetzt richtig? und könnte das jemand vervollständigen?



Code:

;timer2.a51
;Timer0-Interrupt alle 65 ms
;Ausgabe Lauflicht LEDs an P2

$include (reg52.inc)

ORG 0000h
ljmp init ;Das eigentliche Programm beginnt hinter
ORG 000Bh ;den Interrupt-Einsprung-Adressen
ljmp count_isr




;******* Initialisierung ************************************************** ***********************************
init: mov TMOD, #00000010b
mov TL0, #6d
mov TH0, #6d
mov TCON, #00010000b

SETB ET0
SETB EA



;******** Hauptprogramm ************************************************** ***********************
haupt: sjmp haupt ;Warten auf Interrupts

count_isr: INC R0



CJNE R0, #4d, marke1
MOV R0, #0h ;r0 auf 0 zurück setzen

INC R1 ;1/1000sec
CJNE R1, #10d, marke1 ;solange r1 zählen bis 10mal durchgelaufen und somit 1/100sec gedauert hat
MOV R1, #0h ;r1 auf 0 zurück setzen


INC R2 ;1/100
CJNE R2, #10d, marke1 ;solange r2 zählen bis 10mal durchgelaufen und somit 1/10sec gedauert hat
MOV R2, #0h ;r2 auf 0 zurück setzen


INC R3 ;1/10
CJNE R3, #10d, marke1 ;solange r3 zählen bis 10mal durchgelaufen und somit 1sec gedauert hat
;r3 und somit die 1/10sec ausgeben
MOV R3, #0h ;r3 auf 0 zurück setzen


INC R4 ;sec
CJNE R4, #60d, marke1 ;solange r4 zählen bis 60mal durchgelaufen und somit 1min gedauert hat
;r4 und somit die sec ausgeben
MOV R4, #0h ;r4 auf 0 zurück setzen


INC R5 ;min
CJNE R5, #60d, marke1 ;solange r5 zählen bis 60mal durchgelaufen und somit 1h gedauert hat
;r5 und somit die min ausgeben
MOV R5, #0h ;r5 auf 0 zurück setzen


INC R6 ;min
CJNE R6, #60d, marke1 ;solange r6 zählen bis 24mal durchgelaufen und somit 1d gedauert hat
;r6 und somit die h ausgeben
MOV R6, #0h ;r6 auf 0 zurück setzen


marke1: RETI

END



Zu den Hardwareangaben:
Mikrocontroller 8051
LCD 16 Zeichen Breit und 2 Zeilen hoch
Normale Matrix-Tastatur 0-9 Zeichen und Stern und Raute

Danke schonmal im Vorraus! ^

MFG
Michael

Dieser Post wurde am 14.07.2006 um 23:06 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
15.07.2006, 23:32 Uhr
~goblack3
Gast


Hy,

also heut abend hab ich kein kopf mehr dafür noch alles zu machen.
muss mir den rest erst mal in ruhe anschauen aber sieht eigentlich schonmal ganz gut aus
aber so weit schonmal:
-dein einzeiler "haupt" ist eine endlos schleife,du solltest keine marke
benutzen, du solltest "sjmp $" benutzen um auf den
interrupt zu warten (ist besser so)
-hast du vielleicht eine includedatei mit unterprogrammen für den LCD?
so müsstest du den wert nur in das vom unterprogramm verwendete register schreiben und das unterprogramm aufrufen
-für was brauchst du denn eine tastatur für eine uhr?
aber hier der code dafür (als u-prog), musst eben nur noch den port umstellen bei mir ist das p0 wie du ja siehst
start:
MOV P0,#1110$1111b
JB P0.0,m2
MOV p1,#0000$0110b
m2:
MOV P0,#1110$1111b
JB P0.1,m3
MOV p1,#0101$1011b
m3:
MOV P0,#1110$1111b
JB P0.2,m4
MOV p1,#0100$1111b
m4:
CALL sek
MOV P0,#1101$1111b
JB P0.0,m5
MOV p1,#0110$0110b
m5:
MOV P0,#1101$1111b
JB P0.1,m6
MOV p1,#0110$1101b
m6:
MOV P0,#1101$1111b
JB P0.2,m7
MOV p1,#0111$1101b
m7:
CALL sek
MOV P0,#1011$1111b
CALL sek
JB P0.0,m8
MOV p1,#1000$0111b
m8:
MOV P0,#1011$1111b
JB P0.1,m9
MOV p1,#1111$1111b
m9:
MOV P0,#1011$1111b
JB P0.2,mstern
MOV p1,#1110$1111b
mstern:
CALL sek
MOV P0,#0111$1111b
CALL sek
JB P0.0,m0
MOV p1,#1011$1111b
m0:
MOV P0,#0111$1111b
JB P0.1,mraute
MOV p1,#33h
mraute:
MOV P0,#0111$1111b
JB P0.2,m1
MOV p1,#37h
m1:

; CALL sek

JMP start

sek: MOV 79H,#1
zsek1: MOV 78H,#2
zsek2: MOV 77H,#4

DJNZ 77H,$
DJNZ 78H,zsek2
DJNZ 79H,zsek1

RET

bis dann
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ Assembler ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: