Например TDA7294

Форум РадиоКот • Просмотр темы - Ассемблер (ASM) для AVR в вопросах и ответах
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Вт июн 24, 2025 23:22:56

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


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



Начать новую тему Ответить на тему  [ Сообщений: 7952 ]     ... , , , 80, , , ...  
Автор Сообщение
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Сб мар 26, 2011 22:24:27 
Родился

Зарегистрирован: Пн мар 08, 2010 14:16:51
Сообщений: 12
Рейтинг сообщения: 0
Здравствуйте!
В ассемблере я новичок. Возник вопрос по поводу использования переменных на ассемблере. У меня подключены несколько датчиков DS18b20, один на ноге PB2, другой на ноге PB3. Нужно считать сначала с одной ноги, потом со второй.
Есть макрос считывания температуры, GET_TEMP, где переменная @0 это нога.
то есть GET_TEMP PB3 - считать температуру с PB3.
Внутри макроса:
....
.set pin=@0 ; пытаюсь установить значение переменной пин на текущее значение переданное в макрос, чтобы потом ; использовать в процедуре
rcall TEMP_PROC - само измерение, где производятся операции с текущей ножкой вроде sbi PORTC,pin
....
Дело в том что значение pin не меняется, а остается то, которое последний раз упоминалось в коде. То есть если код
.......
GET_TEMP PB3
GET_TEMP PB2
.......
То считывается оба раза с PB2.
Подскажите пожалуйста как улучшить алгоритм, чтобы не писать две разные процедуры под каждую ногу.
Заранее благодарен


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Вс мар 27, 2011 08:53:22 
Модератор
Аватар пользователя

Карма: 68
Рейтинг сообщений: 424
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Сообщений: 13490
Откуда: Тамбовская обл.
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Я бы не советовал вам директиву .set, вполне можно и без неё обойтись. Покажите код макроса.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Вс мар 27, 2011 10:09:25 
Родился
Аватар пользователя

Зарегистрирован: Вс мар 27, 2011 09:22:49
Сообщений: 4
Рейтинг сообщения: 0
Доброго времени суток, РадиоКоты.

В статье Обучалки Бегущий огонек v1.0 приводится пример задержки с использование такого цикла:
Код:
          ldi Temp1,0
          ldi Temp2,0
          ldi Temp3,10

Loop:     dec Temp1
          brne Loop

          dec Temp2
          brne Loop

          dec Temp3
          brne Loop

