21.04.2012, 09:05
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.05.2003
Адрес: Москва
Сообщений: 2,531
Сказал спасибо: 737
Сказали Спасибо 1,927 раз(а) в 799 сообщении(ях)
|
Re: Изучение PIC C Compiler(CCS C)
Что-то я торможу...
Программный UART. В цикле опрос. Первый пришедший символ теряется
Цитата:
|
while(true)
{
if(fgetc(portOut))
{
for(i = 0; i ‹ 10; i++)
aOUT[i] = fgetc(portOut);
...
...
}
...
...
...
}
|
Как его не потерять? К сожалению, протокол "с той стороны" не изменишь. Использовать железный порт МК и прерывание RDA тоже не получится (там свой порт висит).
__________________
Опыт - это школа, в которой человек узнает, каким дураком он был раньше.
|
|
|
|
21.04.2012, 10:13
|
|
Частый гость
Регистрация: 26.06.2006
Сообщений: 31
Сказал спасибо: 30
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
|
Re: Изучение PIC C Compiler(CCS C)
Сообщение от DK
|
Использовать железный порт МК и прерывание RDA тоже не получится (там свой порт висит).
|
Как вариант взять пик с двумя усартами на борту.
|
|
|
|
21.04.2012, 10:15
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.05.2005
Адрес: Саратов.ru
Сообщений: 1,548
Сказал спасибо: 384
Сказали Спасибо 737 раз(а) в 417 сообщении(ях)
|
Re: Изучение PIC C Compiler(CCS C)
Как-то так
Код:
|
while(true)
{
if((aOUT[0] = fgetc(portOut)) != EOF)
{
for(i = 1; i ‹ 10; i++)
aOUT[i] = fgetc(portOut);
...
...
}
...
...
...
} |
или через дополнительную переменную, если нельзя массив портить
Код:
|
char v;
...
while(true)
{
if((v = fgetc(portOut)) != EOF)
{
aOUT[0] = v;
for(i = 1; i ‹ 10; i++)
aOUT[i] = fgetc(portOut);
...
...
}
...
...
...
} |
|
|
|
|
21.04.2012, 13:48
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.05.2003
Адрес: Москва
Сообщений: 2,531
Сказал спасибо: 737
Сказали Спасибо 1,927 раз(а) в 799 сообщении(ях)
|
Re: Изучение PIC C Compiler(CCS C)
Сообщение от AJScorp
|
Как-то так
|
Не хотит... Нету тут EOF - просто прилетает 10 байт. Причем, любых. Могут и все нули быть.
__________________
Опыт - это школа, в которой человек узнает, каким дураком он был раньше.
|
|
|
|
21.04.2012, 14:01
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.05.2005
Адрес: Саратов.ru
Сообщений: 1,548
Сказал спасибо: 384
Сказали Спасибо 737 раз(а) в 417 сообщении(ях)
|
Re: Изучение PIC C Compiler(CCS C)
Сообщение от DK
|
Не хотит... Нету тут EOF
|
Тогда ой! Я думал, Вы стандартную функцию используете.
Первый символ у Вас теряется вот тут if(fgetc(portOut)).
Сообщение от DK
|
Могут и все нули быть
|
Тогда вышеуказанное условие не сработает.
З.Ы. Если fgetc Вашей реализации, тогда описание в студию.
Последний раз редактировалось AJScorp; 21.04.2012 в 14:04.
|
|
|
|
21.04.2012, 16:44
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.05.2003
Адрес: Москва
Сообщений: 2,531
Сказал спасибо: 737
Сказали Спасибо 1,927 раз(а) в 799 сообщении(ях)
|
Re: Изучение PIC C Compiler(CCS C)
Да знаю я где теряется Просто раньше обходил посылкой какого-либо символа вперед. А тут не получится.
Стандартную. Реализация не моя. Родная от CCS. Посмотрел в STDIO - там тоже определения нет.
__________________
Опыт - это школа, в которой человек узнает, каким дураком он был раньше.
|
|
|
|
21.04.2012, 17:06
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: Изучение PIC C Compiler(CCS C)
DK,
Цитата:
|
kbhit( )
--------------------------------------------------------------------------------
Syntax:
value = kbhit()
value = kbhit (stream)
Parameters:
stream is the stream id assigned to an available RS232 port. If the stream parameter is not included, the function uses the primary stream used by getc().
Returns:
0 (or FALSE) if getc() will need to wait for a character to come in, 1 (or TRUE) if a character is ready for getc()
Function:
If the RS232 is under software control this function returns TRUE if the start bit of a character is being sent on the RS232 RCV pin. If the RS232 is hardware this function returns TRUE if a character has been received and is waiting in the hardware buffer for getc() to read. This function may be used to poll for data without stopping and waiting for the data to appear. Note that in the case of software RS232 this function should be called at least 10 times the bit rate to ensure incoming data is not lost.
|
__________________
Осторожно , злой кот
Последний раз редактировалось dosikus; 21.04.2012 в 17:11.
|
|
|
Сказали "Спасибо" dosikus
|
|
|
21.04.2012, 18:44
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.05.2005
Адрес: Саратов.ru
Сообщений: 1,548
Сказал спасибо: 384
Сказали Спасибо 737 раз(а) в 417 сообщении(ях)
|
Re: Изучение PIC C Compiler(CCS C)
Сообщение от DK
|
Стандартную. Реализация не моя. Родная от CCS.
|
Значит придется накатать свою функцию, которая будет возвращать ошибки другим образом, + kbhit, как посоветовал dosikus.
|
|
|
Сказали "Спасибо" AJScorp
|
|
|
22.04.2012, 16:17
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.05.2003
Адрес: Москва
Сообщений: 2,531
Сказал спасибо: 737
Сказали Спасибо 1,927 раз(а) в 799 сообщении(ях)
|
Re: Изучение PIC C Compiler(CCS C)
dosikus, AJScorp, все заработало!
Цитата:
|
if(kbhit(portOut))
{
tmp = 0;
for(i = 0; i ‹ 10; i++)
{
aOUT[i] = fgetc(portOut);
tmp += aOUT[i];
}
|
Вот так получилось.
Вот еще вопрос: можно ли отключить и включить собаку по ходу программы? Как я понял, в ПИК18 можно. А от в ПИК16?
__________________
Опыт - это школа, в которой человек узнает, каким дураком он был раньше.
|
|
|
|
22.04.2012, 16:29
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: Изучение PIC C Compiler(CCS C)
Сообщение от DK
|
А от в ПИК16?
|
Ручками ... Надо на конкретный чип читать даташит.
В 16F887 WDTCON SWDTEN - при условии , что в конфиге он вырублен !
DK, не советую встроенными функциями увлекаться .
Всегда полезней написать свою , анализируя полученный асм встроенной.
__________________
Осторожно , злой кот
Последний раз редактировалось dosikus; 22.04.2012 в 16:42.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 13:23.
|
|