Страница 119 из 400
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт янв 27, 2012 20:02:33
ploop
1. чем команда "OR" отличается от "ORI" ??? я вроде так понял, что первая для констант, вторая для регистров.... объясните, пожалуйста.?
Наоборот. Первая работает регистр-регистр, вторая - регистр-константа
#ifndef F_CPU
#error "F_CPU must be defined!"
#endif
Если константа F_CPU не задана, вывести ошибку с текстом "F_CPU must be defined!"
#if F_CPU < 4000000
#warning "F_CPU too low, possible wrong delay"
#endif
Если константа F_CPU меньше 4000000 вывести ошибку с текстом "F_CPU too low, possible wrong delay"
#define ...
задать константу такую-то
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт янв 27, 2012 20:19:28
Tanat
Челюскин писал(а):
#ifndef F_CPU
#error "F_CPU must be defined!"
#endif
Это значит, что F_CPU должно было быть описано выше командой #define, иначе компилятор выдаст ошибку с прекращением компиляции и выводом строки #error "F_CPU must be defined!"
Челюскин писал(а):
#if F_CPU < 4000000
#warning "F_CPU too low, possible wrong delay"
#endif
Тут при компиляции будет варниг с сообщением что частота F_CPU слишком мала и возможно будет ошибочная длительность задержки
Челюскин писал(а):
#define CYCLES_PER_US (F_CPU/1000000)
#define C4PUS (CYCLES_PER_US/4)
#define DVUS(x) (C4PUS*x)
Эти определения вычисляют значения для подстановки их в подпрограммы организации задержки.
Например:
#define F_CPU 4000000 //(4MHz)
// CYCLES_PER_US (F_CPU/1000000) 4000000/1000000 результат 4
//C4PUS (4/4) результат = 1 (4-ка получена выше)
//А вот эта команда и провернет все выше описанное
r18 = DVUS(x)
// (((F_CPU/1000000)/4)*x) где х-переменная или константа
//и в нашем случае r18 будет равно х
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт янв 27, 2012 20:24:17
Челюскин
Спасибо огромное. вроде понял. может подскажете, где можно почитать про такие функции типа #error и #ifnde.????
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт янв 27, 2012 20:36:05
Tanat
Челюскин писал(а):Спасибо огромное. вроде понял. может подскажете, где можно почитать про такие функции типа #error и #ifnde.????
НЕ ФУНКЦИИ - это директивы, которые компилятор использует при компиляции кода.
Поищите справочник по языку которым пользуетесь.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт янв 27, 2012 20:59:10
Челюскин
понял, что ничё пока не знаю про этот язык. спасибо еще раз всем за терпение и Ваши объяснения. буду дальше вникать в ассемблер...
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вс янв 29, 2012 22:46:53
AaNnDdRrEeYy
Здравствуйте, господа.
Пишу программу на ассемблере можно сказать первую в жизни,
есть обработчик прерывания АЦП он срабатывает все нормально в конце обработчика стоит как положено reti (не ret).
в начале программы так же стоит инициализация стека.
все работает нормально.
но если в обработчике прерывания я использую команду
CP либо CPI вываливается ошибка
Program counter at unprogrammed flash location
и программа не возвращается в бесконечный цикл, вообщем она теряет место от куда была вызвана.
подскажите почему так происходит.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вс янв 29, 2012 22:49:50
Arlleex
Программу приведите, мы не научились обладать экстрасенсорными способностями...
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вс янв 29, 2012 22:50:54
ploop
Наверное надо показать обработчик.
После CP есть условные переходы (BRxx) куда-то? Они верны?
Сам по себе CP не может никак повлиять на ход выполнения программы, он всего лишь устанавливает флаги...
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вс янв 29, 2012 23:04:39
AaNnDdRrEeYy
вот текст, убрал все что не относиться к ошибке
.include "C:\VMLAB\include\m8535def.inc"
.def temp =r16
.def temp2 =r17
.def temp3 =r26
.cseg
.org 0
rjmp start
reti ; Addr $01
reti ; Addr $02
rjmp timer2comp ; Addr $03 - вектор прерывания по таймеру 2 (сравнение с числом в регистре)
reti ; Addr $04
reti ; Addr $05
reti ; Addr $06
reti ; Addr $07
reti ; Addr $08
reti ; Addr $09
reti ; Addr $0A
reti ; Addr $0B
reti ; Addr $0C
reti ; Addr $0D
rjmp ADC_ConversionComplite ; Addr $0E
reti ; Addr $0F
reti ; Addr $10
reti ; Addr $11
reti ; Addr $12
reti ; Addr $13
reti ; Addr $14
start:
;настройка АЦП и таймера
ldi temp,0b0110000
out ADMUX,temp
ldi temp,0b11101111
out ADCSRA,temp
ldi temp,0b00001111
ldi temp,0b00000000
out TCNT2,temp
ldi temp,5
out OCR2,temp
ldi temp,0b10000000
out TIMSK,temp
ldi temp,RamEnd
out SPL,temp
sei
forever:
nop
nop
nop
nop
rjmp forever
timer2comp:
nop
nop
reti
ADC_ConversionComplite:
in temp,ADCH
mov temp2,temp
ldi temp,255
;******ЕСЛИ ЗАКОММЕНТИРОВАТЬ ЭТИ ДВЕ СТРОКИ ТО РАБОТАЕТ
; а с ними ошибка
cp temp2,temp
brsh label1
;*******************************************************
label1:
nop
nop
reti
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вс янв 29, 2012 23:17:18
DX168B
Ну а какой смысл с участка
Код: Выделить всё
cp temp2,temp
brsh label1
;*******************************************************
label1:
nop
Ваше условие в данном слу-ча-е... БЕСПОЛЕЗНО!

