Atmega2560ベースのチュートリアル(9)--16ビットタイマ(TIM1 / 3/4/5)タイマ割り込み

Atmega2560ベースのチュートリアル(9)--16ビットタイマ(TIM1 / 3/4/5)タイマ割り込み

タイミング、割り込み、単純な16ビットタイマは、TCNTx、TCCRxB、TIMSKx(Xは3つのレジスタを必要とするように4つの16ビット・タイマ、タイマ1、タイマ3、タイマ4、タイマ5のAtmega2560合計= 1,3,4,5)、16ビットタイマは、基本的に同じ構造、以下に例示タイマ1であります

1.作品

TOP 0XFF、割り込みフラグを加算した値でタイマをインクリメントし、最大のTCNTx値。次のように詳細なTCNTx値が計算されます。

  n個 = 2 16 ( t f / n ) \大\ N_ {最初} = 2 ^ {16} - (T_ {} * F_ {結晶} / N_ {}分割)

変換ユニットなし式S、周波数[Hz]の時間単位、

2.TCNTxレジスタ

16ビットレジスタを開始し、数

3.TCCRxBレジスタ

の数を分割する主要な意思決定

次のように配置された詳細:

4.TIMSKxレジスタ

メインは、割り込み有効

5.具体例

タイマ1では、たとえば、あなたは3,4,5友人は、タイマーを使用して交換することができる登録することができ、タイマーが必要3,4,5


/*
	定时器1,256分频,当中断发生时,PA0电平翻转
 */ 

#define F_CPU 16000000UL
#include <avr/io.h>
#include <util/delay.h>
#include <avr/sfr_defs.h>
#include <avr/interrupt.h>

float a=0.0015;                       //0.0015s产生一次中断
int i=0;

int main(void)
{
	cli();
	DDRA|=_BV(DDA0);
	PORTA|=_BV(PA0);
	a=65536-F_CPU*a/256;              //计算初值 
	i=a;                              //取整
	TCNT1=i;
	TCCR1B |=_BV(CS12);               //256分频
	TIMSK1 |=_BV(TOIE1);              //溢出中断使能
	sei();
	while (1)
	{
	}
}

ISR(TIMER1_OVF_vect	){
	cli();
	TCNT1=i;
	PORTA^=(1<<PA0);
	sei();
}


波形チャート

公開された12元の記事 ウォンの賞賛2 ビュー4146

おすすめ

転載: blog.csdn.net/jiantoushi/article/details/104088975