Люди, Будьте добры! Расскажите пожалуйста про инициализацию стека?
это выглядит примерно так:
Код:
ldi Temp, low(RAMEND) out SPL, Temp ; инициализируем указатель стэка
но будьте внимательны: если памяти в МК больше 256 байт - надо еще инициализировать и SPH! в обучалке, если я не ошибаюсь, об этом написано - прочтите.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
вопрос
хочу написать прогу на асме для меги64
в начале программы подставляю файл с описанием регистров
m64def.inc при ассеблирование у меня вылетает ошибка
на строчку где в файле описания регистров написано ATmega64
типа иллегал девайс пользуюсь виндосовским асмом для авр
допустим беру другой файл с описанием регистров для другого проца на типа 8515def.inc всё ок может асемблер неподдерживает работу с мегой
ну где эта строка? что за компилятор? какая у него версия? и т.п. подробности где?![/quote]
вот фрагмент файла m64def.inc
;*
;* in r16,PORTB ;read PORTB latch
;* sbr r16,(1<<PB6)+(1<<PB5) ;set PB6 and PB5 (use masks, not bit#)
;* out PORTB,r16 ;output to PORTB
;*
;* in r16,TIFR ;read the Timer Interrupt Flag Register
;* sbrc r16,TOV0 ;test the overflow flag (use bit#)
;* rjmp TOV0_is_set ;jump if set
;* ... ;otherwise do something else
;***************************************************************************
;**** Specify Device ****
.device ATmega64 РУГАЕТСЯ НА ЭТУ СТРОКУ
Всем привет!
И снова проблема! Хочу передать некое число по одному пину но получается огромный код! Скажите как его сделать компактней? И правильно ли я делаю?
Код:
ldi temp,0b00111010; передаем число 58 а принимаем 92 (перевёрнутое) ;*********************** ;передача по одному биту на pin0 порта В ldi temp1,0 out portb,temp1 rcall delay ldi temp1,1 out portb,temp1 rcall delay ldi temp1,0 out portb,temp1 rcall delay ldi temp1,1 out portb,temp1 rcall delay ldi temp1,1 out portb,temp1 rcall delay ldi temp1,1 out portb,temp1 rcall delay ldi temp1,0 out portb,temp1 rcall delay ldi temp1,0 out portb,temp1 rcall delay ;************************ ;задержка delay: ldi temp2,0 loop: dec temp2 brne loop
ldi temp3,0 loop1: dec temp3 brne loop1 ret ;***********************************
Спасибо!
_________________ Век живи! - Век учись!
ICQ-15B87330h
Здравствуйте! А не могли бы Вы рассказать подробно про такие команды как ROR и BRCC в обучалке про них ничего не сказано А у меня в книге написано так:
ROR - Rd(7)<C, Rd(n)<Rd(n+1),C<Rd(0)
BRCC - if(C=0)PC<PC+k+1
что совсем не понятно как оно устроено!
Спасибо!
_________________ Век живи! - Век учись!
ICQ-15B87330h
хочу подружить мегу64 и ммс карту 32метра (меньше не нашёл хотя устроила бы и 8метровая)
может у кого есть пример на асме т.к си пока не знаю
задача стоит такая на карте будут храниться граф образа в bin т.е мне не нужна файловая система флэшка будет использоваться как обычная мс памяти и ещё где можно найти схемку прогера чтобы прошить карту именно как мс памяти не кардридер
Это хорошо что работает ;) Правда сказать, не совсем понял, что и куда вы передаете таким образом. Ну да ладно, не это главное.
Артур писал(а):
Здравствуйте! А не могли бы Вы рассказать подробно про такие команды как ROR и BRCC в обучалке про них ничего не сказано А у меня в книге написано так:
ROR - Rd(7)<C, Rd(n)<Rd(n+1),C<Rd(0)
BRCC - if(C=0)PC<PC+k+1
что совсем не понятно как оно устроено! Спасибо!
ROL / ROR побитное вращение регистра через флаг переноса, соответственно влево/вправо.
Т.е. получается что мы выдвигаем один бит командой ROR во флаг переноса и взависимости от того, что окажется во флаге, делаем переход в нужное место. И так восемь раз.
BRCC - Branch if Carry Cleared (Переход если флаг переноса очищен).
Скажите пожалуйста а что нельзя чтоли просто скопировать бит одного РОН в Другой? ну например нулевой бит или третий? Спасибо!
просто взять и скопировать одной командой - нельзя.
для AVR придется делать примерно так:
1. Запомнить во флаге Т бит из исходного регистра командой BST 2. Сохранить состояние флага Т в нужном бите второго регистра командой BLD
или
1. Выделить командой ANDI значение бита в исходном регистре
2. Подавить командой ANDI значение бита в приемном регистре
2. Командой OR установить значение в приемном регистре
в первом случае "место" исходного бита и приемного может быть разным (т.е. берем 1-й бит и ставим его на место 5-го бита), во втором "место" будет одинаковым.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Спасибо!
Я так и думал что нельзя! Пробовал копировать в флаг Т, нокогда вынимаю из флага Т бит и вставляю в регистр PORTB0 компилятор VMLAB ругается я почему и спрашивал!
_________________ Век живи! - Век учись!
ICQ-15B87330h
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения