Микроконтроллер от и до.......

Здесь принимаются все самые невообразимые вопросы... Главное - не стесняйтесь. Поверьте, у нас поначалу вопросы были еще глупее :)
Аватара пользователя
путник
Открыл глаза
Сообщения: 43
Зарегистрирован: Сб дек 25, 2010 19:43:06
Откуда: Великй Новгород

Re: Микроконтроллер от и до.......

Сообщение путник »

Доюрого времени.

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 ;


Какая команда для повторения цикла бег. св-ов.

Спасибо.
Ищу мудрого кота, который будет моим гуру.
Аватара пользователя
YS
Друг Кота
Сообщения: 7518
Зарегистрирован: Вс мар 29, 2009 22:09:05
Контактная информация:

Re: Микроконтроллер от и до.......

Сообщение YS »

Нет, Вы не поняли принципа...

команда def и метка cseg. Значение org не определил.


.def это не команда. Все перечисленное - директивы препроцессора.

По поводу огоньков - читаем начиная отсюда и далее (в конце каждой страницы есть ссылка "дальше"): http://radiokot.ru/start/mcu_fpga/avr/05/
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Аватара пользователя
путник
Открыл глаза
Сообщения: 43
Зарегистрирован: Сб дек 25, 2010 19:43:06
Откуда: Великй Новгород

Re: Микроконтроллер от и до.......

Сообщение путник »

Gudd-Head писал(а):Конечно понимаю, хороший стиль указывать что, как и куда. Но в первый раз можно ведь и без этого?!?


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

Re: Микроконтроллер от и до.......

Сообщение 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 написан.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
DX168B
Друг Кота
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)
Контактная информация:

Re: Микроконтроллер от и до.......

Сообщение 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
Последний раз редактировалось DX168B Ср янв 12, 2011 21:53:18, всего редактировалось 1 раз.
I am DX168B and this is my favourite forum on internet!
Аватара пользователя
путник
Открыл глаза
Сообщения: 43
Зарегистрирован: Сб дек 25, 2010 19:43:06
Откуда: Великй Новгород

Re: Микроконтроллер от и до.......

Сообщение путник »

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 ;

Тем более что дальше оно нигде не используется?


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

Re: Микроконтроллер от и до.......

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

mr december писал(а):Я почему то подумал, что это завершение программы. Цикл другой
строка 1
строка 2
строка 3
команда возврата к строке 1.

Нет, это именно цикл. Вам надо сделать так:

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

Метка:
строка 1
строка 2
строка 3
rjmp Метка

Где Метка - это ссылка на область кода, адрес которой вычислит компилятор и потом вставит в команду rjmp. В предыдущем примере Метка = LOOP.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
путник
Открыл глаза
Сообщения: 43
Зарегистрирован: Сб дек 25, 2010 19:43:06
Откуда: Великй Новгород

Re: Микроконтроллер от и до.......

Сообщение путник »

Мона так

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

.def temp r16
.def temp1 r17
.def temp2 r18


или эта ошибка. Как тогда зажечь св-ды по очереди?
Ищу мудрого кота, который будет моим гуру.
Аватара пользователя
DX168B
Друг Кота
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)
Контактная информация:

Re: Микроконтроллер от и до.......

Сообщение 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, то советую скачать. Неплохая среда разработки.
Изображение
I am DX168B and this is my favourite forum on internet!
Аватара пользователя
путник
Открыл глаза
Сообщения: 43
Зарегистрирован: Сб дек 25, 2010 19:43:06
Откуда: Великй Новгород

Re: Микроконтроллер от и до.......

Сообщение путник »

Доброго времени.

AVR Studio скачена еще с первых постов, еще изучаю.

Что обозначает стрелочка и вкладки processor, build, message, find in files, breakpoint and tracepoints.

Спасибо.
Вложения
AvrStudi.PNG
(50.34 КБ) 347 скачиваний
acr.PNG
(17.34 КБ) 348 скачиваний
Ищу мудрого кота, который будет моим гуру.
Аватара пользователя
DX168B
Друг Кота
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)
Контактная информация:

Re: Микроконтроллер от и до.......

Сообщение DX168B »

Зелёная стрелочка - запуск отладки программы.
biuld - скомпилировать.
build and run - скомпилировать и запустить программу на отладку.
messages - сообщения, выводимые в ходе работы AVR Studio.
breakpoint - точка останова. Очень полезная штука в ходе отладки программы.
А вообще, есть тема, касающаяся AVR Studio.

