PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Cơ bản về vi điều khiển và PIC (http://www.picvietnam.com/forum/forumdisplay.php?f=8)
-   -   cho em hỏi về ngắt ngoài của pic16f877 (http://www.picvietnam.com/forum/showthread.php?t=6829)

hotronghieu 12-08-2010 10:13 AM

cho em hỏi về ngắt ngoài của pic16f877
 
em có 1 doạn code nhấp nháy led thông qua nút nhấn kết nối với chân rb0/int0 của pic nhưng e mô phỏng không chạy được.các pro giúp đỡ giùm.dưới day là code em viết.


#include <16f877a.h>
#include <def_877a.h>
#int_ext
#fuses hs,nowdt
#use delay(clock=8000000Hz)
int8 a;
void ext_isr(void)
{
a=1;
}

void main()
{
trisd=0x00;
trisb=0x01;
portb=0x00;
enable_interrupts(int_ext);
ext_int_edge(h_to_l);
enable_interrupts(GLOBAL);
while(a==1)
{
portd=~portd;
delay_ms(200);
}
}

baquyen 12-08-2010 10:35 AM

bạn thử để #int_ext ngay phía trước void ext_isr(void), cú pháp nó bắt vậy, mình ko hiểu sao bạn để xa nhau thế. Thử xem có được ko nhé

hotronghieu 12-08-2010 10:43 AM

như thế vẫn ko được. ko biết chương trình có bị sai chỗ nào ko?

baquyen 12-08-2010 10:51 AM

bạn post luôn cái mô phỏng của bạn đi và mô tả hoạt động của nó thế nào, mình nghĩ ct của bạn có vấn đề luôn, nếu xảy ra ngắt thì a nó bằng 1 mãi mãi, vậy thì a==1 từ đó sẽ true mãi luôn, cái hàm ngắt có ý nghĩa gì nữa ko?

hotronghieu 12-08-2010 10:55 AM

1 Attachment(s)
mình viết đơn giản như thế để mình test ngắt 1 lần đầu tiên thôi, mình viết vậy cho đơn giản mà

baquyen 12-08-2010 11:13 AM

Hix, đang học HTPIC, bạn gửi cái file def_877a và cái file hex của thằng này luôn đi :). Cái CCS mới cài lại, thiếu đủ thứ

hotronghieu 12-08-2010 11:23 AM

1 Attachment(s)
anh coi gium em

baquyen 12-08-2010 11:28 AM

Nó chạy mà bạn, cái mô phỏng bạn quên nối chân rb0 lên VCC thông qua điện trở 330 mà trong thực tế n ta hay dùng điện trở 1k đến 10k đó

pic_13 12-08-2010 11:31 AM

Trích:

Nguyên văn bởi hotronghieu (Post 37963)
em có 1 doạn code nhấp nháy led thông qua nút nhấn kết nối với chân rb0/int0 của pic nhưng e mô phỏng không chạy được.các pro giúp đỡ giùm.dưới day là code em viết.


#include <16f877a.h>
#include <def_877a.h>
#int_ext
#fuses hs,nowdt
#use delay(clock=8000000Hz)
int8 a;
void ext_isr(void)
{
a=1;
}

void main()
{
trisd=0x00;
trisb=0x01;
portb=0x00;
enable_interrupts(int_ext);
ext_int_edge(h_to_l);
enable_interrupts(GLOBAL);
while(a==1)
{
portd=~portd;
delay_ms(200);
}
}

thử cái này xem nào,trong so do thi noi vcc vao rb0:
#include <16f877a.h>
#include <def_877a.h>
#fuses hs,nowdt
#use delay(clock=8000000)
int8 a=0;
#int_ext
void ext_isr(void)
{a=1;
}

void main()
{
trisd=0x00;
trisb=0x01;
portb=0x00;
portd=0x00;
enable_interrupts(int_ext);
ext_int_edge(h_to_l);
enable_interrupts(GLOBAL);
while(1)
{if(a==1){
portd=~portd;
a=0;
}
}
}

baquyen 12-08-2010 11:37 AM

Làm như bác pic_13 thấy ok rùi đó :)

hotronghieu 12-08-2010 01:22 PM

sao chân rd6 trong file mô phổng của em lại khác mấy chân còn lại vậy?các chân em khai báo như nhau mà


Múi giờ GMT. Hiện tại là 12:52 PM.

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