View Single Post
Old 28-05-2005, 02:09 AM   #9
falleaf
PIC Bang chủ
 
falleaf's Avatar
 
Tham gia ngày: May 2005
Bài gửi: 2,631
:
Send a message via Yahoo to falleaf
Ngắt

Bài 3: Ngắt (interrupt)

Giới thiệu:

Khái niệm ngắt là một khái niệm rất phổ biến trong tất cả các hệ thống vi điều khiển, vi xử lý và máy tính. Vậy ngắt là gì?

Các bạn hình dung hình ảnh chúng ta đang đi xe máy trên bờ ruộng, con đường đi rất dài và rất thẳng, bỗng nhiên có một con bò chạy ngang, húc chúng ta xuống ruộng. Cả xe và người lao xuống ruộng. Chúng ta lồm cồm bò dậy, phủi quần áo, chửi đổng lên một cái vì chẳng biết chửi ai, thế là chúng ta đem ông trời ra chửi. Sau đó, chúng ta dắt xe máy lên bờ ruộng, tại cái chỗ mà chúng ta bị húc té xuống, rồi chúng ta lấy xe chạy tiếp. Nếu lỡ có một con bò nào khác, lại húc chúng ta.. thì....

Hoạt động ngắt cũng giống như vậy, khi chúng ta đang chạy một chương trình chính nào đó, bỗng nhiên có một sự kiện xảy ra, chúng ta phải dừng việc chúng ta đang làm lại, và giải quyết cái sự việc xảy ra đó. Cuối cùng, chúng ta lại quay trở về cái chỗ mà chúng ta đã tạm dừng lại lúc nãy và tiếp tục công việc đang làm.

Khái niệm ngắt chỉ đơn giản như vậy, tuy nhiên, đối với vi điều khiển nói chung, và PIC nói riêng, ngắt có thể do rất nhiều nguồn xảy ra, và với mỗi nguồn ngắt khác nhau, chúng ta có thể định trước rằng trong ngắt đó chúng ta sẽ làm việc gì. Cũng như khi đi trên bờ ruộng, chúng ta có thể bị bò húc, cũng có thể bị trâu húc, cũng có thể bị vấp cục đã, cũng có thể bị lọt ổ gà... Và nếu như bị bò húc thì chúng ta chửi ông trời, bị trâu húc chúng ta mắng ông trăng, bị vấp cục đá chúng ta tự trách mình xui xẻo, và đến khi vấp ổ gà... thì chúng ta vô nhà thương...

Các nguồn ngắt trong PIC:

Số lượng và loại nguồn ngắt trong PIC rất đa dạng, và rất khác nhau ở mỗi dòng PIC. Do vậy không thể liệt kê hết ra đây tất cả các dòng PIC và tất cả các loại ngắt trong từng dòng được. Chúng ta chỉ đưa ra đây sơ đồ tổng quát của các nguồn ngắt, và đi sâu vào một số loại ngắt phổ biến.



Hình 1: mô tả tất cả các nguồn ngắt của dòng PIC Midrange

Chúng ta chú ý đến một số điểm sau:

1) Trong hình có các ký hiệu cổng logic AND và OR



Đây là cổng AND, có nghĩa là chỉ khi đầu vào của hai cổng này đều có giá trị là 1, thì đầu ra mới có giá trị là 1. Chúng ta quan sát một góc hình bên trái phía dưới TXIF và TXIE, chúng đi qua cổng AND, chỉ khi nào bit TXIE bật lên, và bit TXIF cũng được bật lên, thì lúc đó ngõ ra nối vào cổng OR phía trên mới có giá trị.



Đây là cổng OR, có nghĩa là chỉ cần một trong các tín hiệu ngõ vào có giá trị là 1, thì ngõ ra sẽ có giá trị là 1. Như vậy, nếu cả TXIE và TXIF đều có giá trị 1, thì ngõ ra sau cổng AND của chúng sẽ có giá trị 1 và ngõ ra sau cổng OR cũng có giá trị 1, bởi vì ít nhất cổng OR ở đây cũng có 1 ngõ vào có giá trị 1.

Chúng ta cứ tiếp tục như vậy mà suy ra.

2) Điểm thứ hai, là các chữ đuôi IE và IF:

IE ở đây là viết tắt của chữ Interrupt Enable, và IF ở đây viết tắt của Interrupt Flag.

IE có nghĩa là chúng ta cho phép kích hoạt một loại ngắt nào đó xảy ra hay không. Đây là tín hiệu mà chúng ta có thể quy định ngay từ ban đầu. Mặc định, tất cả chúng đều có giá trị 0, chỉ khi nào chúng ta cho phép một ngắt nào đó xảy ra, thì về sau nó mới xảy ra ngắt đó thôi.

Cũng giống như, ban đầu trên bờ ruộng có dãy rào chắn, thì con bò không thể nào húc bạn té được, nếu bạn bỏ hàng rào ra, thì nếu có con bò húc bạn, bạn sẽ té. Nguyên lý này đơn giản như vậy thôi.

IF ở đây là các cờ ngắt. Tức là khi bạn bị bò húc, thì có một người cầm cờ giơ lên báo là bạn đã bị bò húc, để những người dưới ruộng reo hò...hihi... Và tất nhiên, khi bạn không phá rào cản thì người trên ruộng vẫn có. Và khi con bò lao vào bạn, thì người ta cũng phất cờ lên như thường, nhưng bị cái rào cản nên bạn cứ thoải mái mà đi con đường của bạn, chẳng phải quan tâm đến việc té xuống, chửi bới hay trèo lên làm gì.

Cái rào cản chính là IE và cái sự việc cuối cùng mà bạn vẫn đi hay lồm cồm bò dậy đó chính là cái cổng AND mà chúng ta vừa nói trên kia.

thay đổi nội dung bởi: falleaf, 30-05-2005 lúc 09:46 PM.
falleaf vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn