roboforum.ru

Технический форум по робототехнике.

серж. "А ТЫ... ХОЧЕШЬ СТАТЬ АСМАТИКОМ?"

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

Re: серж. "А ТЫ... ХОЧЕШЬ СТАТЬ АСМАТИКОМ?"

Сообщение Vovan » 22 ноя 2011, 15:56

Не соглашусь!
Во-первых редактор Протеуса позволяет всё автоматизировать - поправил код и сразу симуляция, безовсяких финтов уже с исправленным файлом происходит - не надо пересохранять. Во-вторых, этот редактор ничем от обычного блокнота не отличается, а это дисциплинирует и учит писать правильно, т.е. надеешься только на себя, а это гарантия писать правильно в любой программе читающей асм-коды.
в-третьих дополнительно установленный редактор - внесет сложности для протеуса, пока не стану их перечислять (рано), но поверьте, пока, нА слово - сложности будут.
в-четвертых если уж и писать прогу с подсказками, то АВРСтудия для этого и создана, писать можно в ней а хекс из нее заливать в Протеус, а можно и код из студии в редактор кода протеуса переносить и наоборот. Связка Судия+Протеус+асм-код - не требует ничего больше, они ужЕ связаны асмом.
Нафик плодить кучу каких-то прог, когда ужЕ "всё придумано до нас" (с)?
Это конечно ИМХО, но подкрепленное неск. годами юзанья Протеуса, если заметили на скрине у меня 6-я версия, хз какого года выпуска... Есть и 7-я (последняя) в другой ОСи и юзаю я их так как мне удобно, но редактор Протеуса никогда не игнорирурую, потому что от самых первых до последних версий он и асм - родные по крови.
_________
Sincerely,
Vovan
Аватара пользователя
Vovan
 
Сообщения: 3340
Зарегистрирован: 05 окт 2005, 12:03
Откуда: Литва
прог. языки: asm

Re: серж. "А ТЫ... ХОЧЕШЬ СТАТЬ АСМАТИКОМ?"

Сообщение серж » 22 ноя 2011, 16:03

короче подумал я и решил что перенесу хекс из студии...
в нее прогу запихал, нажал булидд. а дальше где хекс появился??? :unknown:
Вложения
1скрин.jpg
Аватара пользователя
серж
 
Сообщения: 589
Зарегистрирован: 27 янв 2011, 17:38
Откуда: россия, череповец

Re: серж. "А ТЫ... ХОЧЕШЬ СТАТЬ АСМАТИКОМ?"

Сообщение Vovan » 22 ноя 2011, 16:12

всё вот с этого места main: не годится, это не ассемблер, это псевдо код. Взять словарь и перевести на асм. А если вызывается пауза, то нужно наверное указать ее местоположение или номер телефона? :wink:
_________
Sincerely,
Vovan
Аватара пользователя
Vovan
 
Сообщения: 3340
Зарегистрирован: 05 окт 2005, 12:03
Откуда: Литва
прог. языки: asm

Re: серж. "А ТЫ... ХОЧЕШЬ СТАТЬ АСМАТИКОМ?"

Сообщение серж » 22 ноя 2011, 17:40

упссс...
ща переделаем...

Добавлено спустя 5 минут 7 секунд:
а коли так?

Добавлено спустя 1 час 20 минут 33 секунды:
vovan? вот как сделать исходник я вроде разобрался.
но вот какая фича: в меню исходник нажимаю самую нижнюю строчку (serj.asm) и почему то сразу открывается авр студия.... :unknown:
понимаю, достал тебя уже со своей глупость. но мне надо восполнять пробелы :sorry:
Вложения
1скрин.jpg
Аватара пользователя
серж
 
Сообщения: 589
Зарегистрирован: 27 янв 2011, 17:38
Откуда: россия, череповец

Re: серж. "А ТЫ... ХОЧЕШЬ СТАТЬ АСМАТИКОМ?"

Сообщение legion » 22 ноя 2011, 18:09

Т.е. ты поставил вторую точку перед include и переименовал метку main в init. А чего ты этим хотел добиться? =) Кстати, куда теперь переходит команда на последней строчке rjmp main?
legion
 
Сообщения: 736
Зарегистрирован: 24 апр 2010, 14:47
Откуда: Уфа
прог. языки: avr asm

Re: серж. "А ТЫ... ХОЧЕШЬ СТАТЬ АСМАТИКОМ?"

Сообщение Vovan » 22 ноя 2011, 18:11

Код: Выделить всёРазвернуть
;otsuda pishem
.def temp=r16                        ;
.def tempH=r17                       ;
.def tempL=r18                       ;
.dseg                                ;
.eseg                                ;
.cseg                                ;
.equ Led   = PB1                     ;na port B1 podklucen svetodiod
rjmp reset                           ;
reset:                               ;
       ldi tempH,$04                 ;ob etom v dvuh slovah
       out SPH,tempH                 ;napisat mozno
       ldi tempL,$5F                 ;no poka rano
       out SPL,tempL                 ;prosto schitay eto neobhodimiy tipo include
;nastroyka portov
       ldi temp, 0b00000010          ;naznachaem port B1 vihodom 8bit a 2-y sprava i est portb1 a 1-y bit sootvetstvenno portb0 3-y portb2 i tak dalee
       out ddrb, temp                ;ostalnie vhodi
       ldi temp, 0b00000000          ;0 na vihod port B1
       out portb, temp               ;
       rjmp start                    ;idem na start
start:                               ;glavnaia programma
       sbi portb,Led                 ;1 na vihod port B1 tem samim zazigaetsa Led       
       rcall pause                   ;vizivaem podprogrammu pausi
       cbi portb,Led                 ;0 na vihod port B1 tem samim gasitsa Led       
       rcall pause                   ;vizivaem podprogrammu pausi
       rjmp start                    ;zaciklivaem programmu
pause:                               ;podprogramma pausi
nop                                  ;nichego
nop                                  ;ne
nop                                  ;dela
nop                                  ;em
ret                                  ;prosto vihodim otsuda

Прочти построчно и скажи: какие вопросы возникают по каждой строке? Только учти это вовсе не генератор частоты и ни тем более пачек, это просто пример КУДА ИДТИ, хотя если запустить в Протеусе СД начнет мигать...
_________
Sincerely,
Vovan
Аватара пользователя
Vovan
 
Сообщения: 3340
Зарегистрирован: 05 окт 2005, 12:03
Откуда: Литва
прог. языки: asm

Re: серж. "А ТЫ... ХОЧЕШЬ СТАТЬ АСМАТИКОМ?"

Сообщение серж » 22 ноя 2011, 19:40

Код: Выделить всёРазвернуть
;otsuda pishem
.def temp=r16                        ;тут пока ни чего не понятно. скорее всего все эти
.def tempH=r17                       ;строки для инициализации
.def tempL=r18                       ;
.dseg                                ;
.eseg                                ;
.cseg                                ;
.equ Led   = PB1                     ;na port B1 podklucen svetodiod/назначение порта
rjmp reset                           ;переход к программе
reset:                               ;
       ldi tempH,$04                 ;ob etom v dvuh slovah /
       out SPH,tempH                 ;napisat mozno         /    не знаю
       ldi tempL,$5F                 ;no poka rano          /
       out SPL,tempL                 ;prosto schitay eto neobhodimiy tipo include/ договорились
;nastroyka portov
       ldi temp, 0b00000010          ;naznachaem port B1 vihodom 8bit a 2-y sprava i est portb1 a 1-y bit sootvetstvenno portb0 3-y portb2 i tak dalee
       out ddrb, temp                ;ostalnie vhodi
       ldi temp, 0b00000000          ;0 na vihod port B1/так че, это все настройка потров???
       out portb, temp               ;
       rjmp start                    ;idem na start /так вот где оказывается начало самой работы... упссс...
start:                               ;glavnaia programma
       sbi portb,Led                 ;1 na vihod port B1 tem samim zazigaetsa Led /       
       rcall pause                   ;vizivaem podprogrammu pausi                 /
       cbi portb,Led                 ;0 na vihod port B1 tem samim gasitsa Led    / почти тож самое что     
       rcall pause                   ;vizivaem podprogrammu pausi                 /вчера делали(что означает
       rjmp start                    ;zaciklivaem programmu                       /r перед call?)
