pettter´s noob faq...

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

Moderátor: Moderátoři

Zpráva
Autor
Uživatelský avatar
pettter
Příspěvky: 83
Registrován: 07 říj 2013, 02:00

#31 Příspěvek od pettter »

Tak ďalšia noob otázka!
MCU PIC16F88, SW MPLAB X IDE, Assembler

Mám direktívy:

Kód: Vybrat vše

            RRF   DELAY, f              ;alebo
             DECF DELAY, f
Čo znamená to ´f´ v týchto príkazoch?

Dík.

Uživatelský avatar
MiloPS3
Příspěvky: 259
Registrován: 07 srp 2010, 02:00

#32 Příspěvek od MiloPS3 »

Atlan píše:Stiahni si cesky preklad pre pic 16f84.
ty sis ten DS ani neotevrel !

tohle neni direktiva,to sou zakladni prikazy, je jich cca 30, tak si otevri ds a precti si co znamenaj

http://pic16fxx.sweb.cz/programovani/in ... -16fxx.pdf

Uživatelský avatar
pettter
Příspěvky: 83
Registrován: 07 říj 2013, 02:00

#33 Příspěvek od pettter »

MiloPS3 píše:...ty sis ten DS ani neotevrel...


Ale čítal neboj, už ma z toho riť bolí... lenže tam čítam veci ktorým nerozumiem...
MiloPS3 píše:...tohle neni direktiva,to sou zakladni prikazy...
Pochop že tápem aj v takýchto základoch ako je rozdiel medzi výrazom: "direktíva" a "základný príkaz". Tak si mi nadhodil hneď na ďalšiu noobku. Aký je rozdiel vo výrazoch "direktíva" a "príkaz"?

K tej mojej otázke na ´f´... v DS je k príkazu napr. RRF uvedené:
Syntaxe: návěští SUBWF f, d; komentář
Operandy: f = (0-127)

d=(0,1)
Obsah registru je posunut o jeden bit doprava přes C – příznak přenosu CARRY (rotace probíhá přes devět bitů). Výsledek je umístěn do střadače pro d=0 nebo do registru pro d=1.

K príkazu DECF je zas uvedené:
Syntaxe: návěští DECF f, d; komentář
Operandy: f = (0-127)

d=(0,1)
Operace: (f) - 1 → (cílový registr)
Ovlivňované příznaky: Z
Popis: Od obsahu registru je odečtena jednička a výsledek je uložen do střadače pro d=0 nebo do registru pro d=1.


A "moje přetrhdílo" vypadá takto:

Kód: Vybrat vše

             RRF   DELAY, f              ;alebo
             DECF DELAY, f
Chápem že to moje ´f´ je vlastne ´d´ z DS. Lenže čo reprezentuje to ´f´ z môjho přetrhdíla, či 0, či 1, tak z toho som v riti. Lebo aj v DS sú obe možnosti. Čo určuje hodnotu toho môjho ´f´???

Uživatelský avatar
MiloPS3
Příspěvky: 259
Registrován: 07 srp 2010, 02:00

#34 Příspěvek od MiloPS3 »

urcite si si vsiml ze kdyz mas treba

Kód: Vybrat vše

movlw   petter 
a nikde toho petra nemas nijak zadefinovanyho tak ti to vyhodi chybu
to samy treba s f,w,POTRA,PORTx,STATUS,TMR1 atd
to vsechno je uvedeny v soubore k prislusnemu procesoru tady v p16f88.inc
otevres to v obycejnym textaku

jinak je to vzdy
prikaz - registr - odkat dam

takze to tvoje f (popripade w) je na miste toho d v DS , hodnotu toho f a w zjistis v tom *.inc
Pseudoinstrukce představují tzv. direktivy překladače. Protože tyto pseudoinstrukce nejsou řádnými intrukcemi mikroprocesoru, při běhu programu se nevykonávají - plní svojí funkci pouze při překladu zdroj. programu a říkají překladači, co má při překladu dělat. Tzn. K procesoru se nedostane. Pseudoinstrukce se používají i k mnoha dalším činnostem, můžeme pomocí nich dělat následující: přiřazovat symboly konkrétním objektům, inicializovat nebo rezervovat paměťový prostor, ovládat čítač instrukcí (PC) atd.
napr: CBLOCK,ENDC,CONFIG,DE,DEFINE,DT,DW,EQU,ERROR, ENDIF,INCLUDE,LIST, NOLIST,ORG, ,UNDEFINE,BANKSEL,PAGESEL,BANKISEL,MOVFW ....

