Пн июн 12, 2017 05:57:26
Пн июн 12, 2017 08:23:28
Ср авг 16, 2017 09:32:29
Ср авг 16, 2017 09:46:08
Ср авг 16, 2017 09:50:09
Ср авг 16, 2017 19:58:05
Чт авг 17, 2017 15:12:23
Внутрисистемно программируемая флэш-память программ ATmega128 содержит 128 кбайт
внутренней внутрисистемно перепрограммируемой флэш-памяти для хранения программы.
Поскольку все AVR-инструкции являются 16 или 32-разр., то флэш-память организована как 64
кбайт х 16. Для программной защиты флэш-память программ разделена на два сектора: сектор
программы начальной загрузки и сектор прикладной программы.
Регистр RAMPZ обычно используется для указания той страницы ОЗУ размером 64 кбайт, к
которой выполняется доступ через Z-указатель. Т.к. ATmega128 не поддерживает память на
статическом ОЗУ размером свыше 64 кбайт, то данный регистр используется только для выбора
страницы памяти программ, доступ к которой осуществляется с помощью инструкций ELPM/SPM.
Различные установки бита RAMPZ0 имеют следующий результат:
RAMPZ0 =0:
Инструкции ELPM/SPM осуществляют доступ к памяти программ в диапазоне адресов
$0000 - $7FFF (младшие 64 кбайт)
RAMPZ0 =1:
Инструкции ELPM/SPM выполняют доступ к памяти программ в диапазоне адресов
$8000 - $FFFF (старшие 64 кбайт)
Обратите внимание, что действие инструкции LPM не зависит от установки RAMPZ.
Чт авг 17, 2017 16:08:49
Пт авг 18, 2017 08:47:03
Пт авг 18, 2017 09:01:34
Вс окт 08, 2017 12:27:54
Вс окт 08, 2017 12:39:43
Вс окт 08, 2017 18:26:05
// Начало списка станций
RadioDef(10050," Тенгри FM ");
RadioDef(10120,"Радио Текс ");
....
RadioDef(10770," Дала FM ");
// Конец списка станций
Пн окт 09, 2017 07:03:29
Пн окт 09, 2017 15:49:23
#define PORT_VID PORTD
#define DDR_VID DDRD
#define VID_PIN 7
char *u;
#define COLUMN(r) transver(font[r][fontline]); // 5.6875us
void transver ( char a) {
//Для 8-и бит. //5.6875us
if (a & 0b00000001) { PORT_VID.VID_PIN = 1;} else { PORT_VID.VID_PIN = 0;}
if (a & 0b00000010) { PORT_VID.VID_PIN = 1;} else { PORT_VID.VID_PIN = 0;}
if (a & 0b00000100) { PORT_VID.VID_PIN = 1;} else { PORT_VID.VID_PIN = 0;}
if (a & 0b00001000) { PORT_VID.VID_PIN = 1;} else { PORT_VID.VID_PIN = 0;}
if (a & 0b00010000) { PORT_VID.VID_PIN = 1;} else { PORT_VID.VID_PIN = 0;}
if (a & 0b00100000) { PORT_VID.VID_PIN = 1;} else { PORT_VID.VID_PIN = 0;}
if (a & 0b01000000) { PORT_VID.VID_PIN = 1;} else { PORT_VID.VID_PIN = 0;}
if (a & 0b10000000) { PORT_VID.VID_PIN = 1;} else { PORT_VID.VID_PIN = 0;}
}
}
Вызов через указатель
COLUMN(*u++);
COLUMN(*u++);
//#define COLUMN(r) transver_3(font[r][fontline]); // 11.187us
//#define COLUMN(r) transver_2(®1,font[r][fontline]); // 26.562us
//#define COLUMN(r) transver_4(font[r][fontline]); // 41.125us
//#define COLUMN(r) transver_5(font[r][fontline]); // 10.938us
//#define COLUMN(r) transver_6(font[r][fontline]); // 6.1875us
void transver_3 ( char a) {
//Для 8-и бит. // 11.187us
char i;
for(i=0; i<8; i++)
{
if(a & 1) //выводим данные
PORT_VID.VID_PIN = 1;
else
PORT_VID.VID_PIN = 0;
a >>= 1;
}
}
typedef struct ShiftReg_t
{
char *port;
char data_pin;
}ShiftReg;
ShiftReg reg1 = {&PORT_VID, 1<<VID_PIN};
void transver_2 (ShiftReg *reg, char value) {
char i; // 26.562us
for(i=0; i<8; i++)
{
if(value & 1) //выводим данные
*reg->port |= reg->data_pin;
else
*reg->port &= ~reg->data_pin;
value >>= 1;
}
}
void transver_4 ( char a) {
//Для 8-и бит. // 41.125us
char i=0;
do
{
PORT_VID.VID_PIN = ((a & (1 << i)) >> i)&0x01; //побитно на PB7
i++;
} while (i<8);
}
void transver_5 ( char a) {
//Для 8-и бит. // 10.938us
char i=0;
do
{
PORT_VID.VID_PIN = a & 0x01; //побитно на PB7
a >>= 1;
i++;
} while (i<8);
}
void transver_6 ( char a) {
//Для 8-и бит. //6.1875us
PORT_VID.VID_PIN = a & 0x01; //побитно на PB7
PORT_VID.VID_PIN = a & 0b00000010; //побитно на PB7
PORT_VID.VID_PIN = a & 0b00000100; //побитно на PB7
PORT_VID.VID_PIN = a & 0b00001000; //побитно на PB7
PORT_VID.VID_PIN = a & 0b00010000; //побитно на PB7
PORT_VID.VID_PIN = a & 0b00100000; //побитно на PB7
PORT_VID.VID_PIN = a & 0b01000000; //побитно на PB7
PORT_VID.VID_PIN = a & 0b10000000; //побитно на PB7
}
Пн окт 09, 2017 16:37:51
Пн окт 09, 2017 17:01:04
Пн окт 09, 2017 17:01:46
Пн окт 09, 2017 17:23:17
#define COLUMN(r) SPDR=font[r][fontline]; //1.5625us SPSR = (1<<SPI2X);
Пн окт 09, 2017 17:28:41
PORT_VID.VID_PIN = a!=0; // Или PORT_VID.VID_PIN = a;