Excuus, ik sloeg verschillende dingen door elkaar.
1) Ik heb het zo opgelost, werkt ook volgens mij
2) wat bedoel je met werken aan weergave?
ORG 0h
LJMP start
ORG 30h
Start: MOV SCON,#40h ;serieel kanaal van mode1 8-bit UART variabele baudrate instellen
MOV TMOD,#22h ;instellen timer1 als 8-bit auto reload voor baudrategenerator
ORL PCON,#80h ;baudrate verdubbelaar activeren
MOV TH1,#2a43 ;4800 baudrate
MOV TL1,#243 ;4800 baudrate
SETB TR1 ;baudrategenerator activeren
MOV TH0,#037h ;startwaarde voor 200µs( 65535 - 200 = 65335 = FF37) FF bij de hoogste waarde
MOV TL0,#037h ;startwaarde voor 200µs( 65535 - 200 = 65335 = FF37) 37 bij de laagste waarde
SETB TR0 ;timer0 starten
MOV R1,#000H ;seconden op 0 (hoef je maar 1x uit te voeren
MOV R2,#000H ;minuten op 0
MOV R3,#000H ;uren op 0
MOV R4,#000H ; register voor maxwaarde teller om seconde te bekomen (=100)
MOV R5,#000H ; register voor maxwoorde teller om seconde te bekomen (=50)
MOV P0,#00000001B ;P0 op 1 zetten, Po wordt gebruikt voor het looplicht
MAIN: CALL KLOK
CALL seconde
CALL weergave
CALL looplicht
LJMP MAIN
KLOK: JNB TF0,klok ;als TF0=0, spring naar klok
CLR TF0
RET
LOOPLICHT: MOV A,R2
ANL A,#00000001B
JNZ ONEVEN ;bit 0=1; spring naar ONEVEN
EVEN: MOV A,P0
RL A
MOV P0,A
RET
ONEVEN: MOV A,P0
RR A
MOV P0,A
RET
SECONDE: INC R4
CJNE R4,#100d,seconde_ret
MOV R4,0
INC R5
CJNE R5,#50d,seconde_ret
MOV R5,0
MOV A,#0
MOV A,R4
ADD A,R5
JZ optellen
seconde_ret: RET
optellen:
INC R1
CJNE R1,#60d,optel_ret ;max.waarde = 59 seconden
MOV R1,#0
INC R2 ;verhogen van de minuten
CJNE R2,#60d,optel_ret ;max.waarde = 59 minuten
MOV R2,#0
INC R3 ;verhogen van de uren
CJNE R3,#24d,optel_ret ;maximumwaarde = 23 uren
MOV R3,#0
optel_ret: RET
weergave:
MOV P1,R1 ;seconden worden weergegeven op poort0
MOV P2,R2 ;minuten worden weergegeven op poort1
MOV P3,R3 ;uren worden weergegeven op poort2
RET
END