Assembler

Vývojová prostředí, aplikace, skripty, http://www... síťové programy, internet, sdílení...
Odpovědět
kovino
Začátečník
Začátečník
Uživatelský avatar
Registrován: 03. led 2004
Bydliště: Slovakia

Assembler

Příspěvek od kovino »

Chlapi caute! Potreboval by som poradit s nasledovnym problemom. Tyka sa to programu pre procak 8051, kde mam zistit dlzku impulzu na porte P2.3. Ma to zistovat od 2 mikrosekund do 2 milisekund, z coho vyplyva, ze na ukladanie tejto dlzky musim pouzit 16-bitovy register DPTR (tento program musi byt spracovany cez casove slucky, teda neuvazujte pouzitie citacov/casovacov). Napisem to v skratke. Akonahle pride impulz na port 2.3 (log1), tak prebehne inkrementácia registra DPTR o jedna co su 2 instrukcne cykly, potom je tam este testovanie ci je impulz stale v log1 to su dalsie dva cykly, a potom ak impulz skonci (log0), tak musim hodnotu, ktorá je v registri DPTR nasobit stvormi, co su tie 4 instrukcne cykly. A toto je ten problem, lebo tu stvorku ked ulozim do 8-bitovoveho registra napr.B, tak nemozem pouzit funkciu MUL DPTRB, to je blbost lebo nemozem nasobit 16-bitovy register s 8-bitovym. Potom, neviem to urcite nefunguje ani RL DPTR, cim by som dany register posunul 1x dolava, to by som spravil este raz, lebo nasobenie styrmi je vlastne posunutie 2x dolava. Este sa to tusim da, ze by som rozdelil register DPTR na dve polovice na DPH a DPL, ale toto neviem ako oprogramovat. V jednoduchosti otazka znie: Ako vynasobit 16-bitovy register DPTR stvormi? Poprosil by som konkretne prikazy z assemblera. Dakujem za kazdu pomoc a zaroven sa ospravedlnujem za dlzku prispevku!
pavel.minarik
Středně pokročilý
Středně pokročilý
Uživatelský avatar
Registrován: 03. čer 2003
Bydliště: Brno
Kontaktovat uživatele:

Příspěvek od pavel.minarik »

seš si jistej, že ten SHIFT LEFT nefuguje? to by bylo elegantní řešení akorát bys možná musel testovat OVERFLOW
Pavel Minarik @ Dell Latitude 7300 (bohužel moc topí, nedoporučuju)
Dony
Středně pokročilý
Středně pokročilý
Uživatelský avatar
Registrován: 29. říj 2003
Bydliště: okr. Mělník

Příspěvek od Dony »

pokud jsem to správně pochopil, chceš porovnávat počet instrukcí odpovídajících 2 mikrosekundám az 2 milisekundám, nebylo by jednodušší přímo porovnávat ten čtvrtinovej počet, co budeš mít v registru a zbytečně ho už neupravovat?
Instrukce pro bitové posunutí jsou myslím SHL a SHR...
Obrázek Avatar tancuje, nechce se mu na záchod... :) Windows Vista je tady, řekněte "WTF" :D
kovino
Začátečník
Začátečník
Uživatelský avatar
Registrován: 03. led 2004
Bydliště: Slovakia

Assembler

Příspěvek od kovino »

No to posunutie RL DPTR nefunguje na 100%. Inak ja potrebujem mat v DPTR hodnotu dlzky impulzu vynasobenu stvormi instrukcnymi cyklami, kvoli presnosti. Pozrite na tento programik, to ma teraz napadlo: Inak pri "SETB DPH.0" a vsade kde je DPH.0 alebo 1 hlasi syntax error. Tu hodnotu v DPTR berte ako nejaku dlzku impulzu. (Prosil bych o radu co je zle v tom SETB DPH.0)

ORG 4000H
MOV DPTR,#37B6H
MOV A,DPH
RL A
RL A
MOV DPH,A
MOV A,DPL
JB ACC.7,NAV1
CLR DPH.1
JMP NAV2
NAV1: SETB DPH.1
NAV2: JB ACC.6,NAV3
CLR DPH.1
JMP NAV4
NAV3: SETB DPH.1
NAV4: RL A
RL A
MOV DPL,A
END
PCborec
Začátečník
Začátečník
Registrován: 23. črc 2003
Bydliště: Nový Jičín
Kontaktovat uživatele:

Příspěvek od PCborec »

RL jde použit pouze pro A.

Když ale posuneš hodnotu 2xdoleva, tak když tam maš velke čislo tak ti to může 2x přetect.. si si toho vědom? Takže sledovat C...

A co kdybys udělal:

ORG 4000H
MOV DPTR,#37B6H
MOV A,DPH
RL A
RL A
MOV DPH,A
MOV A,DPL

JB ACC.7,NAV1

MOV A,DPH
SUBB A,#11111110B
MOV DPH,A
JMP NAV2

NAV1: MOV A,DPH
ADD A,#00000001B
MOV DPH,A

NAV2: MOV A, DPL
JB ACC.6,NAV3

MOV A,DPH
SUBB A,#11111101B
MOV DPH,A
JMP NAV4

NAV3: MOV A,DPH
ADD A,#00000010B
MOV DPH,A

NAV4:

END

Když použiješ log. součin tak kde je 0 se nastavi 0, kde je 1 zustane puvodni čislo, při log. součtu kde je 1 se nastavi 1, kde je 0 zustane puvodni čislo. 8-)
Dark100
Začátečník
Začátečník
Uživatelský avatar
Registrován: 31. pro 2003
Bydliště: Nový Jičín
Kontaktovat uživatele:

Příspěvek od Dark100 »

nemáte někdo nějakou stránku na vyuku tady tohohle. Už se to po 3/4 roce musím naučit.
i7 12700F|ASUS TUF GAMING B660-PLUS|Kingston Fury Beast DIMM DDR4 32GB 3200MHz|Gainward RTX 5080 Phoenix
PCborec
Začátečník
Začátečník
Registrován: 23. črc 2003
Bydliště: Nový Jičín
Kontaktovat uživatele:

Příspěvek od PCborec »

zkus davat trochu v hodinách pozor. :lol:
Dark100
Začátečník
Začátečník
Uživatelský avatar
Registrován: 31. pro 2003
Bydliště: Nový Jičín
Kontaktovat uživatele:

Příspěvek od Dark100 »

a ty zkus dávat v jiných hodinách pozor :wink:
i7 12700F|ASUS TUF GAMING B660-PLUS|Kingston Fury Beast DIMM DDR4 32GB 3200MHz|Gainward RTX 5080 Phoenix
Odpovědět

Zpět na „Programování a web“