Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Порты у AT89C51
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры > MCS51
a_L_ex
Микроконтроллер как то странно реагирует.
В общем, есть два МК и у них соединены некоторые порты.
Я хочу чтобы один МК записал в себе в АСС число, считал его и передал в порт, а второй считал это число, сравнил с некоторым число и выдал результат - равно/не равно. И так несколько раз. Соответственно, нужно чтобы они по очереди останавливались на время работы другого МК.
но вот в чем проблема, такую остановку сделал простым циклом с условием "равно нулю" на одном из выводов. И как бы все работает, но только один раз почему то....то есть, своеобразный сигнал прерывания устанавливается, а потом не сбрасывается.
Помогите разобраться почему.
Программы для МК сделаны в Keil, симуляция в Протеусе.
Коды и модель в приложении.[code][/code]
Shein
Цитата(a_L_ex @ Mar 17 2012, 20:14) *
но вот в чем проблема, такую остановку сделал простым циклом с условием "равно нулю" на одном из выводов. И как бы все работает, но только один раз почему то....то есть, своеобразный сигнал прерывания устанавливается, а потом не сбрасывается.
Помогите разобраться почему.

Детально еще не смотрел, но первое что сразу бросилось в глаза - отсутствие главного цикла (т.е. бесконечного цикла) в функциях main(). За очень редким исключением, программа для контроллера не должна выходить из функции main.
Код
void main(void)
{
    < действия, выполняемые 1 раз при старте>
   while (1) {  //ну или for (;;) кому как нравится
         < действия выполняемые многократно>
   }
}

a_L_ex
Цитата(Shein @ Mar 19 2012, 23:02) *
Детально еще не смотрел, но первое что сразу бросилось в глаза - отсутствие главного цикла (т.е. бесконечного цикла) в функциях main(). За очень редким исключением, программа для контроллера не должна выходить из функции main.
Код
void main(void)
{
    < действия, выполняемые 1 раз при старте>
   while (1) {  //ну или for (;;) кому как нравится
         < действия выполняемые многократно>
   }
}


Ага, спасибо, поправил, не знал об этом.
В протеусе у меня просто программа заново начиналась и так по кругу и крутилось все.
А с проблемой разобрался, оказалось все дело в особенности этого МК - чтобы считать с порта необходимо сначала записать в него все 1.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.