PIC16F628A - zmena hodnoty v registroch

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

Moderátor: Moderátoři

Zpráva
Autor
Uživatelský avatar
dudo02
Příspěvky: 1003
Registrován: 27 úno 2007, 00:00

#31 Příspěvek od dudo02 »

Tak som zmenil skoro vsetky GOTO na CALL, ale je to v podstate jedno, lebo nepouzivam RETURN.
Ja totiz idem z :
A1 na A0,alebo A2.
A2 na A1,alebo A3.
Atd...

To vnorenie mam max. 3-urovnove.
Skusim sa spyta inac - je mozne ulozit do registrov nazov navestia? Alebo cislo riadku v programe?
Uživatelský avatar
Atlan
Příspěvky: 4514
Registrován: 10 kvě 2004, 00:00
Bydliště: Košice

#32 Příspěvek od Atlan »

Nastuduj si vyvojove diagramy lebo z toho nikto nevyjde. Na test tlacidiel si urob podprogram a volaj hoo call return. Multiplex displeja maj v preruseni kludne odvodenom od sinusovky.
Proste mas zlu koncepciu. Program sa ma pisat od od vyvojoveho diagramu.
Neviem co je B1 a B2 tak ze tazko radit.
Uživatelský avatar
dudo02
Příspěvky: 1003
Registrován: 27 úno 2007, 00:00

#33 Příspěvek od dudo02 »

Tak som skusil okomentovat B1.Ostane Bcka su rovnake, rozdiel je v inych hodnotach vkladanych do registrov a odkazuju na ine navestia pri stlaceni UP, alebo DOWN.

A1 az Ax su to iste ,akurat sa v nich navyse testuje tlacidlo WELD, ktore zavola podprogram samotnej sekvencie zvarania. Tu sa vkladaju hodnoty do registrov samotneho zvarania.


Da sa teda ulozit nazov navestia, alebo cislo riadku ako hodnota do registra? - Alebo sa pytam blbost?
Nie je to nic, co by som nutne potreboval,len ma to zaujima.

Teraz ak chcem nastavit predzvar, stlacim simultalne UP/DPWN a skocim do B1(10ms). Tam preskacem do B3(30ms) a stade sa vratim na A.
Pri opetovnej potrebe nastavenia predzvaru vsak opet skocim na B1.

Rad by som vsak skocil na B3, aby som vedel aka bola posledna nastavena hodnota.
No moja myslienka je taka,ze pri opustani B3, si niekde ulozim ze som z neho vyskocil a pri novom skoku z A do B si tuto hodnotu nacitam.

Kód: Vybrat vše

PRE10   CALL    PRESTEST    ;PODPROGRAM TESTUJUCI SIMULTANNE STLACENIE UP/DOWN.
   
   MOVLW   0XCF       ;VLOZENIE HODNOTY DO REGISTRA CASOVEJ SMYCKY PREDZVARU
   MOVWF   Z1       ;
   MOVLW   0X08       ;
   MOVWF   Z2       ;
   MOVLW   0X1       ;
   MOVWF   Z3       ;VLOZENIE HODNOTY DO REGISTRA CASOVEJ SMYCKY PREDZVARU
   
   MOVLW   0X7F       ;MULTIPLEX DYSPLAY - ZOBRAZENA HODNOTA 10ms
   MOVWF   PORTB       ;
   MOVWF   PD1       ;
   BSF   D1       ;
   CALL    TIME1       ;   
   BCF   D1       ;
   MOVLW   0X4F       ;
   MOVWF   PORTB       ;
   MOVWF   PD2       ;
   BSF   D2       ;
   CALL    TIME1       ;
   BCF   D2       ;
   MOVLW   0X40       ;
   MOVWF   PORTB       ;
   MOVWF   PD3       ;
   BSF   D3       ;
   CALL    TIME1       ;
   BCF   D3       ;MULTIPLEX DYSPLAY - ZOBRAZENA HODNOTA 10ms
   
   BTFSS   UP       ;TEST TLACIDLA UP, AK JE STLACENE ZAVOLAJ 20(B2)
   CALL    PRE20
   BTFSS   DOWN       ;TEST TLACIDLA DOWN, AK JE STLACENE ZAVOLAJ 0(B0)
   CALL    PRE0
   CALL    PRE10       ;NEBOLO STLACENE NIC,VRAT SA NA ZACIATOK A VSETKO ZNOVA.
