Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
DavisBloome
0 / 0 / 0
Регистрация: 16.03.2016
Сообщений: 5
1

Atmega 16

16.03.2016, 12:06. Просмотров 498. Ответов 15
Метки нет (Все метки)

Ребят, только начинаю работать в ассемблере, очень тяжело дается(( время поджимает, поэтому обращаюсь к вам. Задача звучит следующим образом:Считать 4-х разрядное число с выводов PA5-PA2 возвести его в квадрат,
затем прибавить 1 и вывести результат на порт_C (PC7-PC0). Плата Atmega 16. Заранее большое спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.03.2016, 12:06
Ответы с готовыми решениями:

Макетная плата для Atmega 32?atmega 8
Здравствуйте !Уважаемые мастера нужна помощь (а именно нужна схема макетной...

atmega
Здравствуйте. Использую USORT для общения 2 мег. Нужно объеденить RX и TX в...

Atmega 16 и C
Вопрос: есть ли транслятор с Си на асемблер для этого контроллера? Это может...

atmega spi
Итак, есть проект на Attiny2313...

Светофор на ATmega
Здравствуйте. Надеюсь, на вашу помощь :с В курсовом проекте задание -...

15
Витальич
1272 / 1182 / 174
Регистрация: 02.12.2013
Сообщений: 4,886
16.03.2016, 13:00 2
Выкладывайте свои наработки
0
pyzhman
761 / 457 / 63
Регистрация: 15.05.2012
Сообщений: 2,561
16.03.2016, 14:26 3
А.В.Фрунзе "Микроконтроллеры? Это же просто!" том 3, страница 30. Останется перевести c ассемблера mcs51 на атмеловский.

Добавлено через 55 минут
Гугл выдал ATMega16 (AVR Studio, ASM) - Вывести результат на светодиоды по схеме
1
Mirmik
techpriest
623 / 204 / 55
Регистрация: 27.02.2014
Сообщений: 1,078
16.03.2016, 23:49 4
uint8_t num = (PORTA & 0b00111100) >> 2;
uint8_t ans = num * num + 1;
PORTC = ans;

Ой... Ассемблер же нужен ...
0
pyzhman
761 / 457 / 63
Регистрация: 15.05.2012
Сообщений: 2,561
17.03.2016, 07:07 5
Если уж на то пошло, то:
C
1
PORTC= ++(((PINA & 0x3C) >> 2)^2);
0
Voland_
1656 / 1002 / 96
Регистрация: 04.01.2010
Сообщений: 3,328
17.03.2016, 12:33 6
Цитата Сообщение от pyzhman Посмотреть сообщение
пошло
Цитата Сообщение от pyzhman Посмотреть сообщение
^2);
Непральна. Это ж битовая операция.
Здесь надо множить, причем, никаких ограничений, потому что множится 4х битное число.
1
pyzhman
761 / 457 / 63
Регистрация: 15.05.2012
Сообщений: 2,561
17.03.2016, 13:19 7
Впопыхах.

Добавлено через 3 минуты
Ну да суть ясна, надеюсь.
0
Voland_
1656 / 1002 / 96
Регистрация: 04.01.2010
Сообщений: 3,328
17.03.2016, 13:20 8
Цитата Сообщение от pyzhman Посмотреть сообщение
Впопыхах.
да я это скорее не вам написал ). А тем кто будет копипастить
0
DavisBloome
0 / 0 / 0
Регистрация: 16.03.2016
Сообщений: 5
17.03.2016, 23:20  [ТС] 9
Может кто написать код за вознаграждение?
0
pyzhman
761 / 457 / 63
Регистрация: 15.05.2012
Сообщений: 2,561
18.03.2016, 09:29 10
Уже написано и отлажено. Но это в другой ветке.
0
DavisBloome
0 / 0 / 0
Регистрация: 16.03.2016
Сообщений: 5
19.03.2016, 12:36  [ТС] 11
Имеете ввиду ассемблер mcs51? На нем уже написано?
0
pyzhman
761 / 457 / 63
Регистрация: 15.05.2012
Сообщений: 2,561
19.03.2016, 12:51 12
АТmega16 - AVR чип. Соответственно и ассемблер.
0
DavisBloome
0 / 0 / 0
Регистрация: 16.03.2016
Сообщений: 5
20.03.2016, 12:29  [ТС] 13
.
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
include "m16def.inc"
ldi r16,255
out DDRB,r16
clr r16
out DDRA,r16
start:
in r16,pinA
andi r16,0b00111100
lsr r16
lsr r16
lsr r16
lsr r16
ldi r17,5
add r16,r17
Коды похожи, но я не знаю, как возвести число в квадрат. Подскажите пожалуйста

Добавлено через 7 минут
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
.include "m16def.inc"
 
;инициирование портов
;PORTB0,2,3,4 - выход
    ldi     r16,0b00011101
    out     DDRB,r16
;PORTA после сброса - ввод
 
 
start:
    in  r16,PINA        ;вводим состояние кнопок 
    andi    r16,0b00111100  ;выделяем нужные разряды
    lsr     r16     ;сдвигаем, чтобы получить число
    lsr     r16
 
    lsr     r16     ;делим его на 4
    lsr     r16
    ;так как надо прибавить 510 - двухбайтовую константу
    ;регистр r17 будем использовать как старший байт переменной
    clr     r17
    ;прибавляем константу используя команды вычитания, т.е. вычитаем минус константу 
    ;(сложения с константой у AVR нет)
    subi    r16,low(-510)
    sbci    r17,high(-510)
    ;младшие 4 бита выводим на светодиоды
    ;разряды 1,2,3 надо сдвинуть влево, разряд 0 оставить на месте
    andi    r16,0b00001111  ;оставляем младшие разряды
    mov r17,r16
    andi    r17,0b00001110  ;три старших в r17
    add r16,r17     ;их и сдвигаем влево
    out portb,r16
 
    ; останавливаемся
loop:   
    rjmp    loop
Подскажите пожалуйста, как число возвести в квадрат?
0
pyzhman
761 / 457 / 63
Регистрация: 15.05.2012
Сообщений: 2,561
20.03.2016, 14:22 14

Не по теме:

Что-ж вы из ветки в ветку таскаете коды.


Квадрат числа равен произведению числа на самоё себя.
0
DavisBloome
0 / 0 / 0
Регистрация: 16.03.2016
Сообщений: 5
20.03.2016, 14:59  [ТС] 15
Спасибо! а как это в коде написать?
0
Voland_
1656 / 1002 / 96
Регистрация: 04.01.2010
Сообщений: 3,328
21.03.2016, 10:55 16
DavisBloome, в ассемблере AVR есть инструкция MUL. Вы хоть в список инструкций загляните, чтобы понимать что можно делать, а чего делать не получится в AVR.
0
21.03.2016, 10:55
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.03.2016, 10:55

Atmega 16 - AVR
Ребят помогите : Настроить асинхронный последовательный интерфейс...

atmega на 3.3в и частота
смотрю документацию - везде указано что при низком напряжении рабочая частота...

Atmega и приемник
Есть Atmega и приемник с четырьмя ногами на которые в случае прихода годного...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru