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

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

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

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

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

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

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 01.05.2008, 17:15  
Kanava
Прописка
 
Регистрация: 11.09.2007
Сообщений: 104
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Kanava на пути к лучшему
По умолчанию Господа в чем ошибка

Работаю с СOM портом и не могу выловить ошибку в тексте программы. Отсылаю на ком порт с компа такую строку "V_56+" Получаю ответ

"Пришел символ V,3 Пришел символ _,4 Пришел символ 1,1 Пришел символ +,1 "

index равнялся трем потому что при прошивки на Компорт приходят какие то символы.

Код:
 volatile   char rx_buffer[64];
int t0;     

 
volatile  int rx_wr_index,index1,index2;
volatile  char n[1];   //2я перемнная 
volatile unsigned int flag1=0;
volatile unsigned int flag2=0;

volatile unsigned char tick,pwm0,pwm1,pwm2,pwm3;

 






// USART Прерывание когда пришел символ с компа
interrupt [USART_RXC] void usart_rx_isr(void)
{  
char data; 

#asm("cli"); 
data=UDR;      

   
   
rx_wr_index++;     



if (data!='+') {rx_buffer[rx_wr_index]=data; } else {  rx_wr_index=rx_wr_index--; flag2=1; index2=rx_wr_index; };

if (data=='V'||data=='R'||data=='O'||data=='T'||data=  ='M'||data=='U') {flag1=1; index1=rx_wr_index; };

printf(" Пришел символ  %c,%d ",data,rx_wr_index); 


#asm("sei");  
}
    
....
   //Главная процедура

void main(void)
{  



int i,param;
 char *per,*b;

 ....
#asm("sei")  


while (1)
      {      
   

                                   
if (flag1==1&&flag2==1)
    { 
                       
                        #asm("cli");    
                                            
     
                   for(i = index1, n[0] = NULL; rx_buffer[i]; ++i) {  
                                                                     if (rx_buffer[i] == '_') { 
                                                                                                                                                                                                     
                                                                             n[0] = rx_buffer[i+1];
                                                                            n[1]= rx_buffer[i+2];
                                                                            
                                                                            break;
                                                                                                    };
                                                                                };


    

     
     param=(int)n;
        printf("Provertka  %c,%d ",rx_buffer[index1], param);
                 
      switch (rx_buffer[index1]) {
                     // ШИМ   V  - вентилятор на выдув, R - раздув, O - Вентилятор на охлож. пельтье, P - регулировка мощьности Пельтье
               
                  case 'V' : /*pwm0=(param/100)*256; */  rx_wr_index=0;  printf(" Успешно запущен ШИМ %c ",rx_buffer[index1]); flag1=0; flag2=0;     #asm("sei"); break;
                 
                  case 'R' : pwm1=(param/100)*256;  rx_wr_index=0;   #asm("sei");  break;
                  case 'O' : pwm2=(param/100)*256;  rx_wr_index=0;   #asm("sei"); break;
                  case 'P' : pwm3=(param/100)*256;  rx_wr_index=0;   #asm("sei"); break;                   
                  case 'T' : temp();  rx_wr_index=0;  printf(" ТЕМПЕРАТУРА %i ",param);   #asm("sei");  break;  // получить показания 4х датчиков
                  case 'M' : polyar(param);  rx_wr_index=0;   #asm("sei"); break;   //  изменение  полярности  пельтье 
                  case 'U' : TEM(param);  rx_wr_index=0;   #asm("sei"); break;  // включение выключение ТЭМ  
                   default :  printf (" Фигня  пришла ");  rx_wr_index=0; flag1=0; flag2=0;   #asm("sei"); break;
                               }; 
       
      } ;

//#asm("sei");
                        
    } ;             
      
   
}
Реклама:
Kanava вне форума  
Непрочитано 02.05.2008, 08:05  
Kanava
Прописка
 
Регистрация: 11.09.2007
Сообщений: 104
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Kanava на пути к лучшему
По умолчанию

Ну что все уже С забыли что ли?
Kanava вне форума  
Непрочитано 02.05.2008, 10:03  
urry1
Временная регистрация
 
Регистрация: 11.12.2007
Сообщений: 79
Сказал спасибо: 0
Сказали Спасибо 1 раз в 1 сообщении
urry1 на пути к лучшему
По умолчанию

Для начала - уберите printf из прерывания, моветон.Эти манипуляции в прерывании с флагом - ни вреда, ни пользы.
urry1 вне форума  
Непрочитано 03.05.2008, 19:26  
Kanava
Прописка
 
Регистрация: 11.09.2007
Сообщений: 104
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Kanava на пути к лучшему
По умолчанию

Сообщение от urry1
Для начала - уберите printf из прерывания, моветон.Эти манипуляции в прерывании с флагом - ни вреда, ни пользы.
эТо чтоб искать Ошибки при получение символов. Flag1 и 2 сигнализирует что в буфере есть команда и надо её выполнять .

if (flag1==1&&flag2==1) - после получение строки и выставление флагов . Должен выполнятся условный оператор. А он не выполняется
Kanava вне форума  
Непрочитано 04.05.2008, 14:38  
Kanava
Прописка
 
Регистрация: 11.09.2007
Сообщений: 104
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Kanava на пути к лучшему
По умолчанию

Ребят помогите . Уже 4 дня не могу нормально прогу сделать .
Kanava вне форума  
Непрочитано 04.05.2008, 15:20  
Churchill
Прописка
 
Регистрация: 23.03.2008
Сообщений: 121
Сказал спасибо: 4
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
Churchill на пути к лучшему
По умолчанию

Надеюсь, скорости, формат кадра настроены правильно и частота кварца соответствует установкам проекта? Именно так, или вроде как должно быть так???? По своему опыту скажу, что с кодевиженом и уартом проблем не было - была один раз, пришлось убрать прерывание по окончанию передачи. И все. Терминалка может глючная? Кабель нормальный? И поубирай из прерываний весь лишний код. Оставь тока тот, что генерится кодевиженом. Остальное анализируй в основном цикле программы
Churchill вне форума  
Непрочитано 04.05.2008, 15:21  
Churchill
Прописка
 
Регистрация: 23.03.2008
Сообщений: 121
Сказал спасибо: 4
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
Churchill на пути к лучшему
По умолчанию

в догонку - попробуй просто сделать эхо, мож символы на физическом уровне бьются
Churchill вне форума  
 

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

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Решено] С Днём РАДИО, господа хорошие! kard Отвлекитесь, эмбеддеры! 55 08.05.2015 22:46
Подскажите в чем ошибка - PIC12 sergxxx Микроконтроллеры, АЦП, память и т.д 0 11.06.2008 18:35
Стыдно, господа! Ky_Shweitzer Микроконтроллеры, АЦП, память и т.д 12 18.12.2006 19:12
Господа! Подскажите какую выбрать flash fan Микроконтроллеры, АЦП, память и т.д 7 08.07.2003 21:39


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


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