pause:                               ;podprogramma pausi       /  а, там вызов паузы,               
nop                                  ;nichego                  \ а тут мона написать их значение
nop                                  ;ne                       /
nop                                  ;dela                     \
nop                                  ;em                       /
ret                                  ;prosto vihodim otsuda


много чего еще не понятно, но надеюсь мне все объяснят.
а ща пока подскажите где я ошибся с описаниями.

а вот с протеусом я рано праздновал... :sorry:

Добавлено спустя 1 час 7 минут 13 секунд:
Vovan, я ща попробую ваще пока студию удалить, потом, когда тут разберусь, уже ее поставлю :wink:
Аватара пользователя
серж
 
Сообщения: 589
Зарегистрирован: 27 янв 2011, 17:38
Откуда: россия, череповец

Re: серж. "А ТЫ... ХОЧЕШЬ СТАТЬ АСМАТИКОМ?"

Сообщение Vovan » 22 ноя 2011, 19:46

Лан, с Протеусом позже... Всё равно пока гонять там нечего :wink:
Возможно пока и можно инициализацию опустить, потому что это ОГОГО какой раздел...
А вот настройка портов - это просто!
Вспомни как Мортон пишет про регистры (там где ящички с руками)...
Ну попробую я, но не думаю что лучше Мортона это будет, однако ужЕ познакомившись с тем ЧТО ты любишь понимать, а что нет - попробую...
Регистры общего назначения (РОН) - это такие ячейки куда можно записать число используя, например, команду LDI.
А затем, любезно предложить микроконтроллеру взять оттуда это число и вывести его на ВЕСЬ порт, например В.
Пример по буквам:
ldi R16,0b00000010 - записываем МЫ в регистр под номером 16 число 2.
Всё, с помощью этой команды число 2 мгновенно записано в регистр16 и сидит там постоянно пока мы либо его оттуда не выгоним...
следующая команда OUT DDRB,R16 - говорит МК что теперь это число будет определять МК где у него на порте В выходы (они обозначены 1-ами), а где входы (они обозначены 0-ами). МК с гордостью читает это число побитам справа на лево (как израильтяне): первый бит 0 - вход, второй бит 1 - выход, третий и остальные тоже 0 - значит входа и назначает вх\вых в сответствии с этим 00000010 числом.
Однако этого мало! Нужно ещё начальные уровни ножек порта В задать (0 или 1, т.е. 0 или +5в).
Для этого используем опять две команды: одна нам уже известна LDI, а вторая OUT.
Т.образом писем:
ldi R16,0b00000000 здесь одни 0, но по необходимости мы можем и 1-цы написать и тогда по команде OUT МК выведет 1-цы (+5в) на соответствующие ножки порта В.
out portb,R16 - все ножки порта В не имеют 1-ц.
_________
Sincerely,
Vovan
Аватара пользователя
Vovan
 
Сообщения: 3340
Зарегистрирован: 05 окт 2005, 12:03
Откуда: Литва
прог. языки: asm

Re: серж. "А ТЫ... ХОЧЕШЬ СТАТЬ АСМАТИКОМ?"

Сообщение серж » 22 ноя 2011, 20:01

ты вроде еще проще объяснил! :good: ток надо МНЕ еще это раз 20(вкуривая) прочитать, чтоб понастоящему дошло :oops: .
но не сегодня. так какя с ентим протеусом весь вымотался - и матюги и сопли пузырями и еще ХЗ чего. :P

а вот ща не прочь бы по разбирать такие же задачи и программы, как с этим генератором :oops:
так сказать забежать вперед. там ведь появятся новые команды...?
наверно для этого надо дмитрия вызывать... :D
Аватара пользователя
серж
 
Сообщения: 589
Зарегистрирован: 27 янв 2011, 17:38
Откуда: россия, череповец

Re: серж. "А ТЫ... ХОЧЕШЬ СТАТЬ АСМАТИКОМ?"

Сообщение Vovan » 22 ноя 2011, 20:06

Нет! нельзя двигаться дальше не усвоив хотя бы это.
Я описал всего ничего. Однако, поверь, лучше всего если ты прямо сейчас сделаешь первое упражнение.
Задача:
настроить порт С так чтобы у него 0567 - были входами, остальные выходы, причем выходы 1 и 2 имели бы +5 на выходе.
_________
Sincerely,
Vovan
Аватара пользователя
Vovan
 
Сообщения: 3340
Зарегистрирован: 05 окт 2005, 12:03
Откуда: Литва
прог. языки: asm

Re: серж. "А ТЫ... ХОЧЕШЬ СТАТЬ АСМАТИКОМ?"

Сообщение серж » 22 ноя 2011, 20:32

Vovan, а на какой мк опираться??? на мегу48???





...ну, дык...
...стормозил опять... :oops:
Последний раз редактировалось серж 22 ноя 2011, 21:25, всего редактировалось 1 раз.
Аватара пользователя
серж
 
Сообщения: 589
Зарегистрирован: 27 янв 2011, 17:38
Откуда: россия, череповец

Re: серж. "А ТЫ... ХОЧЕШЬ СТАТЬ АСМАТИКОМ?"

Сообщение Dmitry__ » 22 ноя 2011, 20:57

Vovan писал(а):Не соглашусь!

Наверно ты прав, слишком форсироровал я события. Ну, мож другим пригодится, с большим уровнем подготовки.

С настройкой портов не делайте так, это классическая ошибка на любом языке программирования.
Если потом переназначать контакт, то очень трудно найти в программе безликие константы.

я вот так обьявляю контакты контроллера:
Код: Выделить всёРазвернуть
;***********************************************************************
;не использ. порты - выходы в ноль.
;SET_GPx состояние выхода при инициализации
;CONF_GPx =1 вход, =0 выход
;
#DEFINE   SwDoorDrive      PORTA,4   ;кнопка двери водителя
CONF_RA4   EQU      1<<4   ;(на стандартной плате на земле)
SET_RA4      EQU      0<<4
;
#DEFINE   NO_USE_RA5      PORTA,5   ;MCLR запас (крайний случай из-за супервизора)
CONF_RA5   EQU      1<<5
SET_RA5      EQU      0<<5
;
#DEFINE   KeyOnOff      PORTA,6   ;Эмуляция ключа в замке зажигания.
CONF_RA6   EQU      0<<6   ;(на mister_X это был OSC2)
SET_RA6      EQU      0<<6
;
#DEFINE   RelayIgnition      PORTA,7   ;реле зажигания (1-вкл.)
CONF_RA7   EQU      0<<7   ;(на mister_X это был OSC1)
SET_RA7      EQU      0<<7
;********************************************************************************************************


а в основной программе вот такой код, он не меняется никогда, можно вынести в include :

Код: Выделить всёРазвернуть
   MOVLW   SET_RA0 | SET_RA1 | SET_RA2 | SET_RA3 | SET_RA4 | SET_RA5 | SET_RA6 | SET_RA7   ;начальное значение выходов
   MOVWF   PORTA                              ;
   MOVLW   SET_RB0 | SET_RB1 | SET_RB2 | SET_RB3 | SET_RB4 | SET_RB5 | SET_RB6 | SET_RB7   ;
   MOVWF   PORTB                              ;

   MOVLW   CONF_RA0 | CONF_RA1 | CONF_RA2 | CONF_RA3 | CONF_RA4 | CONF_RA5 | CONF_RA6 | CONF_RA7   ;конфигурация входов/выходов
   MOVWF   PORTA                                 ;
   MOVLW   CONF_RB0 | CONF_RB1 | CONF_RB2 | CONF_RB3 | CONF_RB4 | CONF_RB5 | CONF_RB6 | CONF_RB7   ;
   MOVWF   PORTB                                 ;


т.е. вся конфигурация портов идет назначением "1" и "0" вверху программы...
Аватара пользователя
Dmitry__
 
Сообщения: 8033
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

Re: серж. "А ТЫ... ХОЧЕШЬ СТАТЬ АСМАТИКОМ?"

Сообщение серж » 22 ноя 2011, 21:29

special for Vovan:
Код: Выделить всёРазвернуть
;nastroyka portov                          
        ldi temp 0c10001110       ;думаю что так назначаются вх пинов порта 0-вх., 1-вых
        out ddrc, temp            ;так даем понять что ост выхода
        ldi R16,0c00000011        ;так подаем выс уровень на вх 1и2
        out portс, temp           ;тут затрудняюсь

2дмитрий, во первых привет, во вторых, я вроде тока вникать начал что к чему, а тут... :wink:

Добавлено спустя 2 минуты 7 секунд:
исправил ща чуток... :oops:

Добавлено спустя 12 минут 45 секунд:
Код: Выделить всёРазвернуть
MOVLW  ;
MOVWF  ;
SET_RA0 | SET_RA1 | SET_RA2.....  ;
#DEFINE   SwDoorDrive      PORTA,4   ;кнопк двери водителя в вагон св  :)
#DEFINE   NO_USE_RA5      PORTA,5 ; едем не в соедененный штаты "еропы(?)"
CONF_RA7   EQU      0<<7   ;   ???

кАроче, дмитрий, много не понятно... :unknown: :sorry:
ВОВАН, иди проверять!!!

Добавлено спустя 5 минут 37 секунд:
радист, а ты что на это скажешь???
Аватара пользователя
серж
 
Сообщения: 589
Зарегистрирован: 27 янв 2011, 17:38
Откуда: россия, череповец

Re: серж. "А ТЫ... ХОЧЕШЬ СТАТЬ АСМАТИКОМ?"

Сообщение Radist » 22 ноя 2011, 21:30

Один нюанс про команду LDI. Есть 5 мнемоник, оканчивающихся на I (CPI, ORI, SUBI и еще пара) которые работают только с половиной ящичков, от 16 до 31 включительно. При попытке задействовать ящики от 0 до 15 компилятор будет ругаться. Ибо нельзя!

А на вот это "0c10001110" скажу - что за надпись такая? Буква С к какой системе счисления относится?
А последний кусок программы для меня вообще темный лес. Я люблю так писать, чтоб через два года мог разобраться. Все должно быть структурировано, и в программе должна быть вся инфа по железу, с которым работает программа (в виде комментариев, дефайнов, макросов, инклудов и др).
И еще - я прямо в программе пишу в виде каментов словесное описание алгоритмов работы перед сложными подпрограммами. А то представьте такой камент: алгоритм работы этой подпрограммы подробно расписан в синем блокноте. А читаете вы этот камент через пару лет после написания. Все должно лежать в одном месте.
За годы программирования у меня накопилась куча отлаженных подпрограмм. Сейчас я пишу только скелет программы, а мясо для нее у меня уже есть. Потом прописываю основной цикл - и программа готова.
Последний раз редактировалось Radist 22 ноя 2011, 21:41, всего редактировалось 1 раз.
Аватара пользователя
Radist
 
Сообщения: 2241
Зарегистрирован: 01 июл 2009, 08:59
Откуда: Екатеринбург
прог. языки: асемблер AVR

Re: серж. "А ТЫ... ХОЧЕШЬ СТАТЬ АСМАТИКОМ?"

Сообщение серж » 22 ноя 2011, 21:44

то есть так:
Код: Выделить всёРазвернуть
;nastroyka portov                          
        ldi temp 0b10001110       ;думаю что так назначаются вх пинов порта 0-вх., 1-вых
        out ddrc, temp            ;так даем понять что ост выхода
        ldi temp,0b00000011        ;так подаем выс уровень(+5) на вх 1и2
        out portс, temp           ;тут затрудняюсь


проверь???

Добавлено спустя 1 минуту 52 секунды:
такова была задача вована: "Задача:
настроить порт С так чтобы у него 0567 - были входами, остальные выходы, причем выходы 1 и 2 имели бы +5 на выходе."

Добавлено спустя 5 минут 41 секунду:
кстати, про "с", я сначало подумал это вован меня так поймать пытается, то бишь уловка,
ведь порта обычно "D" и "B". остальные задействовыны самим мк. :shock:
но, задачу все таки решил решить - самому же польза... :wink:



ааааа...
это мой косяк был!!! :durak:
Последний раз редактировалось серж 22 ноя 2011, 21:48, всего редактировалось 1 раз.
Аватара пользователя
серж
 
Сообщения: 589
Зарегистрирован: 27 янв 2011, 17:38
Откуда: россия, череповец

Пред.След.

Вернуться в Блоги

Кто сейчас на конференции

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