Страница 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
Проверяю в железе, сейчас смоделирую в протеусе

В протеусе работает точно так же, в чем ошибка?! :o :o

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

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

Соблюдение этих элементарных правил ускорит поиск ошибок раз в 20 если не больше.

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

Добавлено: Пн фев 04, 2013 22:56:47
zero648
gauss писал(а):Проверяю в железе, сейчас смоделирую в протеусе

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

Убери задержку и поставь проверку бита готовности результата АЦП, что Я выше писал.
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

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

INC R16
BREQ m1
не работает?

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+
пишу

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

clr ZH
ldi ZL,0x60
st tmp,Z+
авр студио ругается на последнюю строчку что какой-то invalid register.
но в datasheet нашел что надо наоборот, ST Z+, Rr
Написал так и перестало ругаться.

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

Добавлено: Ср фев 13, 2013 02:45:57
akl
Если бы было написано

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

LD tmp,Z+
то и в первом случае на ругался. Разберитесь и почувствуете разницу между загрузкой регистра из памяти и запоминанием регистра в памяти.

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
Да.
Совет на будущее: доверяйте больше даташитам, а не переведенным книгам, написанным непонятно кем.