www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

Težave začetnika z uVision 8051
Pojdi na stran 1, 2  Naslednja
 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> AVR, LPC900, x51
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
vilko
Član
Član



Pridružen-a: Pet 13 Feb 2004 10:26
Prispevkov: 3358
Aktiv.: 14.18
Kraj: Dragomer

PrispevekObjavljeno: Pon Apr 10, 2006 9:20 am    Naslov sporočila:  Težave začetnika z uVision 8051 Odgovori s citatom

Instaliral sem si Demo verzijo uVision 8051 in poizkušam ga razumeti. Pri tem naletim na začetniške težave in prosim za pomoč.

Cilj je program Hello.c, ki je kot vzorec priložen paketu in ki brez komentarjev izgleda tako

Koda:
/*------------------------------------------------------------------------------
HELLO.C
------------------------------------------------------------------------------*/

#include <REG52.H>                /* special function register declarations   */
                                      /* for the intended 8051 derivative         */

#include <stdio.h>                /* prototype declarations for I/O functions */


#ifdef MONITOR51                         /* Debugging with Monitor-51 needs   */
char code reserve [3] _at_ 0x23;         /* space for serial interrupt if     */
#endif                                   /* Stop Exection with Serial Intr.   */
                                         /* is enabled                        */


void main (void) {

#ifndef MONITOR51
    SCON  = 0x50;              /* SCON: mode 1, 8-bit UART, enable rcvr      */
    TMOD |= 0x20;               /* TMOD: timer 1, mode 2, 8-bit reload        */
    TH1   = 221;                /* TH1:  reload value for 1200 baud @ 16MHz   */
    TR1   = 1;                  /* TR1:  timer 1 run                          */
    TI    = 1;                  /* TI:   set TI to send first char of UART    */
#endif

  while (1) {
    P1 ^= 0x01;               /* Toggle P1.0 each time we print */
    printf ("Hello World\n");   /* Print "Hello World" */
  }
}

in ki bi v bascomu izgledal tako:

Koda:
$regfile = "89c2051.dat"
$baud = 1200
$crystal = 12000000
do
  p1.0 = not p1.0
  print "Hello World"
loop


uspešno prevesti in pognati na AT89C2051
Zadevo skušam narediti v novi mapi 'vaja3', da ne bi kaj zapacal na originalnih vzorčnih mapah:

Koraki:
Project -> New project -> Create new folder (vaja3) -> file (vaja3) -> shraniOdpre se okno Select device - izberem Atmel -> 89c2051 -> v redu
na vprašanje Copy standard Code and add file to project - odgovorim Da
File -> New - odpre se edit okno, v katerega prekopiram vzorčni program
za identifikacijo dodam komentar vaja3

Help mi pravi, da potrebujem v folderju startup.a51 datoteko, preverim, res je datoteka v folderju.

File -> save as -> vaja3.c - spravim izvirni program na disk

Berem dalje help: Project workspace files list all files of your project, toda v oknu je le Target1 (folder) - SourceGroup1 (folder) - Startup.a51 file

Mojega vaja3.c programa noter ni, saj je v moji mapi vaja3 nekje drugje na disku.

Berem dalje help: You may need to configure the startup.a51 file. Odprem ga, berem, a nimam pojma, kaj naj popravim, pustim tako kot je. vidim pa, da je v njem vrstica
NAME ?C_STARTUP

Grem naprej po Helpu: Set tool options for target
Project -> options -> Options fot target (target1) -> Target -> definiram 12 Mhz in small, small , izberem še zavihek output in dam kljukico pri hex file.
Po Helpu je sledeči korak Build target,
dobim:

Citiram:
Build target 'Target 1'
assembling STARTUP.A51...
linking...
*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL
SYMBOL: ?C_START
MODULE: STARTUP.obj (?C_STARTUP)
*** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL
SYMBOL: ?C_START
MODULE: STARTUP.obj (?C_STARTUP)
ADDRESS: 080AH
Program Size: data=9.0 xdata=0 code=15
creating hex file from "vaja3"...
"vaja3" - 0 Error(s), 2 Warning(s).

V mapi se pojavi datoteka vaja3.c toda ko jo pogledam z editorjem, v njej ni teksta "Hello World" in je tudi sumljivo majhna

Nekje sem zašel iz prave poti. Mi lahko kdo pove kje?
Pozdrav

_________________
Nihče ni za vojno in vsi so za mir,
vsi so za bratstvo, nihče za prepir.
Od same ljubezni vsak čas na granatah
bo vtisnjeno geslo: "Darilo za brata"
Janez Menart
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Sokrat
Član
Član



Pridružen-a: Čet 25 Avg 2005 11:00
Prispevkov: 5584
Aktiv.: 23.57

PrispevekObjavljeno: Pon Apr 10, 2006 9:35 am    Naslov sporočila:   Odgovori s citatom

Ena tezava: program iz demo verzije ne bo deloval na AT89C2051 (bi pa deloval na AT89C4051). To je sicer omenjeno na Keilovi strani, a si najbrz spregledal, ker je precej zakopano. Omejitev na 2 KB kode velja, ob njej pa je omejitev se ena (ne vem ali se drzi ali ne) - koda se postavi na naslov 0x800 (2 KB). V MCUju s samo 2 KB flasha je to seveda nemogoce. Upam, da te ne bo to razocaralo toliko, da bi obupal nad C-jem (se vedno obstaja zastonj alternativa v obliki SDCC za 8051 brez tovrstnih omejitev, s tem da program lahko se vedno razvijes in preizkusis na uVisionovem simulatorju).

Da bi videl, kje je tezava pri tebi, sem prevedel hello.c in ga preizkusil v simulatorju. Postopek je enak kot pri tebi in se prevede brez tezav, le da sem jaz izbral AT89C4051 kot ciljni MCU, preveril pa sem, da je hello.c tudi med vkljucenimi datotekami za projekt in da seveda vsebuje normalno kodo. Ce si ti hello.c prekopiral nekaj drugam kot vaja3.c, potem ga moras v projekt vkljuciti (Add Files).
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
vilko
Član
Član



Pridružen-a: Pet 13 Feb 2004 10:26
Prispevkov: 3358
Aktiv.: 14.18
Kraj: Dragomer

PrispevekObjavljeno: Pon Apr 10, 2006 10:06 am    Naslov sporočila:  Ne razumem Odgovori s citatom

Ne razumem.
Citiram:
program iz demo verzije ne bo deloval na AT89C2051

Ali to pomeni, da sploh ne morem Hello World dobiti s tem orodjem iz 2051?
Najbrž ne. Najbrž je potrebno samo še kaj spremeniti, dopovedati, kar nisem naredil. Morda je potrebno določiti start programa na H0000, ali kaj takega.

Citiram:
Ce si ti hello.c prekopiral nekaj drugam kot vaja3.c, potem ga moras v projekt vkljuciti (Add Files).


Ne, hello.c se nahaja z imenom vaja3.c v vaja3 mapi.

Hvala

_________________
Nihče ni za vojno in vsi so za mir,
vsi so za bratstvo, nihče za prepir.
Od same ljubezni vsak čas na granatah
bo vtisnjeno geslo: "Darilo za brata"
Janez Menart
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Proteus
Član
Član



Pridružen-a: Sre 15 Jun 2005 10:03
Prispevkov: 1943
Aktiv.: 8.20

PrispevekObjavljeno: Pon Apr 10, 2006 10:14 am    Naslov sporočila:   Odgovori s citatom

Za Philipsove LPC mikrokontrolerje je demo Keil omejen na 4K.
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
Sokrat
Član
Član



Pridružen-a: Čet 25 Avg 2005 11:00
Prispevkov: 5584
Aktiv.: 23.57

PrispevekObjavljeno: Pon Apr 10, 2006 10:18 am    Naslov sporočila:   Odgovori s citatom

Hm, da ne bom ucil krive vere - Keilova stran z opisom omejitev pravi, da ne ("The startup code generated includes LJMPs. Code generated cannot be used in single-chip devices that support 2K Bytes or less of program space." - to je recimo AT89C2051). Mislim pa, da se je hello.c pri meni prevedel tako, da bi deloval normalno na AT89C2051 Confused

Kako to preveris zagotovo ? Ko je program preveden, si oglej Disassembly listing - ali se nahaja kaksen ukaz onkraj meje internega flasha (0x000 do 0x7ff) ? Ce ne, potem ne bi smel imeti tezav (in mislim, da se ne, nisem pa preveril preden sem rezultat testa pobrisal).

Kako priti do prevedenega programa ? hello.c si skopiral v nek direktorij pod imenom vaja3.c. Odpri nov projekt (najboljse bo, da kar v istem direktoriju, kjer se nahaja datoteka vaja3.c). Ko priklikas preko vseh izbir (za zacetek daj raje AT89C4051, to lahko potem tako ali tako spremenis v nastavitvah projekta in opazujes razliko v rezultatu; opcija Select device ... v meniju Project), V oknu, kjer imas nastavitve projekta (okno, ki si ga ze prej sam opisal), dodaj vaja3.c na seznam vkljucenih datotek (Add Files, izberi vaja3.c in klikni Add, potem zapri okno za dodajanje in pritisni OK). Daj Build target (v meniju Project) in bi moral dobiti preveden program (prej v Options for target | Output se obkljukaj, da zelis rezultat tudi v .hex obliki, ce ga bi rad sprogramiral v pravi MCU in ne samo preizkusil v simulatorju).
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
Proteus
Član
Član



Pridružen-a: Sre 15 Jun 2005 10:03
Prispevkov: 1943
Aktiv.: 8.20

PrispevekObjavljeno: Pon Apr 10, 2006 11:20 am    Naslov sporočila:   Odgovori s citatom

Stvar postaja zanimiva.

Sam sem poleg testne plošče MCB2130 dobil tudi CD, ki je imel poleg demo C-ja za ARM, tudi C za 8031. Že v opisu sem zasledil bonus (4K) za Philips-ove kontrolerje. Ko sem vso zadevo testno inštaliral (bolj zaradi firbca) se je v "bin" direktoriju tudi dejansko pojavila smiselna registracijska datoteka.

Če tega ni pri demo različici sneti z neta, potem očitno dobiš pri nakupu MCB2130 še boniteto za 8031 Think
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
vilko
Član
Član



Pridružen-a: Pet 13 Feb 2004 10:26
Prispevkov: 3358
Aktiv.: 14.18
Kraj: Dragomer

