請教使用pic12c508 內部rc震盪問題?
|
||||
---|---|---|---|---|
高級會員
|
各位大哥:
小弟以前沒有使用PIC MCU內部RC震盪器的經驗我需要注意什麼事項? 我目前需要使用pic12c508我看到兩行指令我不清楚 程式最前面他需要load rc 校正值到OSCCAL register 但是為何要這樣寫 org 0x1ff org 0x000 movwf OSCCAL
發表於: 2004/6/12 9:28
|
|||
|
Re: 請教使用pic12c508 內部rc震盪問題?
|
||||
---|---|---|---|---|
新會員
|
我剛開始使用PIC就是使用這顆IC,曾經出現過很大的問題,就是在頻率校正,因為代理商跟我說他的程式語法及暫存器
都跟54一樣,結果程式寫好了,實際請他們試燒也沒有問題, 用了一年多突然有一次出了大問題,整批IC通通沒有動作,結果他們查的原因是因為我的程式開頭,沒有做 org 0x1ff org 0x000 movwf OSCCAL 這個動作,所以才會使的IC完全沒動作,後來另一家代理商告訴我,是 之前這家代理商出錯型號給我才會造成這樣的現象, 我原先是使用508A,而那一次他們燒508給我。 後來的這家代理商告訴我508A已經修改過,所以前面不加校正也沒問題。 雖然後來我已經都在程式起點加上這個較正值,但是我還是很納悶,即使不校正頻率,會不準確而已應該不會不動作,是不是請MICROCHIP的FAE給我們指導一下。
發表於: 2004/6/13 9:37
|
|||
|
Re: 請教使用pic12c508 內部rc震盪問題?
|
||||
---|---|---|---|---|
版主
|
使用PIC12C50X(A)內部RC振盪的正確方法是:在程式記憶體的第0行位置,加入MOVWF OSCCAL的指令,爾後程式就會以4MHz,誤差幾個%的速度執行,就這樣。為什麼呢?待我慢慢道來:
話說PIC12C50X(A),從DATA SHEET來看,雖然說它的重置向量號稱是在0x00的位置,其實,由於它是12bit的架構,就和PIC16C5X一樣,真正的重置向量應該是在程式的最後一行!以508(A)而言,就是在0X1FF的位置。 Microchip原廠,在IC出貨之前,會在最後一行的位置,填入一個MOVLW 0X??的指令,??是Microchip測試出來的RC的校正值。於是,在POWER ON的時候,PIC會從最後一行執行,將0x??的值,利用MOVLW的執令,存入W暫存器。緊接著ROLL OVER至程式的第0行位置。所以,在第0行執行MOVWF OSCCAL,就可以將Microchip事先測定的校正值,填入OSCCAL,至此,PIC才會以校正過的4MHz來跑程式。 所以,就算是在程式第0行沒寫MOVWF OSCCAL指令,PIC也會動,只是頻率較不準而已。 隨時改變OSCCAL,就可以隨時改變PIC的振盪頻率;但是,有非常大的可能,您是調整不到您想要的頻率的;原因是:有可能某一個PIC12C50X(A),它的校正值已經調到最快的「盡磅」(台語,到底了),才剛好、勉強調到4MHz而已,您就不可能再將它的頻率調高了。 還有,有人說,犧牲許多顆PIC,測試校正值,最後再將校正值填入其它所有的PIC,以得到正確的振盪頻率,燒到其它所有PIC12C50X(A)裏頭去。這方法恐怕不可行也不需要,因為:Microchip已事先測得校正值,拿來用就可以了;而且,每一個PIC12C50X(A)的校正值都不同,而且變異性很大,根本沒有穩定或標準的校正值存在。 最後,使用PIC12C50X(A)時要注意:如果用的是OPT,燒錄器不可以燒到最後一個位置,不然校正值被覆蓋了就不妙。印象裏,有些燒錄器,如果您選項選擇不是/JW 包裝的,它就不會燒最後一個位置。如果用的是/JW包裝,也就是「開窗」的版本,在用紫外光燈清除資料之前,一定要記得先將裏頭的校正值讀出來、記起來;然後在燒錄時,再把它燒回去。習慣上,我會把校正值讀出來後,用鉛筆將它寫在IC的肚子上,保證不會被擦掉。切記!!!! 突然想起來,從右方的「江湖一點訣」也可以看到一些有關於PIC12CXXX的用法。
發表於: 2004/6/14 10:20
|
|||
|