Покритикуйте код

Обсуждение софта. Установка, настройка, новинки. В общем все, что связано с софтом.
Ответить
hjv
Сообщения: 302
Зарегистрирован: Ср мар 04, 2015 10:41 pm

Покритикуйте код

Сообщение hjv »

Закончил почти девайс, генератор 70Hz синус, меандр 140 и 210Hz (Не спрашивайте зачем, просто ТЗ такое).
Кароч, по ТЗ нуна фазу 2Fo и 3Fo двигать по периоду синуса. Бонусы к ТЗ: сохранение параметров в EEPROM.

Код: Выделить всё

//После первого запуска сохрани начальные параметры! Баг (перескок фазы)
//программа генератора синуса 70Hz и 2-й и 3-й гармоник (с ручным изменением фазы 2-й и 3-й гармоники)
//Последнее обновление 9.06.15
//МК PIC16F877A
//Кварц 20MHz
//PORTB выход синуса, RD0 вторая гармоника, RD1 третья
//PORTA клавиатура, RA0, RA1 -/+ подстройка фазы 2-й гармоники,  RA2, RA3 -/+ подстройка фазы 3-й гармоники
// RA1+RA2  Запись параметров в EEPROM

#include "pic.h"

#define A0 RE0
#define RW RE1
#define E RE2
 
__CONFIG(WDTDIS &HS &UNPROTECT &DEBUGDIS &PWRTDIS &LVPDIS);
 
 unsigned char shft1;
 unsigned char shft2;
 unsigned char tmp;
  unsigned char shft1_t;
  unsigned char shft2_t;
  unsigned char c;
  unsigned char sin_pos;
  unsigned char sin_pos_0;
 const unsigned char s[252] = {127, 130, 133, 136, 140, 143, 146, 149, 152, 155, 158, 161, 164, 167, 170, 173, 176, 179, 182, 185, 188, 190, 193, 196, 199, 201, 204, 206, 209, 211, 213, 216, 218, 220, 222, 224, 226, 228, 230, 232, 234, 235, 237, 239, 240, 241, 243, 244, 245, 246, 247, 248, 249, 250, 251, 251, 252, 253, 253, 253, 254, 254, 254, 254, 254, 254, 254, 253, 253, 253, 252, 252, 251, 250, 249, 248, 247, 246, 245, 244, 243, 241, 240, 239, 237, 235, 234, 232, 230, 228, 226, 224, 222, 220, 218, 216, 213, 211, 209, 206, 204, 201, 199, 196, 193, 191, 188, 185, 182, 179, 176, 174, 171, 168, 165, 162, 159, 155, 152, 149, 146, 143, 140, 137, 134, 130, 127, 124, 121, 118, 115, 111, 108, 105, 102, 99, 96, 93, 90, 87, 84, 81, 78, 75, 72, 69, 66, 64, 61, 58, 56, 53, 51, 48, 46, 43, 41, 39, 36, 34, 32, 30, 28, 26, 24, 22, 20, 19, 17, 16, 14, 13, 11, 10, 9, 8, 7, 6, 5, 4, 3, 3, 2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 17, 18, 20, 22, 24, 26, 27, 29, 32, 34, 36, 38, 40, 43, 45, 48, 50, 53, 55, 58, 60, 63, 66, 69, 72, 74, 77, 80, 83, 86, 89, 92, 95, 98, 101, 105, 108, 111, 114, 117, 120, 123};
//период синуса 252 отсчета
 
 unsigned char stroka1[16]={'2', 'F', ' ',  'P', 'h', 'a', 's', 'e', ' ', 'a', 'd', 'j', '.', ' ', '0', '0' };
                                         
 unsigned char stroka2[16]={'3', 'F', ' ',  'P', 'h', 'a', 's', 'e', ' ', 'a', 'd', 'j', '.', ' ', '0', '0' };
//---------------------------------------------------------------------------------------
void DelayMs(unsigned int dl);
void Init_LCD();
void Send_Command(unsigned char command);
void Send_Data(unsigned char data);
void Display_Data();
void Harm_gen (unsigned char d);
void Key_proc(unsigned char key_prc);
//---------------------------------------------------------------------------------------
void DelayMs(unsigned int dl)
{unsigned int d_a;
 for(d_a=0;d_a<=dl*3;d_a++) asm("NOP");
}
//---------------------------------------------------------------------------------------
void Init_LCD()
{DelayMs(90);
 Send_Command(0b00110000);
 Send_Command(0b00110000);
 Send_Command(0b00110000);
 Send_Command(0b00111000);
 Send_Command(0b00001000);
 Send_Command(0b00000001);
 Send_Command(0b00000110);
 }
//---------------------------------------------------------------------------------------
void Send_Command(unsigned char command)
{E=1;
 A0=0;
 RW=0;
 PORTC=command;
 E=0;
 DelayMs(20);
}
//---------------------------------------------------------------------------------------
void Send_Data(unsigned char data)
{E=1;
 A0=1;
 RW=0;
 PORTC=data;
 E=0;
 DelayMs(20);
}
//------------------Выводим на экран-----------------------------------------------
void Display_Data()
{  unsigned char i;
   Send_Command(0b00001100); // курсор в начало первой строки
   for(i=0; i<=15; i++)
    {    
      Send_Command(0x80+i);
      Send_Data(stroka1[i]); 
    } 
    
    for(i=0; i<=15; i++)
    { 
      Send_Command(0x80+0x40+i);
      Send_Data(stroka2[i]); 
    }   
}
//--------------------Генерим остальные сигналы-------------------------------
void Harm_gen (unsigned char d)
{ unsigned char kp;
   
   if (d==0+shft1 || d==63+shft1 || d==126+shft1 || d==189+shft1)RD0=!RD0;
   if (d==0+shft2 || d==42+shft2 || d==84+shft2 || d==126+shft2 || d==168+shft2 || d==210+shft2)RD1=!RD1;
   for(c=0; c<=22; c++);//Грубая подстройка частоты
   c=c+1; c=c+1;c=c+1; c=c+1; sin_pos_0=0;//Точная подстройка частоты
  if(PORTA!=0b001111)
  {DelayMs(3000);
    kp=PORTA;
    while(PORTA!=0b001111);
    Key_proc(kp);
  }
}
//---------------------------------------------------------------------------------------
void Key_proc(unsigned char key_prc)
{   switch (key_prc){
    case 0b1110 : {
                           if(shft1>0) shft1--;
                          } 
                           break; 
    case 0b1101 : {
                           if(shft1<62) shft1++;
                          } 
                           break;
    case 0b1011 : {
                           if(shft2>0) shft2--;
                          } 
                           break;
    case 0b0111 : {
                           if(shft2<41) shft2++;
                          } 
                           break;
     case 0b1001 : {
                               {EEPROM_WRITE( 0x01 , shft1); 
                                EEPROM_WRITE( 0x02 , shft2);
                                EEPROM_WRITE( 0x03 , RD0);
                                EEPROM_WRITE( 0x04 , RD1);
                                EEPROM_WRITE( 0x05 , sin_pos);
                                stroka1[14]='O'; stroka1[15]='K';
                                stroka2[14]='O'; stroka2[15]='K';
                                Display_Data();
                                DelayMs(10000);
                                DelayMs(10000);
                                }
                          } 
                           break;
  default: {}
      break;
   }
   
 shft1_t=shft1;
 for(c=15;c>=14;c--)
    {tmp=shft1_t%10;
     stroka1[c]=tmp+0x30;
     shft1_t=shft1_t/10;
     }
 shft2_t=shft2;
 for(c=15;c>=14;c--)
    {tmp=shft2_t%10;
     stroka2[c]=tmp+0x30;
     shft2_t=shft2_t/10;
    } 
 Display_Data();
 while(PORTA!=0b001111);
}
//--------------------------------------------------- MAIN ---------------------------
void main(void)
{TRISB=0x00;
 TRISA=0b001111;
 TRISC=0x00;
 TRISD=0x00;
 TRISE=0x00;
 PORTA=0;
 ADCON1=0x06;
GIE=0;
shft1=eeprom_read(0x01);
if (shft1>62) {EEPROM_WRITE( 0x01 , 0); EEPROM_WRITE( 0x02 , 0); EEPROM_WRITE( 0x03 , 1); EEPROM_WRITE( 0x04 , 1); EEPROM_WRITE( 0x05 , 0);}//по умолчанию 0xFF
shft1=EEPROM_READ( 0x01);
shft2=EEPROM_READ( 0x02 );
RD0=EEPROM_READ( 0x03);
RD1=EEPROM_READ( 0x04);
sin_pos_0=EEPROM_READ( 0x05 );// начальная позиция синусоиды
shft1_t=shft1;
  for(c=15;c>=14;c--)
       {tmp=shft1_t%10;
         stroka1[c]=tmp+0x30;
	shft1_t=shft1_t/10;
        }
shft2_t=shft2;
  for(c=15;c>=14;c--)
       {tmp=shft2_t%10;
         stroka2[c]=tmp+0x30;
	shft2_t=shft2_t/10;
        }
Init_LCD();
Display_Data();
for(;;)
  {
//----------------------------------------------------------------------------------------  
for(sin_pos=sin_pos_0; sin_pos<=251; sin_pos++) 
    {PORTB=s[sin_pos];     
     Harm_gen (sin_pos);
    }
//----------------------------------------------------------------------------------------    
  }
}
R2D2 это не робот, а цепь из схем журнала "Радио" :mrgreen:

