AT89C2051 bevat... de .asm source!

Ik ben geen expert, maar dit is vreemd. Een heel simpel klokbouwpakketje in China gekocht, omdat ik zelf niet voor dat geld iets zou kunnen maken, om mijn multi-plexed sprekende klokprint aan te kunnen spreken.

Simpel kitje. In elkaar gesoldeerd. Werkt niet. Eigenlijk alleen de controller kan het euvel zijn, dus contact gezocht met de verkoper en gevraagd de .hex te sturen. Ik ontving een, volgens mij alleen v.w.b. het commentaar, onleesbare .asm (het uitpakken van de zip-file was al een uitdaging t.g.v. de Chinese karakters), dus ik geef aan dat ik een hex-file moet hebben. Mijn kennis is beperkt, maar ik weet niet beter dan dat ik dat nodig heb, de .asm moet gecompileerd tot een .hex en die moet geprogrammeerd worden in de controller.

Kijk ik net met mijn MiniProg eens naar de inhoud van die AT89C2051, en wat zie ik in de ASCII-gibberish... de .asm code! Dat kan toch nooit kloppen? Dat is volgens mij de reden dat het niet werkt, maar hoe compileer ik bijgaande .asm naar de .hex voor deze controller (geen idee van instellingen voor fuse bits e.d., ik weet niets van Atmel controllers)? Of heeft iemand een compiler en kan voor mij de .asm compileren?

bprosman

Golden Member

Als je de processor uit kunt lezen betekend dat gewoon dat ze de "security fuses" niet gezet hebben. Niet zo vreemd gebeurt wel vaker.
Kun je de processor eens uitlezen en dat hier plaatsen ?

De Keil assembler, (deze source code assembleer je , niet compileren maar whats in a name) slikt m meteen.

2051 Clock.zip

[Bericht gewijzigd door bprosman op zaterdag 26 januari 2019 09:46:06 (26%)

De jongere generatie loopt veel te vaak zijn PIC achterna.

Hi Bram,

Ik begrijp je vraag niet helemaal... I.p.v. .hex, hebben ze de bijgaande .asm (of dat deel wat paste) in de controller geprogrammeerd. Wat ik met mijn programmer kan zien als inhoud van de controller, is dus (het eerste deel van) de .asm file. Dat kan toch nooit kloppen?!

Ik moet de gecompileerde .asm (de.hex dus) programmeren en denk dan dat het werkt. Hopelijk geen last van de Chinese karakters, hopelijk is dat allemaal commentaar. Ik heb alleen helemaal geen Atmel compiler, ik kan wel de .hex programmeren.

Ha, ha, ik zie dat je later nog iets aan je bericht hebt toegevoegd ;-) Bedankt, zal even kijken of ik het kan branden...

bprosman

Golden Member

Die Chinese karakters is commentaar en word niet mee geassembleerd.

Wat ik met mijn programmer kan zien als inhoud van de controller, is dus (het eerste deel van) de .asm file. Dat kan toch nooit kloppen?!

Als dat echt zo is zou het niet kloppen, maar ben toch nieuwschierig, kun je de inhoud van de processor eens plaatsen hier ?
De 2051 heeft overigens geen fuses (als een AVR), alleen lock bits.

[Bericht gewijzigd door bprosman op zaterdag 26 januari 2019 09:57:44 (11%)

De jongere generatie loopt veel te vaak zijn PIC achterna.

Nou, de door jou gecomileerde .asm heb ik net geprogrammeerd... en de klok werkt als een zonnetje!

Ik heb de inhoud nu overschreven, maar de Chinese meneer heeft onomstotelijk de .asm in de controller geprogrammeerd, zoiets zei hij ook al, toen zei ik al dat dat nooit kon kloppen en hem vroeg naar een .hex file i.p.v. een .asm. Wie weet hoeveel van die kitjes hij heeft verkocht (voor nog geen EUR 2,=, incl. printje)?!

De kit week al een klein beetje af van het geen beschreven, dus nu nog uitvissen hoe het werkt, want de handleiding die ik had is voor een andere versie (en werkt niet)...

Maar, ik heb een duidelijk display met tijd-gegevens en werkende knoppen (al heb ik nu "72:07" in het dsplay staan (die "07" zie je ook iedere minuut met 1 toenemen, dus het "klokt" wel), niet echt een beeld wat je bij een klok verwacht).

Ik ga verder klooien, bedankt voor het compileren, gelukkig dat de Chinese karakters alleen het commentaar waren...

Op 26 januari 2019 09:55:06 schreef bprosman:
Die Chinese karakters is commentaar en word niet mee geassembleerd.
[...]
Als dat echt zo is zou het niet kloppen, maar ben toch nieuwschierig, kun je de inhoud van de processor eens plaatsen hier ?
De 2051 heeft overigens geen fuses (als een AVR), alleen lock bits.
[bijlage]

Zo te zien heb je ook een TL888A (of een met de MiniPro compatible programmer)? Ik zie dat je op v6.71 zit, ik zit nog op v6.60, zal eens kijken of ik een nieuwere versie kan vinden.

Ik kan de oorspronkelijke inhoud niet meer plaatsen, die heb ik met jouw .hex net overschreven, maar het was 100% zeker de .asm die in de controller was geprogrammeerd.

Met programmeren heb ik niets aan de lock-bit ingesteld, en de default van de programmer laten staan.

bprosman

Golden Member

maar het was 100% zeker de .asm die in de controller was geprogrammeerd

Word ook tijd dat die processor fabrikanten dat achterhaalde concept van assembleren / compileren eens loslaten, hup gewoon de source er in blazen :+
Blij te horen dat het werkt !!.

De jongere generatie loopt veel te vaak zijn PIC achterna.
bprosman

Golden Member

Maar, ik heb een duidelijk display met tijd-gegevens en werkende knoppen (al heb ik nu "72:07" in het dsplay staan (die "07" zie je ook iedere minuut met 1 toenemen, dus het "klokt" wel), niet echt een beeld wat je bij een klok verwacht).

Waarschijnlijk klopt de source niet met de hardware dan en zitten er wat digits omgedraaid. Heb je het schema toevallig ?

Zal eens kijken of ik die source kan aanpassen zodat hij met TASM (een freeware assembler) werkt.

Dit schema had ik destijds maar weet ook niet of deze source daar zo op past :

clockmanual.pdf

De jongere generatie loopt veel te vaak zijn PIC achterna.

Het is echt een klok, maar ik ben benieuwd wat er gebeurt na 23:59, omdat je 'm nu ook in kan stellen op 99:23. Je kan ook een alarm zetten, maar dat kreeg ik vervolgens niet uit. Kan goed dat de .asm code voor de andere klok is die hier min of meer werkt (de klokken lijken op elkaar). Die andere klok moet altijd met 12:59 starten en heeft een aantal basis functionaliteiten, deze start op 12:00. Allemaal niet heel schokkend, maar het is een andere klok.

Schema: dat is het schema dat bij *mijn* klok hoort.
Instructies: deze horen bij de, veel vaker verkochte, andere klok, ook het schema is net anders.

Grappig dat dit het issue was (.asm i.p.v. .hex geprogrammeerd), hij doet het, het is niet helemaal wat ik had gekocht, maar het kan dienen voor het doel. En hij loopt prima, het is nu keurig netjes 12:07 ;-)

Bijgaande heb ik zelf aan elkaar geknoopt o.b.v. de info die ik her en der heb gevonden. Een handleiding voor mijn klok heb ik niet, gezien de plaatjes bij de advertentie had ik de klok die hoort bij "DigitaleKlok4digitsHandleiding.pdf" moeten ontvangen..., maar het is dus "DigitaleKlok4digitsHandleiding_versie met backup batterij.pdf" (maar daar heb ik dus geen handleiding van gevonden, maar ik was al blij dat ik nu het bij mijn klok passende schema nu had).

Op 26 januari 2019 11:50:33 schreef bprosman:
hup gewoon de source er in blazen :+ Blij te horen dat het werkt !!.

Briljante stelling! :-)

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
bprosman

Golden Member

Nu ben ik even "lost" welk schema bij jouw klok hoort :-). Handleiding is niet zo spannend, dat is wel uit de source te pulken.

De jongere generatie loopt veel te vaak zijn PIC achterna.

Er was ooit een 8052 versie waar dat bij kon, source programmerern. Het interpreteren deed ie zelf. De -AH-BASIC versie was dat.

"We cannot solve our problems with the same thinking we used when we created them" - Albert Einstein

Op 26 januari 2019 14:02:06 schreef bprosman:
Nu ben ik even "lost" welk schema bij jouw klok hoort :-). Handleiding is niet zo spannend, dat is wel uit de source te pulken.

Sorry, dat was niet duidelijk van me. Die met "_versie met backup batterij" is die ik heb ontvangen (dat schema wat ik ergens gevonden heb, is dus wat ik heb), het had die andere moeten zijn. Klok loopt nog altijd prima, maar heeft niet de geadverteerde functionaliteiten. De code die nu in de 2051 zit hoort misschien gewoon hierbij...

Op 26 januari 2019 14:02:28 schreef flipflop:
Er was ooit een 8052 versie waar dat bij kon, source programmerern. Het interpreteren deed ie zelf. De -AH-BASIC versie was dat.

Geinig, waarom ook niet eigenlijk...

Omdat het veeeel langzamer is. En nergens voor nodig :-)

