【发布时间】:2018-04-25 16:25:40
【问题描述】:
我现在正在做一个简单的项目。我需要编写一个代码,在定时器和 ADC 寄存器的帮助下每秒钟改变电位器的值。我已经使用 Timer0 来完成这项任务,一切都很好,但是串行监视器中的输出变化如此之快,而不是 2 秒。为什么会这样?
我的代码:
void setup()
{
TCCR0A = 0; //reset the register
TCCR0B = 0; //reset the register
OCR0A = 0; //reset the register
TCCR0A = (1 << COM0A1)|(0 << WGM01) | ( 0 << WGM00);
TCCR0B = (1 << CS02) |(1 << CS00); //1024 prescaler
ADCSRA = (1 << ADEN) | ( 1 << ADSC);
//enabling the ADC with shifting ADEN by 1
ADMUX = (1 << REFS0)| (1<<MUX0) | (0 << MUX1) | (1 << MUX2);
//shifting REFS0 by 1 means setting it as AVCC
//shifting MUX0 and MUX2 by 1 means setting A5 pin on
Serial.begin(9600);
}
void loop() {
int highval = ADCH; //Data Register High
int lowwal = ADCL; //Data Register Low
int sensval = analogRead(A5);
uint8_t answer;
answer = ((highval) * 256 + lowwal) * 5 / 1023;
if(TCNT0 == 0xF1) {
Serial.println(answer);
}
if(TCNT0 == 0x00) {
Serial.println(answer);
}
}
void timdel() {
TCNT0 = 0xF1; // 2 seconds
}
【问题讨论】:
-
timdel() 应该做什么?它永远不会被调用。
-
TCNT0 等于 2 秒,但是当我在 if 语句中调用它时它仍然不起作用。