Важная информация

User Tag List

Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 14

Тема: Ассемблер i8080, семисегментные индикаторы.

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1
    Member
    Регистрация
    12.01.2014
    Адрес
    г. Краснодар
    Сообщений
    124
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Ассемблер i8080, семисегментные индикаторы.

    Подскажите пожалуйста, как средствами ассемблера для
    i8080 преобразовывать шестнадцатеричный код в код
    семисегментного индикатора? Что бы без использования
    всяких дополнительных дешифраторов выводить на семиэлементных
    индикаторах символы от 0 до F и любые другие. Моих "познаний"
    в ассемблере никак не хватает, что бы понять, по какому принципу
    делать алгоритм преобразования HEX to 7-LED.

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2
    Guru Аватар для Vladimir_S
    Регистрация
    12.12.2011
    Адрес
    г. Иркутск
    Сообщений
    2,507
    Спасибо Благодарностей отдано 
    8
    Спасибо Благодарностей получено 
    21
    Поблагодарили
    19 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Elvys, Множество способов, к примеру преобразовать число 2(в аккумуляторе).
    Миниатюры Миниатюры Нажмите на изображение для увеличения. 

Название:	xxxxxxxxx.jpg 
Просмотров:	591 
Размер:	14.2 Кб 
ID:	57322  

  4. #3
    Member
    Регистрация
    12.01.2014
    Адрес
    г. Краснодар
    Сообщений
    124
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    У меня получилась такая процедура:

    Скрытый текст

    Код:
    	
            mvi a, 0Fh ;Преобразуемое число
    ;Программа
    	lxi b, seg
    	add c
    	mov e, a
    	mov a, b
    	adc a
    	mov d, a
    	ldax d
    ;Вывод результата
    	out .....
    ;Таблица
    seg:	db 3Fh, 06h, 5Bh, 4Fh, 66h, 6Dh, 7Dh, 07h
    	db 7Fh, 6Fh, 77h, 7Ch, 39h, 5Eh, 79h, 71h
    [свернуть]


    Не знаю, на сколько она корректна. По результатам
    насилия симулятора, промахов мимо таблицы не случалось,
    независимо от состояния флага переноса.
    Это я о подводном камне из вложения

    На момент готовности своего варианта процедуры "перекодировки"
    я еще не видел других вложений с кодом.
    С ними так же буду пробовать разобраться.

    Update:
    Посмотрев другие вложения, составил новый код процедуры.
    Предыдущий код оказывал влияние на флаг переноса С,
    и пришлось делать извращение, что бы его учесть.
    Новый код никак не влияет на состояние флага С, и
    при этом корректно формирует адрес обращения к
    таблице "перекодировки".

    Скрытый текст

    Код:
    	mvi a, 0Fh ;Преобразуемое число
    ;Программа
    	lxi h, 0000h
    	add l
    	mov l, a
    	lxi d, seg
    	dad d
    	xchg
    	ldax d
    ;Вывод результата
    	out .....
    ;Таблица
    seg:	db 3Fh, 06h, 5Bh, 4Fh, 66h, 6Dh, 7Dh, 07h
    	db 7Fh, 6Fh, 77h, 7Ch, 39h, 5Eh, 79h, 71h
    [свернуть]

    В любом случае, не ручаюсь за корректность, т.к. сильно начинающий
    в программировании и оба этих примера родились исключительно благодаря
    помощи от уважаемого Vladimir_S
    И да, эти состряпанные мной процедуры никак не учитывают, что
    1. Выводится на индикаторы, обычно, результат каких-то действий,
    представляющий собой 8 бит в аккумуляторе, а это значит что вывод
    нужно делать на два индикатора - по полубайту на каждый.
    2. Для вывода я использовал OUT, имея ввиду что индикаторы это порты В/В.
    Однако, возможно использование STAX, и это даже сократило бы код.
    Последний раз редактировалось Elvys; 06.06.2016 в 22:11.

  5. #4
    Master
    Регистрация
    31.01.2007
    Адрес
    Москва
    Сообщений
    715
    Спасибо Благодарностей отдано 
    7
    Спасибо Благодарностей получено 
    43
    Поблагодарили
    32 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Elvys Посмотреть сообщение
    По результатам насилия симулятора, промахов мимо таблицы не случалось,
    Откомпилируйте и запустите не в нулевых адресах, а немного повыше, а лучше подумайте а не копируйте и переделывайте чужое. Весь код в этой теме либо не рабочий, либо с жуткой избыточностью.

    Скрытый текст


    Код:
    ;
    	adi led&#ff
    	mov l,a
    	aci led/#100
    	sub l
    	mov h,a
    	mov a,m
    ;
    	lxi h,led
    	mvi b,0
    	mov c,a
    	dad b
    	mov a,m
    [свернуть]
    Последний раз редактировалось krt17; 07.06.2016 в 09:38.

  6. #5
    Master
    Регистрация
    19.11.2012
    Адрес
    г. Луганск
    Сообщений
    698
    Спасибо Благодарностей отдано 
    29
    Спасибо Благодарностей получено 
    82
    Поблагодарили
    55 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Elvys
    Извините а зачем вам это нужно?
    У вас некое устройство, процессор будет записывать число в порт. Намного легче поставить дешифратор.

  7. #6
    Member
    Регистрация
    12.01.2014
    Адрес
    г. Краснодар
    Сообщений
    124
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от PATHNK Посмотреть сообщение
    Намного легче поставить дешифратор
    Вот как раз от использования дешифратора и хочется уйти.
    Это имеет отношение к расширению возможностей индикации для "ЮТ-88".

  8. #7
    Master
    Регистрация
    31.01.2007
    Адрес
    Москва
    Сообщений
    715
    Спасибо Благодарностей отдано 
    7
    Спасибо Благодарностей получено 
    43
    Поблагодарили
    32 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Парни вы ппц.

  9. #8
    Member
    Регистрация
    12.01.2014
    Адрес
    г. Краснодар
    Сообщений
    124
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Если код работает при запуске хоть с одного какого-то адреса, его нельзя назвать нерабочим.
    В нем просто есть bug ... И вообще, я только учусь....
    Человек просто подкинул мне пару примеров. Я с ними помучился и имею представление,
    в каком направлении решать нужную мне задачу.

  10. #9
    Member Аватар для scaraby
    Регистрация
    06.06.2015
    Адрес
    г. Раменское, Московская обл.
    Сообщений
    93
    Записей в дневнике
    1
    Спасибо Благодарностей отдано 
    10
    Спасибо Благодарностей получено 
    21
    Поблагодарили
    10 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    В этом примере исходный байт преобразовывается в два семисегментных кода. Значение адреса, по которому располагается "знакогенератор", не важно.

    Скрытый текст

    Код:
    	;ПК8000
    	;Прекрасный ассемблер КР580ВМ80А
    	;http://asdasd.rpg.fi/~svo/i8080/
    
    .binfile hex7led.bin
    .org 4000h	;начальный адрес программы в ОЗУ
    
    ;--------------------------------------------------------------------------------
    ; Константы									;
    ;--------------------------------------------------------------------------------
    
    
    
    
    ;--------------------------------------------------------------------------------
    ; Переменные									;
    ;--------------------------------------------------------------------------------
    
    	;массив кодов символов семисегментного индикатора
    	;в случае индикатора с общим анодом, значения инвертировать
    
    Led:
    	db 01100000b
    	db 11011010b
    	db 11110010b
    	db 01100110b
    	db 10110110b
    	db 10111110b
    	db 11100000b
    	db 11111110b
    	db 11110110b
    	db 11101110b
    	db 00111110b
    	db 10011100b
    	db 01111010b
    	db 10011110b
    	db 10001110b
    
    HexData db 0	;исходное шестнадцатиричное число
    
    Led0 db 0	;код символа для младшего полубайта 
    Led1 db 0	;код символа для старшего полубайта
    
    ;--------------------------------------------------------------------------------
    ; Главный модуль								;
    ;--------------------------------------------------------------------------------
    
    Start:
    
    	;фрагмент, формирующий значение, которое необходимо отобразить
    
    	lda HexData
    
    	;младший полубайт
    
    	ani 0fh		;обнуляем 4 старших бита
    	
    	call HexToLed
    
    	sta Led0	;сохраняем этот код в ОЗУ для дальнейшего использования
    
    	;старший полубайт
    
    	lda HexData
    
    	ani 0f0h	;обнуляем 4 младших бита
    	rrc		;и меняем полубайты местами
    	rrc
    	rrc
    	rrc
    
    	call HexToLed
    
    	sta Led1	;сохраняем этот код в ОЗУ для дальнейшего использования
    
    ;	out xx		;вывод в порт старшего полубайта
    ;	lda Led0
    ;	out xx		;вывод в порт младшего полубайта
    
    	ret		;выход из программы
    	
    ;--------------------------------------------------------------------------------
    ; Процедуры									;
    ;--------------------------------------------------------------------------------
    
    
    	;процедура расчёта адреса байта для семисегментного кода
    	;на входе acc - число от 0 до 0fh, на выходе в acc - семисегментный код
    
    HexToLed:
    	lxi h,Led	;адрес начала массива семисегментных кодов
    	add l		;находим адрес кода, соответствующий весу цифры
    	mov l,a		;не забывам, что результат сложения остаётся в acc
    	mov a,m		;загружаем в acc найденный код
    
    	rnc		;если не было переноса CF=0, то возврат
    
    	mov a,h		;если вылез CF, то это необходимо учесть
    	aci 0		;прибавляем CF к старшему полубайту адреса искомого кода
    	mov h,a		;помним, что результат всегда в acc
    
    	mov a,m		;загружаем в acc найденный код
    
    	ret
    [свернуть]
    Последний раз редактировалось scaraby; 07.06.2016 в 19:49.

  11. #10
    Master
    Регистрация
    19.11.2012
    Адрес
    г. Луганск
    Сообщений
    698
    Спасибо Благодарностей отдано 
    29
    Спасибо Благодарностей получено 
    82
    Поблагодарили
    55 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Может лучше это или это?

Страница 1 из 2 12 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. PMI-80 - одноплатник на i8080
    от rw6hrm в разделе Разное
    Ответов: 72
    Последнее: 02.09.2022, 12:27
  2. Код эмуляции i8080 на С
    от medvdv в разделе Эмуляторы отечественных компьютеров
    Ответов: 15
    Последнее: 27.03.2015, 03:43
  3. Эмулятор i8080
    от Higgins в разделе Разное
    Ответов: 2
    Последнее: 20.05.2011, 11:43
  4. Забавные индикаторы
    от Orionsoft в разделе Несортированное железо
    Ответов: 11
    Последнее: 27.01.2007, 23:05

Ваши права

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