Thông báo

Collapse
No announcement yet.

[hỏi] hàm tạo trễ

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

  • [hỏi] hàm tạo trễ

    em viết bằng phần mềm keil C chương trình cứ sau 2000us thì kích một xung chương trình như sau :
    #include<reg51.h>
    sbit xung = P1^0;
    void delay_us(unsigned long x)
    {
    unsigned long i ;
    for(i=0;i<x;i++);

    }
    void main(void)
    {
    while(1)

    {
    xung = 0;
    delay_us(2000);
    xung = 1 ;


    }

    }

    Nhưng khi chạy thì khoảng thời gian kích xung lại không như vậy , thời gian kích xung ngắn nhất là 0.1s Click image for larger version

Name:	untitled.JPG
Views:	1
Size:	602.4 KB
ID:	1419878

  • #2
    Bởi vì hàm delay sai tè me hột le. Mỗi lần long i nó tăng được 1 phải mất mấy lệnh ASM. Nhân với 2000 lần thì nó ra không biết là bao nhiêu nữa, chưa kể là CISC nhiều lệnh mất 2 chu kì máy => sai. ( Chưa tính mô phỏng dùng thạch anh sai ).

    Comment


    • #3
      Vậy em muốn tạo delay chuẩn bởi ngôn ngữ C thì phải viết như thế nào ạ ? thạch anh là 12M ?

      Comment


      • #4
        Nguyên văn bởi datinhtt Xem bài viết
        Vậy em muốn tạo delay chuẩn bởi ngôn ngữ C thì phải viết như thế nào ạ ? thạch anh là 12M ?
        Nếu liên quan đến xung thì tốt nhất là dùng timer ấy, chứ delay thì .... haiz. Bạn tìm hiểu về timer đi vì có vô vàn ứng dụng mà nếu không có timer vẫn chạy được nhưng nếu dùng timer thì cho tính chính xác cao mà lại dễ lập trình hơn rất nhiều.

        Comment


        • #5
          Timer hay cách bình thường đều cho kết quả như nhau, đều là tương đối. Với cách tự tính hàm delay chỉ có cách tính sơ lược, viết áng chừng rồi bug dần đến khi nào đúng nhất.

          Comment


          • #6
            Nguyên văn bởi duong_act Xem bài viết
            Timer hay cách bình thường đều cho kết quả như nhau, đều là tương đối. Với cách tự tính hàm delay chỉ có cách tính sơ lược, viết áng chừng rồi bug dần đến khi nào đúng nhất.
            Nói rằng chỉ là tuơng đối, đúng thôi nhưng dám khẳng đinh timer độ chính xác sẽ cao hơn. Chỉ cần tần số không bị quá cao dẫn đến ngắt đè ngắt thì trong truơng chình phục vụ ngắt thời gian ta không cho dừng đếm timer thì độ chính xác của timer có thể ở tần số khoảng 40khz mà chỉ sai khoảng +-10 xung, thế chắc chắn là khá đủ rồi bác nhỉ?

            Comment


            • #7
              Chuẩn rồi. Nhưng mình nghĩ là hơn 10 xung. Với hơn 10 xung thì delay thường thừa sức .
              Last edited by duong_act; 08-12-2013, 22:47.

              Comment


              • #8
                Không hơn 10 xung đâu bác ạ, hôm trước mình thử đếm "tất nhiên là đồ tự chế dùng 1307 tạo ngắt 1s" mà hôm đó thử điều chế PWM để 50Khz hình như sai cỡ 15 xung thì phải nên 40k chắc chỉ khoảng 10 xung thôi. Quan trọng là nếu dùng delay tính toán không sung sướng gì thì chớ lại còn phải debug để kiểm tra thực tế nữa thì có vẻ như mệt mỏi hơn so với dùng timer nhiều, lại còn chưa nói đến khi dùng biến long để tạo tần số cỡ Hz thì thời gian debug khác, nếu dùng biến int để tạo tần số cao hơn chút nữa thì thời gian bug lại khác, nên tốt nhất là dùng timer, vì mình quét hầu hết mọi thứ bằng timer nên cũng muốn các bạn này dùng đến timer để sau này nếu có bài hướng dẫn quét các thứ bằng timer thì có thể hiểu đựoc luôn.

                Comment


                • #9
                  câu nói " long để tạo tần số cỡ Hz" khác int như thế nào nhỉ(biến long nó rộng hơn biến int về dải số phải không nhỉ) ? em không hiểu rõ lắm , nói như vậy thì tạo xung với tần số tần số càng thấp thì sai số càng nhiều chứ , tần số thấp > thời gian delay cao > sai số nhiều ! (debug là gì ạ )

                  Comment


                  • #10
                    Nguyên văn bởi myth-coder Xem bài viết
                    Không hơn 10 xung đâu bác ạ, hôm trước mình thử đếm "tất nhiên là đồ tự chế dùng 1307 tạo ngắt 1s" mà hôm đó thử điều chế PWM để 50Khz hình như sai cỡ 15 xung thì phải nên 40k chắc chỉ khoảng 10 xung thôi. Quan trọng là nếu dùng delay tính toán không sung sướng gì thì chớ lại còn phải debug để kiểm tra thực tế nữa thì có vẻ như mệt mỏi hơn so với dùng timer nhiều, lại còn chưa nói đến khi dùng biến long để tạo tần số cỡ Hz thì thời gian debug khác, nếu dùng biến int để tạo tần số cao hơn chút nữa thì thời gian bug lại khác, nên tốt nhất là dùng timer, vì mình quét hầu hết mọi thứ bằng timer nên cũng muốn các bạn này dùng đến timer để sau này nếu có bài hướng dẫn quét các thứ bằng timer thì có thể hiểu đựoc luôn.
                    Bao nhiêu xung bạn phải Dis assembly ra mà đếm. Tính toán thời gian thì cũng là cái đơn giản rồi. Bug vài lần là OK.

                    Comment


                    • #11
                      Nguyên văn bởi datinhtt Xem bài viết
                      câu nói " long để tạo tần số cỡ Hz" khác int như thế nào nhỉ(biến long nó rộng hơn biến int về dải số phải không nhỉ) ? em không hiểu rõ lắm , nói như vậy thì tạo xung với tần số tần số càng thấp thì sai số càng nhiều chứ , tần số thấp > thời gian delay cao > sai số nhiều ! (debug là gì ạ )
                      Tần số càng thấp => chu kì càng lớn => Tỷ lệ sai số càng nhỏ.

                      Comment

                      Về tác giả

                      Collapse

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

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

                      Collapse

                      • bqviet
                        Trả lời cho Đấu tắt điện cho máy tính bảng
                        bởi bqviet
                        Bqv cáo lỗi vì chưa đủ khả năng diễn giải để người đọc hiểu. Người làm kỹ thuật sâu đôi khi như thế đó. Về việc nạp pin không vào dù cell mới, khả năng cái mạch quản lý đó đã hỏng - cũng chính là nguyên nhân đám cell cũ hỏng từ đầu.
                        06-12-2025, 17:17
                      • nguyendinhvan
                        Trả lời cho Xin hỏi về mạch thu FM/AM trong catsette
                        bởi nguyendinhvan
                        Theo tôi, nó chỉ là cái Tuy- ê - nơ, hoặc là khối Trung Văn Tần, nó một phần trong cái Da đì ô thôi. Vì có thấy một chỗ có ba chân hàn, giiống như chân Cờ rít sờ tăng 455 ki nô hẹc. Còn khối Tuy ê nơ thì không nhìn thây cái Di ốt Va di cáp...
                        05-12-2025, 19:59
                      • afrendly
                        Trả lời cho Đấu tắt điện cho máy tính bảng
                        bởi afrendly
                        Có vẻ ngoài hiểu biết của mình rồi. Cuối cùng mình quyết định tìm mua 2 pin trên Shopee, giá 200K thay vào. Tuy nhận pin được 1%, sạc mãi không vào nhưng cũng mở được máy lên. Vậy cũng tạm. Cảm ơn bạn đã hỗ trợ nhé....
                        04-12-2025, 01:27
                      • nick22
                        Trả lời cho Máy điện châm ?
                        bởi nick22
                        Đúng như bạn nói, máy điện châm hiện nay trên thị trường đã khá đa dạng về mẫu mã, chức năng và giá thành.
                        01-12-2025, 13:23
                      Đang tải...
                      X