Thông báo

Collapse
No announcement yet.

Ngắt INT và timer

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

  • Ngắt INT và timer

    Chào mọi người !
    Em muốn dùng TIMER để đếm thời gian giữa 2 lần ngắt ngoài INT0 (ngắt ngoài nối với quang trở) thì em phải code như thế nào ?
    Thân !

  • #2
    Nguyên văn bởi toan.ndn Xem bài viết
    Chào mọi người !
    Em muốn dùng TIMER để đếm thời gian giữa 2 lần ngắt ngoài INT0 (ngắt ngoài nối với quang trở) thì em phải code như thế nào ?
    Thân !
    bạn dùng thêm 1 ngắt trong time1 nữa. khi nào ngắt ngoài int thực hiện thì nó bắt đàu đếm đếm đến khi nào nó ngắt lại thì nó dừng vào lưu dữ liệu đoa vào 1 biến rồi muốn đếm tiếp thì cho nó đếm tiếp thì cho nó đếm hoặc cho nó qiuay lại từ đầu thì cho nó về 0




    facebook:

    Comment


    • #3
      Nguyên văn bởi THSANG AUTO Xem bài viết
      bạn dùng thêm 1 ngắt trong time1 nữa. khi nào ngắt ngoài int thực hiện thì nó bắt đàu đếm đếm đến khi nào nó ngắt lại thì nó dừng vào lưu dữ liệu đoa vào 1 biến rồi muốn đếm tiếp thì cho nó đếm tiếp thì cho nó đếm hoặc cho nó qiuay lại từ đầu thì cho nó về 0
      Lỡ 2 ngày mới có ngắt Int lại thì sao.

      Comment


      • #4
        Nguyên văn bởi avr Xem bài viết
        Lỡ 2 ngày mới có ngắt Int lại thì sao.
        1000 ngày bạn không ngắt cũng chẳng sao




        facebook:

        Comment


        • #5
          Nguyên văn bởi toan.ndn Xem bài viết
          Chào mọi người !
          Em muốn dùng TIMER để đếm thời gian giữa 2 lần ngắt ngoài INT0 (ngắt ngoài nối với quang trở) thì em phải code như thế nào ?
          Thân !
          DÙng ngắt ngoài kích timer. DÙng ngắt timer để lưu trữ thông tin của timer.
          Thân

          Comment


          • #6
            Thế lỡ timer1 đang chạy ngon trớn chưa đến ngưỡng để ngắt thì lại có ngắt INT ngoài nữa thì sao?

            Comment


            • #7
              Thế lỡ timer1 đang chạy ngon trớn chưa đến ngưỡng để ngắt thì lại có ngắt INT ngoài nữa thì sao?

              Comment


              • #8
                Nguyên văn bởi toan.ndn Xem bài viết
                Chào mọi người !
                Em muốn dùng TIMER để đếm thời gian giữa 2 lần ngắt ngoài INT0 (ngắt ngoài nối với quang trở) thì em phải code như thế nào ?
                Thân !
                Tôi chỉ đùa chọc ngoáy chơi thôi, nhưng phóng đại 1000 ngày như thanhsang-auto với timer vdk thì không khả thi đâu, chắc bạn ấy cũng chỉ joking. Có thể bạn đang quan tâm đến vấn đề đếm tần số của sự kiện, xung....vì thế nên làm thế này:
                - Xác định phạm vi của tần số, tức là khả năng liên tục, nhanh hay chậm để chọn timer trong với độ chia tần thích hợp làm độ phân giải. Vì INT không biết đến lúc nào nên tốt nhất là đồng bộ, tức là kiểm tra ngõ vào trong khi tăng timer cùng với một dãy lệnh đi kèm (tương ứng với một khoảng thời gian tính trước được), lưu giữ, cộng, trừ một ít để tính số lần xảy ra.
                -Nếu dùng ngắt INT thì cẩn thận vì nhiều ngắt sẽ dễ chồng chập, lỗi, chú ý nơi nó bỏ đi và quay lại, nhiều khi không như dự tính đâu. Hãy chạy từng lệnh để nhận ra điều này.
                -Suy nghĩ đơn giản là: cần có một bà đồng hồ (analog, digital, vdk...đều được) chạy hoàn toàn độc lập, ông INT lâu lâu ghé thăm, thì việc đầu tiên cần ông INT làm là nhìn đồng hồ, nhớ, trừ ra thời gian với lần ghé thăm trước để ra thời gian cần tính, lưu giữ, in ấn kết quả....sau một thời gian định kì. Việc còn lại là cụ thể nó bằng mạch, bằng chương trình...

                Comment


                • #9
                  sao xử lý cái kiểu kỳ cục vậy ? Ngắt ngoài thì liên quan gì đến ngắt timer ?

                  Cứ để sư kiện ngắt ngoài , khi nào ngắt ngoài thì khởi động timer , ngắt timer rồi đếm ... đếm cho đến khi có ngắt ngoài lần nữa ( thế là đo được thời gian giữa 2 lần ngắt ngoài ). Bài toán đơn giản mà .

                  Lấy VD : Dùng thạch anh 4Mhz , chu kỳ máy 1uS , sử dụng ngắt ngoài và timer1 ( 16 bit )

                  sử dụng biến long double ... thoigian;

                  thoigian=0 ;

                  Ngắt ngoài lần 1 ... start timer1 , ngắt timer1 .

                  Mỗi lần ngắt timer1 ==> 65535us ( cỡ 65ms ), thoigian++;

                  Ngắt ngoài lần 2 ... stop timer1 , disable ngắt timer1 . Tính thời gian .

                  Total_time = thoigian*65535us + timer1_value ;

                  ---- Do việc 65535 là con số lớn , với MCU 8 bit sẽ dễ bị tràn khi thực hiện phép nhân ... ta sẽ xử lý theo kiểu cấp số của nó .... thay vì nhân với 65535 ta nhân với 65,535 hoặc 6,5535 hoặc 0,65535 hoặc 0,065535 .v.v lúc đó kết quả là mili giây ... giây ( nếu nhân với 0,065535 ) ....

                  --- Trên tôi chỉ tính timer1 với prescaler = 1 .... chứ chia 8 lần nữa thì ... thoải mái đi !
                  lúc đó vô tư mà sài !

                  kể cả 1000 ngày thì chỉ có vài chục triệu giây mà thôi .
                  1000 * 24 giờ * 60 phút * 60 giây = 86 triệu 400k giây ! một con số quá nhỏ bé trong tính toán với MCU 8 bit !

                  (kiểu long double có giá trị max tới 3,4 * 10^38 cơ mà )
                  Module RF chuyên dụng điều khiển, truyền dữ liệu, thiết kế đề tài, dự án điện tử - chuyển giao công nghệ... ĐT: 0904964977 - email: dientuqueduong@yahoo.com

                  Comment


                  • #10
                    em cảm ơn mọi người !

                    Comment


                    • #11
                      Nguyên văn bởi queduong Xem bài viết
                      sao xử lý cái kiểu kỳ cục vậy ? Ngắt ngoài thì liên quan gì đến ngắt timer ?
                      ý anh là sao ạ.




                      facebook:

                      Comment


                      • #12
                        Nguyên văn bởi THSANG AUTO Xem bài viết
                        ý anh là sao ạ.
                        Xem bài số #6, #7 ... Thế lỡ timer1 đang chạy ngon trớn chưa đến ngưỡng để ngắt thì lại có ngắt INT ngoài nữa thì sao?
                        ( chẳng hiểu muốn truyền đạt cái gì luôn ??? )
                        ngắt ngoài và ngắt timer chẳng có liên quan gì đến nhau nên ngon trớn hay không thì chẳng có việc gì liên quan . Kể cả 2 ngắt xảy ra cùng nhau thì chúng cũng được lưu trữ ở các flag ... ta vẫn xử lý ngon lành.
                        Module RF chuyên dụng điều khiển, truyền dữ liệu, thiết kế đề tài, dự án điện tử - chuyển giao công nghệ... ĐT: 0904964977 - email: dientuqueduong@yahoo.com

                        Comment

                        Về tác giả

                        Collapse

                        toan.ndn Tìm hiểu thêm về toan.ndn

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

                        Collapse

                        Đang tải...
                        X