Свежие обсуждения
Микроконтроллеры

AVR начинающим - вопросы и ответы

1 22 68

Зависла у меня разработка прогрммы на такой мелочи

Функция управления кнопкой
while(1){
...
while (PINA.1==0){}
delay_ms(1);
if (R>4) {R=0;OCR1A=20;AA=1;BB=0;CC=0;DD=0;EE=0;};
R++;
while(PINA.1==1){ }
delay_ms(1); };

Вот это должно крутиться в вечном цикле:
x++;
if (x==2000) {
PORTA.5=1;};
if (x>4000) {
x=0;
PORTA.5=0; }

А оно работает только когда нажимаю на кнопку PINA.1
Если убрать функцию управления кнопкой то все работает нормально. В чем причина?

 

Фигурных скобок многовато ИМХО. А кнопка куда замыкает ?

 

Да и вечного цикла не видать. Архив с проектом положите на slil.ru

 

... что-б на 123ем сайте появился... ню-ню...

 

Как написано, так и работает

while (PINA.1==0){}
- ожидает (бесконечно) нажатия кнопки, а
while(PINA.1==1){ }
- ожидает отпускания (или наоборот, не знаю).

Вставь то, что должно крутиться в вечном цикле в скобки, где пусто.

 

Да 123-ий "умник"
Спасибо,АНТОХА, попробую а может есть у кого-нибудь самая простая функция кнопки с антидребезгом? Пограмотнее чем у меня

 

shemmer: самая простая функция кнопки с антидребезгом?

Самая простая - конденсатор !

 

Под функцией понимается программная реализация

 

Програмная - "переспросить" кнопку через 20-70 мС.

 

И еще вопросик
Есть часть кода:
adc_rez=adc1-adc2;
Как на си сделать условие чтобы он результат вычисления брал только по модулю т.е. без учета знака -

If (adc_rez=|9|)
{...}

Ведь правильно будет просто взять adc_rez как unsigned char?