PDA

View Full Version : hỏi về cách sử dụng nhiều ngắt một lúc !!!


phamngocthanh87
23-10-2009, 01:58 AM
em viết bằng assem giờ đang gặp vấn đề đó là bây giờ em muốn sử dụng hai ngắt giả sử ngắt timer1 và ngắt truyền thông . Các bác cho em hỏi cách viết hai chương trình ngắt đó như thế nào ?mong nhận được sự giúp đỡ của các bác !!!!!!!!!

namqn
23-10-2009, 09:20 AM
em viết bằng assem giờ đang gặp vấn đề đó là bây giờ em muốn sử dụng hai ngắt giả sử ngắt timer1 và ngắt truyền thông . Các bác cho em hỏi cách viết hai chương trình ngắt đó như thế nào ?mong nhận được sự giúp đỡ của các bác !!!!!!!!!
Bạn cho biết PIC cụ thể đang được dùng, vì có nhiều khác biệt về mức độ hỗ trợ ngắt ở các dòng PIC khác nhau (mid-range, high-performance, PIC24, PIC32).

Thân,

phamngocthanh87
23-10-2009, 09:52 AM
vâng em quên mất ! em dùng con pic6f877a. mong bác chỉ giúp !em chưa biết cách viết một chương trình có nhiều ngắt thì viết thế nào ?

namqn
23-10-2009, 10:22 AM
vâng em quên mất ! em dùng con pic6f877a. mong bác chỉ giúp !em chưa biết cách viết một chương trình có nhiều ngắt thì viết thế nào ?
PIC16F877A chỉ có 1 vectơ ngắt, do đó mọi ngắt đều được xử lý trong chương trình phục vụ ngắt của vectơ này. Bạn sẽ quyết định ngắt nào được xem xét trước, và các ngắt sẽ được xử lý theo sự bố trí của bạn.

Giả sử bạn muốn dùng ngắt Timer 1 và ngắt của module UART, bạn có thể lần lượt xét cờ ngắt Timer 1 và xử lý nếu có ngắt Timer 1, và xét cờ ngắt UART và xử lý nếu có ngắt UART. Với cách làm này, hai ngắt không có ràng buộc với nhau, nhưng cần chú ý để việc xử lý ngắt Timer 1 không làm trì hoãn việc xem xét ngắt UART quá mức.

Thân,

phamngocthanh87
23-10-2009, 11:20 PM
cảm ơn bác !em thử nói theo ý hiểu của em như thế này bác xem có đúng không nha ? Con pic 16f877a chỉ có 1 vector ngắt tức là mình sẽ chỉ viết 1 chương trình ngắt(ý em là viết sau đoạn org 0x0004 chẳng hạn ) trong đoạn đó sẽ có hai chương trình xử lý ngắt khác nhau ( giả sử ngắt timer1 và ngắt usart) do mình tự viết đoạn đầu của nó cần xét xem cờ ngắt ngắt nào được set thì sẽ nhảy vào đoạn chương trình tương ứng .như vậy là khi có bất kì ngắt nào nó sẽ nhảy về địa chỉ 0x0004 sau đó kiểm tra cờ ngắt(do mình tự viết) rồi nhảy vào đoạn chương trình ngắt tưng ứng .mong bác chỉ giúp !

namqn
24-10-2009, 10:54 PM
cảm ơn bác !em thử nói theo ý hiểu của em như thế này bác xem có đúng không nha ? Con pic 16f877a chỉ có 1 vector ngắt tức là mình sẽ chỉ viết 1 chương trình ngắt(ý em là viết sau đoạn org 0x0004 chẳng hạn ) trong đoạn đó sẽ có hai chương trình xử lý ngắt khác nhau ( giả sử ngắt timer1 và ngắt usart) do mình tự viết đoạn đầu của nó cần xét xem cờ ngắt ngắt nào được set thì sẽ nhảy vào đoạn chương trình tương ứng .như vậy là khi có bất kì ngắt nào nó sẽ nhảy về địa chỉ 0x0004 sau đó kiểm tra cờ ngắt(do mình tự viết) rồi nhảy vào đoạn chương trình ngắt tưng ứng .mong bác chỉ giúp !
Bạn hiểu đúng rồi đó.

Thân,

opto
20-01-2011, 08:05 PM
còn trong ccs mình viết thế nao nhỉ! minh viết vầy không biết đúng không:
#INT_EXT
EXT_ISR()
{


}
#time0_EXT
time0_ISR()
{


}