Přílohy
Bodovacka.png
(20.94 KiB) Staženo 103 x
Uživatelský avatar
Atlan
Příspěvky: 4514
Registrován: 10 kvě 2004, 00:00
Bydliště: Košice

#34 Příspěvek od Atlan »

Tak teoreticky vies skocit kde len chces instrukciou GOTO $-x kde x cislo o ktore sa to posunie, znamienko predtym udava ci bude skok v pred alebo v zad. Inak strasna pracascina.

Nechapem preco si to tak komplikujes a pouzivas dve tlacidla a to ako fakt.
pouzitie 4 tlacidiel je ok a na takych hovadinach sa nesetri.
Daj schemu mam. To simultane tlacenie vyhod daj tam este jedno tlacisdlo a cez 2 diody ho zapoj na tie dva piny.

Cely tvoj problem je hlavne ze tam mas malo tlacidiel.

Ale je aka moznost zapnes to a nacitas z registra pre *predzvar hodnotu do nejakej premenej X dalej vies tu hodnotu X menit tlacidlami hore dole tj zvecsovat zmensovat, po opetovnom simultalnom stlaceni tlacidiel horedole, i tu premenu X prekopirujes do registra *predzvar.

Teraz si nacitas hodnotu z registra pre *zvar do premenej Y a tu zase vies upravovat tlacidlami hore dole, po spolocnom stlaceni horedole zober hodnoty Y a zapis do registra *zvar

MPlab umoznu je definovat hodnoty pr iinicialixzacii, tak ze vies nadefinovat napr zvar=20 a predzvar=40 tym padom v programe pri prvom zapnuti budes nastavovat casi od tychto hodnot co je prakticke (ak das osvecene hodnoty tak nebudes nastavovat len hned zvarat)[/b]
Uživatelský avatar
Chenzee
Příspěvky: 464
Registrován: 26 čer 2007, 00:00
Bydliště: Vysočina

#35 Příspěvek od Chenzee »

Ano, program není dobře napsaný. Protože ale nevíme, zda je toto tvůj první a poslední program nebo se tím hodláš zabývat i dál, tak nyní vezmu v potaz jen to, že jsi nějak došel k cíli a další start už nebude :lol: ... tedy vyřešíme jen tento program. Tvoje potřeba je po zajetí do sekce B skočit na takové Bx, ze kterého bylo naposledy vyskočeno. Berme v potaz, že používáš všude GOTO, což je vzhledem k tvému řešení programu "dobře". Tedy principiálně to uděláš tak, že po skoku na B se zeptáš, jaká byla poslední svářecí hodnota a dle ní skočíš do příslučného Bx. Místo hodnoty svářecího času si můžeš udělat registr třeba "Last_prog" a tam si při výstupu z Ax či Bx uložiš číslo, na které se budeš ptát v A nebo B a dle toho skočíš do Ax nebo Bx. Kapíš to?
Žádnej učenej z nebe nespadl ...
Uživatelský avatar
dudo02
Příspěvky: 1003
Registrován: 27 úno 2007, 00:00

#36 Příspěvek od dudo02 »

Atlan - schema v prilohe. Hardware je uz hotovy, cize tlacidlo pridavat nebudem. Ja som povodne zacinal s verziou 10polohoveho prepinaca pre casy zvaru, samotny predzvar bol konstantny. Potom som si povedal ze skusim display.Pri prvych pokusoch zvarania som zistil, ze rozsah zvaracich casov ma byt rozsiahlejsi. Taktiez samotny predzvar je dobre mat regulovatelny - hoci to nie je nijak kriticke. A tak som sa dopracoval az sem.

Jeejda - datasheet k MCU uz mam davno, za ten MPLAB vdaka, je tam vela veci, ktorim som nerozumel a este ani nerozumiem, ale tu to je popisane. Mam co studovat.

