maybik писал(а):
вопросы по 3.0 
вопрос 1 обязательно ставить мах232? я собираюсь настраивать с ноута серез адаптер на pl2303, там по идее тоже самое. 
вопрос 2 тачмемори  мне не нужен, можно просто убрать из схемы или надо править прошивку? 
вопрос 3
Код:
                                    
                                 case 0x00://"выключить" игрока 
                                 {
                                    
                                    
                                    break;}
как описать команду выключить игрока? я так полагаю достаточно жизни свести на ноль? как сделать ссылку на  момент потери жизни? объяснил как смог  

2. можете убрать из схемы.
3. С ходу не отвечу.
В общем...
В функции 
Код:
void hit_processing(trx_packet hit_packet)
Есть процедура обработки состояния, когда игрок вырублен.
Код:
life = 0;
         life_in_percent=0;
         WOUND_LED_ON;
         display_life(life);//îòîáðàçèì óðîâåíü æèçíè íà äèîäàõ
         display_life_update();//îòîáðàçèì óðîâåíü æèçíè íà ÆÊÈ
         volatile uint8_t keypress_cntr; //ñ÷åò÷èê öèêëîâ, â òå÷åíèè êîòîðûõ êóðîê áûë íàæàò
         keypress_cntr = 0;
         
         while (eeprom_is_open);//äîæäåìñÿ, ïîêà eerom çàêðîåòñÿ
         playgameoversound();
         if ((eeprom_read_byte(&eeprom_tm_serial_num.device_code)!=0)&&(eeprom_read_byte(&eeprom_tm_serial_num.device_code)!=0xFF))
                              /*åñëè ÒÌ êëþ÷ óæå çàíåñ¸í â ïàìÿòü*/
         {
            joystick_event=no_pressing;
            keyboard_event=no_key_pressing;
            tm_event=no_tm_event;
            uint8_t tm_valide;
            tm_valide=0;
            lcd_bl_off();
                                 
                                 
            while (!tm_valide)
            {//[while]
               lcd_clrscr();
               lcd_home();
               lcd_puts("Äëÿ àêòèâàöèè");
               lcd_gotoxy(0, 1);
               lcd_puts("ïðèëîæèòå êëþ÷");
               while (tm_event == no_tm_event)
               {
                  WOUND_LED_INVERT;
                  USART_PutChar('1');
                  timer2 = 0;
                  while (timer2 < 1000);
                  WOUND_LED_INVERT;
                  timer2 = 0;
                  while (timer2 < 1000);   
                                    
               };
               switch(tm_event)
               {//[switch]
                  case no_tm_event: 
                  {                                 
                  }
                  break;
               
                  case tm_crc_error: 
                  {
                     lcd_clrscr();
                     lcd_home();
                     lcd_puts("Îøèáêà CRC");
                     timer2 = 0;
                     while (timer2 < 6000){};
                     tm_event=no_tm_event;
                  }
                  break;
                  case tm_crc_ok: 
                  {
                     if (tm_verification())    
                     {    tm_valide=1;
                        lcd_clrscr();
                        lcd_home();
                        lcd_puts("Óäà÷è!");
                        timer2 = 0;
                        while (timer2 < 6000){};
                        tm_event=no_tm_event;
                        break;
                     }   
                     lcd_clrscr();
                     lcd_home();
                     lcd_puts("Íå òîò êëþ÷");
                     timer2 = 0;
                     while (timer2 < 6000){};
                     /*
                     lcd_clrscr();
                     lcd_home();
                     lcd_puts("Äëÿ àêòèâàöèè");
                     lcd_gotoxy(0, 1);
                     lcd_puts("ïðèëîæè êëþ÷");
                     */
                     tm_event=no_tm_event;
                                          
                                                      
                  }
                  break;
            
               }//[/switch]
            }//[while]
                              
         }//end if
                           
         else //òà÷ ìåìîðè íå çàïèñàí â ïàìÿòü
         {//[else]                      
            lcd_bl_off();
            display_status();
            rx_event = rx_event = NOT_EVENT;
            ir_message.control_byte = 0;
            while(!(((ir_message.control_byte ==Valid_value)&&(ir_message.ID==Command)&&(ir_message.param==0x05))||(joystick_event == key_central_pressing)))//ïîêà íå ïîëó÷èì êîìàíäó "ñòàðò"
            {//[while]
               rx_event = NOT_EVENT;
               while((rxCount==0)&&(rx_event != RX_MESSAGE_COMPLITE)&&(joystick_event == no_pressing))//ïîêà íåò íèêàêèõ êîìàíä ïóëüòà
               {//[while]
                  WOUND_LED_INVERT;
                  USART_PutChar('1');
                  timer2 = 0;
                  while (timer2 < 1000);
                  WOUND_LED_INVERT;
                  timer2 = 0;
                  while (timer2 < 1000);
               }//[while]
               
               if(joystick_event!=key_central_pressing)joystick_event = no_key_pressing;
               if (rx_event == RX_MESSAGE_COMPLITE) ir_message = get_ir_message_from_buffer();//ïðèøëà êîìàíäà ïóëüòà, âûäåðãèâàåì çíà÷åíèÿ êîìàíäû èç áóôåðà ÈÊ ïðèåìíèêà   
               else //[else]
               {                     
                  if (rxCount>0) finde_message_in_bt_buffer();                     
               }//[else]                                 
            }//[while]
            /*
            while(keypress_cntr < 20)
            {
               WOUND_LED_INVERT;
               USART_PutChar('1');
               timer2 = 0;
               while (timer2 < 1000);
               WOUND_LED_INVERT;
               timer2 = 0;
               while (timer2 < 1000);
               switch (FIRE_KEY_IN&FIRE_KEY_PIN) //ïðîâåðÿåì, íàæàò ëè êóðîê
               {
                  case 0:  keypress_cntr++ ; break;
                  case FIRE_KEY_PIN: keypress_cntr = 0; break;
                  default: keypress_cntr = 0;   
               }
                  
            }
            */
         }   //end else //òà÷ ìåìîðè íå çàïèñàí â ïàìÿòü
         //"îæèâàåì" - íà÷èíàåì íîâóþ èãðó                     
         if (simples_in_queue>1) //åñëè çâóê âûñòðëà âîñïðîèçâîäèòñÿ
         {//[if]
            simples_in_queue=1;//çàêðîåì eeprom
            while (eeprom_is_open);//äîæäåìñÿ, ïîêà eerom çàêðîåòñÿ
         }//[if]
         init_var(); //èíèöèàëèçèðóåì ïåðåìåííûå
         joystick_event=no_pressing; //î÷èùàåì ñîáûòèÿ äæîéñòèêà
         keyboard_event=no_key_pressing;//î÷èùàåì ñîáûòèÿ òðèããåðà
         reload_key_event=no_key_pressing;//î÷èùàåì ñîáûòèÿ ïåðåçàðÿäêè
         rx_event = NOT_EVENT;   //î÷èùàåì ñîáûòèÿ ÈÊ ïðèåìíèêà
         display_status();//îáíîâëÿåì èíôîðìàöèþ íà äèñïëåå
         //         display_life(life);//îòîáðàçèì óðîâåíü æèçíè íà äèîäàõ
         WOUND_LED_ON;
         playstartsound();
         //êîä îáðàáîòêè äîïîëíèòåëüíîé êîìàíäû
            WOUND_LED_OFF;
         /*   
         WOUND_LED_OFF;
         init_var();//"îæèâàåì" - íà÷èíàåì íîâóþ èãðó
         joystick_event=no_pressing;
         keyboard_event=no_key_pressing;
         tm_event=no_tm_event;
         */
         //   display_status();
      }//[else]
                        
////      display_life(life);//îòîáðàçèì óðîâåíü æèçíè íà äèîäàõ
//                        display_life_update();//îòîáðàçèì óðîâåíü æèçíè íà ÆÊÈ
////      lcd_bl_off();
////      display_status();
         status_need_update = true;
   }//[if]
Она такая страшная, потому что тач Мемори тут ещё учитывается, можно выкинуть, станет проще.
По уму её надо вытащить в отдельную функцию и использовать и при обработке команды 0x00
Тут выход из состояния по нажатию центральной кнопки джойстика, либо колючем Тач Мемори, либо командой с пульта 0x05.