Assembler
- kovino
- Začátečník

- Registrován: 03. led 2004
- Bydliště: Slovakia
Assembler
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ý

- Registrován: 03. čer 2003
- Bydliště: Brno
- Kontaktovat uživatele:
- Dony
- Středně pokročilý

- Registrován: 29. říj 2003
- Bydliště: okr. Mělník
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...
Instrukce pro bitové posunutí jsou myslím SHL a SHR...
Avatar tancuje, nechce se mu na záchod... - kovino
- Začátečník

- Registrován: 03. led 2004
- Bydliště: Slovakia
Assembler
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
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

-
- Registrován: 23. črc 2003
- Bydliště: Nový Jičín
- Kontaktovat uživatele:
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.
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.
- Dark100
- Začátečník

- Registrován: 31. pro 2003
- Bydliště: Nový Jičín
- Kontaktovat uživatele:
- PCborec
- Začátečník

-
- Registrován: 23. črc 2003
- Bydliště: Nový Jičín
- Kontaktovat uživatele:
- Dark100
- Začátečník

- Registrován: 31. pro 2003
- Bydliště: Nový Jičín
- Kontaktovat uživatele: