Thứ Sáu, 15 tháng 6, 2018

Published tháng 6 15, 2018 by Nặc danh with 1 comment

[PIC 16F877A] Lập trình hệ điều hành thời gian thực RTOS trên CCS for PIC


RTOS ((Real Time operating System) cho phép chạy nhiều tác vụ đồng thời song song với nhau. Mình đã nói đến phần này ở những bài viết trước các bạn có thể tham khảo bài :
Thực hiện tác vụ song song bằng hàm delay
- Còn với bài hướng dẫn này chúng ta không dùng delay nữa mà dùng hàm RTOS có sẵn được hỗ trợ trên trình biên dịch CCS để điều khiển
- Tôi cũng đưa ra một ví dụ đó là lập trình 5 led có chu kỳ sáng tắt khác nhau và chạy song song với nhau.
Led 1  : 250ms
Led 2 : 500ms
Led 3 : 750ms
Led 4 : 1000ms
Led 5 : 1250ms
Lưu ý một số điểm quan trọng: 
#use rtos(timer=0,minor_cycle=100ms) :
ở đây minor_cycle là thời gian dài nhất cho mỗi task hoạt động, timer là chon timer để dùng có thể  là 0 ,1 ,2 và nhớ mỗi timer có số tràn khác nhau 
#task(rate=200ms,max=100ms) :
Ở đây rate là chu kỳ làm việc trong mỗi task (rate=n*minor_cycle : n là số nguyên), ví dụ led nháy với chu kỳ 200ms , max là thời gian làm việc của task này, lưu ý rate và max làm việc độc lập với nhau, nếu hết thời gian max mà task chạy chưa hết lệnh trong nó thì sẽ dừng lại và chuyển sang làm việc ở task khác. và nó nhớ vị trí task đã dừng và đến lần hoạt động sau thì nó thực hiện tiếp nơi nó bị dừng.
CODE trên CCS With PIC16f887:

#include <16f887 .h="">
#fuses NOMCLR, NOBROWNOUT, NOLVP, INTRC_IO
#use delay(clock = 4MHz)
#use fast_io(B)
#use rtos(timer = 0, minor_cycle = 50ms)

#task(rate = 250ms, max = 50ms) // 1st RTOS task (executed every 250ms)
void led1(){
output_toggle(PIN_B0);
}
#task(rate = 500ms, max = 50ms) // 2nd RTOS task (executed every 500ms)
void led2(){
output_toggle(PIN_B1);
}
#task(rate = 750ms, max = 50ms) // 3rd RTOS task (executed every 750ms)
void led3(){
output_toggle(PIN_B2);
}
#task(rate = 1000ms, max = 50ms) // 4th RTOS task (executed every 1000ms)
void led4(){
output_toggle(PIN_B3);
}
#task(rate = 1250ms, max = 50ms) // 5th RTOS task (executed every 1250ms)
void led5(){
output_toggle(PIN_B4);
}
void main(){
setup_oscillator(OSC_4MHZ); // Set the internal oscillator to 4MHz
output_b(0); // All PORTB register pins are zeros
set_tris_b(0); // Configure PORTB pins as outputs
rtos_run(); // bắt đầu chạy rtos
}
      edit

1 nhận xét:

  1. [Pic 16F877A] Lập Trình Hệ Điều Hành Thời Gian Thực Rtos Trên Ccs For Pic ~ Thủ Thuật Word >>>>> Download Now

    >>>>> Download Full

    [Pic 16F877A] Lập Trình Hệ Điều Hành Thời Gian Thực Rtos Trên Ccs For Pic ~ Thủ Thuật Word >>>>> Download LINK

    >>>>> Download Now

    [Pic 16F877A] Lập Trình Hệ Điều Hành Thời Gian Thực Rtos Trên Ccs For Pic ~ Thủ Thuật Word >>>>> Download Full

    >>>>> Download LINK

    Trả lờiXóa