sphincs писал(а):подозреваю, что протеус может просто плохо дружить с прерываниями от таймеров
Могу сказать что отлично дружит.
sphincs писал(а):подозреваю, что протеус может просто плохо дружить с прерываниями от таймеров
Код: Выделить всё
void DigitalV(unsigned char y, unsigned int x, unsigned char z, unsigned char m){ //y number to digitalize x-reference
unsigned char point=3;
unsigned long number;
unsigned int last=0;
unsigned char sut=0, zeci=0;
if (y==0){last=0;}else{
number=y;
number=((number*x*100)/255)/m;
/*Final_nr<100*/ if ((number<10000)&(number>999)) {last=number/10;point = 1;}
/*Final_nr <10*/ else if (number<1000) {last=number;point = 0;}
else {last=number/100;}
}
while(last>99)
{
sut++;last=last-100;
}
while(last>9)
{
zeci++;last=last-10;
}
MENU_Data[z][0]=dig[sut];
MENU_Data[z][1]=dig[zeci];
MENU_Data[z][2]=dig[last];
if (point<3) {MENU_Data[z][point]=(MENU_Data[z][point]) | (0b00000001);}
}sphincs писал(а):да нет, просто осваиваю AVR на примере игрушки для себя. подозреваю, что протеус может просто плохо дружить с прерываниями от таймеров, не имел с ними дел еще.
Код: Выделить всё
#asm("cli"); // Запретили прерывания
TCCR2=0x01;
time1=0;
//#asm("sei"); // Забыли разрешить прерыванияamd9800 писал(а):Хочу оптимизировать данную функцию на скорость.
Pink-Pank писал(а):3) В функции if (PINC.2==1) //СБРОСКод: Выделить всё
#asm("cli"); // Запретили прерывания
TCCR2=0x01;
time1=0;
//#asm("sei"); // Забыли разрешить прерывания
Pink-Pank писал(а):5) переменная mode у Вас принимает значения 0..2. можно выделить для нее тип данных char
Pink-Pank писал(а):6) Не работают остальные кнопки у Вас потому, что в начале идет кусок кода, который заключен в бесконечный цикл while(1). Оператора выхода из цикла (break) я у Вас там что-то не увидел. Т.е. все банально просто - у Вас молотит все время первый кусок, а до остальных дело не доходит.
Дальше не смотрел.
Pink-Pank писал(а):amd9800 писал(а):Хочу оптимизировать данную функцию на скорость.
Тогда изучайте Ассемблер.
amd9800 писал(а):Я смотрю на то чтоб программировать в С с ассемблерными вставками.
amd9800 писал(а):А можно компилятору задать какие регистры резервировать?
Таким образом буду резервировать, а потом использовать в асемблере.
ARV писал(а):в AVR-GCC можно
опция компилятора -ffixed-x: в этой опции вместо х должен быть указан номер резервируемого регистра. например, если надо зарезервировать R6, то следует указать при компиляции опцию -ffixed-6. если резервируются несколько регистров, на каждый должна быть своя опция.Pink-Pank писал(а):О, а как?
КРАМ писал(а):специальный источник опоры с малым падением и понизить AVcc до 4,096 вольт.