Dobrý den,
nevíte, prosím, někdo, jak se zachází s kalibrační konstantou, uloženou v některých uC? Konkrétně: u PIC12F629 je kalibrační konstanta zřejmě uložena na adrese 0x3FF. Vyplývá to z Template souboru, ve kterém je toto:
; these first 4 instructions are not required if the internal oscillator is not used
call 0x3FF ; retrieve factory calibration value
bsf STATUS,RP0 ; set file register bank to 1
movwf OSCCAL ; update register with factory cal value
bcf STATUS,RP0 ; set file register bank to 0
; remaining code goes here
nop
nop
nop
goto main
; emulate osccal instruction - REMOVE THIS FOR REAL PIC DEVICE!
org 0x3FF
retlw 0x80
Chápu to tak, že po resetu se nejprve provede volání na adresu 0x3FF, kde je uložena kalibrační konstanta (pro každý “kus” jiná), retlw ji ihned vrátí v registru W zpět a vzápětí se vloží do reg. OSCCAL.
Nejsem si však jist, zda rozumím výše uvedené poznámce “REMOVE THIS FOR REAL PIC DEVICE!” nebo spíše bych řekl, že nechápu, proč ty dva řádky pod tímto upozorněním tam vůbec jsou?
Pokud tomu správně rozumím, tak tyto dva řádky:
org 0x3FF
retlw 0x80
tam snad jsou jen jako příklad toho, jak to funguje?
Přece podle mne jediné, co musím po restartu udělat, je toto:
call 0x3FF ;zavolám adresu, na které je uložena kalib. konstanta
bsf STATUS,RP0 ;nastavím banku pro reg. OSCCAL
movwf OSCCAL ;šoupnu do něj kalibrační konstantu
bcf STATUS,RP0 ;přepnu banku zpátky
Prosím, potvrďte mi někdo, že to chápu správně (nebo že kecám .
Díky.
Vlasťa