Например TDA7294

Форум РадиоКот • Просмотр темы - Помогите написать код на АСМЕ.
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Вт авг 05, 2025 00:54:02

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Форум закрыт Эта тема закрыта, Вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 19 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Помогите написать код на АСМЕ.
СообщениеДобавлено: Пн мар 23, 2009 16:51:41 
Встал на лапы
Аватар пользователя

Зарегистрирован: Сб ноя 29, 2008 19:34:25
Сообщений: 99
Откуда: Нальчик
Рейтинг сообщения: 0
Кто силён в асме ? Помогите написать код,чтобы переменная или просто бит записывался каждый раз в следующую ячейку памяти EEPROM.А когда память заполнится что бы она стиралась и всё начиналось заново.
Я в асме вообще ничего не понимаю,а на си это не сделаешь!


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Пн мар 23, 2009 17:17:19 
Сверлит текстолит когтями
Аватар пользователя

Зарегистрирован: Вт июл 08, 2008 12:24:17
Сообщений: 1148
Рейтинг сообщения: 0
Какой контроллер-то?


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Пн мар 23, 2009 18:00:27 
Встал на лапы
Аватар пользователя

Зарегистрирован: Сб ноя 29, 2008 19:34:25
Сообщений: 99
Откуда: Нальчик
Рейтинг сообщения: 0
Yellow Tiger писал(а):
Какой контроллер-то?

Attiny 2313


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Пн мар 23, 2009 18:58:42 
Мучитель микросхем
Аватар пользователя

Зарегистрирован: Вс янв 07, 2007 01:45:48
Сообщений: 491
Откуда: Российская Федерация, будь она неладна...
Рейтинг сообщения: 0
Код:
WriteToEEPROM:
 inc r16;адрес EEP++
 ldi r18, 0x80;r18=EEPEND+1
 cpse r16, r18;если адрес EEP = EEPEND+1 то очищаем адрес и  переходим к записи
 rjmp write
 clr r16
write:         
 sbic EECR, EEWE ;ждём готовности EEPROM
 rjmp write   
 out EEARL, r16;EEARL(Регистр адреса EEPROM) = адрес EEP
 out EEDR, r17 ; EEDR(Регистр данных EEPROM) = r17
 ldi tmp,(1<<EEMWE) ;Разрешаем запись бла, бла, бла...
 out EECR, tmp
 ldi tmp, (1<<EEWE)|(1<<EEMWE)
 out EECR, tmp
 ret

_________________
Научить нельзя, можно научиться. Пифагор.
Вставь недостающие буквы в слово *у*ня. Если у тебя получилось слово кухня, значит ты интеллигентный человек.


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Пн мар 23, 2009 19:13:13 
Встал на лапы
Аватар пользователя

Зарегистрирован: Сб ноя 29, 2008 19:34:25
Сообщений: 99
Откуда: Нальчик
Рейтинг сообщения: 0
Pooher писал(а):
Код:
WriteToEEPROM:
 inc r16;адрес EEP++
 ldi r18, 0x80;r18=EEPEND+1
 cpse r16, r18;если адрес EEP = EEPEND+1 то очищаем адрес и  переходим к записи
 rjmp write
 clr r16
write:         
 sbic EECR, EEWE ;ждём готовности EEPROM
 rjmp write   
 out EEARL, r16;EEARL(Регистр адреса EEPROM) = адрес EEP
 out EEDR, r17 ; EEDR(Регистр данных EEPROM) = r17
 ldi tmp,(1<<EEMWE) ;Разрешаем запись бла, бла, бла...
 out EECR, tmp
 ldi tmp, (1<<EEWE)|(1<<EEMWE)
 out EECR, tmp
 ret


Спасибо за код!
В моём устройстве (противоугонка) при правильном наборе кода записывается переменная (в ЕЕПРОМ) и если произойдёт перезагрузка устройства то программа начинает работать с нужного места,а не начинает заново.
У важаемый Pooher подскажите как применить ваш код к моей программе на си?


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Пн мар 23, 2009 20:10:10 
Нашел транзистор. Понюхал.
Аватар пользователя

Зарегистрирован: Вт ноя 04, 2008 11:15:49
Сообщений: 179
Откуда: Санкт-Петербург
Рейтинг сообщения: 0
А зачем писать не критичный к скорости код на асме, чтобы потом использовать в Сшной программе? =)


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Пн мар 23, 2009 20:13:00 
Встал на лапы
Аватар пользователя

Зарегистрирован: Сб ноя 29, 2008 19:34:25
Сообщений: 99
Откуда: Нальчик
Рейтинг сообщения: 0
bsyomov писал(а):
А зачем писать не критичный к скорости код на асме, чтобы потом использовать в Сшной программе? =)


Если знаете как написать это на си - напишите пожалуйста буду очень признателен!


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Пн мар 23, 2009 21:22:25 
Мучитель микросхем
Аватар пользователя

Зарегистрирован: Вс янв 07, 2007 01:45:48
Сообщений: 491
Откуда: Российская Федерация, будь она неладна...
Рейтинг сообщения: 0
Цитата:
В моём устройстве (противоугонка) при правильном наборе кода записывается переменная (в ЕЕПРОМ) и если произойдёт перезагрузка устройства то программа начинает работать с нужного места,а не начинает заново.
Для таких целей код нужен другой...

_________________
Научить нельзя, можно научиться. Пифагор.
Вставь недостающие буквы в слово *у*ня. Если у тебя получилось слово кухня, значит ты интеллигентный человек.


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Пн мар 23, 2009 21:26:55 
Встал на лапы
Аватар пользователя

Зарегистрирован: Сб ноя 29, 2008 19:34:25
Сообщений: 99
Откуда: Нальчик
Рейтинг сообщения: 0
Pooher писал(а):
Для таких целей код нужен другой...


Подскажите какой,и как его применить?


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Пн мар 23, 2009 21:36:09 
Мучитель микросхем
Аватар пользователя

Зарегистрирован: Вс янв 07, 2007 01:45:48
Сообщений: 491
Откуда: Российская Федерация, будь она неладна...
Рейтинг сообщения: 0
Как я понимаю, Ваша программа должна после Reset считывать ячейку EEPROM, и по её содержимому определять с каково места ей работать?

_________________
Научить нельзя, можно научиться. Пифагор.
Вставь недостающие буквы в слово *у*ня. Если у тебя получилось слово кухня, значит ты интеллигентный человек.


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Пн мар 23, 2009 21:47:13 
Встал на лапы
Аватар пользователя

Зарегистрирован: Сб ноя 29, 2008 19:34:25
Сообщений: 99
Откуда: Нальчик
Рейтинг сообщения: 0
Pooher писал(а):
Как я понимаю, Ваша программа должна после Reset считывать ячейку EEPROM, и по её содержимому определять с каково места ей работать?


Совершенно верно!
Я собрал противоугонное устройство в нём всё работало как и было задуманно, но появился подводный камень- из за помех бортовой сети автомобиля стали происходить перезагрузки.И как результат- машина глохнет и начинает сигналить. Попытка бороться с помехами не чего не дала .Последний шанс наладить устройство это записывать состояние устройства в энергонезависимую память системы, но я боюсь что циклов гарантированной перезаписи будет маловато.И вот по этому мне надо использоать весь объём ЕЕПРОМ.


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Пн мар 23, 2009 22:10:06 
Мучитель микросхем
Аватар пользователя

