PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Cơ bản về vi điều khiển và PIC (http://www.picvietnam.com/forum/forumdisplay.php?f=8)
-   -   Tự định nghĩa ngắt trong PIC (http://www.picvietnam.com/forum/showthread.php?t=2815)

thienthan_den 19-09-2008 11:20 AM

Tự định nghĩa ngắt trong PIC
 
Có một vấn đề nhỏ là: ta không muốn dùng các ngắt chuẩn mà Pic hỗ trợ (có thể vì dùng hết rùi...) mà ta muốn định nghĩa một ngắt khác. VD ngắt trên chân RD0 của Pic chẳng hạn. Vậy thì phải làm cách nào??? Nếu có ai biết thì chỉ cho em với.
PS: Em có giải pháp này không biết chấp nhận được không, đó là dùng multithread (đa tiến trình) để lập trình cho Pic. Không biết thế nào nữa. Nhưng đến bây giờ vẫn chưa có tài liệu gì về vấn đề này. Xin mọi người giúp đỡ
Thanks very much.

minhsondaklak 19-09-2008 03:32 PM

1. Nhận tín hiệu vào RD0 như là ngắt:
Code:

Void MAIN()
{
...
  while (1)
        {
        ...
        if (RD0 == 1) {Muốn làm gi thi làm}
        }
}

Mình chỉ biết có vậy, dùng biện pháp quét RD0 trong vòng lặp While.
Kết quả không đáp ứng 100% như ngắt.
Nếu thời gian xảy ra sự kiện RD0=1 ngắn hơn thời gian chạy hết 1 vòng lặp While thì "lần ngắt" đó có thể bị bỏ qua.
2. multithread: Bạn hỏi Google, tôi đã gặp bên "dientuvietnam" thì phải.

namqn 19-09-2008 05:20 PM

Trích:

Nguyên văn bởi thienthan_den (Post 18930)
Có một vấn đề nhỏ là: ta không muốn dùng các ngắt chuẩn mà Pic hỗ trợ (có thể vì dùng hết rùi...) mà ta muốn định nghĩa một ngắt khác. VD ngắt trên chân RD0 của Pic chẳng hạn. Vậy thì phải làm cách nào??? Nếu có ai biết thì chỉ cho em với.
PS: Em có giải pháp này không biết chấp nhận được không, đó là dùng multithread (đa tiến trình) để lập trình cho Pic. Không biết thế nào nữa. Nhưng đến bây giờ vẫn chưa có tài liệu gì về vấn đề này. Xin mọi người giúp đỡ
Thanks very much.

PIC chỉ là một vi điều khiển, không hỗ trợ multithread một cách tự nhiên. Hệ thống nhúng với PIC làm bộ não là một máy tính chuyên dụng, chứ không phải máy tính đa dụng. Do đó, nhiều khái niệm của máy tính đa dụng không áp dụng cho hệ thống nhúng dùng vi điều khiển.

Thân,

thienthan_den 20-09-2008 10:37 AM

Cảm ơn anh Nam, em hiểu rồi.
Vậy là cách dùng multithread không được rồi. Không biết còn cách nào khác không?
Làm như bạn minhsondaklak thì đúng là có rắc rối như bạn nói, nhất là với những chương trình có hàm main() dài!!!
Có bạn nào biết cách làm không, chỉ mình với.

minhsondaklak 20-09-2008 10:45 AM

Không sợ Main() dài, chỉ sợ While() dài thôi !


Múi giờ GMT. Hiện tại là 06:29 AM.

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam