реклама на сайте
подробности

 
 
> Запись в EEPROM, не работает пример из даташита
smk
сообщение Jan 11 2008, 18:06
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



ATtiny24

Имеется код:
void EEPROM_write(unsigned char Address, unsigned char Data)
{
while (EECR & (1<<EEPE));
EECR = (0<<EEPM1) | (0>>EEPM0)
->EEARH=0b00000000;
EEARL= Address;
EEDR = Data;
EECR |= (1<<EEMPE);
EECR |= (1<<EEPE);
}

Имеется сообщение об ошибке:
../1.c: In function 'EEPROM_write':
../1.c:23: error: called object '0' is not a function

стрелочка там где в студии указатель на строку стоит. если строчку закомментировать, то указатель покажет на ту что под ней, ошибка та же.

Пример 'один в один'. Написано в WinAVR 2007, симулятор AVR Studio 4.13

Помогите разобраться в чем причина? Заранее благодарен!

Кстати нижеприведенный код проблем не вызывает:
unsigned char EEPROM_read (unsigned char Address)
{
while (EECR & (1<<EEPE));
EEARL= Address;
EECR |= (1<<EERE);
return EEDR;
}

Сообщение отредактировал smk - Jan 11 2008, 18:18


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
smk
сообщение Jan 12 2008, 08:23
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Цитата
1. Даже если переменная i глобальная, то обнулена она будет только при первом проходе.

да, она глобальная. пользую везде где нужен счетчик.

Цитата
2. i бесконтрольно и независимо увеличивается во внутреннем цикле. Чем ограничено количество внутренних циклов? 1 - 100 - миллион? Что будет с i при, например, 256 циклах - Вам ведомо?

Программа жздет появление флага переполнения таймера,
while(TIFR1 & (1<<TOV1))
выполняет предустановку
{
выполняет предустановку
TCNT1H = 0xF8;
TCNT1L = 0x5F;
наращивает счетчик
i++;
делает что-то полезное
PORTA^=0b00000100;
сбрасывает флаг
TIFR1 |= (1<<TOV1);
}
и так до очередного выброса флага...

когда i=240 - программа выходит из внешнего цикла. прерывания не использовал т.к. нет нужды делать чего-то во время ожидания.
Цитата
запустить режим сброса таймера по сравнению (CTC mode)

так и есть, режим СТС.

ну мне так видится, а как бы вы написали? я учусь и мне юудет интересно посмотреть на иные решения. Заранее спасибо.

Цитата
4. Остальное выглядит еще хуже

все может быть... а как правильнее?

Цитата
3. Вы хоть сами сможете словами обьяснить для чего пляски с бубном вокруг i ?

попробую... суть в том, что мне нужно отмерять промежутки времени, кратные 1 с, сигнализируя об их течении мигающим светодиодом или выполняя какие-либо действия в иные промежутки:
промежуток 1 - действие 1;
промежуток 2 - действие 2;
.
.
.
промежуток N - действие N.


а так лучше?

while((TIFR1 & (1<<TOV1))&(i<240))
{
TCNT1H = 0xF8;
TCNT1L = 0x5F;
i++;
PORTA^=0b00000100;
TIFR1 |= (1<<TOV1);
}

Сообщение отредактировал smk - Jan 12 2008, 07:52


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- smk   Запись в EEPROM   Jan 11 2008, 18:06
- - Сергей Борщ   Цитата(smk @ Jan 11 2008, 20:06) если стр...   Jan 11 2008, 18:20
- - smk   ЦитатаВы забыли точку с запятой в конце предыдущей...   Jan 11 2008, 18:25
- - smk   Теперь другая непонятная штука. Не выполняется опе...   Jan 11 2008, 20:48
|- - Stanislav   Цитата(smk @ Jan 11 2008, 23:48) Теперь д...   Jan 11 2008, 21:29
|- - Gogan   Цитата(smk @ Jan 11 2008, 22:48) while(TI...   Jan 12 2008, 06:06
- - smk   Цитатачему равно начальное значение i ? равно 0. ...   Jan 11 2008, 21:34
|- - Stanislav   Цитата(smk @ Jan 12 2008, 00:34) равно 0....   Jan 11 2008, 21:46
|- - zltigo   Цитата(smk @ Jan 11 2008, 23:34) применил...   Jan 11 2008, 22:07
|- - Gogan   Цитата(smk @ Jan 12 2008, 10:23) а так лу...   Jan 12 2008, 09:58
|- - Сергей Борщ   Цитата(smk @ Jan 12 2008, 10:23) да, она ...   Jan 12 2008, 10:13
- - zltigo   Это BLINKS раз моргнет светодиодиком используя опр...   Jan 12 2008, 10:42
- - smk   ЦитатаЗадача, например, - выкопать канаву Задача д...   Jan 12 2008, 14:26
|- - zltigo   Цитата(smk @ Jan 12 2008, 16:26) Задача ....   Jan 12 2008, 15:14
- - smk   Строчка: for( uint_least8_t i = (BLINKS)<<1...   Jan 12 2008, 15:44
|- - zltigo   Цитата(smk @ Jan 12 2008, 17:44) ../1.c:1...   Jan 12 2008, 15:58
- - smk   ЦитатаПереключите компилятор в режим следования св...   Jan 12 2008, 17:21
|- - zltigo   Цитата(smk @ Jan 12 2008, 18:57) но не да...   Jan 12 2008, 17:23
- - smk   попробовал - решение действительно хорошее и код с...   Jan 12 2008, 18:21
|- - zltigo   Цитата(smk @ Jan 12 2008, 20:21) А чем i ...   Jan 12 2008, 18:25
- - smk   ЦитатаBLINKS это осмысленное количество морганий С...   Jan 12 2008, 18:56


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 10:52
Рейтинг@Mail.ru


Страница сгенерированна за 0.01395 секунд с 7
ELECTRONIX ©2004-2016