МикроКонтроллер AVR начинающим - общие вопросы

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

Re: МикроКонтроллер AVR начинающим - общие вопросы

Сообщение slavik.ksu » 27 сен 2010, 13:31

помогите пожалуйста с написанием кода в AVRstudio для мк Atmel ...
Задача : " Запишите в регистры R1 и R2 адрес ячейки памяти 001D . Запишите в эту ячейку число 44, а в регистр R5 – число BB. Сложите (R5) с содержимым ячейки памяти 001D. "

написал код
ldi r17 , 00
mov r1 , r17
ldi r16 , 0x1D
mov r2 , r16
; до сюда думаю правильно, далее как записать в эту ячйку число 44 незнаю..предположил что можно так:
ldi r18 , 44
sts 0x001D , r18

посмотрите пожалуйста, правильно что ли?
slavik.ksu
 
Сообщения: 2
Зарегистрирован: 27 сен 2010, 13:12

Re: МикроКонтроллер AVR начинающим - общие вопросы

Сообщение galex1981 » 29 сен 2010, 00:33

Проще всего проверить код в AVR Studio
if(!Operate) Read(pDatasheet);
Аватара пользователя
galex1981
 
Сообщения: 4363
Зарегистрирован: 04 дек 2008, 22:44
Откуда: Камышин
Skype: galk-aleksandr1
прог. языки: Kotlin, Java, C, C++, Assm, BasCom, VB, php
ФИО: Галкин Александр Владимирович

Re: МикроКонтроллер AVR начинающим - общие вопросы

Сообщение Michael_K » 29 сен 2010, 00:44

да в общем-то правильно...
ну, если придираться, то обычно в АВР-ках старший байт адреса кладут в старший регистр -
например, если используется регистровая пара как указатель, то нужно делать именно так.
(r1 и r2 - это не пара, так что в общем можно как попало запихивать, хотя это и "некрасиво")

ну и еще, довольно странно в качестве временного регистра выбирать каждый раз разные регистры...
Аватара пользователя
Michael_K
 
Сообщения: 6028
Зарегистрирован: 07 окт 2009, 00:29
Откуда: СПб

Re: МикроКонтроллер AVR начинающим - общие вопросы

Сообщение slavik.ksu » 29 сен 2010, 23:06

сделал задание до конца, и чето не получается..
задание " Запишите в регистры R1 и R2 адрес ячейки памяти 001D . Запишите в эту ячейку число 4, а в регистр R5 – число 3. Сложите (R5) с содержимым ячейки памяти 001D. Результат перешлите в регистр R6. Просмотрите R5, R 6 и ячейку памяти 001D. "

с учетом Вашего замечания получился такой код:

ldi r17 , 00
mov r1 , r17
ldi r16 , 0x1D
mov r2 , r16 ; записали ячейку 001D в регистры r1 и r2

mov r26 , r2
mov r27 , r1 ; теперь ячейка записана в паре регистров Х

ldi r18 , 4
st X , r18 ; в ячейку записали число 4

ldi r19 , 3
mov r5 , r19 ; в регистр r5 записали число 3

ld r20 , X ; содержимое ячейки выписали в r20

add r5 , r20 ; сложили r5 с содержимым ячейки

в последней строчке мы сложили r5=3 с r20=4 , в результате в r5 мы должны получить 7 !?? но почемуто там получается 11 (или в 16ричной системе В )
и в чем может быть ошибка??
slavik.ksu
 
Сообщения: 2
Зарегистрирован: 27 сен 2010, 13:12

Re: МикроКонтроллер AVR начинающим - общие вопросы

Сообщение Michael_K » 29 сен 2010, 23:47

Замечания тут ни при чем - код вы зря запутали.
На первый взгляд должно работать (несмотря на полный идиотизм задания :))
Отлаживайтесь в AVR Studio по шагам.
Аватара пользователя
Michael_K
 
Сообщения: 6028
Зарегистрирован: 07 окт 2009, 00:29
Откуда: СПб

Re: МикроКонтроллер AVR начинающим - общие вопросы

Сообщение Victorovych » 30 сен 2010, 13:39

Так по-моему правильнее будет :crazy: :
Код: Выделить всё
   clr r1      ;
   ldi r16,$1D   ;Запишите в регистры R1 и R2 адрес ячейки памяти 001D
   mov r2,r16   ;

   ldi r29,$04   ;
   mov r5,r29   ;  Запишите в эту ячейку число 4, а в регистр R5 – число 3
   dec r5      ;

   add r5,r29   ;Сложите (R5) с содержимым ячейки памяти 001D

   mov r6,r5   ;Результат перешлите в регистр R6
Аватара пользователя
Victorovych
 
Сообщения: 491
Зарегистрирован: 20 сен 2007, 11:44
Откуда: Харьков
Skype: Victorovych_FF
прог. языки: ASM
ФИО: Иван ВикторОвич

Re: МикроКонтроллер AVR начинающим - общие вопросы

Сообщение ADonis » 01 окт 2010, 12:26

Всем привет!
Чего-то я завис, ядрышко mega16, вот такой код:
Код: Выделить всё
//Настройка таймера 2
ASSR=0x00;
TCCR2=0b00001001;//Режим СТС, без прескалера
TCNT2=0x00;
OCR2=0x12;

#asm("sei")

interrupt [TIM2_OVF] void timer2_ovf_isr(void)
{
// Place your code here
    PORTD.0=~PORTD.0;   
}


Хочу чтобы выполнялся код в прерывании (это для теста написана строчка), в протеусе работает, в реальности нет. Где грабли? :oops:
В гугле есть все! Даже то, чего еще нет!

Не спорь с холостяком о макаронах!
Аватара пользователя
ADonis
 
Сообщения: 106
Зарегистрирован: 30 дек 2009, 08:16
Откуда: Омск
Skype: hedgehoguse

Re: МикроКонтроллер AVR начинающим - общие вопросы

Сообщение Michael_K » 01 окт 2010, 13:25

может timsk забыли? а может main :)
Аватара пользователя
Michael_K
 
Сообщения: 6028
Зарегистрирован: 07 окт 2009, 00:29
Откуда: СПб

Re: МикроКонтроллер AVR начинающим - общие вопросы

Сообщение ADonis » 01 окт 2010, 13:29

Сорри, насобирал кусками с проекта необходимые на мой взгляд строки, поэтому мог запутать, вот так это все выглядит:
Код: Выделить всё
interrupt [TIM2_OVF] void timer2_ovf_isr(void)
{
// Place your code here
    PORTD.0=~PORTD.0;   
}

void main(void)
{
//Настройка таймера 2
ASSR=0x00;
TCCR2=0b00001001;//Режим СТС, без прескалера
TCNT2=0x00;
OCR2=0x12;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x40;

#asm("sei")
}
В гугле есть все! Даже то, чего еще нет!

Не спорь с холостяком о макаронах!
Аватара пользователя
ADonis
 
Сообщения: 106
Зарегистрирован: 30 дек 2009, 08:16
Откуда: Омск
Skype: hedgehoguse

Re: МикроКонтроллер AVR начинающим - общие вопросы

Сообщение Michael_K » 01 окт 2010, 13:52

Я так и понял...
На первый взгляд должно работать. :pardon:
Аватара пользователя
Michael_K
 
Сообщения: 6028
Зарегистрирован: 07 окт 2009, 00:29
Откуда: СПб

Re: МикроКонтроллер AVR начинающим - общие вопросы

Сообщение ADonis » 01 окт 2010, 13:59

Я тоже так считаю, но вот что на выходе реального МК, тогда как в протеусе все нормально
Вложения
Шум на PD0.JPG
В гугле есть все! Даже то, чего еще нет!

Не спорь с холостяком о макаронах!
Аватара пользователя
ADonis
 
Сообщения: 106
Зарегистрирован: 30 дек 2009, 08:16
Откуда: Омск
Skype: hedgehoguse

Re: МикроКонтроллер AVR начинающим - общие вопросы

Сообщение blindman » 01 окт 2010, 16:35

Ничего удивительного. Ногу на вывод кто будет настраивать?
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!

Аватара пользователя
blindman
 
Сообщения: 4130
Зарегистрирован: 29 апр 2008, 21:15
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич

Re: МикроКонтроллер AVR начинающим - общие вопросы

Сообщение Michael_K » 01 окт 2010, 16:35

Ахха... ТОЧНО!!! :)
Аватара пользователя
Michael_K
 
Сообщения: 6028
Зарегистрирован: 07 окт 2009, 00:29
Откуда: СПб

Re: МикроКонтроллер AVR начинающим - общие вопросы

Сообщение ADonis » 01 окт 2010, 19:50

Да она-то настроена - кусочками собирал код с проекта )) забыл эту строку сюда засунуть. К тому же - в Протеусе работает, да и не скомпилируется по-моему, если не настроить. Тут чет другое :-X

Добавлено спустя 17 минут 1 секунду:
Проверил - если не настраивать на выход, то компилируется, но в Протеусе не пашет :-X

Добавлено спустя 5 минут 29 секунд:
Еще раз прикладываю полный уже (удалил все ненужное и скопипастил) код "проекта":
Код: Выделить всё
#include <mega16.h>

// Timer 2 overflow interrupt service routine
interrupt [TIM2_OVF] void timer2_ovf_isr(void)
{
// Place your code here
    PORTD.0=~PORTD.0;   
}

// Declare your global variables here

void main(void)
{
// Port D initialization
PORTD=0x02;
DDRD=0xFF;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: 1000,000 kHz
// Mode: Normal top=FFh
// OC2 output: Toggle on compare match
ASSR=0x00;
TCCR2=0b00001001;
TCNT2=0x00;
OCR2=0x12;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x40;

// Global enable interrupts
#asm("sei")

while (1)
      {
      // Place your code here
      };
}


И еще настройки фьюзов реального МК:
Fuses.JPG
Fuses.JPG (7.43 КиБ) Просмотров: 1548
В гугле есть все! Даже то, чего еще нет!

Не спорь с холостяком о макаронах!
Аватара пользователя
ADonis
 
Сообщения: 106
Зарегистрирован: 30 дек 2009, 08:16
Откуда: Омск
Skype: hedgehoguse

Re: МикроКонтроллер AVR начинающим - общие вопросы

Сообщение blindman » 02 окт 2010, 03:22

На картинке - типичная осциллограмма с висящего в воздухе провода. Проверяй монтаж, убедись что контроллер шьется правильно, и вообще может не на той ноге смотришь
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!

Аватара пользователя
blindman
 
Сообщения: 4130
Зарегистрирован: 29 апр 2008, 21:15
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич

Пред.След.

Вернуться в Микроконтроллеры

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0

cron