AT89C2051 a jeho PC

Diskuze a poradna o programátorech a programování různých obvodů

Moderátor: Moderátoři

Odpovědět
Zpráva
Autor
Návštěvník

AT89C2051 a jeho PC

#1 Příspěvek 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?

Tik

ATxx51

#2 Příspěvek 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.

Uživatelský avatar
eljaro
Příspěvky: 441
Registrován: 03 pro 2004, 01:00
Bydliště: Krnov
Kontaktovat uživatele:

#3 Příspěvek 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é !

Uživatelský avatar
eljaro
Příspěvky: 441
Registrován: 03 pro 2004, 01:00
Bydliště: Krnov
Kontaktovat uživatele:

#4 Příspěvek 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 ?

Tik

Pro eljaro

#5 Příspěvek 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:

Tik

Pro eijaro

#6 Příspěvek od Tik »

Pro uplnost!!!

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

a tak tomu bude navzdy!!!

Návštěvník

#7 Příspěvek 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?

Uživatelský avatar
Tik
Příspěvky: 3
Registrován: 11 kvě 2006, 02:00
Bydliště: Brno

#8 Příspěvek 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.

Návštěvník

#9 Příspěvek 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.

Uživatelský avatar
Tik
Příspěvky: 3
Registrován: 11 kvě 2006, 02:00
Bydliště: Brno

#10 Příspěvek od Tik »

Ano, uz si rozumime.
Tesim ze na dalsi ??zahady??

Uživatelský avatar
eljaro
Příspěvky: 441
Registrován: 03 pro 2004, 01:00
Bydliště: Krnov
Kontaktovat uživatele:

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

#11 Příspěvek 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:

Uživatelský avatar
eljaro
Příspěvky: 441
Registrován: 03 pro 2004, 01:00
Bydliště: Krnov
Kontaktovat uživatele:

#12 Příspěvek od eljaro »

PS: co takle se stát neanonymním ? :P

Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“