12F629-čtení STATUS, RP0: Register in operand not in bank 0

Začínám s tímto MCU a v programu mám sekvenci:

BSF		STATUS, RP0    ; prepne banku 1
MOVLW	b'00111110'      ; nastaví GPIO,0 jako výstup ost. vstup
MOVWF	TRISIO

překladač (nejnovější verze MPLAB) hlásí:

Message[302] C:\USERS\PAVEL\DESKTOP\PIC\BLINK.ASM 25 : Register in operand not in bank 0. Ensure that bank bits are correct.

přitom BSF STATUS, RP0 by mělo být přepnutí do banky 1 ale prostě se nepřepne, zkoušel jsem i BCF STATUS, RP0 nepomohlo. ta sekvence je podle originál Data Sheetu. Už se s tím mořím od pátku a nic dalšího mě nenapadá, neporadil by někdo? :unamused:

:arrow_right: administrator: přejmenováno z "12F629 STATUS, RP0"

Cau, ohledne ty spravy , je to jen oznameni ze se nenachazis v bance 0, tot vse , pokud ti to vadi tak si dej na zacatek "errorlevel -302 "

LIST P=16F873A, R=DEC INCLUDE<P16F873A.INC> errorlevel -302

ohledne ty instrukce, podle ceho soudis ze to nefunguje ? v registru TRISIO nastavujes pin jestly ma bejt vstup (1) nebo vystup (0), nic vic , a v registru GPIO nastavujes bit pokud je jako vystup nebo ctes pokud je vstup ,

EDIT: a vypnout komparatory !

MOVLW 0x7 ; komparator off MOVWF CMCON

Ale ono to opravdu nefunguje, ta zpráva by mi nevadila ale to že se nepřepnu do banky 0 způsobí že se do TRISI nezapíšou správné bity a všechno mám jako výstup tak jako je to po zapnutí. Zjistil jsem to při psaní pokusného prográmku pro začátek-mám zkušenosti s 16F84 jen. Když to krokuju tak se opravdu ten bit který přepíná banky ve STATUS registru nezmění. Včerajsem ještě pátral a prostudoval několik prográmků pro tenhle MCU které se najdou na netu a TRISI se v žádném nepoužívá :frowning: ale logiku přepínání vstupů a výstupů jsem z nich nepochopil. Viz např: pandatron.cz/?566&teplotni_cidlo … _pic12f629 ten samý pin je používán jako vstup i výstup a nenašel jsem nic co by mi dávalo smysl a sloužilo pro přepínání. Komparátor vypnutý mám.

No ještě by to chtělo vynulovat ANSEL v bance 1. Jinak to mas preple na analogové vstupy.

bcf STATUS,RP0
clrf GPIO
movlw 07h
movwf CMCON
bsf STATUS,RP0
clrf ANSEL
movlw 3Ch
movwf TRISIO

No problema, hodně zdaru :wink:

629 ma jenom komparatory, viz. DS, po zapnuti sou vsechny piny nastaveny jako vstupy , TRISIO xx11 1111, v Bance 1 nastavujes vstup/vystup, v Bance0 ctes vstup , nebo pokud je nakonfigurovanej jako vystup tak meni logickou uroven L/H ,

neskousis doufam nastavit pin GP3 jako vystup ? mas dobre nastavenej typ procesoru ?

odpoledne ti sem hodim kousek funkcniho kodu na skousku , sem v prac nemam tu MPLAB

to XiXao: ANSEL 12F629 nemá, jen 12F675.

to MiloPS3: GP3 nezkouším použít vůbec, vím že po zapnutí mají být všechny piny jako vstupní ale mě se chovají jako výstupní!!! zkoušel jsem blikat s led na GP0, 1, 2 a všude mi blikala, na začátku mám inicializaci dle originál datasheetu s. 21 po přeložení mi to ale hlásí hlášku viz první příspěvek a když to krokuju tak se opravdu bit ve STATUS registru nezmění - zůstává 0 proto do TRISIO nezapíšu (jsem stále přepnutý na banku 0 a TRISIO je v bance 1) a vstupy tedy nenakonfiguruju. Kdyby to jen nechodilo tak bych předpokládal vadný PIC i když mám 2 ale když to hlásí pžímo assembler :frowning: typ PIC mám nastavený správně. Píšeš že v bance 1 nastavuju výstupy - to mi v datasheetu uniklo s angličtinou se kamarádím dle možností :slight_smile: ale mě výstupy nastavit jdou, nefunguje mi čtení vstupů - protože je jako vstupy nakonfigurované nemám. Jinak chápu že bude chyba mezi židlí a klávesnicí ale vadí mi že mi pořád nemůže docvaknout kde :slight_smile:

asi si nerozumyme, dej nam sem ten tvuj kod , kouknem na nej

LIST P=12F629, R=DEC
INCLUDE<P12F629.INC>

__CONFIG _PWRTE_ON & _WDT_OFF & _MCLRE_OFF & _INTRC_OSC_NOCLKOUT

#define VST GPIO,0 ;
#define VYST GPIO,1 ;
TMP1 equ 0x20
TMP2 equ 0x21
TMP3 equ 0x22

			;			
	org	0x00

INIT BCF STATUS, RP0
CLRF GPIO
MOVLW 07h ;naplní W 07H
MOVWF CMCON ;obsah W do CMCON
BCF STATUS, RP0
MOVLW b’00111110’
MOVWF TRISIO

Dál je blikání led a podprogrm - zpožďovací procedura a END samozřejmě.

Zkus to přeložit co ti to řekne. Dík.

