Например TDA7294

Форум РадиоКот • Просмотр темы - Программа тупо зацикливается.
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Вт июн 24, 2025 17:30:43

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 13 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Программа тупо зацикливается.
СообщениеДобавлено: Вс окт 26, 2014 16:31:58 
Родился

Зарегистрирован: Вс окт 26, 2014 16:20:31
Сообщений: 4
Рейтинг сообщения: 0
Подскажите пожалуйста не так давно начал изучать МК, добрался до счетчиков/таймеров, взял на рассмотрение пример из учебника, так вот программа тупо зацикливается, на задержке где метка m1, если записать в константу count значение от 0 до 255 все работает, как нада, но мне нужно 300, пример взял из книги немного переделал для себя, вот кусок из программы:
частота кристалла 1 МГц
.include "m8def.inc"
.def temp=r16
.def temp1=r17
.equ count=300
;инициализация таймера Т1
; предделитель 1024
ldi temp,0x05
out TCCR1B,temp ;----------
; задержка с использованием счетчика
delay: push temp
ldi temp,0
out TCNT1H,temp
out TCNT1L,temp
m1: in temp,TCNT1L
cpi temp,low(count) ; вот здесь проявляется проблема если count определить 0-255 все работает, нада 300 или больше
brlo m1
m2: in temp,TCNT1H
cpi temp,high(count)
brlo m2
pop temp
ret


Вложения:
Комментарий к файлу: полный код на ассемблере
2.asm [1.12 KiB]
Скачиваний: 158
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программа тупо зацикливается.
СообщениеДобавлено: Вс окт 26, 2014 20:23:59 
Встал на лапы
Аватар пользователя

Карма: 4
Рейтинг сообщений: 41
Зарегистрирован: Сб дек 24, 2011 12:39:03
Сообщений: 134
Рейтинг сообщения: 0
Я не соображаю в АВРовском ассемблере, скажу идею. от 0 по 255 это же байт, а от 256 до 65535 - два байта. Та переменная должна быть двухбайтной. Видимо в асме нет таких переменных. Ну всё равно решается - просто будет не одна переменная а две - в одной младший байт числа (например того же 300) а в другом старший

_________________
Вышел из себя.
Пришел в себя.
Ушел в себя.
И решил больше сегодня никуда не ходить


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программа тупо зацикливается.
СообщениеДобавлено: Вс окт 26, 2014 21:04:13 
Опытный кот
Аватар пользователя

Карма: 6
Рейтинг сообщений: 54
Зарегистрирован: Ср июн 11, 2014 09:43:13
Сообщений: 721
Откуда: США
Рейтинг сообщения: -1
CyberVad, если не соображаете - зачем давать советы? ;)
И кого Вы там размножаете своей подписью?
Az4nt, Вам:
1. Стек используется, но не инициализирован
2. Не правильно организована задержка с двухбайтным числом
3. Куда Вас выкидывает ретурн? По какому адресу? И зачем Вы его вообще туда пхнули?
4. Не плохо было бы отключить сторожевой таймер.
5. Программа у Вас скорее всего виснет на метке m2, а не m1, как Вы сказали. Поскольку вместо TCNT1H обращаетесь к промежуточному регистру TEMP (нет, не тот temp, что Вы объявили), который не обновляется (нет чтения младшего регистра) и всегда равен 0 в Вашем случае (условие второй метки всегда истинно). Читайте подробнее про обращение к 16-разрядным регистрам.

_________________
Fucking static initialization order fiasco


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программа тупо зацикливается.
СообщениеДобавлено: Вс окт 26, 2014 21:41:52 
Мудрый кот
Аватар пользователя

Карма: 24
Рейтинг сообщений: 286
Зарегистрирован: Чт июн 10, 2010 08:55:35
Сообщений: 1810
Откуда: Сибирские Афины
Рейтинг сообщения: 0
Az4nt, начните, как уже посоветовали, с этого.
Pink-Pank писал(а):
Читайте подробнее про обращение к 16-разрядным регистрам.
А потом выясните как правильно сравнивать двухбайтовые числа.

CyberVad, у автора темы ещё не сложилось понимание нужного ему алгоритма. Ваш совет может стать полезным, если автор темы правильно его осмыслит. Так что не горячитесь "минусы" раздавать. :)

_________________
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)


Вернуться наверх
 
В продаже новые LED-драйверы XLC компании MEAN WELL с диммингом нового поколения

