Thông báo

Collapse
No announcement yet.

Kết hợp timer với counter

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

  • 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.

  • #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


    • #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


      • #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


        • #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


          • #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


            • #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


              • #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


                • #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, 14:38.

                  Comment


                  • #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...
                    X