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

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

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

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

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

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


 
Опции темы
Непрочитано 05.07.2011, 18:13  
wasp
Временная регистрация
 
Регистрация: 22.07.2006
Сообщений: 54
Сказал спасибо: 7
Сказали Спасибо 7 раз(а) в 7 сообщении(ях)
wasp на пути к лучшему
По умолчанию Re: Изучение PIC C Compiler(CCS C)

Здравствуйте,

делаю конвертер на PIC16F887. Он опрашивает несколько слейвов по RS485, которые висят на программном USARTе и посылает инфу на комп, который подключен через аппаратный USART. Мастер складывает ответы от слейвов в буфер в EXT_ISR(), потом обрабатывает.

Но иногда комп тоже может спросить. Его опрос принимает INT_RDA(). Так вот примерно 10% этих запросов теряются, потому как аппаратный УСАРТ подвисает. Видимо это происходит когда прерывания встречаются. Подскажите, как это можно обойти.

Спасибо

Код:
#use rs232(baud=9600,parity=N,xmit=PIN_B1,rcv=PIN_B0,bi  ts=8,stream=RS485) 
#use rs232(baud=38400,UART1,parity=N,bits=8,stream=PC,E  RRORS) 

#INT_RDA      //PC
void serial_isr()
{  

   buffer_pc[next_in_PC]=fgetc(PC);

   if(++next_in_PC == BUFFER_SIZE_PC) next_in_PC = 0;
      
   
}

#int_EXT      //RS485
void  EXT_isr(void) 
{

   if(kbhit(RS485))
      {
      buffer_RS485[next_in_RS485++] = (fgetc(RS485));
      }
 
   if(next_in_RS485 == BUFFER_SIZE_RS485)next_in_RS485 = 0;
}
Реклама:
wasp вне форума  
Непрочитано 06.07.2011, 10:15  
wasp
Временная регистрация
 
Регистрация: 22.07.2006
Сообщений: 54
Сказал спасибо: 7
Сказали Спасибо 7 раз(а) в 7 сообщении(ях)
wasp на пути к лучшему
По умолчанию Re: Изучение PIC C Compiler(CCS C)

Попробовал выставить приоритет:
Код:
#priority rda, ext
не помогло.

Никто не сталкивался с такой проблемой?
wasp вне форума  
Непрочитано 11.07.2011, 20:25  
pasipaka
Прописка
 
Регистрация: 21.03.2011
Сообщений: 107
Сказал спасибо: 15
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
pasipaka на пути к лучшему
По умолчанию Re: Изучение PIC C Compiler(CCS C)

Можно ли я влезу со своим вопросом по СИ для МК:
У меня замешательство по примеру из книги "Применение микроконтроллеров PIC18" Барри Брей. Компилер тут С18.
Но вопрос тут скорее о СИ нежели об архитектуре и конкректном компиллере:
Есть пример считывания температуры с цифрового дачтика LM70.
В данной случае после каждого sendClock на SIO последовательно появляются все 16 битов данных, содержащих температуру. Ну а само значение получается в temp.
И так:

define SIO PORTBbits.RB1
....
for (a=0; a‹16; a++) //получение 16 битов
{
temp‹‹=1;
temp!=SIO››1; // ИЛИ же: temp|=SIO››1;
sendClock();
}
Вопрос 1:
Как это "SIO››1", если SIO - вход порта,бит? Я понимаю, что переменная по факту байтом будет. Но она будет иметь значения 0 или 1. Менятся будет самый младший байт, куда его еще вправо двигать то???!!!!
Да и вообще в целом понять выражение не могу...

Вопрос 2:
Кажется мне, что там опечатка и не "!=", а "|="
ну вроде: temp|=SIO››1; или temp=temp|SIO››1;
По приоритету вначале будет свдиг, а затем ИЛИ.
Но зачем тут сдвиг, да еще вправо???!!

Я бы сделал так:
{
temp‹‹=1;
temp|=SIO; или temp+=SIO;
sendClock();
}

Ну кто прав?....
pasipaka вне форума  
Непрочитано 12.07.2011, 01:57  
CERGEI1982
Почётный гражданин KAZUS.RU
 
Аватар для CERGEI1982
 
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
CERGEI1982 на пути к лучшему
По умолчанию Re: Изучение PIC C Compiler(CCS C)

Пальцем в небо
__________________
Глаза боятся,а руки делают.
CERGEI1982 вне форума  
Сказали "Спасибо" CERGEI1982
pasipaka (14.07.2011)
Непрочитано 12.07.2011, 10:05  
MisterDi
Почётный гражданин KAZUS.RU
 
Аватар для MisterDi
 
Регистрация: 13.02.2008
Адрес: Днепр. Украина
Сообщений: 3,294
Сказал спасибо: 442
Сказали Спасибо 1,048 раз(а) в 706 сообщении(ях)
MisterDi на пути к лучшему
По умолчанию Re: Изучение PIC C Compiler(CCS C)

Цитата:
Но зачем тут сдвиг, да еще вправо???!!
Из-за того, что SIO - не самый младший бит. Поэтому его и сдвигают вправо.
Я бы сделал так:
Код:
{
temp‹‹=1;
if (SIO) (temp|=1); 
sendClock();
}
при этом код будет работать при любом положении бита SIO на выводах порта
__________________
misterdi<@>i.ua

