Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Удаленная работа
Помощь проекту


 
Опции темы
Непрочитано 13.05.2014, 12:22  
synk
Вид на жительство
 
Аватар для synk
 
Регистрация: 30.03.2009
Сообщений: 320
Сказал спасибо: 12
Сказали Спасибо 63 раз(а) в 46 сообщении(ях)
synk на пути к лучшему
По умолчанию Начальная инициализация регистров PIC16F688

Приветствую!
Опыта работы с PIC cовсем мало. Делал пару устройств, которые измеряли напряжениеи как-то реагировали. Со встроенной перефирией не работал. Сейчас делаю устройство, в котором будет модуль SIM900. PIC работает с ним по UART. В начале делаю инициализацию всех регистров в зависимости от необходимой конфигурации. Она выглядит так:
Код:
   PORTA      = 0x00;
   PORTC      = 0x00;
   OPTION_reg = 0b10000000;
   INTCON     = 0b11000000;
   PIE1       = 0b00100010;
   PIR1       = 0b00000010;
   PCON       = 0b00000011;
   OSCCON     = 0b01100111;
   OSCTUNE    = 0b00000000;
   TRISA      = 0b00000111;
   ANSEL      = 0b00000000;
   WPUA       = 0b00000010;
   IOCA       = 0b00000000;
   TRISC      = 0b00101100;
   T1CON      = 0b10000000;
   CMCON0     = 0b00000111;
   CMCON1     = 0b00000011;
   VRCON      = 0b00000000;
   ADCON0     = 0b00000000;
   ADCON1     = 0b00000000;
   TXSTA      = 0b00000110;
   RCSTA      = 0b10010000;
   BAUDCTL    = 0b01001000;
   SPBRG      = 25;
А дальше небольшая программка, просто для проверки работы.
Код:
 
  Delay_ms(1000);
  UART1_Init(9600);
  Delay_ms(100);
  led2 = 1;
  on_mod();
  Delay_ms(100);
  while(sh2 == 1)
        {
        flash();
        }
        
  off_mod();
  led2 = 0;
Она зажигает светодиод, инициализирует UART, включает модем, и мигает светодиодом, пока я не замкну один вывод, тогда выключает модем и гасит светодиод.
Мне нужно будет по прерыванию реагировать и парсить ответы модема. Проблема заключается в том, что если я устанавливаю "Enables all unmasked peripheral interrupts", а их всего два, от приёмника и передатчика UART, программа в самом начале вваливается в прерывание и даже не зажигает светодиод. Это же вызывает отдельная установка RCIE и TXIE в единицу. Даже если я не делаю UART1_Init(9600); Все равно программа зависает. Компилятор microC.
Что я делаю не так?
Реклама:
synk вне форума  
Непрочитано 13.05.2014, 12:47  
Yurkin2014
Заблокирован
 
Регистрация: 21.01.2014
Сообщений: 589
Сказал спасибо: 7
Сказали Спасибо 269 раз(а) в 207 сообщении(ях)
Yurkin2014 на пути к лучшему
По умолчанию Re: Начальная инициализация регистров PIC16F688

Если хотите использовать прерывание, то надобно написать обработчик прерывания interrupt(), в котором флаг этого прерывания будет занулён. Иначе с поднятым флагом это прерывание будет вызываться по кругу бесконечно и основная прпограмма не сдвинется с места.
Yurkin2014 вне форума  
Непрочитано 13.05.2014, 13:08  
synk
Вид на жительство
 
Аватар для synk
 
Регистрация: 30.03.2009
Сообщений: 320
Сказал спасибо: 12
Сказали Спасибо 63 раз(а) в 46 сообщении(ях)
synk на пути к лучшему
По умолчанию Re: Начальная инициализация регистров PIC16F688

Yurkin2014, а если у меня не пришло ничего по UART. Почему срабатывает прерывание?
synk вне форума  
Непрочитано 13.05.2014, 13:40  
Yurkin2014
Заблокирован
 
Регистрация: 21.01.2014
Сообщений: 589
Сказал спасибо: 7
Сказали Спасибо 269 раз(а) в 207 сообщении(ях)
Yurkin2014 на пути к лучшему
По умолчанию Re: Начальная инициализация регистров PIC16F688

Вот у Вас в самом начале разрешаются все прерывания,
Цитата:
INTCON = 0b11000000;
PIE1 = 0b00100010;
а потом Вы начинаете битами шевелить в регистрах. Это некрасиво.
После ресета ПИКа все прерывания запрещены, т.к. в INTCON все биты равны 0. Вот надо сначала всё настроить и проинициализировать, а потом уже разрешать прерывания. Иначе легко поймать ложное срабатывание.

Последний раз редактировалось Yurkin2014; 13.05.2014 в 13:44.
Yurkin2014 вне форума  
Непрочитано 14.05.2014, 22:26  
vavan1983
Почётный гражданин KAZUS.RU
 
Аватар для vavan1983
 
Регистрация: 26.12.2007
Сообщений: 1,126
Сказал спасибо: 70
Сказали Спасибо 70 раз(а) в 59 сообщении(ях)
vavan1983 на пути к лучшему
По умолчанию Re: Начальная инициализация регистров PIC16F688

Изначально не верно настроены регистры.
Начните с самого простого это свяжите два МК по UART и заставьте их обмениваться между собой данными.
Будут вопросы я попробую помочь.
vavan1983 вне форума  
 

Закладки
Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Тест памяти и регистров. Andrewg Микроконтроллеры, АЦП, память и т.д 5 05.01.2007 14:12


Часовой пояс GMT +4, время: 09:47.


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