ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
26 ноября
68699 Топик полностью
GM (13.09.2006 02:14, просмотров: 1) ответил GM на Мне тоже. У меня код формирования шим законченный, а вот у вас незаконченный. Где вход в прерывание, выход...вообще, дайте комментарии, мне например непонятно, как оно работает.
Вот накатал предварительный вариант формирования рабочей таблицы Сильно не бейте, написал за 15 минут и колотил 10(:-), так что мог чёнить существенное упустить.
char number=24;
char time[24],channel[24];
char pwmtable[4,24];
char pattern[3,24]=
                   {
                    0b00000001,0b00000000,0b00000000,
                    0b00000010,0b00000000,0b00000000,
                    0b00000100,0b00000000,0b00000000,
                    0b00001000,0b00000000,0b00000000,
                    0b00010000,0b00000000,0b00000000,
                    0b00100000,0b00000000,0b00000000,
                    0b01000000,0b00000000,0b00000000,
                    0b10000000,0b00000001,0b00000000,
                    0b00000000,0b00000010,0b00000001,
                    0b00000000,0b00000100,0b00000000,
                    0b00000000,0b00001000,0b00000000,
                    0b00000000,0b00010000,0b00000000,
                    0b00000000,0b00100000,0b00000000,
                    0b00000000,0b01000000,0b00000000,
                    0b00000000,0b10000000,0b00000000,
                    0b00000000,0b00000000,0b00000001,
                    0b00000000,0b00000000,0b00000010,
                    0b00000000,0b00000000,0b00000100,
                    0b00000000,0b00000000,0b00001000,
                    0b00000000,0b00000000,0b00010000,
                    0b00000000,0b00000000,0b00100000,
                    0b00000000,0b00000000,0b01000000,
                    0b00000000,0b00000000,0b10000000
                   }

//Упорядочение входных уставок по времени
for(i=0;i<number;i++)
{
 k=i;
 for(j=i+1;j<number;j++)
 {
  if(time[i]>time[j] k=j;
 }
 if(k!=i)
 {
  a=time[i];
  time[i]=time[j];
  time[j]=a;
  a=channel[i];
  channel[i]=channel[j];
  channel[j]=a;
 }
}

//Формирование рабочей таблицы очередного шим
pwmtable[0,0]=time[0];
pwmtable[1,0]=pattern[1,channel[0]];
pwmtable[2,0]=pattern[2,channel[0]];
pwmtable[3,0]=pattern[3,channel[0]];
k=0;
for(i=0;i<number;i++)
{
 if(pwmtable[0,k]!=time[i]) k++;
 pwmtable[0,k]=time[i];
 pwmtable[1,k]|=pattern[1,channel[i];
 pwmtable[2,k]|=pattern[2,channel[i];
 pwmtable[3,k]|=pattern[3,channel[i];
}

Для входных уставок
time[24]=   {50,51,52,53,100,100,100,100,100,..};
channel[24]={ 0, 2, 3, 6,  7,  1,  4,  5,  8,..};

должна быть получена следующая рабочая таблица pwmtable
x  [0,x]   [1,x]    [2,x]    [3,x]   
0    50   00000001 00000000 000000000
1    51   00000101 00000000 000000000
2    52   00001101 00000000 000000000
3    53   01001101 00000000 000000000
4   100   11111101 11111111 111111111
Было бы интересно узнать сколько тактов требуется на сях.