Ассемблер (ASM) для AVR в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
zero648
Вымогатель припоя
Сообщения: 650
Зарегистрирован: Пн июн 18, 2012 12:01:04
Откуда: Челябинская область, Копейск

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение zero648 »

Перед получением результата нужно дождаться окончания преобразования АЦП:

adc_conv:
sbic ADCSRA, ADSC
rjmp adc_conv


У Вас результат читается сразу после запуска АЦП.
Реклама
Аватара пользователя
gauss
Держит паяльник хвостом
Сообщения: 920
Зарегистрирован: Сб янв 16, 2010 15:34:57
Откуда: Sevsk/Moscow

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение gauss »

Переписал код так, ничего не изменилось:

Код: Выделить всё

.def temp=R16
.def del=R17
.def del2=R18
.cseg
.org 0
ldi temp,high(RamEnd)
out SPH,temp
ldi temp,low(RamEnd)
out SPL,temp
ldi temp,0b00100000
out ADMUX,temp
ldi temp,255
out DDRB,temp
Loop: 
ldi temp,0b11000111
out ADCSRA,temp
rcall Delay
in temp, ADCH
cpi temp, 192
brpl two
cpi temp, 128
brpl red
cpi temp, 64
brpl yellow
cpi temp, 0
brpl no
Cont:
ldi temp,0b11000111
out ADCSRA,temp
rjmp Loop
Delay:
ldi del,128
ldi del2,128
Loop1:
dec del
brne Loop1
dec del2
brne Loop1
ret
red:
ldi temp,0b00000001
out PortB,temp
rjmp Cont
yellow:
ldi temp,0b00000010
out PortB,temp
rjmp Cont
two:
ldi temp,0b00000011
out PortB,temp
rjmp Cont
no:
ldi temp,0
out PortB,temp
rjmp Cont

:idea:
Реклама
Аватара пользователя
zero648
Вымогатель припоя
Сообщения: 650
Зарегистрирован: Пн июн 18, 2012 12:01:04
Откуда: Челябинская область, Копейск

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение zero648 »

А как проверяете? В железе или в протеусе, можно глянуть?
Аватара пользователя
gauss
Держит паяльник хвостом
Сообщения: 920
Зарегистрирован: Сб янв 16, 2010 15:34:57
Откуда: Sevsk/Moscow

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение gauss »

Проверяю в железе, сейчас смоделирую в протеусе

В протеусе работает точно так же, в чем ошибка?! :o :o
:idea:
Реклама
Эиком - электронные компоненты и радиодетали
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Alexeyslav »

С таким подходом ошибок не избежать. Чесно говоря, такую программу даже читать не хочется - рябит в глазах. Я не представляю как можно в такой программе как-то ориентироваться? Там ошибка может на ошибке сидеть и ошибкой погонять а ты ничего не заметишь в этой мешанине. Отдели мух от котлет, сделай отступы - метки должны быть четко видны и отличаться от кода. Это минимально необходимые действия по поиску причин неработоспособности программы. Улучшить читаемость программы можно заменить некоторые участки программы на макроподстановки используя хотя-бы директиву DEFINE.

Соблюдение этих элементарных правил ускорит поиск ошибок раз в 20 если не больше.
Реклама
Аватара пользователя
zero648
Вымогатель припоя
Сообщения: 650
Зарегистрирован: Пн июн 18, 2012 12:01:04
Откуда: Челябинская область, Копейск

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение zero648 »

gauss писал(а):Проверяю в железе, сейчас смоделирую в протеусе

В протеусе работает точно так же, в чем ошибка?! :o :o
Так давай глянем, где смотреть то, протеусопроект выложи хоть.

Убери задержку и поставь проверку бита готовности результата АЦП, что Я выше писал.
brpl по-моему тут совсем не катит, наверно лучше будет brlo и проверять в порядке нарастания, а не убывания.
Реклама
Аватара пользователя
unalex
Мучитель микросхем
Сообщения: 424
Зарегистрирован: Сб авг 25, 2007 22:02:05
Откуда: Германия, Viernheim

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение unalex »

тебе надо не флаг N а флаг C (если со знаком - S)
C: Устанавливается если абсолютное значение K больше абсолютного значения Rd, в ином случае очищается
и естественно вместо brpl использовать brcc (перейти если С очищен) либо brcs(перейти если С установлен)
Коктейль "Рекурсивный": 20% спирта, 30% воды, 50% коктейля "Рекурсивный"...
Rond
Родился
Сообщения: 5
Зарегистрирован: Пн окт 22, 2012 07:50:16

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Rond »

Попытался написать прог. в asm editor, проверку на ошибки не проходит, а допереть не могу. Нуждаюсь в помощи знатоков.
Спойлер.386
.model flat, stdcall
option casemap :none

include \MASM32\INCLUDE\windows.inc
include \MASM32\INCLUDE\kernel32.inc
include \MASM32\INCLUDE\shell32.inc
include \MASM32\INCLUDE\masm32.inc

includelib \MASM32\LIB\kernel32.lib
includelib \MASM32\LIB\shell32.lib
includelib \MASM32\LIB\masm32.lib