Мне, как паскальщику, этоти циклы кажутся бесконечными, объясните как оно работает, пиво уже не помогает :( .


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Вс мар 27, 2011 10:36:08 
Родился

Зарегистрирован: Пн мар 08, 2010 14:16:51
Сообщений: 12
Рейтинг сообщения: 0
ploop писал(а):
Я бы не советовал вам директиву .set, вполне можно и без неё обойтись. Покажите код макроса.


Я как раз об этом, но ничего кроме как вложения макросов в макрос не приходит. Но тогда как я представляю, так как макрос вставляется прямо в код, будет весьма громоздко.

Вот код:
Код:
.macro GET_TEMP

 .set pin=@0    ; выставляем пин для использования в процедуре TEMP_PROC
 .set mem=@1 ; а тут байт памяти куда сохранить значение температуры

 push r16
 push r17

 rcall TEMP_PROC ; сама процедура

 pop r17
 pop r16
.endm


Вернуться наверх
 
В продаже новые LED-драйверы XLC компании MEAN WELL с диммингом нового поколения

Компания MEAN WELL пополнила ассортимент своей широкой линейки светодиодных драйверов новым семейством XLC для внутреннего освещения. Главное отличие – поддержка широкого спектра проводных и беспроводных технологий диммирования. Новинки представлены в MEANWELL.market моделями с мощностями 25 Вт, 40 Вт и 60 Вт. В линейке есть модели, работающие как в режиме стабилизации тока (СС), так и в режиме стабилизации напряжения (CV) значением 12, 24 и 48 В.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Вс мар 27, 2011 10:44:43 
Родился

Зарегистрирован: Пн мар 08, 2010 14:16:51
Сообщений: 12
Рейтинг сообщения: 0
kazaff писал(а):
Доброго времени суток, РадиоКоты.

В статье Обучалки Бегущий огонек v1.0 приводится пример задержки с использование такого цикла:
Код:
          ldi Temp1,0
          ldi Temp2,0
          ldi Temp3,10

Loop:     dec Temp1
          brne Loop

          dec Temp2
          brne Loop

          dec Temp3
          brne Loop

Мне, как паскальщику, этоти циклы кажутся бесконечными, объясните как оно работает, пиво уже не помогает :( .


Код:
          ldi Temp1,0
          ldi Temp2,0               ; загружаем значения в регистры
          ldi Temp3,10

Loop:     dec Temp1            ; уменьшаем значение Temp1 на 1. Если там ноль то 0-1=255, тогда крутимся тут ещё 255 раз
          brne Loop                 ; условный переход - если значение в temp1 не равно нулю, то переходим к  метке Loop.

          dec Temp2               ; тоже самое
          brne Loop

          dec Temp3              ; и тут. но когда в temp3 будет ноль - программа выйдет из цикла.
          brne Loop


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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Вс мар 27, 2011 12:46:50 
Сверлит текстолит когтями
Аватар пользователя

Карма: 4
Рейтинг сообщений: 30
Зарегистрирован: Ср янв 05, 2011 16:25:15
Сообщений: 1163
Рейтинг сообщения: 0
kazaff писал(а):
В статье Обучалки Бегущий огонек v1.0 приводится пример задержки с использование такого цикла:
пример ИМХО не совсем удачный, потому что точную задержку с его помощью не получишь. Переменные Temp2 и Temp3 - чистая "бутафория", так как не сохраняются. Вообще-то, если нужна программная задержка, то лучше написать макрос.


Вернуться наверх
 
Распродажа паяльного оборудования ATTEN!
Паяльные станции, паяльники и аксессуары по самой выгодной цене.

По промокоду radiokot скидка 10%
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Вс мар 27, 2011 13:48:02 
Модератор
Аватар пользователя

Карма: 68
Рейтинг сообщений: 424
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Сообщений: 13490
Откуда: Тамбовская обл.
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Цитата:
Я как раз об этом, но ничего кроме как вложения макросов в макрос не приходит. Но тогда как я представляю, так как макрос вставляется прямо в код, будет весьма громоздко.

Ну тогда показывайте TEMP_PROC, короче то, где используется этот pin

Цитата:
Мне, как паскальщику, этоти циклы кажутся бесконечными, объясните как оно работает, пиво уже не помогает

Почему бесконечными? brne - переход, если предыдущая операция не вернула ноль (не установился флаг Z). Когда все переменные обнулятся цикл закончится.

Цитата:
пример ИМХО не совсем удачный, потому что точную задержку с его помощью не получишь.

Это почему не получишь? Какую надо, такую и получишь.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Вс мар 27, 2011 13:55:07 
Друг Кота
Аватар пользователя

Карма: 67
Рейтинг сообщений: 1060
Зарегистрирован: Чт сен 18, 2008 12:27:21
Сообщений: 19640
Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
ploop писал(а):
Какую надо, такую и получишь...

...в машинных тактах. А уже зная частоту, на котором работает МК, можно задержку перевести в секунды.

_________________
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Измерить нннада?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Вс мар 27, 2011 14:01:02 
Модератор
Аватар пользователя

Карма: 68
Рейтинг сообщений: 424
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Сообщений: 13490
Откуда: Тамбовская обл.
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Цитата:
.в машинных тактах. А уже зная частоту, на котором работает МК, можно задержку перевести в секунды.

Разумеется. Неужели ассемблер уже научился человеческие мысли понимать? "Дрыгни мне пятой ногой через... эээ... минуту и 35 секунд!" :)

Время такта можно заранее посчитать, константами например.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Вс мар 27, 2011 14:05:46 
Родился

Зарегистрирован: Пн мар 08, 2010 14:16:51
Сообщений: 12
Рейтинг сообщения: 0
ploop писал(а):
Цитата:
Я как раз об этом, но ничего кроме как вложения макросов в макрос не приходит. Но тогда как я представляю, так как макрос вставляется прямо в код, будет весьма громоздко.

Ну тогда показывайте TEMP_PROC, короче то, где используется этот pin

Вот TEMP_PROC:
Код:
TEMP_PROC:
 
 sbi ddr,pin
 cbi port,pin
 WaitUS 220
 sbi port,pin
 cbi ddr,pin
 WaitUS 220
 ;===============Writing
   ldi r17,0xCC
 rcall WRITE_CMD 

 ldi r17,0x4e
 rcall WRITE_CMD 

 ldi r17,0x00
 rcall WRITE_CMD 

 ldi r17,0x00
 rcall WRITE_CMD 

  ldi r17,0b00011111
 rcall WRITE_CMD 

 sbi ddr,pin
 cbi port,pin
 WaitUS 220
 sbi port,pin
 cbi ddr,pin
 WaitUS 220

  ldi r17,0xCC
 rcall WRITE_CMD 

  ldi r17,0x44
 rcall WRITE_CMD 

 WaitMS 150
 ;=================reset

 sbi ddr,pin
 cbi port,pin
 WaitUS 220
 sbi port,pin
 cbi ddr,pin
 WaitUS 220
 ldi r17,0xCC
 rcall WRITE_CMD

  ldi r17,0xBE
 rcall WRITE_CMD
 WaitUS 5
 rcall READ_DATA
;===============
ret

и WRITE_CMD
Код:
 WRITE_CMD:
 push r19
 ldi r19,8
wr_st:
 lsr r17
 brcs wr_one
 rjmp wr_zero

wr_one:
 WRITE_1 pin
 rjmp wr_fin

wr_zero:
 WRITE_0 pin

wr_fin:
dec r19
brne wr_st
pop r19
ret


где WRITE_0 и WRITE_1 выглядят так
Код:
macro WRITE_0
 push r16

 sbi ddr,@0
 cbi port,@0
 WaitUS 26
 sbi port,@0
 cbi ddr,@0
 WaitUS 1

 pop r16
.endm



Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Вс мар 27, 2011 14:58:44 
Модератор
Аватар пользователя

Карма: 68
Рейтинг сообщений: 424
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Сообщений: 13490
Откуда: Тамбовская обл.
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Мда... вкурить тяжело. Я при мерно понял, что нужно, попробуйте так (пример из готового проекта)

Код:
.equ led_auto_port = PORTD      ; порт светодиода "AUTO"
.equ led_uart_port = PORTD      ; порт светодиода "UART"
...
.equ btn_auto_port = PORTD      ; порт кнопки "AUTO"
.equ btn_uart_port = PORTD      ; порт кнопки "UART"
...
.equ led_auto_bit = 4           ; бит светодиода "AUTO"
.equ led_uart_bit = 3           ; бит светодиода "UART"
...
.equ btn_auto_bit = 6           ; бит кнопки "AUTO"
.equ btn_uart_bit = 5           ; бит кнопки "UART"

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
.equ led_auto_ddr = led_auto_port-1 ; А вот так вычисляем DDR
.equ led_uart_ddr = led_uart_port-1
..
.equ led_prog_pin = led_prog_port-2 ; А так PIN
.equ led_auto_pin = led_auto_port-2
...


Настроив верхнюю часть, дальше рассчитывается всё автоматически. Главное посмотреть в .inc файле контроллера, на сколько отличаются PORT, PIN, DDR (они там определены тоже как константы)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Вс мар 27, 2011 15:00:44 
Модератор
Аватар пользователя

Карма: 68
Рейтинг сообщений: 424
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Сообщений: 13490
Откуда: Тамбовская обл.
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Вот для примера макрос опроса кнопки из того-же проекта:


Код:
.MACRO   test_uart_btn
sbic  btn_uart_pin, btn_uart_bit
rjmp ml07                       ; пропуск, если бит не установлен (кн. нажата)
    inc r_btn_uart              ; если нажата - увеличиваем счетчик
    mov tr0,r_btn_uart
    cpi tr0, btn_delay          ; счетчик досчитал?
    brne ml07                   ; если нет - уходим
    clr r_btn_uart              ; если да - сбрасываем счетчик
    ori r_btn_press,(1<<BUF_flag)  ; устанавливаем флаг нажатия
    ori r_tasks,(1<<BUT_flag)   ; устанавливаем флаг действия
    rjmp ml08
ml07:                           ; кнопка не нажата или нажатие отработано
    sbrs r_btn_press,BUF_flag   ; проверяем, установлен ли флаг нажатия
    rjmp ml08
    clr r_btn_uart              ; если да, сбрасываем счетчик
    sbis  btn_uart_pin, btn_uart_bit ; проверяем снова кнопку
    rjmp ml08                   ; если нажата - выходим
    andi r_btn_press,~(1<<BUF_flag) ; если нет - сбрасываем бит нажатия
ml08:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Вс мар 27, 2011 15:05:46 
Вымогатель припоя
Аватар пользователя

Карма: 2
Рейтинг сообщений: 3
Зарегистрирован: Чт июн 11, 2009 07:25:24
Сообщений: 623
Откуда: СПб
Рейтинг сообщения: 0
А мне так никто и не помог :(
А проблема то пустяковая...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Вс мар 27, 2011 15:12:30 
Сверлит текстолит когтями
Аватар пользователя

Карма: 4
Рейтинг сообщений: 30
Зарегистрирован: Ср янв 05, 2011 16:25:15
Сообщений: 1163
Рейтинг сообщения: 0
ploop писал(а):
Это почему не получишь? Какую надо, такую и получишь.

... делать задержку таким способом - удел мазохистов.
Цитата:
..в машинных тактах. А уже зная частоту, на котором работает МК, можно задержку перевести в секунды.
ploop писал(а):
Какую надо, такую и получишь...

...в машинных тактах. А уже зная частоту, на котором работает МК, можно задержку перевести в секунды.
... тому подтверждение :))) . а если поменялась частота кварца или нужно изменить задержку - считать "ручками" заново?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Вс мар 27, 2011 15:14:35 
Сверлит текстолит когтями
Аватар пользователя

