Thông báo

Collapse
No announcement yet.

cần giúp đỡ

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

  • cần giúp đỡ

    em có thắt mắc nhờ mấy anh giải thích giúp
    khi dùng timer: ví dụ em dùng thạch anh 12Mhz thì chu kì là 1um giây
    vậy 1um giây đó nghĩa là như thế nào, có phải khi em khai
    TMOD=0x01;
    TL0=0x00;
    TH0=0x00;
    TR0=1;
    while(!TF0) {};
    TF0=TR0=0;

    TL0 và TH0 lên FF( thanh ghi lên FFFF) là hết 1ums TF0 bật lên 1, thoát while
    như vậy muốn tạo trễ 1ms có phải dùng vòng lặp chạy 1000 lần không ạ.
    em xin cảm ơn

  • #2
    nếu dùng os 12M thì cái mà bạn nói là 1um giây, nó là chu kỳ máy. Bạn dùng Timer 0 ở chế độ 1 là chế độ 16bit thì bắt đầu từ 0000->FFFF nó sẽ có 65536 xung
    -> Cách hiểu của bạn chưa đúng
    Giá trị cần nạp để tạo 1ms: (ở đây mình ko tính số chu kỳ máy để thực hiện lệnh)

    TL0=0x18;
    TH0=0xFC;
    Last edited by vanhai0303; 12-10-2013, 12:07.
    Học Điện Tử - Learn Electronic

    Comment


    • #3
      Nguyên văn bởi vanhai0303 Xem bài viết
      nếu dùng os 12M thì cái mà bạn nói là 1um giây, nó là chu kỳ máy. Bạn dùng Timer 0 ở chế độ 1 là chế độ 16bit thì bắt đầu từ 0000->FFFF nó sẽ có 65536 xung
      -> Cách hiểu của bạn chưa đúng
      Giá trị cần nạp để tạo 1ms: (ở đây mình ko tính số chu kỳ máy để thực hiện lệnh)

      TL0=0x18;
      TH0=0xFC;
      Em hiểu như thế này có đúng không ạ:
      chu kì máy là thời gian 1 lệnh trong vi điều khiển được thực thi(tính cho asm(ngôn ngữ máy), khi viết bằng C, trình biên dịch sẽ dịch sang ngôn ngữ máy, một lệnh trong C bằng nhều lệnh trong ngôn ngữ máy)
      Còn muố tạo hàm trễ với độ trễ như ý cần tính để nhập vào TL,TH.
      void de(unsigned char t)
      {
      //Chuong trinh tao tre 1ms
      unsigned char i;
      for(i=0;i<i;i++)
      {
      TMOD=0x01
      TH0=0xFC;
      TL0=0x18;
      TR0=1;
      while(!TF0);
      TF0=TR0=0;
      }
      }

      khi gọi delay(1000) ta sẽ có độ trễ 1 giây.(thực ra hơn 1 giây do còn tốn thời gian thực hiện mấy câu lệnh)
      ở đây em còn thắt mắc thứ tự thực hiện các câu lệnh trên như thế nào(cách thức hoạt động của nó
      em vd như ở trên
      1. nạp TL0,TH0
      2. bật bộ định thời TR
      3. while(!TF0) -> hiện giờ TF0=0, !TF0=1, nên chưa thoát while, quay lại bước 1 tăng TL0=0x19,TH0=0XFC cứ như vậy cho đến khi TH,TL=FFFF để TF0=1
      4. khi while thoát nạp TR0=TF0=0
      vòng lặp for vào chu kì mới
      nhưng while ở đây không thực hiện gì cả làm sao để TL,TH tăng lên FFFF để thoát while

      Comment

      Về tác giả

      Collapse

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

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

      Collapse

      Đang tải...
      X