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
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
In je laatste code staan wat rare dingen in je seconde() functie, die per toeval (meer geluk als wijsheid...
) wel werken.
Beter mijn voorbeeld nemen, da's ook nog uit te leggen hoe het werkt...
Ik deed het op die manier omdat me aangeraden werd op de registers op te tellen en dan te kijken of deze 0 waren. Maar is goed, wou gewoon zelf ook met iets uit de bus komen 
Roches
Domoticz en ESP8266, goede combo!!!
Je "collega" gaf aan te werken aan de weergave met behulp van de ASCII-tabel, maar had nog niet gepost hoe het probleem met de secondes op te hebben gelost.
Gebruik de code van Arco en laat seconde helemaal weg, elegant genoeg omdat je dus optellen en seconde gecombineerd hebt en dat de code pas gaat optellen als de seconde voorbij is....
Ik was spuit11, wat Arco zegt, plus dat het ook sneller is...
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Op die plaats in je seconde routine zijn R4 en R5 altijd nul. Het is dus wat zinloos om 0 + 0 op te tellen en te testen of dat 0 is...
Roches
Domoticz en ESP8266, goede combo!!!
Thomas, maak in je profiel ff je email zichtbaar, ik wil je ergens voor waarschuwen wat nu niet in dit topic thuis hoort...
Op 20 augustus 2016 01:04:04 schreef Roches:
Thomas, maak in je profiel ff je email zichtbaar, ik wil je ergens voor waarschuwen wat nu niet in dit topic thuis hoort...
Heb het even onzichtbaar gezet, is niet mijn gewoonte dus laat me weten als je mail hebt gestuurd dan zet ik 'm terug onzichtbaar.
In verband met de tabel voor de ASCII, voor elke seconde dus een aparte code?
Oh, dat gaat nog even duren.
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Oke heb hem ontvangen Roches 
Arco, in de opgave wordt er niets gezegd over de outputs van P1,P2,P3 dus ik denk dat BCD in principe geen probleem moet zijn.
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Kleine wijziging in optellen():
optellen: INC R1
MOV A, R1
DA A ;Decimal adjust
MOV R1, A
CJNE R1,#60h,optel_ret ;max.waarde = 59 seconden
MOV R1,#0
INC R2 ;verhogen van de minuten
MOV A, R2
DA A ;Decimal adjust
MOV R2, A
CJNE R2,#60h,optel_ret ;max.waarde = 59 minuten
MOV R2,#0
INC R3 ;verhogen van de uren
MOV A, R3
DA A ;Decimal adjust
MOV R3, A
CJNE R3,#24h,optel_ret ;maximumwaarde = 23 uren
MOV R3,#0
optel_ret: RET
In R1,2,3 staan nu al de 'hapklare' waardes voor serieel versturen... 
Serieel versturen:
MOV A, R1 ;seconden laden
SWAP A ;nibbles omruilen
ANL A, #0Fh ;msn eraf
ADD A, #30h ;30 hex optellen voor ascii
MOV SBUF, A ;versturen (tientallen)
txwait: JNB TI, txwait ;wachten tot versturen klaar is
CLR TI ;flag clearen
MOV A, R1 ;seconden laden
ANL A, #0Fh ;msn eraf
ADD A, #30h ;30 hex optellen voor ascii
MOV SBUF, A ;versturen (eenheden)
txwait2: JNB TI, txwait2 ;wachten tot versturen klaar is
CLR TI ;flag clearen
Dit herhalen voor minuten en uren...
1)Top! 
2) in principe zou het serieel versturen zo als onderstaande code moeten lukken in formaat 'uu:mm:ss'?
( ;- - - - - - uren/minuten/seconden/dubbelpunt staat er gewoon om het overzichtelijk te houden)
3) Hoe kan ik testen of hij het juiste in formaat 'uu:mm:ss' stuur?
4) Het wordt al laat, bedankt voor de nachtelijke hulp, Ik kruip mijn bed. Morgen het eerste wat ik doe is de code uitproberen 
;- - - - - - uren
MOV A, R3 ;uren laden
SWAP A ;nibbles omruilen
ANL A, #0Fh ;msn eraf
ADD A, #30h ;30 hex optellen voor ascii
MOV SBUF, A ;versturen (tientallen)
txwait: JNB TI, txwait ;wachten tot versturen klaar is
CLR TI ;flag clearen
MOV A, R3 ;uren laden
ANL A, #0Fh ;msn eraf
ADD A, #30h ;30 hex optellen voor ascii
MOV SBUF, A ;versturen (eenheden)
txwait2: JNB TI, txwait2 ;wachten tot versturen klaar is
CLR TI ;flag clearen
;- - - - - - dubbelpunt
MOV A, #03Ah ;dubbelpunt laden
MOV SBUF, A ;versturen (tientallen)
txwait3: JNB TI, txwait3 ;wachten tot versturen klaar is
CLR TI ;flag clearen
;- - - - - - minuten
MOV A, R2 ;minuten laden
SWAP A ;nibbles omruilen
ANL A, #0Fh ;msn eraf
ADD A, #30h ;30 hex optellen voor ascii
MOV SBUF, A ;versturen (tientallen)
txwait4: JNB TI, txwait4 ;wachten tot versturen klaar is
CLR TI ;flag clearen
MOV A, R2 ;minuten laden
ANL A, #0Fh ;msn eraf
ADD A, #30h ;30 hex optellen voor ascii
MOV SBUF, A ;versturen (eenheden)
txwait5: JNB TI, txwait5 ;wachten tot versturen klaar is
CLR TI ;flag clearen
;- - - - - - dubbelpunt
MOV A, #03Ah ;dubbelpunt laden
MOV SBUF, A ;versturen (tientallen)
txwait6: JNB TI, txwait6 ;wachten tot versturen klaar is
CLR TI ;flag clearen
;- - - - - - seconden
MOV A, R1 ;seconden laden
SWAP A ;nibbles omruilen
ANL A, #0Fh ;msn eraf
ADD A, #30h ;30 hex optellen voor ascii
MOV SBUF, A ;versturen (tientallen)
txwait7: JNB TI, txwait7 ;wachten tot versturen klaar is
CLR TI ;flag clearen
MOV A, R1 ;seconden laden
ANL A, #0Fh ;msn eraf
ADD A, #30h ;30 hex optellen voor ascii
MOV SBUF, A ;versturen (eenheden)
txwait8: JNB TI, txwait8 ;wachten tot versturen klaar is
CLR TI ;flag clearenArco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Klopt zo te zien wel. De serieele waarde kun je controleren door het SBUF register te bekijken in de simulatie...
Erg nauwkeurig wordt de klok zo nooit (zonder interrupts), maar het gaat tenslotte om het principe, niet?
Iedere complete serieele tijd-transmit kost bijna 17mS, die komen er dus extra bij steeds.
Je kunt de boel wel wat tweaken door timer 0 met een wat kleinere waarde (dus hoger) te laden, bijv. #39h of #3Ah i.p.v. #37h...
Ik heb het eens uitgeprobeerd met onderstaande code.
bemerkingen:
1) geeft die decimal adjust geen probleem voor mijn looplicht?
2) Die sbuf register verandert na 1 seconde niet van waarde.
3) Denk je dat het op een half dagje nog mogelijk is om het met interrupts te doen?
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,#243 ;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
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 optellen
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
optellen: INC R1
MOV A, R1
DA A ;Decimal adjust
MOV R1, A
CJNE R1,#60h,optel_ret ;max.waarde = 59 seconden
MOV R1,#0
INC R2 ;verhogen van de minuten
MOV A, R2
DA A ;Decimal adjust
MOV R2, A
CJNE R2,#60h,optel_ret ;max.waarde = 59 minuten
MOV R2,#0
INC R3 ;verhogen van de uren
MOV A, R3
DA A ;Decimal adjust
MOV R3, A
CJNE R3,#24h,optel_ret ;maximumwaarde = 23 uren
MOV R3,#0
optel_ret: RET
weergave:;- - - - - - uren
MOV A, R3 ;uren laden
SWAP A ;nibbles omruilen
ANL A, #0Fh ;msn eraf
ADD A, #30h ;30 hex optellen voor ascii
MOV SBUF, A ;versturen (tientallen)
txwait: JNB TI, txwait ;wachten tot versturen klaar is
CLR TI ;flag clearen
MOV A, R3 ;uren laden
ANL A, #0Fh ;msn eraf
ADD A, #30h ;30 hex optellen voor ascii
MOV SBUF, A ;versturen (eenheden)
txwait2: JNB TI, txwait2 ;wachten tot versturen klaar is
CLR TI ;flag clearen
;- - - - - - dubbelpunt
MOV A, #03Ah ;dubbelpunt laden
MOV SBUF, A ;versturen (tientallen)
txwait3: JNB TI, txwait3 ;wachten tot versturen klaar is
CLR TI ;flag clearen
;- - - - - - minuten
MOV A, R2 ;minuten laden
SWAP A ;nibbles omruilen
ANL A, #0Fh ;msn eraf
ADD A, #30h ;30 hex optellen voor ascii
MOV SBUF, A ;versturen (tientallen)
txwait4: JNB TI, txwait4 ;wachten tot versturen klaar is
CLR TI ;flag clearen
MOV A, R2 ;minuten laden
ANL A, #0Fh ;msn eraf
ADD A, #30h ;30 hex optellen voor ascii
MOV SBUF, A ;versturen (eenheden)
txwait5: JNB TI, txwait5 ;wachten tot versturen klaar is
CLR TI ;flag clearen
;- - - - - - dubbelpunt
MOV A, #03Ah ;dubbelpunt laden
MOV SBUF, A ;versturen (tientallen)
txwait6: JNB TI, txwait6 ;wachten tot versturen klaar is
CLR TI ;flag clearen
;- - - - - - seconden
MOV A, R1 ;seconden laden
SWAP A ;nibbles omruilen
ANL A, #0Fh ;msn eraf
ADD A, #30h ;30 hex optellen voor ascii
MOV SBUF, A ;versturen (tientallen)
txwait7: JNB TI, txwait7 ;wachten tot versturen klaar is
CLR TI ;flag clearen
MOV A, R1 ;seconden laden
ANL A, #0Fh ;msn eraf
ADD A, #30h ;30 hex optellen voor ascii
MOV SBUF, A ;versturen (eenheden)
txwait8: JNB TI, txwait8 ;wachten tot versturen klaar is
CLR TI ;flag clearen
RETArco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Het deel met R4/5 was weggevallen, daardoor liep de boel veel te snel... 
Met interrupts lijkt me wel wat kort dag. Ik neem aan dat je ook nog uit moet kunnen leggen hoe de boel werkt?... Zo werkt het in ieder geval:
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,#243 ;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
MOV P1,#0
MOV R2,#000H ;minuten op 0
MOV P2,#0
MOV R3,#000H ;uren op 0
MOV P3,#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 optellen
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
optellen: INC R4
CJNE R4,#100,optel_ret
MOV R4, #0
INC R5
CJNE R5,#50,optel_ret
MOV R5, #0
inc R1
MOV A, R1
DA A ;Decimal adjust
MOV R1, A
CJNE R1,#60h,weergave ;max.waarde = 59 seconden
MOV R1,#0
INC R2 ;verhogen van de minuten
MOV A, R2
DA A ;Decimal adjust
MOV R2, A
CJNE R2,#60h,weergave ;max.waarde = 59 minuten
MOV R2,#0
INC R3 ;verhogen van de uren
MOV A, R3
DA A ;Decimal adjust
MOV R3, A
CJNE R3,#24h,weergave ;maximumwaarde = 23 uren
MOV R3,#0
optel_ret: RET
weergave:;- - - - - - uren
MOV A, R3 ;uren laden
SWAP A ;nibbles omruilen
ANL A, #0Fh ;msn eraf
ADD A, #30h ;30 hex optellen voor ascii
MOV SBUF, A ;versturen (tientallen)
txwait: JNB TI, txwait ;wachten tot versturen klaar is
CLR TI ;flag clearen
MOV A, R3 ;uren laden
ANL A, #0Fh ;msn eraf
ADD A, #30h ;30 hex optellen voor ascii
MOV SBUF, A ;versturen (eenheden)
txwait2: JNB TI, txwait2 ;wachten tot versturen klaar is
CLR TI ;flag clearen
;- - - - - - dubbelpunt
MOV A, #03Ah ;dubbelpunt laden
MOV SBUF, A ;versturen (tientallen)
txwait3: JNB TI, txwait3 ;wachten tot versturen klaar is
CLR TI ;flag clearen
;- - - - - - minuten
MOV A, R2 ;minuten laden
SWAP A ;nibbles omruilen
ANL A, #0Fh ;msn eraf
ADD A, #30h ;30 hex optellen voor ascii
MOV SBUF, A ;versturen (tientallen)
txwait4: JNB TI, txwait4 ;wachten tot versturen klaar is
CLR TI ;flag clearen
MOV A, R2 ;minuten laden
ANL A, #0Fh ;msn eraf
ADD A, #30h ;30 hex optellen voor ascii
MOV SBUF, A ;versturen (eenheden)
txwait5: JNB TI, txwait5 ;wachten tot versturen klaar is
CLR TI ;flag clearen
;- - - - - - dubbelpunt
MOV A, #03Ah ;dubbelpunt laden
MOV SBUF, A ;versturen (tientallen)
txwait6: JNB TI, txwait6 ;wachten tot versturen klaar is
CLR TI ;flag clearen
;- - - - - - seconden
MOV A, R1 ;seconden laden
SWAP A ;nibbles omruilen
ANL A, #0Fh ;msn eraf
ADD A, #30h ;30 hex optellen voor ascii
MOV SBUF, A ;versturen (tientallen)
txwait7: JNB TI, txwait7 ;wachten tot versturen klaar is
CLR TI ;flag clearen
MOV A, R1 ;seconden laden
ANL A, #0Fh ;msn eraf
ADD A, #30h ;30 hex optellen voor ascii
MOV SBUF, A ;versturen (eenheden)
txwait8: JNB TI, txwait8 ;wachten tot versturen klaar is
CLR TI ;flag clearen
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
Oke, het looplicht werkt terug.
Maar even om te controleren, of de serïele sturing werkt.
Bij 3s, 160ms staat mijn SBUF register op op CA, SBUF T op 01, maar bij het paseren van de seconde zie ik niet direct iets veranderen.
Thomas, ondanks dat je motivatie beter lijkt dan die van TS is en blijft het zijn topic, en dat ben je nu aan het kapen. En dat is dus echt niet de bedoeling.
We gaan verder met de problemen van S-man.
Roches
Domoticz en ESP8266, goede combo!!!
Op 19 augustus 2016 21:43:10 schreef S-man:
[...]Hé kameraad,ik en Thomas zitten wel samen te werken voor die opdracht. We vergelijken wel samen en geven elkaar wat informatie en bedenkingen voor die klok
Lijkt me geoorloofd daar S-man dit zelf aangeeft.
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Lijkt mij ook, temeer daar S-man ook al een tijdje onzichtbaar is.
(ik denk trouwens dat we dan ook nog niet veel verder als de startpost waren gekomen qua inhoud...
)
In de Edsim51 simulator zie ik toch netjes 0x30,0x30,0x3A,0x30,0x30,0x3A,0x30,0x31 verschijnen in SBUF na een seconde. (SBUF tx register, er is ook een SBUF voor rx)
@ Arco, na een seconde krijg ik die waarde ook, maar na de 2 de seconde blijft die waarde van de 1ste seconde onveranderd in SBUF Tx
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Bij mij krijg ik netjes 0x32 als laatst verstuurde byte na de 2e seconde. (en na 3 seconden 0x33, enz...)
Ehh, het was geen vraag.
s-man is verdwenen van dit schoolvragen topic, een collega is in zijn plaats gekomen en s-man hoeft nu alleen nog maar het resultaat over te nemen.