Если между brsh label1 и label1 вписать что нибудь полезное, то тогда будут два действия в зависимости от того, temp2 больше или меньше temp1
Типа так:
Код: Выделить всё
cp temp2, temp
brsh label1
; действие, если temp2 < temp
reti
Label1:
;Действие, если temp2 >= temp
reti
Вот и всё
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вс янв 29, 2012 23:21:45
AaNnDdRrEeYy
дело не в условии а в том что, ошибка в ходе выполнения.
после reti не возвращается в бесконечный цикл.
там можно вообще без brsh написать все равно.
у меня VMLAB 3.15. откомпилируйте и увидите.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вс янв 29, 2012 23:27:47
DX168B
К чёрту VMLAB. Отказался от него давно. Куча ошибок в коде, который нормально компилится в других средах и работает в железе безупречно. Пользуюсь AVR Studio 4.
Никаких проблем нет.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вс янв 29, 2012 23:29:45
ploop
ааааа... опять симуляторы...
В железке-то не пытались запустить?
То, что между метками, как-то использует стек? Или прямо этот код (как вы привели, с пустотой между метками) не компилится? Если второе - глюк симулятора 100%
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вс янв 29, 2012 23:32:30
DX168B
ploop писал(а):глюк симулятора 100%
Вот с этим я соглашусь на 300%. Имел я дело с этим симулятором. У него кажется какие - то проблемы с кодировками символов в исходниках или сам он "БАГ на БАГе"
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вс янв 29, 2012 23:33:44
AaNnDdRrEeYy
тот код что выложил именно в нем ошибка. он компилируется но в процессе тестирования встает на последнюю строчку кода и ни куда больше не идет.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вс янв 29, 2012 23:39:25
DX168B
В коде нет ошибки. Меняйте среду разработки. Используйте среду AVR Studio 4.
Это официальная среда от ATMEL. Бесплатная. У них на сайте её уже нет, ищите на торрентах.
А если хочется ещё и потыкать по виртуальным кнопкам или помигать виртуальными светодиодами и многое-многое другое, то пользуйтесь программой Proteus.
У меня когда-то этот VMLAB часто на ровном месте спотыкался. Пришлось отказаться от него.
Блин... Не заметил.
В меге 8535 инициализация стека делается так:
Код: Выделить всё
ldi temp, Low(RAMend)
out SPL, temp
ldi temp, High(RAMend)
out SPH, temp
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вс янв 29, 2012 23:49:15
ploop
тот код что выложил именно в нем ошибка.
Ну, уже ответили. VMLAB тоже пробовал, что-то он вообще не в тему оказался... Уж лучше (чур меня) протеус.
Блин, и как я умудряюсь по 4К кода в одном блокноте писать... Иногда страницы 2-3 нафигаришь, зашьёшь, а он не то, что бы скомпилился без ошибки, так еще и работает!
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вс янв 29, 2012 23:53:18
DX168B
AaNnDdRrEeYy неправильно стек инициализировал.
Указал только младшую часть адреса ОЗУ под стек.
Код: Выделить всё
ldi temp,0b10000000
out TIMSK,temp
ldi temp,RamEnd ;Вот тут
out SPL,temp
sei
forever:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вс янв 29, 2012 23:56:05
ploop
Угу, теперь вижу. Тоже не заметил, в куче всё написано, хотя обычно его выделяют как-то...
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вс янв 29, 2012 23:57:30
AaNnDdRrEeYy
копирнул исходник в AVR stodio 4 так он мне сразу ругнулся на заголовочный файл
.include "C:\VMLAB\include\m8535def.inc"
выташил от туда эти строки
;UCSRA
.equ RXC =7
.equ TXC =6
.equ UDRE =5
.equ FE =4
+++РУГАЕТСЯ ВОТ НА ЭТУ СТРОКУ
.equ OR =3 ; old name kept for compatibilty
+++
думаю что дело не в компиляторе а в заголовочных файлов на другом контроллере наверно работало бы.