de 6800 (of later de hc11) vind ik ook heel prettig werken als risc cpu. Van de cisc cpu's vind ik de z80 heel fijn.
De architectuur van microchip vind ik ronduit vervelend.
Maar omdat in al die cpu's dezelde soort van commando's zitten die volgens de vanNeuman regels werken is het vrij makkelijk om de code van verschillende cpu's te lezen.
Volgens mij bestaan er n.l. ook totaal ander soort van cpu's. Hoe werken b.v transputers en neurale netwerken. Zat er geen neuraal netwerk in de kruisraket? En er hebben i.p.v binaire ook trinaire systemen bestaan. Maar die zijn geloof ik nooit verder dan het lab proto stadium gekomen. De analoge computers waren niet echt cpu's dacht ik
fred101
Golden Member
www.pa4tim.nl, www.schneiderelectronicsrepair.nl, Reparatie van meet- en calibratie apparatuur en maritieme en industriele PCBs
Een 1 bit computer, dat is gewoon een heel luxe transistor 
Ik vind het wel goed dat er aandacht aan assembler wordt besteed. Ik denk dat je veel beter begrijpt wat een processor doet als je weet hoe hij op het laagste nivo, bijna hardwarematig werkt.
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Veel beseffen inderdaad niet wat er voor (ogenschijnlijk) simpele functies allemaal 'onder de motorkap' moet gebeuren... 
Bijvoorbeeld een aanroep van een functie als sin() laat je code bij een eenvoudige 8 bitter al gauw 1500 bytes groeien...
Oke, Ik had vandaag een redelijke drukke dag met redelijk wat persoonlijke shit. IK heb mijn nieuwe macbook pas sinds een uur of 2 en heb pas net al mijn bestanden kunnen overzetten (dus ook mijn oefeningen van in het jaar. Ik heb geprobeerd de echte seconde te realiseren door middel van de registers, maar ik zie blijkbaar iets over het hoofd. Aangezien we morgen moeten indienen, zie ik even het bos door de bomen niet meer. Ik heb nu binnen een kwartier een belangrijke vergadering van de scouts. Daarna probeer ik verder, moest er iemand in de tussentijd mijn fouten kunnen aanwijzen, alvast bedankt.
Opmerkingen.
1) Ik heb die echte seconde proberen te realiseren op dezelfde manier als de telling voor de seconden,minuten, en uren. Aangezien er pas geteld mag worden nadat de ene seconde voorbij is
2) We hebben het dit jaar inderdaad over interrupts gehad. Als ik even deze taak vergelijk de oefeningen, merk k dat er heel wat ontbreekt, zoals push PSW, Push acc, Pop acc, Pop psw. ik ben ff helemaal de kluts kwijt...
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,#0FFh ;startwaarde voor 200µs( 65535 - 200 = 65335 = FF37) FF bij de hoogste waarde
MOV TL0,#37h ;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 optellen
CALL weergave
CALL looplicht
LJMP MAIN
KLOK:
JNB TF0,klok ;als TF0=0, spring naar klok
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 ; verhogen register waarde 50
CJNE R4,#100d,seconde_ret ; max waarde 99
MOV R4,0
INC R5; verhogen register waarde 50
CJNE R5,#50d,seconde_ret ; max waarde 49
MOV R5, #0
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
Roches
Domoticz en ESP8266, goede combo!!!
Thomas,
Goed bezig...
Na de CALL SECONDE in MAIN, moet je nog controleren of de seconde voorbij is voordat je OPTELLEN aanroept...
Dit kun je doen door een extra waarde te pakken en die te zetten als de seconde voorbij is en dan bij optellen controleren of de waarde geset is, zoniet return anders optellen en waarde resetten....
Ik denk dat jij het wel gaat halen!!! SUCCES!!!
[Edit]
Wat je ook kunt doen is in optellen controleren of R4 en R5 "0" zijn, dan is de seconde ook voorbij.
Ik heb hier extra geen code in gezet, want dan wordt het weer appeltje eitje, en gepikt, voor S-MAN...
[Bericht gewijzigd door Roches op (10%)]
Het programma oogt niet mooi, maar je counter van 5000 gaat wel werken. Toch goed van je vind ik ook.
Je hebt over interrupts geleerd, en deze opdracht verlangt dit eigenlijk... maar, zoals eerder gezegd kan het ook zonder interrupts werken op deze manier.
Aangezien je morgen al moet inleveren zou ik interrupts dus even vergeten, anders kom je niet tot de aansturing van de seriele poort.
Mijn bemerkingen:
CLR TF0 <-- waarom doe je deze lijn weg ?
Op 18 augustus 2016 23:50:18 schreef driessens_nl:
@Thomas993: ik heb nog mijn bedenkingen over de waardes van TH0 en TL0.
Zoals driessens al eerder suggereerde, klopt de waarde TH0 niet.
De timer gaat namelijk tellen met TL0. TL0 begint van 037H, loopt op tot 0FFH,geeft dan een overflow (via TF0) en dan wordt TL0 terug herladen met de waarde van TH0. Dus die moet ook 037H zijn.
Persoonlijk zou ik bij start ook R4 en R5 op de juiste waarde zetten. Ik geloof dat die bij reset zoiezo op 000H komen te staan, maar toch...
Wat de seriele poort betreft: doe jij eerst maar een poging en post ze hier. Geen bang hebben om eraan te beginnen en denk lijn per lijn. Maak eventueel een flowchart op papier van wat er moet gebeuren.
Als ik je een hint mag geven: kijk wat Ex-fietser hier zei
Op 18 augustus 2016 23:55:37 schreef Ex-fietser:
Ascii tabel is altijd hetzelfde. Maakt niet uit voor het type controler. Hoofdletter A begint gewoon op 65d of 41# en dan doortellen. Niks geen tabel nodig In je geheugen zet je gewoon ergens de gewenste text in de vorm van deze getallen. En die bitbang je gewoon naar buiten. Of je gebruikt de uart.De uart bespaart te veel werk(code) Je hoeft er alleen een byte in te gooien en de rest gaat vanzelf. Als de buffer leeg is gooi je er een nieuw byte in.
Hint: Hoe weet de cpu dat de buffer leeg is en wat moet er dan voor soort actie plaats gaan vinden?
En hier:
Op 19 augustus 2016 01:05:48 schreef Ex-fietser:
[...]Je reserveert ergens 8 bytes in het geheugen en daar plaats je de zoals arco voorsteld uitgerekende codes in.
Dus voor 22 uur 15 minuten en 12 seconden staat er dan op de 8 geheugenplaatsen:
32#,32#,3A#,31#,35#,3A#,31#,32#
Als het moment gekomen is om de tijd te verturen dump je deze getallen 1 voor 1 in de zendbuffer van de uart.
Je moet dan op een of andere manier weten dat de zendbuffer leeg is. Je moet bijhouden welk byte je overgestuurd hebt en wat het volgende byte is. Je moet detecteren wanneer alles verstuurd is en wanneer je opnieuw moet beginnen met het eerste byte. Tegelijkertijd moet je alle zes de lokaties bijhouden zodat daar altijd de juiste tijd in staat.
En misschien dat een ascii tabel wel kan helpen om bovenstaand te begrijpen... jij stuurt de hex code door en op het scherm komt dan 1 karakter bvb 03AH = :
Edit: een : moet 03AH zijn, ik was te snel sorry
Op 19 augustus 2016 21:16:47 schreef Roches:
Ik heb hier extra geen code in gezet, want dan wordt het weer appeltje eitje, en gepikt, voor 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
lol, ja dat komt na het begin van dit topic nog geloofwaardig over...
iedereen denkt hier hetzelfde, thomas doet al het werk, en jij lift mee
maarja, ergens vind ik het nog niet erg ook nog.
Thomas is over een paar jaar een gewaardeerd collega.
Terwijl jij elke paar jaar nieuw werk kunt gaan zoeken omdat je overal weggejaagd wordt omdat de mensen in het vak meteen zien dat je niks kunt
RAAF12
Golden Member
Das wel optimistisch, bij gebleken niet geschikt, binnen de proeftijd, tenzij ergens anders heel goed in en binnen het bedrijf bruikbaar.
Op 19 augustus 2016 21:49:44 schreef DK:
lol, ja dat komt na het begin van dit topic nog geloofwaardig over...
iedereen denkt hier hetzelfde, thomas doet al het werk, en jij lift meemaarja, ergens vind ik het nog niet erg ook nog.
Thomas is over een paar jaar een gewaardeerd collega.
Terwijl jij elke paar jaar nieuw werk kunt gaan zoeken omdat je overal weggejaagd wordt omdat de mensen in het vak meteen zien dat je niks kunt
Zo bedenk ik dat een oude schoolkameraad van me, de opleiding secundair electronica succesvol heeft beeindigd en nu beenhouwer (slager
)is.
En daarmee bedoel ik hier niets verkeerds mee...ook niks verkeerd met het vak beenhouwer hé !
En chapeau dat hij die andere stap heeft durven zetten in zijn leven. Misschien een tip voor 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
Kijk... Je collega is nu bij de scouts, los jij het nu ff op dan, zonder hulp van Thomas....
Misschien dat je dan nog geloofwaardig wordt, ik betwijfel het...
Volop bezig. Dus nog een extra register met de weergave van uren, minuten en seconden met behulp van die ascii code.
rob040
Golden Member
Wat ik niet begrijp is dat je een examenopdracht in alle rust met collega studenten en vooral veel hulp via een forum mag maken.
Of gaat de examinator straks even surfen op het web en komt dan bij dit draadje uit?
Roches
Domoticz en ESP8266, goede combo!!!
Heb je het probleem met de secondes al aangepakt dan.... De weergave is van later belang....
Zoja, post je code...
Ik ben al terug van de vergadering en heb het probleem opgelost met de secondeteller dmv na te gaan of of de waarde van de registers 0 waren alvorens optellen opgeroept wordt.
Ik heb het getest en ik kan mooi meetellen, dus ik denk dat het wel inorde is 
Nu begin ik aan het serieel sturen. De code post ik in het volgende bericht hopelijk 
@Rob, ik vraag niet om de oefening te maken. Ik vraag waar mijn fouten zitten en raad om de oefening in het geheel tot een goed einde te brengen.
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,#0FFh ;startwaarde voor 200µs( 65535 - 200 = 65335 = FF37) FF bij de hoogste waarde
MOV TL0,#37h ;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,#064H ; register voor maxwaarde teller om seconde te bekomen (=100)
MOV R5,#032H ; 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 A,R4
INC R5
CJNE R5,#50d,seconde_ret
ANL A,R5
JNZ seconde
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
rew
four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
Op 19 augustus 2016 22:26:21 schreef rob040:
Wat ik niet begrijp is dat je een examenopdracht in alle rust met collega studenten en vooral veel hulp via een forum mag maken.
Of gaat de examinator straks even surfen op het web en komt dan bij dit draadje uit?
Enerzijds, in een werkomgeving is het ook toegestaan om naar oplossingen te googlen. Of een forum voor je karretje te spannen. Dat een school zegt: Zo bereiden we je voor op de praktijk daar zit wat in.
Anderzijds, een school is er om bepaalde basisvaardigheden bij te brengen en te toetsen of dat gelukt is.
Roches
Domoticz en ESP8266, goede combo!!!
Dit gaat helemaal fout volgens mij....
Je springt bij JNZ naar seconde...
Ik weet ff niet wat de instructie ANL doet, maar je springt nergens naar optellen....
Terug naar de vorige code....
Vergeet dan niet die CLR TF0 weer op z'n plaats te zetten in KLOK
Dan, check in OPTELLEN of r4 en r5 "0" zijn... Dan mag je gaan optellen....
Daarna aan de weergave gaan werken...
[Bericht gewijzigd door Roches op (20%)]
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Roches
Domoticz en ESP8266, goede combo!!!
@rew en rob040,
De examinator zal vragen gaan stellen en dan valt er 1-tje door de mand.
Hulp vragen in een forum vindt ik helemaal niet verkeerd.
Maar dan moet wel blijken dat je er ook iets aan doet!!!
Bij de een is de school er in geslaagd om wat basisvaardigheden te voorzien, maar de ander heeft duidelijk geen interesse gehad in het vak en zat wat anders te doen.
Ik hoop alleen maar dat die examinator dit draadje allang gevonden heeft en van tevoren weet hoe de vork in de steel zit.
Ik heb op school nooit assembler of welke programmeertaal dan ook gehad, was het er in die tijd geweest had ik het waarschijnlijk gevolgd, alleen Pascal heb ik later via de LOI gevolgd. Daarvoor heb ik assembler zelf moeten leren en had met 17 jaar al een tekenprogramma in elkaar gezet voor een P2000,in basic was het eenvoudiger geweest maar langzamer en daarom heb ik het toen in assembler gedaan.
Het was verkrijgbaar via teletekstpagina's op een BBS. (Nostalgie)...
Dat ging toen nog met 1200/75 baud....
Dus deze jongens moeten het met de informatie die ze van school hebben, makkelijk in elkaar kunnen zetten.
Het is voor mij al 30 jaar geleden dat ik iets in assembler heb geprogrammeerd.
Roches
Domoticz en ESP8266, goede combo!!!
Op 19 augustus 2016 23:50:13 schreef Arco:
Wat zou die Seconde() functie moeten doen? Het is me niet duidelijk...
De interrupt komt iedere 200uS, dus de seconde-functie moet tot 5000 tellen om een seconde te overbruggen...
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Roches
Domoticz en ESP8266, goede combo!!!
Daarom zei ik ook dat ze terug moesten naar de vorige code... Die klopt op dat gebied wel....
Nu weet ik ook wat ANL betekend, bedankt arco, nog nooit gebruikt....
Volgens mij is ANL een opcode die niet in de Z80 zit want ik kende hem niet.
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Ander probleem is dat R4 en R5 na het bereiken van 100 resp. 50 nooit meer op nul gezet worden en vrolijk verder tellen...
Bij initialisatie R4 en 5 op 0 zetten. De 'd' suffix voor decimale getallen slikken de meeste assemblers niet; gewoon weglaten.
TH0 en TL0 moeten wel beide op 0x37, anders klopt de timer niet. Kleine aanzet die wel werkt (anders wordt 't een topic in meerdere delen...
:
optellen: INC R4
CJNE R4,#100,optel_ret
MOV R4, #0
INC R5
CJNE R5,#50,optel_ret
MOV R5, #0
INC R1
CJNE R1,#60,optel_ret ;max.waarde = 59 seconden
MOV R1,#0
INC R2 ;verhogen van de minuten
CJNE R2,#60,optel_ret ;max.waarde = 59 minuten
MOV R2,#0
INC R3 ;verhogen van de uren
CJNE R3,#24,optel_ret ;maximumwaarde = 23 uren
MOV R3,#0
optel_ret: RET
Roches
Domoticz en ESP8266, goede combo!!!