Зарегистрирован: Вс янв 07, 2007 01:45:48
Сообщений: 491
Откуда: Российская Федерация, будь она неладна...
Рейтинг сообщения: 0
Тогда код подойдёт, с начала неправильно понял смысл задачи.
В начале (после ресет) можно такой код использовать.
Код:
ReadEEP:
clr r16 ;очищаем адрес
Read:
out EEARL, r16 ;загружаем
ldi r17, 1
out EECR, r17
in  r17, EEDR ;читаем
ldi r18, 0xFF   
cpse r17, r18 ;если что нибудь по этому адресу записано, переход
rjmp Lable
inc r16     ;если нет, адрес++, и снова читаем
rjmp Read

Lable:
;код определения места, куда программа перейдёт, или выставить флаг можно
ret

В Си я не силён, но по моему можно использовать ASM вставки.

_________________
Научить нельзя, можно научиться. Пифагор.
Вставь недостающие буквы в слово *у*ня. Если у тебя получилось слово кухня, значит ты интеллигентный человек.


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Пн мар 23, 2009 22:16:44 
Встал на лапы
Аватар пользователя

Зарегистрирован: Сб ноя 29, 2008 19:34:25
Сообщений: 99
Откуда: Нальчик
Рейтинг сообщения: 0
Pooher писал(а):

Lable:
;код определения места, куда программа перейдёт, или выставить флаг можно
ret
[/code]

А там можно вставить переменную "stat" что бы если там
0-иди туда-то;
1-иди туда-то;
или не переменную а просто бит
0-иди туда-то;
1-иди туда-то;
?????????????


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Пн мар 23, 2009 22:35:59 
Мучитель микросхем
Аватар пользователя

Зарегистрирован: Вс янв 07, 2007 01:45:48
Сообщений: 491
Откуда: Российская Федерация, будь она неладна...
Рейтинг сообщения: 0
Код:
Lable:
ldi tmp, xx
cpse r17, xx ; прочитанное из EEPROM = xx
ldi stat, 1     ; тогда пропускаем
ldi tmp, yy
cpse r17, yy  прочитанное из EEPROM = yy
ldi stat, 0     ; тогда пропускаем
ret

т.е. если прочитанное из EEPROM = xx, то если = yy stat=0
если = yy, то stat=1
В главном цикле:
Код:
main:
rcall ReadEEP
cpi stat, 1
breq stat1
cpi stat, 0
breq stat0
rjmp main

Или проще:
Код:
ReadEEP:
clr r16 ;очищаем адрес
Read:
out EEARL, r16 ;загружаем
ldi r17, 1
out EECR, r17
in  r17, EEDR ;читаем
ldi r18, 0xFF   
cpse r17, r18 ;если что нибудь по этому адресу записано, выход
ret
inc r16     ;если нет, адрес++, и снова читаем
rjmp Read
ret

main:
rcall ReadEEP
cpi r17, xx
breq stat1
cpi r17, yy
breq stat0
rjmp main

_________________
Научить нельзя, можно научиться. Пифагор.
Вставь недостающие буквы в слово *у*ня. Если у тебя получилось слово кухня, значит ты интеллигентный человек.


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Пн мар 23, 2009 22:54:10 
Встал на лапы
Аватар пользователя

Зарегистрирован: Сб ноя 29, 2008 19:34:25
Сообщений: 99
Откуда: Нальчик
Рейтинг сообщения: 0
Извините меня пожалуйста,но в этом коде я вообще ничего не могу понять!
Я разобрался как с помощью переменной из ЕЕПРОМ возвращаться в нужное место в программе . Я ни как не могу разобраться, как записывать в следующую ячейку ЕЕПРОМ.
У себя в программе я могу создать подпрограмму,для работы с ЕЕПРОМ. Мне нужно чтобы попав в эту подпрограмму (на АСМЕ) записывалась в следующую ячейку памяти переменная "stat" в которую я уже заранее (на Си) запишу значение 0 или 1 или 2 или 3.
Это возможно сделать? (извените за назойливость)


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Пн мар 23, 2009 23:16:01 
Мучитель микросхем
Аватар пользователя

Зарегистрирован: Вс янв 07, 2007 01:45:48
Сообщений: 491
Откуда: Российская Федерация, будь она неладна...
Рейтинг сообщения: 0
Этим и занимается код из моего первого поста:
Код:
WriteToEEPROM:
 inc r16;адрес EEP++
 ldi r18, 0x80;r18=EEPEND+1
 cpse r16, r18;если адрес EEP = EEPEND+1 то очищаем адрес и  переходим к записи
 rjmp write
 clr r16
write:         
 sbic EECR, EEWE ;ждём готовности EEPROM
 rjmp write   
 out EEARL, r16;EEARL(Регистр адреса EEPROM) = адрес EEP
 out EEDR, r17 ; EEDR(Регистр данных EEPROM) = r17
 ldi tmp,(1<<EEMWE) ;Разрешаем запись бла, бла, бла...
 out EECR, tmp
 ldi tmp, (1<<EEWE)|(1<<EEMWE)
 out EECR, tmp
 ret

r16 - счётчик. Он инкрементируется перед каждым циклом записи.
ЗЫ: Неужели Вам мало "100,000 Write/Erase Cycles"

_________________
Научить нельзя, можно научиться. Пифагор.
Вставь недостающие буквы в слово *у*ня. Если у тебя получилось слово кухня, значит ты интеллигентный человек.


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Пн мар 23, 2009 23:23:58 
Встал на лапы
Аватар пользователя

Зарегистрирован: Сб ноя 29, 2008 19:34:25
Сообщений: 99
Откуда: Нальчик
Рейтинг сообщения: 0
Pooher писал(а):
ЗЫ: Неужели Вам мало "100,000 Write/Erase Cycles"


Постановка на охрану-перезапись,
Снятие с охраны - перезапись,
Тревога - перезапись,
Режим VALET -перезапись.
Думаю что с такими запросами маловато будет!

А по поводу вашего кода ,как он узнает переменная "stat" какое число содержит? Где там её пририсовать?
(СПАСИБО!)


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Вт мар 24, 2009 02:35:46 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 21
Рейтинг сообщений: 143
Зарегистрирован: Сб фев 21, 2009 13:11:40
Сообщений: 1900
Откуда: Москва
Рейтинг сообщения: 0
100000 циклов перезаписи всего
пусть 5 циклов на это:
1)Постановка на охрану-перезапись,
2)Снятие с охраны - перезапись,
3)Тревога - перезапись,
4)Режим VALET -перезапись.
5)Че нить еще, перезапись

пусть 10 раз в день(!!!) все это повторяется по циклу

тогда в день 50 раз перезапись.

100000/50=2000 дней

ИТОГ около 5 лет и 6 месяцев.... за это время ваша система устареет, либо раньше откажет что то менее надежное в системе (электролитические кондеры, например... :? )


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Вт мар 24, 2009 11:27:17 
Мучитель микросхем
Аватар пользователя

Зарегистрирован: Вс янв 07, 2007 01:45:48
Сообщений: 491
Откуда: Российская Федерация, будь она неладна...
Рейтинг сообщения: 0
Цитата:
А по поводу вашего кода ,как он узнает переменная "stat" какое число содержит? Где там её пририсовать?

Какой именно код? Для чтения, или для записи?
Цитата:
Постановка на охрану-перезапись,
Снятие с охраны - перезапись,
Тревога - перезапись,
Режим VALET -перезапись.
Думаю что с такими запросами маловато будет!

Я бы в таком случае для каждого действия использовал свою ячейку.
Цитата:
100000/50=2000 дней

ИТОГ около 5 лет и 6 месяцев.... за это время ваша система устареет, либо раньше откажет что то менее надежное в системе (электролитические кондеры, например... Confused )

Согласен. Хватить должно "за глаза".

_________________
Научить нельзя, можно научиться. Пифагор.
Вставь недостающие буквы в слово *у*ня. Если у тебя получилось слово кухня, значит ты интеллигентный человек.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Форум закрыт Эта тема закрыта, Вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 19 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y