나는 AVR Studio5를 사용하여 atmel atmega328p로 arduino uno rev3를 프로그래밍하고 있습니다. 이제 1 초 이내에 계속 깜박입니다. 코드는 다음과 같습니다C 언어 (atmega328p)로 1 초간 연속 깜박임
PORTD = 0b10001010;
TCNT1H = 0xBB;
TCNT1L = 0xBB;
TCCR1A = 0;
TCCR1B = 5; // prescaler is 1024
while((TIFR1 & (1<<TOV1)) == 0)
{
temp = TCNT1H;
while ((TCNT1H - temp) >= 11);
PORTD ^= 1<<7; // blinking as expected
}
TIFR1 = 1<<TOV1;
TCCR1A = 0;
TCCR1B = 0;
위의 코드는 내가 각 0.032768s에 대한 이끄는 PORTD.7을 깜박을 시도하는 1 초 동안 지속되는 타이머 1을 사용하는 것을 알 수있다. 그러나 이제 문제는 타이머가 1 초 지연되지만 LED가 깜박임없이 계속 켜져 있다는 것입니다. 도와주세요 . (P.S 회로가 잘 작동합니다)
보완 코드 : 다음 코드를 사용하면 LED가 깜박입니다.
for (a = 0;a<2;a++)
{
PORTD = 0b00001010;
TCNT1H = 0xEE;
TCNT1L = 0xEE;
TCCR1A = 0;
TCCR1B = 5; // prescaler is 1024
while((TIFR1 & (1<<TOV1)) == 0);
TIFR1 = 1<<TOV1;
TCCR1A = 0;
TCCR1B = 0;
PORTD = 0b10001010;
TCNT1H = 0xEE;
TCNT1L = 0xEE;
TCCR1A = 0;
TCCR1B = 5; // prescaler is 1024
while((TIFR1 & (1<<TOV1)) == 0);
TIFR1 = 1<<TOV1;
TCCR1A = 0;
TCCR1B = 0;
}
그러나 간단히 말해서 나는 작업하는 경우 가장 많이 사용하는 방법을 선호합니다.
usleep 기능을 사용할 수 있습니까? 몇 가지 추가 정보 : http://pubs.opengroup.org/onlinepubs/009695399/functions/usleep.html – MiltoxBeyond
@MiltoxBeyond 나는 그가 OS가 없다고 생각합니다. – RedX
OP가'avr-gcc'를 사용하고 있다면'util/delay.h'의'_delay_ms' 함수로 간단한 지연을 사용할 수 있습니다. – ouah