30/09/2018, 17:55
Interrupt trong C
void T1_ISR(void) interrupt 3 //ngat timer 1 chay dong ho
{
TR1=0;
TF1=0;
TH1=0x3C; // nap lai gia tri cho thanh ghi
TL1=0xAF;
time++;
if(time==10)
{time=0; B_nhay++; get_t=1;
if(B_nhay==2)
B_nhay=0;
}
TR1=1;
}
Không biết dùng để làm gì, lập trình cho vi điều khiển thấy một đoạn như vậy Hình như để ngắt nhưng chưa hiểu cơ chế của nó.
Bài liên quan
Mình đoán thôi nhé
TR1,TF,TH,TL là biến đại diện cho thanh ghi nào đó trong timer. Biến timer chạy 10s thì B nháy tăng lên 1. Khi B nháy = 2 thì B nháy bằng 0 lại. Chức năng có thể là hẹn giờ cho LED chớp tắt liên tục với chu kỳ là 10s.
Chức năng của interrupt là gì bạn, ham có interrupt được gọi khi nào, ý nghĩa của các số sau interrupt là gì
Cái này chưa gặp baogiờ
Cái này gọi là interrupt service routines (ISR), đây là một hàm bình thường. Được thực thi ở kernel mode, các thao tác trong ISR phải được thực hiện càng nhanh càng tốt.
Đẻ thực hiện một vài thao tác khẩn cấp. Ví dụ như copy dữ liệu từ card mạng vào buffer của driver card mạng.
Khi nhận được Interrupt từ OS. Interrupt có hai loại. Hardware interrupt và software interrupt. HW Interrupt là các interrupt từ phần cứng như khi mình gõ chữ, dữ liệu đến card mạng.
Ví dụ khi mình gõ chữ thì sẽ có một interrupt gửi đến cho Hệ điều hành thông qua cổng vật lý, interrupt này sẽ trigger interrupt service routine phù hợp do hệ điều hành hoặc device driver đăng ký trước đó. Trong trường hợp gõ chữ thì interrupt này sẽ copy dữ liệu nhận được từ keyboard vào buffer, làm gì sau đó là còn tùy vào chương trình đang chờ keyboard input.
Cái này tùy vào design, phải đọc document cách viết interrupt của loại thiết bị này mới hiểu được.