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


Browsing this Thread:   1 Anonymous Users






Re: 關於石英震盪器的問題
#2
管理員
管理員


查看用戶資訊
你的問題應該由下列幾點來探討 :
1. 你在程式中設定的中斷服務程式為 low priority. 但是你在程式中並未打開優先權致能(CORCON.IPEN)以及將 TIMER2 的中斷優先設定為 LOW. 所以程式在中斷後會浪費一些時間從 0x08 跳到 0x18.

2. 佔用比較多 CPU 時間的是進出中斷的 Contect Switch 所用掉的 , 如下列反組譯後的列表. 通常要處理的是 STATUS , BSR , FSR.

3. 如果要快 , 就一定要用組合語言 , 並且使用高優先中斷.然後... 進出中斷的時間就要 5 Tcy 了 .

102 00CA CFD8 timer2_isr MOVFF STATUS, PREINC1
103 00CC FFE4 NOP
104 00CE CFE0 MOVFF BSR, PREINC1
105 00D0 FFE4 NOP
106 00D2 6EE4 MOVWF PREINC1, ACCESS
107 00D4 CFDA MOVFF FSR2H, PREINC1
108 00D6 FFE4 NOP
109 00D8 CFE2 MOVFF FSR1H, FSR2H
110 00DA FFDA NOP
111 00DC 52E6 MOVF POSTINC1, F, ACCESS
112 00DE 929E BCF PIR1, 0x1, ACCESS
113 00E0 1C83 COMF PORTD, W, ACCESS
114 00E2 6E83 MOVWF PORTD, ACCESS
115 00E4 1C82 COMF PORTC, W, ACCESS
116 00E6 6E82 MOVWF PORTC, ACCESS
117 00E8 52E5 MOVF POSTDEC1, F, ACCESS
118 00EA CFE5 MOVFF POSTDEC1, FSR2H
119 00EC FFDA NOP
120 00EE 50E5 MOVF POSTDEC1, W, ACCESS
121 00F0 CFE5 MOVFF POSTDEC1, BSR
122 00F2 FFE0 NOP
123 00F4 CFE5 MOVFF POSTDEC1, STATUS
124 00F6 FFD8 NOP
125 00F8 0010 RETFIE 0

發表於: 2007/12/24 1:02
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


關於石英震盪器的問題
#1
初級會員
初級會員


查看用戶資訊
各位
再次麻煩大家一下

我現在用的是 EVM APP001 Rev. 2
用的是 PIC18F4480 的晶片

我現在用 TIMER2
想要讓他中斷,每中斷一次,我其中一隻腳會反向 (1-->0 或 0-->1)
我已經設好 PR2 的值
不過,如果我想要讓他每一次 clock 的時間(PR2=1),讓他反向,他時間就不對,都會停在 10uS 左右,不管我讓他多短。現在用的石英震盪器是 16Mhz,他應該還會經過 Fosc/4 所以應該是 4 Mhz,可是理論上一個 clock 時間是0.25uS。我不知道是不是有什麼硬體上面的限制嗎? 還是為什麼沒有辦法讓他比 10uS 還要小

以下是我的程式碼

#pragma config BOREN=OFF, BORV = 2, PWRT=ON, WDT=OFF, LVP=OFF
#pragma config OSC = HS


//宣告函式原型
void Init_TMR2(void);
void timer2_isr (void);

//宣告並安排中斷執行程式記憶體位置
#pragma code low_vector=0x18
void low_interrupt (void)
{
_asm GOTO timer2_isr _endasm
}
#pragma code

#pragma interruptlow timer2_isr

int i;

void timer2_isr (void)
{
PIR1bits.TMR2IF = 0;
PORTD=PORTD^0xff;
PORTC=PORTC^0xff;

}

void main (void) {


PORTD = 0x00;
TRISD = 0;
PORTC = 0x00;
TRISC = 0;
PR2 = 40;
Init_TMR2();

INTCONbits.PEIE = 1; // 開啟周邊中斷功能
INTCONbits.GIE = 1; // 開啟全域中斷控制

while (1);
}

void Init_TMR2 (void){


OpenTimer2(T2_POST_1_1 & T2_PS_1_1);


PIE1bits.TMR2IE=1;
PIR1bits.TMR2IF = 0; // 清除中斷旗標

}

有沒有什麼解決方法?
謝謝

發表於: 2007/12/23 18:39
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... ]

教育訓練中心

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