Uživatelský avatar
pettter
Příspěvky: 83
Registrován: 07 říj 2013, 02:00

#35 Příspěvek od pettter »

MiloPS3 píše:...to vsechno je uvedeny v soubore k prislusnemu procesoru tady v p16f88.inc...
Tak do toho .inc pozerám ako hus do piva a... hmm... ako by som to... som z toho oné... magor?
Neviem čo máš Ty v tom .inc, ale ja tam mám len hex hodnoty pridelené k výrazom (EQU). Príde mi to ako tabuľka s cenami za výrazy, akurát sú tie ceny v kryptomene HEX a to bez DPH.
Napr.:

Kód: Vybrat vše

;       Register Definitions
W                EQU  H'0000'
F                EQU  H'0001'
;----- Register Files -----------------------------------------------------

;-----Bank0------------------
INDF             EQU  H'0000'
TMR0             EQU  H'0001'
PCL              EQU  H'0002'
STATUS           EQU  H'0003'
Aha teraz mi došlo, že k znaku w je priradená hodnota 0000h, alebo 0000 0000b, alebo 0dec. A k znaku f je priradená hodnota 0001h, či 0000 0001b, či 1dec. Takže ak je uvedené:

Kód: Vybrat vše

INCF   DELAY, f
znamená to že ak predpokladáme že DELAY má hodnotu pred príkazom napr.: 0010h, tak po príkaze bude mať hodnotu 0011h?

AK by som použil:

Kód: Vybrat vše

INCF   DELAY, w
tak mi pridá nič, nulu a teda je to akoby som zadal NOP?

Uživatelský avatar
MiloPS3
Příspěvky: 259
Registrován: 07 srp 2010, 02:00

#36 Příspěvek od MiloPS3 »

jak je uvedeno pro DECF
Od obsahu registru je odečtena jednička a výsledek je uložen do střadače pro d=0 nebo do registru pro d=1.
stridacen je myslen registr W ( ma adresu 0) neboli pracovni registr, pres nej se toci vsechny hodnoty,
takze pokud je v prikazu W neboli 0 tak se vysledek ulozi do W a registr zustane nezmenen -> incf "10" , W -> v registru 10 v W 11
pokud tam bude F neboli 1 tak se ulozi vysledek do registru -> incf "10" , F -> v registru 11

Uživatelský avatar
pettter
Příspěvky: 83
Registrován: 07 říj 2013, 02:00

#37 Příspěvek od pettter »

Aha, takže to w a f na konci nie je hodnota, ktorá sa pričíta, alebo odčíta, ale parameter ktorý určí v ktorej časti MCU sa výsledok objaví, či uloží??? V reg. W ake je použitý znak w, alebo v mnou zadanom registri aj je požitý znak f.

A príkaz INCF a DECF zvýši, alebo zníži výsledok vždy o jedničku???

Začína mi svitať, ja som sa totiž domnieval, že tým parametrom (w, f) môžem určiť koľko sa pričítava, či odčítava a za boha som nevedel ako a kde zadám koľko sa má odčítať...

Uživatelský avatar
MiloPS3
Příspěvky: 259
Registrován: 07 srp 2010, 02:00

#38 Příspěvek od MiloPS3 »

ano
ano

Uživatelský avatar
pettter
Příspěvky: 83
Registrován: 07 říj 2013, 02:00

#39 Příspěvek od pettter »

Díky. Zas o jednu puzzlu viac v obrázku...

Ešte ma napadlo, že ak namiesto ´w´ zadám 0, alebo namiesto ´f´ zadám 1, tak je to to isté.

Teda:

Kód: Vybrat vše

DECF   NIEČO, f
DECF   NIEČO, w
je to isté ako:

Kód: Vybrat vše

DECF   NIEČO, 1
DECF   NIEČO, 0
???

Som to skúsil a debuger to pri simulácii nevyhodnotil ako chybu.

Uživatelský avatar
MiloPS3
Příspěvky: 259
Registrován: 07 srp 2010, 02:00

#40 Příspěvek od MiloPS3 »

Prekladac na miste od kud kam ocekava 0 nebo 1 a v jaky podobe mu to podas je uplne burt

Kód: Vybrat vše

leva_kapsa EQU 0
prava_kapsa EQU 0b1

DECF FSR,leva_kapsa
DECF FSR,prava_kapsa

Uživatelský avatar
Atlan
Příspěvky: 4499
Registrován: 10 kvě 2004, 02:00
Bydliště: Košice

#41 Příspěvek od Atlan »

Este tak 3 strany asm, a dostaneme sa k deleniu a nasobeniu a vysledkom bude prechod na C jazyk.
Teda akho z toho. Nepicne uz pri porovnavani 2 res viacerych cisel.

Uživatelský avatar
pettter
Příspěvky: 83
Registrován: 07 říj 2013, 02:00

#42 Příspěvek od pettter »

Atlan píše:Este tak 3 strany asm, a dostaneme sa k deleniu a nasobeniu a vysledkom bude prechod na C jazyk...
Toto je starý a nikdy nekončiaci spor. Asi máš pravdu, že skončím na C. Ale čosi som o tom prečítal na Microchipe a ta o.i. uvádzajú:

"Kľúčovou výhodou používania jazyka na vysokej úrovni (napríklad C, Fortran alebo Basic) je to, že programátor nemusí chápať architektúru použitého mikroprocesora; znalosť architektúry je ponechaná kompilátorovi.
Napríklad ... osoba, ktorá píše program na vysokej úrovni, vie o správe pamäte málo alebo nič, táto úloha bola delegovaná na softvérového inžiniera, ktorý napísal kompilátor..."

Takže preto assembler, aby som poznal "zač je toho Loket"...

Uživatelský avatar
MiloPS3
Příspěvky: 259
Registrován: 07 srp 2010, 02:00

#43 Příspěvek od MiloPS3 »

pokud zustanes u mikrocipackyho Cka tak ten "citat" ber s velkou rezervou..

Uživatelský avatar
ZdenekHQ
Administrátor
Administrátor
Příspěvky: 25593
Registrován: 21 črc 2006, 02:00
Bydliště: skoro Brno
Kontaktovat uživatele:

#44 Příspěvek od ZdenekHQ »

Aplikace instrukce MUL a DIV způsobila kdysi docela zásadní "boj" mezi vyznavači 8-bit procesorů Intel vs. Microchip. Na co je na čipu třeba AD převodník, když tam chybí základní podpora matiky... A naopak.
Pro moje oslovení klidně použijte jméno Zdeněk
Správně navržené zapojení je jako recept na dobré jídlo.
Můžete vynechat půlku ingrediencí, nebo přidat jiné,
ale jste si jistí, že vám to bude chutnat[?
]

Uživatelský avatar
pettter
Příspěvky: 83
Registrován: 07 říj 2013, 02:00

#45 Příspěvek od pettter »

PIC16F88
Assembler v MPLAB X IDE

Ďakujem Vám za Vaše poznámky a odpovede na moje noob´s questions...

A tak pridám ďalšiu!
Mocem sa okolo nepriameho adresovania. Takže soudruzi, kontrolní votázka:
- zápisom do INDF zapisujem vlastne do FSR+STATUS bit7 (výber BANK) ???
- FSR+STATUS bit7 si však dopredu musím nastaviť ???

Predpokladám, že je to tak a tak ďalšia otázka je, že ako sa postupne posúvam po bunkách pamete, ak chcem ukladať do, či čítať z buniek.
Napr. chcem uložiť hodnotu z:
- PORTA do bunky BANK0-0x20
- PORTB do bunky BANK0-0x21
- PORTC do bunky BANK0-0x23...

Ako dosiahnem to posunutie medzi bunkami? Inkrementáciou FSR?
Napr. takto?

Kód: Vybrat vše

MOVF   FSR,0x20   ;predpokladám že STATUS IRP = 0, takže BANK0
MOVF PORTA,W
MOVWF INDF
INCF FSR,f
MOVF PORTB,W
MOVWF INDF
INCF FSR,f
MOVF PORTC,W
MOVWF INDF
...
Iný príklad:
- FSR+STATUS bit7 mám nastavené na adresu 0x20 v BANK0 BCF STATUS,IRP (STATUS bit7 = 0 = BANK 0/1) MOVF FSR,0x20
- zápisom MOVF INDF,0x01 vložím hodnotu 01 hex (1 dec, 0000 0001 bin) do adresy 0x20 BANK0. Ako sa posuniem na adresu 0x21 BANK0?

Napr. takto?

Kód: Vybrat vše

MOVF   FSR,0x20   ;nastavím prvú adresu na 0x20
MOVF INDF,0x01   ;vrazím do nej hodnotu 1 dec
INCF FSR,f   ;posuniem sa na ďalšiu adresu, teda 0x21
...
A nezúrte, že nechápem niektoré prosté pochody, som predsa noob.
Naposledy upravil(a) pettter dne 24 bře 2018, 13:22, celkem upraveno 2 x.

Odpovědět

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