打印
[PIC®/AVR®/dsPIC®产品]

18F4520 Capture 使用ccp中斷旗標無法清除

[复制链接]
931|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ansenbox|  楼主 | 2016-8-14 10:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用C18編譯語言,
我要做一個捕捉頻率的功能,CCP1與Timer2做PWM來產生頻率,而CCP2 做捕捉模式配合Timer1,當捕捉完成功時,在中斷中無法將ccp2的 CCP2IF的中斷旗標用軟體清除。

#include <p18f4520.h>
#include <delays.h>
#include <adc.h>       
#include <timers.h>       
#include <pwm.h>       
#include <capture.h>

#pragma config OSC=HS, BOREN=OFF, BORV = 2,
PWRT=ON, WDT=OFF, LVP=OFF
#pragma        config        CCP2MX = PORTBE        // CCP2腳位設定

// 宣告集合變數以便處理二位元組變數資料
union EDGE {
unsigned int lt;
unsigned char bt[2];
}EDGE_O, EDGE_N;

void CCP2_isr(void); // 宣告中斷執行程式CCP2_isr

void main () {

PORTD = 0x00;       
TRISD = 0;

ADCON0=0x01; // 選擇AN0通道轉換,開啟ADC模組
ADCON1=0x0E; // 使用VDD,VSS為參考電壓,
設定AN0為類比輸入
ADCON2=0x3A; // 結果向左靠齊並設定轉換時間為
Fosc/32,採樣時間為20TAD
OpenTimer1( TIMER_INT_OFF &       
T1_16BIT_RW &
T1_SOURCE_INT &
T1_PS_1_1 &
T1_OSC1EN_OFF &
T1_SYNC_EXT_ON );
TRISCbits.TRISC2=0; // 設定CCP1為輸出
OpenPWM1(0x03); // 設定CCP1為PWM功能與時脈周期
SetDCPWM1(0x02); // 設定CCP1的PWM工作周期

OpenTimer2(TIMER_INT_OFF&T2_PS_1_16&T2_POST_1_1);

TRISBbits.TRISB3=1;        // 設定CCP2為輸入
// 設定CCP2為Capture功能,開啟中斷並設定捕捉下降邊緣

OpenCapture2(CAPTURE_INT_ON &C2_EVERY_FALL_EDGE);       
INTCONbits.GIE=1;// 啟動所有的高優先中斷
INTCONbits.PEIE=1;

while(1);
}


#pragma code high_vector=0x08// 定義高優先中斷執行程式位址
void high_interrupt (void)
{
_asm GOTO CCP2_isr _endasm
}
#pragma code

#pragma interrupt CCP2_isr

void CCP2_isr (void)
{

EDGE_N.lt=ReadCapture2();       
PIR2bits.CCP2IF = 0;        // 清除中斷旗標

}
沙发
dogglove| | 2016-8-14 22:38 | 只看该作者
是不是总进中断啊还是------------?,具体描述一下吧

使用特权

评论回复
板凳
ansenbox|  楼主 | 2016-8-14 23:31 | 只看该作者
dogglove 发表于 2016-8-14 22:38
是不是总进中断啊还是------------?,具体描述一下吧

一直進入中斷,我在中斷裡有設定PIR2bits.CCP2IF=0結果都沒改變,依然CCP2IF=1,而且我在中斷裡用單步執行,看了PIR2的暫存器,結果CCP2IF都沒有歸零。

使用特权

评论回复
地板
ansenbox|  楼主 | 2016-8-15 09:10 | 只看该作者
我後來在中斷程序裡先將ccp2 的捕捉功能關閉之後(CCP2CON=0x00),CCP2IF就能設定為0,好奇怪喔,為什麼?。

使用特权

评论回复
5
兰天白云| | 2016-8-15 14:27 | 只看该作者
是不是外部一直有信号过来?导致CCP2一直有中断申请

使用特权

评论回复
6
dogglove| | 2016-8-19 22:39 | 只看该作者
你设置的是上升沿还是下降沿中断啊,若你设置的是上升沿中断,那么进中断后马上改下降沿,应该就好用啦!!!!

使用特权

评论回复
7
dogglove| | 2016-8-19 22:45 | 只看该作者
你CCP什么信号,你设置的是上升沿还是下降沿中断啊,若你设置的是下升沿中断,那么进中断后马上改上降沿,应该就好用啦!!!!

使用特权

评论回复
8
yqdeso| | 2016-8-20 08:55 | 只看该作者
请看DS39631A_CN文档
253页。PBADEN位;
224页,PCFG3:PCFG0;
109页,RB3引脚和下方注1中的内容。

简单说就是,你没有RB3设成数字输入。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

4

帖子

0

粉丝