• slider image 442
  • slider image 483
  • slider image 484
  • slider image 485
  • slider image 486
  • slider image 487
:::


Browsing this Thread:   1 Anonymous Users




(1) 2 »


Re: 計時器/計數器問題
#18
新會員
新會員


查看用戶資訊
請問可以貼給我看完整9-1可以run的程式嗎?

發表於: 2009/12/25 13:31
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 計時器/計數器問題
#17
資深會員
資深會員


查看用戶資訊
#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();
T1CON=0x8B;
WriteTimer1(TMR1_VAL); // 寫入預設值
PIR1bits.TMR1IF = 0; // 初始化設定Timer1函式
RCONbits.IPEN=1;
IPR1bits.TMR1IP=0;
INTCONbits.PEIE = 1; // 開啟周邊中斷功能
INTCONbits.GIE = 1; // 開啟全域中斷控制

while (1) Sleep(); // 無窮迴圈
}

/*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_OFF );*/ // 欲使用TIMER1喚醒CPU時必須關閉同步功能
// WriteTimer1(TMR1_VAL); // 寫入預設值
// PIR1bits.TMR1IF = 0;* // 清除中斷旗標


回樓上大大,我試出來了,可以用像組語的寫法,我又改了一個方式就是把它下面副程式,直接搬到了主程式,但它會停在這句WriteTimer1(TMR1_VAL);我想opertimer1那用組語的寫法ok,但writetimer1這句如果不是放在下面,想直接放在主程式,我觀念那錯了,或是語法錯了!

發表於: 2009/11/8 20:28
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 計時器/計數器問題
#16
資深會員
資深會員


查看用戶資訊
參照:

p886222 寫道:
這段我想改成T1CON=0xXX
就是像組語的寫法一樣,結果答案不行,翻了很多例子,發現在c方面的寫法都會寫成上面的型態,而不能像組語那樣子,請問這個觀念是對的嗎?


T1CON=0xXX 的寫法是絕對正確可行的

會不行就表示你其中可能某些bit的設定不對,再查看確認哪裡不對即可

使用OpenTimerx()的方式,那些函式實際執行的過程其實也是T1CONbits.xxxx=???,其實沒有甚麼不同,只不過用OpenTimerx()感覺比較直覺易懂罷了。

發表於: 2009/11/8 13:58
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 計時器/計數器問題
#15
資深會員
資深會員


查看用戶資訊
謝謝各位,這段給了我位新手很多經驗,和啟發,我之後又式了如果一定要用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
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 計時器/計數器問題
#14
資深會員
資深會員


查看用戶資訊
多謝 genitec 大 :
看來是我腦袋轉錯方向了 !

重新整理一下 :
IF RCON.IPEN  ---> 1
     有高低優先權中斷
             
08-----> 高優先權中斷 進入點
             18h 
-----> 低優先權中斷 進入點
ELSE ( RCON.IPEN  --->  )
     [
color=ff0000]無高低優先權中斷
             所有中斷進入點  
--->  08h[/color]
ENDIF

    
之前想成是 如沒高低優先權中斷 則進入點皆為低優先權中斷進入點再強調一次 這是錯誤的 )

發表於: 2009/11/8 3:20
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 計時器/計數器問題
#13
高級會員
高級會員


查看用戶資訊
去翻了一下datasheet , 好像是 RCON暫存器的IPEN BIT內定為 0 , RCON.IPEN=0的話 , 中斷向量位址在 0X08

Attach file:



jpg  (0.00 KB)


發表於: 2009/11/7 14:31
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 計時器/計數器問題
#12
資深會員
資深會員


查看用戶資訊
真的ㄟ , 改成 08 就可以 RUN 了 ....
在 Program Menory 裡 , RCON & IPEN 都找不到
但就是要改成 08 才能 RUN ? ? ? ? ? ? ?


C 與 PIC18 都不熟
__自動__靠邊站 ..............


PS:
MPLAB 8.40

Language tool versions: mpasmwin.exe v5.31, mplink.exe v4.31, mcc18.exe v3.31

APP001-V1
MCU--- PIC18F4520-I/P Date Code : 061732R

發表於: 2009/11/7 5:05

Edited by Beee on 2009年11月07日 05:29:47
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 計時器/計數器問題
#11
版主
版主


查看用戶資訊
要是 RCONbits.IPEN=0 的話,PIC18F 的中斷進入點為 0x08 ,0x18 那個進入點就沒有用了。

// 修改 Default 的中斷向量

發表於: 2009/11/6 13:13

Edited by Ryang on 2009年12月28日 14:15:43
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 計時器/計數器問題
#10
資深會員
資深會員


查看用戶資訊
但我的問題是上面那個範例啊他的RCONbits.IPEN=0
題目原本是到0x18,所以我程式run了,燈沒跑!
但只改了0x08後就可以跑了!我在想他並沒有設高優先中斷才對不是嗎?

發表於: 2009/11/5 18:10
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 計時器/計數器問題
#9
版主
版主


查看用戶資訊
啟用高優先全中斷的設定步驟:

開啟中斷優先權的設定: RCONbits.IPEN=1;
設定Timer1的接收為高優先權: IPR1bits.TMR1IP=1;
Enable Timer1的接收中斷: PIE1bits.TMR1IE=1;
啟動高優先權中斷: INTCONbits.GIEH=1;

發表於: 2009/11/5 11:14
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部







You can view topic.
不可以 發起新主題
You cannot reply to posts.
You cannot edit your posts.
You cannot delete your posts.
You cannot add new polls.
You cannot vote in polls.
You cannot attach files to posts.
You cannot post without approval.
You cannot use topic type.
You cannot use HTML syntax.
You cannot use signature.
You cannot create PDF files.
You cannot get print page.

[進階搜尋]


:::

Microchip連結

https://www.facebook.com/microchiptechnologytaiwan/
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=13
https://mu.microchip.com/page/tmu
http://elearning.microchip.com.tw/modules/tad_link/index.php?cate_sn=1
https://page.microchip.com/APAC-PrefCenters-TW.html
http://www.microchip.com/
http://www.microchip.com/treelink
http://www.microchipdirect.com/
http://www.microchip.com.cn/newcommunity/index.php?m=Video&a=index&id=103
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=2
http://www.microchip.com.tw/Data_CD/eLearning/index.html
http://www.microchip.com.tw/RTC/RTC_DVD/
https://www.microchip.com/development-tools/
https://www.youtube.com/user/MicrochipTechnology
[ more... ]

教育訓練中心

!開發工具購買
辦法說明 [業界客戶] [教育單位]
----------------------------------
!校園樣品申請
辦法說明 [教師資格] [學生資格]
----------------------------------