roboforum.ru

Технический форум по робототехнике.
Текущее время: 20 апр 2025, 18:35

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


Правила форума


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



Начать новую тему Ответить на тему  [ Сообщений: 423 ]  На страницу Пред.  1 ... 23, 24, 25, 26, 27, 28, 29  След.
Автор Сообщение
 Заголовок сообщения: Re: серж. "А ТЫ... ХОЧЕШЬ СТАТЬ АСМАТИКОМ?"
СообщениеДобавлено: 18 авг 2012, 20:15 
Не в сети
Аватара пользователя

Зарегистрирован: 27 янв 2011, 17:38
Сообщения: 589
Откуда: россия, череповец
legion писал(а):
Неправильно:
.def temp r=16 ;назначение рабочего регистра
.def tempH r=17
.def tempL r=18

не врубаюсь в чем здесь косяк... :oops:


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: серж. "А ТЫ... ХОЧЕШЬ СТАТЬ АСМАТИКОМ?"
СообщениеДобавлено: 18 авг 2012, 20:25 
Не в сети

Зарегистрирован: 24 апр 2010, 14:47
Сообщения: 736
Откуда: Уфа
прог. языки: avr asm
Надо так:
.def temp = r16 ;назначение рабочего регистра


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: серж. "А ТЫ... ХОЧЕШЬ СТАТЬ АСМАТИКОМ?"
СообщениеДобавлено: 18 авг 2012, 21:02 
Не в сети
Аватара пользователя

Зарегистрирован: 27 янв 2011, 17:38
Сообщения: 589
Откуда: россия, череповец
вкурил!

Добавлено спустя 1 минуту 47 секунд:
Код:
    .include "m8def.inc" ;определение мк
    .org $0000
    .def temp = r16  ;назначение рабочего регистра
    .def tempH = r17
    .def tempL = r18
    .cseg
    .eseg
    .equ led = pb0                   ;присвоение имени
    .equ but = pd0                   присвоение имени кнопки на порт д (посаена на +)
      reset:                               ;
                   ldi tempH,$04                 ;тут пока не знаю,
                   out SPH,tempH                 ;но думаю, это
                   ldi tempL,$5F                 ;определение режима работы
                   out SPL,tempL                 ;регистра - рыба
            ;nastroyka portov
      ldi temp, 0b00000001        ;пин1, выход
      out ddrb, temp              ; запись в рег
     ldi temp, 0b00000000        ; подт нет
     out portb, temp             ; вывод порта Б
     
     ldi temp, 0b00000000        ; пин1 порта д вход
     out ddrd, temp             ;запись в рег
     ldi temp, 0b00000001       ;подт на пин1
     out portd, temp            ; вывод порта

    init:
      sbis portd, but       ; считывание + с кнопки
      sbi portb, led        ;если на кнопке +, то вкл сд
      rjmp init


Добавлено спустя 13 минут 35 секунд:
чет у меня авр4 все по 5 байт скачивает...

Добавлено спустя 17 минут 38 секунд:
legion, поставь какую-нибудь простую задачку?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: серж. "А ТЫ... ХОЧЕШЬ СТАТЬ АСМАТИКОМ?"
СообщениеДобавлено: 18 авг 2012, 22:05 
Не в сети

Зарегистрирован: 24 апр 2010, 14:47
Сообщения: 736
Откуда: Уфа
прог. языки: avr asm
Работает на протеусе-то?

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: серж. "А ТЫ... ХОЧЕШЬ СТАТЬ АСМАТИКОМ?"
СообщениеДобавлено: 18 авг 2012, 22:18 
Не в сети
Аватара пользователя

Зарегистрирован: 27 янв 2011, 17:38
Сообщения: 589
Откуда: россия, череповец
ок. прот надо старый ставить, вечером займусь. пока с кодом поиграем.
Код:
.include "m8def.inc" ;определение мк
    .org $0000
    .def temp = r16  ;назначение рабочего регистра
    .def tempH = r17
    .def tempL = r18
    .cseg
    .eseg
    .equ led = pb0                   ;присвоение имени
    .equ led1 = pb1                  ;второй сд
    .equ but = pd0                  ; присвоение имени кнопки на порт д (посаена на +)
      reset:                               ;
                   ldi tempH,$04                 ;тут пока не знаю,
                   out SPH,tempH                 ;но думаю, это
                   ldi tempL,$5F                 ;определение режима работы
                   out SPL,tempL                 ;регистра - рыба
            ;nastroyka portov
      ldi temp, 0b00000011        ;пин1,2 выход
      out ddrb, temp              ; запись в рег
     ldi temp, 0b00000000        ; подт нет
     out portb, temp             ; вывод порта Б
     
     ldi temp, 0b00000000        ; пин1 порта д вход
     out ddrd, temp             ;запись в рег
     ldi temp, 0b00000001       ;подт на пин1
     out portd, temp            ; вывод порта

    init:
      sbis portd, but       ; считывание + с кнопки
      sbi portb, led        ;если на кнопке +, то вкл сд
      sbis portd, but       ;счит кнопки
      cbi portb, led        ;если +, то гасим сд1
      sbi portb, led1       ;и включаем сд2
      rjmp init          ;возврат

