Страница 176 из 400
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пн фев 04, 2013 18:17:05
zero648
Перед получением результата нужно дождаться окончания преобразования АЦП:
adc_conv:
sbic ADCSRA, ADSC
rjmp adc_conv
У Вас результат читается сразу после запуска АЦП.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пн фев 04, 2013 18:27:32
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
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пн фев 04, 2013 19:26:10
zero648
А как проверяете? В железе или в протеусе, можно глянуть?
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пн фев 04, 2013 20:36:52
gauss
Проверяю в железе, сейчас смоделирую в протеусе
В протеусе работает точно так же, в чем ошибка?!

Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пн фев 04, 2013 21:25:19
Alexeyslav
С таким подходом ошибок не избежать. Чесно говоря, такую программу даже читать не хочется - рябит в глазах. Я не представляю как можно в такой программе как-то ориентироваться? Там ошибка может на ошибке сидеть и ошибкой погонять а ты ничего не заметишь в этой мешанине. Отдели мух от котлет, сделай отступы - метки должны быть четко видны и отличаться от кода. Это минимально необходимые действия по поиску причин неработоспособности программы. Улучшить читаемость программы можно заменить некоторые участки программы на макроподстановки используя хотя-бы директиву DEFINE.
Соблюдение этих элементарных правил ускорит поиск ошибок раз в 20 если не больше.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пн фев 04, 2013 22:56:47
zero648
gauss писал(а):Проверяю в железе, сейчас смоделирую в протеусе
В протеусе работает точно так же, в чем ошибка?!

Так давай глянем, где смотреть то, протеусопроект выложи хоть.
Убери задержку и поставь проверку бита готовности результата АЦП, что Я выше писал.
brpl по-моему тут совсем не катит, наверно лучше будет
brlo и проверять в порядке нарастания, а не убывания.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт фев 05, 2013 04:21:29
unalex
тебе надо не флаг N а флаг C (если со знаком - S)
C: Устанавливается если абсолютное значение K больше абсолютного значения Rd, в ином случае очищается
и естественно вместо brpl использовать brcc (перейти если С очищен) либо brcs(перейти если С установлен)
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Чт фев 07, 2013 00:47:51
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
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Чт фев 07, 2013 05:05:35
zero648
Причем тут 386, тема по AVR
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Сб фев 09, 2013 00:54:21
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 его младший байт а затем инкрементным адрес, но я немного не понимаю как он соображает что в первой строчке мы грузим старший байт а во второй младшей прошу разъяснить или это вообще не так работает?
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Сб фев 09, 2013 06:08:10
ibiza11
никак не соображает.
вы же сами объявили метку Variables как базовый адрес 3-х байт. У первого байта смещение относительно базового адреса Variables равно нулю, у второго - 1, у третьего - 2.
Что там из этих трех байт старшее, а что младшее решает только программист. С чего Вы вообще взяли, что он соображает где старший байт, а где младший?
И еще, если Выходите произвести математическую операцию с числом, представленным в виде нескольких 8-битных регистров, то математическую операцию сначала надо провести над первым регистром, далее с остальными регистрами, но уже учитывая флаг Carry (C) - флаг переноса.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт фев 12, 2013 18:27:30
Челюскин
Помогите пожалуйста вот с чем - принимаю по USART байт. Все единицы (это в нормальном состоянии). как проверить его, на наличие хотя бы одного нуля, а потом в принятом виде выдать в порт В? Думаю, но что-то громоздко получается, может что попроще подскажете... МК - тини2313.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт фев 12, 2013 18:35:39
pyzhman
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт фев 12, 2013 18:47:14
Челюскин
Спасибо, Попробую сейчас.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт фев 12, 2013 20:59:41
Alexeyslav
Инвертировать и проверить на ноль. Или же сразу непосредственно проверить на 255 - CPI R16, 255. убедившись перед этим что 1) байт принят, 2) нет ошибок приема.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт фев 12, 2013 23:44:40
*скрыто*
контроллер Tiny13, происходит такая штука. В описании ассемблера для avr команда ST reg,longreg+
пишу
авр студио ругается на последнюю строчку что какой-то invalid register.
но в datasheet нашел что надо наоборот, ST Z+, Rr
Написал так и перестало ругаться.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср фев 13, 2013 02:45:57
akl
Если бы было написано
то и в первом случае на ругался. Разберитесь и почувствуете разницу между загрузкой регистра из памяти и запоминанием регистра в памяти.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср фев 13, 2013 09:03:14
Gudd-Head
Другими словами, первым операндом идёт приёмник (то, куда записывается), вторым — источник (то, откуда инфа берётся). Это применительно не только к работе с памятью, но и к арифметическим и логическим операциям:
add R1, R2 — результат останется в R1. И т.д.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср фев 13, 2013 16:59:52
*скрыто*
изучаю по книге Д. Мортона , похоже там опечатка, правильно будет так?
Код: Выделить всё
st Z,r0 ; сохранить то, что было в r0 по адресу содержащемуся в Z
ld r0,Z ; загрузить в r0 то, что хранится в ячейке адрес которой был в Z
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср фев 13, 2013 22:19:59
Gudd-Head
Да.
Совет на будущее: доверяйте больше даташитам, а не переведенным книгам, написанным непонятно кем.