Задачи по программированию на AVR
Задачи по программированию на AVR
Здравствуйте, столкнулся с такой проблемой
Как необходимость решить работу для микроконтроллеров AVR
Первым делом написать программу на Ассемблере
Но чтобы не изобретать велосипед хотел сначала посоветоваться со знающими людьми по поводу шаблонных вариантов
Я уверен, почти наверняка, что такие задачи уже есть в Интернете, наподобие
Так вот, прошу их реализацию мне скинуть
Если не трудно
Заранее благодарю
Вот пример:
Разработать программу, реализующую генератор изменяемой частоты. Начальная частота 0.5 Гц, т.е. жёлтый индикатор горит 1 с, и 1 с не горит. Нажатие кнопки 1 приводит к увеличению частоты на 40%, нажатие кнопки 2 уменьшает частоту на 40%. Для облегчения замера частот использовать красный и зелёный индикаторы: красный должен мигать с частотой в 10 раз большей основной частоты (желтого индикаторы), а зелёный должен мигать с частотой в 10 раз меньше основной. Одновременное нажатие обеих кнопок должно возвращать генератор в исходное состояние – 0.5 Гц.
Как необходимость решить работу для микроконтроллеров AVR
Первым делом написать программу на Ассемблере
Но чтобы не изобретать велосипед хотел сначала посоветоваться со знающими людьми по поводу шаблонных вариантов
Я уверен, почти наверняка, что такие задачи уже есть в Интернете, наподобие
Так вот, прошу их реализацию мне скинуть
Если не трудно
Заранее благодарю
Вот пример:
Разработать программу, реализующую генератор изменяемой частоты. Начальная частота 0.5 Гц, т.е. жёлтый индикатор горит 1 с, и 1 с не горит. Нажатие кнопки 1 приводит к увеличению частоты на 40%, нажатие кнопки 2 уменьшает частоту на 40%. Для облегчения замера частот использовать красный и зелёный индикаторы: красный должен мигать с частотой в 10 раз большей основной частоты (желтого индикаторы), а зелёный должен мигать с частотой в 10 раз меньше основной. Одновременное нажатие обеих кнопок должно возвращать генератор в исходное состояние – 0.5 Гц.
- Реклама
- conler
- Это не хвост, это антенна
- Сообщения: 1327
- Зарегистрирован: Вс дек 11, 2011 05:43:30
- Откуда: Екатеринодар
Re: Задачи по программированию на AVR
Скидывать никто ничего не будет, существует поиск. Кому нужно - тот и ищет.
- urry
- Сверлит текстолит когтями
- Сообщения: 1262
- Зарегистрирован: Пн дек 08, 2008 10:58:48
- Откуда: Винница
- Контактная информация:
Re: Задачи по программированию на AVR
Курсовые пошли ?
Еще и на асме проценты считать...
Ну-ну...
Еще и на асме проценты считать...
-
petrenko
- Друг Кота
- Сообщения: 5327
- Зарегистрирован: Вт фев 21, 2012 13:51:55
- Откуда: Начинающий
- Контактная информация:
Re: Задачи по программированию на AVR
Админы ! Доброе утро, как Вы полагаете, надо ли тему переносить в "Сделайте за меня задание." ?
Это вроде как сезонное явление, да ?
Извините, если невнимательно прочёл, может всё же задача серьёзная..
Это вроде как сезонное явление, да ?
Извините, если невнимательно прочёл, может всё же задача серьёзная..
Последний раз редактировалось petrenko Ср окт 10, 2012 13:48:49, всего редактировалось 1 раз.
< виртуальная "кнопочка" >--( WWW ) <- Убедительная просьба интересующимся старыми компьютерами типа РК86 - не пишите в теме в барахолке, пишите Ваши вопросы в ( лс ) пожалуйста
Re: Задачи по программированию на AVR
Про сделать за меня задание я не слово не написал! Я написал про то, что "скиньте пожалуйста примеры выполненных задач наподобие той, что я скинул".
Надеюсь, на этот раз ВСЕ ВСЁ ПРАВИЛЬНО прочитали!?
Надеюсь, на этот раз ВСЕ ВСЁ ПРАВИЛЬНО прочитали!?
- Реклама
Re: Задачи по программированию на AVR
Не кричите. Тема будет там, где положено, в зависимости от поворота событийАдмины ! Доброе утро, не тормозите, пожалуйста, видимо скоро надо будет не только эту тему переносить в "Сделайте за меня задание."
- Engineer_Keen
- Друг Кота
- Сообщения: 3872
- Зарегистрирован: Пт янв 29, 2010 10:27:40
- Откуда: Москва
Re: Задачи по программированию на AVR
Видите ли drac0Sha, программирование на ассемблере - штука специфическая. Даже изменение одного из чисел в задании может довольно сильно поменять программу. Не говоря уже о различиях в алгоритме ее работы. Для языков высокого уровня принцип копипасты различных кусков кода для решения своей задачи может быть еще бы и прокатил (и то можно потом долго отлавливать глюки в полученном быдлокоде), с ассемблером это так просто не выйдет, нужен некоторый опыт и знание, а судя по заданному вопросу этого как раз нет, так что проще написать программу с нуля. Единственный шанс - если найдется человек, который действительно решал именно такую задачу. В противном случае - вперед, в обучалку.
Re: Задачи по программированию на AVR
Вот вам пример генератора 0,5 Гц
Код: Выделить всё
.include "tn13def.inc"
.equ j = 10 ;
;---------------------------------------------
; Биты портов
;---------------------------------------------
.equ b0 = 0
.equ b1 = 1
.equ b2 = 2
.equ b3 = 3
.equ b4 = 4
.equ b5 = 5
.equ b6 = 6
.equ b7 = 7
;---------------------------------------
.org 0x0000
rjmp start
;=====================
; ПП задержки
;=====================
Delay:
ldi r17,j
Loop2:
ldi r18,0x2A
Loop1:
dec r18
brne Loop1
dec r17
brne Loop2
dec r22
brne Delay
ret
;=====================
; Основная программа
;=====================
start:
ldi r20,0b11111111
out DDRB,r20
cli
start1:
ldi r22,100
rcall Delay
sbi PORTB,b0
ldi r22,100
rcall Delay
cbi PORTB,b0
rjmp start1Re: Задачи по программированию на AVR
Спасибо большое, что-то попробовал) помогите переделать немного)
Разработать программу, реализующую генератор изменяемой частоты. Начальная частота 0.5 Гц, т.е. жёлтый индикатор горит 1 с, и 1 с не горит.
Нажатие кнопки 1 приводит к тому, что красный индикатор должен мигать каждую секунду,а при нажатии кнопки 2 зелёный индикатор должен мигать каждые 5 секунд
Одновременное нажатие обеих кнопок должно возвращать генератор в исходное состояние – 0.5 Гц.
Разработать программу, реализующую генератор изменяемой частоты. Начальная частота 0.5 Гц, т.е. жёлтый индикатор горит 1 с, и 1 с не горит.
Нажатие кнопки 1 приводит к тому, что красный индикатор должен мигать каждую секунду,а при нажатии кнопки 2 зелёный индикатор должен мигать каждые 5 секунд
Одновременное нажатие обеих кнопок должно возвращать генератор в исходное состояние – 0.5 Гц.
Спойлер
Код: Выделить всё
.include "m128def.inc"//включение заголовочного файла
.device ATmega128//назначение модели процессора
.equ j = 10 ;
;---------------------------------------------
; Биты портов
;---------------------------------------------
.equ b0 = 0
.equ b1 = 1
.equ b2 = 2
.equ b3 = 3
.equ b4 = 4
.equ b5 = 5
.equ b6 = 6
.equ b7 = 7
;---------------------------------------
.org 0x0000
rjmp start
;=====================
; ПП задержки
;=====================
Delay:
ldi r17,j
Loop2:
ldi r18,0x2A
Loop1:
dec r18
brne Loop1
dec r17
brne Loop2
dec r22
brne Delay
ret
;=====================
; Основная программа
;=====================
start:
ldi r20,0b11111111
out DDRB,r20
cli
start1:
ldi r22,100
rcall Delay
sbi PORTB,b0 ;включаем СИД (желтый)
sbis PinD ;Проверяем нажата ли кнопка уменьшения частоты
rjmp UpSpeed ;Не нажата - переходим в UpSpeed
UpSpeed:
sbic PinD,1 ;проверяем кнопку увеличения частоты
rjmp start1 ;Не нажата - возвращаемся в start1
ldi Counter,2 ;Инициализируем регистр Counter
sbi PORTB,b1 ;Включаем СИД (Красный)
Second: ;секунда задержка
rcall Delay
dec Counter
brne Second
cbi PORTB,b1 ;выключаем СИД (красный)
brne ReleaseUp
ReleaseUp:
sbis PinD,0 ;ждем отпускания кнопки
rjmp ReleaseUp
rjmp DownSpeed ;Нажата - переходим в DownSpeed
DownSpeed:
sbic PinD,1 ;проверяем кнопку увеличения частоты
rjmp DownSpeedOne ;Не нажата
rjmp UpSpeed ;нажата
DownSpeedOne:
ldi Counter,10 ;Инициализируем регистр Counter
sbi PORTB,b2 ;Включаем СИД (зеленый)
FiveSecond: ;5 секунд задержка
rcall Delay
dec Counter
brne FiveSecond
cbi PORTB,b1 ;выключаем СИД (зеленый)
brne ReleaseDown
ReleaseDown:
sbis PinD,0 ;ждем отпускания кнопки
rjmp ReleaseDown
ldi r22,100
rcall Delay
cbi PORTB,b0 ;Выключаем СИД
rjmp start1
korsaj писал(а):Вот вам пример генератора 0,5 ГцКод: Выделить всё
.include "tn13def.inc" .equ j = 10 ; ;--------------------------------------------- ; Биты портов ;--------------------------------------------- .equ b0 = 0 .equ b1 = 1 .equ b2 = 2 .equ b3 = 3 .equ b4 = 4 .equ b5 = 5 .equ b6 = 6 .equ b7 = 7 ;--------------------------------------- .org 0x0000 rjmp start ;===================== ; ПП задержки ;===================== Delay: ldi r17,j Loop2: ldi r18,0x2A Loop1: dec r18 brne Loop1 dec r17 brne Loop2 dec r22 brne Delay ret ;===================== ; Основная программа ;===================== start: ldi r20,0b11111111 out DDRB,r20 cli start1: ldi r22,100 rcall Delay sbi PORTB,b0 ldi r22,100 rcall Delay cbi PORTB,b0 rjmp start1
Re: Задачи по программированию на AVR
Вот это уже другое дело! 
Re: Задачи по программированию на AVR
Вот исходник моргания 3-х светодиодов. Зеленый - основная частота, Желтый - в 10 раз быстрее, Красный - в десять раз медленнее.
Все что вам остается сделать опрос кнопок, и в зависимости от их состояния менять значение записанное в r22, заменив строку ldi r22,10 на команду загрузки из регистра, в который будет записыватся число на 40% меньше/больше или равное 100%.
Ну а вот архив с проектом в АврСтудио и Протеус.
Все что вам остается сделать опрос кнопок, и в зависимости от их состояния менять значение записанное в r22, заменив строку ldi r22,10 на команду загрузки из регистра, в который будет записыватся число на 40% меньше/больше или равное 100%.
Спойлер
;Код: Выделить всё
created by KornilovAF
; at 2012/09/15 - 12:33:21
;---------------------------------------
; AVR_TYPE=<Attyne13>
;---------------------------------------
;---------------------------------------
; constants:
.include "tn13def.inc"
.equ j = 10 ;
;---------------------------------------------
; Биты портов и регистров
;---------------------------------------------
.equ b0 = 0x00
.equ b1 = 0x01
.equ b2 = 0x02
.equ b3 = 0x03
.equ b4 = 0x04
.equ b5 = 0x05
.equ b6 = 0x06
.equ b7 = 0x07
;---------------------------------------
.org 0x0000
rjmp start
;=====================
; ПП задержки
;=====================
Delay:
ldi r17,j
Loop2:
ldi r18,0x2A
Loop1:
dec r18
brne Loop1
dec r17
brne Loop2
dec r22
brne Delay
ret
;=====================
; Настройка
;=====================
start:
ldi r20,0b11111111
out DDRB,r20
cli ;Запрещаем прерывания
ldi r19,10
ldi r20,100
;=====================
; Основная программа
;=====================
start1:
ldi r22,10
rcall Delay ;задержка на 100мС
dec r19 ;Усменьшаем счетчик 10 импульсов
breq GreenLed ;Если равно нулю переходим к обработке зеленого светодиода
St2:
;Иначе поподаем сюда
sbic PINB,b1 ;Светолдиод горит?
rjmp YelLedOff ;Да! Переходим к его гашению
sbi PORTB,b1 ;Нет! Зажигаем его
rjmp St3 ;Переходим к следующиму условию
YelLedOff:
cbi PORTB,b1 ;Гасим светодиод
St3:
dec r20 ;Уменьшаем счетчик 100 импульсов
brne start1 ;Если неравно нулю переходим к началу нашего цикла
ldi r20,100 ;Иначе обновляем счетчик 100 импульсов
sbic PINB,b2 ;Светолдиод горит?
rjmp RedLedOff ;Да! Переходим к его гашению
sbi PORTB,b2 ;Нет! Зажигаем его
rjmp start1 ;Переходим к началу нашего цикла
RedLedOff:
cbi PORTB,b2 ;Гасим светодиод
rjmp start1 ;Переходим к началу нашего цикла
GreenLed:
ldi r19,10 ;Обновляем счетчик 100 импульсов
sbic PINB,b0 ;Светолдиод горит?
rjmp GreenLedOff ;Да! Переходим к его гашению
sbi PORTB,b0 ;Нет! Зажигаем его
rjmp St2 ;Переходим к следующиму условию
GreenLedOff:
cbi PORTB,b0 ;Гасим светодиод
rjmp St2 ;Переходим к следующиму условию- Вложения
-
- Gen05Hz.zip
- (58.88 КБ) 180 скачиваний
Re: Задачи по программированию на AVR
korsaj, спасибо, что помогаете!
Вот у меня появился вопрос.
Пользуюсь AVR Studio 6.0. Создаю проект - AVR Assembler project - выбираю device (ATmega128). Дальше пишу туда код и делаю debug. Как я могу посмотреть, что у меня загорается желтый, красный, зеленый. Не могу найти где это находится.. Подскажите, пожалуйста.
Вот у меня появился вопрос.
Пользуюсь AVR Studio 6.0. Создаю проект - AVR Assembler project - выбираю device (ATmega128). Дальше пишу туда код и делаю debug. Как я могу посмотреть, что у меня загорается желтый, красный, зеленый. Не могу найти где это находится.. Подскажите, пожалуйста.
Re: Задачи по программированию на AVR
Поставте себе Proteus. В архиве, который я в вас кинул есть проект (схема) для протеуса. В ней все видно )
http://eldigi.ru/site/prog/1.php
http://eldigi.ru/site/prog/1.php
Re: Задачи по программированию на AVR
Поставил, удобная программа) Но вот я никак не могу понять: как создать кнопки. В коде писал строчку :
sbic PinD ;проверяем кнопку - сразу ругается.. Как создать подскажите, пожалуйста.
И я еще не много не понял про
sbic PinD ;проверяем кнопку - сразу ругается.. Как создать подскажите, пожалуйста.
И я еще не много не понял про
korsaj писал(а):в зависимости от их состояния менять значение записанное в r22, заменив строку ldi r22,10 на команду загрузки из регистра, в который будет записыватся число на 40% меньше/больше или равное 100%.
Re: Задачи по программированию на AVR
sbic PIND,0
где 0 - это номер порта к которому подключена кнопка.
где 0 - это номер порта к которому подключена кнопка.
Re: Задачи по программированию на AVR
Ну вот я написал:
По этой картинке порты 3 и 4 свободны ( я так понимаю это PB3 и PB4), но он выдает ошибку при компиляции.
Undefined symbol:PIND
Код: Выделить всё
start1:
ldi r22,10
rcall Delay
sbic PIND,3
dec r19
breq GreenLed
Undefined symbol:PIND
Re: Задачи по программированию на AVR
))
Чудите вы! )
У Attiny 13 есть только один порт - PORTB, соответственно и регистр входов - PINB.
А компилятор вам кричит, что слово PIND не описано.
В архиве реализовано две кнопки, вам остается реализовать одновременное нажатие.
Чудите вы! )
У Attiny 13 есть только один порт - PORTB, соответственно и регистр входов - PINB.
А компилятор вам кричит, что слово PIND не описано.
В архиве реализовано две кнопки, вам остается реализовать одновременное нажатие.
- Вложения
-
- Gen05Hz.zip
- (60.19 КБ) 175 скачиваний