"We cannot solve our problems with the same thinking we used when we created them" - Albert Einstein
Arco

Special Member

Dat was een basic interpreter...
Een compiler compileert (eenmalig) de source naar uitvoerbare code.
Een interpreter zet realtime iedere sourceregel om in uitvoerbare code, wat natuurlijk heel veel tijd kost...

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

Het is op zijn minst bijzondere software die nu geprogrammeerd is. Het levert een werkende klok op, al heb ik het alarm niet uit kunnen zetten. Maar wel een klok die je na 23:59 op iedere tijd tot 99:69 kan instellen en die als je 'm bijv. op 26:59 instelt, een minuut later 27:00 aangeeft. Stel je 'm netjes op < 24:00 in, dan springt ie na 23:59 netjes naar 00:00. En op XX:59 springt ie ook niet naar XX:60, maar "netjes" naar XX+1:00.

De klok "snapt" dus klok-regels als:
"na :59 komt :00"
"na 23:XX, komt 00:XX"
als ie gewoon "doortikt"...

Ach, als je het maar weet ;-)

mel

Golden Member

Die klok is om de dag te verlengen...als je 99 minuten in een uur hebt, heb je toch meer tijd om te prutsen? :P

u=ir betekent niet :U bent ingenieur..

Op 27 januari 2019 09:19:51 schreef mel:
Die klok is om de dag te verlengen...als je 99 minuten in een uur hebt, heb je toch meer tijd om te prutsen? :P

Als dat toch mogelijk was... ;-) Doe dan maar meteen die 99:69 in een dag overigens... Ik denk dat een stagiair de code heeft geschreven.

EricP

mét CE

Een beetje fatsoenlijk programmeren is niet iedereen gegeven...

Dat ziet er voor mij gewoon uit als een programmeerfout. Geen incompatibiliteit tussen de hardware en de software of op een andere manier een verkeerde software.

Ik kan me best voorstellen dat zoiets er niet uitgehaald is bij het programmeren.

De code doet dus iets van:

code:


   // hier moeten de minuten opgehoogd worden. 
   min++;
   if (min == 60) {
      min = 0;
      hour++;
      if (hour == 24) 
         hour = 0;
   }

Beide "==" kan je defensief in >= veranderen om het gedrag wat je nu hebt te voorkomen.

Kennelijk is het in ASM geprogrammeerd. Dat is zodanig ingewikkeld dat je al snel het overzicht verliest. En veranderingen zijn lastig met als gevolg dat dit soort: "heb je in de praktijk weinig last van" bugs gewoon blijven zitten. Tenzij het echt nodig is: gewoon niet meer doen (assembly programmeren).

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
bprosman

Golden Member

Heb zo een kitje besteld, zal tzt eens naar die software kijken. Of m omschrijven in Keil "C".

De jongere generatie loopt veel te vaak zijn PIC achterna.

Op 27 januari 2019 09:44:12 schreef rew:
Dat ziet er voor mij gewoon uit als een programmeerfout. Geen incompatibiliteit tussen de hardware en de software of op een andere manier een verkeerde software.

Ik kan me best voorstellen dat zoiets er niet uitgehaald is bij het programmeren.

De code doet dus iets van:

code:


   // hier moeten de minuten opgehoogd worden. 
   min++;
   if (min == 60) {
      min = 0;
      hour++;
      if (hour == 24) 
         hour = 0;
   }

Beide "==" kan je defensief in >= veranderen om het gedrag wat je nu hebt te voorkomen.

Kennelijk is het in ASM geprogrammeerd. Dat is zodanig ingewikkeld dat je al snel het overzicht verliest. En veranderingen zijn lastig met als gevolg dat dit soort: "heb je in de praktijk weinig last van" bugs gewoon blijven zitten. Tenzij het echt nodig is: gewoon niet meer doen (assembly programmeren).

Veilige code zal inderdaad geen == hebben maar een >=. Dan werkt het ook als de zaak een keer gecrashed heeft en er rommel in het geheugen staat. Dat kan bijvoorbeeld na een storing door blikseminslag.

Anders moet hij het gehele byte of word ophogen totdat hij weer binnen het 0..60 en 0..24 bereik komt. En dat kan heel erg lang duren!

Arco

Special Member

Rekenen met tijden is niet de sterkste kant van de Chinezen... ;)
Bij de TC420 led controller bijvoorbeeld begrijpen ze niet dat er na 23:59 een nieuwe dag begint...

Als je de leds aan doet om 23:00, en uit om 01:00 (dagprogramma), dan gaat het licht uit als de klok van 23:59 naar 00:00 verspringt...
(je moet dan ingeven: 23:00=aan, 00:00=aan, 01:00=uit om te voorkomen dat de boel uit gaat bij een dagovergang...)

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com