Interrupt trong lập trình nhúng với C

Em đang học lập trình nhúng với 8051, e học tới Timer và interrupt thì hết hiểu gì luôn. Nhất là cái interrupt này, lệnh thì e hiểu, những k thấy nó được gọi trong main() mà sao nó vẫn chạy được vậy ?

Trong cấu trúc con MCU, có những sự thay đổi giá trị trong phần cứng có khả năng có tác động đặc biệt đến chương trình đang chạy.
Sự thay đổi này được đánh dấu bằng các bit cờ gọi là các IF (interrupt flag). Nó có khả năng gây ra tác động tới chương trình hay không dựa vào các bit gọi là IE( interrupt enable) và thường có 1 bit tổng cho phép tác động đến chương trình là GIE (global interrupt enable). 8051 thì GIE chính là EA.

Khi có sự thay đổi, cờ IF được bật lên. Nếu IE được bật và EA được bật thì nó tác động đến chương trình đang thực hiện. Chương trình đang thực hiện ngay lập tức bị dừng lại. MCU sao lưu địa chỉ chương (thanh gi PC-program counter) trình vào stack. Sau đó nó nhảy đến vị trí một đoạn chương trình phục vụ xử lý thay đổi này, gọi là hàm xử lý ngắt(ISR- interrupt service routine). Khi thực hiện xong hàm xử lý ngắt, nhờ giá trị thanh ghi PC được lưu trong stack, MCU nhảy đến vị trí chương trình bị dừng lúc trước và tiếp tục thực thi đoạn chương trình khi nãy.

Trên chương trình kia, timer được bật chế độ ngắt, khi timer đếm đến giá trị max và quay về 0 thì cờ IF của timer được bật lên đánh dấu sự kiện overflow của timer.
Chương trình khi đó ngay lập tức dừng lại, nhảy vào chương trình ngắt (hàm có chữ interrupt) để thực hiện. Kết thúc nó quay trở lại hàm main tiếp tục thực hiện công việc.
Hàm ngắt được gọi tự động nên không thấy nó được gọi trong main.

1 Like

ok ạ. E tính gửi mail cho sếp nhưng nghĩ vấn đề này chắc nhỏ nên k dám gửi ^^!

Không sao :slight_smile:
Thực ra thì trả lời trên này sẽ hay hơn, khả năng chia sẻ tốt hơn. Vì biết đâu có bạn nào đó cũng đang mắc có thể tìm thấy câu trả lời :slight_smile:

1 Like

https://daynhauhoc.com/t/hoi-ve-lap-trinh-nhung-giup-em-hieu-ve-nhung-voi-a/46860

Sếp vào đọc bài này cho em xin vài ý kiến với ạ. thanks.

?? sếp gì vậy bạn… đừng nói là thầy nha… méo thể tin đc…:smiley:

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?