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)
-   -   Nhiều ngắt trong ứng dụng PIC (http://www.picvietnam.com/forum/showthread.php?t=590)

lestylo 24-08-2006 01:26 AM

Nhiều ngắt trong ứng dụng PIC
 
Các bác thân mến ! em mới tìm hiểu về PIC học viết bằng HT PIC có nhiều cái muốn hỏi lắm tuy nhiên trong mục PIC16F877A thì lại viết bằng ASEM em ko hiểu
em muốn hỏi về ngắt trong PIC như sau :
Nếu như trong ứng dụng của mình muốn sủ dụng nhiều ngắt bằng timer
trong khi con PIC trên chỉ có 3 timer 0,1,2 làm thế nào để sử dụng cho đáp ứng đủ cho ứng dụng của mình?????????
Thuật toán bằng C nó thế nào mong các bác chỉ giúp!

lestylo 24-08-2006 01:33 AM

thêm một vài câu hỏi nữa :
1_ muốn tính chính xác số chu ki lệnh của PIC thực hiện thì làm như nào mấy bác nhỉ?? để xác định đúng khoảng thời gian này thì mình mới có ngắt hoặc delay chẳng hạn
2_và nữa là việc sử dụng Watchdog khi nào ,đặc biệt là trong ngắt ??? em chưa rõ lắm cái vấn đề này

txt 25-08-2006 11:12 AM

bạn đang muốn sử dụng multi tasking đây mà . Vào site : www.microchipc.com ( có thêm chữ c ) , tham khảo các viết multi tasking. Nghĩa là :chỉ dùng 1 timer , mỗi khi có ngắt , biến a tăng thêm 1 , nếu = max cho trước thì thực hiện tác vụ aa . Cũng tăng biến b .khi b=b+max thì thực hiện tác vụ bb . VD : mỗi 1 ms thực hiện aa, mỗi 10 ms thực hiện bb , cứ thế với các tác vụ cc , dd, . . .

leduy173 28-08-2006 09:35 PM

Cho em hoi nếu viết theo cách đó thì ngắt timer liên tục xảy ra tùy theo giá trị mình định , như vậy thì có ảnh hưởng mạnh đến chương trình chính của minh ko?có ảnh hương j đến thanh ghi pc hay stack nhiều ko và nếu goi quá nhiều chương trình con thì sẽ tràn stack vậy gọi khoảng bao nhiêu thì tốt nhất và có cách giải quyết nào khác ko!
Cám ơn!!!

namqn 28-08-2006 10:58 PM

Bạn có thể tự tính toán, hay nhờ vào phần mềm mô phỏng để xác định thời gian còn lại dành cho chương trình chính (sau khi đã xử lý ngắt) giữa những lần ngắt, có ảnh hưởng hay không thì tùy vào bạn viết chương trình có đủ tốt hay không.

Các dòng PIC khác nhau có các mức hỗ trợ ngăn xếp khác nhau, PIC10 không hỗ trợ ngắt, PIC16 hỗ trợ 8 mức ngăn xếp bằng phần cứng (trừ một số PIC16 có nhân 12-bit), PIC18 hỗ trợ 31 mức ngăn xếp bằng phần cứng, PIC24 và dsPIC hỗ trợ ngăn xếp bằng phần mềm (về nguyên tắc chỉ bị giới hạn bởi dung lượng RAM khả dụng của chip).

Hy vọng đã trả lời các câu hỏi của bạn.

Thân,

leduy173 28-08-2006 11:32 PM

Như anh nói dòng 16F thì phần cứng hỗ trợ khoảng 8 mức ngăn xếp có nghĩa là ta có thể goi chương trinh con lồng nhau cũng khoảng 8 cấp phải không anh???

namqn 28-08-2006 11:59 PM

Trích:

Nguyên văn bởi leduy173 (Post 4662)
Như anh nói dòng 16F thì phần cứng hỗ trợ khoảng 8 mức ngăn xếp có nghĩa là ta có thể goi chương trinh con lồng nhau cũng khoảng 8 cấp phải không anh???

Đúng nếu bạn hoàn toàn không dùng ngắt! Chú ý là 8 cấp khi chương trình đang chạy nhé (nghĩa là nếu bạn gọi các chương trình con lồng nhau đến 8 cấp thì khi có ngắt PIC sẽ bị reset vì tràn stack).

Thân,

leduy173 29-08-2006 12:35 AM

Như vậy thì khi có ngắt thì các stack của mình cũng tăng lên giống như khi minh goi 1 chương trinh con vậy phải ko anh???Khi tràn stack thi pic sẽ bị reset sao???

namqn 29-08-2006 12:57 AM

Trích:

Nguyên văn bởi leduy173 (Post 4666)
Như vậy thì khi có ngắt thì các stack của mình cũng tăng lên giống như khi minh goi 1 chương trinh con vậy phải ko anh???Khi tràn stack thi pic sẽ bị reset sao???

Có hai điều kiện đối với stack mà các lõi xử lý thường được yêu cầu reset, đó là underflow (stack bị pop khi đã trống) và overflow (stack bị push vào khi đã đầy). Tuy nhiên, với các PIC16 thì khi overflow các ô nhớ cũ nhất của stack sẽ bị ghi đè chứ không gây ra reset. Do vậy việc gọi chương trình con hay chương trình xử lý ngắt nhiều hơn 8 lần chắc chắn sẽ làm chương trình chạy sai.

Thân,

leduy173 29-08-2006 02:31 AM

h thì em đã hiểu hơn rùi thanks anh namqn nhiều!!!

txt 29-08-2006 11:38 AM

Nếu dùng trình biên dịch CCS thì nó sẽ nhảy đến các hàm chủ yếu bằng lệnh GOTO , và do đó không tốn stack , trừ phi dùng những hàm như delay , . . thì có tốn . Nói chung nó có đưa ra dự báo mức stack tối đa , nên không phải lo có tràn hay không.Thông thường các hàm built in mà có thể dùng nhiều lần như hàm delay , nhân 32 , float, thì sẽ có tốn stack .

henremix 14-11-2009 08:18 PM

trong hoc lap trinh ban k the hoi vay duoc ,phai chiu kho ma ngi.mot van de trong lap trinh thi k biet bao nhieu cach giai quyet,moi nguoi thi co y do khac nhau k ai giong ai. neu ban da nam chac cac lenh thi lam duoc hay k la do ban,ban bien doi ,sap xep cac cau lenh nhu the nao la do ban vi ban da hieu cac cau lenh roi ma.plc cung vay ban phai ngi roi xe ra thoi,dung nen hoi,chi khi nao k ro phan cung ngoai suc cua ban thi ban co the trao doi voi moi nguoi...ok.chuc ban thanh cong,ban nen viet assembler moi nang cao tu duy duoc,chi co he thong lon moi viet c thoi ok


Múi giờ GMT. Hiện tại là 05:01 PM.

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