Код: Выделить всё
mov ADC0CF, #((SYSCLK / 7500) SHL 3)Надо будет её попробовать своему асеммблеру "скормить"...
P.S. Скормил.. он понял и посчитал правильно.. ура..
Код: Выделить всё
mov ADC0CF, #((SYSCLK / 7500) SHL 3)вас совсем не смущает тот факт, что в МК не существует никаких "накопителей" и мест хранения "файлов"? если не смущает, то все необходимые стандартные функции компилятор WinAVR отлично поддерживает. кроме этого существуют варианты "файловых систем" для МК - но это уже "нестандартные" решения.Hispanus писал(а):Можно ли силами компилятора для МК организовать открытие и чтение данных из внешнего файла, не загружая их в его память (функция fopen, fwrite в полноценных с-шных компиляторах)?
Код: Выделить всё
uint32_t data=(((file_1.buf[0])<<15)|((file_1.buf[1])<<7)|((file_1.buf[2])<<0));Код: Выделить всё
void delay_s(unsigned int delay)
{
for(int i=0; i<delay; i++){_delay_ms(1000);}
}
пойдет и такDX168B писал(а):И у меня вопрос.
Мне нужна задержка в секундах в AVR. Причём, функция должна принимать заначение не с константы, как в _delay_ms(); , а значение из переменной. (хранимая настройка в EEPROM, которую можно изменять в настройках будущего девайса)
Пойдёт ли такая конструкция?Код: Выделить всё
void delay_s(unsigned int delay)
{
for(int i=0; i<delay; i++){_delay_ms(1000);}
}
Или есть более рациональное решение? Высокая точность задержки не нужна.
Код: Выделить всё
void delay_s(unsigned int delay)
{
for(unsigned int i=0; i<delay; i++){_delay_ms(1000);}
}
Код: Выделить всё
void delay_s(unsigned int delay)
{
for(; delay; delay--){_delay_ms(1000);}
}
Код: Выделить всё
void delay_s(unsigned int delay)
{ while (delay--) _delay_ms(1000); } IfoR писал(а):Тогда уж так:Код: Выделить всё
void delay_s(unsigned int delay)
{ while (delay--) _delay_ms(1000); }
Код: Выделить всё
#define uchar unsigned char
static uchar newZ;
static uchar oldZ;
uchar encoder(void)
{
char out;
newZ = PINB && 0x03;
switch(oldZ)
{
case 0: if(newZ==1) out = RIGHT;
if(newZ==2) out = LEFT;
break;
case 1: if(newZ==3) out = RIGHT;
if(newZ==0) out = LEFT;
break;
case 2: if(newZ==0) out = RIGHT;
if(newZ==3) out = LEFT;
break;
case 3: if(newZ==2) out = RIGHT;
if(newZ==1) out = LEFT;
break;
}
oldZ=newZ;
return out;
}Код: Выделить всё
static uchar newZ;
static uchar oldZ;Код: Выделить всё
uchar newZ;
static uchar oldZ;romazan писал(а):Пртвет всем хвостатым.
IfoR писал(а):А переменная out чему будет равна, если ни одно из условий не выполнится?
Ну и если придираться, то я не понял смысл глобальных статических переменных (если они глобальны, то ведь по определению статичны).
Предлагаю этоКод: Выделить всё
static uchar newZ;
static uchar oldZ;
внести в начало функции, а ещё лучше:Код: Выделить всё
uchar newZ;
static uchar oldZ;
Код: Выделить всё
newZ = PINB && 0x03; Код: Выделить всё
newZ = PINB & 0x03; Код: Выделить всё
#define uchar unsigned char
uchar encoder(void)
{
const uchar greyRight[] = {1, 3, 0, 2};
static uchar oldZ;
uchar newZ = PINB & 0x03;
if (newZ == oldZ) return 0;
if (greyRight[oldZ] == (oldZ = newZ)) return RIGHT; else return LEFT;
} Код: Выделить всё
const uchar greyRight[] = {1, 3, 0, 2};