我有一个带ATmega328P的Arduino Nano。我正在使用Atmel Studio对其进行C编程,我需要以下程序:
我有5个输入(PC3-PC7),每个输入应具有各自的计时器,每个驱动器具有2个(一个红色,一个绿色)LED。
我认为需要time.h
库,但是我不知道如何编程。任何帮助表示赞赏。
答案 0 :(得分:1)
可能没有为此的预制库。
您需要的是在硬件外设计时器之上编程某种形式的硬件抽象层(HAL)。一个硬件计时器/ RTC应该足够了。每隔x个时间单位触发一次中断,具体取决于可用的预分频器时钟。
从此计时器中断中,计数各个正在进行的任务,看看是否该执行它们了。在伪代码中,它可能看起来像这样:
void timer_ISR (void) // triggers once every x time units
{
// clear interrupt source etc here
// set up timer again, if needed, here
counter++; // some internal counter
// possibly, enable maskable interrupts here. If I remember AVR, this is asm SEI.
for(size_t i=0; i<timers; i++)
{
if(counter == timer[i].counter)
{
timer[i].execute();
timer[i].enable = false;
}
}
}
其中execute
是指向回调函数的函数指针。
答案 1 :(得分:-1)
您应该做的第一件事是设置计时器中断。你可以阅读 timer interrupt
设置计时器后,您应该使用1或2个变量来达到10分钟。
就像:定时器int每次进入ISR(中断功能)时都应增加Varb1。每次Varb1溢出时,Varb2应该增加,而当Varb2溢出时,Varb3应该增加...等等。
之所以要使用它,是因为计时器仅保留非常小的时间(以毫秒或微秒为单位)。