Например TDA7294

Форум РадиоКот • Просмотр темы - 8051 ассемблер. Счет 0-9999.
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Вт фев 24, 2026 03:47:51

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


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



Начать новую тему Ответить на тему  [ Сообщений: 16 ] 
Автор Сообщение
 Заголовок сообщения: 8051 ассемблер. Счет 0-9999.
СообщениеДобавлено: Вт авг 17, 2021 05:25:02 
Грызет канифоль
Аватар пользователя

Зарегистрирован: Вс окт 20, 2019 13:03:56
Сообщений: 270
Рейтинг сообщения: 0
Пытаюсь написать подпрограмму десятичной считалки, и застрял. 0-99 считает, дальше не могу продолжить:

Код:
back:   inc   R1
   cjne   R1, #9, back
   mov   R1, #0
   inc   R2
   cjne   R2, #9, back
   cjne   R1, #9, back
   mov   R2, #0


При переходе к третьему разряду надо проверить на 9-ку R1, R2, и переходить к R3 но в R1 всегда ноль. Но не обнулять нельзя, тогда он просто считает дальше 9-ки. Вот тут я застрял.


Вернуться наверх
 
 Заголовок сообщения: Re: 8051 ассемблер. Счет 0-9999.
СообщениеДобавлено: Вт авг 17, 2021 07:07:29 
Друг Кота

Карма: 66
Рейтинг сообщений: 1025
Зарегистрирован: Пт мар 07, 2008 06:54:43
Сообщений: 4400
Откуда: Ижевск
Рейтинг сообщения: 0
А почему сравнение с 9, а не с 10. Типа

Код:
back:   inc   R1
   cjne   R1, #10, back
   mov   R1, #0
   inc   R2
   cjne   R2, #10, back
   mov   R2, #0
   inc   R3
   cjne   R3, #10, back
   mov   R3, #0
   inc   R4
   cjne   R4, #10, back
   mov   R4, #0
.
.


Вернуться наверх
 
 Заголовок сообщения: Re: 8051 ассемблер. Счет 0-9999.
СообщениеДобавлено: Вт авг 17, 2021 09:21:34 
Друг Кота
Аватар пользователя

Карма: 96
Рейтинг сообщений: 1505
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 15482
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
А нужны именно тетрады? (десятичная коррекция результата)
Может проще считать в двоичном формате, а уже результат таблично декодировать.
8)


Вернуться наверх
 
 Заголовок сообщения: Re: 8051 ассемблер. Счет 0-9999.
СообщениеДобавлено: Чт авг 19, 2021 07:57:26 
Грызет канифоль
Аватар пользователя

Зарегистрирован: Вс окт 20, 2019 13:03:56
Сообщений: 270
Рейтинг сообщения: 0
А почему сравнение с 9, а не с 10. Типа


Потому что после 9-ки в регистре появляется 0x0A, с которым непонятно что делать, если выводить результат из счетного регистра, и отправлять его на индикацию.
А хотелось бы что только 0-9.

можно еще конечно делать типа:
Код:
back: add A, #1
         da A
         cjne A, #99, back
         ...
       

и все получается. Но, надо будет разбирать результат на тетрады (громоздко), и не представляю как осуществлять обратный счет, т.к DA A с вычитанием не работает.


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
 Заголовок сообщения: Re: 8051 ассемблер. Счет 0-9999.
СообщениеДобавлено: Чт авг 19, 2021 10:04:01 
Друг Кота
Аватар пользователя

Карма: 96
Рейтинг сообщений: 1505
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 15482
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
А прямая табличная перекодировка?
можно и через DPTR
movc a,@a+dptr
и через текущий РС
movc a,@a+pc
Счет ведем в бинарном формате, декодировка из бинарника в неупакованный двоично-десятичный (0x0N) в зависимости от того, что удобнее. Далее из тетрады в сегментный код по табличке.
8)


Вернуться наверх
 
 Заголовок сообщения: Re: 8051 ассемблер. Счет 0-9999.
СообщениеДобавлено: Пт авг 20, 2021 11:48:10 
Модератор
Аватар пользователя

