From 6feba3786fce63ce8774a219f0e0f385aeff2d96 Mon Sep 17 00:00:00 2001 From: sergeyyarkov Date: Mon, 19 Jun 2023 15:58:47 +0300 Subject: [PATCH] one wire impl --- .gitignore | 1 - .vscode/settings.json | 3 - .vscode/tasks.json | 28 - Makefile | 121 ++- build/firmware.hex | 40 - build/firmware.lss | 1385 ------------------------- definitions.asm | 54 + div16u.asm | 36 +- div16u.hex | 5 + firmware.asm | 508 --------- firmware.hex | 37 - firmware.lss | 1118 -------------------- firmware.lst | 743 ------------- firmware.pro | 12 - macros.asm | 24 + main.asm | 546 ++++++++++ main.hex | 44 + nbproject/Makefile-default.mk | 171 +++ nbproject/Makefile-genesis.properties | 14 + nbproject/Makefile-impl.mk | 69 ++ nbproject/Makefile-local-default.mk | 37 + nbproject/Makefile-variables.mk | 10 + nbproject/configurations.xml | 1026 ++++++++++++++++++ nbproject/private/configurations.xml | 25 + nbproject/private/private.xml | 11 + nbproject/project.xml | 27 + tn2313Adef.inc | 698 ------------- usi.asm | 30 - 28 files changed, 2190 insertions(+), 4633 deletions(-) delete mode 100644 .gitignore delete mode 100644 .vscode/settings.json delete mode 100644 .vscode/tasks.json delete mode 100644 build/firmware.hex delete mode 100644 build/firmware.lss create mode 100644 definitions.asm create mode 100644 div16u.hex delete mode 100644 firmware.asm delete mode 100644 firmware.hex delete mode 100644 firmware.lss delete mode 100644 firmware.lst delete mode 100644 firmware.pro create mode 100644 macros.asm create mode 100644 main.asm create mode 100644 main.hex create mode 100644 nbproject/Makefile-default.mk create mode 100644 nbproject/Makefile-genesis.properties create mode 100644 nbproject/Makefile-impl.mk create mode 100644 nbproject/Makefile-local-default.mk create mode 100644 nbproject/Makefile-variables.mk create mode 100644 nbproject/configurations.xml create mode 100644 nbproject/private/configurations.xml create mode 100644 nbproject/private/private.xml create mode 100644 nbproject/project.xml delete mode 100644 tn2313Adef.inc delete mode 100644 usi.asm diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 17f1867..0000000 --- a/.gitignore +++ /dev/null @@ -1 +0,0 @@ -NOTES.md \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index d739a1b..0000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "cmake.configureOnOpen": false -} diff --git a/.vscode/tasks.json b/.vscode/tasks.json deleted file mode 100644 index c12ef37..0000000 --- a/.vscode/tasks.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "tasks": [ - { - "label": "Compile", - "type": "shell", - "group": "build", - "command": "make", - "problemMatcher": [] - }, - { - "label": "Clean", - "type": "shell", - "group": "build", - "command": "make", - "args": ["clean"], - "problemMatcher": [] - }, - { - "label": "Flash", - "type": "shell", - "group": "build", - "command": "make", - "args": ["flash"], - "problemMatcher": [] - } - ], - "version": "2.0.0" -} diff --git a/Makefile b/Makefile index 6f318b7..fca8e2c 100644 --- a/Makefile +++ b/Makefile @@ -1,16 +1,113 @@ -SRC_FILE = firmware -MCU = t2313 -PROGRAMMER = usbtiny -BUILD_DIR = build +# +# There exist several targets which are by default empty and which can be +# used for execution of your targets. These targets are usually executed +# before and after some main targets. They are: +# +# .build-pre: called before 'build' target +# .build-post: called after 'build' target +# .clean-pre: called before 'clean' target +# .clean-post: called after 'clean' target +# .clobber-pre: called before 'clobber' target +# .clobber-post: called after 'clobber' target +# .all-pre: called before 'all' target +# .all-post: called after 'all' target +# .help-pre: called before 'help' target +# .help-post: called after 'help' target +# +# Targets beginning with '.' are not intended to be called on their own. +# +# Main targets can be executed directly, and they are: +# +# build build a specific configuration +# clean remove built files from a configuration +# clobber remove all built files +# all build all configurations +# help print help mesage +# +# Targets .build-impl, .clean-impl, .clobber-impl, .all-impl, and +# .help-impl are implemented in nbproject/makefile-impl.mk. +# +# Available make variables: +# +# CND_BASEDIR base directory for relative paths +# CND_DISTDIR default top distribution directory (build artifacts) +# CND_BUILDDIR default top build directory (object files, ...) +# CONF name of current configuration +# CND_ARTIFACT_DIR_${CONF} directory of build artifact (current configuration) +# CND_ARTIFACT_NAME_${CONF} name of build artifact (current configuration) +# CND_ARTIFACT_PATH_${CONF} path to build artifact (current configuration) +# CND_PACKAGE_DIR_${CONF} directory of package (current configuration) +# CND_PACKAGE_NAME_${CONF} name of package (current configuration) +# CND_PACKAGE_PATH_${CONF} path to package (current configuration) +# +# NOCDDL -all: build_dir - avrasm2 -fI -W+ie $(SRC_FILE).asm -o ./$(BUILD_DIR)/$(SRC_FILE).hex -l ./$(BUILD_DIR)/$(SRC_FILE).lss -flash: - avrdude -c $(PROGRAMMER) -p $(MCU) -U flash:w:./$(BUILD_DIR)/$(SRC_FILE).hex:i +# Environment +MKDIR=mkdir +CP=cp +CCADMIN=CCadmin +RANLIB=ranlib -clean: - rm -f $(BUILD_DIR)/* -build_dir: - mkdir -p ${BUILD_DIR} \ No newline at end of file +# build +build: .build-post + +.build-pre: +# Add your pre 'build' code here... + +.build-post: .build-impl +# Add your post 'build' code here... + + +# clean +clean: .clean-post + +.clean-pre: +# Add your pre 'clean' code here... +# WARNING: the IDE does not call this target since it takes a long time to +# simply run make. Instead, the IDE removes the configuration directories +# under build and dist directly without calling make. +# This target is left here so people can do a clean when running a clean +# outside the IDE. + +.clean-post: .clean-impl +# Add your post 'clean' code here... + + +# clobber +clobber: .clobber-post + +.clobber-pre: +# Add your pre 'clobber' code here... + +.clobber-post: .clobber-impl +# Add your post 'clobber' code here... + + +# all +all: .all-post + +.all-pre: +# Add your pre 'all' code here... + +.all-post: .all-impl +# Add your post 'all' code here... + + +# help +help: .help-post + +.help-pre: +# Add your pre 'help' code here... + +.help-post: .help-impl +# Add your post 'help' code here... + + + +# include project implementation makefile +include nbproject/Makefile-impl.mk + +# include project make variables +include nbproject/Makefile-variables.mk diff --git a/build/firmware.hex b/build/firmware.hex deleted file mode 100644 index d18cb02..0000000 --- a/build/firmware.hex +++ /dev/null @@ -1,40 +0,0 @@ -:020000020000FC -:0200000060C0DE -:020016003EC0EA -:10001A0000C04F935F930F935FB7409167004530DD -:10002A000CF403C0442740936700403041F493988E -:10003A0094989598929A00916600D6D070D04130E3 -:10004A0041F4929894989598939A00916500CCD02F -:10005A0066D0423041F4929893989598949A009178 -:10006A006400C2D05CD0433041F49298939894983B -:10007A00959A00916300B8D052D043954093670097 -:10008A005FBF0F915F914F9118950F931F932F9315 -:10009A003F930FB716B320916800122736B33093F7 -:1000AA00680012FF03C000C0B29B01960FBF3F91C8 -:1000BA002F911F910F9118950FED0DBF0EE701BB00 -:1000CA0001EC07BB0CE108BB00E20BBF0CE100BD71 -:1000DA0002E000BF05E003BF09E106BF01E009BF76 -:1000EA0011241092670080E090E0789463D0969A89 -:1000FA008AD0969888D0FACFEE24FF1841E1001FE3 -:10010A00111F4A9509F40895EE1CFF1CE21AF30A1E -:10011A0020F4E20EF31E8894F2CF0894F0CF0F93E6 -:10012A000FB800E40EB90BE10DB9769BFDCFC09A6A -:10013A00C0980F910895F89400E00CBD0CE30ABD35 -:10014A0005E408BD03E00EBDB99A08B706FFFDCF66 -:10015A00B99808B705FFFDCF0DD000E00CBD04E348 -:10016A000ABD08B706FFFDCF00270EBD0FEF08BF77 -:10017A0078940895B19B716008951F9313E308E082 -:10018A001F9108950F93F894726000E00CBD01E08E -:10019A000ABD09E008BDB99A08B706FFFDCF90FC71 -:1001AA00B99808B705FFFDCF00270EBD7D7F78946B -:1001BA000F910895F8945F9354E0A3E6B0E080931A -:1001CA0061009093620000916100109162002AE040 -:1001DA0030E092DFED9200936100109362005A952D -:1001EA0091F75F91789408950F931F93ECE4F2E0EE -:1001FA001127E00FF11F04901F910F91089503EB4F -:10020A000A95F1F708950F931F932F9325E01FEF97 -:10021A000FEF0A95F1F71A95D9F72A95C1F72F9199 -:10022A001F910F9108950F931F930FEF1FEF1A95C8 -:10023A00000000000000D9F70A95C1F71F910F913D -:0E024A000895C0F9A4B0999282F880909C00AB -:00000001FF diff --git a/build/firmware.lss b/build/firmware.lss deleted file mode 100644 index 14886be..0000000 --- a/build/firmware.lss +++ /dev/null @@ -1,1385 +0,0 @@ - -AVRASM ver. 2.2.7 firmware.asm Thu Jun 15 23:21:29 2023 - -firmware.asm(14): Including file 'tn2313Adef.inc' -firmware.asm(302): Including file 'div16u.asm' -div16u.asm(22): warning: Register r16 already defined by the .DEF directive -firmware.asm(302): 'div16u.asm' included form here -div16u.asm(23): warning: Register r17 already defined by the .DEF directive -firmware.asm(302): 'div16u.asm' included form here -div16u.asm(24): warning: Register r16 already defined by the .DEF directive -firmware.asm(302): 'div16u.asm' included form here -div16u.asm(25): warning: Register r17 already defined by the .DEF directive -firmware.asm(302): 'div16u.asm' included form here -firmware.asm(303): Including file 'usi.asm' -firmware.asm(14): Including file 'tn2313Adef.inc' -firmware.asm(302): Including file 'div16u.asm' -firmware.asm(303): Including file 'usi.asm' - - - ; Project name: thermostat - ; Description: Electronic thermostat on AVR Microcontroller - ; Source code: https://github.com/sergeyyarkov/attiny2313a_thermostat - ; Device: ATtiny2313A - ; Device Datasheet: http://ww1.microchip.com/downloads/en/DeviceDoc/doc8246.pdf - ; Package: SOIC-20W_7.5x12.8mm_P1.27mm - ; Assembler: AVR macro assembler 2.2.7 - ; Clock frequency: 8 MHz External Crystal Oscillator - ; Fuses: lfuse: 0xCF, hfuse: 0x9F, efuse: 0xFF, lock: 0xFF - ; - ; Written by Sergey Yarkov 22.01.2023 - - .INCLUDE "tn2313Adef.inc" - - ;***** Created: 2011-02-09 12:04 ******* Source: ATtiny2313A.xml ********* - ;************************************************************************* - ;* A P P L I C A T I O N N O T E F O R T H E A V R F A M I L Y - ;* - ;* Number : AVR000 - ;* File Name : "tn2313Adef.inc" - ;* Title : Register/Bit Definitions for the ATtiny2313A - ;* Date : 2011-02-09 - ;* Version : 2.35 - ;* Support E-mail : avr@atmel.com - ;* Target MCU : ATtiny2313A - ;* - ;* DESCRIPTION - ;* When including this file in the assembly program file, all I/O register - ;* names and I/O register bit names appearing in the data book can be used. - ;* In addition, the six registers forming the three data pointers X, Y and - ;* Z have been assigned names XL - ZH. Highest RAM address for Internal - ;* SRAM is also defined - ;* - ;* The Register names are represented by their hexadecimal address. - ;* - ;* The Register Bit names are represented by their bit number (0-7). - ;* - ;* Please observe the difference in using the bit names with instructions - ;* such as "sbr"/"cbr" (set/clear bit in register) and "sbrs"/"sbrc" - ;* (skip if bit in register set/cleared). The following example illustrates - ;* this: - ;* - ;* in r16,PORTB ;read PORTB latch - ;* sbr r16,(1< USI Wire Mode - ; USICS1 <--------------> USI Clock Source Select - ; USICLK <--------------> USI Clock Strobe - ; USITC <--------------> USI Toggle Clock (Enable clock generation) -000098 e10b ldi TEMP_REG_A, (1<= 5 - rjmp _indicate_1 - - _CLR_CURRENT_DIGIT: ; сброс текущего активного разряда в ноль - clr r20 - sts CURRENT_DIGIT, r20 - - _indicate_1: - cpi r20, 0 - brne _indicate_2 - - cbi PORTD, DIGIT_2_PIN - cbi PORTD, DIGIT_3_PIN - cbi PORTD, DIGIT_4_PIN - sbi PORTD, DIGIT_1_PIN - lds TEMP_REG_A, DIGITS+3 - rcall DISPLAY_DECODER - rcall USI_TRANSMIT - - _indicate_2: - cpi r20, 1 - brne _indicate_3 - - cbi PORTD, DIGIT_1_PIN - cbi PORTD, DIGIT_3_PIN - cbi PORTD, DIGIT_4_PIN - sbi PORTD, DIGIT_2_PIN - lds TEMP_REG_A, DIGITS+2 - rcall DISPLAY_DECODER - rcall USI_TRANSMIT - - _indicate_3: - cpi r20, 2 - brne _indicate_4 - - cbi PORTD, DIGIT_1_PIN - cbi PORTD, DIGIT_2_PIN - cbi PORTD, DIGIT_4_PIN - sbi PORTD, DIGIT_3_PIN - lds TEMP_REG_A, DIGITS+1 - rcall DISPLAY_DECODER - rcall USI_TRANSMIT - - _indicate_4: - cpi r20, 3 - brne _indicate_exit - - cbi PORTD, DIGIT_1_PIN - cbi PORTD, DIGIT_2_PIN - cbi PORTD, DIGIT_3_PIN - sbi PORTD, DIGIT_4_PIN - lds TEMP_REG_A, DIGITS - rcall DISPLAY_DECODER - rcall USI_TRANSMIT - - _indicate_exit: - inc r20 - sts CURRENT_DIGIT, r20 - out SREG, r21 - - pop r16 - pop r21 - pop r20 -reti - -; **** ОБРАБОТКА КНОПОК ****************************************** -PCINT0_vect: - push r16 - push r17 - push r18 - push r19 - - in r16, SREG - - in r17, SW_PIN - lds r18, PC_HISTORY - - eor r17, r18 - in r19, SW_PIN - sts PC_HISTORY, r19 - - _SW_PLUS_CHECK: - sbrs r17, SW_PLUS_PIN - rjmp _SW_EXIT - rjmp _SW_PLUS_HANDLER - - _SW_PLUS_HANDLER: - ; rcall DEBOUNCE_SW - sbis SW_PIN, SW_PLUS_PIN - adiw DISP_NUM_L, 1 - ;exit - - - ; sbis PINB, SW_PLUS_PIN - ; rjmp _sw_plus - - ; sbis PINB, SW_MINUS_PIN - ; rjmp _sw_minus - - ; sbis PINB, SW_SET_PIN - ; rjmp _sw_set - - ; rjmp _sw_exit - ; _sw_plus: - ; adiw DISP_NUM_L, 1 - ; rjmp _sw_exit - ; _sw_minus: - ; adiw DISP_NUM_L, 10 - ; rjmp _sw_exit - ; _sw_set: - ; adiw DISP_NUM_L, 63 - ; _sw_exit: - - _SW_EXIT: - out SREG, r16 - pop r19 - pop r18 - pop r17 - pop r16 -reti - -; **** СТАРТ ПРОГРАММЫ ******************************************* -RESET_vect: - ldi TEMP_REG_A, LOW(RAMEND) - out SPL, TEMP_REG_A - -; **** ПРОЦЕСС ИНИЦИАЛИЗАЦИИ МК ********************************** -MCU_INIT: - ; **** ИНИЦИАЛИЗАЦИЯ ПИНОВ ************************************* - outi r16, DDRD, (1< USI Wire Mode - ; USICS1 <--------------> USI Clock Source Select - ; USICLK <--------------> USI Clock Strobe - ; USITC <--------------> USI Toggle Clock (Enable clock generation) -000075 e10b ldi TEMP_REG_A, (1< 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 = r24 ; LSB числа которое сейчас на индикаторе - 20: .DEF DISP_NUM_H = r25 ; MSB числа которое сейчас на индикаторе - 21: - 22: .EQU DIGIT_1_PIN = PD2 ; Пин разряда индикатора 1 - 23: .EQU DIGIT_2_PIN = PD3 ; Пин разряда индикатора 2 - 24: .EQU DIGIT_3_PIN = PD4 ; Пин разряда индикатора 3 - 25: .EQU DIGIT_4_PIN = PD5 ; Пин разряда индикатора 4 - 26: - 27: .EQU LED_POWER_PIN = PD6 ; Светодиод, который говорит о том что питание подано - 28: - 29: .EQU ONE_WIRE_LINE = PB1 ; Пин шины 1-Wire - 30: .EQU ONE_WIRE_DDR = DDRB - 31: .EQU ONE_WIRE_PIN = PINB - 32: .DEF ONE_WIRE_FLAGS = r23 ; Флаги состояния для 1-Wire интерфейса - 33: .EQU OWPRF = 0 ; 1-Wire Флаг присутствия - 34: .EQU OWSB = 1 ; Флаг передачи одного бита - 35: - 36: ; **** КОМАНДЫ ДАТЧИКА ***************************************** - 37: .EQU DS18B20_CMD_CONVERTTEMP = 0x44 - 38: .EQU DS18B20_CMD_RSCRATCHPAD = 0xbe - 39: .EQU DS18B20_CMD_WSCRATCHPAD = 0x4e - 40: .EQU DS18B20_CMD_CPYSCRATCHPAD = 0x48 - 41: .EQU DS18B20_CMD_RECEEPROM = 0xb8 - 42: .EQU DS18B20_CMD_RPWRSUPPLY = 0xb4 - 43: .EQU DS18B20_CMD_SEARCHROM = 0xf0 - 44: .EQU DS18B20_CMD_READROM = 0x33 - 45: .EQU DS18B20_CMD_MATCHROM = 0x55 - 46: .EQU DS18B20_CMD_SKIPROM = 0xcc - 47: .EQU DS18B20_CMD_ALARMSEARCH = 0xec - 48: - 49: .EQU USI_LATCH_PIN = PB0 ; ST_CP на 74HC595 - 50: .EQU USI_DO_PIN = PB6 ; DS на 74HC595 - 51: .EQU USI_CLK_PIN = PB7 ; SH_CP на 74HC595 - 52: - 53: .EQU SW_PORT = PORTB - 54: .EQU SW_PIN = PINB - 55: .EQU SW_PLUS_PIN = PB2 ; Кнопка "Минус" - 56: .EQU SW_MINUS_PIN = PB3 ; Кнопка "Плюс" - 57: .EQU SW_SET_PIN = PB4 ; Кнопка "Установить" - 58: - 59: .EQU MCU_STATE_DEFAULT = 0x01 ; Режим измерения температуры и сравнения с заданными параметрами - 60: .EQU MCU_STATE_PROGRAM = 0x02 ; Режим настройки параметров в EEPROM - 61: .EQU MCU_STATE_ERROR = 0x03 ; Режим ошибки, например когда не подключен датчик - 62: - 63: ; **** МАКРОСЫ ************************************************** - 64: .MACRO outi - 65: ldi @0, @2 - 66: out @1, @0 - 67: .ENDMACRO - 68: - 69: .MACRO display_load - 70: ldi DISP_NUM_L, LOW(@0) - 71: ldi DISP_NUM_H, HIGH(@0) - 72: .ENDMACRO - 73: - 74: .MACRO _1_wire_pull - 75: sbi ONE_WIRE_DDR, ONE_WIRE_LINE - 76: .ENDMACRO - 77: - 78: .MACRO _1_wire_release - 79: cbi ONE_WIRE_DDR, ONE_WIRE_LINE - 80: .ENDMACRO - 81: - 82: ; **** СЕГМЕНТ ДАННЫХ ******************************************** - 83: .DSEG - 84: .ORG SRAM_START - 85: - 86: MCU_STATE: .BYTE 1 ; Текущее состояние МК - 87: SRAM_TEMP_1: .BYTE 2 ; Хранения временного 16-бит числа в ячейке - 88: DIGITS: .BYTE 4 ; Ячейки, где хранятся символы, для вывода на индикатор - 89: CURRENT_DIGIT: .BYTE 1 ; Номер разряда индикатора, который сейчас горит - 90: PC_HISTORY: .BYTE 1 ; История изменений состояния кнопок (необходимо для прерываня по изменению состояния пина) - 91: - 92: ; **** СЕГМЕНТ КОДА ********************************************** - 93: .CSEG - 94: - 95: .ORG 0x00 - 96: 000000 C05A rjmp RESET_vect - 97: - 98: .ORG 0x000B - 99: 00000B C03E rjmp PCINT0_vect - 100: - 101: .ORG 0x000D - 102: 00000D C000 rjmp TIMER0_COMPA_vect - 103: - 104: - 105: ; **** ДИНАМИЧЕСКАЯ ИНДИКАЦИЯ ************************************ - 106: TIMER0_COMPA_vect: - 107: 00000E 934F push r20 - 108: 00000F 935F push r21 - 109: 000010 930F push r16 - 110: 000011 B75F in r21, SREG - 111: - 112: 000012 9140 lds r20, CURRENT_DIGIT - 000013 0067 - 113: 000014 3045 cpi r20, 5 - 114: 000015 F40C brge reset_digit_idx - 115: 000016 C003 rjmp _indicate_1 - 116: - 117: reset_digit_idx: - 118: 000017 2744 clr r20 - 119: 000018 9340 sts CURRENT_DIGIT, r20 - 000019 0067 - 120: - 121: _indicate_1: - 122: 00001A 3040 cpi r20, 0 - 123: 00001B F441 brne _indicate_2 - 124: - 125: 00001C 9893 cbi PORTD, DIGIT_2_PIN - 126: 00001D 9894 cbi PORTD, DIGIT_3_PIN - 127: 00001E 9895 cbi PORTD, DIGIT_4_PIN - 128: 00001F 9A92 sbi PORTD, DIGIT_1_PIN - 129: 000020 9100 lds TEMP_REG_A, DIGITS+3 - 000021 0066 - 130: 000022 D0CE rcall DISPLAY_DECODER - 131: 000023 D06A rcall USI_TRANSMIT - 132: - 133: _indicate_2: - 134: 000024 3041 cpi r20, 1 - 135: 000025 F441 brne _indicate_3 - 136: - 137: 000026 9892 cbi PORTD, DIGIT_1_PIN - 138: 000027 9894 cbi PORTD, DIGIT_3_PIN - 139: 000028 9895 cbi PORTD, DIGIT_4_PIN - 140: 000029 9A93 sbi PORTD, DIGIT_2_PIN - 141: 00002A 9100 lds TEMP_REG_A, DIGITS+2 - 00002B 0065 - 142: 00002C D0C4 rcall DISPLAY_DECODER - 143: 00002D D060 rcall USI_TRANSMIT - 144: - 145: _indicate_3: - 146: 00002E 3042 cpi r20, 2 - 147: 00002F F441 brne _indicate_4 - 148: - 149: 000030 9892 cbi PORTD, DIGIT_1_PIN - 150: 000031 9893 cbi PORTD, DIGIT_2_PIN - 151: 000032 9895 cbi PORTD, DIGIT_4_PIN - 152: 000033 9A94 sbi PORTD, DIGIT_3_PIN - 153: 000034 9100 lds TEMP_REG_A, DIGITS+1 - 000035 0064 - 154: 000036 D0BA rcall DISPLAY_DECODER - 155: 000037 D056 rcall USI_TRANSMIT - 156: - 157: _indicate_4: - 158: 000038 3043 cpi r20, 3 - 159: 000039 F441 brne _indicate_exit - 160: - 161: 00003A 9892 cbi PORTD, DIGIT_1_PIN - 162: 00003B 9893 cbi PORTD, DIGIT_2_PIN - 163: 00003C 9894 cbi PORTD, DIGIT_3_PIN - 164: 00003D 9A95 sbi PORTD, DIGIT_4_PIN - 165: 00003E 9100 lds TEMP_REG_A, DIGITS - 00003F 0063 - 166: 000040 D0B0 rcall DISPLAY_DECODER - 167: 000041 D04C rcall USI_TRANSMIT - 168: - 169: _indicate_exit: - 170: 000042 9543 inc r20 - 171: 000043 9340 sts CURRENT_DIGIT, r20 - 000044 0067 - 172: 000045 BF5F out SREG, r21 - 173: - 174: 000046 910F pop r16 - 175: 000047 915F pop r21 - 176: 000048 914F pop r20 - 177: 000049 9518 reti - 178: - 179: ; **** ОБРАБОТКА КНОПОК ****************************************** - 180: PCINT0_vect: - 181: 00004A 930F push r16 - 182: 00004B B70F in r16, SREG - 183: - 184: 00004C 9BB2 sbis PINB, SW_PLUS_PIN - 185: 00004D C005 rjmp _sw_plus - 186: - 187: 00004E 9BB3 sbis PINB, SW_MINUS_PIN - 188: 00004F C005 rjmp _sw_minus - 189: - 190: 000050 9BB4 sbis PINB, SW_SET_PIN - 191: 000051 C005 rjmp _sw_set - 192: - 193: 000052 C005 rjmp _sw_exit - 194: _sw_plus: - 195: 000053 9601 adiw DISP_NUM_L, 1 - 196: 000054 C003 rjmp _sw_exit - 197: _sw_minus: - 198: 000055 960A adiw DISP_NUM_L, 10 - 199: 000056 C001 rjmp _sw_exit - 200: _sw_set: - 201: 000057 96CF adiw DISP_NUM_L, 63 - 202: _sw_exit: - 203: - 204: 000058 BF0F out SREG, r16 - 205: 000059 910F pop r16 - 206: 00005A 9518 reti - 207: - 208: ; **** СТАРТ ПРОГРАММЫ ******************************************* - 209: RESET_vect: - 210: 00005B ED0F ldi TEMP_REG_A, LOW(RAMEND) - 211: 00005C BF0D out SPL, TEMP_REG_A - 212: - 213: ; **** ПРОЦЕСС ИНИЦИАЛИЗАЦИИ МК ********************************** - 214: MCU_INIT: - 215: ; **** ИНИЦИАЛИЗАЦИЯ ПИНОВ ************************************* - 216: outi r16, DDRD, (1< USI Wire Mode - 15: ; USICS1 <--------------> USI Clock Source Select - 16: ; USICLK <--------------> USI Clock Strobe - 17: ; USITC <--------------> USI Toggle Clock (Enable clock generation) - 18: 000092 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: 454 - Source line: .DB 0b10011100 ; ° - 000113 009C - 455: - 456: ; **** СЕГМЕНТ EEPROM ******************************************** - 457: ; .ESEG - 458: ; 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 0 104 68 PC_HISTORY - L 1 2 14 0E TIMER0_COMPA_VECT - L 1 2 23 17 RESET_DIGIT_IDX - L 1 2 26 1A _INDICATE_1 - L 1 2 36 24 _INDICATE_2 - L 1 2 46 2E _INDICATE_3 - L 1 2 56 38 _INDICATE_4 - L 1 2 66 42 _INDICATE_EXIT - L 1 2 74 4A PCINT0_VECT - L 1 2 83 53 _SW_PLUS - L 1 2 85 55 _SW_MINUS - L 1 2 87 57 _SW_SET - L 1 6 88 58 _SW_EXIT - L 1 2 91 5B RESET_VECT - L 1 0 93 5D MCU_INIT - L 1 2 117 75 LOOP - L 1 2 123 7B DIV16U - L 1 4 126 7E D16U_1 - L 1 2 131 83 D16U_2 - L 1 2 140 8C D16U_3 - L 1 8 142 8E USI_TRANSMIT - L 1 2 147 93 _USI_TRANSMIT_LOOP - L 1 0 154 9A _1_WIRE_DETECT_PRESENCE - L 1 2 164 A4 S1 - L 1 2 168 A8 S2 - L 1 2 176 B0 S3 - L 1 2 185 B9 _1_WIRE_CHECK_PRESENCE - L 1 0 188 BC _1_WIRE_SEND_BYTE - L 1 0 191 BF _S_L - L 1 0 193 C1 _1_WIRE_SEND_BIT - L 1 2 203 CB SB_1 - L 1 2 208 D0 SB_2 - L 1 2 217 D9 DISPLAY_UPD_DIGITS - L 1 2 225 E1 DIV_LOOP - L 1 8 241 F1 DISPLAY_DECODER - L 1 0 252 FC DELAY_68US - L 1 2 253 FD _D1_LOOP - L 1 0 256 0100 DELAY - L 1 2 259 0103 _DELAY_1 - L 1 2 260 0104 _DELAY_2 - L 1 2 270 010E DISPLAY_SYMBOLS - R 1 11 16 10 TEMP_REG_A - R 1 2 17 11 TEMP_REG_B - R 1 5 24 18 DISP_NUM_L - R 1 2 25 19 DISP_NUM_H - R 1 5 23 17 ONE_WIRE_FLAGS - 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 - R 1 1 9 09 TRANSMIT_BIT - C 1 0 23 17 NOW_Y - C 1 0 6 06 NOW_M - C 1 0 14 0E NOW_D - C 1 0 45091 B023 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 1 6 06 LED_POWER_PIN - C 1 5 1 01 ONE_WIRE_LINE - C 1 4 23 17 ONE_WIRE_DDR - C 1 1 22 16 ONE_WIRE_PIN - C 1 3 0 00 OWPRF - C 1 2 1 01 OWSB - C 1 0 68 44 DS18B20_CMD_CONVERTTEMP - C 1 0 190 BE DS18B20_CMD_RSCRATCHPAD - C 1 0 78 4E DS18B20_CMD_WSCRATCHPAD - C 1 0 72 48 DS18B20_CMD_CPYSCRATCHPAD - C 1 0 184 B8 DS18B20_CMD_RECEEPROM - C 1 0 180 B4 DS18B20_CMD_RPWRSUPPLY - C 1 0 240 F0 DS18B20_CMD_SEARCHROM - C 1 1 51 33 DS18B20_CMD_READROM - C 1 0 85 55 DS18B20_CMD_MATCHROM - C 1 0 204 CC DS18B20_CMD_SKIPROM - C 1 0 236 EC DS18B20_CMD_ALARMSEARCH - 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 24 18 SW_PORT - C 1 0 22 16 SW_PIN - C 1 3 2 02 SW_PLUS_PIN - C 1 3 3 03 SW_MINUS_PIN - C 1 3 4 04 SW_SET_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 18 3 OUTI - 2 1 1 DISPLAY_LOAD - 1 2 0 _1_WIRE_PULL - 1 2 0 _1_WIRE_RELEASE - -Program : 259 words. -Constants : 6 words. -Total program memory: 265 words. -Eeprom space : 0 bytes. -Data segment : 9 bytes. -Compilation completed, no errors. -Compilation ended 14.06.2023, 22:56:32 diff --git a/firmware.pro b/firmware.pro deleted file mode 100644 index a7fb572..0000000 --- a/firmware.pro +++ /dev/null @@ -1,12 +0,0 @@ -/avr_sim_project_file -/home/sergeyyarkov/Documents/Projects/Firmwares/AVR/attiny2313a_thermostat/firmware.asm -mainasm=firmware.asm -file=firmware.lst,345,35,266 -file=firmware.asm,1,1,1 -file=div16u.asm,1,1,1 -file=usi.asm,1,1,1 -clock=8000000 -device-type=ATtiny2313A -device-package=20-pin-PDIP_SOIC -windows=acepSTwz -alert1=0,0,-1,-1,,0,0 diff --git a/macros.asm b/macros.asm new file mode 100644 index 0000000..52eb242 --- /dev/null +++ b/macros.asm @@ -0,0 +1,24 @@ +.MACRO outi + ldi @0, @2 + out @1, @0 +.ENDMACRO + +.MACRO display_load + + ldi DISP_NUM_L, LOW(@0) + ldi DISP_NUM_H, HIGH(@0) +.ENDMACRO + +.MACRO ow_pull + sbi OW_DDR, OW_LINE +.ENDMACRO + +.MACRO ow_release + cbi OW_DDR, OW_LINE +.ENDMACRO + +.MACRO DELAY16 + ldi DELAY_16_r, HIGH(@0*F_CPU/4-2) + ldi DELAY_8_r, LOW(@0*F_CPU/4-2) + rcall DELAY_LOOP_16 +.ENDMACRO \ No newline at end of file diff --git a/main.asm b/main.asm new file mode 100644 index 0000000..b65c5be --- /dev/null +++ b/main.asm @@ -0,0 +1,546 @@ +; +; Project name: thermostat +; Description: Electronic thermostat on AVR Microcontroller +; Source code: https://github.com/sergeyyarkov/attiny2313a_thermostat +; Device: ATtiny2313A +; Device Datasheet: http://ww1.microchip.com/downloads/en/DeviceDoc/doc8246.pdf +; Assembler: AVR macro assembler 2.2.7 +; Clock frequency: 8 MHz External Crystal Oscillator +; Fuses: lfuse: 0xCF, hfuse: 0x9F, efuse: 0xFF, lock: 0xFF +; +; Written by Sergey Yarkov 22.01.2023 + +.LIST + +.INCLUDE "definitions.asm" +.INCLUDE "macros.asm" + + +// +; **** СЕГМЕНТ ДАННЫХ ******************************************** +.DSEG +.ORG SRAM_START + +MCU_STATE: .BYTE 1 ; Текущее состояние МК +SRAM_TEMP_1: .BYTE 2 ; Хранения временного 16-бит числа в ячейке +DIGITS: .BYTE 4 ; Ячейки, где хранятся символы, для вывода на индикатор +CURRENT_DIGIT: .BYTE 1 ; Номер разряда индикатора, который сейчас горит +SW_FLAGS: .BYTE 1 ; Состояние кнопок +HYSTERESIS: .BYTE 1 ; Отклонение температуры от уставки +OW_RECEIVE: .BYTE 1 +;// + + +// +; **** СЕГМЕНТ КОДА ********************************************** +.CSEG + +// +.ORG 0x00 + rjmp RESET_vect + +.ORG 0x000D + rjmp TIMER0_COMPA_vect +// + + +// +; **** ДИНАМИЧЕСКАЯ ИНДИКАЦИЯ ************************************ +TIMER0_COMPA_vect: + push r20 + push r21 + push r16 + in r21, SREG + + lds r20, CURRENT_DIGIT + cpi r20, 5 + brge _CLR_CURRENT_DIGIT ; сброс активного разряда если >= 5 + rjmp _indicate_1 + +_CLR_CURRENT_DIGIT: ; сброс текущего активного разряда в ноль + clr r20 + sts CURRENT_DIGIT, r20 + +_indicate_1: + cpi r20, 0 + brne _indicate_2 + + cbi PORTD, DIGIT_2_PIN + cbi PORTD, DIGIT_3_PIN + cbi PORTD, DIGIT_4_PIN + sbi PORTD, DIGIT_1_PIN + lds TEMP_REG_A, DIGITS+3 + rcall DISPLAY_DECODER + rcall USI_TRANSMIT + +_indicate_2: + cpi r20, 1 + brne _indicate_3 + + cbi PORTD, DIGIT_1_PIN + cbi PORTD, DIGIT_3_PIN + cbi PORTD, DIGIT_4_PIN + sbi PORTD, DIGIT_2_PIN + lds TEMP_REG_A, DIGITS+2 + rcall DISPLAY_DECODER + rcall USI_TRANSMIT + +_indicate_3: + cpi r20, 2 + brne _indicate_4 + + cbi PORTD, DIGIT_1_PIN + cbi PORTD, DIGIT_2_PIN + cbi PORTD, DIGIT_4_PIN + sbi PORTD, DIGIT_3_PIN + lds TEMP_REG_A, DIGITS+1 + rcall DISPLAY_DECODER + rcall USI_TRANSMIT + +_indicate_4: + cpi r20, 3 + brne _indicate_exit + + cbi PORTD, DIGIT_1_PIN + cbi PORTD, DIGIT_2_PIN + cbi PORTD, DIGIT_3_PIN + sbi PORTD, DIGIT_4_PIN + lds TEMP_REG_A, DIGITS + rcall DISPLAY_DECODER + rcall USI_TRANSMIT + +_indicate_exit: + inc r20 + sts CURRENT_DIGIT, r20 + out SREG, r21 + + pop r16 + pop r21 + pop r20 + reti +;// + +; **** СТАРТ ПРОГРАММЫ ******************************************* +RESET_vect: + ldi TEMP_REG_A, LOW(RAMEND) + out SPL, TEMP_REG_A + +// +; **** ПРОЦЕСС ИНИЦИАЛИЗАЦИИ МК ********************************** +MCU_INIT: + ; **** ИНИЦИАЛИЗАЦИЯ ПИНОВ ************************************* + outi r16, DDRD, (1< + +// +; **** ГЛАВНЫЙ ЦИКЛ ********************************************** +LOOP: + ; rcall DISPLAY_UPD_DIGITS + lds r16, MCU_STATE ; получаем текущее состояние МК + +_STATE_DEFAULT: + cpi r16, MCU_STATE_DEFAULT + brne _STATE_PROGRAM + rcall DISPLAY_UPD_DIGITS +; rcall TEMP_RD + sbrc OWFR, OWPRF + sbi PORTD, PD6 + sbrs OWFR, OWPRF + cbi PORTD, PD6 + rcall TEMP_CONV + rcall DEBOUNCE_SW + rcall DEBOUNCE_SW + rcall DEBOUNCE_SW + rcall DEBOUNCE_SW + rcall TEMP_RD + lds r17, OW_RECEIVE + mov DISP_NUM_L, r17 + ldi DISP_NUM_H, 0 + +_STATE_PROGRAM: + cpi r16, MCU_STATE_PROGRAM + brne _STATE_ERROR + rcall DISPLAY_UPD_DIGITS + rcall SW_CHECK_PROCESS +_STATE_ERROR: + cpi r16, MCU_STATE_ERROR + brne LOOP + ldi r17, 11 + sts DIGITS, r17 + sts DIGITS+1, r17 + sts DIGITS+2, r17 + sts DIGITS+3, r17 + nop + + rjmp LOOP +// + + +; **** ПОДПРОГРАММЫ ********************************************** +.INCLUDE "div16u.asm" + +DELAY_LOOP_16: + subi DELAY_8_r, 1 + sbci DELAY_16_r, 0 + brcc DELAY_LOOP_16 + ret + +// +TEMP_RD: + push r16 + cli + + rcall OW_PRESENCE + ldi r16, DS18B20_CMD_SKIPROM + mov OW_CMD_r, r16 + rcall OW_SEND_BYTE + + ldi r16, DS18B20_CMD_RSCRATCHPAD + mov OW_CMD_r, r16 + rcall OW_SEND_BYTE + + rcall OW_RD_BYTE + + sei + pop r16 + ret +; +TEMP_CONV: + push r16 + cli + + rcall OW_PRESENCE + ldi r16, DS18B20_CMD_SKIPROM + mov OW_CMD_r, r16 + rcall OW_SEND_BYTE + + ldi r16, DS18B20_CMD_CONVERTTEMP + mov OW_CMD_r, r16 + rcall OW_SEND_BYTE + + sei + pop r16 + ret +// + + +// +; **** ОТПРАВКА БАЙТА В СДВИГОВЫЙ РЕГИСТР ************************* +USI_TRANSMIT: + push r16 + out USIDR, r0 ; Байт для отправки всегда находится в регистре r0. Помещаем данные в регистр USIDR. + + ; Enable USI Overflow Interrupt Flag (will be 0 if transfer is not compeleted) + ldi TEMP_REG_A, (1< USI Wire Mode + ; USICS1 <--------------> USI Clock Source Select + ; USICLK <--------------> USI Clock Strobe + ; USITC <--------------> USI Toggle Clock (Enable clock generation) + ldi TEMP_REG_A, (1< + + +// +SW_CHECK_PROCESS: + rcall DEBOUNCE_SW + sbis SW_PIN, SW_PLUS_PIN + adiw DISP_NUM_L, 1 + + sbis SW_PIN, SW_MINUS_PIN + sbiw DISP_NUM_L, 1 + ret// + + +// +// +; **** ОПРОС ПРИСУТСТВИЯ УСТРОЙСТВА ****************************** +OW_PRESENCE: + ow_pull + DELAY16 480 + ow_release + DELAY16 70 + rcall OW_CHECK_PRESENCE + DELAY16 410 + ret +// + +// +; **** ПРОВЕРКА НАЛИЧИЯ УСТРОЙСТВА ******************************* +; Если подчиненное устройство притянет шину, то устанавливаем флаг OWPRF в единицу в регистре флагов +; +OW_CHECK_PRESENCE: + sbis OW_PIN, OW_LINE + sbr OWFR, (1< + +// +OW_SEND_BYTE: + push r16 + push r17 + mov r16, OW_CMD_r + ldi r17, 8 +_OW_SEND_BYTE_LOOP: + lsr r16 + brcc _OW_SEND_0 + brcs _OW_SEND_1 +_OW_SEND_0: + ow_pull + DELAY16 60 + ow_release + DELAY16 10 + rjmp _OW_SEND_BYTE_END +_OW_SEND_1: + ow_pull + DELAY16 6 + ow_release + DELAY16 64 +_OW_SEND_BYTE_END: + dec r17 + brne _OW_SEND_BYTE_LOOP + pop r17 + pop r16 + ret +// + +// +OW_RD_BYTE: + push r16 + push r17 + ldi r16, 8 +_OW_RD_BYTE_LP: + ow_pull + DELAY16 6 + ow_release + DELAY16 9 + lds r17, OW_RECEIVE + lsr r17 + sbic OW_PIN, OW_LINE + sbr r17, (1<<7) + sts OW_RECEIVE, r17 + DELAY16 55 + dec r16 + brne _OW_RD_BYTE_LP + pop r17 + pop r16 + ret +// + + +// + + +// +; **** ПОЛУЧЕНИЕ ЦИФР ИЗ 16-ТИ БИТНОГО ЧИСЛА ********************* +; Описание: Перемещает цифры числа в соответствующие ячейки памяти в SRAM +; путем деления этого числа несколько раз +DISPLAY_UPD_DIGITS: + cli + push r21 + ldi r21, 4 ; (4 раза делим) т.к индикатор четырех разрядный + + ; инициализация указателя (за каждый проход цикла будет инкрементироваться) + ldi XL, LOW(DIGITS) + ldi XH, HIGH(DIGITS) + + .equ dividend = SRAM_TEMP_1 ; число которе будем делить + .equ divisor = 10 ; на что делим + + ; загружаем число которое хотим поделить в адрес SRAM делимого + sts dividend, DISP_NUM_L + sts dividend+1, DISP_NUM_H + + ; четыре раза производим деление для получения остатков +DIV_LOOP: + ; заполняем нужные регистры + lds dd16uL, dividend + lds dd16uH, dividend+1 + ldi dv16uL, LOW(divisor) + ldi dv16uH, HIGH(divisor) + + rcall div16u ; делим + + st X+, drem16uL ; сохраняем остаток в ячейку по указателю и увеличиваем его + + ; обновляем делимое + sts dividend, dres16uL + sts dividend+1, dres16uH + + dec r21 ; декрементируем счетчик цикла + brne DIV_LOOP ; делим еще раз если не 0 + pop r21 + sei + ret +// + + +// +; **** ЗАГРУЖАЕТ НУЖНЫЙ АДРЕС СИМВОЛА В R0 *********************** +DISPLAY_DECODER: + push r16 + push r17 + ldi ZL, LOW(2*DISPLAY_SYMBOLS) + ldi ZH, HIGH(2*DISPLAY_SYMBOLS) + + clr TEMP_REG_B + add ZL, TEMP_REG_A + adc ZH, TEMP_REG_B + + lpm r0, Z + pop r17 + pop r16 + ret// + + +// +DEBOUNCE_SW: + push r16 + push r17 + push r18 + + ldi r18, 10 +_loop_2: + ldi r17, 255 +_loop_0: + ldi r16, 255 +_dec_0: + dec r16 + brne _dec_0 +_loop_1: + dec r17 + brne _loop_0 +_loop_3: + dec r18 + brne _loop_2 + + pop r18 + pop r17 + pop r16 + ret// + + +// +DELAY: + push r16 + push r17 + + ldi r16, 255 +_DELAY_1: + ldi r17, 255 +_DELAY_2: + dec r17 + nop + nop + nop + brne _DELAY_2 + + dec r16 + brne _DELAY_1 + + pop r17 + pop r16 + ret // + + +// +DISPLAY_SYMBOLS: + ; HGFEDCBA HGFEDCBA + .DB 0b11000000, 0b11111001 ; 0, 1 + .DB 0b10100100, 0b10110000 ; 2, 3 + .DB 0b10011001, 0b10010010 ; 4, 5 + .DB 0b10000010, 0b11111000 ; 6, 7 + .DB 0b10000000, 0b10010000 ; 8, 9 + .DB 0b10011100, 0b10111111 ; °, -// + +// + +// +; **** СЕГМЕНТ EEPROM ******************************************** +; .ESEG +; INFO: .DB "AVR Thermostat. Written by Sergey Yarkov 22.01.2023" +; diff --git a/main.hex b/main.hex new file mode 100644 index 0000000..5619d00 --- /dev/null +++ b/main.hex @@ -0,0 +1,44 @@ +:020000020000FC +:0200000049C0F5 +:10001A0000C04F935F930F935FB7409167004530DD +:10002A000CF403C0442740936700403041F493988E +:10003A0094989598929A00916600FED087D04130A4 +:10004A0041F4929894989598939A00916500F4D007 +:10005A007DD0423041F4929893989598949A009161 +:10006A006400EAD073D0433041F4929893989498FC +:10007A00959A00916300E0D069D043954093670058 +:10008A005FBF0F915F914F9118950FED0DBF0EE76E +:10009A0001BB01EC07BB0CE108BB02E000BF05E0B5 +:1000AA0003BF09E106BF01E009BF112410926700EE +:1000BA0000E000936000002700936A0080E090E06F +:1000CA00C6D056D00CEC802E66D004E4802E63D0C5 +:1000DA004FD00CEC802E5FD00EEB802E5CD00091BE +:1000EA006A00802F90E000916000003039F48AD0D5 +:1000FA0070FD969A70FF9698AAD0A9D0013011F493 +:10010A0081D030D0023079F71BE01093630010934E +:10011A00640010936500109366000000E4CFEE249B +:10012A00FF1841E1001F111F4A9509F40895EE1CBA +:10013A00FF1CE21AF30A20F4E20EF31E8894F2CFAF +:10014A000894F0CF41503040E8F708950F930FB864 +:10015A0000E40EB90BE10DB9769BFDCFC09AC098A9 +:10016A000F91089574D0B29B0196B39B019708959D +:10017A00B99A33E04EEBE6DFB99830E04AE8E2DFBD +:10018A0004D033E042E3DEDF0895B19B716002C020 +:10019A00B1997E7F08950F931F93082D18E0069555 +:1001AA0008F448F0B99A30E046E7CCDFB99830E075 +:1001BA0042E1C8DF08C0B99A30E04AE0C3DFB99823 +:1001CA0030E04EE7BFDF1A9551F71F910F9108955E +:1001DA000F931F9308E0B99A30E04AE0B3DFB99869 +:1001EA0030E040E1AFDF10916A001695B1991068CE +:1001FA0010936A0030E04CE6A5DF0A9561F71F917B +:10020A000F910895F8945F9354E0A3E6B0E08093C9 +:10021A0061009093620000916100109162002AE0EF +:10022A0030E07DDFED9200936100109362005A95F1 +:10023A0091F75F91789408950F931F93E4E9F2E0A0 +:10024A001127E00FF11F04901F910F9108950F934A +:10025A001F932F932AE01FEF0FEF0A95F1F71A95D4 +:10026A00D9F72A95C1F72F911F910F9108950F93EE +:10027A001F930FEF1FEF1A95000000000000D9F737 +:10028A000A95C1F71F910F910895C0F9A4B09992E8 +:06029A0082F880909CBF79 +:00000001FF diff --git a/nbproject/Makefile-default.mk b/nbproject/Makefile-default.mk new file mode 100644 index 0000000..f5d9673 --- /dev/null +++ b/nbproject/Makefile-default.mk @@ -0,0 +1,171 @@ +# +# Generated Makefile - do not edit! +# +# Edit the Makefile in the project folder instead (../Makefile). Each target +# has a -pre and a -post target defined where you can add customized code. +# +# This makefile implements configuration specific macros and targets. + + +# Include project Makefile +ifeq "${IGNORE_LOCAL}" "TRUE" +# do not include local makefile. User is passing all local related variables already +else +include Makefile +# Include makefile containing local settings +ifeq "$(wildcard nbproject/Makefile-local-default.mk)" "nbproject/Makefile-local-default.mk" +include nbproject/Makefile-local-default.mk +endif +endif + +# Environment +MKDIR=mkdir -p +RM=rm -f +MV=mv +CP=cp + +# Macros +CND_CONF=default +ifeq ($(TYPE_IMAGE), DEBUG_RUN) +IMAGE_TYPE=debug +OUTPUT_SUFFIX=obj +DEBUGGABLE_SUFFIX=obj +FINAL_IMAGE=${DISTDIR}/attiny2313a_thermostat.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX} +else +IMAGE_TYPE=production +OUTPUT_SUFFIX=obj +DEBUGGABLE_SUFFIX=obj +FINAL_IMAGE=${DISTDIR}/attiny2313a_thermostat.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX} +endif + +ifeq ($(COMPARE_BUILD), true) +COMPARISON_BUILD= +else +COMPARISON_BUILD= +endif + +ifdef SUB_IMAGE_ADDRESS + +else +SUB_IMAGE_ADDRESS_COMMAND= +endif + +# Object Directory +OBJECTDIR=build/${CND_CONF}/${IMAGE_TYPE} + +# Distribution Directory +DISTDIR=dist/${CND_CONF}/${IMAGE_TYPE} + +# Source Files Quoted if spaced +SOURCEFILES_QUOTED_IF_SPACED=main.asm div16u.asm definitions.asm macros.asm + +# Object Files Quoted if spaced +OBJECTFILES_QUOTED_IF_SPACED=${OBJECTDIR}/main.obj ${OBJECTDIR}/div16u.obj ${OBJECTDIR}/definitions.obj ${OBJECTDIR}/macros.obj +POSSIBLE_DEPFILES=${OBJECTDIR}/main.obj.d ${OBJECTDIR}/div16u.obj.d ${OBJECTDIR}/definitions.obj.d ${OBJECTDIR}/macros.obj.d + +# Object Files +OBJECTFILES=${OBJECTDIR}/main.obj ${OBJECTDIR}/div16u.obj ${OBJECTDIR}/definitions.obj ${OBJECTDIR}/macros.obj + +# Source Files +SOURCEFILES=main.asm div16u.asm definitions.asm macros.asm + +# Pack Options +PACK_ASSEMBLER_OPTIONS=-I "${DFP_DIR}/avrasm/inc" -i tn2313Adef.inc + + + +CFLAGS= +ASFLAGS= +LDLIBSOPTIONS= + +############# Tool locations ########################################## +# If you copy a project from one host to another, the path where the # +# compiler is installed may be different. # +# If you open this project with MPLAB X in the new host, this # +# makefile will be regenerated and the paths will be corrected. # +####################################################################### +# fixDeps replaces a bunch of sed/cat/printf statements that slow down the build +FIXDEPS=fixDeps + +.build-conf: ${BUILD_SUBPROJECTS} +ifneq ($(INFORMATION_MESSAGE), ) + @echo $(INFORMATION_MESSAGE) +endif + ${MAKE} -f nbproject/Makefile-default.mk ${DISTDIR}/attiny2313a_thermostat.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX} + +# ------------------------------------------------------------------------------------ +# Rules for buildStep: assemble +ifeq ($(TYPE_IMAGE), DEBUG_RUN) +${OBJECTDIR}/main.obj: main.asm nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} ${DISTDIR} + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/main.obj + ${MP_AS} -fI -W+ie ${PACK_ASSEMBLER_OPTIONS} -d ${DISTDIR}/attiny2313a_thermostat.X.${IMAGE_TYPE}.${DEBUGGABLE_SUFFIX} -m ${DISTDIR}/attiny2313a_thermostat.X.${IMAGE_TYPE}.map -S ${DISTDIR}/attiny2313a_thermostat.X.${IMAGE_TYPE}.tmp main.asm +${OBJECTDIR}/div16u.obj: div16u.asm nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} ${DISTDIR} + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/div16u.obj + ${MP_AS} -fI -W+ie ${PACK_ASSEMBLER_OPTIONS} -d ${DISTDIR}/attiny2313a_thermostat.X.${IMAGE_TYPE}.${DEBUGGABLE_SUFFIX} -m ${DISTDIR}/attiny2313a_thermostat.X.${IMAGE_TYPE}.map -S ${DISTDIR}/attiny2313a_thermostat.X.${IMAGE_TYPE}.tmp div16u.asm +${OBJECTDIR}/definitions.obj: definitions.asm nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} ${DISTDIR} + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/definitions.obj + ${MP_AS} -fI -W+ie ${PACK_ASSEMBLER_OPTIONS} -d ${DISTDIR}/attiny2313a_thermostat.X.${IMAGE_TYPE}.${DEBUGGABLE_SUFFIX} -m ${DISTDIR}/attiny2313a_thermostat.X.${IMAGE_TYPE}.map -S ${DISTDIR}/attiny2313a_thermostat.X.${IMAGE_TYPE}.tmp definitions.asm +${OBJECTDIR}/macros.obj: macros.asm nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} ${DISTDIR} + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/macros.obj + ${MP_AS} -fI -W+ie ${PACK_ASSEMBLER_OPTIONS} -d ${DISTDIR}/attiny2313a_thermostat.X.${IMAGE_TYPE}.${DEBUGGABLE_SUFFIX} -m ${DISTDIR}/attiny2313a_thermostat.X.${IMAGE_TYPE}.map -S ${DISTDIR}/attiny2313a_thermostat.X.${IMAGE_TYPE}.tmp macros.asm +else +${OBJECTDIR}/main.obj: main.asm nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} ${DISTDIR} + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/main.obj + ${MP_AS} -fI -W+ie ${PACK_ASSEMBLER_OPTIONS} -d ${DISTDIR}/attiny2313a_thermostat.X.${IMAGE_TYPE}.${DEBUGGABLE_SUFFIX} -S ${DISTDIR}/attiny2313a_thermostat.X.${IMAGE_TYPE}.tmp -o ${DISTDIR}/attiny2313a_thermostat.X.${IMAGE_TYPE}.hex -m ${DISTDIR}/attiny2313a_thermostat.X.${IMAGE_TYPE}.map -l ${DISTDIR}/attiny2313a_thermostat.X.${IMAGE_TYPE}.lss main.asm +${OBJECTDIR}/div16u.obj: div16u.asm nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} ${DISTDIR} + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/div16u.obj + ${MP_AS} -fI -W+ie ${PACK_ASSEMBLER_OPTIONS} -d ${DISTDIR}/attiny2313a_thermostat.X.${IMAGE_TYPE}.${DEBUGGABLE_SUFFIX} -S ${DISTDIR}/attiny2313a_thermostat.X.${IMAGE_TYPE}.tmp -o ${DISTDIR}/attiny2313a_thermostat.X.${IMAGE_TYPE}.hex -m ${DISTDIR}/attiny2313a_thermostat.X.${IMAGE_TYPE}.map -l ${DISTDIR}/attiny2313a_thermostat.X.${IMAGE_TYPE}.lss div16u.asm +${OBJECTDIR}/definitions.obj: definitions.asm nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} ${DISTDIR} + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/definitions.obj + ${MP_AS} -fI -W+ie ${PACK_ASSEMBLER_OPTIONS} -d ${DISTDIR}/attiny2313a_thermostat.X.${IMAGE_TYPE}.${DEBUGGABLE_SUFFIX} -S ${DISTDIR}/attiny2313a_thermostat.X.${IMAGE_TYPE}.tmp -o ${DISTDIR}/attiny2313a_thermostat.X.${IMAGE_TYPE}.hex -m ${DISTDIR}/attiny2313a_thermostat.X.${IMAGE_TYPE}.map -l ${DISTDIR}/attiny2313a_thermostat.X.${IMAGE_TYPE}.lss definitions.asm +${OBJECTDIR}/macros.obj: macros.asm nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} ${DISTDIR} + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/macros.obj + ${MP_AS} -fI -W+ie ${PACK_ASSEMBLER_OPTIONS} -d ${DISTDIR}/attiny2313a_thermostat.X.${IMAGE_TYPE}.${DEBUGGABLE_SUFFIX} -S ${DISTDIR}/attiny2313a_thermostat.X.${IMAGE_TYPE}.tmp -o ${DISTDIR}/attiny2313a_thermostat.X.${IMAGE_TYPE}.hex -m ${DISTDIR}/attiny2313a_thermostat.X.${IMAGE_TYPE}.map -l ${DISTDIR}/attiny2313a_thermostat.X.${IMAGE_TYPE}.lss macros.asm +endif + +# ------------------------------------------------------------------------------------ +# Rules for buildStep: link +ifeq ($(TYPE_IMAGE), DEBUG_RUN) +${DISTDIR}/attiny2313a_thermostat.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX}: ${OBJECTFILES} nbproject/Makefile-${CND_CONF}.mk + +else +${DISTDIR}/attiny2313a_thermostat.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX}: ${OBJECTFILES} nbproject/Makefile-${CND_CONF}.mk + +endif + + +# Subprojects +.build-subprojects: + + +# Subprojects +.clean-subprojects: + +# Clean Targets +.clean-conf: ${CLEAN_SUBPROJECTS} + ${RM} -r ${OBJECTDIR} + ${RM} -r ${DISTDIR} + +# Enable dependency checking +.dep.inc: .depcheck-impl + +DEPFILES=$(shell "${PATH_TO_IDE_BIN}"mplabwildcard ${POSSIBLE_DEPFILES}) +ifneq (${DEPFILES},) +include ${DEPFILES} +endif diff --git a/nbproject/Makefile-genesis.properties b/nbproject/Makefile-genesis.properties new file mode 100644 index 0000000..1a33137 --- /dev/null +++ b/nbproject/Makefile-genesis.properties @@ -0,0 +1,14 @@ +# +#Mon Jun 19 12:50:04 MSK 2023 +default.languagetoolchain.version=2.2.7 +default.Pack.dfplocation=/home/sergeyyarkov/.mchp_packs/Microchip/ATtiny_DFP/3.0.151 +default.com-microchip-mplab-mdbcore-simulator-Simulator.md5=19e4dc0f223322f74cda227c3c12c71c +conf.ids=default +default.languagetoolchain.dir=/usr/bin +host.id=1707-dsfu-bg +configurations-xml=d50925b65bb9625a2bd338eb6fa64d60 +default.com-microchip-mplab-nbide-toolchain-avrasm-AVRASMLanguageToolchain.md5=0e94da8ed93e9650ffef50929833a79f +com-microchip-mplab-nbide-embedded-makeproject-MakeProject.md5=6e02ca5e9f5042ffd365b42ab82d3a9b +user-defined-mime-resolver-xml=none +proj.dir=/home/sergeyyarkov/Documents/Projects/Firmwares/AVR/attiny2313a_thermostat.X +host.platform=linux diff --git a/nbproject/Makefile-impl.mk b/nbproject/Makefile-impl.mk new file mode 100644 index 0000000..101db18 --- /dev/null +++ b/nbproject/Makefile-impl.mk @@ -0,0 +1,69 @@ +# +# Generated Makefile - do not edit! +# +# Edit the Makefile in the project folder instead (../Makefile). Each target +# has a pre- and a post- target defined where you can add customization code. +# +# This makefile implements macros and targets common to all configurations. +# +# NOCDDL + + +# Building and Cleaning subprojects are done by default, but can be controlled with the SUB +# macro. If SUB=no, subprojects will not be built or cleaned. The following macro +# statements set BUILD_SUB-CONF and CLEAN_SUB-CONF to .build-reqprojects-conf +# and .clean-reqprojects-conf unless SUB has the value 'no' +SUB_no=NO +SUBPROJECTS=${SUB_${SUB}} +BUILD_SUBPROJECTS_=.build-subprojects +BUILD_SUBPROJECTS_NO= +BUILD_SUBPROJECTS=${BUILD_SUBPROJECTS_${SUBPROJECTS}} +CLEAN_SUBPROJECTS_=.clean-subprojects +CLEAN_SUBPROJECTS_NO= +CLEAN_SUBPROJECTS=${CLEAN_SUBPROJECTS_${SUBPROJECTS}} + + +# Project Name +PROJECTNAME=attiny2313a_thermostat.X + +# Active Configuration +DEFAULTCONF=default +CONF=${DEFAULTCONF} + +# All Configurations +ALLCONFS=default + + +# build +.build-impl: .build-pre + ${MAKE} -f nbproject/Makefile-${CONF}.mk SUBPROJECTS=${SUBPROJECTS} .build-conf + + +# clean +.clean-impl: .clean-pre + ${MAKE} -f nbproject/Makefile-${CONF}.mk SUBPROJECTS=${SUBPROJECTS} .clean-conf + +# clobber +.clobber-impl: .clobber-pre .depcheck-impl + ${MAKE} SUBPROJECTS=${SUBPROJECTS} CONF=default clean + + + +# all +.all-impl: .all-pre .depcheck-impl + ${MAKE} SUBPROJECTS=${SUBPROJECTS} CONF=default build + + + +# dependency checking support +.depcheck-impl: +# @echo "# This code depends on make tool being used" >.dep.inc +# @if [ -n "${MAKE_VERSION}" ]; then \ +# echo "DEPFILES=\$$(wildcard \$$(addsuffix .d, \$${OBJECTFILES}))" >>.dep.inc; \ +# echo "ifneq (\$${DEPFILES},)" >>.dep.inc; \ +# echo "include \$${DEPFILES}" >>.dep.inc; \ +# echo "endif" >>.dep.inc; \ +# else \ +# echo ".KEEP_STATE:" >>.dep.inc; \ +# echo ".KEEP_STATE_FILE:.make.state.\$${CONF}" >>.dep.inc; \ +# fi diff --git a/nbproject/Makefile-local-default.mk b/nbproject/Makefile-local-default.mk new file mode 100644 index 0000000..cf8bf09 --- /dev/null +++ b/nbproject/Makefile-local-default.mk @@ -0,0 +1,37 @@ +# +# Generated Makefile - do not edit! +# +# +# This file contains information about the location of compilers and other tools. +# If you commmit this file into your revision control server, you will be able to +# to checkout the project and build it from the command line with make. However, +# if more than one person works on the same project, then this file might show +# conflicts since different users are bound to have compilers in different places. +# In that case you might choose to not commit this file and let MPLAB X recreate this file +# for each user. The disadvantage of not commiting this file is that you must run MPLAB X at +# least once so the file gets created and the project can be built. Finally, you can also +# avoid using this file at all if you are only building from the command line with make. +# You can invoke make with the values of the macros: +# $ makeMP_CC="/opt/microchip/mplabc30/v3.30c/bin/pic30-gcc" ... +# +PATH_TO_IDE_BIN=/opt/microchip/mplabx/v6.00/mplab_platform/platform/../mplab_ide/modules/../../bin/ +# Adding MPLAB X bin directory to path. +PATH:=/opt/microchip/mplabx/v6.00/mplab_platform/platform/../mplab_ide/modules/../../bin/:$(PATH) +# Path to java used to run MPLAB X when this makefile was created +MP_JAVA_PATH="/opt/microchip/mplabx/v6.00/sys/java/zulu8.54.0.21-ca-fx-jre8.0.292-linux_x64/bin/" +OS_CURRENT="$(shell uname -s)" +# MP_CC is not defined +# MP_CPPC is not defined +# MP_BC is not defined +MP_AS="/usr/bin/avrasm2" +# MP_LD is not defined +# MP_AR is not defined +DEP_GEN=${MP_JAVA_PATH}java -jar "/opt/microchip/mplabx/v6.00/mplab_platform/platform/../mplab_ide/modules/../../bin/extractobjectdependencies.jar" +# MP_CC_DIR is not defined +# MP_CPPC_DIR is not defined +# MP_BC_DIR is not defined +MP_AS_DIR="/usr/bin" +# MP_LD_DIR is not defined +# MP_AR_DIR is not defined +# MP_BC_DIR is not defined +DFP_DIR=/home/sergeyyarkov/.mchp_packs/Microchip/ATtiny_DFP/3.0.151 diff --git a/nbproject/Makefile-variables.mk b/nbproject/Makefile-variables.mk new file mode 100644 index 0000000..d800016 --- /dev/null +++ b/nbproject/Makefile-variables.mk @@ -0,0 +1,10 @@ +# +# Generated - do not edit! +# +# NOCDDL +# +CND_BASEDIR=`pwd` +# default configuration +CND_ARTIFACT_DIR_default=dist/default/production +CND_ARTIFACT_NAME_default=attiny2313a_thermostat.X.production.obj +CND_ARTIFACT_PATH_default=dist/default/production/attiny2313a_thermostat.X.production.obj diff --git a/nbproject/configurations.xml b/nbproject/configurations.xml new file mode 100644 index 0000000..ecadafa --- /dev/null +++ b/nbproject/configurations.xml @@ -0,0 +1,1026 @@ + + + + + + + + + main.asm + div16u.asm + definitions.asm + macros.asm + + + Makefile + + + Makefile + + + + localhost + ATtiny2313A + + + Simulator + AVRASM + 2.2.7 + 2 + + + + + + + + + + + + + + + false + false + + + + + + + false + false + + false + + false + false + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/nbproject/private/configurations.xml b/nbproject/private/configurations.xml new file mode 100644 index 0000000..91b0ab4 --- /dev/null +++ b/nbproject/private/configurations.xml @@ -0,0 +1,25 @@ + + + Makefile + 0 + + + + /usr/bin + + place holder 1 + place holder 2 + + + + + true + 0 + 0 + 0 + + + + + + diff --git a/nbproject/private/private.xml b/nbproject/private/private.xml new file mode 100644 index 0000000..af26a1b --- /dev/null +++ b/nbproject/private/private.xml @@ -0,0 +1,11 @@ + + + + + + file:/home/sergeyyarkov/Documents/Projects/Firmwares/AVR/attiny2313a_thermostat.X/main.asm + file:/home/sergeyyarkov/Documents/Projects/Firmwares/AVR/attiny2313a_thermostat.X/macros.asm + file:/home/sergeyyarkov/Documents/Projects/Firmwares/AVR/attiny2313a_thermostat.X/definitions.asm + + + diff --git a/nbproject/project.xml b/nbproject/project.xml new file mode 100644 index 0000000..b75824b --- /dev/null +++ b/nbproject/project.xml @@ -0,0 +1,27 @@ + + + com.microchip.mplab.nbide.embedded.makeproject + + + attiny2313a_thermostat + f831f251-bb28-4667-8cff-9eb37aa84fa6 + 0 + + + + + UTF-8 + + + + + default + 2 + + + + false + + + + diff --git a/tn2313Adef.inc b/tn2313Adef.inc deleted file mode 100644 index c159ba1..0000000 --- a/tn2313Adef.inc +++ /dev/null @@ -1,698 +0,0 @@ -;***** THIS IS A MACHINE GENERATED FILE - DO NOT EDIT ******************** -;***** Created: 2011-02-09 12:04 ******* Source: ATtiny2313A.xml ********* -;************************************************************************* -;* A P P L I C A T I O N N O T E F O R T H E A V R F A M I L Y -;* -;* Number : AVR000 -;* File Name : "tn2313Adef.inc" -;* Title : Register/Bit Definitions for the ATtiny2313A -;* Date : 2011-02-09 -;* Version : 2.35 -;* Support E-mail : avr@atmel.com -;* Target MCU : ATtiny2313A -;* -;* DESCRIPTION -;* When including this file in the assembly program file, all I/O register -;* names and I/O register bit names appearing in the data book can be used. -;* In addition, the six registers forming the three data pointers X, Y and -;* Z have been assigned names XL - ZH. Highest RAM address for Internal -;* SRAM is also defined -;* -;* The Register names are represented by their hexadecimal address. -;* -;* The Register Bit names are represented by their bit number (0-7). -;* -;* Please observe the difference in using the bit names with instructions -;* such as "sbr"/"cbr" (set/clear bit in register) and "sbrs"/"sbrc" -;* (skip if bit in register set/cleared). The following example illustrates -;* this: -;* -;* in r16,PORTB ;read PORTB latch -;* sbr r16,(1< USI Wire Mode - ; USICS1 <--------------> USI Clock Source Select - ; USICLK <--------------> USI Clock Strobe - ; USITC <--------------> USI Toggle Clock (Enable clock generation) - ldi TEMP_REG_A, (1<