View Single Post
Old 09-04-2009, 11:12 AM   #5
cskiller
Đệ tử 4 túi
 
Tham gia ngày: Aug 2008
Bài gửi: 89
:
Code:
// INTEXT.C  MPB  10-4-07
// Demo external interrupt
// RB0 low interrupts 
// foregroundoutput count

#include "16F877a.h" 
#fuses HS,NOWDT         
#use delay(clock=12000000)

int x=10;      
      
#int_ext
void isrext()                           
{  
   output_c(x);      //muc dich là xuat ra portC giá tri. cu?a x hie^.n tho+`i trong ct chính
   delay_ms(1000);
}

               
void main()
{   
                                   
    enable_interrupts(global);
     
    set_tris_b(get_tris_b()|0x01);
    enable_interrupts(int_ext);
    ext_int_edge(H_TO_L); 

    while(1)
    {   
        output_d(x);
        x++;
        delay_ms(100);
    }
}
Không có 16F887 nhưng chương trình test với 16F877A thấy OK mà.
Chú ý: Tầm cực biến x để isrext() có thể truy cập. Giá trị trên Port D sẽ thường nhỏ hơn 1 so với Port C vì lệnh x++ thực thi sau lệnh gán output_d(x) (chỉ trừ khi interrupt xảy ra ngay sau lệnh output_d(x) và trước lệnh x++, khả năng ~ 0) nên nếu muốn 2 Port xuất giá trị bằng nhau khi nhấn phím thì chuyển lệnh x++ lên trước.
__________________
Quang báo RG/RGB 6/8/12/16 bits màu
Phone No: 0905.034.086
Email: lmquyen@gmail.com
cskiller vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn