Thông báo

Collapse
No announcement yet.

Cách đếm số lần tràn timer của Atmega16

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

  • Cách đếm số lần tràn timer của Atmega16

    cho e hỏi là với chế độ bình thường Timer1 sau khi đếm từ 0-->top =65536 thì avr sẽ tràn và cờ Tov1 sẽ được bật lên 1.nhưng đến lần thứ 2 tràn thì TOV1 sẽ ở giá trị mấy(e đọc datasheet mà ko hiểu chỗ này),như vậy nếu muốn đọc số lần tràn của Timer 1 thì mình phải làm sao có cách nào khác ngoài việc quan sát cờ TOV1 ko ạ,ai có code hay ví dụ mẫu cho e xin để e dễ hình dung với .E mới tiếp xúc AVR nên còn nhiều thắc mắc mong các mem giúp đỡ nhiều

  • #2
    Bạn không hiểu bản chất của cờ TOV1, cờ đó chỉ là báo hiệu tràn thôi, còn nếu muốn đếm số lần tràn thì bạn phải sử dụng một biến khác nhé

    Comment


    • #3
      vậy là cách sử dụng biến ntn b cho mình gợi ý chút đi ,biến này là từ trong các bit,cờ trong timer hay từ code ra vậy

      Comment


      • #4
        Bạn sử dụng thanh ghi R0 hay R1...... gì đó ở các bank thanh ghi ấy

        Comment


        • #5
          hix - khổ quá cơ
          thế này này:

          cờ trong timer được tự động bật lên 1 khi có tràn - và để cho lần tràn sau thì ta phải xóa đi trong chương trình ngắt

          giả sử: demsolantran la 1 biến

          int demsolantran = 0;


          Chuong trinh ngat timer:
          void ngat_timer()
          {
          xoa co bao ngat di ( cho OV = 0);
          tăng biến demsolantran lên 1 đơn vị ( demsolantran = demsolantran + 1 )

          }
          Be quan. Plz contact through email:

          Comment


          • #6
            Nguyên văn bởi Lenh Ho Xem bài viết
            hix - khổ quá cơ
            thế này này:

            cờ trong timer được tự động bật lên 1 khi có tràn - và để cho lần tràn sau thì ta phải xóa đi trong chương trình ngắt

            giả sử: demsolantran la 1 biến

            int demsolantran = 0;


            Chuong trinh ngat timer:
            void ngat_timer()
            {
            xoa co bao ngat di ( cho OV = 0);
            tăng biến demsolantran lên 1 đơn vị ( demsolantran = demsolantran + 1 )

            }
            Ý bạn ấy là muốn đếm số lân tràn

            Comment


            • #7
              thế biến demsolantran ban ko hiểu ý nghĩa sao - haizzzzz
              Be quan. Plz contact through email:

              Comment


              • #8
                Mình mới học 8051 thôi nhưng nếu trong trường hợp muốn đếm số lần tràn thì khi tràn lần 1 cờ tràn ( TFx) sẽ báo 1 thì ta chỉ việc cộng vào thanh ghi A rồi xóa đi sau đó tràn tiếp thì cộng tiếp vào thôi. Bạn xem trong AVR thanh ghi để xử lý phép toán học là gì nhé.

                Comment


                • #9
                  Nguyên văn bởi lucky3379 Xem bài viết
                  cho e hỏi là với chế độ bình thường Timer1 sau khi đếm từ 0-->top =65536 thì avr sẽ tràn và cờ Tov1 sẽ được bật lên 1.nhưng đến lần thứ 2 tràn thì TOV1 sẽ ở giá trị mấy(e đọc datasheet mà ko hiểu chỗ này),như vậy nếu muốn đọc số lần tràn của Timer 1 thì mình phải làm sao có cách nào khác ngoài việc quan sát cờ TOV1 ko ạ,ai có code hay ví dụ mẫu cho e xin để e dễ hình dung với .E mới tiếp xúc AVR nên còn nhiều thắc mắc mong các mem giúp đỡ nhiều
                  Bác cần khai báo 1 biến đếm số lần tràn, đặt chế độ ngắt với Timer1. Khi tràn cờ Tov1 được bật lên, hàm phục vụ ngắt sẽ chạy và cờ này tự động xóa, lần 2 tràn thì cờ này chỉ là 1 thôi. Nếu không đặt chế độ ngắt, cờ này cũng chỉ lấy giá trị 1 thôi. Các hàm và thủ tục bác có thể lấy trong codevision:
                  Hàm ngắt đây:
                  unsigned int demsolantran;
                  // Timer 1 overflow interrupt service routine
                  interrupt [TIM1_OVF] void timer1_ovf_isr(void)
                  {
                  // Place your code here
                  demsolantran++;
                  }

                  Phần khởi tạo đây:
                  // Clock value: 16000.000 kHz
                  // Mode: Normal top=FFFFh
                  // OC1A output: Discon.
                  // OC1B output: Discon.
                  // Noise Canceler: Off
                  // Input Capture on Falling Edge
                  // Timer 1 Overflow Interrupt: On
                  // Input Capture Interrupt: Off
                  // Compare A Match Interrupt: Off
                  // Compare B Match Interrupt: Off
                  TCCR1A=0x00;
                  TCCR1B=0x01;
                  // Timer(s)/Counter(s) Interrupt(s) initialization
                  TIMSK=0x04;

                  Comment

                  Về tác giả

                  Collapse

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

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

                  Collapse

                  Đang tải...
                  X