Egor Mexelion
Мастер
(1113)
15 часов назад
; Настройка конфигурации микроконтроллера
LIST P=16F877
INCLUDE <P16F877.INC>
__CONFIG _XT_OSC & _WDT_OFF & _PWRTE_ON & _LVP_OFF
; Определение регистров
TEMP_C EQU 0x20 ; Текущая температура в Цельсиях
TEMP_F EQU 0x21 ; Текущая температура в Фаренгейтах
COUNTER EQU 0x22 ; Счетчик задержки
SEGMENTS EQU PORTB ; Порт для вывода на индикаторы
DIGIT_SEL EQU PORTC ; Порт выбора индикатора
; Таблица данных температуры (Цельсий: от -50 до +50)
TABLE:
DT -50, -49, ..., 0, ..., +50
; Начало программы
ORG 0x00
GOTO MAIN
MAIN:
CLRF TEMP_C ; Сброс текущей температуры
CLRF TEMP_F ; Сброс температуры в Фаренгейтах
LOOP:
CALL READ_TEMP ; Чтение температуры из таблицы
CALL DISPLAY_C ; Отображение температуры в Цельсиях
CALL CONVERT_TO_F ; Конвертация в Фаренгейты
CALL DISPLAY_F ; Отображение температуры в Фаренгейтах
CALL DELAY_1S ; Задержка в 1 секунду
GOTO LOOP ; Повтор цикла
; Чтение температуры из таблицы
READ_TEMP:
; Логика загрузки температуры в TEMP_C
RETURN
; Отображение температуры в Цельсиях
DISPLAY_C:
; Преобразование TEMP_C в сегменты и вывод на индикатор
MOVF TEMP_C, W
CALL ENCODE_SEGMENTS
RETURN
; Конвертация в Фаренгейты
CONVERT_TO_F:
; F = (C * 9 / 5) + 32
MOVF TEMP_C, W
MULWF 0x09 ; Умножение на 9
DIVWF 0x05 ; Деление на 5
ADDWF 0x20, W ; Добавление 32
MOVWF TEMP_F
RETURN
; Отображение температуры в Фаренгейтах
DISPLAY_F:
; Преобразование TEMP_F в сегменты и вывод на индикатор
MOVF TEMP_F, W
CALL ENCODE_SEGMENTS
RETURN
; Преобразование числа в сегменты
ENCODE_SEGMENTS:
; Код преобразования для 14-сегментных индикаторов
RETURN
; Задержка в 1 секунду
DELAY_1S:
; Используем таймер для генерации задержки
RETURN
END
Алан СеитовУченик (95)
15 часов назад
Я тоже в чат гпт делал, но он бред выдает. В протеусе потом не работатет