Chenzze - Je to presne tak ako pises. Toto je moj prvy program. Ja som sa aj pytal, ci by mi niekto nenacrtol vyvojovy diagram, ale par ludi mi napisalo len ich predstavu v texte, comu som vobec nerozumel. Tak som zacal, ako som vedel - so zobrazenim cislice na LED displeji, Multiplex atd...V ramci hobby uz planujem dalsi projekt, ale ak by som sa tomu chcel venovat profesionalne, tak by som celkom urcite isiel na nejaky kurz. Vo forme samouky je to zlozite a clovek si lahko spravi zle navyky v zakladoch - asi to najhorsie ,co sa pri uceni sa novych veci moze stat. Stale mi vrtalo v hlave, ako moze procesor na zaklade 0 a 1, robit take uzasne veci. Teraz ma to posunulo, do pozicie ,kde mi to uz hlavu netrapi.

Skusal som instrukciu

Kód: Vybrat vše

goto   $+Z

Kde Z je register do ktoreho ukladam hodnotu pri vyskoceni z Bx, ale nefunguje to.

Tedy principiálně to uděláš tak, že po skoku na B se zeptáš, jaká byla poslední svářecí hodnota a dle ní skočíš do příslučného Bx
Toto spravim akou instrukciou ? Pozeral som sa, ale neprisiel som na nic rozumne - len same neuspesne pokusy - uz druhy den :pako:
Přílohy
xxx_373.png
(29.69 KiB) Staženo 118 x
Uživatelský avatar
procesor
Příspěvky: 5286
Registrován: 02 říj 2009, 00:00
Bydliště: PO

#37 Příspěvek od procesor »

V RAM si jeden register vyhraď pre program A a jeden pre B
napr. STA a STB. Môžeš potom uložiť až 256 programov A a 256 programov B. Pri menšom počte je to jednoduchšie. PCHL reg stačí vynulovať. Ako uvádzam nižšie od adresy 0x0080 sa zmestí 64 A-programov a 64 B-programov.

Niekde si uložíš GOTO tabuľlu (jedno za druhým) pre programy A a potom aj pre programy B

Kód: Vybrat vše

   ORG  0x0080
TAB_A  GOTO PROGA0
    GOTO PROGA1
.
.
TAB_B   GOTO  PROGB0
     GOTO  PROGB1

.
.
; v aktualnom programe B použijes  súcet STA + TAB_A takto:
     MOVLW   TAB_A
     ADDWF    STA,w
     CLRF        PCHL
     MOVWF    PCL    ; teraz sa prepíše PCL novou hodnotou a zároveň sa presunie PCHL do PCH.
; nasledovať bude inšrukcia s tabuľky TAB


Samozrejme STA a STB si ukladáš v prebiehajúcom programe.

Edit:
Aj toto sa mi zdá byť zbytočné komplikovanie.
Všetky tie "programy sú rovnaké, iba sa menia konštanty. Nevidím dôvod, aby ich obsluhovali rôzne programy.

Treba sa naučiť ukladať premenné do EERAM a späť načítavať po reštarte do RAM.

Ten multiplex segmentov by pekne mohol robiť v isr module (prerušovací systém) , podobne aj ohľadávanie tlačitok by mohlo byť od programu nezávislé (spolu s filtrovaním).
Ak by ešte aj časovanie (počítanie) bolo vyriešené prerušovacím systémom cca po 10ms (dá sa zvoliť), aj časy by sa mohli nastavovať plynule a zobrazovať v reáli o 0 po 990ms.

edit 2
A po tej schéme tu bude kopec múdrujúcich :D
Zrejme ten MOC 3023 v spojení s PORTA,5 moc nefunguje.
edit 3 Asi to bude s MOC3033/3053 bez ZC
Uživatelský avatar
Chenzee
Příspěvky: 464
Registrován: 26 čer 2007, 00:00
Bydliště: Vysočina

#38 Příspěvek od Chenzee »

No takto, samozřejmě to if bude uděláno po assemblerovsku :wink:
Přílohy
Obr.png
(24.27 KiB) Staženo 118 x
Žádnej učenej z nebe nespadl ...
Uživatelský avatar
dudo02
Příspěvky: 1003
Registrován: 27 úno 2007, 00:00

#39 Příspěvek od dudo02 »

No toto mi bolo jasne - skor som sa pytal prave na to,ako sa to da spravit v assemblery :) .

Jeejda - nejak som to nepochopil - to by bolo vhodnejsie pouzit interny pull up?

procesor - schemu bez s rezervou. Ano mas pravdu je tam iny optoclen - randoom phase detector. Hardware je funkncny, nakolko som uz nejake akupacky pozvaral a spinanie vyzera byt v maxime - prudove narazy a bliknutie svetiel v dielni tomu nasvedcuju...

