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: 23.04.2023, 20:09:24 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: .DEF DISP_NUM_L = r22 20: .DEF DISP_NUM_H = r23 21: 22: .EQU DIGIT_1_PIN = PD2 23: .EQU DIGIT_2_PIN = PD3 24: .EQU DIGIT_3_PIN = PD4 25: .EQU DIGIT_4_PIN = PD5 26: 27: .EQU LED_POWER_PIN = PD6 ; Светодиод, который говорит о том что питание подано 28: 29: .EQU USI_LATCH_PIN = PB0 ; ST_CP на 74HC595 30: .EQU USI_DO_PIN = PB6 ; DS на 74HC595 31: .EQU USI_CLK_PIN = PB7 ; SH_CP на 74HC595 32: 33: .EQU MCU_STATE_DEFAULT = 0x01 ; Режим измерения температуры и сравнения с заданными параметрами 34: .EQU MCU_STATE_PROGRAM = 0x02 ; Режим настройки параметров в EEPROM 35: .EQU MCU_STATE_ERROR = 0x03 ; Режим ошибки, например когда не подключен датчик 36: 37: ; **** МАКРОСЫ ************************************************** 38: .MACRO outi 39: ldi @0, @2 40: out @1, @0 41: .ENDMACRO 42: 43: .MACRO display_load 44: ldi DISP_NUM_L, LOW(@0) 45: ldi DISP_NUM_H, HIGH(@0) 46: .ENDMACRO 47: 48: ; **** СЕГМЕНТ ДАННЫХ ******************************************** 49: .DSEG 50: .ORG SRAM_START 51: 52: MCU_STATE: .BYTE 1 ; Текущее состояние МК 53: SRAM_TEMP_1: .BYTE 2 ; Хранения временного 16-бит числа в ячейке 54: DIGITS: .BYTE 4 ; Ячейки, где хранятся символы, для вывода на индикатор 55: CURRENT_DIGIT: .BYTE 1 ; Номер разряда индикатора, который сейчас горит 56: 57: ; **** СЕГМЕНТ КОДА ********************************************** 58: .CSEG 59: 60: .ORG 0x00 61: 000000 C043 rjmp RESET_vect 62: 63: .ORG 0x000D 64: 00000D C000 rjmp TIMER0_COMPA_vect 65: 66: ; **** ДИНАМИЧЕСКАЯ ИНДИКАЦИЯ ************************************ 67: TIMER0_COMPA_vect: 68: 00000E 934F push r20 69: 00000F 9140 lds r20, CURRENT_DIGIT 000010 0067 70: 000011 3045 cpi r20, 5 71: 000012 F40C brge reset_digit_idx 72: 000013 C003 rjmp _indicate_1 73: 74: reset_digit_idx: 75: 000014 2744 clr r20 76: 000015 9340 sts CURRENT_DIGIT, r20 000016 0067 77: 78: _indicate_1: 79: 000017 3040 cpi r20, 0 80: 000018 F441 brne _indicate_2 81: 82: 000019 9893 cbi PORTD, DIGIT_2_PIN 83: 00001A 9894 cbi PORTD, DIGIT_3_PIN 84: 00001B 9895 cbi PORTD, DIGIT_4_PIN 85: 00001C 9A92 sbi PORTD, DIGIT_1_PIN 86: 00001D 9100 lds TEMP_REG_A, DIGITS+3 00001E 0066 87: 00001F D072 rcall DISPLAY_DECODER 88: 000020 D051 rcall USI_TRANSMIT 89: 90: _indicate_2: 91: 000021 3041 cpi r20, 1 92: 000022 F441 brne _indicate_3 93: 94: 000023 9892 cbi PORTD, DIGIT_1_PIN 95: 000024 9894 cbi PORTD, DIGIT_3_PIN 96: 000025 9895 cbi PORTD, DIGIT_4_PIN 97: 000026 9A93 sbi PORTD, DIGIT_2_PIN 98: 000027 9100 lds TEMP_REG_A, DIGITS+2 000028 0065 99: 000029 D068 rcall DISPLAY_DECODER 100: 00002A D047 rcall USI_TRANSMIT 101: 102: _indicate_3: 103: 00002B 3042 cpi r20, 2 104: 00002C F441 brne _indicate_4 105: 106: 00002D 9892 cbi PORTD, DIGIT_1_PIN 107: 00002E 9893 cbi PORTD, DIGIT_2_PIN 108: 00002F 9895 cbi PORTD, DIGIT_4_PIN 109: 000030 9A94 sbi PORTD, DIGIT_3_PIN 110: 000031 9100 lds TEMP_REG_A, DIGITS+1 000032 0064 111: 000033 D05E rcall DISPLAY_DECODER 112: 000034 D03D rcall USI_TRANSMIT 113: 114: _indicate_4: 115: 000035 3043 cpi r20, 3 116: 000036 F441 brne _indicate_exit 117: 118: 000037 9892 cbi PORTD, DIGIT_1_PIN 119: 000038 9893 cbi PORTD, DIGIT_2_PIN 120: 000039 9894 cbi PORTD, DIGIT_3_PIN 121: 00003A 9A95 sbi PORTD, DIGIT_4_PIN 122: 00003B 9100 lds TEMP_REG_A, DIGITS 00003C 0063 123: 00003D D054 rcall DISPLAY_DECODER 124: 00003E D033 rcall USI_TRANSMIT 125: 126: _indicate_exit: 127: 00003F 9543 inc r20 128: 000040 9340 sts CURRENT_DIGIT, r20 000041 0067 129: 000042 914F pop r20 130: 000043 9518 reti 131: 132: ; **** СТАРТ ПРОГРАММЫ ******************************************* 133: RESET_vect: 134: 000044 ED0F ldi TEMP_REG_A, LOW(RAMEND) 135: 000045 BF0D out SPL, TEMP_REG_A 136: 137: ; **** ПРОЦЕСС ИНИЦИАЛИЗАЦИИ МК ********************************** 138: MCU_INIT: 139: ; **** ИНИЦИАЛИЗАЦИЯ ПОРТОВ ************************************ 140: outi r16, DDRD, (1< USI Wire Mode 14: ; USICS1 <--------------> USI Clock Source Select 15: ; USICLK <--------------> USI Clock Strobe 16: ; USITC <--------------> USI Toggle Clock (Enable clock generation) 17: 000075 E10B ldi TEMP_REG_A, (1< Warning 004: Number of bytes on line is odd, added 00 to fit program memory! File: /home/sergeyyarkov/Documents/Projects/Firmwares/AVR/attiny2313a_thermostat/firmware.asm, Line: 273 Source line: .DB 0b10011100 ; ° 0000B8 009C 274: 275: ; **** СЕГМЕНТ EEPROM ******************************************** 276: ; .ESEG 277: ; INFO: .DB "AVR Thermostat. Written by Sergey Yarkov 22.01.2023" List of symbols: Type nDef nUsed Decimalval Hexval Name T 1 1 89 59 ATTINY2313A L 1 0 96 60 MCU_STATE L 1 1 97 61 SRAM_TEMP_1 L 1 6 99 63 DIGITS L 1 4 103 67 CURRENT_DIGIT L 1 2 14 0E TIMER0_COMPA_VECT L 1 2 20 14 RESET_DIGIT_IDX L 1 2 23 17 _INDICATE_1 L 1 2 33 21 _INDICATE_2 L 1 2 43 2B _INDICATE_3 L 1 2 53 35 _INDICATE_4 L 1 2 63 3F _INDICATE_EXIT L 1 2 68 44 RESET_VECT L 1 0 70 46 MCU_INIT L 1 2 90 5A LOOP L 1 2 95 5F DIV16U L 1 4 98 62 D16U_1 L 1 2 103 67 D16U_2 L 1 2 112 70 D16U_3 L 1 8 114 72 USI_TRANSMIT L 1 2 118 76 _USI_TRANSMIT_LOOP L 1 2 124 7C DISPLAY_UPD_DIGITS L 1 2 131 83 DIV_LOOP L 1 8 146 92 DISPLAY_DECODER L 1 2 153 99 DELAY L 1 2 156 9C _L_1 L 1 2 157 9D _DEC_1 L 1 2 170 AA TOGGLE_POWER_LED L 1 4 179 B3 DISPLAY_SYMBOLS R 1 11 16 10 TEMP_REG_A R 1 2 17 11 TEMP_REG_B R 1 2 22 16 DISP_NUM_L R 1 1 23 17 DISP_NUM_H R 1 5 14 0E DREM16UL R 1 5 15 0F DREM16UH R 1 1 16 10 DRES16UL R 1 1 17 11 DRES16UH R 1 2 16 10 DD16UL R 1 2 17 11 DD16UH R 1 3 18 12 DV16UL R 1 3 19 13 DV16UH R 1 2 20 14 DCNT16U C 1 0 23 17 NOW_Y C 1 0 4 04 NOW_M C 1 0 23 17 NOW_D C 1 0 45039 AFEF NOW_I C 1 5 2 02 DIGIT_1_PIN C 1 5 3 03 DIGIT_2_PIN C 1 5 4 04 DIGIT_3_PIN C 1 5 5 05 DIGIT_4_PIN C 1 2 6 06 LED_POWER_PIN C 1 3 0 00 USI_LATCH_PIN C 1 1 6 06 USI_DO_PIN C 1 1 7 07 USI_CLK_PIN C 1 0 1 01 MCU_STATE_DEFAULT C 1 0 2 02 MCU_STATE_PROGRAM C 1 0 3 03 MCU_STATE_ERROR C 1 6 97 61 DIVIDEND C 1 2 10 0A DIVISOR List of macros: nLines nUsed nParams Name 2 6 3 OUTI 2 1 1 DISPLAY_LOAD Program : 167 words. Constants : 6 words. Total program memory: 173 words. Eeprom space : 0 bytes. Data segment : 8 bytes. Compilation completed, no errors. Compilation ended 23.04.2023, 20:09:24