【Arduino】 使用定时器中断(非库、精度更高)

虽然有很多库可以直接用,但是据说精度只有ms级;

按理来说最小时间间隔可以到0.016ms(即:65536 - 1)。

类似51程序中的定时器配置。

#define ledPin 13
int timer1_counter;
void setup() {
  pinMode(ledPin, OUTPUT);
  noInterrupts();
  TCCR1A = 0;
  TCCR1B = 0;
  //timer1_counter = 65536-(62500*0.5);  //0.5s 定时器中断
  timer1_counter = 34286;  //预加载timer1 65536-16Mhz/256/2Hz
  TCNT1 = timer1_counter;
  TCCR1B |= (1 << CS12);
  TIMSK1 |= (1<< TOIE1);
  interrupts();
 
}
ISR(TIMER1_OVF_vect) {
  TCNT1 = timer1_counter;
  digitalWrite(ledPin, digitalRead(ledPin)^1); 
}
void loop() {
  // put your main code here, to run repeatedly:
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值