Ðề tài: CCS C for PIC16F877A
View Single Post
Old 23-02-2008, 07:12 PM   #380
tinhgiac_vp
Đệ tử 2 túi
 
Tham gia ngày: Oct 2007
Bài gửi: 42
:
Trích:
Nguyên văn bởi nhh View Post
INTERRUPT

Các lệnh dùng cho ngắt:
Code:
enable_interrupts(level);	//cho phép ngắt kiểu level   
disable_interrupts(level); 	             //cấm ngắt kiểu level
ext_int_edge(edge);         	             // chọn cách lấy xung loại  edge
level bao gồm:

GLOBAL : ngắt toàn cục
INT_RTCC : tràn TMR0
INT_RB : có thay đổi trạng thái một trong các chân RB4 đến RB7
INT_EXT : ngắt ngoài
INT_AD : chuyển đổi AD đã hoàn tất
INT_TBE : bộ đệm chuyển RS232 trống
INT_RDA : data nhận từ RS232 sẵn sàng
INT_TIMER1 : tràn TMR1
INT_TIMER2 : tràn TMR2
INT_CCP1 : có capture hay compare trên CCP1
INT_CCP2 : có capture hay compare trên CCP2
INT_SSP : có hoạt động SPI hay I2C
INT_PSP : có data vào cổng parallel slave
INT_BUSCOL : xung đột bus
INT_EEPROM : ghi vào eeprom hoàn tất
INT_TIMER0 : tràn TMR0
INT_COMP : kiểm tra bằng nhau comparator

edge bao gồm:

L_TO_H : cạnh lên
H_TO_L : cạnh xuống

Sau khai báo trên để vào đoạn chương trình ngắt, khai báo:

#INT_.........

Ví dụ vào thực thi ngắt ngoài, ta có đoạn code:
Code:
#INT_EXT
void ngat_ngoai()
{
//Chương trình ngắt tại đây
}
các cao thủ vui lòng viết 1 ví dụ cụ thể về ngắt ngoài được không??????? Em đã thử viết nhưng không chạy được. Chương trình của em dùng ngắt ngoài RB_0 và hiển thị lên port_C
#include <16F877A.h>
#byte portb = 0x06
#byte portc = 0x07
#use delay (clock = 20000000)
int count=1;
#INT_EXT
void EXT_LED()
{
portc=count;
count=count+1;
delay_us(100);
bit_clear(portb,0);
}
void main() {
ext_int_edge(L_TO_H);
enable_interrupts(INT_EXT);
enable_interrupts(global);
set_tris_b(0xff);
set_tris_c(0x00);
portc=0;
bit_set(portb,0);
while(1)
{
}

}
tinhgiac_vp vẫn chưa có mặt trong diễn đàn