PrispevekObjavljeno: Pon Apr 10, 2006 12:08 pm    Naslov sporočila:  4051 tudi ne gre Odgovori s citatom

Po namigu, da evaluation version ne podpira 2051 (ker ima samo 2 K) sem pretaknil na 4051 in ponovno 'buildal' target. Dobil sem identično diagnostiko.
Imam star Disassembler ki dela v DOSu, in bom pokazal, kaj je našel v vaja3.hex
Samo en monument!

_________________
Nihče ni za vojno in vsi so za mir,
vsi so za bratstvo, nihče za prepir.
Od same ljubezni vsak čas na granatah
bo vtisnjeno geslo: "Darilo za brata"
Janez Menart
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Sokrat
Član
Član



Pridružen-a: Čet 25 Avg 2005 11:00
Prispevkov: 5584
Aktiv.: 23.57

PrispevekObjavljeno: Pon Apr 10, 2006 12:19 pm    Naslov sporočila:   Odgovori s citatom

Vilko, ali si zdaj vkljucil vaja3.c v tvoj projekt ali ne ? To je kljucni korak, ki si ga v tvojem zacetnem opisu izpustil. Ko vaja3.c shranis z zeljeno vsebino (npr. v direktorij vaja3 s prekopiranim tekstom iz hello.c), ga vkljuci v projekt, kjer se mora prikazati pod startup.a51 (kot naslednja stvar v desnem seznamu torej).

Nazadnje urejal/a Sokrat Pon Apr 10, 2006 12:21 pm; skupaj popravljeno 1 krat
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
vilko
Član
Član



Pridružen-a: Pet 13 Feb 2004 10:26
Prispevkov: 3358
Aktiv.: 14.18
Kraj: Dragomer

PrispevekObjavljeno: Pon Apr 10, 2006 12:21 pm    Naslov sporočila:  Nič ni naredil Odgovori s citatom

Dissasembler kaže to:
Koda:
;===============================================================;
; Disassembled Using DIS8051   -  (C)1989 Data Sync Engineering ;
;===============================================================;
;
;
;
   ORG   00000H
;
;
L0000:   LJMP   L0800
;
;
   ORG   00800H
;
;
L0800:   MOV   R0,#07FH
   CLR   A
;
L0803:   MOV   @R0,A
   DJNZ   R0,L0803
   MOV   SP,#007H
   LJMP   L0000
;
;
;   Unresolved Address Reference list
;
;
;
;
   END

kar pomeni, da je v kodi samo start programa in nič od vsebine, ki sem jo dal v vaja3.c

_________________
Nihče ni za vojno in vsi so za mir,
vsi so za bratstvo, nihče za prepir.
Od same ljubezni vsak čas na granatah
bo vtisnjeno geslo: "Darilo za brata"
Janez Menart
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
vilko
Član
Član



Pridružen-a: Pet 13 Feb 2004 10:26
Prispevkov: 3358
Aktiv.: 14.18
Kraj: Dragomer

PrispevekObjavljeno: Pon Apr 10, 2006 12:34 pm    Naslov sporočila:  Aha! Odgovori s citatom

Aha! Posebej moram vključiti vaja3.c v project. No, sem mislil, da je to samoposebi umevno, če sem že odprl project.
po tem, ko sem našel kako dodati v project vaja3.c in f7 (build) sem dobil
brez napak in opozoril. Še disassembler, da vidimo, kaj imamo! (glej datoteko vaja3.src (Zlomka! Extension .src is not allowed) bom dal kar sem, kot tekst:

Koda:
;===============================================================;
; Disassembled Using DIS8051   -  (C)1989 Data Sync Engineering ;
;===============================================================;
;
;
;
   ORG   00000H
;
   LJMP   L0C39
;
;
   ORG   00C39H
;
;
L0C39:   MOV   R0,#07FH
   CLR   A
;
L0C3C:   MOV   @R0,A
   DJNZ   R0,L0C3C
   MOV   SP,#021H
   LJMP   L0C11
;
;
   ORG   00C2CH
;
   ORL   A,R0
   XRL   A,06CH
   XRL   A,R4
   XRL   A,R7
   JB   057H,L0CA3
   ORL   C,06CH
   XRL   A,#00AH
   NOP   
;
   ORG   00C11H
;
;
L0C11:   MOV   SCON,#050H
   ORL   TMOD,#020H
   MOV   TH1,#0DDH
   SETB   TR1
   SETB   TI
;
L0C1E:   XRL   P1,#001H
   MOV   R3,#0FFH
   MOV   R2,#00CH
   MOV   R1,#02CH
   LCALL   L0862
   SJMP   L0C1E
;
   ORG   00800H
;
;
L0800:   MOV   A,017H
   ADD   A,#00BH
   MOV   R0,A
   MOV   A,@R0
   INC   017H
;
L0808:   RET   
;
;
L0809:   MOV   R0,#008H
   JNB   007H,L0810
   MOV   R0,#00BH
;
L0810:   CLR   A
   MOV   B,#001H
   LCALL   L0BB4
   LJMP   L0B5C
;
   JB   000H,L0808
   MOV   R7,#02EH
   SETB   000H
   SJMP   L083B
   MOV   A,R7
;
L0824:   ANL   A,#00FH
   ADD   A,#090H
   DA   A
   ADDC   A,#040H
   DA   A
;
L082C:   MOV   R7,A
   JNB   004H,L083B
   MOV   A,R7
   ADD   A,#0BFH
   CJNE   A,#01AH,L0836
;
L0836:   JNC   L083B
   ADD   A,#061H
   MOV   R7,A
;
L083B:   MOV   A,018H
   JZ   L0841
   DEC   018H
;
L0841:   INC   01BH
   MOV   A,01BH
   JNZ   L0849
   INC   01AH
;
L0849:   JNB   007H,L0859
;
L084C:   MOV   R0,#008H
   CLR   A
   MOV   B,#001H
   LCALL   L0BB4
   MOV   A,R7
   LJMP   L0BA2
;
;
L0859:   LJMP   L0BEA
;
   MOV   A,#003H
   SETB   007H
   SJMP   L0865
;
L0862:   CLR   A
   CLR   007H
;
L0865:   MOV   017H,A
   MOV   008H,R3
   MOV   009H,R2
   MOV   00AH,R1
   CLR   A
   MOV   018H,A
   MOV   01AH,A
   MOV   01BH,A
;
L0874:   MOV   A,018H
   JZ   L087F
   MOV   R7,#020H
   LCALL   L083B
   SJMP   L0874
;
L087F:   MOV   019H,#0FFH
   CLR   001H
   CLR   000H
   CLR   002H
   CLR   003H
   CLR   005H
   CLR   006H
   CLR   008H
   LCALL   L0809
   MOV   R7,A
   JNZ   L08A3
   JNB   007H,L089E
   MOV   R7,#000H
   LCALL   L084C
;
L089E:   MOV   R7,01BH
   MOV   R6,01AH
   RET   
;
;
L08A3:   CJNE   A,#025H,L0905
;
L08A6:   CLR   F0
;
L08A8:   CLR   004H
   LCALL   L0809
   MOV   R7,A
   ADD   A,#0D0H
   CJNE   A,#00AH,L08B3
;
L08B3:   JNC   L08CF
   MOV   B,#00AH
   MOV   R0,#018H
   JNB   F0,L08C2
   INC   R0
   CJNE   @R0,#0FFH,L08C2
   INC   @R0
;
L08C2:   XCH   A,@R0
   MUL   AB
   ADD   A,@R0
   MOV   @R0,A
   JB   F0,L08CD
   JNZ   L08CD
   SETB   003H
;
L08CD:   SJMP   L08A8
;
L08CF:   ADD   A,#0CFH
   CJNE   A,#01AH,L08D4
;
L08D4:   MOV   A,R7
   JNC   L08DB
   CLR   ACC.5
   SETB   004H
;
L08DB:   LJMP   L0A4C
;
   SETB   001H
   SJMP   L08A8
   SETB   000H
   SJMP   L08A6
   SETB   002H
   SJMP   L08A6
   SETB   F0
   SJMP   L08A8
   SETB   005H
   SJMP   L08A6
;
L08F2:   MOV   R7,#020H
   LCALL   L083B
   JB   002H,L0901
   MOV   A,#001H
   CJNE   A,018H,L08FF
;
L08FF:   JC   L08F2
;
L0901:   LCALL   L0800
   MOV   R7,A
;
L0905:   LCALL   L083B
;
L0908:   LJMP   L0874
;
   SETB   008H
   SETB   006H
   SJMP   L08A6
   LCALL   L0800
   MOV   R3,A
   LCALL   L0800
   MOV   R2,A
   LCALL   L0800
   MOV   R1,A
   ORL   A,R2
   ORL   A,R3
   JNZ   L0927
   MOV   R1,#01DH
   MOV   R2,#00BH
   MOV   R3,#0FFH
;
L0927:   JB   002H,L0958
   MOV   A,018H
   JZ   L0958
   MOV   R6,#000H
;
L0930:   MOV   DPL,R6
   MOV   DPH,#000H
   LCALL   L0B75
   JZ   L0940
   INC   R6
   MOV   A,R6
   XRL   A,019H
   JNZ   L0930
;
L0940:   CLR   F0
   MOV   A,R3
   PUSH   ACC
   MOV   A,R2
   PUSH   ACC
   MOV   A,R1
   PUSH   ACC
   MOV   A,R6
   LCALL   L0A93
   POP   ACC
   MOV   R1,A
   POP   ACC
   MOV   R2,A
   POP   ACC
   MOV   R3,A
;
L0958:   LCALL   L0B5C
   MOV   R7,A
   JZ   L0908
   MOV   A,R3
   PUSH   ACC
   MOV   A,R2
   PUSH   ACC
   MOV   A,R1
   PUSH   ACC
   LCALL   L083B
   POP   ACC
   ADD   A,#001H
   MOV   R1,A
   POP   ACC
   ADDC   A,#000H
   MOV   R2,A
   POP   ACC
   MOV   R3,A
   MOV   A,019H
   INC   A
   JZ   L0958
   DJNZ   019H,L0958
   SJMP   L0908
   MOV   R3,#0FFH
   MOV   R2,#00AH
   MOV   R1,#08FH
   SETB   002H
   SJMP   L0927
;
L098B:   MOV   R1,#010H
   SJMP   L0991
   MOV   R1,#008H
;
L0991:   CLR   006H
   CLR   008H
   SJMP   L099F
   SETB   F0
   MOV   R1,#00AH
   SJMP   L09A1
   MOV   R1,#00AH
;
L099F:   CLR   F0
;
L09A1:   MOV   A,019H
   INC   A
   JNZ   L09A8
   MOV   019H,A
;
L09A8:   CLR   A
   MOV   R2,A
   MOV   R5,A
   MOV   R6,A
   MOV   R7,A
   LCALL   L0800
   MOV   R4,A
   MOV   R3,#008H
   JB   001H,L09C9
   LCALL   L0800
   MOV   R5,A
   MOV   R3,#010H
   JNB   000H,L09C9
   LCALL   L0800
   MOV   R6,A
   LCALL   L0800
   MOV   R7,A
   MOV   R3,#020H
;
L09C9:   MOV   A,R4
   RLC   A
   ANL   C,F0
   MOV   F0,C
   JNC   L09E4
   CLR   C
   CLR   A
   JNB   000H,L09DC
   SUBB   A,R7
   MOV   R7,A
   CLR   A
   SUBB   A,R6
   MOV   R6,A
   CLR   A
;
L09DC:   JB   001H,L09E2
   SUBB   A,R5
   MOV   R5,A
   CLR   A
;
L09E2:   SUBB   A,R4
   MOV   R4,A
;
L09E4:   CLR   A
   XCH   A,R3
   MOV   R0,A
   CLR   001H
;
L09E9:   MOV   A,R4
   JNZ   L09F8
   XCH   A,R7
   XCH   A,R6
   XCH   A,R5
   XCH   A,R4
   MOV   A,R0
   ADD   A,#0F8H
   MOV   R0,A
   JNZ   L09E9
   SJMP   L0A0F
;
L09F8:   CLR   C
   MOV   A,R7
   RLC   A
   MOV   R7,A
   MOV   A,R6
   RLC   A
   MOV   R6,A
   MOV   A,R5
   RLC   A
   MOV   R5,A
   MOV   A,R4
   RLC   A
   MOV   R4,A
   MOV   A,R3
   RLC   A
   MOV   R3,A
   SUBB   A,R1
   JC   L0A0D
   MOV   R3,A
   INC   R7
;
L0A0D:   DJNZ   R0,L09F8
;
L0A0F:   MOV   A,R3
   JNB   001H,L0A18
   MOV   R0,A
   POP   ACC
   SWAP   A
   ORL   A,R0
;
L0A18:   CPL   001H
   PUSH   ACC
   INC   R2
   MOV   A,R4
   ORL   A,R5
   ORL   A,R6
   ORL   A,R7
   MOV   R0,#020H
   MOV   R3,#000H
   JNZ   L09E9
   MOV   A,R2
   CJNE   A,019H,L0A2B
;
L0A2B:   JC   L09E9
   PUSH   ACC
   LCALL   L0A95
   POP   B
;
L0A34:   POP   ACC
   JB   001H,L0A3D
   SWAP   A
   PUSH   ACC
   SWAP   A
;
L0A3D:   CPL   001H
   PUSH   B
   LCALL   L0824
   POP   B
   DJNZ   B,L0A34
   LJMP   L0874
;
;
L0A4C:   LCALL   L0BC4
   INC   R1
   ACALL   L0853
   INC   R1
   MOV   058H,R3
   INC   R0
   MOVX   A,@R0
   ORL   A,R4
   INC   R0
   DJNZ   R6,L0A9D
   INC   R1
   MOV   04FH,R7
   INC   R1
   SUBB   A,@R1
   ORL   A,#009H
   SUBB   A,@R1
   ORL   A,R1
   INC   R0
   MOV   @R1,A
   ORL   009H,#09DH
   ANL   A,009H
   AJMP   L0C46
;
   INC   R1
   AJMP   L0C45
;
   INC   R1
   AJMP   L0C47
;
   INC   R3
   ADDC   A,R5
   JNC   L0A7F
   MOV   A,@R0
   ADD   A,R5
   INC   R0
   MOV   A,R2
   ADD   A,R6
   INC   R1
   INC   R5
   ADD   A,R3
;
L0A7F:   INC   R0
   MOV   A,R6
   RL   A
   INC   R1
   INC   R3
   JB   00BH,L0AAD
   ADD   A,R2
   INC   R0
   MOV   @R0,048H
   NOP   
   NOP   
   INC   R1
   INC   03FH
   ADDC   A,R7
   ADDC   A,R7
   NOP   
;
L0A93:   MOV   R1,#00AH
;
L0A95:   MOV   C,F0
   JB   003H,L0AAE
   JNB   005H,L0AA6
;
L0A9D:   CJNE   R1,#010H,L0AA2
   INC   A
   INC   A
;
L0AA2:   CJNE   R1,#008H,L0AA6
   INC   A
;
L0AA6:   MOV   C,F0
   JB   006H,L0AAD
   JNC   L0AAE
;
L0AAD:   INC   A
;
L0AAE:   JB   002H,L0B19
   MOV   002H,C
   CJNE   A,018H,L0AB6
;
L0AB6:   JNC   L0AEC
;
L0AB8:   PUSH   ACC
   MOV   R7,#020H
   JNB   003H,L0AD8
   MOV   R7,#030H
   MOV   C,002H
   ORL   C,006H
   ORL   C,005H
   JNC   L0AD8
   LCALL   L0AEC
   CLR   002H
   CLR   006H
   CLR   005H
   CLR   008H
   MOV   R7,#030H
   SJMP   L0AE7
;
L0AD8:   JNB   005H,L0ADE
   MOV   A,R1
   PUSH   ACC
;
L0ADE:   LCALL   L083B
   JNB   005H,L0AE7
   POP   ACC
   MOV   R1,A
;
L0AE7:   POP   ACC
   CJNE   A,018H,L0AB8
;
L0AEC:   JNB   005H,L0B06
   MOV   R7,#030H
   CJNE   R1,#010H,L0B00
   LCALL   L083B
   MOV   R7,#058H
   JNB   004H,L0B03
   MOV   R7,#078H
   SJMP   L0B03
;
L0B00:   CJNE   R1,#008H,L0B06
;
L0B03:   LCALL   L083B
;
L0B06:   JNB   002H,L0B0E
   MOV   R7,#02DH
;
L0B0B:   LJMP   L083B
;
;
L0B0E:   MOV   R7,#020H
   JB   008H,L0B0B
   MOV   R7,#02BH
   JB   006H,L0B0B
   RET   
;
;
L0B19:   MOV   002H,C
   SJMP   L0AEC
   ADD   A,R0
   XRL   A,R6
   MOV   06CH,#06CH
   ADD   A,R1
   NOP   
;
L0B24:   SETB   001H
   LCALL   L0800
   JNB   001H,L0B24
   CLR   001H
   MOV   R0,#018H
   JNB   F0,L0B34
   INC   R0
;
L0B34:   MOV   @R0,A
   LJMP   L08A6
;
;
L0B38:   ADD   A,R5
   JNC   L0B7E
   ORL   A,R1
   ANL   A,R0
   LCALL   L0800
   ADD   A,#003H
   CJNE   A,#005H,L0B45
;
L0B45:   JC   L0B48
   CLR   A
;
L0B48:   MOV   DPTR,#L0B38
   MOVC   A,@A+DPTR
   LCALL   L082C
   MOV   A,#03AH
   LCALL   L082C
   SETB   003H
   MOV   018H,#004H
   LJMP   L098B
;
;
L0B5C:   CJNE   R3,#001H,L0B65
   MOV   DPL,R1
   MOV   DPH,R2
   MOVX   A,@DPTR
   RET   
;
;
L0B65:   JNC   L0B69
   MOV   A,@R1
   RET   
;
;
L0B69:   CJNE   R3,#0FEH,L0B6E
   MOVX   A,@R1
   RET   
;
;
L0B6E:   MOV   DPL,R1
   MOV   DPH,R2
   CLR   A
   MOVC   A,@A+DPTR
   RET   
;
;
L0B75:   CJNE   R3,#001H,L0B84
   MOV   A,DPL
   ADD   A,R1
   MOV   DPL,A
   MOV   A,DPH
   ADDC   A,R2
   MOV   DPH,A
   MOVX   A,@DPTR
   RET   
;
;
L0B84:   JNC   L0B8C
   MOV   A,R1
   ADD   A,DPL
   MOV   R0,A
   MOV   A,@R0
   RET   
;
;
L0B8C:   CJNE   R3,#0FEH,L0B95
   MOV   A,R1
   ADD   A,DPL
   MOV   R0,A
   MOVX   A,@R0
   RET   
;
;
L0B95:   MOV   A,DPL
   ADD   A,R1
   MOV   DPL,A
   MOV   A,DPH
   ADDC   A,R2
   MOV   DPH,A
   CLR   A
   MOVC   A,@A+DPTR
   RET   
;
;
L0BA2:   CJNE   R3,#001H,L0BAB
   MOV   DPL,R1
   MOV   DPH,R2
   MOVX   @DPTR,A
   RET   
;
;
L0BAB:   JNC   L0BAF
   MOV   @R1,A
   RET   
;
;
L0BAF:   CJNE   R3,#0FEH,L0BB3
   MOVX   @R1,A
;
L0BB3:   RET   
;
;
L0BB4:   MOV   R2,A
   MOV   A,@R0
   MOV   R3,A
   INC   R0
   INC   R0
   MOV   A,@R0
   MOV   R1,A
   ADD   A,B
   MOV   @R0,A
   DEC   R0
   MOV   A,@R0
   XCH   A,R2
   ADDC   A,R2
   MOV   @R0,A
   RET   
;
;
L0BC4:   POP   DPH
   POP   DPL
   MOV   R0,A
;
L0BC9:   CLR   A
   MOVC   A,@A+DPTR
   JNZ   L0BDF
   MOV   A,#001H
   MOVC   A,@A+DPTR
   JNZ   L0BDF
   INC   DPTR
   INC   DPTR
;
L0BD4:   MOVC   A,@A+DPTR
   MOV   R0,A
   MOV   A,#001H
   MOVC   A,@A+DPTR
   MOV   DPL,A
   MOV   DPH,R0
   CLR   A
   JMP   @A+DPTR
;
;
L0BDF:   MOV   A,#002H
   MOVC   A,@A+DPTR
   XRL   A,R0
   JZ   L0BD4
   INC   DPTR
   INC   DPTR
   INC   DPTR
   SJMP   L0BC9
;
L0BEA:   MOV   A,R7
   CJNE   A,#00AH,L0BF5
   MOV   A,#00DH
   LCALL   L0BF5
   MOV   A,#00AH
;
L0BF5:   JNB   RI,L0C09
   MOV   R0,SBUF
   CJNE   R0,#013H,L0C09
   CLR   RI
;
L0BFF:   JNB   RI,L0BFF
   MOV   R0,SBUF
   CLR   RI
   CJNE   R0,#011H,L0BFF
;
L0C09:   JNB   TI,L0C09
   CLR   TI
   MOV   SBUF,A
   RET   
;
;
;   Unresolved Address Reference list
;
;
L0853:      EQU   00853H
L0B7E:      EQU   00B7EH
L0C45:      EQU   00C45H
L0C46:      EQU   00C46H
L0C47:      EQU   00C47H
L0CA3:      EQU   00CA3H
;
;
   END



Sledi če rezultat, ki ga da bascom na to temo

_________________
Nihče ni za vojno in vsi so za mir,
vsi so za bratstvo, nihče za prepir.
Od same ljubezni vsak čas na granatah
bo vtisnjeno geslo: "Darilo za brata"
Janez Menart
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
vilko
Član
Član



Pridružen-a: Pet 13 Feb 2004 10:26
Prispevkov: 3358
Aktiv.: 14.18
Kraj: Dragomer

PrispevekObjavljeno: Pon Apr 10, 2006 12:42 pm    Naslov sporočila:  Še varianta bascom Odgovori s citatom

Bascom pa je generiral sledeče:

Koda:
;===============================================================;
; Disassembled Using DIS8051   -  (C)1989 Data Sync Engineering ;
;===============================================================;
;
;
;
   ORG   00000H
;
   LJMP   L0041
;
   RETI   
;
   NOP   
   NOP   
   NOP   
   NOP   
   NOP   
   NOP   
   NOP   
   RETI   
;
   NOP   
   NOP   
   NOP   
   NOP   
   NOP   
   NOP   
   NOP   
   RETI   
;
   NOP   
   NOP   
   NOP   
   NOP   
   NOP   
   NOP   
   NOP   
   RETI   
;
   NOP   
   NOP   
   NOP   
   NOP   
   NOP   
   NOP   
   NOP   
   RETI   
;
   NOP   
   NOP   
   NOP   
   NOP   
   NOP   
   NOP   
   NOP   
   NOP   
   NOP   
   NOP   
;
L002E:   MOV   A,#00DH
   LCALL   L0039
   MOV   A,#00AH
   LCALL   L0039
   RET   
;
;
L0039:   JNB   TI,L0039
   CLR   TI
   MOV   SBUF,A
   RET   
;
;
L0041:   MOV   R0,#07FH
   CLR   A
;
L0044:   MOV   @R0,A
   DJNZ   R0,L0044
   MOV   SP,#021H
   CLR   TR1
   MOV   SCON,#052H
   MOV   TMOD,#022H
   MOV   TH1,#0E6H
   SETB   TR1
   MOV   020H,#000H
;
L005A:   CPL   P1.0
   MOV   R0,#00BH
;
L005E:   MOV   A,R0
   MOVC   A,@A+PC
   JZ   L0068
   LCALL   L0039
   INC   R0
   SJMP   L005E
;
L0068:   LJMP   L0077
;
   ORL   A,R0
   XRL   A,06CH
   XRL   A,R4
   XRL   A,R7
   JB   057H,L00E2
   ORL   C,06CH
   XRL   A,#000H
;
L0077:   ACALL   L002E
   LJMP   L005A
;
   NOP   
   NOP   
   NOP   
   NOP   
;
;   Unresolved Address Reference list
;
;
L00E2:      EQU   000E2H
;
;
   END


_________________
Nihče ni za vojno in vsi so za mir,
vsi so za bratstvo, nihče za prepir.
Od same ljubezni vsak čas na granatah
bo vtisnjeno geslo: "Darilo za brata"
Janez Menart
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Sokrat
Član
Član



Pridružen-a: Čet 25 Avg 2005 11:00
Prispevkov: 5584
Aktiv.: 23.57

PrispevekObjavljeno: Pon Apr 10, 2006 12:45 pm    Naslov sporočila:   Odgovori s citatom

Kot vidis tudi sam, je koda res premaknjena na 0x800 (2 KB). Veljalo bi si podrobneje ogledati startup.a51, da vidis ali je to sploh potrebno, ali bi lahko program zacel bistveno nizje in prihranil prostor (ne vidim nobenega objektivnega razloga da to ne bi bilo mogoce).

Disassembly ti zgenerira ze uVision, tako da ni potrebno komplicirati z drugimi orodji. Oblika je odvisna od nastavitev (zavihek Listing med Project options).
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
Sokrat
Član
Član



Pridružen-a: Čet 25 Avg 2005 11:00
Prispevkov: 5584
Aktiv.: 23.57

PrispevekObjavljeno: Pon Apr 10, 2006 1:07 pm    Naslov sporočila:   Odgovori s citatom

Pa se FWIW, zgoldocaseni Sokrat je zgeneriral tole:

Koda:

org 0x00
jmp start

org 0x30
start:
mov scon,#0x52
mov tmod,#0x22
mov th1,#0xe6
mov tl1,#0xe6
setb tr1

mov dptr,#string
main:
loop:
mov a,r0
movc a,@a+dptr
mov sbuf,a
jnb ri,$
clr ri
inc r0
cjne a,#0x13,loop
cpl p1.0
mov r0,#0
jmp loop

org 0x700
string:
db "Hello world!", 0x13


Povedano drugace: trivialni primeri zo zelo slab nacin za primerjavo visjenivojskih jezikov, saj inicializacija vsega mogocega pobere nekajkrat toliko prostora, kot sam program, ki nekaj zares pocne. Za objektivno primerjavo bi moral vzeti precej bolj kompleksen primer in upostevati tudi cas pisanja in ucenja, sicer bi assembler vedno "zmagal" po zaslugi najkrajse ali najhitrejse kode.
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
.
Član
Član



Pridružen-a: Pon 23 Avg 2004 16:16
Prispevkov: 16777190
Aktiv.: 70830.99

PrispevekObjavljeno: Pon Apr 10, 2006 1:32 pm    Naslov sporočila:   Odgovori s citatom

Brisana vsebina odstranjenega uporabnika.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
vilko
Član
Član



Pridružen-a: Pet 13 Feb 2004 10:26
Prispevkov: 3358
Aktiv.: 14.18
Kraj: Dragomer

PrispevekObjavljeno: Pon Apr 10, 2006 3:32 pm    Naslov sporočila:  Seveda, Odgovori s citatom

Seveda nisem hotel iz prikazanega takoj potegniti zaključkov. In jasno je, da se v assemblerju naredi najmanjša in najhitrejša koda, (za kar pa je potrebno imeti največ časa in znanja, se pravi vsako stvar se nekje plača).

Rekel bi, da je uVision nekje vmes, koda je obsežnejša od assemblerske in celo bascomove, toda z dodatnim vložkom znanja in časa, se da jo optimizirati in narediti primerljivo. stdio.h potegne v program vse mogoče vhodnoizhodne funkcije, ki jih morda celo sploh ne rabim. V tem primeru je gotovo bilo tako. Je pa C koda tudi fleksibilnejša od Bascomove, saj je kompatibilna s podprogrami narejenimi v drugih jezikih, in se z povezovalnikom (linkage editorjem) poveže v funkcionalno celoto. C pozna zapletene matematične funkcije, od trigonometrije, in naprej, računa z premično vejico, itd, je veliko več kot bascom.

Bascom je prijazen do začetnika, preprost, razumljiv, brez pasti. Z nekaj truda se da tudi v bascomu narediti skoraj vse, in če nismo v stiski s časom, se čez čas izračuna tisto kar potrebujemo. Z assemblerjem se da kombinirati, a je potrebno biti previden, gre za 'in line' assembler in se hitro z njim lahko naredi kakšna škoda.

Majhnost in hitrost kode, se mi zdi, ni tako kritična, saj se počasno in veliko kodo da kompenzirati s hitrejšim in večjim procesorjem, in zadeva spet deluje zadovoljivo. Drži ali ne?

Razmišljam sledeče: problemi, ki jih želim reševati, počasi rastejo po kompleksnosti. Glede na novo tehnologijo imam dve poti, ali naštudirati popolnoma novo orodje, kar me bo stalo precej časa in živcev, iskati bi moral pomoč, in pa seveda denarja, v kolikor ne bi po balkansko ukradel zadevo, kar je dandanes vse bolj in bolj redko in kaznivo, ali pa si nabavim cenejše orodje, ki sem ga sposoben plačati, bascom orodje, s katerim bom prihranil svoj čas in možgančke (oboje mi gre počasi h koncu), a trošil več procesorskega časa in pomnilnika.

Mislim, da je ključno vprašanje sledeče: ali se neka stvar z bascomom in primernim procesorjem ne da zadovoljivo rešiti.
Recimo, ali se ne da procesor povezavi z PC-jem, in preko PC-a z internetom
potem so čipi za direktno povezavo z internetom, no to so spet pravzaprav PC-ji, le brez ekrana, diska in tipkovnice, so le ploščice, ki vsebujejo operacijski sistem.
Na to še nimam odgovora.

Pozdrav

_________________
Nihče ni za vojno in vsi so za mir,
vsi so za bratstvo, nihče za prepir.
Od same ljubezni vsak čas na granatah
bo vtisnjeno geslo: "Darilo za brata"
Janez Menart
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> AVR, LPC900, x51 Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Pojdi na stran 1, 2  Naslednja
Stran 1 od 2

 
Pojdi na:  
Ne, ne moreš dodajati novih tem v tem forumu
Ne, ne moreš odgovarjati na teme v tem forumu
Ne, ne moreš urejati svojih prispevkov v tem forumu
Ne, ne moreš brisati svojih prispevkov v tem forumu
Ne ne moreš glasovati v anketi v tem forumu
Ne, ne moreš pripeti datotek v tem forumu
Ne, ne moreš povleči datotek v tem forumu

Uptime: 492 dni


Powered by phpBB © 2001, 2005 phpBB Group