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.