Re: PIC18F6490 計時問題...
|
||||
---|---|---|---|---|
中級會員
|
ok好了....
原來少了一行 TMR1L = 0x00; 加了這一行就正常了,一秒跳一次....~_~ 另外順便請問一下板大.... PIC18F6490 和 PIC18LF6490 差異在哪? 看Data sheet是表示是低功耗的... 那如果我用PIC18F6490 開發.... 後來改成 L 系列的不知道會不會有影響..... 看Data sheet只有寫說會因為電壓越低讓工作頻率降低... 那如果我是用內部震盪器的....會有影響嗎? 另外,data sheet 411頁寫說PIC18F6490 標準電壓範圍為4.2~5.5V PIC18LF6490為2.0~5.5V 這地方很奇怪,我們現在電壓都是給3V 跑起來也沒什問題,可是我們用的是PIC18F6490 而不是"L"系列的....剛剛又去確認了一下型號.... 跟data sheet 前面幾頁的規格標示好像對不太起來... 這是寫錯嗎?還是我會錯意?
發表於: 2008/3/27 10:47
|
|||
|
Re: PIC18F6490 計時問題...
|
||||
---|---|---|---|---|
中級會員
|
感謝版主回覆...
把 PIE1bits.TMR1IE 改為 1 後果然可以動作了.... 小弟今年年初才開始接觸PIC,所以真的功力有點2266~_~ 剛剛已經去下載教材,等等在來惡補一下..... 不過還有個問題就是,雖然會計時了 不過都是兩秒計時一次,設定值如第一次的PO文內容... 完全沒去動.... 後來我有去改 TMR1H 的值,不管數值怎改.. 永遠秒數都是兩秒跳一次~_~... 我在去試了一下除頻改成1:2,秒數會變兩倍.... 變四秒跳一次...所以除頻這部分應該是ok的...(之後又調回1:1) 我一秒跳一次TMR1H 要改成0x80沒錯吧? 可是似乎都沒用,還是兩秒跳一次..... (改成其他值也是兩秒跳一次) 有用示波器去量波形,確定都是固定兩秒interrupt....
發表於: 2008/3/27 10:44
|
|||
|
Re: PIC18F6490 計時問題...
|
||||
---|---|---|---|---|
版主
|
PIE1bits.TMR1IE = 0; 要改為= 1 ,這樣中斷才可以打開。
看你的程式,似乎對 PIC18F 的中斷還不是很熟,你還是使用 PIC16F的中斷方式。建議你看一下 W401 C18 教材裡的第五章裡有關高、低優先中斷的設定。
發表於: 2008/3/26 17:38
|
|||
|
PIC18F6490 計時問題...
|
||||
---|---|---|---|---|
中級會員
|
請問一下大大...
我現在使用PIC18F6490來做計時並將結果顯示在LCD上... 就是電子時鐘...不過現在遇到一個問題...找好久找不到原因... 接外部T1震盪器(32767)做計時... PIC則是使用內部的RC震盪器 現在問題是,沒法進入Interrupt..... 下面是該程式,找好幾天了,還是找不出問題, 是否有高手大大能幫我看問題出在那... #pragma config OSC =INTIO67 #pragma config FCMEN=OFF #pragma config IESO =OFF #pragma config PWRT =OFF #pragma config BOREN=OFF #pragma config WDT =OFF #pragma config DEBUG=OFF #pragma config XINST=OFF void InterruptHandlerHigh (void); void main (void) { LCD_CONFIG_R(); //這是我LCD的設定函式,可不用理會 DisplayOn(); //開啟LCD全亮 Init_TMR1(); INTCONbits.GIE = 1; INTCONbits.PEIE = 1; while(1); } void Init_TMR1(void) { TMR1H = 0x80; T1CONbits.RD16 = 1; T1CONbits.T1RUN = 1; T1CONbits.T1CKPS1 = 0; T1CONbits.T1CKPS0 = 0; T1CONbits.T1OSCEN = 1; T1CONbits.T1SYNC = 1; T1CONbits.TMR1CS = 1; T1CONbits.TMR1ON = 1; PIE1bits.TMR1IE = 0; PIR1bits.TMR1IF = 0; } #pragma code InterruptVectorHigh = 0x08 void InterruptVectorHigh (void) { _asm goto InterruptHandlerHigh //jump to interrupt routine _endasm } #pragma code #pragma interrupt InterruptHandlerHigh void InterruptHandlerHigh () { if (PIR1bits.TMR1IF == 1) { PIR1bits.TMR1IF = 0; SEC++; if (SEC > 59){ SEC = 0; MIN++;} if (MIN > 59){ MIN = 0; HR++;} if (HR > 23 ) { HR = 0;} S1Num(MIN/10); //此行和下面幾行把值show到LCD S2Num(MIN%10); //可不用理會 S3Num(SEC/10); S4Num(SEC%10); TMR1H = 0x80; } } 程式沒幾行,但就是不會進入InterruptHandlerHigh... 找好久找不出問題點.... 補充,PIC使用內部的RC震盪器,另外硬體部分 T1震盪器是直接接到T1OSO、T1OSI,沒有接電容
發表於: 2008/3/26 16:02
|
|||
|