Карма: 4
Рейтинг сообщений: 30
Зарегистрирован: Ср янв 05, 2011 16:25:15
Сообщений: 1163
Рейтинг сообщения: 0
ЮТ писал(а):
А мне так никто и не помог :(
А проблема то пустяковая...
... а в отладчике самому проверить нельзя?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Вс мар 27, 2011 15:15:32 
Вымогатель припоя
Аватар пользователя

Карма: 2
Рейтинг сообщений: 3
Зарегистрирован: Чт июн 11, 2009 07:25:24
Сообщений: 623
Откуда: СПб
Рейтинг сообщения: 0
Аэто как?...
Я пару дней только живу в авр студио...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Вс мар 27, 2011 15:20:54 
Модератор
Аватар пользователя

Карма: 68
Рейтинг сообщений: 424
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Сообщений: 13490
Откуда: Тамбовская обл.
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Цитата:
делать задержку таким способом - удел мазохистов.

Ёш твою медь, а константы и макросы на что?
Или в обучалку добавить аналогию RTOS на таймерах и прерываниях?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Вс мар 27, 2011 15:25:06 
Сверлит текстолит когтями
Аватар пользователя

Карма: 4
Рейтинг сообщений: 30
Зарегистрирован: Ср янв 05, 2011 16:25:15
Сообщений: 1163
Рейтинг сообщения: 0
ploop писал(а):
Ёш твою медь, а константы и макросы на что?

... просто нужно читать внимательней
ChipKiller писал(а):
Вообще-то, если нужна программная задержка, то лучше написать макрос.
... а в приводимом примере макросов и духу нет.......


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Вс мар 27, 2011 15:30:10 
Родился

Зарегистрирован: Пн мар 08, 2010 14:16:51
Сообщений: 12
Рейтинг сообщения: 0
ЮТ писал(а):
Аэто как?...
Я пару дней только живу в авр студио...

Debug - Start debbuging. (или Ctrl+shift+alt+f5). и потом каждый шаг - f11.


to ploop

Пробовал таким методом, но не получаеться. пока просто создал вложенные макросы, и поместил в процедуры, чтобы не засорять программу.
Код:

temp_home:
GET_TEMP PB4,t_room
ret


temp_heater:
GET_TEMP PB5,t_heater
ret



Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Вс мар 27, 2011 15:33:20 
Модератор
Аватар пользователя

Карма: 68
Рейтинг сообщений: 424
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Сообщений: 13490
Откуда: Тамбовская обл.
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Цитата:
... а в приводимом примере макросов и духу нет.......

Ааа, виноват, просмотрел.
Но для обучалки это лишнее. Если чел поймёт, как работает задержка, то без проблем напишет макрос (или намучается с отладкой, потом догадается)


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 7952 ]     ... , , , 80, , , ...  

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


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

Сейчас этот форум просматривают: fsem и гости: 23


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

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


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