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

来源:互联网 发布:英雄无敌3 数据修改 编辑:程序博客网 时间:2024/06/03 19:02

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

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

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

#define ledPin 13int 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:}