Последний раз редактировалось MisterDi; 12.07.2011 в 10:12.
MisterDi вне форума  
Непрочитано 12.07.2011, 11:43  
pasipaka
Прописка
 
Регистрация: 21.03.2011
Сообщений: 107
Сказал спасибо: 15
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
pasipaka на пути к лучшему
По умолчанию Re: Изучение PIC C Compiler(CCS C)

Сообщение от MisterDi Посмотреть сообщение
Из-за того, что SIO - не самый младший бит. Поэтому его и сдвигают вправо.
Я бы сделал так:
Код:
{
temp‹‹=1;
if (SIO) (temp|=1); 
sendClock();
}
при этом код будет работать при любом положении бита SIO на выводах порта
Спасибо.

Тогда вопрос по доступе к портам:

Если RB1=1, то значение PORTBbits.RB1 будет не 1, а 2 (0b10)?????
И различие между переменной PORTBbits.RB1 и PORB только в том, что ,может, PORTBbits.RB1=PORB&0b00000010 ? Так?

Я думал, что если RB1=1, то значение PORTBbits.RB1=1. Т.е. вроде как PORTBbits.RB1=PORB&0b00000010››1.
Нет?
pasipaka вне форума  
Непрочитано 12.07.2011, 12:47  
MisterDi
Почётный гражданин KAZUS.RU
 
Аватар для MisterDi
 
Регистрация: 13.02.2008
Адрес: Днепр. Украина
Сообщений: 3,294
Сказал спасибо: 442
Сказали Спасибо 1,048 раз(а) в 706 сообщении(ях)
MisterDi на пути к лучшему
По умолчанию Re: Изучение PIC C Compiler(CCS C)

Цитата:
Я думал, что если RB1=1, то значение PORTBbits.RB1=1. Т.е. вроде как PORTBbits.RB1=PORB&0b00000010››1.
Для работы с битами в CCS есть специальные функции, которые компилируются очень компактно. ИМХО лучше смотреть в их сторону. Правда тогда теряется совместимость с другими компиляторами
__________________
misterdi<@>i.ua
MisterDi вне форума  
Непрочитано 12.07.2011, 13:23  
pasipaka
Прописка
 
Регистрация: 21.03.2011
Сообщений: 107
Сказал спасибо: 15
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
pasipaka на пути к лучшему
По умолчанию Re: Изучение PIC C Compiler(CCS C)

Я в свое время ушел с CCS на С18. Потому ниче сказать не могу... А все-таки верны ли мои суждения по работе с портом?
Можно воспринять как есть, а я хочу и причину понять
pasipaka вне форума  
Непрочитано 14.07.2011, 14:16  
MisterDi
Почётный гражданин KAZUS.RU
 
Аватар для MisterDi
 
Регистрация: 13.02.2008
Адрес: Днепр. Украина
Сообщений: 3,294
Сказал спасибо: 442
Сказали Спасибо 1,048 раз(а) в 706 сообщении(ях)
MisterDi на пути к лучшему
По умолчанию Re: Изучение PIC C Compiler(CCS C)

Цитата:
А все-таки верны ли мои суждения по работе с портом?
Не знаю, нужно смотреть реализацию в откомпилированном коде.
__________________
misterdi<@>i.ua
MisterDi вне форума  
Непрочитано 14.07.2011, 16:57  
pasipaka
Прописка
 
Регистрация: 21.03.2011
Сообщений: 107
Сказал спасибо: 15
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
pasipaka на пути к лучшему
По умолчанию Re: Изучение PIC C Compiler(CCS C)

Компилер все красиво собрал, пример:
temp=PORTDbits.RD2;
13EA 5083 MOVF 0xf83, W, ACCESS
13EC 0B04 ANDLW 0x4 //выделяем 2ой бит
13EE E001 BZ 0x13f2
13F0 0E01 MOVLW 0x1 // если он 1, то в аккум 1
13F2 0100 MOVLB 0 // если 0, то 0 и запись в переменную
13F4 6FA6 MOVWF 0xa6, BANKED // запись в переменную

Так что пример в книге с ашипкой. И доп. сдвиг вправо ни к чему хорошему, окромя бреду не преведет.
Рассуждения по работе с портом - верны.

Последний раз редактировалось pasipaka; 14.07.2011 в 17:01.
pasipaka вне форума  
 

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

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
i2c+ccs pic Gladkih Микроконтроллеры, АЦП, память и т.д 9 18.04.2016 22:17
PIC BASIC PRO Compiler 2.47 dosikus Proteus, KiCAD и другие ECAD 27 05.12.2009 05:48
изучение IAR AVR C compiler granel Микроконтроллеры, АЦП, память и т.д 0 10.10.2008 20:45
PIC C Compiler PCWH458 sergxxx Микроконтроллеры, АЦП, память и т.д 9 23.09.2008 18:25
Не включается дебаггер в CCS C Compiler BigMazzi Микроконтроллеры, АЦП, память и т.д 4 19.09.2008 13:34


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


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