Компания MEAN WELL пополнила ассортимент своей широкой линейки светодиодных драйверов новым семейством XLC для внутреннего освещения. Главное отличие – поддержка широкого спектра проводных и беспроводных технологий диммирования. Новинки представлены в MEANWELL.market моделями с мощностями 25 Вт, 40 Вт и 60 Вт. В линейке есть модели, работающие как в режиме стабилизации тока (СС), так и в режиме стабилизации напряжения (CV) значением 12, 24 и 48 В.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Программа тупо зацикливается.
СообщениеДобавлено: Пн окт 27, 2014 03:24:07 
Опытный кот
Аватар пользователя

Карма: 6
Рейтинг сообщений: 54
Зарегистрирован: Ср июн 11, 2014 09:43:13
Сообщений: 721
Откуда: США
Рейтинг сообщения: 0
CyberVad - мужик! Нажал на кнопку "Да пошел ты!")))))

_________________
Fucking static initialization order fiasco


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программа тупо зацикливается.
СообщениеДобавлено: Пн окт 27, 2014 03:54:58 
Родился

Зарегистрирован: Вс окт 26, 2014 16:20:31
Сообщений: 4
Рейтинг сообщения: 0
стек я про инициализировал. Просто я сюда написал тот кусок программы который не работает как нада
вот полная программа: пример с задержкой с помощью счетчика взят из учебника, если count определить числом не больше байта, программа работает как нада, так как число больше байта я сравниваю сперва младшие разряды, а потом старшие: cpi temp,Low(count), cpi temp,Low(count): Вот подскажите пожалуйста где я ошибаюсь
; частота кристалла 1 МГц
.include "m8def.inc"
.def temp=r16
.def temp1=r17
.equ count=300
.cseg
.org 0
; инициализация стека
ldi temp,low(ramend)
out spl,temp
ldi temp,high(ramend)
out sph,temp
; ИНИЦИАЛИЗАЦИЯ ПОРТОВ
;----------
ldi temp,0b11111110
out ddrd,temp
ldi temp,0b11111111
out portd,temp
ldi temp,0b11111111
out ddrb,temp
ldi temp,0b00000000
out portb,temp
;----------
;инициализация таймера Т1
; предделитель 1024
ldi temp,0x05
out TCCR1B,temp
;программа
main: in temp,pind
sbrs temp,0 ; пропускаем если кнопка отжата
rjmp vlevo
;сдвиг вправо
ldi temp, 0b00000001
out portb,temp
flag1: rcall delay
lsl temp
out portb,temp
brcc flag1
rjmp main

;сдвиг влево
vlevo: ldi temp, 0b10000000
out portb,temp
flag2: rcall delay
lsr temp
out portb,temp
brcc flag2
rjmp main
;----------
; задержка с использованием счетчика
delay: push temp
ldi temp,0x00
out TCNT1H,temp
out TCNT1L,temp
m1: in temp,TCNT1L
cpi temp,Low(count)
brlo m1
m2: in temp,TCNT1H
cpi temp,High(count)
brlo m2
pop temp
ret

Если число 300 задать двумя регистрами 0x01 и 0x2C и использовать эти два регистра при сравнений, все равно программа не работает и зацикливается а метке m1, в атмел студио прогонял и в протеусе эмулировал. Если я не правильно сравниваю, подскажите книжку или ресурс в интернете, я сам взял из учебника Белова.


Последний раз редактировалось Az4nt Пн окт 27, 2014 04:10:54, всего редактировалось 1 раз.

Вернуться наверх
 
Распродажа паяльного оборудования ATTEN!
Паяльные станции, паяльники и аксессуары по самой выгодной цене.

По промокоду radiokot скидка 10%
Не в сети
 Заголовок сообщения: Re: Программа тупо зацикливается.
СообщениеДобавлено: Пн окт 27, 2014 04:01:34 
Опытный кот
Аватар пользователя

Карма: 6
Рейтинг сообщений: 54
Зарегистрирован: Ср июн 11, 2014 09:43:13
Сообщений: 721
Откуда: США
Рейтинг сообщения: 0
Так Вам уже сказали.) Не правильно работаете с 16-разрядными регистрами. Ссылку в гугл дать или сами сможете набрать?
Да, и все-таки сторожа отключите. ;)

_________________
Fucking static initialization order fiasco


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программа тупо зацикливается.
СообщениеДобавлено: Пн окт 27, 2014 04:12:41 
Родился

Зарегистрирован: Вс окт 26, 2014 16:20:31
Сообщений: 4
Рейтинг сообщения: 0
пока писал сообщение мне уже ответили. Если интересно могу прикрепить скриншот примера из учебника


Вложения:
Комментарий к файлу: Вот отсюда я взял как пример, константа kdel=780
Безымянный.png [89.05 KiB]
Скачиваний: 412


Последний раз редактировалось Az4nt Пн окт 27, 2014 04:41:29, всего редактировалось 1 раз.
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программа тупо зацикливается.
СообщениеДобавлено: Пн окт 27, 2014 04:34:31 
Родился

Зарегистрирован: Вс окт 26, 2014 16:20:31
Сообщений: 4
Рейтинг сообщения: 0
Всем кто ответил спасибо. Программа заработала когда я одновременно считывал регистр TCNT1. Вот так у меня получилось задержка в итоге:
; задержка с использованием счетчика
delay: push temp
ldi temp,0x00
ldi temp1,0x00
out TCNT1H,temp
out TCNT1L,temp1
m1: in temp,TCNT1L
in temp1,TCNT1H
cpi temp,Low(count)
brlo m1
m2: in temp,TCNT1L
in temp1,TCNT1H
cpi temp1,High(count)
brlo m2
pop temp
ret
Но все равно пример с учебника не дает мне покоя. Это косяк автора или мой косяк был((


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программа тупо зацикливается.
СообщениеДобавлено: Пн окт 27, 2014 04:55:20 
Друг Кота

Карма: 64
Рейтинг сообщений: 1013
Зарегистрирован: Пт мар 07, 2008 06:54:43
Сообщений: 4326
Откуда: Ижевск
Рейтинг сообщения: 0
Это "косяк" автора учебника. Обращение к 16-разрядным регистрам периферии атомарная операция, т.е. записали весь регистр(старший-младший) и считали весь регистр(младший-старший).
Код:
DEL:
.def   zero=R0

   CLR   ZERO
   OUT   TCCR1B,ZERO
   OUT   TCNT1H,ZERO
   OUT   TCNT1L,ZERO

   LDI   XH,HIGH(COUNT)
   LDI   XL,LOW(COUNT)

   LDI   R19,$05
   OUT   TCCR1B,R19
GO_DEL:
   IN   YL,TCNT1L
   IN   YH,TCNT1H

   CP   YL,XL
   CPC   YH,XH
   BRLO   GO_DEL

   OUT   TCCR1B,ZERO
   OUT   TCNT1H,ZERO
   OUT   TCNT1L,ZERO
   RET


Последний раз редактировалось akl Пн окт 27, 2014 04:57:56, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программа тупо зацикливается.
СообщениеДобавлено: Пн окт 27, 2014 04:56:53 
Опытный кот
Аватар пользователя

Карма: 6
Рейтинг сообщений: 54
Зарегистрирован: Ср июн 11, 2014 09:43:13
Сообщений: 721
Откуда: США
Рейтинг сообщения: 0
Ваш это косяк. Автор использует одну и ту же метку, а не две разных. В результате у автора будет работать, а у Вас -нет.

_________________
Fucking static initialization order fiasco


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программа тупо зацикливается.
СообщениеДобавлено: Пн окт 27, 2014 06:01:50 
Друг Кота

Карма: 64
Рейтинг сообщений: 1013
Зарегистрирован: Пт мар 07, 2008 06:54:43
Сообщений: 4326
Откуда: Ижевск
Рейтинг сообщения: 0
Только вместо ожидаемых 300...511 задержка будет 256, что, согласитесь, не совсем правильно.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программа тупо зацикливается.
СообщениеДобавлено: Пн окт 27, 2014 06:51:07 
Опытный кот
Аватар пользователя

Карма: 6
Рейтинг сообщений: 54
Зарегистрирован: Ср июн 11, 2014 09:43:13
Сообщений: 721
Откуда: США
Рейтинг сообщения: 0
А вот здесь Вы ошиблись. ) Задержка будет ровно такой, сколько нужно (после переполнения счет в TCNT1L вновь начнется с 0 и проверка первого условия возобновится).
Цитата:
Если я не правильно сравниваю, подскажите книжку или ресурс в интернете, я сам взял из учебника Белова

Скачайте Евстифеева "Микроконтроллеры AVR. Семейства Mega и Tiny." Будете ее листать в дополнение к Белову. ) Ответ на свой вопрос найдете в главе о 16-тиразярядных таймерах. Там подзаголовок "Операции с 16-разрядными регистрами".

_________________
Fucking static initialization order fiasco


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 13 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

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


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y