|
Tài trợ cho PIC Vietnam |
Cơ bản về vi điều khiển và PIC Những bài hướng dẫn cơ bản nhất để làm quen với vi điều khiển PIC |
|
Ðiều Chỉnh | Xếp Bài |
08-12-2009, 04:16 PM | #1 |
Đệ tử 4 túi
Tham gia ngày: Jul 2008
Bài gửi: 61
: |
External Interrupt! Help!
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!
|
08-12-2009, 06:16 PM | #2 |
Đệ tử 4 túi
Tham gia ngày: May 2009
Bài gửi: 74
: |
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! |
08-12-2009, 06:22 PM | #3 | |
Đệ tử 4 túi
Tham gia ngày: Jul 2008
Bài gửi: 61
: |
Trích:
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); //} } } thay đổi nội dung bởi: tkpro, 09-12-2009 lúc 02:38 PM. Lý do: Post cho anh e tham khao |
|
08-12-2009, 06:41 PM | #4 |
Banned
Tham gia ngày: Dec 2009
Bài gửi: 65
: |
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 |
08-12-2009, 07:20 PM | #5 |
Banned
Tham gia ngày: Dec 2009
Bài gửi: 65
: |
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 |
08-12-2009, 07:39 PM | #6 | |
Đệ tử 4 túi
Tham gia ngày: May 2009
Bài gửi: 74
: |
Trích:
còn while(true) { // không làm gì } tức là vdk chỉ chờ khồng làm gì cả |
|
Ðiều Chỉnh | |
Xếp Bài | |
|
|