Translate

2017年6月17日 星期六

Arduino Time2 中斷計時微秒

參考資料:
http://coopermaa2nd.blogspot.tw/2011/07/4-timers.html
http://coopermaa2nd.blogspot.tw/2011/07/41-blink-with-timer.html

利用time2除頻256 16MHZ 剩62500HZ 1clok要0.000016秒 1ms需62.5個clock約63 63clok=0.001008秒
time2除頻與time0、time1不一樣
CS22 CS21 CS20 功能
0 0 0 停止
0 0 1 clk/1
0 1 0 clk/8
0 1 1 clk/32
1 0 0 clk/64
1 0 1 clk/128
1 1 0 clk/256
1 1 1 clk/1024
volatile unsigned int delay_ms_count;
void delay_ms(unsigned int i);
void setup() {
  // put your setup code here, to run once:
DDRB=0b00100000;//設定P13為output
TCCR2A=0x00;
TCCR2B=0b00000110;//設定除頻256
TCNT2=-63;
}
void loop() {
 // put your main code here, to run repeatedly:
 //設定P13 hight
 PORTB =PORTB | 0B00100000;
 delay_ms(1000);
 //設定P13 low
 PORTB=PORTB & 0B11011111;
 delay_ms(1000);
}
void delay_ms(unsigned int i)
{
  delay_ms_count=i;
  TCNT2=-63;
  TIMSK2 |=0x01;//啟動中斷time2
  while(delay_ms_count > 0){
  }
  TIMSK2 &=0xfe;//關閉中斷time2
}
ISR(TIMER2_OVF_vect)
{
 delay_ms_count--;
 TCNT2=-63;
}

沒有留言:

張貼留言