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: 981
Registrován: 27 úno 2007, 01: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: 4499
Registrován: 10 kvě 2004, 02: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: 981
Registrován: 27 úno 2007, 01: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 67 x

Uživatelský avatar
Atlan
Příspěvky: 4499
Registrován: 10 kvě 2004, 02: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, 02: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: 981
Registrován: 27 úno 2007, 01: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 77 x

Uživatelský avatar
procesor
Příspěvky: 5284
Registrován: 02 říj 2009, 02: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, 02: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 69 x
Žádnej učenej z nebe nespadl ...

Uživatelský avatar
dudo02
Příspěvky: 981
Registrován: 27 úno 2007, 01: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: 5284
Registrován: 02 říj 2009, 02: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, 02: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: 5284
Registrován: 02 říj 2009, 02: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, 02: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: 5284
Registrován: 02 říj 2009, 02: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: 5284
Registrován: 02 říj 2009, 02: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ů“