Thông báo

Collapse
No announcement yet.

Tính delay 1s dùng timer ??

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

  • Tính delay 1s dùng timer ??

    Mình cũng mới tập tành thôi nên ko rõ lắm mong mấy bác chỉ giùm :
    Mình muốn tạo 1 hàm delay dùng timer
    Mình có đọc mấy bài trên thì tìm mấy bác có chỉ :
    Code:
    void delay (unsigned char time)
    {	while(time--)
    	{
    		TMOD=0x01;
    		TH=0x00;
    		TL=0x00;
    		TR0=1;
    		while(TF0);
    		TF0=0;
    		TR0=0;
    	 }
    }
    theo tính toán thì hàm trên sẽ trễ 71ms. Vậy mình phải dùng vòng lặp như thế nào để nó trễ 1s ?
    Hàm while(time--) có nghĩa là gì vậy.

  • #2
    Nguyên văn bởi CNX.
    Tôi không chỉ dẫn trực tiếp code, tôi hướng dẫn em thế này.

    Với 89sxxx hay 89cxxx. Với thạch anh ngoài là 12Mhz thì xung nội hệ thống sẽ là 1Mhz, tương tự các chip avr hay pic thì sẽ có tỉ lệ chia khác. vậy xung nhịp hệ thống là 1us.

    Nếu em dùng timer 8 bit thì giá trị đếm max là 255 tuơng đương 255us.
    Nếu em dùng timer 16 bit thì giá trị đếm max là 65535 tuơng đương 65535us.


    ở đây e cần định thời 1s (cú pháp của em hình như có vấn đề TH?, TL?)
    1s=1E6us.
    e nên cho bộ đếm tới 250 giá trị là tràn, như vậy sẽ được 250us, để được 1E6us thì cần cho vòng lặp 4000 lần. như vậy giá trị nạp ban đầu cho THx=0, TLx=5.
    Suy luận tương tự cho với timer16 bit

    Giá trị timer ở đây là thời gian họ cần delay. ví dụ nếu hàm trên trễ 71ms, nếu em cho timer=1 thì thời gian delay là 71*1=71ms.

    *Em nên học lập trình C căn bản và cấu trúc timer trước khi làm việc này.
    em cám ơn nhiều.Em đã hiểu và làm được.
    Nhưng hàm while(TF0); ở đây phải sửa lại thành while(!TF0); thì mới được.Em cũng ko rõ chỗ này

    Comment


    • #3
      cái đấy là viết tắt thôi. nghĩa là 1 cái #0 và 1 cái =0. khi tràn cờ sẽ được set lên 1 và #0
      Website chính thức đổi địa chỉ website thành
      Mời các bạn ghé thăm !!!

      Comment


      • #4
        mình vẫn còn chưa hiểu : while (!TF0) thì tuơng đuơng while(TF0==0)
        ko lẽ hàm này hiểu là : cho đến khi TF0 =1 (hoặc TF0 =/0)

        Comment


        • #5
          Nguyên văn bởi hada242 Xem bài viết
          mình vẫn còn chưa hiểu : while (!TF0) thì tuơng đuơng while(TF0==0)
          ko lẽ hàm này hiểu là : cho đến khi TF0 =1 (hoặc TF0 =/0)
          While (!TF0) có nghĩa: Khi TF0 còn bằng 0 thì biểu thức quan hệ (!TF0) còn bằng 1 lúc này tương đương với lệnh While (1). Vòng lặp này còn được thực hiện đến khi nào TF0 = 1 mới thôi.
          Trong trường hợp này: while (!TF0) tương đương while (TF0==0)

          Comment


          • #6
            Nguyên văn bởi ck33spkt Xem bài viết
            while (!tf0) có nghĩa: Khi tf0 còn bằng 0 thì biểu thức quan hệ (!tf0) còn bằng 1 lúc này tương đương với lệnh while (1). Vòng lặp này còn được thực hiện đến khi nào tf0 = 1 mới thôi.
            Trong trường hợp này: While (!tf0) tương đương while (tf0==0)
            mÌnh ĐÃ hiỂu,cÁm Ơn bẠn nhiỀu

            Comment

            Về tác giả

            Collapse

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

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

            Collapse

            Đang tải...
            X