Страница 1 из 1

Помогите найти ошибку

Добавлено: Чт июн 28, 2012 20:19:05
ishutinvalera48
Код пишу в CodeVisionAVR, мк Atmega48.

Код: Выделить всё

#include <mega48.h>
#include <delay.h>

//0b00000001 --1
//0b00000010 --2
//0b00000011 --3
//0b00000100 --4
//0b00000101 --5
//0b00000110 --6
//0b00000111 --7
//0b00001000 --8
//0b00001001 --9
//0b00001010 --0
//0b00001011 --*
//0b00001100 --#

void main(void) {
  DDRC=0xff;
  DDRD-0x00;
  while (1) {
   if (PIND == 0b00000001) {
    PORTC.0 = 1;
   }            
   else {
    PORTC.0 = 0;
   }
  }
  
  }
почему проверка условия проходит только один раз?

Re: Помогите найти ошибку

Добавлено: Чт июн 28, 2012 20:21:38
uldemir
ishutinvalera48 писал(а):DDRD-0x00;
?

Re: Помогите найти ошибку

Добавлено: Чт июн 28, 2012 20:24:21
ishutinvalera48
Исправил но всё равно проверка проходит только 1 раз

Re: Помогите найти ошибку

Добавлено: Чт июн 28, 2012 20:40:08
Ser60
Покажите схему.

Re: Помогите найти ошибку

Добавлено: Чт июн 28, 2012 20:41:48
ishutinvalera48
Вот

Re: Помогите найти ошибку

Добавлено: Чт июн 28, 2012 20:48:11
Flasher
ошибка зарыта в каких-то цепочках ДНК.

Re: Помогите найти ошибку

Добавлено: Чт июн 28, 2012 20:54:47
Ser60
Вероятно, как говорится, проблема между комьютером и стулом :))
Уточните, что значит "проверка условия проходит только один раз" ???

Re: Помогите найти ошибку

Добавлено: Чт июн 28, 2012 22:48:59
Olecorp
Лень проверять, но разве свободные лапы контроллера не прочитаются как "1" (из-за внутренних подтягивающих резисторов)? И как, в таком случае может прочитаться 0b000...?
Попробуй завести кнопки на корпус, а не на питание.
И в любом случае, если ты хочешь проверить состояние одного бита, то проверяй один бит:

Код: Выделить всё

if (PIND & 0b00000001) {

Re: Помогите найти ошибку

Добавлено: Пт июн 29, 2012 09:33:49
Soir
ishutinvalera48 писал(а):Исправил но всё равно проверка проходит только 1 раз
??? Поставьте breakpoint или прогоните в пошаговом режиме симуляции и посмотрите сколько раз...

Olecorp правильно заметил по поводу подтяжки выводов МК. По крайней мере для Proteus.

Re: Помогите найти ошибку

Добавлено: Пт июн 29, 2012 11:51:13
mazda
две причины
1-кнопки нужно повечсить на ноль, а не на питание, при чтении порта, он сам (как сказали ранее и как написано в даташите) подтянут на +5 в самой мк
2-проверяй так if ( PIND & 0b00000001==0 ) то...иначе...
здесь 1 ставь на проверяемой ноге, пришёл ЗЕМЛЯ сигнал - сработает, не пришол - там будет +5, логика не обнулится и не сработает условие.