реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Порты у AT89C51, Помогите разобраться
a_L_ex
сообщение Mar 17 2012, 18:14
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 25
Регистрация: 18-07-11
Пользователь №: 66 277



Микроконтроллер как то странно реагирует.
В общем, есть два МК и у них соединены некоторые порты.
Я хочу чтобы один МК записал в себе в АСС число, считал его и передал в порт, а второй считал это число, сравнил с некоторым число и выдал результат - равно/не равно. И так несколько раз. Соответственно, нужно чтобы они по очереди останавливались на время работы другого МК.
но вот в чем проблема, такую остановку сделал простым циклом с условием "равно нулю" на одном из выводов. И как бы все работает, но только один раз почему то....то есть, своеобразный сигнал прерывания устанавливается, а потом не сбрасывается.
Помогите разобраться почему.
Программы для МК сделаны в Keil, симуляция в Протеусе.
Коды и модель в приложении.[code][/code]
Прикрепленные файлы
Прикрепленный файл  files.7z ( 20.29 килобайт ) Кол-во скачиваний: 16
 
Go to the top of the page
 
+Quote Post
Shein
сообщение Mar 19 2012, 20:02
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 45
Регистрация: 4-03-07
Пользователь №: 25 855



Цитата(a_L_ex @ Mar 17 2012, 20:14) *
но вот в чем проблема, такую остановку сделал простым циклом с условием "равно нулю" на одном из выводов. И как бы все работает, но только один раз почему то....то есть, своеобразный сигнал прерывания устанавливается, а потом не сбрасывается.
Помогите разобраться почему.

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

Go to the top of the page
 
+Quote Post
a_L_ex
сообщение Mar 20 2012, 09:25
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 25
Регистрация: 18-07-11
Пользователь №: 66 277



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


Ага, спасибо, поправил, не знал об этом.
В протеусе у меня просто программа заново начиналась и так по кругу и крутилось все.
А с проблемой разобрался, оказалось все дело в особенности этого МК - чтобы считать с порта необходимо сначала записать в него все 1.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th June 2025 - 10:58
Рейтинг@Mail.ru


Страница сгенерированна за 0.01373 секунд с 7
ELECTRONIX ©2004-2016