Форум Микро-Чип
Поиск и заказ электронных компонентов
 

Вернуться   Форум Микро-Чип > Продукция MICROCHIP

Продукция MICROCHIP Технические вопросы по всей продукции Microchip

Ответ
 
Опции темы Опции просмотра
Старый 18.04.2017, 15:02   #1
vanpnkv
Junior Member
 
Регистрация: 14.04.2017
Возраст: 22
Сообщений: 3
Вес репутации: 100/0
vanpnkv will become famous soon enoughvanpnkv will become famous soon enough
По умолчанию UART dsPIC

Всем привет!
Есть проблема с dsPIC30F2010
Код:
void __attribute__((__interrupt__, no_auto_psv)) _U1TXInterrupt(void) {     IFS0bits.U1TXIF = 0; }
 void __attribute__((__interrupt__, no_auto_psv)) _U1RXInterrupt(void)  {     IFS0bits.U1RXIF = 0;      }   
  int main(void)  
 {        
    const int _STATUS = 0x31; //Статус МК     
    const int _START = 0x32; //Начать измерения          
    int status = 0;    
    while (status != 1)    
    {                  
        if (DataRdyUART1())       
        {           
            unsigned int RecieveBuf = 0x0;             
            RecieveBuf = ReadUART1();             
           if (RecieveBuf == _STATUS) 
           putsUART1 ((unsigned int *)waiting_start);          
           else if (RecieveBuf == _START)            
            {                
                putsUART1 ((unsigned int *)start_measurement);    
                // status = 1;                          
            }                          
           else if (RecieveBuf != _STATUS && RecieveBuf != _START)
           putsUART1 ((unsigned int *)unknown_cmd);                                              
        }             
     } 
//....some code
}
Из кода кое-что убрал ненужное, но суть такая: в данном бесконечном цикле мк по uart принимает какой-то символ, обрабатывает его, и дает ответ. Все прекрасно бесконечно работает. Как только раскомменчиваю строку status = 1 чтобы из цикла выйти, все нахрен повисает, не идет ни прием ни передача.
Посмотрел, выходит что как только появляется вариант выйти из цикла (т.е. строка status = 1 раскоменчена),
условие if (DataRdyUART1()) оказывается всегда ложным! И потому не идет ни прием ни передача.
Подскажите, где я не прав, пожалуйста

Последний раз редактировалось vanpnkv; 18.04.2017 в 15:09.
vanpnkv вне форума   Ответить с цитированием
Старый 18.04.2017, 15:27   #2
IceS
Super Moderator
 
Регистрация: 01.03.2007
Адрес: St. Petersburg
Возраст: 38
Сообщений: 3,249
Вес репутации: 3684/107
IceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond repute
Отправить сообщение для IceS с помощью ICQ
По умолчанию Re: UART dsPIC

Цитата:
Сообщение от vanpnkv Посмотреть сообщение
Как только раскомменчиваю строку status = 1 чтобы из цикла выйти, все нахрен повисает
А тут нужно решить для себя, куда Вы выходите? Это же не PC, где вы запускаете программу из операционной системы, и выход из главного цикла приводит к возврату в операционку.
Вообще в микроконтроллерах главный цикл принято оформлять так:
Код:
while(1)
{
//.....
//тут Ваш код
//....
}
цикл всегда бесконечный, за редким исключением, когда автор программы понимает что делает.

PS отладчик есть? Или в симуляторе прогоните код, и увидите куда попадает "процессор" если выходит из основного цикла. Обычно там стоит команда sleep загоняющая проц в спящий режим.
__________________
- Готово, мастер !!!
- Что готово ???
- Сломал ...
IceS вне форума   Ответить с цитированием
Старый 18.04.2017, 15:35   #3
vanpnkv
Junior Member
 
Регистрация: 14.04.2017
Возраст: 22
Сообщений: 3
Вес репутации: 100/0
vanpnkv will become famous soon enoughvanpnkv will become famous soon enough
По умолчанию Re: UART dsPIC

Это не главный цикл.
Главный тоже есть, но речь сейчас не о нем.
В этом цикле я хочу спрашивать у мк его статус (командой _STATUS), а после команды _START хочу чтобы он вышел из этого цикла и продолжил выполение main (там еще куча кода).
Если то, что я делаю - неверно, подскажите, как можно это сделать правильно?
vanpnkv вне форума   Ответить с цитированием
Старый 18.04.2017, 17:58   #4
IceS
Super Moderator
 
Регистрация: 01.03.2007
Адрес: St. Petersburg
Возраст: 38
Сообщений: 3,249
Вес репутации: 3684/107
IceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond repute
Отправить сообщение для IceS с помощью ICQ
По умолчанию Re: UART dsPIC

Может конфликт в именах переменных status?
1. Попробуйте обозвать переменную по другому.
2. а что делает функция: DataRdyUART1(), может её копать, раз она начинает false генерить.
3. Оптимизация включена? Отключите её на время отладки, иначе может не правильно дебаг работать.
__________________
- Готово, мастер !!!
- Что готово ???
- Сломал ...
IceS вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с прерыванием от UART на ds pic 30f2011 Zlodei Продукция MICROCHIP 2 14.08.2011 01:33
Проблема с UART Alex_Al Продукция MICROCHIP 6 23.02.2011 15:40
Потеря данных UART dsPic kotlyara Продукция MICROCHIP 1 09.01.2009 17:41
программный UART в microC alexaf Продукция MICROCHIP 4 28.12.2007 16:26
dspic: Timer, UART и ICD2 Arfedin Продукция MICROCHIP 2 19.07.2007 15:49


Часовой пояс GMT +3, время: 16:27.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd. Перевод: zCarot