Перейти к содержанию

Atmega 8, Что Я Не Угадал?


Рекомендуемые сообщения

Приветствую вас!

Суть вопроса; прописал цикл while, все читается по плану, вставляю оператор if, программатор не реагирует, прокручивает цикл не ожидая условия if (PIND.0==~1). Это конечно азы, но я явно что-то не угадал! Подскажете?

post-176646-0-79891000-1433590646_thumb.jpg

post-176646-0-76656000-1433590655_thumb.jpg

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

1. Для вставки сюда кода есть специальный тег [CОDE] [/СОDE]. Он, конечно, ломает форматирование, но всяко лучше скриншотов.

2. Что хотел сказать автор записью PIND.0==~1, точнее именно логическим выражением ~1.

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

в программировании не угадывают, а делают правильно сразу

Да, я понимаю, вы конечно в школу не ходили и не учили вас что 2*2=4, а сразу сделали правильно и написали программу управления спутниковой технологии. Ну куда нам!!! А слово "угадал", образное выражение, с тенью юмора, пояснение для тех кого это слово напрягло!

Ссылка на комментарий
Поделиться на другие сайты

1. Для вставки сюда кода есть специальный тег [CОDE] [/СОDE]. Он, конечно, ломает форматирование, но всяко лучше скриншотов.

2. Что хотел сказать автор записью PIND.0==~1, точнее именно логическим выражением ~1.

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

а вот второй пункт это вопрос.... насколько помницо ~1 = ~0b00000001 = 0b11111110

Ссылка на комментарий
Поделиться на другие сайты

1. Для вставки сюда кода есть специальный тег [CОDE] [/СОDE]. Он, конечно, ломает форматирование, но всяко лучше скриншотов.

2. Что хотел сказать автор записью PIND.0==~1, точнее именно логическим выражением ~1.

По поводу вашей первой цитаты нечего не поясню, т.к. не понял о чем он! По поводу "~1", насколько я понял г-на Писанец, на видео уроках когорого я пытаюсь учиться, "~"-это символ тылда, инвертирующая следующую за ней величину, в нашем случае "1" в "0". Следовательно, PIND.0==~1 равно PIND.0==0., но PIND.0==~1, более корректная, понятная для CodeVision запись.

1. Для вставки сюда кода есть специальный тег [CОDE] [/СОDE]. Он, конечно, ломает форматирование, но всяко лучше скриншотов.

2. Что хотел сказать автор записью PIND.0==~1, точнее именно логическим выражением ~1.

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

а вот второй пункт это вопрос.... насколько помницо ~1 = ~0b00000001 = 0b11111110

В обсуждаемом случае, PIND.0==~1, инвертируется только нулевой бит, и ее образно можно представить так; PORTD= 0bxxxxxxx0; а ~0b00000001 в этом случае тылда"~" производит инвертирование всего порта.

Ссылка на комментарий
Поделиться на другие сайты

Интересно, а чавойта у вас DDR в теле цикла делает? Как компилятор поймет, что первый бит порта D настроен на вход?

Молодых и талантливых чрезвычайно много. Целеустремлённых и готовых довести дело до конца — гораздо меньше.

Ссылка на комментарий
Поделиться на другие сайты

Спасибо Великому Комбинатору! Пересмотрел старые программки с учетом вашей подсказки, подправил, все заработало! Всем спасибо!!!

PS. Для тех кто учится на чужих ошибках "рисую" правильный вариант решения задачки.

post-176646-0-97355300-1433611444_thumb.jpg

Ссылка на комментарий
Поделиться на другие сайты

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

а вот второй пункт это вопрос.... насколько помницо ~1 = ~0b00000001 = 0b11111110

В том то и дело что "если с первого раза". При копировании, как можно заметить, первый уровень форматирования съедается.

На счет второго пункта, именно эту формулу я и имел в виду, но лучше бы ;tv ее сам привел, было бы полезнее.

По поводу вашей первой цитаты нечего не поясню, т.к. не понял о чем он!

О том, что код надо вставлять как код, в не как снимок экрана с кодом!

По поводу "~1", насколько я понял г-на Писанец, на видео уроках когорого я пытаюсь учиться, "~"-это символ тылда, инвертирующая следующую за ней величину, в нашем случае "1" в "0". Следовательно, PIND.0==~1 равно PIND.0==0., но PIND.0==~1, более корректная, понятная для CodeVision запись.

...

В обсуждаемом случае, PIND.0==~1, инвертируется только нулевой бит, и ее образно можно представить так; PORTD= 0bxxxxxxx0; а ~0b00000001 в этом случае тылда"~" производит инвертирование всего порта.

А вот и нет! Для Си 1 это не 1 бит, а 1 байт или 1 слово (за все компиляторы сказать не могу). Оператор "~" это не просто инверсия, это побитовая инверсия. То есть (~0b00110101)=0b11001010. А вот "!" - инверсия булевская, то есть (!0b00110101)=0b00000000, не стоит их путать, равно как и другие побитовые/булевские операторы, вроде &, &&, |, ||, ^. Если разберетесь с этим, поймете правоту IMXO.

В "обсуждаемом случае" однобитная переменная сравнивается с однобайтной. Между прочим, ни контроллеры, ни язык Си понятия не имеют об однобитных переменных, максимум - однобитные поля в структурах (которые иногда разворачиваются в жуть и кошмар). А при сравнении переменных они приводятся к одному типу, в данном случае к char.

P.S. Приводить код имеет смысл только в таком виде:

#include <mega8.h>
#include <delay.h>

int A,B,R;

int main(){
DDRD = ~(1<<0); //эквивалентно записи DDRD=0b11111110, но несколько нагляднее
DDRC = 0xFF; //именно для 0xFF нагляднее, но тут неоднозначно
PORTD = (1<<0); //вообще-то, использование для настроек любой системы, кроме двоичной, не будет наглядным, но числа 0x00 и 0xFF достаточно очевидны - выключить все / включить все
PORTC = 0x00;
R = 0b00011000;
A = ((R & 0b11110000) >>4);
B = (R & 0b00001111);
while(1){
 if( !(PIND & (1<<0)) ){ //можно и if(!PIND.0), но так лучше для совместимости с компиляторами Си
  PORTC = A;
  delay_ms(1000);
  PORTC = B;
  delay_ms(1000);
  PORTC = 0x00;
 }
}
}

Обратите внимание на то, что код оформлен как код, а не как картинка, с которой даже скопипастить невозможно. На то, что все настройки вынесены из бесконечного цикла. На использование конструкций (1<<x) / ~(1<<x).

P.P.S.

Агрессивная критика была только по поводу пункта 1. Остальное - совет.

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы публикуете как гость. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...