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

Зажигание светодиодов AT90S2313

20.10.2016, 20:13. Просмотров 987. Ответов 6
Метки нет (Все метки)

Доброго времени суток.
На AVR только начинающий
Вот написал программу для циклического зажигания светодиодов справа налево от 1 до 8 по очереди.
Вывод на порт B.
Но вот загвоздка,не могу зациклить процесс. (Зажигаются 8 диодов,но процесс не идет на круг,чтобы 1-2-...-8)
Помогите пожалуйста пустить его на круг
Какую команду использовать? Куда ее направить? Она должна быть перед rjmp ?
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
; ***** 01_AVR_L.asm (Управление светодиодами)
.include "2313def.inc"
.device AT90S2313
.def Temp =r16 ;рабочий регистр
.def Delay1=r17 ;регистры для хранения задержек
.def Delay2=r18
.def Delay3=r19
;*****    Инициализация (настройка оборудования)
INIT:
     ser Temp ;установка всех бит регистра в единицу
     out DDRB,Temp ;PORTB ориентирован на вывод
     com Temp
;===============================================
;вывод на индикацию буфера отображения Temp 
loop:
     out PORTB,Temp ;вывод данных в  PORTB
     lsl  Temp ;увеличение на 1 отображаемого код
     inc temp
;===============================================
;**** Задержка перед очередной визуализацией.
;Состоит из трёх вложенных друг в друга циклов.
;Общее время задержки определяется выражением:
;Tdelay=((5xDelay1+5)xDelay2)+5)Delay3=(((5x210+5)x250)+5)4=1060000 тактов
;где 5  - количество тактов МК при выполнении команд входящих в тело цикла
DLY3:
     ldi Delay3,1 ;число повторов внешнего цикла
DLY2:
     ldi Delay2,1 ;число повторов среднего цикла
DLY1:
     ldi Delay1,1 ;число повторов внутреннего цикла
DLY:
;Внутренний цикл задержки повторяется Delay1 раз расходуя 5 тактов на каждое повторение
     dec Delay1;уменьшение счётчика внутреннего цикла
     nop ;две пустые команды увеличивают время
     nop ;выполнения внутреннего цикла
     brne DLY ;повторять до обнуления счётчика
;Средний цикл выполняется один раз, контролирует свой счётчик.
;если не обнулён, то перезагружает счётчик внутреннего цикла и запускает внутренний цикл на повторное исполнение.
     dec Delay2;уменьшение счётчика на единицу 
     nop
     nop
brne DLY1 ;на перезагрузку и повтор внутреннего цикла
;Внешний цикл повторно вызывает вложенный в него средний цикл до
;обнуления собственного счётчика. При его обнулении задержка завершается.
    dec Delay3 ;уменьшение на единицу счётчика внешнего цикла 
    nop
    nop
brne DLY2 ;переход на перезагрузку и повтор среднего цикла
;===============================================
  rjmp loop ;повторный цикл визуализации по завершении задержки
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.10.2016, 20:13
Ответы с готовыми решениями:

Последовательное зажигание светодиодов
Собственно задание: при включении МК светодиоды не горят, через 2 с загораются...

Последовательное зажигание светодиодов по кнопке (ATtiny2313, Cи)
Здравствуйте.Есть такая проблема.Написал код для подпрограммы последовательного...

Последовательное зажигание светодиодов по кнопке (ATmega8515, ASM)
Добрый день. Требуется помощь для написания программы на ассемблере под AVR...

Работа с SRAM (AT90S2313)
СodeVisionaAVR Записать в кодах МК AT90S2313 программу, которая: -...

Замена AT90S2313 на ATtiny2313
Добрый день! Собираю адаптор UNIScan и в связи с тем что не могу найти...

6
ValeryS
Модератор
7446 / 5638 / 716
Регистрация: 14.02.2011
Сообщений: 19,207
Завершенные тесты: 1
20.10.2016, 20:42 2
Цитата Сообщение от MrVadik Посмотреть сообщение
Зажигаются 8 диодов,но процесс не идет на круг,чтобы 1-2-...-8)
для этого нужен циклический сдвиг, а не сложение
Цитата Сообщение от MrVadik Посмотреть сообщение
inc temp
да вот беда нет его в ассемблере AVR
но зато здесь естьhttp://arv.radioliga.com/content/view/100/49/
Ассемблер микроконтроллеров AVR не содержит команды, осуществляющей циклический сдвиг байта вправо и влево, а необходимость в этом возникает довольно часто. Вот как это можно реализовать:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
;Циклический сдвиг вправо VH
PUSH VH
LSR VH
POP VH
ROR VH
 
;Циклический сдвиг влево VH (вариант 1)
PUSH VH
LSL VH
POP VH
ROL VH
 
;Циклический сдвиг влево VH (вариант 2)
CLR V
LSL VH
ADC VH, V
Как видите, сдвиг влево можно осуществить двумя способами: без использования дополнительного регистра или с использованием. Первый вариант более медленный и более объемный, зато второму требуется свободный регистр.
Попробуйте самостоятельно решить задачу для сдвига вправо, добившись более быстрого кода, по образцу сдвига влево.
1
pyzhman
791 / 485 / 66
Регистрация: 15.05.2012
Сообщений: 2,749
21.10.2016, 12:34 3
Цитата Сообщение от MrVadik Посмотреть сообщение
для циклического зажигания
Потушите и начинайте с начала.
0
MrVadik
1 / 1 / 0
Регистрация: 20.10.2016
Сообщений: 27
21.10.2016, 22:05  [ТС] 4
ValeryS,
Я,конечно,не эксперт,но мне надо переделать именно эту программу)

Добавлено через 1 минуту
pyzhman,
Если не трудно,напишите как это сделать,в каком месте какие команды?)
Можно ведь сделать какую то команду,отправляющую вначало
Помогитееее
0
ValeryS
Модератор
7446 / 5638 / 716
Регистрация: 14.02.2011
Сообщений: 19,207
Завершенные тесты: 1
21.10.2016, 22:39 5
Цитата Сообщение от MrVadik Посмотреть сообщение
,но мне надо переделать именно эту программу)
так переделывай, кто тебе мешает?
вместо инкремента поставь циклический сдвиг
0
pyzhman
791 / 485 / 66
Регистрация: 15.05.2012
Сообщений: 2,749
22.10.2016, 05:48 6
Лучший ответ Сообщение было отмечено MrVadik как решение

Решение

Assembler
1
2
3
4
5
6
7
8
loop:
 
cpi temp,0xFF
brne m1
clr temp ;  та-дам, новый цикл
m1:
 
     out PORTB,Temp ;вывод данных в  PORTB
1
MrVadik
1 / 1 / 0
Регистрация: 20.10.2016
Сообщений: 27
23.10.2016, 19:54  [ТС] 7
pyzhman, ЛЕВ!)
спасибо огромное)
0
23.10.2016, 19:54
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.10.2016, 19:54

Проверка ключей на AT90S2313
Доброго времени суток Прошу помочь с написанием программы,не могу заполнить 2...

интерпритация кода at90s2313 в ATtiny13A
Доброго вечера! Очень нужна помощь в портировании прошивки одного камня на...

Вычисление логической функции в МК AT90S2313
В ячейке SRAM з ADR1 (C4) расположен код (3F). Записать в кодах МК AT90S2313...


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

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

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