думаю так...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: серж. "А ТЫ... ХОЧЕШЬ СТАТЬ АСМАТИКОМ?"
СообщениеДобавлено: 18 авг 2012, 22:23 
Не в сети

Зарегистрирован: 24 апр 2010, 14:47
Сообщения: 736
Откуда: Уфа
прог. языки: avr asm
У тебя сд2 будет всегда гореть, а сд1 включится только если ты очень удачно отпустишь кнопку между первой проверкой и второй. =)

И да, проверять состояние входа надо читая PINn, а не PORTn. Иначе ты читаешь параметр инициализации порта - подтянут он к + или в Z-состоянии.


Последний раз редактировалось legion 18 авг 2012, 22:26, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: серж. "А ТЫ... ХОЧЕШЬ СТАТЬ АСМАТИКОМ?"
СообщениеДобавлено: 18 авг 2012, 22:25 
Не в сети
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: серж. "А ТЫ... ХОЧЕШЬ СТАТЬ АСМАТИКОМ?"
СообщениеДобавлено: 18 авг 2012, 22:28 
Не в сети

Зарегистрирован: 24 апр 2010, 14:47
Сообщения: 736
Откуда: Уфа
прог. языки: avr asm
Нет, не дребезг, ошибка в логике программы. Для наглядности распиши пошагово что будет происходить при выполнении тела цикла при замкнутой кнопке и при разомкнутой.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: серж. "А ТЫ... ХОЧЕШЬ СТАТЬ АСМАТИКОМ?"
СообщениеДобавлено: 18 авг 2012, 23:01 
Не в сети
Аватара пользователя

Зарегистрирован: 27 янв 2011, 17:38
Сообщения: 589
Откуда: россия, череповец
все писать не стал, ток сам код
Код:
       
        init:
       
          sbis pind, but       ; считывание + с кнопки
          sbi portb, led        ;если на кнопке +, то вкл сд
           sbic pind, but       ;если нет + - переход на а
          rjmp a
      a:
          sbis pind, but       ;счит кнопки
         
          cbi portb, led        ;если +, то гасим сд1
          sbi portb, led1       ;и включаем сд2
          sbic pind, but       ;если нет + - возврат
          rjmp init          ;возврат


Добавлено спустя 15 минут 3 секунды:
вот так, думаю, будет правильней:
Код:
init:
          sbic pind, but       ;если нет + - возврат
          rjmp init  ;
          sbis pind, but       ; считывание + с кнопки
          sbi portb, led        ;если на кнопке +, то вкл сд
          rjmp a             ;и переходим к а
      a:
          sbic pind, but       ;если нет + , то возврат
          rjmp a               ;нет +, переход в а
          sbis pind, but       ;счит кнопки
          cbi portb, led        ;если +, то гасим сд1
          sbi portb, led1       ;и включаем сд2
          rjmp init          ;возврат к началу проги


Добавлено спустя 7 минут 29 секунд:
а если после 5ой строки добавить стоку:
cbi portb, led1 ;
то получим выкл сд2,вкл сд1, при 3ем нажатие кнопки. и по кругу, т.д.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: серж. "А ТЫ... ХОЧЕШЬ СТАТЬ АСМАТИКОМ?"
СообщениеДобавлено: 18 авг 2012, 23:58 
Не в сети

Зарегистрирован: 24 апр 2010, 14:47
Сообщения: 736
Откуда: Уфа
прог. языки: avr asm
Если коротко, то не сработает. Настоятельно советую скорее знакомиться со студией и смотреть пошаговое выполнение программы, тогда все встанет на свои места.

Код:
          rjmp a             ;и переходим к а
      a:

Такая последовательность лишена смысла: метка на которую прыгаем указывает на следующую после команды ветвления инструкцию, но программа и так пошла бы на следующую инструкцию, и без rjmp. Еще один момент, SBIC и SBIS пропускают только 1 следущую команду, не больше. Поэтому идея использовать RJMP после таких команд правильная, если надо выполнить больше одной команды по условию.

Еще о кнопках. Ты используешь правильные команды, но приписка "+" в комментариях заставляет думать, что ты делаешь это неосознанно. Если + означает нажатие кнопки, а не + питания на ноге, тогда все верно, потому что кнопка в твоей схеме замыкает ногу на землю. И это правильно, так обычно и подключают кнопки.

Давай распишем алгоритм на словах:

Начальные условия: на кнопке + от подтяжки, сд1 горит (зажечь в инициализации), сд2 не горит.

Начало:
Если кнопка не нажата, то прыжок на начало. ; здесь ждем пока кнопку нажмут

Если сейчас горит светодиод 1, то прыжок на Гасим1Жгем2 ; сюда попадаем только при нажатии кнопки.