Карма: 153
Рейтинг сообщений: 2939
Зарегистрирован: Сб авг 14, 2010 15:05:51
Сообщений: 18960
Откуда: г. Озерск, Челябинская обл.
Рейтинг сообщения: 0
Медали: 1
Лучший человек Форума 2017 (1)
Shuspano писал(а):
Потому что после 9-ки в регистре появляется 0x0A, с которым непонятно что делать
именно когда в регистре появится 10, нужно обнулять регистр и делать перенос (инкремент) следующего разряда (регистра).
а то по твоему коду счет идет только до 9, а не до 10 - считает до 8, а потом сразу появляется 10. число 09 у тебя отсутствует.

_________________
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.


Вернуться наверх
 
 Заголовок сообщения: Re: 8051 ассемблер. Счет 0-9999.
СообщениеДобавлено: Пт авг 20, 2021 22:50:02 
Грызет канифоль
Аватар пользователя

Зарегистрирован: Вс окт 20, 2019 13:03:56
Сообщений: 270
Рейтинг сообщения: 0
именно когда в регистре появится 10, нужно обнулять регистр и делать перенос (инкремент) следующего разряда (регистра).

Кроме собственно, счета, надо забирать результат из счетного регистра. Если его забираю до сброса в ноль - у меня там десятка (x0A) оказывается, если после сброса в ноль - соответственно, там всегда ноль. Я уже уже прошагал это в симуляторе, это тоже не работает


Вернуться наверх
 
 Заголовок сообщения: Re: 8051 ассемблер. Счет 0-9999.
СообщениеДобавлено: Сб авг 21, 2021 04:58:58 
Друг Кота

Карма: 66
Рейтинг сообщений: 1025
Зарегистрирован: Пт мар 07, 2008 06:54:43
Сообщений: 4400
Откуда: Ижевск
Рейтинг сообщения: 0
Shuspano писал(а):
надо забирать результат из счетного регистра...

Код:
back:
   inc   R1
   cjne   R1, #10, back
   mov   R1, #0
   inc   R2
   cjne   R2, #10, back
   mov   R2, #0
   inc   R3
   cjne   R3, #10, back
   mov   R3, #0
   inc   R4
   cjne   R4, #10, back
   mov   R4, #0
;здесь нужно забирать состояние регистров счетчика 0...9999
.


Вернуться наверх
 
 Заголовок сообщения: Re: 8051 ассемблер. Счет 0-9999.
СообщениеДобавлено: Сб авг 21, 2021 08:30:29 
Друг Кота
Аватар пользователя

Карма: 96
Рейтинг сообщений: 1505
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 15482
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
Это уже вопрос организации цикла:
действие до инкремента/декремента
или
действие после инкремента/декремента
и
в каком месте анализ на завершение цикла проводится.
Поэтому для анализа и/или подсказки нужно видеть полную программу, а не только сам контрольный цикл.
8)
И второе...
собственно анализ только отдельно взятого цикла вывода на индикацию без источника приращения не бывает.
А там вероятно какой-то генератор на прерывании устроен. Либо есть возможность пресечения анализируемой прожки "сторонними подпрограммами"...
В результате как вариант еще и хранение критичных регистров в стеке на время прерывания добавится.
:roll:


Вернуться наверх
 
 Заголовок сообщения: Re: 8051 ассемблер. Счет 0-9999.
СообщениеДобавлено: Сб авг 21, 2021 11:56:35 
Модератор
Аватар пользователя

Карма: 153
Рейтинг сообщений: 2939
Зарегистрирован: Сб авг 14, 2010 15:05:51
Сообщений: 18960
Откуда: г. Озерск, Челябинская обл.
Рейтинг сообщения: 0
Медали: 1
Лучший человек Форума 2017 (1)
Shuspano писал(а):
Я уже уже прошагал это в симуляторе, это тоже не работает
не той дорогой ты шагал. у всех работает, а у тебя не работает.

_________________
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.


Вернуться наверх
 
 Заголовок сообщения: Re: 8051 ассемблер. Счет 0-9999.
СообщениеДобавлено: Сб авг 21, 2021 20:04:25 
Грызет канифоль
Аватар пользователя

Зарегистрирован: Вс окт 20, 2019 13:03:56
Сообщений: 270
Рейтинг сообщения: 0
Я меж тем главного не заметил, что считалка у меня не завершается никогда пока не досчитает до 9999. А она должна быть однопроходной, то есть может быть вызвана однократно.Оформил как подпрограмму, завел 4 ячейки памяти, которые вгружаю в счетные регистры в начале, и выгружаю из регистров при выходе. Как жаль, что CJNE не работает с адресами памяти, так бы удалось сэкономить 16 байт.
Насчет какой-то программы в общем... пока не знаю. Я пару лет назад удачно написал динамическую индикацию без внешних микрух, и пытаюсь придумать ей какую-то полезную загрузку.
Так все заработало, спасибо всем большое


Вернуться наверх
 
 Заголовок сообщения: Re: 8051 ассемблер. Счет 0-9999.
СообщениеДобавлено: Сб авг 21, 2021 20:40:46 
Друг Кота
Аватар пользователя

Карма: 96
Рейтинг сообщений: 1505
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 15482
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
Код 0xB5
CJNE a,ad,rel
Сравнение аккумулятора с содержимым ячейки РПД.
Вложение:
Mcs51tbl.pdf [1.55 MiB]
Скачиваний: 109

8)


Вернуться наверх
 
 Заголовок сообщения: Re: 8051 ассемблер. Счет 0-9999.
СообщениеДобавлено: Вс авг 22, 2021 11:02:37 
Грызет канифоль
Аватар пользователя

Зарегистрирован: Вс окт 20, 2019 13:03:56
Сообщений: 270
Рейтинг сообщения: 0
Да я знаю набор инструкций 8051. Просто в CJNE нельзя указать как источник прямой адрес памяти, типа, CJNE 0x33, #direct, rel - вот что печалит.
либо ACC, либо РОНы, либо @Ri - указатель на память


Вернуться наверх
 
 Заголовок сообщения: Re: 8051 ассемблер. Счет 0-9999.
СообщениеДобавлено: Вс авг 22, 2021 17:07:09 
Модератор
Аватар пользователя

Карма: 153
Рейтинг сообщений: 2939
Зарегистрирован: Сб авг 14, 2010 15:05:51
Сообщений: 18960
Откуда: г. Озерск, Челябинская обл.
Рейтинг сообщения: 0
Медали: 1
Лучший человек Форума 2017 (1)
а что, у тебя большой дефицит с памятью программы, что так важно сэкономить 16 байт?

_________________
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.


Вернуться наверх
 
 Заголовок сообщения: Re: 8051 ассемблер. Счет 0-9999.
СообщениеДобавлено: Вс авг 22, 2021 17:33:35 
Грызет канифоль
Аватар пользователя

Зарегистрирован: Вс окт 20, 2019 13:03:56
Сообщений: 270
Рейтинг сообщения: 0
а что, у тебя большой дефицит с памятью программы, что так важно сэкономить 16 байт?

Учили, что там где можно сократить, там надо сокращать.


Вернуться наверх
 
 Заголовок сообщения: Re: 8051 ассемблер. Счет 0-9999.
СообщениеДобавлено: Вс авг 22, 2021 18:23:44 
Друг Кота
Аватар пользователя

Карма: 96
Рейтинг сообщений: 1505
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 15482
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
Это разве что для АТ89С2051 имеет некоторое значение.
А для экономии в большинстве случаев удобнее подпрограммы использовать
Второе...
Не забываем, что как сравнение могут выступать и другие команды (а не только "неразрушающая" данные CJNE).
К примеру та же XRL с последующим анализом на нуль в аккумуляторе.
Да и много других приемов, не обязательно на основе математики - иногда логика удобнее или специфические особенности кодов используемых в программе данных.
Правда в таком случае порой приходится полностью переделывать и схемотехнику и программу заново писать.
8)
Да и собственно по CJNE a,adr,rel
одним операндом является содержимое аккумулятора а вторым содержимое ячейки ОЗУ, адрес которой указан в команде.
Собственно от того, какой из операндов будет первым результат не меняется (в любом случае оценивается равенство или неравенство) как и данные что в АCC, что в ячейке adr после операции сравнения.
В отличии от того же к примеру:
XRL a,adr
когда в аккумуляторе останется результат операции, т.е. "данные в АСС будут разрушены"
8)


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

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


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

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


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