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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> трудности с ASM, помогите написать первую прошивку на асм
Costia
сообщение Jun 23 2008, 18:22
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 24
Регистрация: 23-06-08
Пользователь №: 38 507



Здравствуйте . Начел учить АСМ решил попрактиковатся и написать прошрамму мигания диодом .
пишу в AVR Studio . подскажите что я делаю не правельно желательно с правельными примерами 05.gif

первый попрос обезательно ли записывать в стек его вершину ? если обезательно то как это сделать ?







.include"m16def.inc"
.list

.def temp = r16
.def loop = r17

.cseg
.org 0




ldi temp, 0xFF
out DDRA, temp
ldi temp, 0
out PORTA,temp

ldi temp, 0x08
out ACSR, temp

main:
ldi r17, 255
rjmp zzz
ggg:
in r18, PORTA
sbrs r18, 7
rjmp zag
sbrc r18, 7
rjmp tyx
rjmp main



zzz:
dec r17
sbrs r17, 0
rjmp ggg
rjmp zzz

zag:
ldi r20, 255
out PORTA, r20
rjmp main

tyx:
ldi r20, 0
out PORTA, r20
rjmp main

Сообщение отредактировал Costia - Jun 23 2008, 18:47
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jun 23 2008, 19:09
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Во-первых, все же следует прописать область векторов прерываний, даже если они не используются. Пример есть в даташите на контроллер.

Во-вторых, стек действительно лучше инициализировать. Можно так:
Код
    ldi    temp, high(RAMEND)
    out    SPH, temp
    ldi    temp, low(RAMEND)
    out    SPL, temp


В-третьих, если это задержка -
Код
zzz:
dec r17
sbrs r17, 0
rjmp ggg
rjmp zzz

то вылетит из нее программа моментально: 255-1=254, bit0 = 0.

Даже если переписать ее правильно, то счетчик придется изрядно расширить для получения визуального эффекта.
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Jun 23 2008, 19:13
Сообщение #3


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Программы на asm я когда-то писал так....
(это пример для At90s4433 - у него однобайтный указатель стека...)
Код
.nolist
.include "4433def.inc"
.list                
.listmac

.def    A    =r19;general scratch space

; ===========================================
.cseg                     ;CODE segment
.org 0
    RJMP    RESET                ;1  Power-On Reset
    RETI                     ;2  Extrnal interrupt request 0
    RETI                     ;3  Extrnal interrupt request 1
    RETI                     ;4  Timer/Counter1 Capture Event
    RETI                     ;5  Timer/Counter1 Compare Match
    RETI                     ;6  Timer/Counter1 Overflow
    RETI                        ;7  Timer/Counter0 Overflow
    RETI                     ;8  Serial Transfer Complete
    RETI                     ;9  UART,Rx Complete
    RETI                     ;10 UART Data Register Empty
    RETI                     ;11 UART,Tx Complete
    RETI                          ;12 ADC Conversion Complete
    RETI                     ;13 EEPROM Ready
    RETI                     ;14 Analog Comparator

; ===========================================
RESET:
    clr     A                     ;
    out    SREG,A            ;
    ldi     A,low(RAMEND) ; stack init.
    out    SPL,A            ;
;  дальше ваша программа


Сообщение отредактировал demiurg_spb - Jun 23 2008, 19:16


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
Costia
сообщение Jun 23 2008, 19:28
Сообщение #4


Участник
*

Группа: Новичок
Сообщений: 24
Регистрация: 23-06-08
Пользователь №: 38 507



А если вот так его задерживать ? чистота 1мгц

zzz:
dec r17
brne ggg
rjmp zzz

3 команды следовательно 3 такта на цикл 760 тактов , 1 000 000 в секунду следовательно задержка меньше чем на 1 милисекунду лседовательно эфекта не будет ыыы следовательно добавим есче один регистр и получим 65 000 циклов , 195 000 тактов это почти 200 мс что уже видно ыыы
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Jun 23 2008, 19:41
Сообщение #5


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Ещё можно тело цикла наполнить медленными инструкциями:
Код
push r0; 2 такта
lpm; 3 такта
lpm; 3 такта
pop r0; 2 такта

= 10 тактов как с кустаsmile.gif

Но лучше всего научиться использовать таймер...

Сообщение отредактировал demiurg_spb - Jun 23 2008, 19:43


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jun 23 2008, 19:41
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Costia @ Jun 23 2008, 23:28) *
zzz:
dec r17
brne ggg
rjmp zzz

brne на breq замените только.

Цитата(Costia @ Jun 23 2008, 23:28) *
3 команды следовательно 3 такта на цикл 760 тактов ,

Не 3, а 4 (rjmp).
Go to the top of the page
 
+Quote Post
Costia
сообщение Jun 23 2008, 19:50
Сообщение #7


Участник
*

Группа: Новичок
Сообщений: 24
Регистрация: 23-06-08
Пользователь №: 38 507



xxx: dec r18

ldi r21, 0
sbrs r18 ,7
ldi r21, 255
sbrs r18 ,6
ldi r21, 255
sbrs r18 ,5
ldi r21, 255
sbrs r18 ,4
ldi r21, 255
sbrs r18 ,3
ldi r21, 255
sbrs r18 ,2
ldi r21, 255
sbrs r18 ,1
ldi r21, 255
sbrs r18 ,0
ldi r21, 255
sbrs r21,7
rjmp ggg

zzz: dec r17
ldi r21, 0
sbrs r17 ,7
ldi r21, 255
sbrs r17 ,6
ldi r21, 255
sbrs r17 ,5
ldi r21, 255
sbrs r17 ,4
ldi r21, 255
sbrs r17 ,3
ldi r21, 255
sbrs r17 ,2
ldi r21, 255
sbrs r17 ,1
ldi r21, 255
sbrs r17 ,0
ldi r21, 255
sbrs r21,7
rjmp xxx
rjmp zzz



вот это уже весело = )))

заработало !!!!!!
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jun 23 2008, 19:50
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Это сейчас весело. Потом будет грустно.

Лучше использовать вложенные циклы:

Код
    ldi     tmp0, 123
    clr     tmp1
l0:
    dec     tmp1
    brne    l0
    dec     tmp0
    brne    l0


или регистровую пару:

Код
    ldi     XL, low(DLY)
    ldi     XH, high(DLY)
l0:
    sbiw    XL, 1
    brne    l0
Go to the top of the page
 
+Quote Post
Costia
сообщение Jun 23 2008, 20:01
Сообщение #9


Участник
*

Группа: Новичок
Сообщений: 24
Регистрация: 23-06-08
Пользователь №: 38 507



"Во-первых, все же следует прописать область векторов прерываний, даже если они не используются. Пример есть в даташите на контроллер."

Подскажите пожалуйста как прописать область векторов прерывания ???
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jun 23 2008, 20:09
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Costia @ Jun 24 2008, 00:01) *
Подскажите пожалуйста как прописать область векторов прерывания ???

Дык написали уже. Найдите соответствующий раздел в даташите.
Go to the top of the page
 
+Quote Post
VDG
сообщение Jun 23 2008, 20:35
Сообщение #11


Знающий
****

Группа: Участник
Сообщений: 845
Регистрация: 10-02-06
Пользователь №: 14 193



Здравствуйте . НачеАл учить АСМ решил попрактиковатЬся и написать прошГрамму мигания диодом .
пишу в AVR Studio . подскажите, что я делаю не правеИльно, желательно с правеИльными примерами.

первый пВопрос - обеЯзательно ли записывать в стек его вершину ? если обеЯзательно, то как это сделать ?
===

эх не с того ты Костя начАл.

ответ - необязательно, если не пользуешься стеком.

Сообщение отредактировал zltigo - Jun 23 2008, 20:47


--------------------
Go to the top of the page
 
+Quote Post
Costia
сообщение Jun 23 2008, 22:00
Сообщение #12


Участник
*

Группа: Новичок
Сообщений: 24
Регистрация: 23-06-08
Пользователь №: 38 507



VDG я рад что ты знаеш как правельно пишутся слова жаль тока по ходу не знаеш что означает правельно . Значения слов субьективно и это факт . Это означает что с точки зрения логики нельзя сказать что значения слов которые написанны в словаре обьективно лучше или хуже моих значений . Тоже самое и с написаниям . Субьективные предстовления отдельно взятокого человека были обусловлены правельными с целью систематизации... Для меня слова это лиш носитель информации и в отдельно взятом случае искажения этого носителя от обусловленно правельного допустимо так ты понимаеш что я хотел сказать . А ты в следствии своих относительных приоретов пытаешся доказать себе что лучше чем я .
Удачи тебе конечно в этом = )))
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Jun 23 2008, 22:07
Сообщение #13


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



Цитата
эх не с того ты Костя начАл.

Даже с этого ему начинать рано.

Мистер Бин в фильме Бин (когда его задерживают в зоне прилета)
- Вы таблетки какие-нибудь принимаете?
- Неет.
- А не помешало бы.


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
defunct
сообщение Jun 23 2008, 22:35
Сообщение #14


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(Costia @ Jun 24 2008, 01:00) *
правельно....
следствии своих относительных приоретов пытаешся доказать себе

Да ничего он не пытается, просто слова типа "правЕльно" глаза режут также как:

"песьмо щастья из Ичкерии. Твая .... в маих руках". © какая-то рассылка

Грамматику можно сперва в Word'е проверить и потом постить.
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Jun 24 2008, 09:33
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Да мы не ограничиваем твою свободу самовыражения. Просто форум несколько не тот. Ты балуешься, а нам приходится сначала понять что именно ты имел сказать (учитывая сумбур в твоей голове), а потом и дать осмысленный ответ.

Тут ещё фишка такая (не в обиду тебе будет сказано), что программирование - это полная систематизация. Если ты напишешь "превед", то тебе ответят, а вот компилятор на команду ldn - даст просто сообщение об ошибке.

Ты вдумайся в то, что тебе советуют "все же следует прописать область векторов прерываний, даже если они не используются"! Ни в одной области знаний тебе такого не посоветуют. Представь себе если бы тебе в строительстве дали бы следующий совет: "даже если ты не будешь пока в доме делать лифт - шахту лифта всётаки построй".

Программирование накладывает на человека свой отпечаток. Говорят программист на ночь ставит два стакана. Один с водой, второй пустой. Полный - если захочется пить, а пустой - если пить не захочится. (Сравни с советом. smile.gif ) Иными словами, у программистов свои тараканы в голове, но они полная противоположность твоим тараканам. Поэтому и такое неприятие. В программировании считается красивым и правильным подходом когда на программу из 10 строчек приходится 150 строчек описаний, объявлений, коментариев, инициализаций разных и макросов. И, самое главное, что они не для красоты это делают. С опытом и течением времени, они просто разучиваются делать по другому. У них по другому душа не принимает.
smile.gif


Если ты выберешь программирование и в частности эмбедерство, то ты получишь колосальное удовольствие от этой профессии. Увидев изделие, ты будешь сразу представлять как оно работает, силой твоей мысли будут оживать двигатели, клапана и сложные изделия. Будут передаваться данные на уникальные расстояния и ты будешь распоряжаться чужими желаниями.
smile.gif
А вот книжку будешь листать методом половинного деления. smile.gif
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 1st July 2025 - 17:56
Рейтинг@Mail.ru


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