View Single Post
Old 30-11-2008, 07:43 PM   #1
daythienha2007
Đệ tử 2 túi
 
Tham gia ngày: Apr 2008
Bài gửi: 26
:
xin mọi người giúp đỡ về Ngắt trong PIC

mình định viết chương trình cho PIC 18f4431 nhận 1 số từ PIC khác(16f887).Mình thực hiện bằng cách cho nó đếm xung qua chân interrupts được truyền từ con PIC khác(16f887).Ví dụ muón gửi số 10 tới PIC8f4431 mình truyên 10 xung vào chân interrupts của PIC8f4431Mình viết chương trình ngắt ở 18f4431 như sau:
#include <18f4431.h>
#FUSES NOWDT, HS, NOPUT, NOPROTECT
#use delay(clock=20000000)
int32 count=0 ;

#int_ext1
void dem_xung()
{
count=count+1;
}

void main()
{

ext_int_edge(0,L_TO_H);
enable_interrupts(GLOBAL);
enable_interrupts(INT_EXT1);
while(true)
{

output_high(pin_b6);
{
if(count==20)
output_high(pin_b7); // nếu nhận được 20 xung thì cho sáng led chân RB7

}

}
}
Và chương trình tạo xung từ PIC6f887 như sau:
#include <16f887.h>
#FUSES NOWDT, HS, NOPUT, NOPROTECT
#use delay(clock=20000000)
int32 cycle,i=1;


void main()

{ output_high(pin_b6);
cycle=200;
for(i=1;i<=10;++i)
{
output_high(pin_b7);//kiểm tra xem code có hoạt động hay ko
delay_us(cycle);
output_low(pin_b7);
delay_us(cycle);
}
}


ko bít chương trình có jì sai ko mà sao thây khi có ngắt ở chân interrupts,thì chân RB7 ở PIC8f4431 sáng ,bất chấp số xung nhận được là bao nhiêu.Mình thử đổi số xung truyền ở PIC6f887 thì hiện tươngj này vẫn xảy ra.Hình như PIC8f4431 nhân không đúng số xung mình đã truyền.Chẳng bit tại sao
Mình hiện chưa ngĩ ra cách nào để truyền 1 giá trị từ PIC này sang PIC khác.nên dùng cách thô thiển này.Nếu bạn nào có cao kiến hay hơn,xin chỉ giúp
daythienha2007 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn