Товарищи, помогите пожалуйста. Данная програмулина при нажатии на кнопку входит в функцию MinU() в которой инициализирует таймер для задержки(ждем отпустит пользователь кнопку или нет) если кнопка не отпущена то уменьшаем скважность ШИМ.
проблема в выделенной красным строчке! когда count больше 3 уменьшаем скважность, но в отладчике AVR studio, Proteus и в железе не робит.
Перепрыгивает действие в {} так будь-то условие не выполнено...
#define F_CPU 1000000L
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
unsigned char count = 0;
unsigned char a=5,s=3,b=0;
//===================================Насройка таймера====================
void Timer_ini(void){
TCCR1B = (1<<CS12)|(0<<CS11)|(0<<CS10);
TCNT1 = 65535-976;
TIMSK |= (1<<TOIE1);
count = 0;
}
//===========================настройка шим===========================
void PWM_ini(void){
ASSR=0x00;
TCCR2=0b01101110; //На выводе OC1A единица, когда OCR1A==TCNT1, восьмибитный ШИМ
OCR2=200;
}
//===============
void MinU(){
unsigned char i=0;
Timer_ini();
while (!(PINB&0b00000010)){
if(count>2){ //Если таймер считал более двух раз
_delay_ms(100); // ждем 100 мс
OCR2--; // Уменьшаем скважность
i=1; // были в плавном уменьшении
}
}
if (i!=1) // если не были в плавном уменьшении
{
OCR2=OCR2-50;
i=0;
}
}
//=======================================================
int main(void)
{
// Настраиваем порт D на выход
DDRB = 0b00001000;
PWM_ini();
//Timer_ini();
sei();
while(1)
{
b=a-s;
if (!(PINB&0b00000010))
{
MinU();
}/*
//if (!(PINB&0b00000100))
//{
//PlsU();
//}*/
}
return 0;
}
ISR (TIMER1_OVF_vect)
{
count++;
TCNT1 = 65535-976;
}