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

                      • mèomướp
                        Trả lời cho Sửa bộ nguồn DC 60V 45A
                        bởi mèomướp
                        Dạ hông dám làm thì chắc chắn sẽ mãi ko thể làm được đâu ạ. Nguồn xung dân dụng vài kw giờ rất nhìu ạ, sạc ô tô điện, máy hàn, lò vi sóng, âm ly... tùy chất lượng mà độ phức tạp sẽ khác nhau ạ. Và cái giá phải trả về kinh tế...
                        Hôm qua, 13:11
                      • tuyennhan
                        Trả lời cho Sửa bộ nguồn DC 60V 45A
                        bởi tuyennhan
                        Sửa dạng này thì chuyên còn không dám chắc khộng cháy nổ với linh kiện bán ngoài chợ nói gì khộng chuyên .
                        Hôm qua, 09:25
                      • tuyennhan
                        Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
                        bởi tuyennhan
                        Đúng rồi chọn mua theo tai . ca thì phải toàn dải nhạc thì chỉ cao và thấp thé nên loa ca thì nghe nhạc không hay và ngược lại .
                        Muốn ca và nhạc đều hay thì phải dúng 2 giàn , còn nếu chỉ có 1 thì phải chỉnh sửa lại sao cho ca và nhạc đều được không quá dở ....
                        Hôm qua, 09:10
                      • Ng.Phuong.5
                        Vấn đề in lỗ khoan ra pdf ở Orcad 9.2
                        bởi Ng.Phuong.5
                        Vấn đề cũ: khi in mạch ra pdf và bấm chọn Keep Drill Holes Open, in ra thì pdf trắng đen các lỗ chân linh kiện như nhau. Mặc dù có linh kiện phần Drill là 1mm, có linh kiện thì là 3mm. Cho em hỏi cách sửa phần này ở Orcad 9.2 với ạ.
                        Mấy con...
                        09-01-2025, 19:44
                      • viettinh
                        Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
                        bởi viettinh
                        Bác nói đúng quá. Cơ mà muốn mua hàng chính hãng, hàng thương hiệu mà tai lại hợp hàng tầu mới khổ chứ.
                        Đang tính mua cái loa tầu nữa cột đằng sau loa này, Loa sony chỉ để hát nhép thôi, có dc k các bác ...
                        09-01-2025, 18:12
                      • nguyendinhvan
                        Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
                        bởi nguyendinhvan
                        Theo tôi thì khi hpj sản xuất ra cái loa đó, đã có nhiều chuyên gia kỹ thuật hiệu chỉnh, tính toán các phần tử kỹ lưỡng rồi.
                        Bây giờ tính toán hiệu chỉnh lại cần có đội ngũ tương đương với nhà sản xuất.
                        Cách đơn giản...
                        09-01-2025, 00:04
                      • mèomướp
                        Trả lời cho Sửa bộ nguồn DC 60V 45A
                        bởi mèomướp
                        Dạ cháu có ý tốt muốn động viên chú ấy ngâm cứu khoa học thôi ạ. Về phần kiểm tra dao động thì chú ấy chưa biết thì sẽ tìm hiểu được là cần những gì ạ, chắc chắn là khi hướng dẫn phần ấy các cô chú nào đó sẽ lưu ý cần loại sò công suất ra tránh cháy nổ rồi ạ....
                        08-01-2025, 19:02
                      • tuyennhan
                        Trả lời cho Sửa bộ nguồn DC 60V 45A
                        bởi tuyennhan
                        Chủ thớt hỏi có kiểm tra được dao động mà không cấp nguồn thì rõ trình ở mức nào mà mèo còn xúi ngâm cứu nữa ác vậy ....
                        08-01-2025, 15:43
                      • tuyennhan
                        Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
                        bởi tuyennhan
                        Loa bass đấu trực tiếp không qua phân tần để thành loa toàn dải xem có thoát tiếng khộng , nếu không thoát cần phải sửa lại mạch cs hay âm sắc nếu đủ trình còn nếu thoát ca hay nhưng chưa vừa ý vì bass kém chăc thì đấu lại như cũ và đấu thêm loa mid treble bên ngoài .
                        08-01-2025, 15:28
                      • mèomướp
                        Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
                        bởi mèomướp
                        Dạ loa tép bé xíu như ngón chân cái thôi ạ. Thiếu gì chỗ để đâu. Quan trọng là gắn thêm nó loa nghe ok hay ko thôi ạ...
                        08-01-2025, 11:44
                      Đang tải...
                      X