Здравствуйте, пишу программу на ATmega16, хотел чтобы отображалось на двух семисегментных индикаторах значения от 00 до 99, после чего он обнулялся и всё начиналось с начала. Но возникла проблема, программа выводит не так как надо, а именно 00, 11, 22 и т.д. Не могли бы подсказать где я накосячил.. Мой код: .Macro outi LDI R16, @1 out @0, R16 .ENDM
.CSEG .ORG $000 ; reset RJMP Reset .ORG $002 Reti .ORG $004 Reti .ORG $008 Rjmp Timer2_OVF ; .ORG $00A Reti .ORG $00C Reti .ORG $00E Reti .ORG $010 Reti .ORG $012 Reti .ORG $014 Reti .ORG $016 Reti .ORG $018 Reti .ORG $01A Reti .ORG $01c Reti .ORG $01E Reti .ORG $020 Reti .ORG $022 Reti .ORG $024 Reti .ORG $026 Reti .ORG $028 Reti .ORG INT_vectors_SIZE ; Конец таблицы прерываний ; ********************** ; Инициализация ; ********************** Reset: //_____ .DEF Led=R17 .DEF MASK=R18 .DEF Ch1=R19 ;десятки .DEF Ch10=R20 ;еденицы .def Temp=r16 .def Temp1=r21 OUTI SPL, Low(ramend) ; инициализация стека OUTI SPH, High(ramend) //_____ OUTI DDRA, 255 OUTI DDRB, 255 //_____
Out portA, Led OUTI portB, 0b00000001 rcall Loop OUTI portB, 0b00000010 rcall Loop
Почему одна запись в portA? Половину времени светить сегменты десятков, другую половину времени - сегменты единиц. Если быстро переключать, глаз не будет видеть мерцания будет казаться что светятся два знака одновременно. Так работает "динамическая индикация". Вы один раз записываете сегменты, конечно в двух знаках увидите одинаковые значения.
Ну и что за индикатор? Какой-то "синтетический" (только для моделирования)?
Использование модульных источников питания открытого типа широко распространено в современных устройствах. Присущие им компактность, гибкость в интеграции и высокая эффективность делают их отличным решением для систем промышленной автоматизации, телекоммуникационного оборудования, медицинской техники, устройств «умного дома» и прочих приложений. Рассмотрим подробнее характеристики и особенности трех самых популярных вариантов AC/DC-преобразователей MW открытого типа, подходящих для применения в промышленных устройствах - серий EPS, EPP и RPS представленных на Meanwell.market.
Может попробовать для начала разделить обработку дисплея (вывод и динамическая развертка) и счетчик (инкремент и перекодировка данных для сегментов индикатора)?
Заголовок сообщения: Re: Два семисегментных индикатора и таймер
Добавлено: Пт апр 04, 2025 11:27:01
Опытный кот
Зарегистрирован: Вс мар 23, 2025 14:56:55 Сообщений: 700
Рейтинг сообщения:0
Спойлер
Код:
.Macro outi LDI R16, @1 out @0, R16 .ENDM
.CSEG .ORG $000 ; reset RJMP Reset .ORG $002 Reti .ORG $004 Reti .ORG $008 Rjmp Timer2_OVF ; .ORG $00A Reti .ORG $00C Reti .ORG $00E Reti .ORG $010 Reti .ORG $012 Reti .ORG $014 Reti .ORG $016 Reti .ORG $018 Reti .ORG $01A Reti .ORG $01c Reti .ORG $01E Reti .ORG $020 Reti .ORG $022 Reti .ORG $024 Reti .ORG $026 Reti .ORG $028 Reti .ORG INT_vectors_SIZE ; Конец таблицы прерываний
Разбираться в чужом да весьма неудобном задании... Но таки и сие можно попробовать подправить... Дабы не сильно портить исходное от DenisLoga вот такой вариант (в студии не проверял!) вроде должен быть: Спойлер
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения