Thông báo

Collapse
No announcement yet.

giải thích hộ em đoạn code này với!!!!

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • giải thích hộ em đoạn code này với!!!!

    interrupt [EXT_INT0] void ext_int0_isr(void)
    {
    // Place your code here
    if(!PINC.6) encoder++;
    else encoder--;
    if(encoder+1==0) encoder=0;
    }
    thanks các anh các chị nhiều

  • #2
    interrupt [EXT_INT0] void ext_int0_isr(void)// nhảy vào chương trình ngắt, còn ngắt j thì bạn tự tìm nhé
    {
    // Place your code here// dùng google tra từ nhé ^^
    if(!PINC.6) encoder++;// nếu đảo trạng thái chân C6 thì biến encoder tăng lên 1 đơn vị
    else encoder--;// nếu ko thì giảm 1 đơn vị
    if(encoder+1==0) //encoder=0; nếu encoder cộng với 1 bằng 0 thì encoder = 0;
    }

    mình chỉ dịch nguyên văn thôi, theo mình thì đoạn code này hơi vô lý
    Làm mọi việc đúng giờ

    Hãy là người Việt Nam hiện đại

    Comment


    • #3
      cảm ơn bạn đã trả lời giúp mình! bạn thấy nó vô lý ở chỗ nào?

      Comment


      • #4
        theo mình thì code này dùng đếm số xung encoder (động cơ hay đếm sản phẩm gì đó...)
        đoạn chỗ này:
        if(!PINC.6) encoder++;
        else encoder--;
        else xảy ra khi nào nhỉ?, khi pin c.6 ở mức 0 hay mức 1, thế thì nếu ngắt liên tục thì lúc nào cũng giảm ròi, ko thể có chuyện trùng hợp ngắt xảy ra đúng vào lúc đảo trạng thái đựoc
        if(encoder+1==0) encoder=0; cái này thì biến encoder có số âm ròi, giả sử sau else kia bằng -1, thì lập tức lại bằng 0 ???
        Làm mọi việc đúng giờ

        Hãy là người Việt Nam hiện đại

        Comment


        • #5
          cảm ơn bạn đã quan tâm nhé, có lẽ để mình tìm hiểu thêm đã.Mình cũng chả biết nó sai như thế nào nữa.

          Comment


          • #6
            stargreen nhầm rồi if(!PINC.6) là cách viết gọn của if(PIN.6==0), nôm na là if(biến) bạn làm thế nào thì làm nhưng khi "biến = true" thì CT sẽ thực hiện các lệnh trong if(biến){}.

            Khi encoder (giả sử là 8bit) = 0 mà bạn vẫn thực hiện "encoder--;" thì khi đó encoder == 255 như vậy thì sẽ sai ý đồ của coder nên lại phải gán "encoder = 0;" chứ không phải vì nó âm.
            Nhớ quá khứ buồn rơi nước mắt.
            Nhìn tương lai lạnh buốt sống lưng.
            Y!M: nhamdtk4.

            Comment


            • #7
              Mình thì thường viết kiểu này :

              interrupt [EXT_INT0] void ext_int0_isr(void)
              {
              DEM_EN0++;
              if(DEM_EN0 == 1000000)
              { DEM_EN0 = 0;
              };
              }

              Tín hiệu encoder đếm được dùng điều chỉnh các chỗ khác !
              Bạn dùng ngắt ngoài rồi thì đặt điều kiện ngắt vào đây nữa làm gì chứ ? Cứ có tín hiệu ngắt ngoài tác động là ngắt thực hiện và tăng biến đếm encoder thôi

              Comment

              Về tác giả

              Collapse

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

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

              Collapse

              Đang tải...
              X