gavrasm Gerd's AVR assembler version 5.4 (C)2022 by DG4FAC ---------------------------------------------------------- Path: /home/sergeyyarkov/Documents/Projects/Firmwares/AVR/attiny2313a_thermostat/ Source file: firmware.asm Hex file: firmware.hex Eeprom file: firmware.eep Compiled: 20.04.2023, 00:25:25 Pass: 2 1: ; 2: ; Project name: thermostat 3: ; Description: Electronic thermostat on AVR Microcontroller 4: ; Source code: https://github.com/sergeyyarkov/attiny2313a_thermostat 5: ; Device: ATtiny2313A 6: ; Device Datasheet: http://ww1.microchip.com/downloads/en/DeviceDoc/doc8246.pdf 7: ; Package: SOIC-20W_7.5x12.8mm_P1.27mm 8: ; Assembler: AVR macro assembler 2.2.7 9: ; Clock frequency: 8 MHz External Crystal Oscillator 10: ; Fuses: lfuse: 0xCF, hfuse: 0x9F, efuse: 0xFF, lock: 0xFF 11: ; 12: ; Written by Sergey Yarkov 22.01.2023 13: 14: .INCLUDE "tn2313Adef.inc" -> Warning 009: Include defs not necessary, using internal values! File: /home/sergeyyarkov/Documents/Projects/Firmwares/AVR/attiny2313a_thermostat/firmware.asm, Line: 14 Source line: .INCLUDE "tn2313Adef.inc" 15: .LIST 16: 17: .DEF TEMP_REG_A = r16 18: .DEF TEMP_REG_B = r17 19: 20: .EQU DIGIT_1_PIN = PD2 21: .EQU DIGIT_2_PIN = PD3 22: .EQU DIGIT_3_PIN = PD4 23: .EQU DIGIT_4_PIN = PD5 24: 25: .EQU LED_POWER_PIN = PD6 26: 27: .EQU USI_LATCH_PIN = PB0 ; ST_CP on 74HC595 28: .EQU USI_DO_PIN = PB6 ; DS on 74HC595 29: .EQU USI_CLK_PIN = PB7 ; SH_CP on 74HC595 30: 31: .EQU MCU_STATE_DEFAULT = 0x01 ; Режим измерения температуры и сравнения с заданными параметрами 32: .EQU MCU_STATE_PROGRAM = 0x02 ; Режим настройки параметров в EEPROM 33: .EQU MCU_STATE_ERROR = 0x03 ; Режим ошибки, например когда не подключен датчик 34: 35: ; **** СЕГМЕНТ ДАННЫХ ******************************************** 36: .DSEG 37: .ORG SRAM_START 38: 39: MCU_STATE: .BYTE 1 ; Текущее состояние МК 40: NUMBER: .BYTE 2 41: DIGITS: .BYTE 4 ; Ячейки, где хранятся символы, для вывода на индикатор 42: CURRENT_DIGIT: .BYTE 1 ; Номер разряда индикатора, который сейчас горит 43: 44: ; **** СЕГМЕНТ КОДА ********************************************** 45: .CSEG 46: 47: .ORG 0x00 48: 000000 C040 rjmp RESET_vect 49: 50: .ORG 0x000D 51: 00000D C000 rjmp TIMER0_COMPA_vect 52: 53: ; **** ДИНАМИЧЕСКАЯ ИНДИКАЦИЯ ************************************ 54: TIMER0_COMPA_vect: 55: 00000E 9140 lds r20, CURRENT_DIGIT 00000F 0067 56: 000010 3045 cpi r20, 5 57: 000011 F40C brge reset_digit_idx 58: 000012 C003 rjmp _indicate_1 59: 60: reset_digit_idx: 61: 000013 2744 clr r20 62: 000014 9340 sts CURRENT_DIGIT, r20 000015 0067 63: 64: _indicate_1: 65: 000016 3040 cpi r20, 0 66: 000017 F439 brne _indicate_2 67: 68: 000018 EF0B ldi r16, ~(1< USI Wire Mode 14: ; USICS1 <--------------> USI Clock Source Select 15: ; USICLK <--------------> USI Clock Strobe 16: ; USITC <--------------> USI Toggle Clock (Enable clock generation) 17: 00006E E10B ldi TEMP_REG_A, (1<