Написал код, но импульсы выходят не регулируемой длительности, а сами по себе удлиняются с 0 до максимума заполнения переменной и снова перезапускаются.
Код: Выделить всё
#define F_CPU 16000000UL
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
int i = 0;
unsigned char d = 100;
unsigned char c = 0;
void count()
{
for (unsigned char c=0; c<d; c++) // тут собственно и проблема. пытался реализовать регулируемый цикл где каждый цикл будет означать задержку на некоторое время _delay_us
{
PORTB=(1<<5);
_delay_us(1);
}
PORTB &= ~(1<<5);
}
int main(void)
{
DDRB=0b11111111;
PORTB=0b00000000;
DDRC=0b0000000;
PORTC=0b1111111;
EICRA = 0b00000010;
EIMSK = 0b00000001;
sei();
while (1)
{
if (PINC0 == 0) // увеличение длительности импульса
{
d++;
_delay_ms(10);
}
if (PINC1 == 0) // уменьшение длительности импульса
{
d--;
_delay_ms(10);
}
}
}
ISR (INT0_vect) // отсчёт импульсов
{
i++;
if (i>=3)
{
count();
i=0;
}
}


