Re: 程式 燒錄問題
|
||||
---|---|---|---|---|
資深會員
|
只是小問題,但是就想問清楚
發表於: 2009/11/9 16:43
|
|||
|
Re: 程式 燒錄問題
|
||||
---|---|---|---|---|
資深會員
|
我懂你意思,但我是說上一個程式要怎麼抹除掉,不然會不會占太多記憶體!但我想法是下一個會蓋掉前一個範例啦!這樣對嗎?
發表於: 2009/11/9 10:50
|
|||
|
程式 燒錄問題
|
||||
---|---|---|---|---|
資深會員
|
我想這是觀念,但我有點問題!我是用icd2
debugger因該是沒有把程式燒到晶片,只是模擬對嗎? 但我每做一個範例程式,到下一個範例程式,我怎麼會知道上一個範例程式占的記憶體有被清楚掉呢!
發表於: 2009/11/8 21:36
|
|||
|
Re: 計時器/計數器問題
|
||||
---|---|---|---|---|
資深會員
|
謝謝各位,這段給了我位新手很多經驗,和啟發,我之後又式了如果一定要用0x18的話我加了兩行
RCONbits.IPEN=1 IPR1bits.TMR1IP=0 這樣就可以了! 但是在這個程式我又試了一個東西, OpenTimer1( TIMER_INT_ON & T1_16BIT_RW & T1_SOURCE_EXT &T1_PS_1_1 & T1_OSC1EN_ON & T1_SYNC_EXT_ON ); 這段我想改成T1CON=0xXX 就是像組語的寫法一樣,結果答案不行,翻了很多例子,發現在c方面的寫法都會寫成上面的型態,而不能像組語那樣子,請問這個觀念是對的嗎?
發表於: 2009/11/8 13:07
|
|||
|
Re: 計時器/計數器問題
|
||||
---|---|---|---|---|
資深會員
|
但我的問題是上面那個範例啊他的RCONbits.IPEN=0
題目原本是到0x18,所以我程式run了,燈沒跑! 但只改了0x08後就可以跑了!我在想他並沒有設高優先中斷才對不是嗎?
發表於: 2009/11/5 18:10
|
|||
|
Re: 計時器/計數器問題
|
||||
---|---|---|---|---|
資深會員
|
我玩到他的計時/計數那個單元時!它的程式
//* Ex9_1_TMR1_INT.c //* 設計一個0.5秒讓 PORTD 的 LED 所顯示的二進位數字自動加一的程式 #include <p18f4520.h> //納入微控制器定義檔 #include <timers.h> //納入計時器函式庫定義檔 // 結構位元定義 #pragma config OSC=HS, BOREN=OFF, BORV = 2, PWRT=ON, WDT=OFF, LVP=OFF #define TMR1_VAL 65536-16384 // Timer1 設定為 500ms 中斷一次 //宣告函式原型 void Init_TMR1(void); void timer1_isr (void); //宣告並安排中斷執行程式記憶體位置 #pragma code low_vector=0x18=>0x08 void low_interrupt (void) { _asm GOTO timer1_isr _endasm } #pragma code #pragma interruptlow timer1_isr void timer1_isr (void) { PIR1bits.TMR1IF = 0; // 清除中斷旗標 WriteTimer1(TMR1_VAL); // 當將計數器觸發次數歸零寫入預設值 PORTD++; // 遞加PORTD } void main (void) { PORTD = 0x00; // 將PORTD清除關閉LED TRISD = 0; // 將TRISD設為0,PORTD設定為輸出 Init_TMR1(); // 初始化設定Timer1函式 INTCONbits.PEIE = 1; // 開啟周邊中斷功能 INTCONbits.GIE = 1; // 開啟全域中斷控制 while (1); // 無窮迴圈 } void Init_TMR1 (void){ OpenTimer1( TIMER_INT_ON & // 使用C18編譯器timer函式庫 T1_16BIT_RW & // 初始化設定Timer1 T1_SOURCE_EXT & // 並開啟TIMER1中斷功能(PIE1bits.TMR1IE=1) T1_PS_1_1 & T1_OSC1EN_ON & T1_SYNC_EXT_ON ); WriteTimer1(TMR1_VAL); // 寫入預設值 PIR1bits.TMR1IF = 0; // 清除中斷旗標 } 雖然沒有人直接回答我的問題,但我在中斷向量那改成0x08後,程式就可以run了,請問是書錯了嗎?還有請問各位0x18和0x08到底是在各什麼樣狀況下去選擇得,
發表於: 2009/11/4 14:19
|
|||
|
Re: 計時器/計數器問題
|
||||
---|---|---|---|---|
資深會員
|
板子不在手邊,不能確定,但我在build的地方,並沒錯誤,所以,表示這個程式是可以run的嗎?
發表於: 2009/10/24 11:31
|
|||
|
Re: 計時器/計數器問題
|
||||
---|---|---|---|---|
資深會員
|
恩,或許我因該,我對整體架構真的不熟,你說的debug模式要怎麼進去?我想我因該有把程式寫入,按run時,他有在run但是燈都沒反應,有用watch看portd的變化,沒變,因為那個綠色指標停在while好像中斷沒做的感覺!
tcy的部分在書上,並沒有教我怎麼算,所以像前除器,和後除器,有時他用了 ,但我也不是很清楚他是怎麼算的,不知道有人給可以簡單給我算的例子,讓我清楚一下!謝謝各位
發表於: 2009/10/23 20:57
|
|||
|
計時器/計數器問題
|
||||
---|---|---|---|---|
資深會員
|
小弟 剛學 pic也才一個月左右,有去上過教育訓練課,但我想那個課對於完全新手來說,因該只是讓你了解怎麼按而以,因為上課的內容還是太多要的,小弟我自己手邊的書,是曾老師寫的pic 18那本,雖然很多方寫的還不太清楚,但也是盡量自己摸,但書上某些地方的註解寫的太少了,難懂
我用的是pic18f4520 and app001的版子 我玩到他的計時/計數那個單元時!它的程式 //* Ex9_1_TMR1_INT.c //* 設計一個0.5秒讓 PORTD 的 LED 所顯示的二進位數字自動加一的程式 #include <p18f4520.h> //納入微控制器定義檔 #include <timers.h> //納入計時器函式庫定義檔 // 結構位元定義 #pragma config OSC=HS, BOREN=OFF, BORV = 2, PWRT=ON, WDT=OFF, LVP=OFF #define TMR1_VAL 65536-16384 // Timer1 設定為 500ms 中斷一次 //宣告函式原型 void Init_TMR1(void); void timer1_isr (void); //宣告並安排中斷執行程式記憶體位置 #pragma code low_vector=0x18 void low_interrupt (void) { _asm GOTO timer1_isr _endasm } #pragma code #pragma interruptlow timer1_isr void timer1_isr (void) { PIR1bits.TMR1IF = 0; // 清除中斷旗標 WriteTimer1(TMR1_VAL); // 當將計數器觸發次數歸零寫入預設值 PORTD++; // 遞加PORTD } void main (void) { PORTD = 0x00; // 將PORTD清除關閉LED TRISD = 0; // 將TRISD設為0,PORTD設定為輸出 Init_TMR1(); // 初始化設定Timer1函式 INTCONbits.PEIE = 1; // 開啟周邊中斷功能 INTCONbits.GIE = 1; // 開啟全域中斷控制 while (1); // 無窮迴圈 } void Init_TMR1 (void){ OpenTimer1( TIMER_INT_ON & // 使用C18編譯器timer函式庫 T1_16BIT_RW & // 初始化設定Timer1 T1_SOURCE_EXT & // 並開啟TIMER1中斷功能(PIE1bits.TMR1IE=1) T1_PS_1_1 & T1_OSC1EN_ON & T1_SYNC_EXT_ON ); WriteTimer1(TMR1_VAL); // 寫入預設值 PIR1bits.TMR1IF = 0; // 清除中斷旗標 } 這個程我在版子上跑不起來,是我用的版子跟書指定的不同的關係嗎? 再請教大家幾個問題,delay 的語法Delay100TCYx=>為什麼時40us!怎麼算的
發表於: 2009/10/23 16:46
|
|||
|