Kết hợp timer với counter

Collapse
X
 
  • Giờ
  • Show
Clear All
new posts
  • qwerty68
    Thành viên chính thức
    • Apr 2011
    • 36

    #1

    Kết hợp timer với counter

    Chào các bác ạ,
    Em đang làm cái mạch này. Dùng ngắt của counter đếm các sự kiện xảy ra từ sensor. Cái này thì chạy tốt rồi. Nhưng do tính chất của sensor, em chỉ cần hiển thị là 1 phút là sẽ có bao nhiêu sự kiện xảy ra, counter đếm được bao nhiêu sự kiện. Hiển thị từng phút một thôi. Nhưng giờ em lập trình vẫn chưa ra, chưa hiểu thuật toán là gì. Các bác có thể giúp em được không ạ? Em xin chân thành cảm ơn.
  • Đức_CDT
    Thành viên tích cực
    • Mar 2009
    • 213

    #2
    Bạn dùng một timer khác tạo ngắt trong 1 phút. Trong hàm ngắt thì đọc giá trị counter.

    Comment

    • tranhieu_ece
      Thành viên tích cực
      • Oct 2009
      • 272

      #3
      Nguyên văn bởi Đức_CDT Xem bài viết
      Bạn dùng một timer khác tạo ngắt trong 1 phút. Trong hàm ngắt thì đọc giá trị counter.
      Ngắt gì mà tới 1 phút hả bác???

      Comment

      • qwerty68
        Thành viên chính thức
        • Apr 2011
        • 36

        #4
        Nguyên văn bởi tranhieu_ece Xem bài viết
        Ngắt gì mà tới 1 phút hả bác???
        Đấy, em cũng hơi bị khó hiểu khoản ngắt tới 1 phút như thế bác ạ. Số là cái nhiệm vụ của em là dùng trong vật lý nên phải đếm số tín hiệu trong vòng 1 phút bác ạ. Em chưa xài ngắt tới 1 phút nên chưa biết viết ntn. Bác nào biết viết không chỉ em với? Em xin cảm ơn.

        Comment

        • tranhieu_ece
          Thành viên tích cực
          • Oct 2009
          • 272

          #5
          bác dùng thêm vài biến nữa là có thể làm đc mà. Ví dụ ngắt 1ms thì bác chỉ cần đếm 60000 là đc 1 phút rồi, khi vào ngắt thì tăng biến a lên 1 đơn vị, tăng đến 250 khi tràn thì tăng biến b lên 1. khi nào b bằng 240 thì bác đọc giá trị counter, a x b = 60000 là 1 phút rùi

          Comment

          • qwerty68
            Thành viên chính thức
            • Apr 2011
            • 36

            #6
            Nguyên văn bởi tranhieu_ece Xem bài viết
            bác dùng thêm vài biến nữa là có thể làm đc mà. Ví dụ ngắt 1ms thì bác chỉ cần đếm 60000 là đc 1 phút rồi, khi vào ngắt thì tăng biến a lên 1 đơn vị, tăng đến 250 khi tràn thì tăng biến b lên 1. khi nào b bằng 240 thì bác đọc giá trị counter, a x b = 60000 là 1 phút rùi
            Em không hiểu lắm ạ. Bác viết thử code cho em được không ạ? Em viết thử kiểu này rồi, nhưng mà nó cứ sai lè ra í, ko chạy được ạ.

            Comment

            • tranhieu_ece
              Thành viên tích cực
              • Oct 2009
              • 272

              #7
              a & b là biến toàn cục nha bác.
              a++;
              if (a == 250)
              {
              b++;
              a = 0;
              if(b == 240)
              {
              b=0;
              xuat gia tri ra;
              }
              }

              Comment

              • qwerty68
                Thành viên chính thức
                • Apr 2011
                • 36

                #8
                Nguyên văn bởi tranhieu_ece Xem bài viết
                a & b là biến toàn cục nha bác.
                a++;
                if (a == 250)
                {
                b++;
                a = 0;
                if(b == 240)
                {
                b=0;
                xuat gia tri ra;
                }
                }
                Vâng ạ, để em thử xem sao ạ. Cái này là ở trong hàm ngắt bác nhỉ

                Comment

                • Đức_CDT
                  Thành viên tích cực
                  • Mar 2009
                  • 213

                  #9
                  Bạn viết hàm ngắt 1ms rồi đưa code của bạn tranhieu vào hàm con phục vụ ngắt.
                  Last edited by Đức_CDT; 20-10-2012, 13:38.

                  Comment

                  • qwerty68
                    Thành viên chính thức
                    • Apr 2011
                    • 36

                    #10
                    Mình làm thử mà nó vẫn không chạy bạn ạ. Các bạn xem hộ mình nhé.
                    void timer(void) interrupt 1
                    {
                    TH0=0xf6;
                    TL0=0x36;
                    j++;
                    if(j==5000)
                    {
                    j=0;

                    i=0;
                    }


                    }
                    void main(void)
                    {
                    EA=1;
                    EX1=1;
                    //ET0=1
                    TMOD=0x01;
                    TH0=0xf6;
                    TL0=0x36;
                    IT1=1;
                    TR0=1;
                    lcdinit();
                    lcdcontrol(0x80);
                    lcdwrites("Counts:");
                    lcdcontrol(0xc0);
                    lcdwrites(" HUS-VNU");

                    //lcdcontrol(0x0);
                    //lcdwrites("Cpm");

                    while(1)

                    {
                    lcdcontrol(0x87);


                    number(i);


                    }
                    }
                    Em chả hiểu lỗi ở đâu nữa

                    Comment

                    Về tác giả

                    Collapse

                    qwerty68 Trịnh Ngọc Duy Tìm hiểu thêm về qwerty68

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

                    Collapse

                    Đang tải...