;Если светодиод 1 не горит, значит не прыгаем, а спокойно продолжаем программу и зажигаем сд1 и гасим сд2.
Выкл. сд2
Вкл. сд1
Прыгаем на Цикл1 ; сделали дело, надо ждать, пока кнопку отпустят.
; Если не прыгнуть, то мы выполним ненужный код, расположенный сразу за этим


Гасим1Жгем2:
Выключить сд1
Включить сд2 ; отсюда на Цикл1 попадем своим ходом, прыгать не надо

Цикл1:
Если кнопка нажата, то прыжок на Цикл1 ; в этом цикле ждем, пока кнопку отпустят

Прыгаем на Начало ; попадем сюда если кнопку отпустили


Теперь запиши это на ассемблере.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: серж. "А ТЫ... ХОЧЕШЬ СТАТЬ АСМАТИКОМ?"
СообщениеДобавлено: 19 авг 2012, 00:10 
Не в сети
Аватара пользователя

Зарегистрирован: 27 янв 2011, 17:38
Сообщения: 589
Откуда: россия, череповец
вобщето у меня условие того что кнопка посажена к плюсу питания и отсюда я исхожу...
пробую на твоих усл.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: серж. "А ТЫ... ХОЧЕШЬ СТАТЬ АСМАТИКОМ?"
СообщениеДобавлено: 19 авг 2012, 00:12 
Не в сети

Зарегистрирован: 24 апр 2010, 14:47
Сообщения: 736
Откуда: Уфа
прог. языки: avr asm
Значит ты понимаешь работу SBIC и SBIS неправильно, наоборот.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: серж. "А ТЫ... ХОЧЕШЬ СТАТЬ АСМАТИКОМ?"
СообщениеДобавлено: 19 авг 2012, 01:08 
Не в сети
Аватара пользователя

Зарегистрирован: 27 янв 2011, 17:38
Сообщения: 589
Откуда: россия, череповец
Код:
.include "m8def.inc"
.org $0000
   .def temp = r16  ;назначение рабочего регистра
   .def tempH = r17
   .def tempL = r18
   .cseg
   .eseg
        .equ led = pb0                   ;присвоение имени
        .equ led1 = pb1                  ;второй сд
        .equ but = pd0                  ; присвоение имени кнопки на порт д
          reset:                               ;
                       ldi tempH,$04                 ;тут пока не знаю,
                       out SPH,tempH                 ;но думаю, это
                       ldi tempL,$5F                 ;определение режима работы
                       out SPL,tempL                 ;регистра - рыба
                ;nastroyka portov
  ldi temp, 0b00000011    ;пин1,2 вых
  out ddrb, temp          ;запись в рег
  ldi temp, 0b00000001    ;подт на пин1 - вкл сд1 при инициализации
  out portb, temp         ;вывод порта б
     ldi temp, 0b00000000   ; все вход
     out ddrd, temp         ;запись в рег
     ldi temp, 0b00000001   ; подт на пин1
     out portd, temp        ; вывод порта д

init:
sbic portb, led  ;проверка вкл сд1
rjmp init  ;если не горит переход
sbis portb, led  ;если горит, идем дальше
sbic pind, but  ;проверка кн на не нажатое сост.
rjmp init
sbis pind, but ;проверка кн на нажатие
cbi portb, led  ;если нажата гасим сд1
sbi portb, led1 ; и вкл сд2
sbic pind, but  ;при отпускании кнопки
  rjmp init   ;


Добавлено спустя 9 минут 20 секунд:
проверил в проте - косяк! думаю дальше...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: серж. "А ТЫ... ХОЧЕШЬ СТАТЬ АСМАТИКОМ?"
СообщениеДобавлено: 19 авг 2012, 01:09 
Не в сети

Зарегистрирован: 24 апр 2010, 14:47
Сообщения: 736
Откуда: Уфа
прог. языки: avr asm
Код:
sbic portb, led  ;проверка вкл сд1
rjmp init  ;если не горит переход
sbis portb, led  ;если горит, идем дальше

sbic portb, led
Команда SBIC означает: Skip if Bit Is Clear, т.е. пропустить следующую инструкцию, если бит равен нулю. То есть, если светодиод не горит (бит равен 0), то инструкцию rjmp init ты пропустишь и не прыгнешь.
Потом, в третьей строчке ты опять проверяешь это же условие. Зачем? Ты на строчку кода после rjmp init можешь попасть только если бит равен 0 и ты пропустил прыжок. Проверять бессмысленно, portb, led определенно равен нулю, если ты на этой строчке.

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


Последний раз редактировалось legion 19 авг 2012, 01:14, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: серж. "А ТЫ... ХОЧЕШЬ СТАТЬ АСМАТИКОМ?"
СообщениеДобавлено: 19 авг 2012, 01:20 
Не в сети
Аватара пользователя

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

Добавлено спустя 6 минут 12 секунд:
студию поставил, но с ней тоже еще неделю разбираться... :oops:


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 423 ]  На страницу Пред.  1 ... 23, 24, 25, 26, 27, 28, 29  След.

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


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

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


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

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO