mirror of
https://github.com/sergeyyarkov/attiny2313a_thermostat.git
synced 2026-10-12 02:38:53 +03:00
491 lines
22 KiB
Plaintext
491 lines
22 KiB
Plaintext
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<<LED_POWER_PIN) | (1<<DIGIT_1_PIN) | (1<<DIGIT_2_PIN) | (1<<DIGIT_3_PIN) | (1<<DIGIT_4_PIN)
|
||
140: 000046 E70C ldi R16, (1<<LED_POWER_PIN)|(1<<DIGIT_1_PIN)|(1<<DIGIT_2_PIN)|(1<<DIGIT_3_PIN)|(1<<DIGIT_4_PIN)
|
||
140: 000047 BB01 out DDRD, R16
|
||
141: outi r16, DDRB, (1<<USI_CLK_PIN) | (1<<USI_DO_PIN) | (1<<USI_LATCH_PIN) | (1<<PB2)
|
||
141: 000048 EC05 ldi R16, (1<<USI_CLK_PIN)|(1<<USI_DO_PIN)|(1<<USI_LATCH_PIN)|(1<<PB2)
|
||
141: 000049 BB07 out DDRB, R16
|
||
142:
|
||
143: ; **** ИНИЦИАЛИЗАЦИЯ ТАЙМЕРОВ **********************************
|
||
144: outi r16, TCCR0A, (1<<WGM01) ; режим CTC Compare A
|
||
144: 00004A E002 ldi R16, (1<<WGM01)
|
||
144: 00004B BF00 out TCCR0A, R16
|
||
145: outi r16, TCCR0B, (1<<CS02) | (1<<CS00) ; 1024 делитель
|
||
145: 00004C E005 ldi R16, (1<<CS02)|(1<<CS00)
|
||
145: 00004D BF03 out TCCR0B, R16
|
||
146: outi r16, OCR0A, 25 ; число для сравнения. (60Hz)
|
||
146: 00004E E109 ldi R16, 25
|
||
146: 00004F BF06 out OCR0A, R16
|
||
147: outi r16, TIMSK, (1<<OCIE0A) ; включение прерывания по совпадению
|
||
147: 000050 E001 ldi R16, (1<<OCIE0A)
|
||
147: 000051 BF09 out TIMSK, R16
|
||
148:
|
||
149: 000052 2411 clr r1
|
||
150: 000053 E6E6 ldi ZL,LOW(2*DISPLAY_SYMBOLS)
|
||
151: 000054 E0F1 ldi ZH,HIGH(2*DISPLAY_SYMBOLS)
|
||
152:
|
||
153: 000055 9210 sts CURRENT_DIGIT, r1
|
||
000056 0067
|
||
154:
|
||
155: 000057 9478 sei
|
||
156: display_load 240 ; загружаем число, которое нужно показать на индикатор
|
||
156: 000058 EF60 ldi DISP_NUM_L, LOW(240)
|
||
156: 000059 E070 ldi DISP_NUM_H, HIGH(240)
|
||
157:
|
||
158: ; **** ГЛАВНЫЙ ЦИКЛ **********************************************
|
||
159: LOOP:
|
||
160: 00005A D021 rcall DISPLAY_UPD_DIGITS ; получаем из этого числа цифры путем деления и распределяем их по ячейкам в SRAM
|
||
161:
|
||
162: 00005B D04E rcall TOGGLE_POWER_LED
|
||
163: 00005C D03C rcall DELAY
|
||
164:
|
||
165: 00005D 9563 inc DISP_NUM_L
|
||
166:
|
||
167: 00005E CFFB rjmp LOOP
|
||
168:
|
||
169: ; **** ПОДПРОГРАММЫ **********************************************
|
||
170: .INCLUDE "div16u.asm"
|
||
Including file div16u.asm
|
||
|
||
1: ;***************************************************************************
|
||
2: ;*
|
||
3: ;* "div16u" - 16/16 Bit Unsigned Division
|
||
4: ;*
|
||
5: ;* This subroutine divides the two 16-bit numbers
|
||
6: ;* "dd8uH:dd8uL" (dividend) and "dv16uH:dv16uL" (divisor).
|
||
7: ;* The result is placed in "dres16uH:dres16uL" and the remainder in
|
||
8: ;* "drem16uH:drem16uL".
|
||
9: ;*
|
||
10: ;* Number of words :19
|
||
11: ;* Number of cycles :235/251 (Min/Max)
|
||
12: ;* Low registers used :2 (drem16uL,drem16uH)
|
||
13: ;* High registers used :5 (dres16uL/dd16uL,dres16uH/dd16uH,dv16uL,dv16uH,
|
||
14: ;* dcnt16u)
|
||
15: ;*
|
||
16: ;***************************************************************************
|
||
17:
|
||
18: ;***** Subroutine Register Variables
|
||
19:
|
||
20: .def drem16uL=r14
|
||
21: .def drem16uH=r15
|
||
22: .def dres16uL=r16
|
||
23: .def dres16uH=r17
|
||
24: .def dd16uL =r16
|
||
25: .def dd16uH =r17
|
||
26: .def dv16uL =r18
|
||
27: .def dv16uH =r19
|
||
28: .def dcnt16u =r20
|
||
29:
|
||
30: ;***** Code
|
||
31:
|
||
32: div16u:
|
||
33: 00005F 24EE clr drem16uL ; clear remainder Low byte
|
||
34: 000060 18FF sub drem16uH,drem16uH ; clear remainder High byte and carry
|
||
35: 000061 E141 ldi dcnt16u,17 ; init loop counter
|
||
36: d16u_1:
|
||
37: 000062 1F00 rol dd16uL ; shift left dividend
|
||
38: 000063 1F11 rol dd16uH
|
||
39: 000064 954A dec dcnt16u ; decrement counter
|
||
40: 000065 F409 brne d16u_2 ; if done
|
||
41: 000066 9508 ret ; return
|
||
42: d16u_2:
|
||
43: 000067 1CEE rol drem16uL ; shift dividend into remainder
|
||
44: 000068 1CFF rol drem16uH
|
||
45: 000069 1AE2 sub drem16uL,dv16uL ; remainder = remainder - divisor
|
||
46: 00006A 0AF3 sbc drem16uH,dv16uH
|
||
47: 00006B F420 brcc d16u_3 ; if result negative
|
||
48: 00006C 0EE2 add drem16uL,dv16uL ; restore remainder
|
||
49: 00006D 1EF3 adc drem16uH,dv16uH
|
||
50: 00006E 9488 clc ; clear carry to be shifted into result
|
||
51: 00006F CFF2 rjmp d16u_1 ; else
|
||
52: d16u_3:
|
||
53: 000070 9408 sec ; set carry to be shifted into result
|
||
54: 000071 CFF0 rjmp d16u_1
|
||
Continuing file firmware.asm
|
||
171: .INCLUDE "usi.asm"
|
||
Including file usi.asm
|
||
|
||
1: ; **** ОТПРАВКА БАЙТА В СДВИГОВЫЙ РЕГИСТР *************************
|
||
2: USI_TRANSMIT:
|
||
3: 000072 B80F out USIDR, r0 ; Move byte from temp register to USI Data Register
|
||
4:
|
||
5: ; Enable USI Overflow Interrupt Flag (will be 0 if transfer is not compeleted)
|
||
6: 000073 E400 ldi TEMP_REG_A, (1<<USIOIF)
|
||
7: 000074 B90E out USISR, TEMP_REG_A
|
||
8:
|
||
9: ; Load settings of USI into temp register
|
||
10: ; This will setup USI to Three-wire mode, Software clock strobe (USITC)
|
||
11: ; with External, positive edge and toggle USCK
|
||
12: ;
|
||
13: ; USIWM0 <--------------> 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<<USIWM0) | (1<<USICS1) | (1<<USICLK) | (1<<USITC)
|
||
18:
|
||
19: _USI_TRANSMIT_LOOP: ; Execute loop when USIOIF is 0
|
||
20: 000076 B90D out USICR, TEMP_REG_A ; Load settings from temp register into USI Control Register
|
||
21: 000077 9B76 sbis USISR, USIOIF ; If transfer is comleted then move out of loop
|
||
22: 000078 CFFD rjmp _USI_TRANSMIT_LOOP
|
||
23:
|
||
24: ; Send pulse into LATCH pin.
|
||
25: ; This will copy byte from 74hc595 shift register into 74hc595 storage register
|
||
26: 000079 9AC0 sbi PORTB, USI_LATCH_PIN
|
||
27: 00007A 98C0 cbi PORTB, USI_LATCH_PIN
|
||
28: 00007B 9508 ret
|
||
Continuing file firmware.asm
|
||
172:
|
||
173: ; **** ПОЛУЧЕНИЕ ЦИФР ИЗ 16-ТИ БИТНОГО ЧИСЛА *********************
|
||
174: ; Описание: Перемещает цифры числа в соответствующие ячейки памяти в SRAM
|
||
175: ; путем деления этого числа несколько раз
|
||
176: DISPLAY_UPD_DIGITS:
|
||
177: 00007C E084 ldi r24, 4 ; максимум 4 цифры, т.к индикатор четырех разрядный
|
||
178: 00007D E6A3 ldi XL, LOW(DIGITS)
|
||
179: 00007E E0B0 ldi XH, HIGH(DIGITS)
|
||
180:
|
||
181: .equ dividend = SRAM_TEMP_1
|
||
182: .equ divisor = 10
|
||
183:
|
||
184: ; загружаем делимое в адрес SRAM делимого
|
||
185: 00007F 9360 sts dividend, r22
|
||
000080 0061
|
||
186: 000081 9370 sts dividend+1, r23
|
||
000082 0062
|
||
187:
|
||
188: ; четыре раза производим деление для получения остатков
|
||
189: DIV_LOOP:
|
||
190: ; заполняем нужные регистры
|
||
191: 000083 9100 lds dd16uL, dividend
|
||
000084 0061
|
||
192: 000085 9110 lds dd16uH, dividend+1
|
||
000086 0062
|
||
193: 000087 E02A ldi dv16uL, LOW(divisor)
|
||
194: 000088 E030 ldi dv16uH, HIGH(divisor)
|
||
195:
|
||
196: 000089 DFD5 rcall div16u ; делим
|
||
197:
|
||
198: 00008A 92ED st X+, drem16uL ; сохраняем остаток в ячейку по указателю
|
||
199:
|
||
200: ; обновляем делимое
|
||
201: 00008B 9300 sts dividend, dres16uL
|
||
00008C 0061
|
||
202: 00008D 9310 sts dividend+1, dres16uH
|
||
00008E 0062
|
||
203:
|
||
204: 00008F 958A dec r24 ; декрементируем счетчик цикла
|
||
205: 000090 F791 brne DIV_LOOP ; делим еще раз если не 0
|
||
206: 000091 9508 ret
|
||
207:
|
||
208: ; **** ЗАГРУЖАЕТ НУЖНЫЙ АДРЕС СИМВОЛА В R0 ***********************
|
||
209: DISPLAY_DECODER:
|
||
210: 000092 E6E6 ldi ZL, LOW(2*DISPLAY_SYMBOLS)
|
||
211: 000093 E0F1 ldi ZH, HIGH(2*DISPLAY_SYMBOLS)
|
||
212:
|
||
213: 000094 2711 clr TEMP_REG_B
|
||
214: 000095 0FE0 add ZL, TEMP_REG_A
|
||
215: 000096 1FF1 adc ZH, TEMP_REG_B
|
||
216:
|
||
217: 000097 9004 lpm r0, Z
|
||
218: 000098 9508 ret
|
||
219:
|
||
220: DELAY:
|
||
221: 000099 930F push r16
|
||
222: 00009A 931F push r17
|
||
223:
|
||
224:
|
||
225:
|
||
226: 00009B EF0F ldi r16, 255
|
||
227: _l_1:
|
||
228: 00009C EF1F ldi r17, 255
|
||
229: _dec_1:
|
||
230: 00009D 951A dec r17
|
||
231: 00009E 0000 nop
|
||
232: 00009F 0000 nop
|
||
233: 0000A0 0000 nop
|
||
234: 0000A1 0000 nop
|
||
235: 0000A2 0000 nop
|
||
236: 0000A3 0000 nop
|
||
237: 0000A4 F7C1 brne _dec_1
|
||
238: 0000A5 950A dec r16
|
||
239: 0000A6 F7A9 brne _l_1
|
||
240:
|
||
241: ; ldi r16, 255
|
||
242: ; _DELAY_3:
|
||
243: ; ldi r17, 255
|
||
244: ; _DELAY_2:
|
||
245: ; dec r17
|
||
246: ; brne _DELAY_2
|
||
247: ; _DELAY_1:
|
||
248: ; dec r16
|
||
249: ; brne _DELAY_3
|
||
250:
|
||
251: 0000A7 911F pop r17
|
||
252: 0000A8 910F pop r16
|
||
253: 0000A9 9508 ret
|
||
254:
|
||
255: TOGGLE_POWER_LED:
|
||
256: 0000AA 930F push r16
|
||
257: 0000AB 931F push r17
|
||
258: 0000AC E400 ldi r16, (1<<LED_POWER_PIN)
|
||
259: 0000AD B312 in r17, PORTD
|
||
260: 0000AE 2710 eor r17, r16
|
||
261: 0000AF BB12 out PORTD, r17
|
||
262: 0000B0 911F pop r17
|
||
263: 0000B1 910F pop r16
|
||
264: 0000B2 9508 ret
|
||
265:
|
||
266: DISPLAY_SYMBOLS:
|
||
267: ; HGFEDCBA HGFEDCBA
|
||
268: .DB 0b11000000, 0b11111001 ; 0, 1
|
||
0000B3 F9C0
|
||
269: .DB 0b10100100, 0b10110000 ; 2, 3
|
||
0000B4 B0A4
|
||
270: .DB 0b10011001, 0b10010010 ; 4, 5
|
||
0000B5 9299
|
||
271: .DB 0b10000010, 0b11111000 ; 6, 7
|
||
0000B6 F882
|
||
272: .DB 0b10000000, 0b10010000 ; 8, 9
|
||
0000B7 9080
|
||
273: .DB 0b10011100 ; °
|
||
-> 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
|