PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   PIC - Thiết kế và Ứng dụng (http://www.picvietnam.com/forum/forumdisplay.php?f=23)
-   -   Giúp mình về INT_RB (http://www.picvietnam.com/forum/showthread.php?t=4312)

hezman1987 16-06-2009 11:00 PM

Giúp mình về INT_RB
 
1 Attachment(s)
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. ^^

Code:

#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:
Code:

#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 :
Code:

#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

Trích:

Nguyên văn bởi hezman1987 (Post 26855)
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 :
Code:

#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


Múi giờ GMT. Hiện tại là 09:02 AM.

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam