Я нахожусь в классе микропроцессоров, и мы пишем наши собственные функции задержки, которые на самом деле точны. Наш профессор дал нам, что я предполагаю, функция задержки на 4 мс. Я действительно не понимаю, как перенести это на задержку 0,25 с или на 1 с, которые необходимы для моей домашней работы.Функция пользовательской задержки с использованием arduino IDE
Данная функция выглядит следующим образом (Предположим, что _BV() определяется как _BV (х) 1 < < (х)):
DDRB |= _BV(1);
TCCR1A |= _BV(COM1A0);
TCNT1 = 0;
OCR1A = 100;
TIFR1 = _BV(OCF1A);
TCCR1B |= _BV(CS10);
while((TIFR1 & _BV(OCF1A)) == 0);
TIFR1 = _BV(OCF1A);
OCR1A = 100 + 64000;
while((TIFR1 & _BV(OCF1A)) == 0);
TCCR1B = 0;
TCCR1A = 0;
Я написал код, необходимый для выполнения домашних заданий, кроме две функции задержки.
Вот то, что я до сих пор:
#include <avr/io.h>
uint8_t numIN;
void setup() {
Serial.begin(9600);
DDRB |= _BV(5);
}
void loop() {
int i;
numIN = 10;
Serial.println("Enter a number between 0 and 9.");
do {
while (Serial.available() > 0)
{
numIN = Serial.read() - '0';
if (numIN < 0 || numIN > 9)
{
Serial.println("Input Error!");
}
}
} while (numIN < 0 || numIN > 9);
Serial.print("You entered ");
Serial.println(numIN);
if (isEven(numIN))
{
for (i = 0; i < 5; i++)
{
PORTB |= _BV(5);
delay(1000); //temporary
//delay_Sec();
PORTB &= ~_BV(5);
delay(1000); //temporary
//delay_Sec();
}
}
else
{
for (i = 0; i < 5; i++)
{
PORTB |= _BV(5);
delay(250); //temporary
//delay_quarterSec();
PORTB &= ~_BV(5);
delay(250); //temporary
//delay_quarterSec();
}
}
}
void delay_quarterSec(void)
{
//need to finish
}
void delay_Sec(void)
{
//need to finish
}
boolean isEven(int num)
{
if (num & _BV(0))
return false;
else
return true;
}
Я просто запутался, как я беру код своего профессора и передать его на то, что мне нужно сделать. Любая помощь очень ценится!
Значит, вы также будете использовать регистры AVR в своем эскизе? – cagdas