начинаю осваивать микроконтроллер и не могу понять что не так с простой программулиной. По идее она должна отслеживать состояние на входе РВ0 и при наличии там 1, зажечь светодиод на ноге РВ3
код:
#include <avr/io.h>
int main(void)
{ DDRB=0b111110;
while (PINB==0b000000)
{
PORTB=0b001000;
}
}
(схема во вложении)
Запускаю в протеусе и ничего не происходит. как ни переключай switch светодиод не горит. Может я неправильно условие цикла задаю? Помогите с кодом.
При наличии1, зажечь светодиод на ноге РВ3
При наличии1, зажечь светодиод на ноге РВ3
- Вложения
-
- tiny.JPG
- (92.67 КБ) 395 скачиваний
- Реклама
-
codenamehawk
- Вымогатель припоя
- Сообщения: 528
- Зарегистрирован: Вт фев 09, 2010 17:52:26
Re: Помогите разобраться
Код: Выделить всё
while (PINB==0b000000)Попробуйте так
Код: Выделить всё
while ((PINB & 0x01) == 0x01 )Re: При наличии1, зажечь светодиод на ноге РВ3
IMHO, начинать осваивать что-либо стоит с чтения литературы.
Например, Белов А.В. - Создаем устройства на микроконтроллерах. Первый же пример - ваш
Например, Белов А.В. - Создаем устройства на микроконтроллерах. Первый же пример - ваш
- Dr. Alex
- Это не хвост, это антенна
- Сообщения: 1438
- Зарегистрирован: Вт окт 28, 2008 09:00:18
- Откуда: Украина, Харьков
- Контактная информация:
Re: При наличии1, зажечь светодиод на ноге РВ3
Хм. Вам, для начала, нужно определить, какие ноги будут работать на выход, а какие на вход!!!!
УПС..... не заметил - объявили)))))))
Код: Выделить всё
.............
DDRB|= (1<<PB3);// Нога РВ3 на ВЫХОД
DDRB&= ~(1<<PB0);// Нога РВ0 на вход
.............
Порой мне кажется, что я делаю какое-то дерьмо, но когда я вижу, что делают другие, то я чувствую себя гением...
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18629
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: При наличии1, зажечь светодиод на ноге РВ3
не понятно лично мне другое - зачем пытаются отвечать те, кто не понимает сам? ведь кроме, как поставить в тупик своими советами, другого результата они не добьются...vintorez писал(а):не могу понять что не так с простой программулиной. По идее она должна отслеживать состояние на входе РВ0 и при наличии там 1, зажечь светодиод на ноге РВ3
код:
#include <avr/io.h>
int main(void)
{ DDRB=0b111110;
while (PINB==0b000000)
{
PORTB=0b001000;
}
}
теперь о программе:
вы написали буквально следующее: пока на всех пинах порта B нули, выводить в порт B 1 в 4-ю линию, а в остальные 0. а теперь смотрите: если изначально у вас на пинах НЕ ВСЕ НУЛИ (что очень веротяно, ибо они болтаются в воздухе), условие цикла НЕ ВЫПОЛНЯЕТСЯ, и main завершается, не успев начаться. это раз.
далее, если вдруг чисто случайно на пинах окажутся нули, то первым же выводом в порт единички вы снова прекращаете работу цикла и на этом так же точка.
понятны проблемы? теперь о том, как их решать.
1. главный цикл main - это святое, всегда должен выглядеть только так
Код: Выделить всё
while(1){
// тут что-то делаем
}2. теперь с опросом пинов и выводом в них. как проверить состояние одного пина, не смешивая их с остальными, см. здесь: http://arv.radioliga.com/content/view/191/49/ как устанавливать только один нужный бит, не трогая остальные, смотри здесь: http://arv.radioliga.com/content/view/187/49/ как сбрасывать только один бит, не меняя остальные, см. здесь: http://arv.radioliga.com/content/view/188/49/
3. подводя итог, ваша программа должна иметь такой "костяк":
Код: Выделить всё
int main(void){
// настраивем ТОЛЬКО нужные порты (пины) на вывод
// выводим только в нужные порты (пины) единички
while(1){
if(проверяем_состояние_нужного_пина)
// устанавливаем нужный пин в 1
else
// устанавливаем нужный бит в 0
}
}если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Реклама
Re: При наличии1, зажечь светодиод на ноге РВ3
AVR, огромное спасибо! Хорошо что есть такие люди как Вы. Информации по ссылкам оч не хватало.
Книга Белова есть, но из нее я так не понял как настроить порт(для моего случая). Перечитаю еще раз.
И спасибо админу
а то я уже голову сломал.
Книга Белова есть, но из нее я так не понял как настроить порт(для моего случая). Перечитаю еще раз.
И спасибо админу


