Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Чт июн 28, 2012 20:19:05
Код пишу в 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;
}
}
}
почему проверка условия проходит только один раз?
Чт июн 28, 2012 20:21:38
ishutinvalera48 писал(а):DDRD-0x00;
?
Чт июн 28, 2012 20:24:21
Исправил но всё равно проверка проходит только 1 раз
Чт июн 28, 2012 20:40:08
Покажите схему.
Чт июн 28, 2012 20:41:48
Вот
- Вложения
-
- Безымянный рисунок.png
- (14.36 KiB) Скачиваний: 460
Чт июн 28, 2012 20:48:11
ошибка зарыта в каких-то цепочках ДНК.
Чт июн 28, 2012 20:54:47
Вероятно, как говорится, проблема между комьютером и стулом
Уточните, что значит "проверка условия проходит только один раз" ???
Чт июн 28, 2012 22:48:59
Лень проверять, но разве свободные лапы контроллера не прочитаются как "1" (из-за внутренних подтягивающих резисторов)? И как, в таком случае может прочитаться 0b000...?
Попробуй завести кнопки на корпус, а не на питание.
И в любом случае, если ты хочешь проверить состояние одного бита, то проверяй один бит:
- Код:
if (PIND & 0b00000001) {
Пт июн 29, 2012 09:33:49
ishutinvalera48 писал(а):Исправил но всё равно проверка проходит только 1 раз
??? Поставьте breakpoint или прогоните в пошаговом режиме симуляции и посмотрите сколько раз...
Olecorp правильно заметил по поводу подтяжки выводов МК. По крайней мере для Proteus.
- Вложения
-
- ATMega48_test.zip
- (8.08 KiB) Скачиваний: 247
Пт июн 29, 2012 11:51:13
две причины
1-кнопки нужно повечсить на ноль, а не на питание, при чтении порта, он сам (как сказали ранее и как написано в даташите) подтянут на +5 в самой мк
2-проверяй так if ( PIND & 0b00000001==0 ) то...иначе...
здесь 1 ставь на проверяемой ноге, пришёл ЗЕМЛЯ сигнал - сработает, не пришол - там будет +5, логика не обнулится и не сработает условие.
Powered by phpBB © phpBB Group.
phpBB Mobile / SEO by Artodia.