Аватара пользователя
bellouz
Сообщения: 480
Зарегистрирован: Сб сен 15, 2012 7:54 pm

Re: Покритикуйте код

Сообщение bellouz »

Аргументированно, или можно просто сказать "Хуйня какаята"? :mrgreen:
"Ты должен сделать добро из зла, потому что его больше не из чего сделать..." Роберт Пенн Уоррен.

hjv
Сообщения: 302
Зарегистрирован: Ср мар 04, 2015 10:41 pm

Re: Покритикуйте код

Сообщение hjv »

Можно и так, но хотелось бы с комментариями :mrgreen:
R2D2 это не робот, а цепь из схем журнала "Радио" :mrgreen:

Аватара пользователя
lis
Сообщения: 419
Зарегистрирован: Пт авг 31, 2012 10:46 pm

Re: Покритикуйте код

Сообщение lis »

Не читал но осуждаю, судя по комментам, дерьмо!!

Шутка.
Первое что бросилось в глаза это делэи, да ещё по 3000.

DelayMs(10000);
DelayMs(10000);
DelayMs(3000);
У вас как будто мощей дофига. Берём и стопорим проц, пусть нопы посчитает.
Фу таким быть.

Ёлки палки, если нужно подождать 10 секунд, отмеряем их по таймеру, а проц пусть занимается другими делами, а не нопы считает. Если уж совсем не нужен, лучше в режим энергосбережения угнать

hjv
Сообщения: 302
Зарегистрирован: Ср мар 04, 2015 10:41 pm

Re: Покритикуйте код

Сообщение hjv »

lis писал(а):Не читал но осуждаю, судя по комментам, дерьмо!!

Шутка.
Первое что бросилось в глаза это делэи, да ещё по 3000.

DelayMs(10000);
DelayMs(10000);
DelayMs(3000);
У вас как будто мощей дофига. Берём и стопорим проц, пусть нопы посчитает.
Фу таким быть.

Ёлки палки, если нужно подождать 10 секунд, отмеряем их по таймеру, а проц пусть занимается другими делами, а не нопы считает. Если уж совсем не нужен, лучше в режим энергосбережения угнать
1000х2 эт штоб юзверь увидел факт сэйва
Чёт я опьянел, в какой сторочке 3к?
R2D2 это не робот, а цепь из схем журнала "Радио" :mrgreen:

hjv
Сообщения: 302
Зарегистрирован: Ср мар 04, 2015 10:41 pm

Re: Покритикуйте код

Сообщение hjv »

А, эт пестня))) Нужно отловить нажатие двух клавиш)))
R2D2 это не робот, а цепь из схем журнала "Радио" :mrgreen:

Ответить