Stránka 1 z 1

AT89C2051 a jeho PC

Napsal: 11 kvě 2006, 15:13
od Návštěvník
Jak pracuje Program Counter u tohoto (a 8951 podobných) procesorù?
V pdf pøíruèce popisující instrukèní sadu jsem se doèetl, že rùzné instrukce jsou rùznì dlouhé (od jednoho do tøí bajtù). Jak jsou potom seøazené?
U PICu mi to bylo jasné - co 14bit. instrukce to adresovatelný "øádek" programu. Adresovat PC èítaè do poloviny instrukce je zhola nemožné.
Pøipadá mi, jako kdybych mohl na 8951 neúmyslným použitím napø.funkce ACALL "natoèit" PC pøesnì doprostøed instrukce, když bude v ROMce "rozlezlá" pøes tøi bajty..
Jak to funguje? Když procesor narazí na Opcode dané instrukce, nejspíš se dozví o kolik bajtù se má PC posunout (délka dané instrukce je naštìstí konstantní) ale co když použiju funkci ACALL?

ATxx51

Napsal: 11 kvě 2006, 18:20
od Tik
Zrejme dobre nechapes instrukci ACALL.
Instrukce slouzi pro kratke volani podprogramu (pouze 2kB), takze jejim
parametrem je prima adresa kodu podprogramu ktery musi koncit instrukci RET.

ACALL cadr
Cinnost instrukce:
PC <- (PC)+2
SP <- (SP)+1
(SP) <- (lowPC)
SP = (SP)+1
(SP) <- (highPC)
PC /D0...D10/ <- cadr

RET
Cinnost instrukce:
(highPC) <- ((SP))
SP <- (SP)-1
(lowPC) <- ((SP))
SP = (SP)-1

Takto se chovaji vsechny procesory s 8bit pro kod.

Napsal: 11 kvě 2006, 18:33
od eljaro
tak horký to není jak píšeš instrukce má skutečně od 1 do 3 bytů a zpravidla je to způsobeno tím co vlastně ta instrukce dělá ! asi ses trochu nechal zmást jeden byte obsahuje kod instrukce a těch je 00h až po ffh a zbytek záleží na instrukci samotné pokud instrukce pracuje i jinými registry než systémovými musí určit vlastně s jakými a ta jsou ty další 1 až dva byte kodu ! viz tebou míněná instrukce acall kád je pak F1h + adresa 11bitová . Mislím že by sis mněl napsat nějaký jednoduchý prográmek a spusti simulaci a bude ti to jasné !

Napsal: 11 kvě 2006, 18:45
od eljaro
ještě tak mimo soutěž tvuj dotaz postrádá loguku pokut používaš nějaký kompilátor tak to vědět nepotřebujěš ! jedíný případ je že chceš přímo mněnit pc podle vlastního uvážení na základě toho skákat v programovém kodu ?! ale i tak to znamená vytvořit vlastní kompilátor ?!
takže nechápu smyslnost ?

Pro eljaro

Napsal: 11 kvě 2006, 18:55
od Tik
Asi si nebudeme rozumet, o jakem jadre pises???
Instrukce ACALL u vsech xx51 slouzi vyhradne k volani podprogramu a
jeji strojovy kod ma 2 byty /aaa10001/aaaaaaaa/,
doufam ze tady nebudu vyucovat zaklady programovani jadra x51.

PS.
x51 neprestanu milovat :lol:

Pro eijaro

Napsal: 11 kvě 2006, 19:11
od Tik
Pro uplnost!!!

Instrukce LCALL dela to stejne ale ma 3byty.
Strojovy kod: /0001010/high cadr/low cadr/

a tak tomu bude navzdy!!!

Napsal: 11 kvě 2006, 20:23
od Návštěvník
eljaro: Ano, chci si vytvoøit pro 8951 vlastní kompilátor.Hlavnì mì zajímá jak to pracuje - tj.je PC na aktuálnì ètené adrese FLASH ROM nezávislý? Nebo se posouvá podle Opcode (tedy prvního byte) instrukce?

Napsal: 11 kvě 2006, 21:38
od Tik
Ano, pri normalnim behu se PC zvysuje o tolik bytu kolik jich ma instrukce na kterou ukazuje (to je dane).
V pripade skoku (tech je u x51 nejvice (18)) pouziva kazdy kompilator navesti (pro ziskani relativni adresy kam ma skocit) a ta je operandem instrukce, tim se zabrani skoku do neznama.
Vubec mi neni jasne k cemu by byla instrukce MOV PC,data
na stesti neexistuje ale s PC lze delat malou obklikou cokoliv (vyssi divci).
Aby to melo nejaky smysl tak je to o vlastnim kompilatoru protoze
zadny existujici takove prasarny nedovoli.

Napsal: 11 kvě 2006, 21:54
od Návštěvník
Dìkuju za odpovìdi. Asm rozumím, napsal jsem již jednoduchý kompilátor a disassembler pro procesory PIC a ta lapále z rùznì dlouhými instrukcemi 8951 mì zmátla.Takže èíslo PC uvedené v návìstí adresuje vždy první byte instrukce, je to tak?
Opravdu nemám v úmyslu dìlat z PC nìjaké prasárny.

Napsal: 11 kvě 2006, 22:05
od Tik
Ano, uz si rozumime.
Tesim ze na dalsi ??zahady??

no pončin vlastního programu je chvályhodná věc !

Napsal: 12 kvě 2006, 08:05
od eljaro
osobně všechny takové obdivuji já už se moc do učení nehrnu a jde mi líp ten hadware ! a pak věkově to už není moje parketa ! Ale itak přeji hodně štěstí při vývoji ! Ale osobně bych rád ši potkal někoho kdo dokáže mluvit s periferiemi pod xp - žádné složitosti prostě načíst a zobrazit nějaký data a pořípadě je i vrátit - ale jak se ukazuje je to dysciplína jen pro otrlé a už se začínám bát že se to fakt budu muset začít učit sám !
:?: pro inspiraci :!: http://www.vaultbbs.com/pinnacle/ koukni sem ! jejich x51 studio jede ve demu až do 2kb kodu a i pak stojí jen 99$ tak není důvod možná ani to vyvíjet ?! ale itak dej vědět jak to dopadlo ! Já sice už utekl k pic ale to je jiná kapitola ! Tak tedy hodně zdaru ! :twisted:

Napsal: 12 kvě 2006, 08:08
od eljaro
PS: co takle se stát neanonymním ? :P