Ok,tak skusim spravit uplne novy program.
Preruseniu som sa nejako snazil vyhnut, asi kvoli tomu,ze mu uplne nerozumiem...Ale vidim ze prave prerusenie sa vyuziva velmi casto.

Ok cize:
-Hlavna smycka

Kód: Vybrat vše

start
goto   $-1


-Nastavim casovac1 na 10ms a povolim prerusenie od tohoto casovaca
-po preteceni dojde k preruseniu kde mi z hlavnej smycky skoci program na urcene miesto
-na tomto mieste spravim mutiplex a otestujem tlacidla
- pri stlaceno tlacidle :
- up,skoci program na miesto kde pripocita hodnotu 10 do registra DISPLAY
-down, skoci program na miesto kde odpocita hodnotu 10 od registra DISPLAY
-weld,skoci program na miesto kde prebehne sekvencia zvaru

-register DISPLAY sa bude pouzivat pre zobrazenie hodnoty na displeji a zaroven na casy zvarania.
Takto nejako moze byt?
Ten multiplex segmentov by pekne mohol robiť v isr module (prerušovací systém) , podobne aj ohľadávanie tlačitok by mohlo byť od programu nezávislé (spolu s filtrovaním).
Tym filtrovanim myslis co?
Uživatelský avatar
procesor
Příspěvky: 5286
Registrován: 02 říj 2009, 00:00
Bydliště: PO

#40 Příspěvek od procesor »

Filtrovanie...zákmity tlačidla. To môže trvať aj dlhšie ako 20ms. Tlačidlá je dobré ošahať a stav uložiť do registra. Hlavý program si to v registri nájde, vykoná čo treba. Po každom prebehu riadiaceho cyklu si môžeš stav tlačidiel (register) presunúť do druhého registra, čím získaš info v nasledujúcom cykle štyri-info o tom tlačidle:
1- čerstvo stlačené
2-už dlhšie stlačené
3-čerstvo pustené
4-dlhšie pustené



Hlavný program beží v slučke
Podľa tlačidiel zapína porty, nastavuje časovače, zapisuje segmetové registre,vypína porty.
Stále dokola.

IT routina aktualizované časovače dekremetuje, a posiela segmetové registre na port-mux, trebárs každých 10ms, alebo aj pomalšie.

Toto používam pre začiatok a koniec IT rutiny

Kód: Vybrat vše

;**********************************************************************************
;
itvector   ORG     0x004              ; interrupt vector location
      movwf   w_temp              ; save off current W register
      swapf   STATUS,W      ; STATUS save to W   
      clrf   STATUS      ; banky do 0
      movwf   status_temp        ; save off contents of STATUS register
      movfw   PCLATH
      movwf   pclath_temp
      clrf   PCLATH
   if ITUP == 1
      pagesel   _IntRout
      goto   _IntRout
   else
;==================================================================================
   #include <Tgit60502sr.inc> ;TU JE PRERUŠOVACIA ROUTINA
;==================================================================================
   endif
RetItRut
      movfw   pclath_temp
      movwf   PCLATH
      swapf   status_temp,w
      movwf   STATUS
      swapf   w_temp,f
        swapf   w_temp,w          ; restore pre-isr W register contents
      retfie                    ; return from interrupt set up GIE


Uloží sa kontext programu (STATUS, W reg, PCHL) a potom sa všetko vráti späť, aby hlavý program mohol nerušene pokračovať.
Tie registre (w_temp, status_temp, pchl_temp) je dobré umiestniť v oblasti GPS od 0x70 aby sa nemuselo riešiť "bank-ovanie" zložito, pretože prerušenie môže vzniknúť a v inom stave ako BANK0.

Samotná IT rutina môže byť aj v inom PAGESEL0 pri väčších pamätiach, preto je tam aj inštukcia

Kód: Vybrat vše

        pagesel     IntRout
        goto          IntRout 


V prerušovacom programe dekrementuj čítače (môžeš ich mať aj viac pre rôzne použitie).

V hlavnom programe nastavíš hodnotu čítača a potom sleduješ kedy sa dopočíta k nule a vykonáš čo potrebuješ. Ku každému čítaču je dobré mať aj indikátor, že sa požaduje po uplynutí času nejaká akcia. Pri zahájení akcie sa ten indikátor zhodí (vynuluje)

Takéto macro používam v IT routine. Trebárs aj 16 časovačov TIMn =TIM0....TIM15 ( n funguje až do 32)
Každému TIMeru je priradených v registri TER0 a TER1 32 bitové pole pre do ktorého sa po dočítaní čítača zapíše jednotka.
Hlavný program sleduje tento byt (timer-flag) a vie že časovač práve dočítal.

Kód: Vybrat vše

; CASOVAC TIMn pre interupt rutinu

RTM_M      macro   n
      tstf   TIM#v(n)
      BZ   GoTIM#v(n+1)
      decf   TIM#v(n),F
      _Z_TSC
      bsf   TER#v(n/8),#v(n-(n/8)*8)
GoTIM#v(n+1)
      endm


V hlavnom programe sa časovač štartuje zase ako makro ak hodnoty časovačov sú uložené v EERAM

Kód: Vybrat vše

; Code pre Start casovaca TIM(timer) s konstantou TK(tk)

START_TIM_M   macro   timer,tk
StartTIM#v(timer)TK#v(tk)
      movlw   TK#v(tk)-H'2100'
LETR#v($)
   if  LETR#v($)/2048 == 0
      call   EEData_Read      
   else      
      pagesel p0
      call   EEData_Read   
      pagesel p1
   endif
      movwf   TIM#v(timer)
      bcf   TER#v(timer/8),#v(timer-(timer/8)*8)
      endm

EEData_Read je funkcia, ktorá vyberie z pamäte EERAM príslusnú hodnotu daného časovača. Na záver makra sa hodnota zapíše do časovača a vymaže sa (pre istotu) príslušný timer-flag-bit v registri TER0/1.
Zápis makra je zložitý, lebo platí pre každý TIM0...31 s príslušným flagom.

V programe je potom jednoduché

Kód: Vybrat vše

.
.
JeVozNaIS               ;staci ak na jednej slucke je voz - nahod TIM2,tk2            ;
      call   StartTIM2TK2   ; tk2 cca ( 0,25 - 0,5 sekundy doporuceny )
NaEndIS
.
.
      call   StartTIM12TK12
.
.   

;******************************************
;   SLUCKY
      START_TIM_M   2,2   ; staci 0,5sek
      return   
;testovanie fotosyst
      START_TIM_M   12,12   ;
      return   
;******************************************



Vyššie popísané makro casovača v IT_routine sa zapíšu napr. takto.
Na úpravu rozsahov je v príklade ešte použité ďalšie delenie pre čítače 7,8,9 a ďalšie pre 10,11,12 a tiež pomalšie pre 13, 14, 15

Kód: Vybrat vše

CasovaceIt   
; takt osc/4
;compare na hodnotu nastavenu pri inicializacii
;CCPIF
      banksel   WTCON1   ; preddelicka
      decf   WTCON1,F
      BNZ   WEndCas

      movlw   WTCON1K   ; obnov reddelicku
      movwf   WTCON1
STWCas
      clrwdt
      incf   WTCON,F   ; 62,5ms
W1Cas            ;         CWC1         CWC2
      movfw   WTCON   ;              max T   32     64     128    256    512
      andlw   CW1C   ;konstanta pre W2Cas  0X00 / 0X01 / 0X03 / 0X07 / 0X0F /
      _Z_TSS      ;                      1/2    1/4    1/8
      goto   WEndCas
            ; konstanta pre CWC1 0x01
      RTM_M   0   ;   ***31,875sek.*** krok 0,125s
      RTM_M   1   ;
      RTM_M   2
      RTM_M   3
      RTM_M   4
      RTM_M   5
      RTM_M   6
W2Cas
      movfw   WTCON
      andlw   CW2C   ;konstanta pre W2Cas  0x07
      _Z_TSS
      goto   WEndCas

      RTM_M   7   ; max. ***127,5sek. krok  0,5sek
      RTM_M   8
      RTM_M   9
W3Cas
      movfw   WTCON
      andlw   CW3C   ;konstanta pre W3Cas  0x1F
      _Z_TSS
      goto   WEndCas

      RTM_M   10   ; max.  ***510sek.  krok  2
      RTM_M   11
      RTM_M   12 
W4Cas
      movfw   WTCON
      andlw   CW4C   ;konstanta pre W4Cas  0x3F
      _Z_TSS
      goto   WEndCas

      RTM_M   13   ;***1020sek.=**8,5min krok 4s
      RTM_M   14   ; 4s krok max  1000s/  16min
      RTM_M   15
W5Cas
;      RTM_M   16   ;
;      RTM_M   17   ;   
;      RTM_M   18   ;
;      RTM_M   19   ;
;      RTM_M   20   ;
;      RTM_M   21   ;
;      RTM_M   22   ;
;      RTM_M   23   ;

WEndCas
      _TACT_S      ; idikacia ze preslo 0.125 sec / 0.0625sec
      bcf   PORTA,0
      _TMR1IF_C      ; povodne sysytemy pracovali bez CCP
      _CCP1IF_C      ; CCP sa nastavi na lub. dlzku TMR1
            ; mozno tak urychlovat cyklus riadenia
; pri 14

EndItRout
      banksel 0
   if ITUP == 1   
      pagesel   0
      goto   RetItRut
   endif


Makrá sú výhodné pri častom používaní rovnakých algoritmov nad rôznymi registrami a adresami, prípadne aj bitmi. Takéto adresovanie však je možné iba počas prekladu. Prekladač je schopný matematickými a logickými operáciami vygenerovať podľa parametrov makra adresy registrov a adresy návestí, prípadne aj bitov v registroch.
Naposledy upravil(a) procesor dne 26 úno 2016, 20:04, celkem upraveno 1 x.
Uživatelský avatar
Chenzee
Příspěvky: 464
Registrován: 26 čer 2007, 00:00
Bydliště: Vysočina

#41 Příspěvek od Chenzee »

Tak zde to je. Neber to jako nejlepší řešení ale jedno z více a takové, které v tuto chvíli vstřebáš. Elegantní je to přes tu tabulku, jak bylo uvedeno výše.

Kód: Vybrat vše

   LAST_PROG EQU 0x7F
;--------------------------
   MOVLW  0x01 ; ZDE SI ZADEJ CISLO PROGRAMU, KAM CHCES SKOCIT (0-3)
   MOVWF  LAST_PROG
   MOVLW  0x01
;--------------------------
   INCF  LAST_PROG,F
         
   SUBWF  LAST_PROG,F
   BTFSC  STATUS,Z
   GOTO  LAST_PROG_0 

   SUBWF  LAST_PROG,F
   BTFSC  STATUS,Z
   GOTO  LAST_PROG_1

   SUBWF  LAST_PROG,F
   BTFSC  STATUS,Z
   GOTO  LAST_PROG_2

   SUBWF  LAST_PROG,F
   BTFSC  STATUS,Z
   GOTO  LAST_PROG_3

LAST_PROG_0
   NOP
LAST_PROG_1
   NOP
LAST_PROG_2
   NOP
LAST_PROG_3
   NOP
Žádnej učenej z nebe nespadl ...
Uživatelský avatar
procesor
Příspěvky: 5286
Registrován: 02 říj 2009, 00:00
Bydliště: PO

#42 Příspěvek od procesor »

Pozor na pretečenie tabuľky GOTO Prog_01.... cez hranicu adriey 0x00FF. Na uplnú nezávislosť je potrebné predom upraviť aj PCLATH pri pretečení PCL. :roll: Takže-tak.
Uživatelský avatar
Chenzee
Příspěvky: 464
Registrován: 26 čer 2007, 00:00
Bydliště: Vysočina

#43 Příspěvek od Chenzee »

No máš je pěkně vyvalený :lol: :lol: :lol:
Žádnej učenej z nebe nespadl ...
Uživatelský avatar
procesor
Příspěvky: 5286
Registrován: 02 říj 2009, 00:00
Bydliště: PO

#44 Příspěvek od procesor »

Ak si neustriehneš umiestnenie tabulky, inštrukcia AND s 0x0F nerieši preťečenie tabulky nad 0x00FF.
Uživatelský avatar
procesor
Příspěvky: 5286
Registrován: 02 říj 2009, 00:00
Bydliště: PO

#45 Příspěvek od procesor »

No vidíš, že si na to prišiel s tým ORG 0x000a.

A keď správne naplníš W reg to AND 0xF ti je na figu.
Pri blbom naplnení W ti to bude bežať niekde kde si nechcel.
Odpovědět

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