Страница 5 из 8
Re: Микроконтроллер от и до.......
Добавлено: Ср янв 12, 2011 20:54:07
путник
Доюрого времени.
YS писал(а):mr december[/b], заучивать сразу все команды совершенно необязательно. Некоторые из них вообще используются преимущественно компиляторами языков высокого уровня. Перечисленного списка хватит Вам пока за глаза и за уши.
А говорили за глаза и за уши, в этом коде есть команда def и метка cseg. Значение org не определил.
Что бы зажеч св-ды по порядку.
Код: Выделить всё
.include "2313def.inc" ; библиотека 2313
.def t=R16 ;присваиваем регистру R16 символическое имя t
.def t=R17 ;
.......
.def t=R23
.cseg ;собираемся писать код
.org 0 ;размещаем первую команду в начале памяти
ldi r16, 0b10000000 ;первый
ldi r17, 0b11000000 ;
......
ldi r23, 0b11111111 ;
out DDRB,t ;конфигурируем порт на выход
out portB,t ;зажигаем светодиоды
LOOP: ;этот пустой бесконечный цикл нужен для однозначноcти завершения программы
rjmp LOOP
Для бегущ св-да
Код: Выделить всё
ldi r16, 0b10000000 ;первый
ldi r17, 0b01000000 ;
......
ldi r23, 0b00000001 ;
ldi r22, ob00000010 ;
......
ldi r16, 0b10000000 ;
Какая команда для повторения цикла бег. св-ов.
Спасибо.
Re: Микроконтроллер от и до.......
Добавлено: Ср янв 12, 2011 21:01:20
YS
Нет, Вы не поняли принципа...
команда def и метка cseg. Значение org не определил.
.def это не команда. Все перечисленное -
директивы препроцессора.
По поводу огоньков - читаем начиная отсюда и далее (в конце каждой страницы есть ссылка "дальше"):
http://radiokot.ru/start/mcu_fpga/avr/05/
Re: Микроконтроллер от и до.......
Добавлено: Ср янв 12, 2011 21:04:05
путник
Gudd-Head писал(а):
Конечно понимаю, хороший стиль указывать что, как и куда. Но в первый раз можно ведь и без этого?!?
Я считаю что надо сразу писать с коменариями, так легче на будущее.
Re: Микроконтроллер от и до.......
Добавлено: Ср янв 12, 2011 21:14:17
Gudd-Head
mr december писал(а):Я считаю что надо сразу писать с коменариями, так легче на будущее.
Я имел в виду не комменты, а директивы компилятору .cseg .org 0
Код: Выделить всё
.def t=R16 ;присваиваем регистру R16 символическое имя t
.def t=R17 ;
.......
.def t=R23
Бред. Какой смысл присваивать всем регистрам одно и то же имя???
Код: Выделить всё
ldi r16, 0b10000000 ;первый
ldi r17, 0b11000000 ;
......
ldi r23, 0b11111111 ;
Тем более что дальше оно нигде не используется?
Какая команда для повторения цикла бег. св-ов.
У вас же выше цикл LOOP написан.
Re: Микроконтроллер от и до.......
Добавлено: Ср янв 12, 2011 21:45:45
DX168B
mr december Вы назначили одно и то же имя "t" трём регистрам.
.def(от англ.
"define" - определить) - это команда не микроконтроллеру, а компилятору. Такие команды называют
директивами препроцессора. К ним так же относятся:
.include "filename.inc" - включить заголовочный файл с описаниями регистров конкретного МК
.cseg - указание компилятору, что всё, что ниже - является по сути программой МК для Flash
.dseg - указание компилятору, что тут будут описываться имена ячейкам и массивам ОЗУ.
.eseg - указание компилятору, что тут будут располагаться данные для EEPROM.
.org 0x0XXX(адрес в ПЗУ, ОЗУ или в EEPROM) - указание компилятору, что все строки ниже этой директивы будут располагаться начиная с указанного адреса и далее.
.def - назначить или определить. Например:
Код: Выделить всё
.include "tn2313def.inc"
;----------------------------------
.def temp = R16 ; Назовём регистр r16 именем temp.
; Теперь вместо r16 мы можем писать temp.
;----------------------------------
.cseg
.org 0x0000
ldi temp, 0xFF ; или 0b11111111
out DDRB, temp
ldi temp, 0x0F ; Или 0b00001111
out PORTB, temp ; зажигаем первые 4 светодиода.
.equ - практически тоже самое, что и .def
.db - байтовый массив.
.dw - массив слов. (в основном массив меток имеющихся в программе)
Используется в основном для косвенных переходов через регистровые пары с использованием команд icall и ijmp.
.byte XX - выделение определённого количества байт в ОЗУ. Например:
Код: Выделить всё
.dseg
buffer: .byte 10 ; Выделим 10 ячеек(байтов) в ОЗУ под имя buffer
Re: Микроконтроллер от и до.......
Добавлено: Ср янв 12, 2011 21:50:48
путник
Gudd-Head писал(а):У вас же выше цикл LOOP написан.
Я почему то подумал, что это завершение программы. Цикл другой
строка 1
строка 2
строка 3
команда возврата к строке 1.
Gudd-Head писал(а):.def t=R16 ;присваиваем регистру R16 символическое имя t
.def t=R17 ;
.......
.def t=R23
Бред. Какой смысл присваивать всем регистрам одно и то же имя???
Код:
ldi r16, 0b10000000 ;первый
ldi r17, 0b11000000 ;
......
ldi r23, 0b11111111 ;
Тем более что дальше оно нигде не используется?
Это мое мышление, но похоже я сильно ошибся.
Re: Микроконтроллер от и до.......
Добавлено: Ср янв 12, 2011 21:55:48
Gudd-Head
mr december писал(а):Я почему то подумал, что это завершение программы. Цикл другой
строка 1
строка 2
строка 3
команда возврата к строке 1.
Нет, это именно цикл. Вам надо сделать так:
Код: Выделить всё
Метка:
строка 1
строка 2
строка 3
rjmp Метка
Где Метка - это ссылка на область кода, адрес которой вычислит компилятор и потом вставит в команду rjmp. В предыдущем примере Метка = LOOP.
Re: Микроконтроллер от и до.......
Добавлено: Ср янв 12, 2011 22:06:49
путник
Мона так
Код: Выделить всё
.def temp r16
.def temp1 r17
.def temp2 r18
или эта ошибка. Как тогда зажечь св-ды по очереди?
Re: Микроконтроллер от и до.......
Добавлено: Ср янв 12, 2011 22:17:02
DX168B
Это уже вернее, но Вы забыли добавить = между именем и регистром.
Вот правильный вариант:
Код: Выделить всё
.def temp = r16
.def temp1 = r17
.def temp2 = r18
А зажечь светодиоды можно так:
Разберём один байт:
0b00001111
Код: Выделить всё
__________________
|128| 64| 32| 16| 8| 4| 2| 1|
---------------------------------
| 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 |
---------------------------------
Чтобы получить нам например 0b00000011 из 0b00000001
Нам надо прибавить 2 к 0b00000001
Чтобы получить нам например 0b00000111 из 0b00000011
Нам надо прибавить 4 к 0b00000011
Делается это так:
Код: Выделить всё
.include "tn2313def.inc"
;--------------------------
.def temp0 = r16
.def temp1 = r17
;--------------------------
.cseg
.org 0x0000
ldi temp0, Low(ramend) ; Указываем адрес конца ОЗУ
out SPL, temp0 ; Это инициализация стека. Без неё не будет работать команда rcall
ldi temp0, 0b11111111
out DDRB, temp0 ; настроим порт Б на выход.
;------------------------
LOOP:
ldi temp0, 0b00000001
out PORTB, temp0 ; зажигаем первый светодиод.
ldi temp1, 2
add temp0, temp1 ; прибавим 2 из temp1 к 0b00000001 из temp0
; В итоге в temp0 получится 0b00000011
rcall DELAY ; вызовем подпрограмму задержки на исполнение.
; как она закончится, вернёмся суда.
out PORTB, temp0 ;Отправим после задержки в портб обновлённое значение
; этим мы зажжём следующий светодиод
ldi temp1, 4
add temp0, temp1 ; прибавим 4 из temp1 к 0b00000011 из temp0
; В итоге в temp0 получится 0b00000111
rcall DELAY ; вызовем подпрограмму задержки на исполнение.
; как она закончится, вернёмся суда.
out PORTB, temp0 ;Отправим после задержки в портб обновлённое значение
; этим мы зажжём следующий светодиод
ldi temp1, 8
add temp0, temp1 ; прибавим 8 из temp1 к 0b00000111 из temp0
; В итоге в temp0 получится 0b00001111
rcall DELAY ; вызовем подпрограмму задержки на исполнение.
; как она закончится, вернёмся суда.
out PORTB, temp0 ;Отправим после задержки в портб обновлённое значение
; этим мы зажжём следующий светодиод
ldi temp1, 16
add temp0, temp1 ; прибавим 16 из temp1 к 0b00001111 из temp0
; В итоге в temp0 получится 0b00011111
rcall DELAY ; вызовем подпрограмму задержки на исполнение.
; как она закончится, вернёмся суда.
out PORTB, temp0 ;Отправим после задержки в портб обновлённое значение
; этим мы зажжём следующий светодиод
ldi temp1, 32
add temp0, temp1 ; прибавим 32 из temp1 к 0b00011111 из temp0
; В итоге в temp0 получится 0b00111111
rcall DELAY ; вызовем подпрограмму задержки на исполнение.
; как она закончится, вернёмся суда.
out PORTB, temp0 ;Отправим после задержки в портб обновлённое значение
; этим мы зажжём следующий светодиод
; Дальше продолжи сам c числами 64 и 128
rjmp LOOP
;-----------------------------------
DELAY: ;это подпрограмма задержки
dec r18
brne DELAY
dec r19
brne DELAY
dec r20
brne DELAY
dec r21
brne DELAY
ret ;Выходим из задержки
Можно сделать и так:
Код: Выделить всё
.include "tn2313def.inc"
;--------------------------
.def temp0 = r16
;--------------------------
.cseg
.org 0x0000
ldi temp0, Low(ramend) ; Указываем адрес конца ОЗУ
out SPL, temp0 ; Это инициализация стека. Без неё не будет работать команда rcall
ldi temp0, 0b11111111
out DDRB, temp0 ; настроим порт Б на выход.
ldi temp0, 0b00000000
out PORTB, temp0 ;Гасим на всякий порт Б
;------------------------------------
LOOP:
sbi PORTB, 0 ;зажигаем 1й светодиод
rcall DELAY ; вызовем задержку
sbi PORTB, 1 ;зажигаем 2й светодиод
rcall DELAY ; вызовем задержку
sbi PORTB, 2 ;зажигаем 3й светодиод
rcall DELAY ; вызовем задержку
sbi PORTB, 3 ;зажигаем 4й светодиод
rcall DELAY ; вызовем задержку
sbi PORTB, 4 ;зажигаем 5й светодиод
rcall DELAY ; вызовем задержку
sbi PORTB, 5 ;зажигаем 6й светодиод
rcall DELAY ; вызовем задержку
sbi PORTB, 6 ;зажигаем 7й светодиод
rcall DELAY ; вызовем задержку
sbi PORTB, 7 ;зажигаем 8й светодиод
rcall DELAY ; вызовем задержку
out PORTB, temp0 ;гасим все светодиоды (мы уже кинули в начале 0b00000000 в temp0)
rjmp LOOP ;вернёмся в начало
;-----------------------------------
DELAY: ;это подпрограмма задержки
dec r18
brne DELAY
dec r19
brne DELAY
dec r20
brne DELAY
dec r21
brne DELAY
ret ;Выходим из задержки
P.S. Если нет AVR Studio, то советую скачать. Неплохая среда разработки.

