View Full Version : External Interrupt! Help!
tkpro
08-12-2009, 04:16 PM
các bác cho e hỏi là e muốn dùng 02 ngắt ngoài trên các chân RB0 và RB1 của Pic 18F4550 thì làm như thế nào ah? thanh!
dung h
08-12-2009, 06:16 PM
thì bạn cứ khai báo như bình thường
enable_interrupts(INT_EXT) //sử dụng ngắt INT0
enable_interrupts(INT_EXT1) // INT1
ext_int_edge( H_TO_L ); // chọn cạnh sườn xung gây ra ngắt INT0 H_TO_L hoặc
// L_TO_H
ext_int_edge( 1,H_TO_L ); // cho INT1
enable_interrupts(GLOBAL) // cho phép ngắt toàn cục
sau khi khai báo song thì mỗi khi có thay đổi ở chân INT0,INT1 thì ct nhảy đến ct ngắt
#INT_EXT
void ngat_ext()
{
// cong viec
}
bạn viết thử xem!
tkpro
08-12-2009, 06:22 PM
thì bạn cứ khai báo như bình thường
enable_interrupts(INT_EXT) //sử dụng ngắt INT0
enable_interrupts(INT_EXT1) // INT1
ext_int_edge( H_TO_L ); // chọn cạnh sườn xung gây ra ngắt INT0 H_TO_L hoặc
// L_TO_H
ext_int_edge( 1,H_TO_L ); // cho INT1
enable_interrupts(GLOBAL) // cho phép ngắt toàn cục
sau khi khai báo song thì mỗi khi có thay đổi ở chân INT0,INT1 thì ct nhảy đến ct ngắt
#INT_EXT
void ngat_ext()
{
// cong viec
}
bạn viết thử xem!
cám on bạn
vấn đề là ở chỗ thằng INT0, lúc trước tôi viết:
#INT_EXT0
void ngat_ext()
{
// cong viec
}
enable_interrupts(INT_EXT0) nó báo lỗi ngay
còn thằng INT1 thì Ok
chương trình chạy được, mong bà con tham khảo và cho ý kiến
//-----------------
#include<18f4550.h>
#device *=16 ADC=8
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT,NOLVP, NOCPD, NOWRT
#use delay(clock = 20000000)
#use rs232(baud=9600,parity=n,xmit=pin_C6,rcv=pin_C7)
# byte portA=0xf80
# byte portB=0xf81
# byte portC=0xf82
# byte portD=0xf83
# byte portE=0xf84
// cac pin cong A
#bit a0 = portA.0
#bit a1 = portA.1
#bit a2 = portA.2
#bit a3 = portA.3
#bit a4 = portA.4
#bit a5 = portA.5
#bit a6 = portA.6
#bit a7 = portA.7
//----cac pin cong B--
#bit b0 = portB.0
#bit b1 = portB.1
#bit b2 = portB.2
#bit b3 = portB.3
#bit b4 = portB.4
#bit b5 = portB.5
#bit b6 = portB.6
#bit b7 = portB.7
// cac pin cong C
#bit c0 = portC.0
#bit c1 = portC.1
#bit c2 = portC.2
#bit c3 = portC.3
#bit c4 = portC.4
#bit c5 = portC.5
#bit c6 = portC.6
#bit c7 = portC.7
// cac pin cong D
#bit d0 = portD.0
#bit d1 = portD.1
#bit d2 = portD.2
#bit d3 = portD.3
#bit d4 = portD.4
#bit d5 = portD.5
#bit d6 = portD.6
#bit d7 = portD.7
// cac pin cong E
#bit e0 = portE.0
#bit e1 = portE.1
#bit e2 = portE.2
//void bit_to_byte( )
//////////////////////////
//signed char i;
char j;
char k,mode;
char i=0;
// Ngat ngoai 0(EXT0)
# int_ext
void EXT_ISR()
{
mode++;
if(mode==100)mode=0;
}
// Ngat ngoai 1(EXT1)
///*
# int_ext1
void EXT_ISR1()
{
i++;
if(i==100)i=0;
}
//*/
///////////////////////
# int_rda
void nhan()
{
delay_us(100);
j=getc();
//portA=j;
}
void main()
{
set_tris_b(255);
set_tris_d(255);
set_tris_a(255);
enable_interrupts(int_rda);
enable_interrupts(INT_EXT);// cho EXT0
enable_interrupts(INT_EXT1); // cho EXT1
/////////////////////////
ext_int_edge(H_TO_L); // select interrups
ext_int_edge(1,L_TO_H ); // cho EXT1
enable_interrupts(global);
while(true)
{
//for(k=1;k<=100;k++)
//{
putc(i);
delay_ms(1000);
//}
}
}
vinhlec4
08-12-2009, 06:41 PM
ngắt trong 18f4331 lam nhu thế nào anh?
ham dò dường bằng led cua robo vì sau phải bỏ trong timer và nó hoạt động như thế nào zay
vinhlec4
08-12-2009, 07:20 PM
void main()
{
set_tris_b(0);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_2);
enable_interrupts(int_timer0);
enable_interrupts(global);
set_timer0(56);
while(true)
{
}
}
lệnh while đó thực hiện như thế nào mấy bác?
true co nghĩa là j?
mình mới vào lập trình nên hơi kém
dung h
08-12-2009, 07:39 PM
void main()
{
set_tris_b(0);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_2);
enable_interrupts(int_timer0);
enable_interrupts(global);
set_timer0(56);
while(true)
{
}
}
lệnh while đó thực hiện như thế nào mấy bác?
true co nghĩa là j?
mình mới vào lập trình nên hơi kém
while(true) hay while(1) la thực hiện vô hạn các công việc trong vòng lặp while
còn
while(true)
{
// không làm gì
}
tức là vdk chỉ chờ khồng làm gì cả
vBulletin® v3.8.11, Copyright ©2000-2025, vBulletin Solutions Inc.