RP Store Tìm linh kiện theo mã, gửi BOM nhận báo giá Gửi BOM

lập trình đa nhiệm cho vi diều khiển dùng timer

Collapse
X
 
  • Giờ
  • Show
Clear All
new posts
  • nhquangdt3k5
    Thành viên tích cực
    • Nov 2010
    • 433

    #1

    lập trình đa nhiệm cho vi diều khiển dùng timer

    ai biết viết hàm delay dùng timer cho vi điều khiển mà khi delay CPU vẫn làm được những việc khác không? chẳng hạn như khi delay vi điều khiển vẫn có thể quét được phím
    em tham khảo code trên diễn đàn nhưng khi delay CPU không làm được gì cả. mong các tiền bối chỉ giáo.
    cảm ơn nhiều.
    Never forget who you are!
  • enter88
    Thành viên tích cực
    • Nov 2008
    • 238

    #2
    Cái này bạn nên tìm hiểu về freertos.

    Comment

    • nhquangdt3k5
      Thành viên tích cực
      • Nov 2010
      • 433

      #3
      Nguyên văn bởi enter88 Xem bài viết
      Cái này bạn nên tìm hiểu về freertos.
      đây là đoạn code mình viết để tạo xung ở PORTA.0 tạo ra 1 xung cứ 1ms tích cực ở mức 1 và 2ms tích cực mức 0 nhưng nó không tạo ra xung như ý muốn bạn có thể check giúp mình không?
      #include <mega16.h>
      #define yes 1
      #define no 0
      void KhoiTao();
      unsigned long ulTime=0;
      unsigned long ulTimeDelay = 0;
      interrupt [TIM0_OVF] void timer0_ovf_isr(void) //ngat timer 100us
      {
      TCNT0=0x9C;
      ulTime++;//mot lan la 100us
      }

      char Delay_100us_(unsigned long *ulMoc_thoi_gian,unsigned long ulThoi_gian_tre)
      {
      if(ulTime>0xFFFFFFFD) ulTime = 0;
      if(*ulMoc_thoi_gian == 0)
      *ulMoc_thoi_gian = ulTime+ulThoi_gian_tre; //set future time will check
      if(ulTime >= *ulMoc_thoi_gian)
      return yes;
      else
      return no;
      }
      //----- ham main------
      void main(void)
      {
      KhoiTao();
      while (1)
      {
      //-------------tao ra xung co do rong khac nhau o muc 1 1ms muc 0 20ms;
      if(Delay_100us_(&ulTimeDelay,10)==no) // tao ra xung tich cuc muc 1 10ms
      {
      PORTA.0 = 0x01;
      ulTimeDelay = 0;
      }
      else
      if(Delay_100us_(&ulTimeDelay,30)==no) //tao xung tih cuc muc 0 20ms
      {
      PORTA.0 = 0x00;
      ulTimeDelay = 0;
      }
      }
      }
      void KhoiTao()
      {

      PORTA=0x00;
      DDRA=0xFF;
      TCCR0=0x02;
      TCNT0=0x9C;
      OCR0=0x00;
      TIMSK=0x01;
      ACSR=0x80;
      #asm("sei")
      }
      cảm ơn nhiều.
      Never forget who you are!

      Comment

      • bvhoang
        Thành viên tích cực
        • Oct 2008
        • 220

        #4
        Nguyên văn bởi nhquangdt3k5 Xem bài viết
        ai biết viết hàm delay dùng timer cho vi điều khiển mà khi delay CPU vẫn làm được những việc khác không? chẳng hạn như khi delay vi điều khiển vẫn có thể quét được phím
        em tham khảo code trên diễn đàn nhưng khi delay CPU không làm được gì cả. mong các tiền bối chỉ giáo.
        cảm ơn nhiều.
        Bạn vào đây và tìm hiểu về lập trình đa nhiệm với hOS nhé!!!
        Vấn đề đang được giới điện tử ái mộ, chúng ta hãy cùng nhau trao đổi, thảo luận, xây dựng chủ đề khá mới mẻ này....!Mod: opentdoors, bqviet

        Comment

        • nhquangdt3k5
          Thành viên tích cực
          • Nov 2010
          • 433

          #5
          bác có thể check hộ mình đoạn code trên được không? mình viết mãi hàm delay dùng time mà không được. tìm trên diễn đàn cũng không thấy. chỉ toàn là delay mà khi delay CPU không làm gì cả. nếu có thì cho mình xin đoạn code tham khảo luôn.
          cảm ơn nhiều
          Never forget who you are!

          Comment

          • nhquangdt3k5
            Thành viên tích cực
            • Nov 2010
            • 433

            #6
            không có bác nào check giúp mình đoạn code này sao??
            Never forget who you are!

            Comment

            Về tác giả

            Collapse

            nhquangdt3k5 Tìm hiểu thêm về nhquangdt3k5

            Bài viết mới nhất

            Collapse

            Đang tải...