Jump to content
Sign in to follow this  
NicBenkly

Работа С Внешними Прерываниями

Recommended Posts

Здравствуйте, столкнулся с такой проблемой:

При использовании внешнего прерывания от кнопки INT0 выбирается один из режимов работы контроллера. Каждый режим состоит из длительного цикла (самый короткий 8 мин.). При обработке прерывания изменяется значение глобальной переменной. Состояние переменной проверяется лишь после окончания одного из циклов, что вызывает большую задержку времени до конца исполнения текущего цикла. Проверку переменной в цикл вставить не возможно из-за его и без того высокой нагрузки на систему. Как выход вижу переход при выполнении прерывания к началу программы. Подскажите как можно реализовать такой периход, либо иначе решить задачу.

Код в упрощенном виде прилагаю.

volatile int reg=0x00;
interrupt [EXT_INT0] void ext_int0_isr(void)
{
reg=reg+1;
delay_ms(50);
if (reg>0x11)
{
reg=0x00;
}
}
void regim0 (unsigned int x, y, z)
{
for (a=0; a<d; a++)
{
//……………
}
}
void regim2 (unsigned int x, y, z)
{ for (a=0; a<d; a++)
{ //………….. }
}
//…………..
void regim11 (unsigned int x, y, z)
{ for (a=0; a<d; a++)
{ //………….. }
}
void main(void)
{
while (1)
{
switch (reg)
case 0: regim0(x,y,z); break;
case 1: regim1(x,y,z); break;
//…………..
case 11: regim11(x,y,z); break;
}
}

Share this post


Link to post
Share on other sites

В режимах проверить значение переменной и если не равна текущему значению, то стелать break или goto по другому никак. И вообще как некуда вставить if. Два лишних такта не найдеся чтоли - бред? if(a!=b)break; if(a!=b)goto label;

Edited by Rhime

- А совесть в курсе? - А совесть в доле! :-D

Эксперт — это человек, который совершил все возможные ошибки в некотором узком поле.

Все грамматические ошибки являются авторским стилем изложения материала.

Share this post


Link to post
Share on other sites

Изготовление 2-х слойных плат от 2$, а 4-х слойных от 5$!

Быстрое изготовление прототипа платы всего за 24 часа! Прямая доставка с нашей фабрики!

Смотрите видео о фабрике JLCPCB: https://youtu.be/_XCznQFV-Mw

Посетите первую электронную выставку JLCPCB https://jlcpcb.com/E-exhibition чтобы получить купоны и выиграть iPhone 12, 3D-принтер и так далее...

Как выход вижу переход при выполнении прерывания к началу программы.
Как вариант сделать переменную не инициализируемой при старте (__attribute__((__noinit__)) вроде), а по прерыванию делать программный сброс в начало (asm("rjmp 0"); ) Edited by COKPOWEHEU

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

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

Share this post


Link to post
Share on other sites

Высокая надежность SiC! Как они этого добились?

За несколько лет кропотливых исследований и совершенствования технологии компания Infineon смогла довести показатели надежности и стабильности параметров высоковольтных и быстродействующих карбид-кремниевых транзисторов линейки CoolSiC практически до уровня их кремниевых собратьев.

Подробнее

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

  • Сообщения

    • да, результат будет один, если ты вместо 10 подставишь 20, то тогда во столько же раз изменится время и результат - ёмкость не изменится.
    • Без любого значения напряжения ?  Ты хочешь сказать = что подставлю я туда 10 или 20 будет один результат?    Слушай ну надо быть по серьёзней - это ИДИОТИЗМ.  Значение одной из переменных выражения напрямую влияет на искомую велечену, результата.   Это 2*2=4 ,  что здесь не понятно?  a*b=c(меняй и смотри).  Это даже не вопрос физики или электроники.  Алгебра = 5 класс.            И дельта и U это переменные, значение, которых напрямую влияют на результат выражения.
    • есть формула, без любого значения для неё - никуда.
    • Вот это есть максимальное напряжение - без него никуда.    Я всё понимаю - но я сейчас не об этом.
    • выставлю то напряжение, до которого должен будет заряжаться конденсатор, тогда, например, при заряде стабильным током, можно будет получить время (тогда отношение времени заряда к паузе (во время паузы - разряд до нуля), будет определять ток который будет прямо пропорционален ёмкости, который можно измерить миллиамперметром, я встречал схемы измерителей ёмкости и индуктивности построенных на таком принципе). дельты - это не сомножители, а значки, их нельзя сократить.
    • Послушай Ёмкость - это количество заряда к напряжению.    Вверху есть формула - там для дураков написано.  Дельты сокращаем.  И получается чистый заряд на напряжение.   Это строгая формула.   А без сокращения более простая.  Там не написано дельта 1 и дельта 2 ,  это абсолютно одинаковые дельты.  Их написали чтобы более широко проилюстрировать процесс.    А можно и без них.   Просто формулу сделали более развёрнутую.   Вот и всё.
    • Это глупость, ты смешиваешь в кучу ЗАРЯД  конденсатора и его ЁМКОСТЬ, а это разные вещи. Если налить в ведро 5 литров воды, то ёмкость ведра так и останется 10 литров, а "заряд" в нём будет 5.

  • Мультиметр ANENG Q1

  • Similar Content

    • By Артур Измаилов
      1.Создать схему в которой два светодиоды загораются в следующей последовательности:  1 и 2, 2 и 3, 3 и 4, …, 15 и 16, 1 и 2 и т.д. (т.е. создается эффект движения двух светодиодов).
      Дано условие выше. Решение задачи нужно представить в Proteus. Код для программирования пишу в AtmelStudio 7. Схему собрал в Proteus. Вывел 16 светодиодов через 2 порта (Порт B и Порт D). МК использовал ATMEGA 8 вариации в корпусе DIP с 28 ножками (SPDIL28). 
      До этого смог написать схему, чтобы работали светодиоды в последовательности 1.2.3.4.5....16.1.2.3.4 и тд. Делал через оператор FOR. Однако с этим кодом начались проблемы. Помогите пожалуйста. 
      Нижу представил изображение кода. 
      Заранее спасибо!
       

    • By Lisitsin
      Собираем компьютер ZX Spectrum на микроконтроллерах AVR своими руками!
      Проект открытый, все исходники и информация проекта по ссылке
      https://yadi.sk/d/9S2S0ZmNqsLykQ
      Проект печатной платы выполнен в PCAD-2006, программное обеспечение разработано в AVRStudio  4b401
      Здесь отвечу на все возникающие вопросы и помогу со сборкой и запуском
    • By O5-14
      По поводу этого https://cxem.net/mc/mc220.php девайса. Как напоминалка паролей думал сделать, только в моих краях 1604 нету( Под wg12864 нет случаем модификации ? 
      И что такое значит "Текстовые файлы должны быть в обычном txt формате и без форматирования" - первая часть понятна. А без форматирования ? Одна длинная строка ? Пробелы-то хоть можно ?
    • By Karl-Ieronim
      Коллеги, всем привет. 
      Увидел вот такой проект. 
      Несмотря на явную привлекательность что-то совсем мало повторивших. 
      Может кто-то из завсегдатаев форума делал этот проект? 
      Интересует ваше мнение: хочу повторить, но не силен в программировании, поэтому беспокоюсь на счёт подводных камней с которыми не смогу справиться. 
    • By 3цераптор
      Аутомотив Солюшенз Груп, (ASG) входящая в группу компаний VK Electronics, открывает вакансию программиста микроконтроллеров. На данный момент компания ведет свою деятельность по трем направлениям:
      Разработка автомобильной электроники (блоки управления для сбора данных);
      Системы управления автопарком;
      Промышленная электроника (система "умный дом" SOHO)
      Сотрудничая с нами, Вы будете находиться на острие новых технологий, заниматься исследованием и креативной разработкой, а не банальным написанием кода в жестких условиях ТЗ. Мы позволим Вам самостоятельно принимать решение и находить новые технологии реализации Ваших идей.
      Вы заинтересованы в собственном развитии и Вам интересны новые технологии, а так же Вы желаете стать частью команды современной компании?Ждем Ваших откликов!
      Что нужно делать:
      разрабатывать прошивки для микроконтроллеров;
      участвовать в составлении ТЗ в составе рабочей группы проекта.
      Мы хотим видеть специалиста с...
      Профильным образованием, рассматриваем выпускников ВУЗов;
      Знанием языков программирования;
      Знанием ОС FreeRTOS, Linux;
      Умением программировать чисто, без мусора в коде и стандартных библиотек;
      Умением самостоятельно, а главное быстро разбираться и искать пути решения интересных и трудных задач;
      Знанием архитектур на ядре ARM7,Contex-M3, Contex-M4;
      Опытом работы с процессорами STM 32F1/2/3/4, NXP, Texas industries;
      Знанием протоколов CAN, CANOpen, RS232, RS485;
      Опытом работы с беспроводными модулями GSM,GPS,WiFi и их аппаратными реализациями;
      Опытом разработки ПО для серийных изделий.
      Мы предлагаем:
      ЗП по итогам собеседования, от 80 000 руб.
      Адекватную мотивацию как по ЗП, так и по бонусам;
      Комфортный офис, расположенный в самом центре г. Воронежа;
      Необходимое оборудование для продуктивной работы;
      Пятидневная рабочая неделя, с 9 до 18 часов ( возможно смещение времени работы);
      Работа в молодой команде профессионалов;
      Возможность работать с реальными проектами, видеть результаты креативной работы;
      Сладости для питания мозга :).
×
×
  • Create New...