30/09/2018, 20:24
2 timer chạy song song với mikroc
Mình dùng mikroc để lập trình cho pic. giờ mình muốn cho 2 timer chạy song song thì làm như thế nào?
Bài liên quan
Mình dùng mikroc để lập trình cho pic. giờ mình muốn cho 2 timer chạy song song thì làm như thế nào?
Cụ thể hơn chút đi bạn
mình dùng 2cảm biến siêu âm hoạt động độc lập nhau. 1 timer đếm cho 1 cảm biến, mà 2 cảm biến chạy độc lập với nhau nên mình muốn cho 2 timer chạy song song với nhau thì dùng cách nào. dùng ngắt được không, mình biết dùng cấu trúc thread thì cũng được nhưng k biết cú pháp câu lệnh @@
Mình hiểu câu hỏi của bạn là: làm sao để xử lý xong xong đồng bộ 2 timer ?
Câu trả lời là:
Nếu vi xử lý của vi điều khiển bạn đang dùng không đa nhân (mà mình nghĩ là trường hợp bạn đang dùng là không ) thì điều đó là không thể được.
Bạn chỉ có thể xử lý tuần tự từng cảm biến, nếu bạn không làm ứng dụng realtime thì mình nghĩ thời gian hồi đáp của vi điều khiển là đủ để chấp nhận mà
Bạn phải xác định được PIC bạn đang sử dụng có bao nhiêu hardware Timer, nếu có nhiều hơn 1 bạn hoàn toàn có thể đến song song 2 timer cho 2 cảm biến tại cùng 1 thời điểm.
Mà cụ thể bạn đang dùng PIC dòng nào? nói củ thể thì mọi người sẽ dễ góp ý hơn
MÌnh nghĩ cái này không đúng, xung quanh VDK còn nhiều ngoại vi có thể chạy độc lập vs CPU, nên dù có đơn nhân hay đa nhân thì vẫn có thể thực hiện được nhiều chức năng (trong trường hợp này là timer counter) tại 1 thời điểm
Ý bạn là VĐK (trong trường hợp này là chạy không có OS) với VXL đơn nhân có thể chạy multi task đồng bộ được ???
Dùng HW Timer như bạn nói là chính xác. Trường hợp bạn @quangmn2293 muốn dùng SW Timer thì có thể dùng chung với Interrupt để đồng bộ.
Thì bạn bật 2 cái timer lên thôi chứ có gì đâu.
Thư viện mickroC rất dễ dùng và nhiều rồi còn gì. Chỉ trừ pic của bạn không có 2 timer.
Timer “cứng” chạy độc lập với CPU. CPU có thể cấu hình và xử lý ngắt của timer.
Ý mình trong trường hợp này có thể cân nhắc về số lượng timer để xử lý song song 2 cảm biến, không nhất thiết phải cân nhắc đến đa nhiệm hay ko đa nhiệm, OS hay non-OS.
mình dùng pic16f877, có 3 timer nhưng không biết làm sao để 2 timer chạy song song, có người nói dùng interrupt mà mình k áp dụng được, với thư viện mikroc mình tìm không có interrupt hay thread
không dùng real-time nhưng thời gian xử lý của 1 cảm biết phải mấy đến 0.25s nên cảm giác bị delay quá nhiều :((
mình muốn sử dụng interrupt thì chỉ cần dùng 2 lệnh
PORT.B0 = 0;
PORT.B0 = 1;
là nó tự nhảy đến interrupt đúng không, cách kích hoạt interrupt như vậy đúng k?
Mỗi timer đều có các thanh ghi để cấu hình làm việc, bạn chỉ cần set giá trị thanh ghi cấu hình phù hợp là timer sẽ chạy.
mà cho mình hỏi interrupt của pic16f877a và pic16f887 có khác nhau gì k?? làm mà nó k chạy -_-
C ơ chế interrupt là như nhau ở dòng VDK này, muốn chạy được bạn phải đọc kĩ datasheet tập trung vào phần Timer, thường thì quá trình các bước để enable interrupt cho một ngoại vi gồm các bước sau (nhắc lại là bạn nên xem kĩ lại datasheet để biết có thêm yêu cầu đặc biệt nào không) (lấy VD là Timer0 torng PIC16F87X family):
T0IE
trong thanh ghiINTCON
sẽ quyết định chuyện nàyINTCON |= T0IE; // enable Timer0 interrupt
GIE
trong thanh ghiINTCON
INTCON |= GIE; // enable global interrupt
T0IF
trong thanh ghiINT0CON
INT0CON &= ~T0IF; // clear interrupt flag
Bạn lập trình PIC nên tải datasheet dòng PIC đang sử dụng. Thông thường trong datasheet sẽ nói rất rõ những thứ mình cần, mình phải làm như thế nào, và có cả code mẫu bằng ASM.