sit_alone76816
20-06-2010, 05:47 PM
Em đang làm 1 project có sử dụng ngắt Capture, nhưng khi em viết thì nó không hoạt động, hàm ngắt ko tác dụng gì . Em đang dùng C18, code như sau :
#include"p18f4520.h"
#include"delays.h"
#include"stdio.h"
#include"timers.h"
#include"capture.h"
#pragma config OSC=HS, WDT=OFF, PWRT=OFF,PBADEN=OFF,LVP=OFF
#define trigger PORTCbits.RC1
#define echo PORTCbits.RC2
#define enter PORTBbits.RB1
#define up PORTBbits.RB2
#define ledred PORTAbits.RA0 //led active Low
#define ledyellow PORTAbits.RA1
#define ledgreen PORTAbits.RA2
void ngat(void);
#pragma code InterruptVectorHigh = 0x08
void InterruptVectorHigh(void)
{
_asm goto ngat _endasm
}
#pragma code
#pragma interrupt ngat
void ngat (void)
{
INTCON &=0x7f; // disable interrupt
if(PIR1bits.CCP1IF==1)
{
PIR1bits.CCP1IF=0;
ledgreen=0; // On led Green
Delay1KTCYx(100);
}
ledyellow=0;
INTCON |=0x80; // enable interrupt
}
void main (void)
{
TRISC=0x94;
TRISB=0x1e;
PORTA=255;
PORTC=0;
ADCON1=0x0f;
INTCON=0x80;
PIE1bits.CCP1IE=1;
OpenCapture1( CAPTURE_INT_ON &
C1_EVERY_RISE_EDGE);
while(1)
{
ledred=0;
Delay1KTCYx(100);
ledred=1;
Delay10KTCYx(100);
}
if(up==0)
{
while(up==0);
trigger=1;
Delay10TCYx(100);
trigger=0;
}
}
}
Chương trình của em như sau: Khi em nhấn button up thì sẽ tạo 1 xung trigger tại chân RC1, sau đó sẽ có 1 module bên ngoài sẽ gửi lại 1 xung tại chân RC2 (CCP1). Khi có cạnh lên thì em cho ngắt ở đó. Em đã kiểm tra xung ở 2 pin RC1 và RC2, cả 2 vẫn tốt, nhưng còn hàm Ngắt thì không thực hiện.
Có phải em khai báo hàm ngắt sai hay không ? Mong các anh giúp đỡ !
#include"p18f4520.h"
#include"delays.h"
#include"stdio.h"
#include"timers.h"
#include"capture.h"
#pragma config OSC=HS, WDT=OFF, PWRT=OFF,PBADEN=OFF,LVP=OFF
#define trigger PORTCbits.RC1
#define echo PORTCbits.RC2
#define enter PORTBbits.RB1
#define up PORTBbits.RB2
#define ledred PORTAbits.RA0 //led active Low
#define ledyellow PORTAbits.RA1
#define ledgreen PORTAbits.RA2
void ngat(void);
#pragma code InterruptVectorHigh = 0x08
void InterruptVectorHigh(void)
{
_asm goto ngat _endasm
}
#pragma code
#pragma interrupt ngat
void ngat (void)
{
INTCON &=0x7f; // disable interrupt
if(PIR1bits.CCP1IF==1)
{
PIR1bits.CCP1IF=0;
ledgreen=0; // On led Green
Delay1KTCYx(100);
}
ledyellow=0;
INTCON |=0x80; // enable interrupt
}
void main (void)
{
TRISC=0x94;
TRISB=0x1e;
PORTA=255;
PORTC=0;
ADCON1=0x0f;
INTCON=0x80;
PIE1bits.CCP1IE=1;
OpenCapture1( CAPTURE_INT_ON &
C1_EVERY_RISE_EDGE);
while(1)
{
ledred=0;
Delay1KTCYx(100);
ledred=1;
Delay10KTCYx(100);
}
if(up==0)
{
while(up==0);
trigger=1;
Delay10TCYx(100);
trigger=0;
}
}
}
Chương trình của em như sau: Khi em nhấn button up thì sẽ tạo 1 xung trigger tại chân RC1, sau đó sẽ có 1 module bên ngoài sẽ gửi lại 1 xung tại chân RC2 (CCP1). Khi có cạnh lên thì em cho ngắt ở đó. Em đã kiểm tra xung ở 2 pin RC1 và RC2, cả 2 vẫn tốt, nhưng còn hàm Ngắt thì không thực hiện.
Có phải em khai báo hàm ngắt sai hay không ? Mong các anh giúp đỡ !