; #########################################################################

.data
_a equ 52
_a1 equ 8
_b equ -48
_b1 equ 8
_c equ 12
_c1 equ -8

m1:
mul al, bl
PrintDec al
jno
cbw
PrintDec ax
ret

m1:
imul al, bl
PrintDec ah
jno al
cbw
PrintDec ax
ret

.code
start:
mov al,0
mov bl,0
mov al,_a
mov bl, _a1
call m1
mov al,_b
mov bl,_b1
call m1
mov al,_c
mov bl,_c1
call m1
invoke ExitProcess, 0
end start
Аватара пользователя
zero648
Вымогатель припоя
Сообщения: 650
Зарегистрирован: Пн июн 18, 2012 12:01:04
Откуда: Челябинская область, Копейск

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение zero648 »

Причем тут 386, тема по AVR
favalligi
Родился
Сообщения: 5
Зарегистрирован: Сб фев 09, 2013 00:46:43

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение favalligi »

.DSEG
Variables: .byte 3
Variables2: .byte 1
.CSEG

LDS R16, Variables
LDS R17, Variables+1
LDS R18, Variables+2

SUBI R16,(-1)
SUBI R17,(-2)
SUBI R18,(-1)
STS Variables,R16
STS Variables+1,R17
STS Variables+2,R18

Ребят немогу понять глупую вещь вот тут в коде LDS R16, Variables - загружаем в R16 старший байт по адресу Variables (двухбайтовый же ) соответственно тут LDS R17, Variables+1 сохраняем в R17 его младший байт а затем инкрементным адрес, но я немного не понимаю как он соображает что в первой строчке мы грузим старший байт а во второй младшей прошу разъяснить или это вообще не так работает?
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ibiza11 »

никак не соображает.
вы же сами объявили метку Variables как базовый адрес 3-х байт. У первого байта смещение относительно базового адреса Variables равно нулю, у второго - 1, у третьего - 2.
Что там из этих трех байт старшее, а что младшее решает только программист. С чего Вы вообще взяли, что он соображает где старший байт, а где младший?
И еще, если Выходите произвести математическую операцию с числом, представленным в виде нескольких 8-битных регистров, то математическую операцию сначала надо провести над первым регистром, далее с остальными регистрами, но уже учитывая флаг Carry (C) - флаг переноса.
Ставим плюсы: )
Челюскин
Прорезались зубы
Сообщения: 209
Зарегистрирован: Ср ноя 03, 2010 14:46:17

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Челюскин »

Помогите пожалуйста вот с чем - принимаю по USART байт. Все единицы (это в нормальном состоянии). как проверить его, на наличие хотя бы одного нуля, а потом в принятом виде выдать в порт В? Думаю, но что-то громоздко получается, может что попроще подскажете... МК - тини2313.
Лень - двигатель прогресса!
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение pyzhman »

Код: Выделить всё

INC R16
BREQ m1
не работает?
Docendo discimus
Челюскин
Прорезались зубы
Сообщения: 209
Зарегистрирован: Ср ноя 03, 2010 14:46:17

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Челюскин »

Спасибо, Попробую сейчас.
Лень - двигатель прогресса!
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Alexeyslav »

Инвертировать и проверить на ноль. Или же сразу непосредственно проверить на 255 - CPI R16, 255. убедившись перед этим что 1) байт принят, 2) нет ошибок приема.
Аватара пользователя
*скрыто*
Первый раз сказал Мяу!
Сообщения: 39
Зарегистрирован: Пн дек 31, 2012 13:16:59

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение *скрыто* »

контроллер Tiny13, происходит такая штука. В описании ассемблера для avr команда ST reg,longreg+
пишу

Код: Выделить всё

clr ZH
ldi ZL,0x60
st tmp,Z+
авр студио ругается на последнюю строчку что какой-то invalid register.
но в datasheet нашел что надо наоборот, ST Z+, Rr
Написал так и перестало ругаться.
akl
Друг Кота
Сообщения: 4444
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение akl »

Если бы было написано

Код: Выделить всё

LD tmp,Z+
то и в первом случае на ругался. Разберитесь и почувствуете разницу между загрузкой регистра из памяти и запоминанием регистра в памяти.
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Gudd-Head »

Другими словами, первым операндом идёт приёмник (то, куда записывается), вторым — источник (то, откуда инфа берётся). Это применительно не только к работе с памятью, но и к арифметическим и логическим операциям:
add R1, R2 — результат останется в R1. И т.д.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
*скрыто*
Первый раз сказал Мяу!
Сообщения: 39
Зарегистрирован: Пн дек 31, 2012 13:16:59

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение *скрыто* »

изучаю по книге Д. Мортона , похоже там опечатка, правильно будет так?

Код: Выделить всё

st  Z,r0  ; сохранить то, что было в r0 по адресу содержащемуся в Z
ld  r0,Z  ; загрузить в r0 то, что хранится в ячейке адрес которой был в Z
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Gudd-Head »

Да.
Совет на будущее: доверяйте больше даташитам, а не переведенным книгам, написанным непонятно кем.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Ответить

Вернуться в «AVR»