Re: Микроконтроллер от и до.......
Добавлено: Чт янв 13, 2011 23:09:14
путник
Доброго времени.
AVR Studio скачена еще с первых постов, еще изучаю.
Что обозначает стрелочка и вкладки processor, build, message, find in files, breakpoint and tracepoints.
Спасибо.
Re: Микроконтроллер от и до.......
Добавлено: Чт янв 13, 2011 23:15:58
DX168B
Зелёная стрелочка - запуск отладки программы.
biuld - скомпилировать.
build and run - скомпилировать и запустить программу на отладку.
messages - сообщения, выводимые в ходе работы AVR Studio.
breakpoint - точка останова. Очень полезная штука в ходе отладки программы.
А вообще, есть тема, касающаяся AVR Studio.
AVR Studio 4 в вопросах и ответах.
Re: Микроконтроллер от и до.......
Добавлено: Пт янв 21, 2011 16:44:21
путник
Доброго времени.
Помогит прошить AT90S2313. AVR Studio выдает ошибку, прошивал два раза. Прошил - ошибка, стер - прошил - ошибка(так мона и загубить МК). Стал искать инфу по МК, что то все его ругают. Какая правильная плата адаптера (собирал эту
http://www.radiokot.ru/start/mcu_fpga/avr/03/). Винете их много, какой нужен кварц для работы МК(у меня поставлен на 4 МГц).
Спасибо.
Да. В чем разница "delay" и "my delay"
Re: Микроконтроллер от и до.......
Добавлено: Вт янв 25, 2011 10:09:15
путник
Доброго времени.
Где же Вы учителя, помогит разобраться с AT90S2313 (другого нет).
Спасибо.
Re: Микроконтроллер от и до.......
Добавлено: Вт янв 25, 2011 12:42:15
DX168B
Как я понял, у Вас есть LPT порт. Так?
Re: Микроконтроллер от и до.......
Добавлено: Вт янв 25, 2011 21:24:53
путник
Доброго времени.
У меня ноутбук, только USB.
mr december писал(а):
Однажды собрал прогер AVR 910. Повторил схему, прикольно, работает. К схеме была прошивка.
По указанной ссылки собрал адаптер.
Из описания на МК.
Код: Выделить всё
Полностью статический режим работы:
От 0 до 10 МГц, при питании от 4.0 В до 6.0 В
От 0 до 4 МГц, при питании от 2.7 В до 6.0 В
Питал 4,5 В кварц 4МГц.
Спасибо.
Re: Микроконтроллер от и до.......
Добавлено: Вт янв 25, 2011 23:23:01
Gudd-Head
mr december писал(а):Питал 4,5 В кварц 4МГц.
Здорово
Пожалуйста, формулируйте свои вопросы конкретнее, используя слова "ЧТО", "КДЕ", "КОГДА" и т.д. и знак вопроса "
?", а то каждый ваш пост больше похож на утверждение, нежели на вопрос. С уважением.
Re: Микроконтроллер от и до.......
Добавлено: Вт янв 25, 2011 23:55:50
путник
Доброго времени.
Gudd-Head, немного выше я просил о помощи. Надо прошить AT90S2313, сделал две попытки(не удачно).
Спасибо.
Re: Микроконтроллер от и до.......
Добавлено: Ср янв 26, 2011 00:32:10
ploop
DX168B писал(а):
.include "filename.inc" - включить заголовочный файл с описаниями регистров конкретного МК
Так же, как и включить любой другой файл (например свой). Туда можно засунуть определения регистров, констант, макросов. Здорово разгружает основной листинг, повышая читабельность.
Re: Микроконтроллер от и до.......
Добавлено: Ср янв 26, 2011 02:52:32
DX168B
Начинающему пока и этого хватит.
Я конечно большие программы леплю из нескольких файлов.
Обычно вызываемые подпрограммы оформляю в отдельном файле и большие массивы данных в отдельных. Получается где-то так в основном файле:
Код: Выделить всё
.include "tn26def.inc"
.include "reg_dseg_equals.inc"
.include "eseg_arrays.asm"
.cseg
.org 0x0000
..................
...........
..................
...........
..................
...........
.include "subrutines.asm"
.include "cseg_arrays.asm"
В основном файле лежит сам алгоритм программы, векторы и обработчики прерываний. Всё остальное располагаю в отдельных файлах.
Адресное расположение и порядок включаемых частей во флеше не указываю (.org 0x0XXX), так как компилятор не тупой и всё правильно делает.
Re: Микроконтроллер от и до.......
Добавлено: Чт янв 27, 2011 00:52:54
путник
Доброго времени.
Есть прогер AVR910, адаптер на МК AT90S2313.
Прошивал два раза (не удачно), AVR Studio выдает ошибку.
Питание на адатер отдельное 4,5 В кварц на 4МГц
Что не так? Почему ошибка?
Спасибо.