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

Программа На Си


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

Доброго времени суток уважаемые форумчане! Не пинайте слишком сильно. Вот в 37лет решил освоить МК и язык Си .Научился мигать светодиодом ,включать от кнопки .узнал что такое порты и как их конфигуировать.

Хочу написать программу ,чтобы при нажатии кнопки светодиод моргал ровно 5 раз и потом гаснул.При отключении кнопки светодиоды не горят. при вкл.опять моргали бы 5 раз и так бесконечно

Вот прога:

#define F_CPU 1000000UL
#include<avr/io.h>
#include<util/delay.h>

int main(void){

DDRD=0xFF;
DDRC=0x00;
PORTC|=_BV(PC0)

int i;

for(i=1;i<=5;i++)
while(1){
if((PINC&(1<<PD0))==0)
{PORTD=0x00;
_delay_ms(250);
PORTD=0xFF;}
else
  {PORTD=0x00:}
}
}

Но почему то светодиод моргает бесконечно ? Если убираю while(1) то мигает ровно 5 раз но не работает от кнопки Помогите пожалуйста !!!!!

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

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

код программы вставляйте с тегом [ code ][ /code ] (кнопка "Код" на панели редактора сообщений )

а что должно произойти если кнопку отжали,а СД не успел мигнуть 5 раз? потухнуть или до мигать до пяти?

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

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

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

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

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

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

Hongfa для различных применений в Компэл. Большой выбор в наличии!

Компания HONGFA - это не только крупнейший в мире производитель электромеханических реле, но также производитель конденсаторов, вакуумных прерывателей, трансформаторов и низковольтного коммутационного оборудования. На складе КОМПЭЛ регулярно поддерживаются около 100 самых популярных позиций электромеханических реле. Реле Hongfa могут заместить многие изделия производства недоступных брендов. Подробнее>>

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

Ты как-то вложенность циклов перепутал.

Лучше начинай делать программу с блок-схемы алгоритма её работы.

Микроконтроллер не останавливается когда дойдет до конца программы - у него такого понятия попросту не существует, и пока не переведешь в спящий режим он будет выполнять команды по очереди... Но что он будет выполнять когда программа закончится? А закончится только заполненная область памяти, а дальше будут сплошные $FFFF, это будет соответствовать какой-то команде и он будет что-то делать пока не вернется снова в "обитаемую" часть программы, но что он за это время сделает - предсказать трудно да и не нужно, просто нельзя допускать такой ситуации, поэтому основная часть программы - это бесконечный цикл.

Внутри цикла, надо проверять нажатие кнопки, и если она НЕ НАЖАТА - переход на начало цикла, ИНАЧЕ выполнить алгоритм мигания 5 раз, ну это уже банальный цикл в 5 итераций.

У тебя кстати еще одна задержка отсутствует. Надо засветить светодиод, подождать, погасить светодиод и СНОВА подождать. иначе, в погашенном состоянии светодиод будет считанные микросекунды.

Если надо, внутри цикла снова делать проверки - если кнопка ОТЖАТА - переход на начало программы, с таким условием схема перестанет мигать.

После 5 миганий крутимся на месте пока кнопка НЕ ОТЖАТА, если она будет нажата в этот момент это приведет к повторному срабатыванию схемы и цикл не закончится никогда. Если же на этот момент кнопка и так будет отжата - программа пойдет дальше и тут же попадет на начало алгоритма ожидая нажатие кнопки.

Учение - изучение правил. Опыт - изучение исключений.

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

Секреты депассивации литиевых батареек FANSO EVE Energy

Самыми лучшими параметрами по энергоемкости, сроку хранения, температурному диапазону и номинальному напряжению обладают батарейки литий-тионилхлоридной электрохимической системы. Но при длительном хранении происходит процесс пассивации. Разберем в чем плюсы и минусы, как можно ее избежать или уменьшить последствия и как проводить депассивацию батареек на примере продукции и рекомендаций компании FANSO EVE Energy. Подробнее>>

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

Alexeyslav, зря распинаешься. Допустим коэффициент восприятия равен Θ. При Θ -> 0, даже при потоке информации равном бесконечности, если помножить на коэффициент восприятия, в данном случае получим стремящимся к 0 целых и столько же десятых.

Поэтому ответ на данный вопрос следует начинать с вопроса: какой бюджет?

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

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

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

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

Не зря. Зря только, что ответ ны этот пост не от топикстартера.

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

код программы вставляйте с тегом [ code ][ /code ] (кнопка "Код" на панели редактора сообщений )

а что должно произойти если кнопку отжали,а СД не успел мигнуть 5 раз? потухнуть или до мигать до пяти?

потухнуть

Ты как-то вложенность циклов перепутал.

Лучше начинай делать программу с блок-схемы алгоритма её работы.

Микроконтроллер не останавливается когда дойдет до конца программы - у него такого понятия попросту не существует, и пока не переведешь в спящий режим он будет выполнять команды по очереди... Но что он будет выполнять когда программа закончится? А закончится только заполненная область памяти, а дальше будут сплошные $FFFF, это будет соответствовать какой-то команде и он будет что-то делать пока не вернется снова в "обитаемую" часть программы, но что он за это время сделает - предсказать трудно да и не нужно, просто нельзя допускать такой ситуации, поэтому основная часть программы - это бесконечный цикл.

Внутри цикла, надо проверять нажатие кнопки, и если она НЕ НАЖАТА - переход на начало цикла, ИНАЧЕ выполнить алгоритм мигания 5 раз, ну это уже банальный цикл в 5 итераций.

У тебя кстати еще одна задержка отсутствует. Надо засветить светодиод, подождать, погасить светодиод и СНОВА подождать. иначе, в погашенном состоянии светодиод будет считанные микросекунды.

Если надо, внутри цикла снова делать проверки - если кнопка ОТЖАТА - переход на начало программы, с таким условием схема перестанет мигать.

После 5 миганий крутимся на месте пока кнопка НЕ ОТЖАТА, если она будет нажата в этот момент это приведет к повторному срабатыванию схемы и цикл не закончится никогда. Если же на этот момент кнопка и так будет отжата - программа пойдет дальше и тут же попадет на начало алгоритма ожидая нажатие кнопки.

как это реализовать программно ? помогите , направте на путь истинный. Очень хочу разобраться !!!!!!!

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

Так я все уже написал, рисуйте блок-схему, а потом по блок-схеме каждый кубик раскрывайте в виде строчек программы. Чего уж тут сложного.

Учение - изучение правил. Опыт - изучение исключений.

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

while(1)
    {
      if((PINC&(1<<PD0))==0)
       {
         inc i++;
         if(i<6)
           {
            PORTD=0x00;
            _delay_ms(250);
            PORTD=0xFF;
            _delay_ms(250);      
            }
          if(i>6) i=6;
       }
     else
       {
        PORTD=0x00;
        i=0; 
       }
    }

это работает в протеусе как надо!Только avr studio не съело inc i++; написал просто i++ все скомпилировалось но с одним предупреждением

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

Я думаю правильней написать "INC i" а "i++" есть не сто иное как синоним, только в отличие от первой записи его можно использовать в выражении.

Переход на определенные метки осуществляется при помощи GOTO, или какой там аналог в Си...

Изменено пользователем Alexeyslav

Учение - изучение правил. Опыт - изучение исключений.

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

Есть в си и метки и goto, но применение их крайне нежелательно

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

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

пример будьте любезны...

есть жалкое подобие в виде break и continue - передача управления на оператор следующий за циклом на один уровень вверх

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

 while(1)
  {
 	for(int i=0;i<100;i++)
   	{
........
   goto exit;
........
   	}
   }
   exit: printf("Быстрый выход из вложенных циклов");

Но еще раз повторю - использование goto и меток это моветон.

Изменено пользователем IIIytNIK

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

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

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

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

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

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

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

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

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

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

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

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

    • @v1ct0r Как на этой схеме сделать так чтобы гореть светодиод начал при напряжении 10В, например? а ниже 10в не горелили еле еле светил, 8в чтобы вообще молчал..
    • @Nem0 не подскажешь какие детали поменять чтобы индикатор загорался? если на входе будет ~10В(выход с УНЧ)
    • @Serrad да.. хочу собрать индикатор мощности, чтобы на колонках красный свет начинал светитьтся при подаче 9В.. чтобы не спалить)
    • Я, конечно, большая зануда. Но! Таки расскажите мне, зачем покрывают управляющую сетку золотом и чем она лучше обычной именно в фонокорректоре Василича. Кстати, видел оба варианта исполнения. Со своей стороны предложу за для начала немного теории. Ток сетки состоит из нескольких компонентов. Электронный, утечки, ионный, обусловленный вторичной эмиссией, фотоэлектронный. В корректоре Василича потенциал сетки равен нулю, поэтому тоже отметим этот факт. Далее рассматривать компоненты сеточного тока буду по мере увеличения их влияния. 1. Ток фотоэмиссии. Не будем рассматривать вообще, полагая корпус корректора непрозрачным или считая плотность светового потока, освещающего сетку лампы, на несколько порядков ниже, чем у лазера.  2. Ток утечки. Вообще-то вывод анода расположен достаточно близко к выводу сетки и пренебречь им невозможно. С другой стороны, предположим, что баллон лампы чистый, сборщик чистоплотный и собирал конструкцию в перчатках. Более того, фонокорректор не будет использоваться в сыром подвале. Тода факт утечки можно вычеркнуть. Хотя...  3. Ионный ток. Возникает в старых лампах, при избытке остаточного газа в баллоне или при явных превышениях допустимых режимов. Например при высоких анодных токах, или при значительном повышении анодного напряжения. В нашем случае эти факторы тоже отсутствуют. Так что, на этот факт тоже, предположим, положили... 4. Ток, обусловленный термоэлектронной эмиссией электронов с сетки. Сетка расположена очень близко к катоду, особенно у ламп с высоким усилением, тем более, что шаг её навивки у них достаточно мал. Соответственно, она сильно разогревается и начинает сама испускать электроны. Вот вам и причина ещё одного дополнительного тока. 5. Электронная составляющая тока сетки. Обусловлена попаданием электронов с катода на сетку. Наиболее значимая часть тока сетки. Эта составляющая тем больше, чем меньше напряжение смещения сетки и меньше анодное напряжение. При нулевом смещении на сетке и напряжении на аноде равном нулю ток сетки может составлять несколько мА. А теперь самое интересное. Составляющие тока, описанные в пунктах 4 и 5 имеют разные знаки. То есть, могут компенсировать друг друга. Но! Покрытие золотом управляющей сетки как раз УМЕНЬШАЕТ термоэлектронную эмиссию и, соответственно, увеличивает суммарный ток сетки при малых смещениях! То есть, лампы без золотого покрытия и с большей термоэлектронной эмиссией как раз предпочтительнее! И ионным током так же.  Вот такая проблемка. Жду адекватных комментариев. Ответы типа: "На солнце не может быть пятен, потому, что этого не может быть", не принимаются.  С Международным днём защиты детей! Удачи.
×
×
  • Создать...