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
pic asm code:
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