PDA

View Full Version : Giúp mình về INT_RB


hezman1987
16-06-2009, 11:00 PM
Em thử nghiệm cái INT_RB đơn giản nhu sau
khi có ngắt (RB4 thay đổi trạng thái ) thì rc0 = 1;
và đèn nhấp nháy bình thường .
mạch chạy nhấp nháy ok tới khi thay đổi rb4 thì ...
tèn ten đứng im ko nhấp nháy
em có mô phong tren proteus

Có ai gặp rồi có thể cho em bik lý do ko .
Xin cảm ơn. ^^

#include <16f877a.h>
#include <def_877a.h>
#device *=16 ADC = 8
#fuses NOWDT ,HS ,NOPUT ,NOPROTECT ,NODEBUG , NOBROWNOUT , NOLVP , NOCPD ,NOWRT
//
#use delay(clock = 20000000)
#INT_RB
void ngat_isr(){
rc0 = 1;
}
void main(){
enable_interrupts(INT_RB);
enable_interrupts(GLOBAL);
output_D(0xFF);
TRISC = 0x00;
PORTC = 0x00;
TRISB = 0xFF;
While(1)
{
delay_ms(250);
output_D(0x00);
delay_ms(250);
output_D(0xFF);
}
}

cskiller
17-06-2009, 12:34 AM
Bạn phải đọc PORTB khi co ngắt INT_RB, đơn giản bạn sửa lại hàm interrupt thành:

#INT_RB
int8 ngat_isr(){
rc0 = 1;
return input_b();
}

hezman1987
17-06-2009, 11:24 AM
xong hay quá . Anh có thể giải thích thêm được ko do em tham khảo tài liệu "CSS tiếng Việt update I" thì có đoạn code sau :

#include < 16F877.h >
#device PIC16F877 *=16
#use delay (clock = 20000000 ) //delay,OSC=20 Mh
#byte portb = 0x06 //
#byte portd = 0x08 //

#INT_RB
Void RB_LED ( ) // haøm phuïc vuï ngaét
{
portd=portb;
}

void main ( )
{ set_tris_b ( 0xF0 ) ; // portB = 11110000 ,
set_tris_d ( 0x00 ) ; // portD = 00000000 ,
enable_interrupts ( INT_RB ) ; //
enable_interrupts ( GLOBAL ) ; //
while( true )
{ //
}
} //main


thì ko có việc trả về như anh nói ( R4 - R7 là các button )

cskiller
17-06-2009, 02:51 PM
xong hay quá . Anh có thể giải thích thêm được ko do em tham khảo tài liệu "CSS tiếng Việt update I" thì có đoạn code sau :

#include < 16F877.h >
#device PIC16F877 *=16
#use delay (clock = 20000000 ) //delay,OSC=20 Mh
#byte portb = 0x06 //
#byte portd = 0x08 //

#INT_RB
Void RB_LED ( ) // haøm phuïc vuï ngaét
{
portd=portb;
}

void main ( )
{ set_tris_b ( 0xF0 ) ; // portB = 11110000 ,
set_tris_d ( 0x00 ) ; // portD = 00000000 ,
enable_interrupts ( INT_RB ) ; //
enable_interrupts ( GLOBAL ) ; //
while( true )
{ //
}
} //main


thì ko có việc trả về như anh nói ( R4 - R7 là các button )

Vấn đề không phải là trả về mà là "phải đọc giá trị PORTB", dùng cách trả về chỉ là 1 cách viết, có thể chỉ viết input_b(); ko cần return thay thế cũng được.

Regards