AVR Studio 4 в вопросах и ответах.
I am DX168B and this is my favourite forum on internet!
Аватара пользователя
путник
Открыл глаза
Сообщения: 43
Зарегистрирован: Сб дек 25, 2010 19:43:06
Откуда: Великй Новгород

Re: Микроконтроллер от и до.......

Сообщение путник »

Доброго времени.

Помогит прошить AT90S2313. AVR Studio выдает ошибку, прошивал два раза. Прошил - ошибка, стер - прошил - ошибка(так мона и загубить МК). Стал искать инфу по МК, что то все его ругают. Какая правильная плата адаптера (собирал эту http://www.radiokot.ru/start/mcu_fpga/avr/03/). Винете их много, какой нужен кварц для работы МК(у меня поставлен на 4 МГц).

Спасибо.

Да. В чем разница "delay" и "my delay"
Ищу мудрого кота, который будет моим гуру.
Аватара пользователя
путник
Открыл глаза
Сообщения: 43
Зарегистрирован: Сб дек 25, 2010 19:43:06
Откуда: Великй Новгород

Re: Микроконтроллер от и до.......

Сообщение путник »

Доброго времени.

Где же Вы учителя, помогит разобраться с AT90S2313 (другого нет).

Спасибо.
Ищу мудрого кота, который будет моим гуру.
Аватара пользователя
DX168B
Друг Кота
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)
Контактная информация:

Re: Микроконтроллер от и до.......

Сообщение DX168B »

Как я понял, у Вас есть LPT порт. Так?
I am DX168B and this is my favourite forum on internet!
Аватара пользователя
путник
Открыл глаза
Сообщения: 43
Зарегистрирован: Сб дек 25, 2010 19:43:06
Откуда: Великй Новгород

Re: Микроконтроллер от и до.......

Сообщение путник »

Доброго времени.

У меня ноутбук, только USB.

mr december писал(а):Однажды собрал прогер AVR 910. Повторил схему, прикольно, работает. К схеме была прошивка.


По указанной ссылки собрал адаптер.

Из описания на МК.

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

Полностью статический режим работы:
    От 0 до 10 МГц, при питании от 4.0 В до 6.0 В
    От 0 до 4 МГц, при питании от 2.7 В до 6.0 В


Питал 4,5 В кварц 4МГц.

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

Re: Микроконтроллер от и до.......

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

mr december писал(а):Питал 4,5 В кварц 4МГц.

Здорово :)
Пожалуйста, формулируйте свои вопросы конкретнее, используя слова "ЧТО", "КДЕ", "КОГДА" и т.д. и знак вопроса "?", а то каждый ваш пост больше похож на утверждение, нежели на вопрос. С уважением.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
путник
Открыл глаза
Сообщения: 43
Зарегистрирован: Сб дек 25, 2010 19:43:06
Откуда: Великй Новгород

Re: Микроконтроллер от и до.......

Сообщение путник »

Доброго времени.


Gudd-Head, немного выше я просил о помощи. Надо прошить AT90S2313, сделал две попытки(не удачно).

Спасибо.
Ищу мудрого кота, который будет моим гуру.
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: Микроконтроллер от и до.......

Сообщение ploop »

DX168B писал(а):.include "filename.inc" - включить заголовочный файл с описаниями регистров конкретного МК

Так же, как и включить любой другой файл (например свой). Туда можно засунуть определения регистров, констант, макросов. Здорово разгружает основной листинг, повышая читабельность.
Аватара пользователя
DX168B
Друг Кота
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)
Контактная информация:

Re: Микроконтроллер от и до.......

Сообщение 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), так как компилятор не тупой и всё правильно делает.
I am DX168B and this is my favourite forum on internet!
Аватара пользователя
путник
Открыл глаза
Сообщения: 43
Зарегистрирован: Сб дек 25, 2010 19:43:06
Откуда: Великй Новгород

Re: Микроконтроллер от и до.......

Сообщение путник »

Доброго времени.

Есть прогер AVR910, адаптер на МК AT90S2313.
Прошивал два раза (не удачно), AVR Studio выдает ошибку.
Питание на адатер отдельное 4,5 В кварц на 4МГц
Что не так? Почему ошибка?

Спасибо.
Ищу мудрого кота, который будет моим гуру.
Ответить

Вернуться в «Теория»