no a sme doma , prekladat nic nemusim , Banka0 je kdyz STATUS, RP0 = 0, Banka1 ->STATUS, RP0 = 1 , TRISIO se nachazi v Bance1 , tudis musis mit BSF STATUS, RP0 pro nastaveni B1 :wink: , BSF nastavi bit na 1, BCF nastavi bit na 0,
ta zprava 302 je jenom informativniho charakteru, co sem psal vyse
test12F629.asm (953 Bytes)

omlouvám se, už mi z toho trochu hrabe, dal jsem sem poslední verzi ve které jsem zkusil ze zoufalství zaměnit BSF za BCF. Přikládám printscreeny ze kterých je vidět že nechodí ani ten váš příklad, nezapsalo by to ani kalibrační konstantu :frowning:

Tek printscreeny nepřikládám, nedovolilo mi to. musel bych je zmenšit aby je to připojilo a to už by nebylo čitelné.

Nedalo mi to a přeci jen screenshot posílám, potlačení erroru jsem zaremoval - když mi něco nefunguje tak mi moc nepomůže že mi to assembler nehlásí. :frowning:
PrintScreen2.JPG

Jinak ještě tu chybovou hlášku já chápu jinak: Register in operand not in bank 0. Ensure that bank bits are correct.

Chápal bych to tak že mi překladač oznamuje že to co chci zapisovat není v bance 0 - to vím, chci zapisovat do banky 1 a pokouším se do ni přepnout.

Co tohle:

movlw 07h
movwf CMCON

call 3FFFh

bsf STATUS,RP0
movwf OSCCAL

movlw b’11111110’
movwf 05h

bcf STATUS,RP0

Error[126] C:\USERS\PAVEL\DESKTOP\PIC\POKUS333.ASM 25 : Argument out of range (16383 not between 0 and 1023)
Message[302] C:\USERS\PAVEL\DESKTOP\PIC\POKUS333.ASM 28 : Register in operand not in bank 0. Ensure that bank bits are correct.

to že se nepodařilo načíst kalibrační konstantu nechám stranou, někde jsem viděl jak na to a mělo by fungovat ale na řádku 28 je: movwf OSCCAL
tedy vypadá to že žádná změna :frowning:

Dál to píše: Halting build on first failure as requested.
Jestli jsem si to přeložil správně tak překlad po první závažné chybě nepokračoval.

Omlouvám se za překlep, má tam být: call 3FFh a místo movwf OSCALL zkus napsat movwf 10h.

prikladam taky screeny ze me to funguje , v MPLABu uplne dole ja takova mala seda lista, kde se ti zobrazijou ruzny veci, je tam i udaj ve ktere bance se prave nachazis , 7 odstavecek po frekvenci ,

kalibracni konstanta se ti nacte az v MCU, v simulatoru to neres ,
v tom tvym printscreenu nevidim nic spatnyho :question: :bulb:
test_gpio.rar (544 KB)

Takže přímou adresací zápis kalibrační konstanty prošel - ale správně by projít neměl ne? 10h je v bance nula a předchozí příkaz bsf STATUS, RP0 by mě měl přepnout do banky 1 ne?
Nebo jsem úplně mimo?

A jestliže movwf CMCON neprojde a
movwf 10h ano tak to mám brát tak že je někde chyby v definici registrů v MPLAB?
Tudíž by mohla být i chyba v definici STATUS nebo RP0?
Potřeboval bych jen potvrdit jestli se moje úvahy ubírají správným směrem. Případně jestli by někdo zkusil přeložit to ve starší verzi.
Dík.

Já bych kalibrační konstantu taky neřešil prozatím, jde o to že nemohu zprovoznit žádný pin jako vstup, pátral jsem proč a došel jsem k závěru že ať zapíšu do TRISIO cokoliv chovají se mi GP0, GP1, GP2 jako výstupy! Zkoušel jsem zapsat i b´00111101´ tedy jestli to dobře chápu měly by být GP0 a GP2 vstupy (GP3 a výš neřeším). Zapisoval jsem tedy střídavě 0 a 1 do všech 3 a na všech třech pinech mi led blikala. Fyzicky na PIC ne v simulátoru. Pátrám tedy po tom jak je to možné. I kdybych snad zapisoval jinam nebo měl někde nějakou chybu tak vy všechny piny po POR měly být definované jako vstupní dle datesheetu.

otevri si DS , nalistuj si stranku 8 (page 8 ) a koukni se do tabulky 2.2 (data memory map of the 12F6xx) , OSSCAL je na adrese 90H , tudis v Bance 1 , na adrese 10H je T1CON tudis v Bance 0,

ta zprava 302 ti rika ze si v jine bance a jestly si si tim jistej ze se nachazis v jiny bance nez 0, je to jen OZNAMENI , nic spatnyho v tom neni,
myslim ze v tom mas trochu hokej

EDIT: pokud chces vsechny piny jako vstupy tak do TRISIO nic nezapisiuj, uz sou nastaveny jako vstupy, a jenom je cti z GPIO (adresa 05H / banka 0)

btfss GPIO,0     

ano, pokud si zapisoval do TRISIO 85H banka1

nevim kam si zapisoval, ale pokud si mel spatne nastavenou banku tak si je mohl prepinat vstupy<->vystupy a pak je mozny ze blikaly

OK to že je OSCALL na 10h mě špatně nasměroval jeden z předchozích příspěvků a já si to nezkontroloval. Právě že nechci všechny vstupy, stačí mi jeden vstup a jeden výstup pro začátek. Zkusím se do toho pustit od začátku ak když se opět nepodaří dám sem prográmek který podle mě funguje než by měl. Bohužel asi až zítra, dnes jsem zaneprázdněn pracovně.

Moc dík za pomoc. :slight_smile: