 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
vilko Član



Pridružen-a: Pet 13 Feb 2004 10:26 Prispevkov: 3357 Aktiv.: 14.17 Kraj: Dragomer
|
Objavljeno: Pon Apr 10, 2006 9:20 am Naslov sporočila: Težave začetnika z uVision 8051 |
|
|
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 |
|
 |
Sokrat Član


Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 23.58
|
Objavljeno: Pon Apr 10, 2006 9:35 am Naslov sporočila: |
|
|
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 |
|
 |
vilko Član



Pridružen-a: Pet 13 Feb 2004 10:26 Prispevkov: 3357 Aktiv.: 14.17 Kraj: Dragomer
|
Objavljeno: Pon Apr 10, 2006 10:06 am Naslov sporočila: Ne razumem |
|
|
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 |
|
 |
Proteus Član



Pridružen-a: Sre 15 Jun 2005 10:03 Prispevkov: 1943 Aktiv.: 8.20
|
Objavljeno: Pon Apr 10, 2006 10:14 am Naslov sporočila: |
|
|
Za Philipsove LPC mikrokontrolerje je demo Keil omejen na 4K. |
|
Nazaj na vrh |
|
 |
Sokrat Član


Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 23.58
|
Objavljeno: Pon Apr 10, 2006 10:18 am Naslov sporočila: |
|
|
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
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 |
|
 |
Proteus Član



Pridružen-a: Sre 15 Jun 2005 10:03 Prispevkov: 1943 Aktiv.: 8.20
|
Objavljeno: Pon Apr 10, 2006 11:20 am Naslov sporočila: |
|
|
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  |
|
Nazaj na vrh |
|
 |
vilko Član



Pridružen-a: Pet 13 Feb 2004 10:26 Prispevkov: 3357 Aktiv.: 14.17 Kraj: Dragomer
|
Objavljeno: Pon Apr 10, 2006 12:08 pm Naslov sporočila: 4051 tudi ne gre |
|
|
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 |
|
 |
Sokrat Član


Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 23.58
|
Objavljeno: Pon Apr 10, 2006 12:19 pm Naslov sporočila: |
|
|
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 |
|
 |
vilko Član



Pridružen-a: Pet 13 Feb 2004 10:26 Prispevkov: 3357 Aktiv.: 14.17 Kraj: Dragomer
|
Objavljeno: Pon Apr 10, 2006 12:21 pm Naslov sporočila: Nič ni naredil |
|
|
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 |
|
 |
vilko Član



Pridružen-a: Pet 13 Feb 2004 10:26 Prispevkov: 3357 Aktiv.: 14.17 Kraj: Dragomer
|
Objavljeno: Pon Apr 10, 2006 12:34 pm Naslov sporočila: Aha! |
|
|
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 |
|
 |
vilko Član



Pridružen-a: Pet 13 Feb 2004 10:26 Prispevkov: 3357 Aktiv.: 14.17 Kraj: Dragomer
|
Objavljeno: Pon Apr 10, 2006 12:42 pm Naslov sporočila: Še varianta bascom |
|
|
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 |
|
 |
Sokrat Član


Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 23.58
|
Objavljeno: Pon Apr 10, 2006 12:45 pm Naslov sporočila: |
|
|
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 |
|
 |
Sokrat Član


Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 23.58
|
Objavljeno: Pon Apr 10, 2006 1:07 pm Naslov sporočila: |
|
|
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 |
|
 |
. Član

Pridružen-a: Pon 23 Avg 2004 16:16 Prispevkov: 16777190 Aktiv.: 70834.43
|
Objavljeno: Pon Apr 10, 2006 1:32 pm Naslov sporočila: |
|
|
Brisana vsebina odstranjenega uporabnika. |
|
Nazaj na vrh |
|
 |
vilko Član



Pridružen-a: Pet 13 Feb 2004 10:26 Prispevkov: 3357 Aktiv.: 14.17 Kraj: Dragomer
|
Objavljeno: Pon Apr 10, 2006 3:32 pm Naslov sporočila: Seveda, |
|
|
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 |
|
 |
|
|
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: 491 dni
Powered by phpBB © 2001, 2005 phpBB Group
|