(MODE Normal) Tạo Thời Gian Delay Sử Dụng Timer() Thay Hàm Ngắt Trong Timer

Tạo thời gian delay sử dụng timer()

1. Cài đặt giá trị cho  thanh ghi TCNT0 (Cách tính TCNT0)

2. Cài đặt Mode Normal và lựa chọn tần số chia sử dụng thanh ghi TCCR0

Ngay sau khi  giá trị được chọn thì bộ timer/counter bắt đầu đếm. Sau mỗi xung clock, giá trị của thanh ghi TCNT0 tăng một giá trị.

3. Timer liên tục đếm, vì vậy cần phải giám sát thời gian tràn timer qua việc kiểm soát cờ tràn timer 0 (TOV0). Nếu bit này có giá trị 1 thì có nghĩa là timer 0 đã tràn.

4. Tắt timer bằng cách ghi giá trị 0 tới thanh ghi TCCR0, khi đó nguồn xung clock sẽ được ngắt ra khỏi timer/counter

5. Xóa cờ TOV0 bằng cách ghi giá trị 1 tới bit này.

Sơ đồ

Code

#include <mega16.h>
void delay()
{
TCNT0 = 177; //10ms
TCCR0 =  (1<<CS00)|(1<<CS02); //precaler 1024
while ((TIFR&0x01)==0);
TCCR0 = 0;
TIFR = 0x01;
}

void main(void)
{
  DDRA=0xff; //out
  while (1)
  {
      PORTA=0xff;
      delay(); 
      PORTA=0x00;
      delay();  
  }
}

Nhận xét

Mới hơn Cũ hơn