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

 
 
> USART - Прерывание раньше времени?
Anub
сообщение Aug 4 2008, 02:42
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 47
Регистрация: 26-05-08
Пользователь №: 37 825



Код
bit sf=0;

Код
interrupt [USART_RXC] void usart_rx_isr(void)
{
char status,data;
status=UCSRA;
data=UDR;
if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
   {
   rx_buffer[rx_wr_index]=data;
   if (++rx_wr_index == RX_BUFFER_SIZE) rx_wr_index=0;
   if (++rx_counter == RX_BUFFER_SIZE)
      {
      rx_counter=0;
      rx_buffer_overflow=1;
      };
   };
  sf=1;
}

Код
void check(void)
{  
     if (sf!=0)
       {
         char c;
         c=getchar();
           if (c!="")
               {
                 PORTA=0x07;
               } else {
                 PORTA=0x0B;
               }
         }
}

При запуске я получаю результат проверки условия в функции check, т. е. sf==1, и по идее было вызвано прерывание по приему символа, это как так, у меня нога RXD в воздухе весит...

Сообщение отредактировал Anub - Aug 4 2008, 02:42
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
haker_fox
сообщение Aug 4 2008, 03:20
Сообщение #2


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



Цитата(Anub @ Aug 4 2008, 11:42) *
При запуске я получаю результат проверки условия в функции check, т. е. sf==1, и по идее было вызвано прерывание по приему символа, это как так, у меня нога RXD в воздухе весит...

Вот и зря она в воздухе висит. Наводки на нее могу действовать.
Далее, в функции check неплохо бы обнулять флаг sf, если он был равен 1.

Символы заключается не в двойные кавычки, а в апострофы. Примерно так должна выглядеть Ваша функция.
Код
void check(void)
{  
     if (sf)
       {
                sf = 0;
         char c;
         c=getchar();
           if (c == '')
               {
                                PORTA=0x0B;
                
               } else {
                 PORTA=0x07;
               }
         }
}


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
defunct
сообщение Aug 4 2008, 10:37
Сообщение #3


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(haker_fox @ Aug 4 2008, 06:20) *
if (c == '')

такое не откомпилируется
"" -> '\0'
а '' - это что?

Не проще написать:
if (!c)
Go to the top of the page
 
+Quote Post
777777
сообщение Aug 4 2008, 11:34
Сообщение #4


Профессионал
*****

Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357



Цитата(defunct @ Aug 4 2008, 14:37) *
"" -> '\0'

Это не ноль, а адрес строки, содержащей ноль.
Цитата(defunct @ Aug 4 2008, 14:37) *
а '' - это что?

это ошибка
Цитата(defunct @ Aug 4 2008, 14:37) *
Не проще написать:
if (!c)

Проще. Но все-таки читабельнее
if (c != '\0')
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Anub   USART - Прерывание раньше времени?   Aug 4 2008, 02:42
|- - defunct   Цитата(777777 @ Aug 4 2008, 14:34) if (c ...   Aug 4 2008, 13:16
- - =GM=   Цитата(Anub @ Aug 4 2008, 01:42) При запу...   Aug 4 2008, 13:16
- - SysRq   Обьявить sf как volatile, RXD завести куда следует...   Aug 4 2008, 14:37
|- - =GM=   Цитата(SysRq @ Aug 4 2008, 13:37) Остальн...   Aug 4 2008, 15:14
- - SysRq   А std* это по-вашему что? Стандартная библиотека...   Aug 4 2008, 15:29
|- - =GM=   То есть, по-вашему, если функция находится в станд...   Aug 4 2008, 16:03
- - WHALE   Цитата(=GM= @ Aug 4 2008, 20:03) То есть,...   Aug 5 2008, 11:39
- - =GM=   Цитата(WHALE @ Aug 5 2008, 10:39) а getch...   Aug 5 2008, 11:53
- - SysRq   Цитата(=GM= @ Aug 5 2008, 15:53) Если бы ...   Aug 5 2008, 12:27
- - =GM=   Цитата(SysRq @ Aug 5 2008, 11:27) А он та...   Aug 5 2008, 12:33
- - SysRq   Цитата(=GM= @ Aug 5 2008, 16:33) Что, и о...   Aug 5 2008, 15:15
- - =GM=   Цитата(SysRq @ Aug 5 2008, 14:15) Нет, эт...   Aug 5 2008, 16:02
- - SysRq   Цитата(=GM= @ Aug 5 2008, 20:02) Ну как ж...   Aug 5 2008, 17:23
- - =GM=   Ну и кто тут флеймит? Модераторы, нельзя ли убрат...   Aug 5 2008, 19:28


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

 


RSS Текстовая версия Сейчас: 20th July 2025 - 08:43
Рейтинг@Mail.ru


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