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

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

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

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

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

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

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

 
Опции темы

Господа в чем ошибка

Непрочитано 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 22:39


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


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.