From f37d0079716647a75c8fbfcac01adb0c14605ff9 Mon Sep 17 00:00:00 2001 From: Adrien VAN DAMME Date: Sun, 5 Feb 2017 12:05:32 +0100 Subject: [PATCH] first commit --- Debug/Makefile | 222 +++ Debug/Nixie clock.d | 49 + Debug/Nixie clock.eep | 1 + Debug/Nixie clock.elf | Bin 0 -> 49425 bytes Debug/Nixie clock.hex | 364 ++++ Debug/Nixie clock.lss | 4291 ++++++++++++++++++++++++++++++++++++++++ Debug/Nixie clock.map | 844 ++++++++ Debug/Nixie clock.o | Bin 0 -> 3328 bytes Debug/Nixie clock.srec | 365 ++++ Debug/fonction.d | 53 + Debug/fonction.o | Bin 0 -> 47784 bytes Debug/lib/DCF77.d | 63 + Debug/lib/DCF77.o | Bin 0 -> 19032 bytes Debug/lib/DS1307.d | 46 + Debug/lib/DS1307.o | Bin 0 -> 13772 bytes Debug/lib/LCD.d | 64 + Debug/lib/LCD.o | Bin 0 -> 16096 bytes Debug/lib/UART.d | 46 + Debug/lib/UART.o | Bin 0 -> 3540 bytes Debug/lib/hc74595.d | 46 + Debug/lib/hc74595.o | Bin 0 -> 7400 bytes Debug/lib/timer.d | 40 + Debug/lib/timer.o | Bin 0 -> 5544 bytes Debug/make4656-1.bat | 2 + Debug/make5444-1.bat | 2 + Debug/make5444-2.bat | 2 + Debug/make6940-1.bat | 2 + Debug/make6940-2.bat | 2 + Debug/make6940-3.bat | 2 + Debug/make6940-4.bat | 2 + Debug/makedep.mk | 20 + Nixie clock.cpp | 24 + Nixie clock.cppproj | 196 ++ Nixie clock.cpp~ | 24 + Nixie clock.h | 17 + fonction.cpp | 537 +++++ fonction.h | 26 + lib/DCF77 - Copie.cpp | 138 ++ lib/DCF77 - Copie.h | 39 + lib/DCF77.cpp | 211 ++ lib/DCF77.cpp~ | 211 ++ lib/DCF77.h | 52 + lib/DS1307.cpp | 190 ++ lib/DS1307.h | 37 + lib/LCD.cpp | 170 ++ lib/LCD.h | 37 + lib/UART.cpp | 37 + lib/UART.h | 18 + lib/hc74595.cpp | 186 ++ lib/hc74595.h | 27 + lib/timer.cpp | 104 + lib/timer.cpp~ | 106 + lib/timer.h | 17 + lib/timer.h~ | 17 + uart/uart.c | 776 ++++++++ uart/uart.h | 248 +++ 56 files changed, 9973 insertions(+) create mode 100644 Debug/Makefile create mode 100644 Debug/Nixie clock.d create mode 100644 Debug/Nixie clock.eep create mode 100644 Debug/Nixie clock.elf create mode 100644 Debug/Nixie clock.hex create mode 100644 Debug/Nixie clock.lss create mode 100644 Debug/Nixie clock.map create mode 100644 Debug/Nixie clock.o create mode 100644 Debug/Nixie clock.srec create mode 100644 Debug/fonction.d create mode 100644 Debug/fonction.o create mode 100644 Debug/lib/DCF77.d create mode 100644 Debug/lib/DCF77.o create mode 100644 Debug/lib/DS1307.d create mode 100644 Debug/lib/DS1307.o create mode 100644 Debug/lib/LCD.d create mode 100644 Debug/lib/LCD.o create mode 100644 Debug/lib/UART.d create mode 100644 Debug/lib/UART.o create mode 100644 Debug/lib/hc74595.d create mode 100644 Debug/lib/hc74595.o create mode 100644 Debug/lib/timer.d create mode 100644 Debug/lib/timer.o create mode 100644 Debug/make4656-1.bat create mode 100644 Debug/make5444-1.bat create mode 100644 Debug/make5444-2.bat create mode 100644 Debug/make6940-1.bat create mode 100644 Debug/make6940-2.bat create mode 100644 Debug/make6940-3.bat create mode 100644 Debug/make6940-4.bat create mode 100644 Debug/makedep.mk create mode 100644 Nixie clock.cpp create mode 100644 Nixie clock.cppproj create mode 100644 Nixie clock.cpp~ create mode 100644 Nixie clock.h create mode 100644 fonction.cpp create mode 100644 fonction.h create mode 100644 lib/DCF77 - Copie.cpp create mode 100644 lib/DCF77 - Copie.h create mode 100644 lib/DCF77.cpp create mode 100644 lib/DCF77.cpp~ create mode 100644 lib/DCF77.h create mode 100644 lib/DS1307.cpp create mode 100644 lib/DS1307.h create mode 100644 lib/LCD.cpp create mode 100644 lib/LCD.h create mode 100644 lib/UART.cpp create mode 100644 lib/UART.h create mode 100644 lib/hc74595.cpp create mode 100644 lib/hc74595.h create mode 100644 lib/timer.cpp create mode 100644 lib/timer.cpp~ create mode 100644 lib/timer.h create mode 100644 lib/timer.h~ create mode 100644 uart/uart.c create mode 100644 uart/uart.h diff --git a/Debug/Makefile b/Debug/Makefile new file mode 100644 index 0000000..1a37b1f --- /dev/null +++ b/Debug/Makefile @@ -0,0 +1,222 @@ +################################################################################ +# Automatically-generated file. Do not edit! +################################################################################ + +SHELL := cmd.exe +RM := rm -rf + +USER_OBJS := + +LIBS := +PROJ := + +O_SRCS := +C_SRCS := +S_SRCS := +S_UPPER_SRCS := +OBJ_SRCS := +ASM_SRCS := +PREPROCESSING_SRCS := +OBJS := +OBJS_AS_ARGS := +C_DEPS := +C_DEPS_AS_ARGS := +EXECUTABLES := +OUTPUT_FILE_PATH := +OUTPUT_FILE_PATH_AS_ARGS := +AVR_APP_PATH :=$$$AVR_APP_PATH$$$ +QUOTE := " +ADDITIONAL_DEPENDENCIES:= +OUTPUT_FILE_DEP:= +LIB_DEP:= + +# Every subdirectory with source files must be described here +SUBDIRS := \ +../lib + + +# Add inputs and outputs from these tool invocations to the build variables +C_SRCS += \ +../fonction.cpp \ +../lib/LCD.cpp \ +../lib/hc74595.cpp \ +../lib/DCF77.cpp \ +../lib/DS1307.cpp \ +../lib/timer.cpp \ +../lib/UART.cpp \ +../Nixie\ clock.cpp + + +PREPROCESSING_SRCS += + + +ASM_SRCS += + + +OBJS += \ +fonction.o \ +lib/LCD.o \ +lib/hc74595.o \ +lib/DCF77.o \ +lib/DS1307.o \ +lib/timer.o \ +lib/UART.o \ +Nixie\ clock.o + +OBJS_AS_ARGS += \ +fonction.o \ +lib/LCD.o \ +lib/hc74595.o \ +lib/DCF77.o \ +lib/DS1307.o \ +lib/timer.o \ +lib/UART.o \ +"Nixie clock.o" + +C_DEPS += \ +fonction.d \ +lib/LCD.d \ +lib/hc74595.d \ +lib/DCF77.d \ +lib/DS1307.d \ +lib/timer.d \ +lib/UART.d \ +Nixie\ clock.d + +C_DEPS_AS_ARGS += \ +fonction.d \ +lib/LCD.d \ +lib/hc74595.d \ +lib/DCF77.d \ +lib/DS1307.d \ +lib/timer.d \ +lib/UART.d \ +"Nixie clock.d" + +OUTPUT_FILE_PATH +=Nixie\ clock.elf + +OUTPUT_FILE_PATH_AS_ARGS +="Nixie clock.elf" + +ADDITIONAL_DEPENDENCIES:= + +OUTPUT_FILE_DEP:= ./makedep.mk + +LIB_DEP+= + +# AVR32/GNU C Compiler +./fonction.o: .././fonction.cpp + @echo Building file: $< + @echo Invoking: AVR8/GNU C Compiler : 3.4.4 + $(QUOTE)C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1056\avr8-gnu-toolchain\bin\avr-g++.exe$(QUOTE) -funsigned-char -funsigned-bitfields -DDEBUG -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -mmcu=atmega328p -c -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -o "$@" "$<" + @echo Finished building: $< + + +lib/LCD.o: ../lib/LCD.cpp + @echo Building file: $< + @echo Invoking: AVR8/GNU C Compiler : 3.4.4 + $(QUOTE)C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1056\avr8-gnu-toolchain\bin\avr-g++.exe$(QUOTE) -funsigned-char -funsigned-bitfields -DDEBUG -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -mmcu=atmega328p -c -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -o "$@" "$<" + @echo Finished building: $< + + +lib/hc74595.o: ../lib/hc74595.cpp + @echo Building file: $< + @echo Invoking: AVR8/GNU C Compiler : 3.4.4 + $(QUOTE)C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1056\avr8-gnu-toolchain\bin\avr-g++.exe$(QUOTE) -funsigned-char -funsigned-bitfields -DDEBUG -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -mmcu=atmega328p -c -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -o "$@" "$<" + @echo Finished building: $< + + +lib/DCF77.o: ../lib/DCF77.cpp + @echo Building file: $< + @echo Invoking: AVR8/GNU C Compiler : 3.4.4 + $(QUOTE)C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1056\avr8-gnu-toolchain\bin\avr-g++.exe$(QUOTE) -funsigned-char -funsigned-bitfields -DDEBUG -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -mmcu=atmega328p -c -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -o "$@" "$<" + @echo Finished building: $< + + +lib/DS1307.o: ../lib/DS1307.cpp + @echo Building file: $< + @echo Invoking: AVR8/GNU C Compiler : 3.4.4 + $(QUOTE)C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1056\avr8-gnu-toolchain\bin\avr-g++.exe$(QUOTE) -funsigned-char -funsigned-bitfields -DDEBUG -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -mmcu=atmega328p -c -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -o "$@" "$<" + @echo Finished building: $< + + +lib/timer.o: ../lib/timer.cpp + @echo Building file: $< + @echo Invoking: AVR8/GNU C Compiler : 3.4.4 + $(QUOTE)C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1056\avr8-gnu-toolchain\bin\avr-g++.exe$(QUOTE) -funsigned-char -funsigned-bitfields -DDEBUG -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -mmcu=atmega328p -c -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -o "$@" "$<" + @echo Finished building: $< + + +lib/UART.o: ../lib/UART.cpp + @echo Building file: $< + @echo Invoking: AVR8/GNU C Compiler : 3.4.4 + $(QUOTE)C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1056\avr8-gnu-toolchain\bin\avr-g++.exe$(QUOTE) -funsigned-char -funsigned-bitfields -DDEBUG -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -mmcu=atmega328p -c -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -o "$@" "$<" + @echo Finished building: $< + + +./Nixie\ clock.o: .././Nixie\ clock.cpp + @echo Building file: $< + @echo Invoking: AVR8/GNU C Compiler : 3.4.4 + $(QUOTE)C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1056\avr8-gnu-toolchain\bin\avr-g++.exe$(QUOTE) -funsigned-char -funsigned-bitfields -DDEBUG -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -mmcu=atmega328p -c -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -o "$@" "$<" + @echo Finished building: $< + + + +./%.o: .././%.cpp + @echo Building file: $< + @echo Invoking: AVR8/GNU C Compiler : 3.4.4 + $(QUOTE)C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1056\avr8-gnu-toolchain\bin\avr-g++.exe$(QUOTE) -funsigned-char -funsigned-bitfields -DDEBUG -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -mmcu=atmega328p -c -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -o "$@" "$<" + @echo Finished building: $< + + +lib/%.o: ../lib/%.cpp + @echo Building file: $< + @echo Invoking: AVR8/GNU C Compiler : 3.4.4 + $(QUOTE)C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1056\avr8-gnu-toolchain\bin\avr-g++.exe$(QUOTE) -funsigned-char -funsigned-bitfields -DDEBUG -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -mmcu=atmega328p -c -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -o "$@" "$<" + @echo Finished building: $< + + + + +# AVR32/GNU Preprocessing Assembler + + + +# AVR32/GNU Assembler + + + + +ifneq ($(MAKECMDGOALS),clean) +ifneq ($(strip $(C_DEPS)),) +-include $(C_DEPS) +endif +endif + +# Add inputs and outputs from these tool invocations to the build variables + +# All Target +all: $(OUTPUT_FILE_PATH) $(ADDITIONAL_DEPENDENCIES) + +$(OUTPUT_FILE_PATH): $(OBJS) $(USER_OBJS) $(OUTPUT_FILE_DEP) $(LIB_DEP) + @echo Building target: $@ + @echo Invoking: AVR8/GNU Linker : 3.4.4 + $(QUOTE)C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1056\avr8-gnu-toolchain\bin\avr-g++.exe$(QUOTE) -o$(OUTPUT_FILE_PATH_AS_ARGS) $(OBJS_AS_ARGS) $(USER_OBJS) $(LIBS) -Wl,-Map="Nixie clock.map" -Wl,--start-group -Wl,-lm -Wl,--end-group -Wl,--gc-sections -mmcu=atmega328p + @echo Finished building target: $@ + "C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1056\avr8-gnu-toolchain\bin\avr-objcopy.exe" -O ihex -R .eeprom -R .fuse -R .lock -R .signature "Nixie clock.elf" "Nixie clock.hex" + "C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1056\avr8-gnu-toolchain\bin\avr-objcopy.exe" -j .eeprom --set-section-flags=.eeprom=alloc,load --change-section-lma .eeprom=0 --no-change-warnings -O ihex "Nixie clock.elf" "Nixie clock.eep" || exit 0 + "C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1056\avr8-gnu-toolchain\bin\avr-objdump.exe" -h -S "Nixie clock.elf" > "Nixie clock.lss" + "C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1056\avr8-gnu-toolchain\bin\avr-objcopy.exe" -O srec -R .eeprom -R .fuse -R .lock -R .signature "Nixie clock.elf" "Nixie clock.srec" + "C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1056\avr8-gnu-toolchain\bin\avr-size.exe" "Nixie clock.elf" + + + + + + + +# Other Targets +clean: + -$(RM) $(OBJS_AS_ARGS) $(EXECUTABLES) + -$(RM) $(C_DEPS_AS_ARGS) + rm -rf "Nixie clock.elf" "Nixie clock.a" "Nixie clock.hex" "Nixie clock.lss" "Nixie clock.eep" "Nixie clock.map" "Nixie clock.srec" + \ No newline at end of file diff --git a/Debug/Nixie clock.d b/Debug/Nixie clock.d new file mode 100644 index 0000000..3a3fccb --- /dev/null +++ b/Debug/Nixie clock.d @@ -0,0 +1,49 @@ +Nixie clock.d Nixie clock.o: .././Nixie\ clock.cpp \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\avr\io.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\inttypes.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\avr\iom328p.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\avr\portpins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\avr\common.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\avr\version.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\avr\fuse.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\avr\lock.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\util\delay.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\util\delay_basic.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\math.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\avr\interrupt.h \ + ../././fonction.h + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\avr\io.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\inttypes.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\avr\iom328p.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\avr\portpins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\avr\common.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\avr\version.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\avr\fuse.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\avr\lock.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\util\delay.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\util\delay_basic.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\math.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\avr\interrupt.h: + +../././fonction.h: diff --git a/Debug/Nixie clock.eep b/Debug/Nixie clock.eep new file mode 100644 index 0000000..1996e8f --- /dev/null +++ b/Debug/Nixie clock.eep @@ -0,0 +1 @@ +:00000001FF diff --git a/Debug/Nixie clock.elf b/Debug/Nixie clock.elf new file mode 100644 index 0000000000000000000000000000000000000000..34561fcf796c91537fa12b1dc60d8adc1cf0b319 GIT binary patch literal 49425 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 EABqLKzW@LL literal 0 HcmV?d00001 diff --git a/Debug/Nixie clock.hex b/Debug/Nixie clock.hex new file mode 100644 index 0000000..65a3932 --- /dev/null +++ b/Debug/Nixie clock.hex @@ -0,0 +1,364 @@ +:100000000C9436000C94BE090C945E000C945E00B7 +:100010000C945E000C945E000C945E000C945E00E8 +:100020000C945E000C945E000C945E000C94FD0A2F +:100030000C945E000C945E000C945E000C945E00C8 +:100040000C945E000C945E000C945E000C945E00B8 +:100050000C945E000C945E000C945E000C945E00A8 +:100060000C945E000C945E00C806ED0911241FBEBE +:10007000CFEFD8E0DEBFCDBF11E0A0E0B1E0E4EA11 +:10008000F6E102C005900D92A030B107D9F721E04A +:10009000A0E0B1E001C01D92AB32B207E1F710E081 +:1000A000CCE6D0E004C02297FE010E944C0BC8367B +:1000B000D107C9F70E943F0B0C94500B0C94000021 +:1000C0008A3091054CF020E030E02F5F3F4F0A97D7 +:1000D0008A309105D4F702C020E030E022953295B5 +:1000E000307F3227207F3227822B932B08950E9466 +:1000F000220B529887B18F7C87B984B1887F84B9ED +:1001000087B1876087B988B1887F88B984B18863EF +:1001100084B985B1877C85B98DE091E00E94B00AF1 +:10012000803829F460E08DE091E00E94C80A0895CB +:100130008DE091E00E94B80A90E0BC016295729552 +:10014000707F7627607F762795958795959587951B +:100150009595879595958795682B40E083E091E08C +:100160000E9409078DE091E00E94B40A90E0BC0172 +:1001700062957295707F7627607F76279595879533 +:10018000959587959595879595958795682B40E0EA +:1001900083E091E00E9409078DE091E00E94B00A9F +:1001A00090E0BC0162957295707F7627607F76271C +:1001B0009595879595958795959587959595879527 +:1001C000682B40E083E091E00E94090783E091E022 +:1001D0000E949C0708958DE091E00E94BC0A90E087 +:1001E000BC0162957295707F7627607F7627959522 +:1001F0008795959587959595879595958795682B7E +:1002000040E083E091E00E9409078DE091E00E94C8 +:10021000C00A90E0BC0162957295707F7627607F7E +:100220007627959587959595879595958795959535 +:100230008795682B40E083E091E00E9409078DE0FC +:1002400091E00E94C40A90E0BC0162957295707FB3 +:100250007627607F762795958795959587959595CF +:10026000879595958795682B40E083E091E00E9403 +:10027000090783E091E00E949C0708958DE091E0DA +:100280000E94B00A0E94980008950196662309F41E +:10029000C8C08230910509F446C08330910509F445 +:1002A00081C0019709F084C140E06FEF83E091E0E5 +:1002B0000E9409078DE091E00E94C00A90E0BC0115 +:1002C00062957295707F7627607F762795958795E2 +:1002D000959587959595879595958795682B40E099 +:1002E00083E091E00E9409078DE091E00E94C40A3A +:1002F00090E0BC0162957295707F7627607F7627CB +:1003000095958795959587959595879595958795D5 +:10031000682B40E083E091E00E94090783E091E0D0 +:100320000E949C0708958DE091E00E94BC0A90E035 +:10033000BC0162957295707F7627607F76279595D0 +:100340008795959587959595879595958795682B2C +:1003500040E083E091E00E94090740E06FEF83E016 +:1003600091E00E9409078DE091E00E94C40A90E0AC +:10037000BC0162957295707F7627607F7627959590 +:100380008795959587959595879595958795682BEC +:1003900040E083E091E00E94090783E091E00E9441 +:1003A0009C0708958DE091E00E94BC0A90E0BC019A +:1003B00062957295707F7627607F762795958795F1 +:1003C000959587959595879595958795682B40E0A8 +:1003D00083E091E00E9409078DE091E00E94C00A4D +:1003E00090E0BC0162957295707F7627607F7627DA +:1003F00095958795959587959595879595958795E5 +:10040000682B40E083E091E00E94090740E06FEF35 +:1004100083E091E00E94090783E091E00E949C073D +:1004200008958230910509F446C08330910509F49E +:1004300081C0019709F0BCC040E06FEF83E091E01C +:100440000E9409078DE091E00E94B40A90E0BC018F +:1004500062957295707F7627607F76279595879550 +:10046000959587959595879595958795682B40E007 +:1004700083E091E00E9409078DE091E00E94B00ABC +:1004800090E0BC0162957295707F7627607F762739 +:100490009595879595958795959587959595879544 +:1004A000682B40E083E091E00E94090783E091E03F +:1004B0000E949C0708958DE091E00E94B80A90E0A8 +:1004C000BC0162957295707F7627607F762795953F +:1004D0008795959587959595879595958795682B9B +:1004E00040E083E091E00E94090740E06FEF83E085 +:1004F00091E00E9409078DE091E00E94B00A90E02F +:10050000BC0162957295707F7627607F76279595FE +:100510008795959587959595879595958795682B5A +:1005200040E083E091E00E94090783E091E00E94AF +:100530009C0708958DE091E00E94B80A90E0BC010C +:1005400062957295707F7627607F7627959587955F +:10055000959587959595879595958795682B40E016 +:1005600083E091E00E9409078DE091E00E94B40AC7 +:1005700090E0BC0162957295707F7627607F762748 +:100580009595879595958795959587959595879553 +:10059000682B40E083E091E00E94090740E06FEFA4 +:1005A00083E091E00E94090783E091E00E949C07AC +:1005B00008950E94360B809302011A9B03C088EEB7 +:1005C00093E003C0813CF9F4FACF1A9949C040C0C6 +:1005D00083B1109201011092000183B18873885F8A +:1005E000893320F485FF03C02D9A02C080E02D9846 +:1005F00084FF02C02C9A01C02C9883FF02C02B9A62 +:1006000008952B980895199B03C088EE93E004C0C9 +:10061000803C09F03FC0F9CF19992CC034C083B198 +:10062000109201011092000183B183B18873885048 +:1006300085FF02C02D9A01C02D9884FF02C02C9A1C +:1006400001C02C9883FF02C02B9A08952B9808951F +:100650008091000190910101892B09F4B9CFB9CFA4 +:10066000EFE9FFE03197F1F700C000000197009734 +:1006700079F3ABCFEFE9FFE03197F1F700C000006D +:100680000197009749F68091000190910101892B13 +:1006900031F2C6CF0895BF92CF92DF92EF92FF92D0 +:1006A0000F931F93CF93DF93189B95C2189BAEC1F6 +:1006B0008FE99FE00197F1F700C000001899F8CF8B +:1006C000A5C10F5F1F4F083C110514F000E010E0BA +:1006D000189B0BC0189B08C0EFE9FFE03197F1F7BA +:1006E00000C000001899F8CF2196C330D10509F455 +:1006F0006CC03CF4C130D10579F0C230D10509F1AC +:1007000077C1C530D10509F4EAC00CF4A5C0C630E4 +:10071000D10509F426C16CC10536110534F060E03D +:1007200082E090E00E94450102C00E9498001A9960 +:1007300002C0199B44C260E08DE091E00E94C80AAB +:100740003EC20536110534F060E081E090E00E9481 +:10075000450102C00E9498001A9B13C08E2D9F2D48 +:100760001A9975C16AC1807F60E1680F02C061E0BB +:10077000680F603608F060E08DE091E00E94CE0ADC +:100780001EC2199B1CC28E2D9F2D199973C169C160 +:1007900082958F70682F70E0615071096295729533 +:1007A000707F7627607F7627696004C0882329F0F0 +:1007B0006FEF680F613618F403C069E501C069E5A1 +:1007C0008DE091E00E94CE0AFAC10536110534F0A1 +:1007D00060E080E090E00E94450102C00E94980025 +:1007E0001A9B17C08E2D9F2D1A9958C14DC1807F1D +:1007F00060E1680F08C0833228F49F5F807F692F13 +:10080000682B01C060E040E08DE091E00E94D40AD6 +:10081000D6C1199BD4C18E2D9F2D199951C148C1A4 +:10082000982F9F7069F482958F7090E00197829560 +:100830009295907F9827807F9827682F696006C0DF +:100840009150807F692F682B01C063E240E08DE00A +:1008500091E00E94D40AB3C140980536110534F0E6 +:100860006D2D80E090E00E94450102C00E94EB00E7 +:100870001A9B15C08E2D9F2D1A9936C12BC1807FD2 +:1008800060E1680F04C09F5F807F692F682B62332F +:1008900008F060E08DE091E00E94E00A90C1199BB1 +:1008A0008EC18E2D9F2D199932C128C182958F70CE +:1008B00090E0019782959295907F9827807F982766 +:1008C000682F696004C09150807F692F682B611187 +:1008D00001C061E38DE091E00E94E00A70C105363D +:1008E000110534F06D2D81E090E00E94450102C0B9 +:1008F0000E94EB001A9B15C08E2D9F2D1A991BC1CB +:1009000010C1807F60E1680F04C09F5F807F692F06 +:10091000682B633108F06D2D8DE091E00E94E60AAE +:100920004EC1199B4CC18E2D9F2D199917C10DC118 +:1009300082958F7090E0019782959295907F98278D +:10094000807F9827682F696004C09150807F692F4D +:10095000682B611101C06C2D8DE091E00E94E60AC8 +:100960002EC10536110534F06D2D82E090E00E9415 +:10097000450102C00E94EB001A9B15C08E2D9F2DD1 +:100980001A99F6C0FFC0807F60E1680F04C09F5FC6 +:10099000807F692F682B6A3908F060E08DE091E074 +:1009A0000E94EC0A0CC1199B0AC18E2D9F2D19992A +:1009B000FCC0F2C08823A1F082958F7090E001976F +:1009C00082959295907F9827807F9827682F6960FD +:1009D0000AC0882339F09150807F692F682B03C0AB +:1009E0006B2D01C06B2D8DE091E00E94EC0AE7C0F9 +:1009F00088B1887F88B98FE99FE00197F1F700C03F +:100A00000000C730D1050CF0E6C05BCEC1E0D0E0FD +:100A100000E010E00F2EF8EEEF2EF02D0F2EF3E099 +:100A2000FF2EF02D0F2EF2E1CF2EF02DDD24D394EA +:100A30000F2EF9E9BF2EF02D4BCE8DE091E00E94F4 +:100A4000B40A982F9F70993009F091CE8CCEEFE9BF +:100A5000FFE03197F1F700C000000197009769F3BC +:100A60007FCE8DE091E00E94B40A982F9F7009F428 +:100A70008FCE9CCEEFE9FFE03197F1F700C0000088 +:100A80000197009771F381CE8DE091E00E94B80A42 +:100A9000982F9F70993009F0AECEA9CEEFE9FFE014 +:100AA0003197F1F700C000000197009769F39CCEE1 +:100AB0008DE091E00E94B80A882309F4C6CEB0CE3A +:100AC000EFE9FFE03197F1F700C0000001970097D0 +:100AD00079F3A3CE8DE091E00E94BC0A982F9F701D +:100AE000993009F0D0CECBCEEFE9FFE03197F1F7A6 +:100AF00000C000000197009769F3BECE8DE091E041 +:100B00000E94BC0A982F9F7009F4D0CEDCCEEFE98A +:100B1000FFE03197F1F700C000000197009771F3F3 +:100B2000C2CE8DE091E00E94C00A982F9F7099304C +:100B300009F0EBCEE6CEEFE9FFE03197F1F700C028 +:100B400000000197009769F3D9CE8DE091E00E94F3 +:100B5000C00A982F9F7009F4EBCEF7CEEFE9FFE0C3 +:100B60003197F1F700C000000197009771F3DDCED7 +:100B7000EFE9FFE03197F1F700C00000019700971F +:100B800009F0FECE8DE091E00E94C40A982F9F707C +:100B9000993009F0FCCEF7CE8DE091E00E94C40AB6 +:100BA000982F9F7009F406CF14CFEFE9FFE031973B +:100BB000F1F700C000000197009771F3F8CE88B1FB +:100BC000887F88B98FE99FE00197F1F700C00000A6 +:100BD0000F5F1F4F78CDDF91CF911F910F91FF9045 +:100BE000EF90DF90CF90BF900895CF92DF92EF9279 +:100BF000FF920F931F93CF93DF93809102018F3C5D +:100C000009F0BDC0B1C00C2D1D2D813C49F50E94DD +:100C1000360B80930201882309F49DC016C00E9400 +:100C2000360B809302010E949800C536D10514F05E +:100C3000CE2DDF2D8FE99FE00197F1F700C0000076 +:100C4000219680910201882351F390E00E94600078 +:100C5000682F8DE091E00E94C80A81EC0E942E0B63 +:100C600080910201823C49F50E94360B809302017B +:100C7000882309F467C016C00E94360B80930201D6 +:100C80000E949800C536D10514F0CE2DDF2D8FE9D6 +:100C90009FE00197F1F700C00000219680910201CA +:100CA000882351F390E00E946000682F8DE091E06E +:100CB0000E94CE0A82EC0E942E0B80910201833C9E +:100CC00049F50E94360B80930201882391F116C0EA +:100CD0000E94360B809302010E949800C536D10510 +:100CE00014F0CE2DDF2D8FE99FE00197F1F700C0C2 +:100CF0000000219680910201882351F390E00E9428 +:100D0000600040E0682F8DE091E00E94D40A83ECFF +:100D10000E942E0B80910201843C89F10F5F1F4FCE +:100D20000E94360B80930201053611050CF06BCF43 +:100D30006CCF0E94360B809302010E949800CC2D4C +:100D4000DD2DD1CF0E94360B809302010E949800C6 +:100D5000CC2DDD2D9CCF0E94360B809302010E948A +:100D60009800CC2DDD2D66CF0E94360B80930201BA +:100D700000E010E0C12CD12CEC2CFD2C46CFDF91F3 +:100D8000CF911F910F91FF90EF90DF90CF9008953A +:100D90000F931F938DE091E00E941E0A0BE210E07A +:100DA00025E030E047E050E066E070E083E091E06D +:100DB0000E94DD061F910F9108950F931F93FC0170 +:100DC000608371834283538324833583178306832F +:100DD000D8011197B187A0875C9181E090E0FC0178 +:100DE00002C0EE0FFF1F2A95E2F79F01252BFC01A1 +:100DF00002C0EE0FFF1F4A95E2F7AF01422B02C07F +:100E0000880F991F6A95E2F7842B8C931F910F919D +:100E100008950F931F93CF93DF93FC0180E090E040 +:100E200021E030E000E810E070E041113DC0A68113 +:100E3000B7815C91E901028002C0CC0FDD1F0A94EA +:100E4000E2F7C095C523CC93DB01082E02C0B5950F +:100E5000A7950A94E2F7A0FF0DC0A681B7815C9127 +:100E6000E901008002C0CC0FDD1F0A94E2F7C52B18 +:100E7000CC930DC0A681B7815C91E901008002C0CE +:100E8000CC0FDD1F0A94E2F7C095C523CC93A68151 +:100E9000B7815C91E901028002C0CC0FDD1F0A948A +:100EA000E2F7C52BCC933EC0A681B7815C91E901E6 +:100EB000028002C0CC0FDD1F0A94E2F7C095C52363 +:100EC000CC93D801082E02C0B595A7950A94E2F7F5 +:100ED000A623B723AB2B69F0A681B7815C91E9010A +:100EE000008002C0CC0FDD1F0A94E2F7C52BCC9323 +:100EF0000DC0A681B7815C91E901008002C0CC0FD2 +:100F0000DD1F0A94E2F7C095C523CC93A681B78173 +:100F10005C91E901028002C0CC0FDD1F0A94E2F768 +:100F2000C52BCC9301968830910509F07ECFDF91D7 +:100F3000CF911F910F910895FC01A681B7814C912B +:100F400021E030E0C901048002C0880F991F0A9493 +:100F5000E2F7842B8C9385E08A95F1F70000A68157 +:100F6000B7814C91C901048002C0880F991F0A946F +:100F7000E2F7809584238C930895CF92DF92EF92CD +:100F8000FF920F931F93CF93DF93EC010E94F20A1D +:100F9000CC80DD80EE80FF808B010C191D091F8B3A +:100FA0000E8B043F114020F4CD28CE28CF2871F5B8 +:100FB0002D981D8A0E94F20A0C811D812E813F818D +:100FC000AB01BC01401B510B620B730B4C835D8367 +:100FD0006E837F830E94F20A688379838A839B836E +:100FE00081E04C815D816E817F81493E5340610586 +:100FF000710508F480E0811103C08885882319F009 +:1010000081E0888705C01A8A198A02C081E08D8B29 +:10101000DF91CF911F910F91FF90EF90DF90CF90D4 +:101020000895FC01238934892115310531F46623A3 +:1010300009F4F4C040E050E03CC0A901C9010197A7 +:10104000439708F4EDC02431310519F46111FCC057 +:10105000E9C0C9014597079718F5662381F0C901D2 +:10106000459741E050E0BA0102C0660F771F8A95AC +:10107000E2F7CB019385892B838781E0E0C0C9012A +:10108000459741E050E0BA0102C0660F771F8A958C +:10109000E2F7CB01809593858923838781E0CFC0D8 +:1010A0002C31310531F4838580FFE0C06111D2C05D +:1010B000BBC0CA014D97069718F5662381F0C90198 +:1010C0004D9741E050E0BA0102C0660F771F8A9544 +:1010D000E2F7CB019485892B848781E0B0C0C901F8 +:1010E0004D9741E050E0BA0102C0660F771F8A9524 +:1010F000E2F7CB01809594858923848781E09FC0A6 +:101100002332310581F4848580FF09C061110BC051 +:101110008DC02332310539F4848580FD04C06623F7 +:1011200009F49EC085C0CA018497069718F5662306 +:1011300081F0C901849741E050E0BA0102C0660F16 +:10114000771F8A95E2F7CB019585892B858781E00A +:1011500076C0C901849741E050E0BA0102C0660F31 +:10116000771F8A95E2F7CB0180959585892385873E +:1011700081E065C0CA018A978330910508F45AC09E +:101180000397059718F5662381F0C9018D9741E013 +:1011900050E0BA0102C0660F771F8A95E2F7CB01D3 +:1011A0009785892B878781E04AC0C9018D9741E0E7 +:1011B00050E0BA0102C0660F771F8A95E2F7CB01B3 +:1011C000809597858923878781E039C042535109EB +:1011D0004830510588F5662381F0C901C29741E086 +:1011E00050E0BA0102C0660F771F8A95E2F7CB0183 +:1011F0009089892B808B81E022C0C901C29741E090 +:1012000050E0BA0102C0660F771F8A95E2F7CB0162 +:10121000809590898923808B81E011C080E00FC088 +:1012200081E00DC080E00BC080E009C080E007C015 +:1012300080E005C081E003C081E001C080E02F5F55 +:101240003F4F348B238B0895C9014597079708F4C6 +:1012500006CF0FC0C9014D97069708F42ECF59CF7E +:10126000CA018497069708F474CF84CF662391F35C +:10127000E5CFC9014D97069708F41FCF54CF8F9241 +:101280009F92AF92BF92FF920F931F93CF93DF93E2 +:10129000EC010E94F20A88809980AA80BB808B01B1 +:1012A000081919091F8B0E8B0431110528F48928A0 +:1012B0008A288B2809F056C02D9A1D8A0E94F20AAE +:1012C0006C837D838E839F830E94F20A088119813B +:1012D0002A813B81AB01BC01401B510B620B730B9C +:1012E000488359836A837B838885882379F189853C +:1012F0009A85CB977CF581E090E09A8B898BDB0116 +:10130000CA0180559109A109B1098997A105B105C3 +:1013100050F0445B51096109710949325105610579 +:10132000710518F004C0F12C02C0FF24F3946F2D56 +:10133000CE010E941108882319F01A861986188692 +:1013400089859A8501969A8789870EC089859A85AD +:10135000CB9754F018861A86198682E090E09A8B13 +:10136000898B02C081E08D8BDF91CF911F910F910E +:10137000FF90BF90AF909F908F9008951F920F9213 +:101380000FB60F9211242F933F934F935F936F9358 +:101390007F938F939F93AF93BF93EF93FF93F894B3 +:1013A0004A9B05C08FE091E00E943F0904C08FE096 +:1013B00091E00E94BD077894FF91EF91BF91AF91AA +:1013C0009F918F917F916F915F914F913F912F915D +:1013D0000F900FBE0F901F90189510920F01109252 +:1013E000100110921101109212011092130110922B +:1013F000140110921501109216011092170110920B +:1014000019011092180110921A0110921B011092EA +:101410001C0110921D0110921E0110921F011092CA +:1014200021011092200110922301109222011092AA +:10143000240110922601109225010895FC011182C9 +:1014400008958CE58093B800E9EBF0E080818C7F13 +:101450008083ECEBF0E084E0808384EA8083808109 +:101460008823ECF780ED8093BB0084E88093BC0078 +:10147000ECEBF0E080818823ECF76093BB0084E81C +:101480008093BC00ECEBF0E080818823ECF7409384 +:10149000BB0084E88093BC00ECEBF0E08081882303 +:1014A000ECF784E98093BC00ECEBF0E0808184FDF4 +:1014B000FDCFECEBF0E080818B7F808308958CE59D +:1014C0008093B800E9EBF0E080818C7F8083ECEBC7 +:1014D000F0E084E0808384EA808380818823ECF7D5 +:1014E00080ED8093BB0084E88093BC00ECEBF0E0DF +:1014F00080818823ECF76093BB0084E88093BC0074 +:10150000ECEBF0E080818823ECF784EA8093BC0068 +:10151000ECEBF0E080818823ECF781ED8093BB0059 +:1015200084E88093BC00ECEBF0E080818823ECF74A +:1015300084E88093BC00ECEBF0E080818823ECF73A +:101540008091BB0094E99093BC00ECEBF0E09081BB +:1015500094FDFDCFECEBF0E090819B7F90830895AC +:1015600060E00E945F0A089561E00E945F0A0895AA +:1015700062E00E945F0A089564E00E945F0A089595 +:1015800065E00E945F0A089566E00E945F0A089580 +:10159000462F60E070E00E94210A0895462F61E026 +:1015A00070E00E94210A0895442319F0462F4064F8 +:1015B00002C0462F4F7B62E070E00E94210A08952E +:1015C000462F64E070E00E94210A0895462F65E0EE +:1015D00070E00E94210A0895462F66E070E00E94A4 +:1015E000210A0895F8946091270170912801809153 +:1015F000290190912A01789408951F920F920FB6B5 +:101600000F9211248F939F93AF93BF9380912701E3 +:1016100090912801A0912901B0912A010196A11D64 +:10162000B11D8093270190932801A0932901B093C5 +:101630002A01BF91AF919F918F910F900FBE0F9094 +:101640001F9018951092C50087E68093C40088E12A +:101650008093C10086E08093C2000895E0ECF0E042 +:10166000908195FFFDCF8093C60008958091C000C2 +:1016700088231CF48091C600089580E008950E949C +:1016800077000E943E010E944B030E94D9020E94F3 +:10169000F505F7CFEE0FFF1F0590F491E02D0994AB +:0416A000F894FFCFEC +:00000001FF diff --git a/Debug/Nixie clock.lss b/Debug/Nixie clock.lss new file mode 100644 index 0000000..522f79b --- /dev/null +++ b/Debug/Nixie clock.lss @@ -0,0 +1,4291 @@ + +Nixie clock.elf: file format elf32-avr + +Sections: +Idx Name Size VMA LMA File off Algn + 0 .data 00000000 00800100 000016a4 00001738 2**0 + CONTENTS, ALLOC, LOAD, DATA + 1 .text 000016a4 00000000 00000000 00000094 2**1 + CONTENTS, ALLOC, LOAD, READONLY, CODE + 2 .bss 0000002b 00800100 00800100 00001738 2**0 + ALLOC + 3 .comment 0000005c 00000000 00000000 00001738 2**0 + CONTENTS, READONLY + 4 .debug_aranges 000002a0 00000000 00000000 00001794 2**0 + CONTENTS, READONLY, DEBUGGING + 5 .debug_info 0000391a 00000000 00000000 00001a34 2**0 + CONTENTS, READONLY, DEBUGGING + 6 .debug_abbrev 00000e5f 00000000 00000000 0000534e 2**0 + CONTENTS, READONLY, DEBUGGING + 7 .debug_line 0000101d 00000000 00000000 000061ad 2**0 + CONTENTS, READONLY, DEBUGGING + 8 .debug_frame 00000648 00000000 00000000 000071cc 2**2 + CONTENTS, READONLY, DEBUGGING + 9 .debug_str 00000b41 00000000 00000000 00007814 2**0 + CONTENTS, READONLY, DEBUGGING + 10 .debug_loc 000023d5 00000000 00000000 00008355 2**0 + CONTENTS, READONLY, DEBUGGING + 11 .debug_ranges 000004c8 00000000 00000000 0000a72a 2**0 + CONTENTS, READONLY, DEBUGGING + +Disassembly of section .text: + +00000000 <__vectors>: + + uint8_t PCF8574::send(uint8_t data, uint8_t read) + { + uint8_t read_data; + //SCK Config (27.77Khz) + TWBR = 0x0A; //Bit rate division à 10 + 0: 0c 94 36 00 jmp 0x6c ; 0x6c <__ctors_end> + 4: 0c 94 be 09 jmp 0x137c ; 0x137c <__vector_1> + TWSR = (TWSR & ~((1< + c: 0c 94 5e 00 jmp 0xbc ; 0xbc <__bad_interrupt> + + //I2C Init + TWCR = (1< + 14: 0c 94 5e 00 jmp 0xbc ; 0xbc <__bad_interrupt> + TWCR = (1< + while(!(TWCR&(1< + ; + + //DS1307 adresse write + TWDR = adresse_DS1307|read ; //Inscrit l'adresse, Mode + 20: 0c 94 5e 00 jmp 0xbc ; 0xbc <__bad_interrupt> + 24: 0c 94 5e 00 jmp 0xbc ; 0xbc <__bad_interrupt> + TWCR = (1< + 2c: 0c 94 fd 0a jmp 0x15fa ; 0x15fa <__vector_11> + while(!(TWCR&(1< + 34: 0c 94 5e 00 jmp 0xbc ; 0xbc <__bad_interrupt> + ; + + + //Data send + if(!read) //Si écriture + 38: 0c 94 5e 00 jmp 0xbc ; 0xbc <__bad_interrupt> + TWDR = data; //Inscrit les donnée + 3c: 0c 94 5e 00 jmp 0xbc ; 0xbc <__bad_interrupt> + TWCR = (1< + 44: 0c 94 5e 00 jmp 0xbc ; 0xbc <__bad_interrupt> + while(!(TWCR&(1< + 4c: 0c 94 5e 00 jmp 0xbc ; 0xbc <__bad_interrupt> + ; + if(read) //Si lecture + 50: 0c 94 5e 00 jmp 0xbc ; 0xbc <__bad_interrupt> + read_data = TWDR; + 54: 0c 94 5e 00 jmp 0xbc ; 0xbc <__bad_interrupt> + + //Stop condition + TWCR = (1< + while((TWCR&(1< + 60: 0c 94 5e 00 jmp 0xbc ; 0xbc <__bad_interrupt> + 64: 0c 94 5e 00 jmp 0xbc ; 0xbc <__bad_interrupt> + +00000068 <__ctors_start>: + #else + //round up by default + __ticks_dc = (uint32_t)(ceil(fabs(__tmp))); + #endif + + __builtin_avr_delay_cycles(__ticks_dc); + 68: c8 06 cpc r12, r24 + 6a: ed 09 sbc r30, r13 + +0000006c <__ctors_end>: + 6c: 11 24 eor r1, r1 + 6e: 1f be out 0x3f, r1 ; 63 + 70: cf ef ldi r28, 0xFF ; 255 + ; + + _delay_ms(1); + TWCR &= (~(1<: + 78: 11 e0 ldi r17, 0x01 ; 1 + 7a: a0 e0 ldi r26, 0x00 ; 0 + if(read) + 7c: b1 e0 ldi r27, 0x01 ; 1 + 7e: e4 ea ldi r30, 0xA4 ; 164 + return read_data; + 80: f6 e1 ldi r31, 0x16 ; 22 + 82: 02 c0 rjmp .+4 ; 0x88 <__do_copy_data+0x10> + } + 84: 05 90 lpm r0, Z+ + 86: 0d 92 st X+, r0 + 88: a0 30 cpi r26, 0x00 ; 0 + 8a: b1 07 cpc r27, r17 + 8c: d9 f7 brne .-10 ; 0x84 <__do_copy_data+0xc> + +0000008e <__do_clear_bss>: + 8e: 21 e0 ldi r18, 0x01 ; 1 + 90: a0 e0 ldi r26, 0x00 ; 0 + 92: b1 e0 ldi r27, 0x01 ; 1 + 94: 01 c0 rjmp .+2 ; 0x98 <.do_clear_bss_start> + +00000096 <.do_clear_bss_loop>: + 96: 1d 92 st X+, r1 + +00000098 <.do_clear_bss_start>: + 98: ab 32 cpi r26, 0x2B ; 43 + 9a: b2 07 cpc r27, r18 + 9c: e1 f7 brne .-8 ; 0x96 <.do_clear_bss_loop> + +0000009e <__do_global_ctors>: + 9e: 10 e0 ldi r17, 0x00 ; 0 + a0: cc e6 ldi r28, 0x6C ; 108 + a2: d0 e0 ldi r29, 0x00 ; 0 + a4: 04 c0 rjmp .+8 ; 0xae <__do_global_ctors+0x10> + a6: 22 97 sbiw r28, 0x02 ; 2 + a8: fe 01 movw r30, r28 + aa: 0e 94 4c 0b call 0x1698 ; 0x1698 <__tablejump__> + ae: c8 36 cpi r28, 0x68 ; 104 + b0: d1 07 cpc r29, r17 + b2: c9 f7 brne .-14 ; 0xa6 <__do_global_ctors+0x8> + b4: 0e 94 3f 0b call 0x167e ; 0x167e
+ b8: 0c 94 50 0b jmp 0x16a0 ; 0x16a0 <_exit> + +000000bc <__bad_interrupt>: + bc: 0c 94 00 00 jmp 0 ; 0x0 <__vectors> + +000000c0 <_Z10int_to_bcdi>: + TIMSK0 = _BV(OCIE0A); //Enable interupt +} +int int_to_bcd(int val) +{ + int high = 0; + while (val >= 10) // Count tens + c0: 8a 30 cpi r24, 0x0A ; 10 + c2: 91 05 cpc r25, r1 + c4: 4c f0 brlt .+18 ; 0xd8 <_Z10int_to_bcdi+0x18> + OCR0A = 0x01; + TIMSK0 = _BV(OCIE0A); //Enable interupt +} +int int_to_bcd(int val) +{ + int high = 0; + c6: 20 e0 ldi r18, 0x00 ; 0 + c8: 30 e0 ldi r19, 0x00 ; 0 + while (val >= 10) // Count tens + { + high++; + ca: 2f 5f subi r18, 0xFF ; 255 + cc: 3f 4f sbci r19, 0xFF ; 255 + val -= 10; + ce: 0a 97 sbiw r24, 0x0a ; 10 + TIMSK0 = _BV(OCIE0A); //Enable interupt +} +int int_to_bcd(int val) +{ + int high = 0; + while (val >= 10) // Count tens + d0: 8a 30 cpi r24, 0x0A ; 10 + d2: 91 05 cpc r25, r1 + d4: d4 f7 brge .-12 ; 0xca <_Z10int_to_bcdi+0xa> + d6: 02 c0 rjmp .+4 ; 0xdc <_Z10int_to_bcdi+0x1c> + OCR0A = 0x01; + TIMSK0 = _BV(OCIE0A); //Enable interupt +} +int int_to_bcd(int val) +{ + int high = 0; + d8: 20 e0 ldi r18, 0x00 ; 0 + da: 30 e0 ldi r19, 0x00 ; 0 + { + high++; + val -= 10; + } + + return (high << 4) | val; + dc: 22 95 swap r18 + de: 32 95 swap r19 + e0: 30 7f andi r19, 0xF0 ; 240 + e2: 32 27 eor r19, r18 + e4: 20 7f andi r18, 0xF0 ; 240 + e6: 32 27 eor r19, r18 +} + e8: 82 2b or r24, r18 + ea: 93 2b or r25, r19 + ec: 08 95 ret + +000000ee <_Z10setup_pinsv>: +void setup_pins() +{ + USART_ini(); + ee: 0e 94 22 0b call 0x1644 ; 0x1644 <_Z9USART_iniv> + DDRD &= LOW(1< + 120: 80 38 cpi r24, 0x80 ; 128 + 122: 29 f4 brne .+10 ; 0x12e <_Z10setup_pinsv+0x40> + rtc.w_seconde(0x00); + 124: 60 e0 ldi r22, 0x00 ; 0 + 126: 8d e0 ldi r24, 0x0D ; 13 + 128: 91 e0 ldi r25, 0x01 ; 1 + 12a: 0e 94 c8 0a call 0x1590 ; 0x1590 <_ZN6ds13079w_secondeEh> + 12e: 08 95 ret + +00000130 <_Z14affichage_heurv>: +} +void affichage_heur() +{ + uint8_t envoi = rtc.r_heur(); + 130: 8d e0 ldi r24, 0x0D ; 13 + 132: 91 e0 ldi r25, 0x01 ; 1 + 134: 0e 94 b8 0a call 0x1570 ; 0x1570 <_ZN6ds13076r_heurEv> + envoi = (envoi>>4)|((envoi&0x0f)<<4); + 138: 90 e0 ldi r25, 0x00 ; 0 + 13a: bc 01 movw r22, r24 + 13c: 62 95 swap r22 + 13e: 72 95 swap r23 + 140: 70 7f andi r23, 0xF0 ; 240 + 142: 76 27 eor r23, r22 + 144: 60 7f andi r22, 0xF0 ; 240 + 146: 76 27 eor r23, r22 + 148: 95 95 asr r25 + 14a: 87 95 ror r24 + 14c: 95 95 asr r25 + 14e: 87 95 ror r24 + 150: 95 95 asr r25 + 152: 87 95 ror r24 + 154: 95 95 asr r25 + 156: 87 95 ror r24 + 158: 68 2b or r22, r24 + shiftRegister.send(envoi, 0); + 15a: 40 e0 ldi r20, 0x00 ; 0 + 15c: 83 e0 ldi r24, 0x03 ; 3 + 15e: 91 e0 ldi r25, 0x01 ; 1 + 160: 0e 94 09 07 call 0xe12 ; 0xe12 <_ZN7hc745954sendEhb> + envoi = rtc.r_minute(); + 164: 8d e0 ldi r24, 0x0D ; 13 + 166: 91 e0 ldi r25, 0x01 ; 1 + 168: 0e 94 b4 0a call 0x1568 ; 0x1568 <_ZN6ds13078r_minuteEv> + envoi = (envoi>>4)|((envoi&0x0f)<<4); + 16c: 90 e0 ldi r25, 0x00 ; 0 + 16e: bc 01 movw r22, r24 + 170: 62 95 swap r22 + 172: 72 95 swap r23 + 174: 70 7f andi r23, 0xF0 ; 240 + 176: 76 27 eor r23, r22 + 178: 60 7f andi r22, 0xF0 ; 240 + 17a: 76 27 eor r23, r22 + 17c: 95 95 asr r25 + 17e: 87 95 ror r24 + 180: 95 95 asr r25 + 182: 87 95 ror r24 + 184: 95 95 asr r25 + 186: 87 95 ror r24 + 188: 95 95 asr r25 + 18a: 87 95 ror r24 + 18c: 68 2b or r22, r24 + shiftRegister.send(envoi, 0); + 18e: 40 e0 ldi r20, 0x00 ; 0 + 190: 83 e0 ldi r24, 0x03 ; 3 + 192: 91 e0 ldi r25, 0x01 ; 1 + 194: 0e 94 09 07 call 0xe12 ; 0xe12 <_ZN7hc745954sendEhb> + envoi = rtc.r_seconde(); + 198: 8d e0 ldi r24, 0x0D ; 13 + 19a: 91 e0 ldi r25, 0x01 ; 1 + 19c: 0e 94 b0 0a call 0x1560 ; 0x1560 <_ZN6ds13079r_secondeEv> + envoi = (envoi>>4)|((envoi&0x0f)<<4); + 1a0: 90 e0 ldi r25, 0x00 ; 0 + 1a2: bc 01 movw r22, r24 + 1a4: 62 95 swap r22 + 1a6: 72 95 swap r23 + 1a8: 70 7f andi r23, 0xF0 ; 240 + 1aa: 76 27 eor r23, r22 + 1ac: 60 7f andi r22, 0xF0 ; 240 + 1ae: 76 27 eor r23, r22 + 1b0: 95 95 asr r25 + 1b2: 87 95 ror r24 + 1b4: 95 95 asr r25 + 1b6: 87 95 ror r24 + 1b8: 95 95 asr r25 + 1ba: 87 95 ror r24 + 1bc: 95 95 asr r25 + 1be: 87 95 ror r24 + 1c0: 68 2b or r22, r24 + shiftRegister.send(envoi, 0); + 1c2: 40 e0 ldi r20, 0x00 ; 0 + 1c4: 83 e0 ldi r24, 0x03 ; 3 + 1c6: 91 e0 ldi r25, 0x01 ; 1 + 1c8: 0e 94 09 07 call 0xe12 ; 0xe12 <_ZN7hc745954sendEhb> + shiftRegister.confirm(); + 1cc: 83 e0 ldi r24, 0x03 ; 3 + 1ce: 91 e0 ldi r25, 0x01 ; 1 + 1d0: 0e 94 9c 07 call 0xf38 ; 0xf38 <_ZN7hc745957confirmEv> + 1d4: 08 95 ret + +000001d6 <_Z14affichage_datev>: +} +void affichage_date() +{ + uint8_t envoi = rtc.r_jour(); + 1d6: 8d e0 ldi r24, 0x0D ; 13 + 1d8: 91 e0 ldi r25, 0x01 ; 1 + 1da: 0e 94 bc 0a call 0x1578 ; 0x1578 <_ZN6ds13076r_jourEv> + envoi = (envoi>>4)|((envoi&0x0f)<<4); + 1de: 90 e0 ldi r25, 0x00 ; 0 + 1e0: bc 01 movw r22, r24 + 1e2: 62 95 swap r22 + 1e4: 72 95 swap r23 + 1e6: 70 7f andi r23, 0xF0 ; 240 + 1e8: 76 27 eor r23, r22 + 1ea: 60 7f andi r22, 0xF0 ; 240 + 1ec: 76 27 eor r23, r22 + 1ee: 95 95 asr r25 + 1f0: 87 95 ror r24 + 1f2: 95 95 asr r25 + 1f4: 87 95 ror r24 + 1f6: 95 95 asr r25 + 1f8: 87 95 ror r24 + 1fa: 95 95 asr r25 + 1fc: 87 95 ror r24 + 1fe: 68 2b or r22, r24 + shiftRegister.send(envoi, false); + 200: 40 e0 ldi r20, 0x00 ; 0 + 202: 83 e0 ldi r24, 0x03 ; 3 + 204: 91 e0 ldi r25, 0x01 ; 1 + 206: 0e 94 09 07 call 0xe12 ; 0xe12 <_ZN7hc745954sendEhb> + envoi = rtc.r_moi(); + 20a: 8d e0 ldi r24, 0x0D ; 13 + 20c: 91 e0 ldi r25, 0x01 ; 1 + 20e: 0e 94 c0 0a call 0x1580 ; 0x1580 <_ZN6ds13075r_moiEv> + envoi = (envoi>>4)|((envoi&0x0f)<<4); + 212: 90 e0 ldi r25, 0x00 ; 0 + 214: bc 01 movw r22, r24 + 216: 62 95 swap r22 + 218: 72 95 swap r23 + 21a: 70 7f andi r23, 0xF0 ; 240 + 21c: 76 27 eor r23, r22 + 21e: 60 7f andi r22, 0xF0 ; 240 + 220: 76 27 eor r23, r22 + 222: 95 95 asr r25 + 224: 87 95 ror r24 + 226: 95 95 asr r25 + 228: 87 95 ror r24 + 22a: 95 95 asr r25 + 22c: 87 95 ror r24 + 22e: 95 95 asr r25 + 230: 87 95 ror r24 + 232: 68 2b or r22, r24 + shiftRegister.send(envoi, false); + 234: 40 e0 ldi r20, 0x00 ; 0 + 236: 83 e0 ldi r24, 0x03 ; 3 + 238: 91 e0 ldi r25, 0x01 ; 1 + 23a: 0e 94 09 07 call 0xe12 ; 0xe12 <_ZN7hc745954sendEhb> + envoi = rtc.r_year(); + 23e: 8d e0 ldi r24, 0x0D ; 13 + 240: 91 e0 ldi r25, 0x01 ; 1 + 242: 0e 94 c4 0a call 0x1588 ; 0x1588 <_ZN6ds13076r_yearEv> + envoi = (envoi>>4)|((envoi&0x0f)<<4); + 246: 90 e0 ldi r25, 0x00 ; 0 + 248: bc 01 movw r22, r24 + 24a: 62 95 swap r22 + 24c: 72 95 swap r23 + 24e: 70 7f andi r23, 0xF0 ; 240 + 250: 76 27 eor r23, r22 + 252: 60 7f andi r22, 0xF0 ; 240 + 254: 76 27 eor r23, r22 + 256: 95 95 asr r25 + 258: 87 95 ror r24 + 25a: 95 95 asr r25 + 25c: 87 95 ror r24 + 25e: 95 95 asr r25 + 260: 87 95 ror r24 + 262: 95 95 asr r25 + 264: 87 95 ror r24 + 266: 68 2b or r22, r24 + shiftRegister.send(envoi, false); + 268: 40 e0 ldi r20, 0x00 ; 0 + 26a: 83 e0 ldi r24, 0x03 ; 3 + 26c: 91 e0 ldi r25, 0x01 ; 1 + 26e: 0e 94 09 07 call 0xe12 ; 0xe12 <_ZN7hc745954sendEhb> + shiftRegister.confirm(); + 272: 83 e0 ldi r24, 0x03 ; 3 + 274: 91 e0 ldi r25, 0x01 ; 1 + 276: 0e 94 9c 07 call 0xf38 ; 0xf38 <_ZN7hc745957confirmEv> + 27a: 08 95 ret + +0000027c <_Z17routine_affichagev>: + shiftRegister.send(0xFF, false); + shiftRegister.confirm(); +} +void routine_affichage() +{ + uint8_t secondes_var = rtc.r_seconde(); + 27c: 8d e0 ldi r24, 0x0D ; 13 + 27e: 91 e0 ldi r25, 0x01 ; 1 + 280: 0e 94 b0 0a call 0x1560 ; 0x1560 <_ZN6ds13079r_secondeEv> + if(secondes_var >= 0x20 && secondes_var <= 0x30 && 1==2) //Affiche la date pandant 10 seconde + affichage_date(); + else + affichage_heur(); + 284: 0e 94 98 00 call 0x130 ; 0x130 <_Z14affichage_heurv> + 288: 08 95 ret + +0000028a <_Z12clignotementib>: +} +void clignotement(int n, bool date) +{ + n++; + 28a: 01 96 adiw r24, 0x01 ; 1 + uint8_t envoi; + if(date) + 28c: 66 23 and r22, r22 + 28e: 09 f4 brne .+2 ; 0x292 <_Z12clignotementib+0x8> + 290: c8 c0 rjmp .+400 ; 0x422 <_Z12clignotementib+0x198> + { + switch(n) + 292: 82 30 cpi r24, 0x02 ; 2 + 294: 91 05 cpc r25, r1 + 296: 09 f4 brne .+2 ; 0x29a <_Z12clignotementib+0x10> + 298: 46 c0 rjmp .+140 ; 0x326 <_Z12clignotementib+0x9c> + 29a: 83 30 cpi r24, 0x03 ; 3 + 29c: 91 05 cpc r25, r1 + 29e: 09 f4 brne .+2 ; 0x2a2 <_Z12clignotementib+0x18> + 2a0: 81 c0 rjmp .+258 ; 0x3a4 <_Z12clignotementib+0x11a> + 2a2: 01 97 sbiw r24, 0x01 ; 1 + 2a4: 09 f0 breq .+2 ; 0x2a8 <_Z12clignotementib+0x1e> + 2a6: 84 c1 rjmp .+776 ; 0x5b0 <_Z12clignotementib+0x326> + { + case 1: + envoi = 0xff; + shiftRegister.send(envoi, false); + 2a8: 40 e0 ldi r20, 0x00 ; 0 + 2aa: 6f ef ldi r22, 0xFF ; 255 + 2ac: 83 e0 ldi r24, 0x03 ; 3 + 2ae: 91 e0 ldi r25, 0x01 ; 1 + 2b0: 0e 94 09 07 call 0xe12 ; 0xe12 <_ZN7hc745954sendEhb> + envoi = rtc.r_moi(); + 2b4: 8d e0 ldi r24, 0x0D ; 13 + 2b6: 91 e0 ldi r25, 0x01 ; 1 + 2b8: 0e 94 c0 0a call 0x1580 ; 0x1580 <_ZN6ds13075r_moiEv> + envoi = (envoi>>4)|((envoi&0x0f)<<4); + 2bc: 90 e0 ldi r25, 0x00 ; 0 + 2be: bc 01 movw r22, r24 + 2c0: 62 95 swap r22 + 2c2: 72 95 swap r23 + 2c4: 70 7f andi r23, 0xF0 ; 240 + 2c6: 76 27 eor r23, r22 + 2c8: 60 7f andi r22, 0xF0 ; 240 + 2ca: 76 27 eor r23, r22 + 2cc: 95 95 asr r25 + 2ce: 87 95 ror r24 + 2d0: 95 95 asr r25 + 2d2: 87 95 ror r24 + 2d4: 95 95 asr r25 + 2d6: 87 95 ror r24 + 2d8: 95 95 asr r25 + 2da: 87 95 ror r24 + 2dc: 68 2b or r22, r24 + shiftRegister.send(envoi, false); + 2de: 40 e0 ldi r20, 0x00 ; 0 + 2e0: 83 e0 ldi r24, 0x03 ; 3 + 2e2: 91 e0 ldi r25, 0x01 ; 1 + 2e4: 0e 94 09 07 call 0xe12 ; 0xe12 <_ZN7hc745954sendEhb> + envoi = rtc.r_year(); + 2e8: 8d e0 ldi r24, 0x0D ; 13 + 2ea: 91 e0 ldi r25, 0x01 ; 1 + 2ec: 0e 94 c4 0a call 0x1588 ; 0x1588 <_ZN6ds13076r_yearEv> + envoi = (envoi>>4)|((envoi&0x0f)<<4); + 2f0: 90 e0 ldi r25, 0x00 ; 0 + 2f2: bc 01 movw r22, r24 + 2f4: 62 95 swap r22 + 2f6: 72 95 swap r23 + 2f8: 70 7f andi r23, 0xF0 ; 240 + 2fa: 76 27 eor r23, r22 + 2fc: 60 7f andi r22, 0xF0 ; 240 + 2fe: 76 27 eor r23, r22 + 300: 95 95 asr r25 + 302: 87 95 ror r24 + 304: 95 95 asr r25 + 306: 87 95 ror r24 + 308: 95 95 asr r25 + 30a: 87 95 ror r24 + 30c: 95 95 asr r25 + 30e: 87 95 ror r24 + 310: 68 2b or r22, r24 + shiftRegister.send(envoi, false); + 312: 40 e0 ldi r20, 0x00 ; 0 + 314: 83 e0 ldi r24, 0x03 ; 3 + 316: 91 e0 ldi r25, 0x01 ; 1 + 318: 0e 94 09 07 call 0xe12 ; 0xe12 <_ZN7hc745954sendEhb> + shiftRegister.confirm(); + 31c: 83 e0 ldi r24, 0x03 ; 3 + 31e: 91 e0 ldi r25, 0x01 ; 1 + 320: 0e 94 9c 07 call 0xf38 ; 0xf38 <_ZN7hc745957confirmEv> + break; + 324: 08 95 ret + case 2: + envoi = rtc.r_jour(); + 326: 8d e0 ldi r24, 0x0D ; 13 + 328: 91 e0 ldi r25, 0x01 ; 1 + 32a: 0e 94 bc 0a call 0x1578 ; 0x1578 <_ZN6ds13076r_jourEv> + envoi = (envoi>>4)|((envoi&0x0f)<<4); + 32e: 90 e0 ldi r25, 0x00 ; 0 + 330: bc 01 movw r22, r24 + 332: 62 95 swap r22 + 334: 72 95 swap r23 + 336: 70 7f andi r23, 0xF0 ; 240 + 338: 76 27 eor r23, r22 + 33a: 60 7f andi r22, 0xF0 ; 240 + 33c: 76 27 eor r23, r22 + 33e: 95 95 asr r25 + 340: 87 95 ror r24 + 342: 95 95 asr r25 + 344: 87 95 ror r24 + 346: 95 95 asr r25 + 348: 87 95 ror r24 + 34a: 95 95 asr r25 + 34c: 87 95 ror r24 + 34e: 68 2b or r22, r24 + shiftRegister.send(envoi, false); + 350: 40 e0 ldi r20, 0x00 ; 0 + 352: 83 e0 ldi r24, 0x03 ; 3 + 354: 91 e0 ldi r25, 0x01 ; 1 + 356: 0e 94 09 07 call 0xe12 ; 0xe12 <_ZN7hc745954sendEhb> + envoi = 0xff; + shiftRegister.send(envoi, false); + 35a: 40 e0 ldi r20, 0x00 ; 0 + 35c: 6f ef ldi r22, 0xFF ; 255 + 35e: 83 e0 ldi r24, 0x03 ; 3 + 360: 91 e0 ldi r25, 0x01 ; 1 + 362: 0e 94 09 07 call 0xe12 ; 0xe12 <_ZN7hc745954sendEhb> + envoi = rtc.r_year(); + 366: 8d e0 ldi r24, 0x0D ; 13 + 368: 91 e0 ldi r25, 0x01 ; 1 + 36a: 0e 94 c4 0a call 0x1588 ; 0x1588 <_ZN6ds13076r_yearEv> + envoi = (envoi>>4)|((envoi&0x0f)<<4); + 36e: 90 e0 ldi r25, 0x00 ; 0 + 370: bc 01 movw r22, r24 + 372: 62 95 swap r22 + 374: 72 95 swap r23 + 376: 70 7f andi r23, 0xF0 ; 240 + 378: 76 27 eor r23, r22 + 37a: 60 7f andi r22, 0xF0 ; 240 + 37c: 76 27 eor r23, r22 + 37e: 95 95 asr r25 + 380: 87 95 ror r24 + 382: 95 95 asr r25 + 384: 87 95 ror r24 + 386: 95 95 asr r25 + 388: 87 95 ror r24 + 38a: 95 95 asr r25 + 38c: 87 95 ror r24 + 38e: 68 2b or r22, r24 + shiftRegister.send(envoi, false); + 390: 40 e0 ldi r20, 0x00 ; 0 + 392: 83 e0 ldi r24, 0x03 ; 3 + 394: 91 e0 ldi r25, 0x01 ; 1 + 396: 0e 94 09 07 call 0xe12 ; 0xe12 <_ZN7hc745954sendEhb> + shiftRegister.confirm(); + 39a: 83 e0 ldi r24, 0x03 ; 3 + 39c: 91 e0 ldi r25, 0x01 ; 1 + 39e: 0e 94 9c 07 call 0xf38 ; 0xf38 <_ZN7hc745957confirmEv> + break; + 3a2: 08 95 ret + case 3: + envoi = rtc.r_jour(); + 3a4: 8d e0 ldi r24, 0x0D ; 13 + 3a6: 91 e0 ldi r25, 0x01 ; 1 + 3a8: 0e 94 bc 0a call 0x1578 ; 0x1578 <_ZN6ds13076r_jourEv> + envoi = (envoi>>4)|((envoi&0x0f)<<4); + 3ac: 90 e0 ldi r25, 0x00 ; 0 + 3ae: bc 01 movw r22, r24 + 3b0: 62 95 swap r22 + 3b2: 72 95 swap r23 + 3b4: 70 7f andi r23, 0xF0 ; 240 + 3b6: 76 27 eor r23, r22 + 3b8: 60 7f andi r22, 0xF0 ; 240 + 3ba: 76 27 eor r23, r22 + 3bc: 95 95 asr r25 + 3be: 87 95 ror r24 + 3c0: 95 95 asr r25 + 3c2: 87 95 ror r24 + 3c4: 95 95 asr r25 + 3c6: 87 95 ror r24 + 3c8: 95 95 asr r25 + 3ca: 87 95 ror r24 + 3cc: 68 2b or r22, r24 + shiftRegister.send(envoi, false); + 3ce: 40 e0 ldi r20, 0x00 ; 0 + 3d0: 83 e0 ldi r24, 0x03 ; 3 + 3d2: 91 e0 ldi r25, 0x01 ; 1 + 3d4: 0e 94 09 07 call 0xe12 ; 0xe12 <_ZN7hc745954sendEhb> + envoi = rtc.r_moi(); + 3d8: 8d e0 ldi r24, 0x0D ; 13 + 3da: 91 e0 ldi r25, 0x01 ; 1 + 3dc: 0e 94 c0 0a call 0x1580 ; 0x1580 <_ZN6ds13075r_moiEv> + envoi = (envoi>>4)|((envoi&0x0f)<<4); + 3e0: 90 e0 ldi r25, 0x00 ; 0 + 3e2: bc 01 movw r22, r24 + 3e4: 62 95 swap r22 + 3e6: 72 95 swap r23 + 3e8: 70 7f andi r23, 0xF0 ; 240 + 3ea: 76 27 eor r23, r22 + 3ec: 60 7f andi r22, 0xF0 ; 240 + 3ee: 76 27 eor r23, r22 + 3f0: 95 95 asr r25 + 3f2: 87 95 ror r24 + 3f4: 95 95 asr r25 + 3f6: 87 95 ror r24 + 3f8: 95 95 asr r25 + 3fa: 87 95 ror r24 + 3fc: 95 95 asr r25 + 3fe: 87 95 ror r24 + 400: 68 2b or r22, r24 + shiftRegister.send(envoi, false); + 402: 40 e0 ldi r20, 0x00 ; 0 + 404: 83 e0 ldi r24, 0x03 ; 3 + 406: 91 e0 ldi r25, 0x01 ; 1 + 408: 0e 94 09 07 call 0xe12 ; 0xe12 <_ZN7hc745954sendEhb> + envoi = 0xff; + shiftRegister.send(envoi, false); + 40c: 40 e0 ldi r20, 0x00 ; 0 + 40e: 6f ef ldi r22, 0xFF ; 255 + 410: 83 e0 ldi r24, 0x03 ; 3 + 412: 91 e0 ldi r25, 0x01 ; 1 + 414: 0e 94 09 07 call 0xe12 ; 0xe12 <_ZN7hc745954sendEhb> + shiftRegister.confirm(); + 418: 83 e0 ldi r24, 0x03 ; 3 + 41a: 91 e0 ldi r25, 0x01 ; 1 + 41c: 0e 94 9c 07 call 0xf38 ; 0xf38 <_ZN7hc745957confirmEv> + break; + 420: 08 95 ret + } + } + else + { + switch(n) + 422: 82 30 cpi r24, 0x02 ; 2 + 424: 91 05 cpc r25, r1 + 426: 09 f4 brne .+2 ; 0x42a <_Z12clignotementib+0x1a0> + 428: 46 c0 rjmp .+140 ; 0x4b6 <_Z12clignotementib+0x22c> + 42a: 83 30 cpi r24, 0x03 ; 3 + 42c: 91 05 cpc r25, r1 + 42e: 09 f4 brne .+2 ; 0x432 <_Z12clignotementib+0x1a8> + 430: 81 c0 rjmp .+258 ; 0x534 <_Z12clignotementib+0x2aa> + 432: 01 97 sbiw r24, 0x01 ; 1 + 434: 09 f0 breq .+2 ; 0x438 <_Z12clignotementib+0x1ae> + 436: bc c0 rjmp .+376 ; 0x5b0 <_Z12clignotementib+0x326> + { + case 1: + envoi = 0xff; + shiftRegister.send(envoi, 0); + 438: 40 e0 ldi r20, 0x00 ; 0 + 43a: 6f ef ldi r22, 0xFF ; 255 + 43c: 83 e0 ldi r24, 0x03 ; 3 + 43e: 91 e0 ldi r25, 0x01 ; 1 + 440: 0e 94 09 07 call 0xe12 ; 0xe12 <_ZN7hc745954sendEhb> + envoi = rtc.r_minute(); + 444: 8d e0 ldi r24, 0x0D ; 13 + 446: 91 e0 ldi r25, 0x01 ; 1 + 448: 0e 94 b4 0a call 0x1568 ; 0x1568 <_ZN6ds13078r_minuteEv> + envoi = (envoi>>4)|((envoi&0x0f)<<4); + 44c: 90 e0 ldi r25, 0x00 ; 0 + 44e: bc 01 movw r22, r24 + 450: 62 95 swap r22 + 452: 72 95 swap r23 + 454: 70 7f andi r23, 0xF0 ; 240 + 456: 76 27 eor r23, r22 + 458: 60 7f andi r22, 0xF0 ; 240 + 45a: 76 27 eor r23, r22 + 45c: 95 95 asr r25 + 45e: 87 95 ror r24 + 460: 95 95 asr r25 + 462: 87 95 ror r24 + 464: 95 95 asr r25 + 466: 87 95 ror r24 + 468: 95 95 asr r25 + 46a: 87 95 ror r24 + 46c: 68 2b or r22, r24 + shiftRegister.send(envoi, 0); + 46e: 40 e0 ldi r20, 0x00 ; 0 + 470: 83 e0 ldi r24, 0x03 ; 3 + 472: 91 e0 ldi r25, 0x01 ; 1 + 474: 0e 94 09 07 call 0xe12 ; 0xe12 <_ZN7hc745954sendEhb> + envoi = rtc.r_seconde(); + 478: 8d e0 ldi r24, 0x0D ; 13 + 47a: 91 e0 ldi r25, 0x01 ; 1 + 47c: 0e 94 b0 0a call 0x1560 ; 0x1560 <_ZN6ds13079r_secondeEv> + envoi = (envoi>>4)|((envoi&0x0f)<<4); + 480: 90 e0 ldi r25, 0x00 ; 0 + 482: bc 01 movw r22, r24 + 484: 62 95 swap r22 + 486: 72 95 swap r23 + 488: 70 7f andi r23, 0xF0 ; 240 + 48a: 76 27 eor r23, r22 + 48c: 60 7f andi r22, 0xF0 ; 240 + 48e: 76 27 eor r23, r22 + 490: 95 95 asr r25 + 492: 87 95 ror r24 + 494: 95 95 asr r25 + 496: 87 95 ror r24 + 498: 95 95 asr r25 + 49a: 87 95 ror r24 + 49c: 95 95 asr r25 + 49e: 87 95 ror r24 + 4a0: 68 2b or r22, r24 + shiftRegister.send(envoi, 0); + 4a2: 40 e0 ldi r20, 0x00 ; 0 + 4a4: 83 e0 ldi r24, 0x03 ; 3 + 4a6: 91 e0 ldi r25, 0x01 ; 1 + 4a8: 0e 94 09 07 call 0xe12 ; 0xe12 <_ZN7hc745954sendEhb> + shiftRegister.confirm(); + 4ac: 83 e0 ldi r24, 0x03 ; 3 + 4ae: 91 e0 ldi r25, 0x01 ; 1 + 4b0: 0e 94 9c 07 call 0xf38 ; 0xf38 <_ZN7hc745957confirmEv> + break; + 4b4: 08 95 ret + case 2: + envoi = rtc.r_heur(); + 4b6: 8d e0 ldi r24, 0x0D ; 13 + 4b8: 91 e0 ldi r25, 0x01 ; 1 + 4ba: 0e 94 b8 0a call 0x1570 ; 0x1570 <_ZN6ds13076r_heurEv> + envoi = (envoi>>4)|((envoi&0x0f)<<4); + 4be: 90 e0 ldi r25, 0x00 ; 0 + 4c0: bc 01 movw r22, r24 + 4c2: 62 95 swap r22 + 4c4: 72 95 swap r23 + 4c6: 70 7f andi r23, 0xF0 ; 240 + 4c8: 76 27 eor r23, r22 + 4ca: 60 7f andi r22, 0xF0 ; 240 + 4cc: 76 27 eor r23, r22 + 4ce: 95 95 asr r25 + 4d0: 87 95 ror r24 + 4d2: 95 95 asr r25 + 4d4: 87 95 ror r24 + 4d6: 95 95 asr r25 + 4d8: 87 95 ror r24 + 4da: 95 95 asr r25 + 4dc: 87 95 ror r24 + 4de: 68 2b or r22, r24 + shiftRegister.send(envoi, 0); + 4e0: 40 e0 ldi r20, 0x00 ; 0 + 4e2: 83 e0 ldi r24, 0x03 ; 3 + 4e4: 91 e0 ldi r25, 0x01 ; 1 + 4e6: 0e 94 09 07 call 0xe12 ; 0xe12 <_ZN7hc745954sendEhb> + envoi = 0xff; + shiftRegister.send(envoi, 0); + 4ea: 40 e0 ldi r20, 0x00 ; 0 + 4ec: 6f ef ldi r22, 0xFF ; 255 + 4ee: 83 e0 ldi r24, 0x03 ; 3 + 4f0: 91 e0 ldi r25, 0x01 ; 1 + 4f2: 0e 94 09 07 call 0xe12 ; 0xe12 <_ZN7hc745954sendEhb> + envoi = rtc.r_seconde(); + 4f6: 8d e0 ldi r24, 0x0D ; 13 + 4f8: 91 e0 ldi r25, 0x01 ; 1 + 4fa: 0e 94 b0 0a call 0x1560 ; 0x1560 <_ZN6ds13079r_secondeEv> + envoi = (envoi>>4)|((envoi&0x0f)<<4); + 4fe: 90 e0 ldi r25, 0x00 ; 0 + 500: bc 01 movw r22, r24 + 502: 62 95 swap r22 + 504: 72 95 swap r23 + 506: 70 7f andi r23, 0xF0 ; 240 + 508: 76 27 eor r23, r22 + 50a: 60 7f andi r22, 0xF0 ; 240 + 50c: 76 27 eor r23, r22 + 50e: 95 95 asr r25 + 510: 87 95 ror r24 + 512: 95 95 asr r25 + 514: 87 95 ror r24 + 516: 95 95 asr r25 + 518: 87 95 ror r24 + 51a: 95 95 asr r25 + 51c: 87 95 ror r24 + 51e: 68 2b or r22, r24 + shiftRegister.send(envoi, 0); + 520: 40 e0 ldi r20, 0x00 ; 0 + 522: 83 e0 ldi r24, 0x03 ; 3 + 524: 91 e0 ldi r25, 0x01 ; 1 + 526: 0e 94 09 07 call 0xe12 ; 0xe12 <_ZN7hc745954sendEhb> + shiftRegister.confirm(); + 52a: 83 e0 ldi r24, 0x03 ; 3 + 52c: 91 e0 ldi r25, 0x01 ; 1 + 52e: 0e 94 9c 07 call 0xf38 ; 0xf38 <_ZN7hc745957confirmEv> + break; + 532: 08 95 ret + case 3: + envoi = rtc.r_heur(); + 534: 8d e0 ldi r24, 0x0D ; 13 + 536: 91 e0 ldi r25, 0x01 ; 1 + 538: 0e 94 b8 0a call 0x1570 ; 0x1570 <_ZN6ds13076r_heurEv> + envoi = (envoi>>4)|((envoi&0x0f)<<4); + 53c: 90 e0 ldi r25, 0x00 ; 0 + 53e: bc 01 movw r22, r24 + 540: 62 95 swap r22 + 542: 72 95 swap r23 + 544: 70 7f andi r23, 0xF0 ; 240 + 546: 76 27 eor r23, r22 + 548: 60 7f andi r22, 0xF0 ; 240 + 54a: 76 27 eor r23, r22 + 54c: 95 95 asr r25 + 54e: 87 95 ror r24 + 550: 95 95 asr r25 + 552: 87 95 ror r24 + 554: 95 95 asr r25 + 556: 87 95 ror r24 + 558: 95 95 asr r25 + 55a: 87 95 ror r24 + 55c: 68 2b or r22, r24 + shiftRegister.send(envoi, 0); + 55e: 40 e0 ldi r20, 0x00 ; 0 + 560: 83 e0 ldi r24, 0x03 ; 3 + 562: 91 e0 ldi r25, 0x01 ; 1 + 564: 0e 94 09 07 call 0xe12 ; 0xe12 <_ZN7hc745954sendEhb> + envoi = rtc.r_minute(); + 568: 8d e0 ldi r24, 0x0D ; 13 + 56a: 91 e0 ldi r25, 0x01 ; 1 + 56c: 0e 94 b4 0a call 0x1568 ; 0x1568 <_ZN6ds13078r_minuteEv> + envoi = (envoi>>4)|((envoi&0x0f)<<4); + 570: 90 e0 ldi r25, 0x00 ; 0 + 572: bc 01 movw r22, r24 + 574: 62 95 swap r22 + 576: 72 95 swap r23 + 578: 70 7f andi r23, 0xF0 ; 240 + 57a: 76 27 eor r23, r22 + 57c: 60 7f andi r22, 0xF0 ; 240 + 57e: 76 27 eor r23, r22 + 580: 95 95 asr r25 + 582: 87 95 ror r24 + 584: 95 95 asr r25 + 586: 87 95 ror r24 + 588: 95 95 asr r25 + 58a: 87 95 ror r24 + 58c: 95 95 asr r25 + 58e: 87 95 ror r24 + 590: 68 2b or r22, r24 + shiftRegister.send(envoi, 0); + 592: 40 e0 ldi r20, 0x00 ; 0 + 594: 83 e0 ldi r24, 0x03 ; 3 + 596: 91 e0 ldi r25, 0x01 ; 1 + 598: 0e 94 09 07 call 0xe12 ; 0xe12 <_ZN7hc745954sendEhb> + envoi = 0xff; + shiftRegister.send(envoi, 0); + 59c: 40 e0 ldi r20, 0x00 ; 0 + 59e: 6f ef ldi r22, 0xFF ; 255 + 5a0: 83 e0 ldi r24, 0x03 ; 3 + 5a2: 91 e0 ldi r25, 0x01 ; 1 + 5a4: 0e 94 09 07 call 0xe12 ; 0xe12 <_ZN7hc745954sendEhb> + shiftRegister.confirm(); + 5a8: 83 e0 ldi r24, 0x03 ; 3 + 5aa: 91 e0 ldi r25, 0x01 ; 1 + 5ac: 0e 94 9c 07 call 0xf38 ; 0xf38 <_ZN7hc745957confirmEv> + 5b0: 08 95 ret + +000005b2 <_Z7couleurv>: + } + } +} +void couleur() +{ + usart = USART_Receive(); + 5b2: 0e 94 36 0b call 0x166c ; 0x166c <_Z13USART_Receivev> + 5b6: 80 93 02 01 sts 0x0102, r24 + uint8_t mask = LED_BLUE|LED_GREEN|LED_RED; //COnfigure le mask + uint8_t curent_couleur; + if((PINB & (1< + break; + } + } +} +void couleur() +{ + 5be: 88 ee ldi r24, 0xE8 ; 232 + 5c0: 93 e0 ldi r25, 0x03 ; 3 + 5c2: 03 c0 rjmp .+6 ; 0x5ca <_Z7couleurv+0x18> + usart = USART_Receive(); + uint8_t mask = LED_BLUE|LED_GREEN|LED_RED; //COnfigure le mask + uint8_t curent_couleur; + if((PINB & (1< + 5c8: fa cf rjmp .-12 ; 0x5be <_Z7couleurv+0xc> + { + for(int b = 0 ; b < tmps_max_bp_plus_moins && (PINB & (1< + 5ce: 40 c0 rjmp .+128 ; 0x650 <_Z7couleurv+0x9e> + _delay_ms(1); + if(bcm_rgb_actif == 0 && (PINB&mask) == 0 && 1==2) + 5d0: 83 b1 in r24, 0x03 ; 3 + { + bcm_rgb_actif = 1; + } + else + { + bcm_rgb_actif = 0; + 5d2: 10 92 01 01 sts 0x0101, r1 + 5d6: 10 92 00 01 sts 0x0100, r1 + curent_couleur = ((PINB & mask)+(LED_RED)); + 5da: 83 b1 in r24, 0x03 ; 3 + 5dc: 88 73 andi r24, 0x38 ; 56 + 5de: 88 5f subi r24, 0xF8 ; 248 + if(curent_couleur > mask) + 5e0: 89 33 cpi r24, 0x39 ; 57 + 5e2: 20 f4 brcc .+8 ; 0x5ec <_Z7couleurv+0x3a> + curent_couleur = 0x00; + else + bcm_rgb_actif = 0; + if (curent_couleur&LED_BLUE) + 5e4: 85 ff sbrs r24, 5 + 5e6: 03 c0 rjmp .+6 ; 0x5ee <_Z7couleurv+0x3c> + PORTB |= LED_BLUE; + 5e8: 2d 9a sbi 0x05, 5 ; 5 + 5ea: 02 c0 rjmp .+4 ; 0x5f0 <_Z7couleurv+0x3e> + else + { + bcm_rgb_actif = 0; + curent_couleur = ((PINB & mask)+(LED_RED)); + if(curent_couleur > mask) + curent_couleur = 0x00; + 5ec: 80 e0 ldi r24, 0x00 ; 0 + else + bcm_rgb_actif = 0; + if (curent_couleur&LED_BLUE) + PORTB |= LED_BLUE; + else + PORTB &= LOW(LED_BLUE); + 5ee: 2d 98 cbi 0x05, 5 ; 5 + if(curent_couleur&LED_GREEN) + 5f0: 84 ff sbrs r24, 4 + 5f2: 02 c0 rjmp .+4 ; 0x5f8 <_Z7couleurv+0x46> + PORTB |= LED_GREEN; + 5f4: 2c 9a sbi 0x05, 4 ; 5 + 5f6: 01 c0 rjmp .+2 ; 0x5fa <_Z7couleurv+0x48> + else + PORTB &= LOW(LED_GREEN); + 5f8: 2c 98 cbi 0x05, 4 ; 5 + if(curent_couleur & LED_RED) + 5fa: 83 ff sbrs r24, 3 + 5fc: 02 c0 rjmp .+4 ; 0x602 <_Z7couleurv+0x50> + PORTB |= LED_RED; + 5fe: 2b 9a sbi 0x05, 3 ; 5 + 600: 08 95 ret + else + PORTB &= LOW(LED_RED); + 602: 2b 98 cbi 0x05, 3 ; 5 + 604: 08 95 ret + } + } + else if((PINB & (1< + else + { + bcm_rgb_actif = 0; + curent_couleur = ((PINB & mask)+(LED_RED)); + if(curent_couleur > mask) + curent_couleur = 0x00; + 60a: 88 ee ldi r24, 0xE8 ; 232 + 60c: 93 e0 ldi r25, 0x03 ; 3 + 60e: 04 c0 rjmp .+8 ; 0x618 <_Z7couleurv+0x66> + PORTB |= LED_RED; + else + PORTB &= LOW(LED_RED); + } + } + else if((PINB & (1< + 614: 3f c0 rjmp .+126 ; 0x694 <_Z7couleurv+0xe2> + 616: f9 cf rjmp .-14 ; 0x60a <_Z7couleurv+0x58> + { + for(int b = 0 ; b < tmps_max_bp_plus_moins && (PINB & (1< + 61c: 34 c0 rjmp .+104 ; 0x686 <_Z7couleurv+0xd4> + _delay_ms(1); + if(bcm_rgb_actif == 0 && (PINB&mask) == 0 && 1==2) + 61e: 83 b1 in r24, 0x03 ; 3 + { + bcm_rgb_actif = 1; + } + else + { + bcm_rgb_actif = 0; + 620: 10 92 01 01 sts 0x0101, r1 + 624: 10 92 00 01 sts 0x0100, r1 + if(PINB & mask == 0) + 628: 83 b1 in r24, 0x03 ; 3 + curent_couleur = mask; + curent_couleur = ((PINB & mask)-(LED_RED)); + 62a: 83 b1 in r24, 0x03 ; 3 + 62c: 88 73 andi r24, 0x38 ; 56 + 62e: 88 50 subi r24, 0x08 ; 8 + if (curent_couleur&LED_BLUE) + 630: 85 ff sbrs r24, 5 + 632: 02 c0 rjmp .+4 ; 0x638 <_Z7couleurv+0x86> + PORTB |= LED_BLUE; + 634: 2d 9a sbi 0x05, 5 ; 5 + 636: 01 c0 rjmp .+2 ; 0x63a <_Z7couleurv+0x88> + else + PORTB &= LOW(LED_BLUE); + 638: 2d 98 cbi 0x05, 5 ; 5 + if(curent_couleur&LED_GREEN) + 63a: 84 ff sbrs r24, 4 + 63c: 02 c0 rjmp .+4 ; 0x642 <_Z7couleurv+0x90> + PORTB |= LED_GREEN; + 63e: 2c 9a sbi 0x05, 4 ; 5 + 640: 01 c0 rjmp .+2 ; 0x644 <_Z7couleurv+0x92> + else + PORTB &= LOW(LED_GREEN); + 642: 2c 98 cbi 0x05, 4 ; 5 + if(curent_couleur & LED_RED) + 644: 83 ff sbrs r24, 3 + 646: 02 c0 rjmp .+4 ; 0x64c <_Z7couleurv+0x9a> + PORTB |= LED_RED; + 648: 2b 9a sbi 0x05, 3 ; 5 + 64a: 08 95 ret + else + PORTB &= LOW(LED_RED); + 64c: 2b 98 cbi 0x05, 3 ; 5 + 64e: 08 95 ret + uint8_t curent_couleur; + if((PINB & (1< + 65c: b9 cf rjmp .-142 ; 0x5d0 <_Z7couleurv+0x1e> + 65e: b9 cf rjmp .-142 ; 0x5d2 <_Z7couleurv+0x20> + 660: ef e9 ldi r30, 0x9F ; 159 + 662: ff e0 ldi r31, 0x0F ; 15 + 664: 31 97 sbiw r30, 0x01 ; 1 + 666: f1 f7 brne .-4 ; 0x664 <_Z7couleurv+0xb2> + 668: 00 c0 rjmp .+0 ; 0x66a <_Z7couleurv+0xb8> + 66a: 00 00 nop + 66c: 01 97 sbiw r24, 0x01 ; 1 + usart = USART_Receive(); + uint8_t mask = LED_BLUE|LED_GREEN|LED_RED; //COnfigure le mask + uint8_t curent_couleur; + if((PINB & (1< + 672: ab cf rjmp .-170 ; 0x5ca <_Z7couleurv+0x18> + 674: ef e9 ldi r30, 0x9F ; 159 + 676: ff e0 ldi r31, 0x0F ; 15 + 678: 31 97 sbiw r30, 0x01 ; 1 + 67a: f1 f7 brne .-4 ; 0x678 <_Z7couleurv+0xc6> + 67c: 00 c0 rjmp .+0 ; 0x67e <_Z7couleurv+0xcc> + 67e: 00 00 nop + 680: 01 97 sbiw r24, 0x01 ; 1 + PORTB &= LOW(LED_RED); + } + } + else if((PINB & (1< + _delay_ms(1); + if(bcm_rgb_actif == 0 && (PINB&mask) == 0 && 1==2) + 686: 80 91 00 01 lds r24, 0x0100 + 68a: 90 91 01 01 lds r25, 0x0101 + 68e: 89 2b or r24, r25 + 690: 31 f2 breq .-116 ; 0x61e <_Z7couleurv+0x6c> + 692: c6 cf rjmp .-116 ; 0x620 <_Z7couleurv+0x6e> + 694: 08 95 ret + +00000696 <_Z6boutonv>: + } + + } +} +void bouton() //Gestion des BP pour configurer l'heur +{ + 696: bf 92 push r11 + 698: cf 92 push r12 + 69a: df 92 push r13 + 69c: ef 92 push r14 + 69e: ff 92 push r15 + 6a0: 0f 93 push r16 + 6a2: 1f 93 push r17 + 6a4: cf 93 push r28 + 6a6: df 93 push r29 + if (PINB & (1< + { + while(PINB & (1< + 6b0: 8f e9 ldi r24, 0x9F ; 159 + 6b2: 9f e0 ldi r25, 0x0F ; 15 + 6b4: 01 97 sbiw r24, 0x01 ; 1 + 6b6: f1 f7 brne .-4 ; 0x6b4 <_Z6boutonv+0x1e> + 6b8: 00 c0 rjmp .+0 ; 0x6ba <_Z6boutonv+0x24> + 6ba: 00 00 nop + 6bc: 18 99 sbic 0x03, 0 ; 3 + 6be: f8 cf rjmp .-16 ; 0x6b0 <_Z6boutonv+0x1a> + 6c0: a5 c1 rjmp .+842 ; 0xa0c <__stack+0x10d> + _delay_ms(1); + int pousse = 1; + for( int a = 0 ; pousse <= 6 ; a++) //Boucle infinie tant qu'on a pas poussé 6 fois sur le bp et init de la variable pour clignotement + 6c2: 0f 5f subi r16, 0xFF ; 255 + 6c4: 1f 4f sbci r17, 0xFF ; 255 + { + if(a >= (tmps_clignotement*2)) + 6c6: 08 3c cpi r16, 0xC8 ; 200 + 6c8: 11 05 cpc r17, r1 + 6ca: 14 f0 brlt .+4 ; 0x6d0 <_Z6boutonv+0x3a> + a = 0; + 6cc: 00 e0 ldi r16, 0x00 ; 0 + 6ce: 10 e0 ldi r17, 0x00 ; 0 + if (PINB & (1< + { + while(PINB & (1< + 6d8: ef e9 ldi r30, 0x9F ; 159 + 6da: ff e0 ldi r31, 0x0F ; 15 + 6dc: 31 97 sbiw r30, 0x01 ; 1 + 6de: f1 f7 brne .-4 ; 0x6dc <_Z6boutonv+0x46> + 6e0: 00 c0 rjmp .+0 ; 0x6e2 <_Z6boutonv+0x4c> + 6e2: 00 00 nop + 6e4: 18 99 sbic 0x03, 0 ; 3 + 6e6: f8 cf rjmp .-16 ; 0x6d8 <_Z6boutonv+0x42> + _delay_ms(1); + pousse++; + 6e8: 21 96 adiw r28, 0x01 ; 1 + } + switch(pousse) + 6ea: c3 30 cpi r28, 0x03 ; 3 + 6ec: d1 05 cpc r29, r1 + 6ee: 09 f4 brne .+2 ; 0x6f2 <_Z6boutonv+0x5c> + 6f0: 6c c0 rjmp .+216 ; 0x7ca <_Z6boutonv+0x134> + 6f2: 3c f4 brge .+14 ; 0x702 <_Z6boutonv+0x6c> + 6f4: c1 30 cpi r28, 0x01 ; 1 + 6f6: d1 05 cpc r29, r1 + 6f8: 79 f0 breq .+30 ; 0x718 <_Z6boutonv+0x82> + 6fa: c2 30 cpi r28, 0x02 ; 2 + 6fc: d1 05 cpc r29, r1 + 6fe: 09 f1 breq .+66 ; 0x742 <_Z6boutonv+0xac> + 700: 77 c1 rjmp .+750 ; 0x9f0 <__stack+0xf1> + 702: c5 30 cpi r28, 0x05 ; 5 + 704: d1 05 cpc r29, r1 + 706: 09 f4 brne .+2 ; 0x70a <_Z6boutonv+0x74> + 708: ea c0 rjmp .+468 ; 0x8de <_Z6boutonv+0x248> + 70a: 0c f4 brge .+2 ; 0x70e <_Z6boutonv+0x78> + 70c: a5 c0 rjmp .+330 ; 0x858 <_Z6boutonv+0x1c2> + 70e: c6 30 cpi r28, 0x06 ; 6 + 710: d1 05 cpc r29, r1 + 712: 09 f4 brne .+2 ; 0x716 <_Z6boutonv+0x80> + 714: 26 c1 rjmp .+588 ; 0x962 <__stack+0x63> + 716: 6c c1 rjmp .+728 ; 0x9f0 <__stack+0xf1> + { + case 1: //Config des secondes + if(a > tmps_clignotement) //Clignotement + 718: 05 36 cpi r16, 0x65 ; 101 + 71a: 11 05 cpc r17, r1 + 71c: 34 f0 brlt .+12 ; 0x72a <_Z6boutonv+0x94> + clignotement(SR_SECONDE, false); + 71e: 60 e0 ldi r22, 0x00 ; 0 + 720: 82 e0 ldi r24, 0x02 ; 2 + 722: 90 e0 ldi r25, 0x00 ; 0 + 724: 0e 94 45 01 call 0x28a ; 0x28a <_Z12clignotementib> + 728: 02 c0 rjmp .+4 ; 0x72e <_Z6boutonv+0x98> + else + affichage_heur(); + 72a: 0e 94 98 00 call 0x130 ; 0x130 <_Z14affichage_heurv> + if((PINB & (1< + 732: 19 9b sbis 0x03, 1 ; 3 + 734: 44 c2 rjmp .+1160 ; 0xbbe <__stack+0x2bf> + rtc.w_seconde(0x00); + 736: 60 e0 ldi r22, 0x00 ; 0 + 738: 8d e0 ldi r24, 0x0D ; 13 + 73a: 91 e0 ldi r25, 0x01 ; 1 + 73c: 0e 94 c8 0a call 0x1590 ; 0x1590 <_ZN6ds13079w_secondeEh> + 740: 3e c2 rjmp .+1148 ; 0xbbe <__stack+0x2bf> + break; + case 2: //Config des minutes + if(a > tmps_clignotement) //Clignotement + 742: 05 36 cpi r16, 0x65 ; 101 + 744: 11 05 cpc r17, r1 + 746: 34 f0 brlt .+12 ; 0x754 <_Z6boutonv+0xbe> + clignotement(SR_MINUTE, false); + 748: 60 e0 ldi r22, 0x00 ; 0 + 74a: 81 e0 ldi r24, 0x01 ; 1 + 74c: 90 e0 ldi r25, 0x00 ; 0 + 74e: 0e 94 45 01 call 0x28a ; 0x28a <_Z12clignotementib> + 752: 02 c0 rjmp .+4 ; 0x758 <_Z6boutonv+0xc2> + else + affichage_heur(); + 754: 0e 94 98 00 call 0x130 ; 0x130 <_Z14affichage_heurv> + if(PINB & (1< + 75c: 8e 2d mov r24, r14 + 75e: 9f 2d mov r25, r15 + { + for(int b = 0 ; b < tmps_max_bp_plus_moins && (PINB & (1< + 764: 6a c1 rjmp .+724 ; 0xa3a <__stack+0x13b> + _delay_ms(1); + uint8_t curent_minute = rtc.r_minute();//Lecture du temps DS1307 + if((curent_minute&0x0F) == 0x09) // Si 1e digit = 9 + curent_minute = (((curent_minute&0xF0)>>4)+1)<<4; //Incrémente de 10 + 766: 80 7f andi r24, 0xF0 ; 240 + 768: 60 e1 ldi r22, 0x10 ; 16 + 76a: 68 0f add r22, r24 + 76c: 02 c0 rjmp .+4 ; 0x772 <_Z6boutonv+0xdc> + else + curent_minute++; //Incrémente de 1 + 76e: 61 e0 ldi r22, 0x01 ; 1 + 770: 68 0f add r22, r24 + if(curent_minute >= 0x60) //Si supérieur à 60 retour à 00 /!\ Pas d'incrémentation de l'heur !! + 772: 60 36 cpi r22, 0x60 ; 96 + 774: 08 f0 brcs .+2 ; 0x778 <_Z6boutonv+0xe2> + curent_minute = 0x00; + 776: 60 e0 ldi r22, 0x00 ; 0 + rtc.w_minute(curent_minute); //Met à jour le DS1307 + 778: 8d e0 ldi r24, 0x0D ; 13 + 77a: 91 e0 ldi r25, 0x01 ; 1 + 77c: 0e 94 ce 0a call 0x159c ; 0x159c <_ZN6ds13078w_minuteEh> + 780: 1e c2 rjmp .+1084 ; 0xbbe <__stack+0x2bf> + } + else if(PINB & (1< + 786: 8e 2d mov r24, r14 + 788: 9f 2d mov r25, r15 + { + for(int b = 0 ; b < tmps_max_bp_plus_moins && (PINB & (1< + 78e: 69 c1 rjmp .+722 ; 0xa62 <__stack+0x163> + _delay_ms(1); + uint8_t curent_minute = rtc.r_minute();//Lecture du temps DS1307 + if((curent_minute&0x0F) == 0x00) // Si 1e digit = 0 + curent_minute = ((((curent_minute&0xF0)>>4)-1)<<4)|0x09; //Décrémente de 10 + 790: 82 95 swap r24 + 792: 8f 70 andi r24, 0x0F ; 15 + 794: 68 2f mov r22, r24 + 796: 70 e0 ldi r23, 0x00 ; 0 + 798: 61 50 subi r22, 0x01 ; 1 + 79a: 71 09 sbc r23, r1 + 79c: 62 95 swap r22 + 79e: 72 95 swap r23 + 7a0: 70 7f andi r23, 0xF0 ; 240 + 7a2: 76 27 eor r23, r22 + 7a4: 60 7f andi r22, 0xF0 ; 240 + 7a6: 76 27 eor r23, r22 + 7a8: 69 60 ori r22, 0x09 ; 9 + 7aa: 04 c0 rjmp .+8 ; 0x7b4 <_Z6boutonv+0x11e> + else if(curent_minute == 0x00) // Bug en simulation ..........???????????~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 7ac: 88 23 and r24, r24 + 7ae: 29 f0 breq .+10 ; 0x7ba <_Z6boutonv+0x124> + curent_minute = 0x59; + else + curent_minute--; //Décrémente de 1 + 7b0: 6f ef ldi r22, 0xFF ; 255 + 7b2: 68 0f add r22, r24 + if(curent_minute > 0x60) + 7b4: 61 36 cpi r22, 0x61 ; 97 + 7b6: 18 f4 brcc .+6 ; 0x7be <_Z6boutonv+0x128> + 7b8: 03 c0 rjmp .+6 ; 0x7c0 <_Z6boutonv+0x12a> + _delay_ms(1); + uint8_t curent_minute = rtc.r_minute();//Lecture du temps DS1307 + if((curent_minute&0x0F) == 0x00) // Si 1e digit = 0 + curent_minute = ((((curent_minute&0xF0)>>4)-1)<<4)|0x09; //Décrémente de 10 + else if(curent_minute == 0x00) // Bug en simulation ..........???????????~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + curent_minute = 0x59; + 7ba: 69 e5 ldi r22, 0x59 ; 89 + 7bc: 01 c0 rjmp .+2 ; 0x7c0 <_Z6boutonv+0x12a> + else + curent_minute--; //Décrémente de 1 + if(curent_minute > 0x60) + curent_minute = 0x59; + 7be: 69 e5 ldi r22, 0x59 ; 89 + rtc.w_minute(curent_minute); //Met à jour le DS1307 + 7c0: 8d e0 ldi r24, 0x0D ; 13 + 7c2: 91 e0 ldi r25, 0x01 ; 1 + 7c4: 0e 94 ce 0a call 0x159c ; 0x159c <_ZN6ds13078w_minuteEh> + 7c8: fa c1 rjmp .+1012 ; 0xbbe <__stack+0x2bf> + } + + break; + case 3: //Config de l'heur + if(a > tmps_clignotement) //Clignotement toute les + 7ca: 05 36 cpi r16, 0x65 ; 101 + 7cc: 11 05 cpc r17, r1 + 7ce: 34 f0 brlt .+12 ; 0x7dc <_Z6boutonv+0x146> + clignotement(SR_HEUR, false); + 7d0: 60 e0 ldi r22, 0x00 ; 0 + 7d2: 80 e0 ldi r24, 0x00 ; 0 + 7d4: 90 e0 ldi r25, 0x00 ; 0 + 7d6: 0e 94 45 01 call 0x28a ; 0x28a <_Z12clignotementib> + 7da: 02 c0 rjmp .+4 ; 0x7e0 <_Z6boutonv+0x14a> + else + affichage_heur(); + 7dc: 0e 94 98 00 call 0x130 ; 0x130 <_Z14affichage_heurv> + if(PINB & (1< + 7e4: 8e 2d mov r24, r14 + 7e6: 9f 2d mov r25, r15 + { + for(int b = 0 ; b < tmps_max_bp_plus_moins && (PINB & (1< + 7ec: 4d c1 rjmp .+666 ; 0xa88 <__stack+0x189> + _delay_ms(1); + uint8_t curent_heur = rtc.r_heur(); //Lecture du temps DS1307 + if((curent_heur&0x0F) == 0x09) // Si 1e digit = 9 + curent_heur = (((curent_heur&0xF0)>>4)+1)<<4; //Incrémente de 10 + 7ee: 80 7f andi r24, 0xF0 ; 240 + 7f0: 60 e1 ldi r22, 0x10 ; 16 + 7f2: 68 0f add r22, r24 + 7f4: 08 c0 rjmp .+16 ; 0x806 <_Z6boutonv+0x170> + else if(curent_heur >= 0x23) //Si arrivé à 24H retour à 00H, /!\ Attention n'incrémente pas la date !! + 7f6: 83 32 cpi r24, 0x23 ; 35 + 7f8: 28 f4 brcc .+10 ; 0x804 <_Z6boutonv+0x16e> + curent_heur = 0x00; + else + curent_heur = ((curent_heur&0x0F)+1)|(curent_heur&0xF0); //Incrémente de 1 + 7fa: 9f 5f subi r25, 0xFF ; 255 + 7fc: 80 7f andi r24, 0xF0 ; 240 + 7fe: 69 2f mov r22, r25 + 800: 68 2b or r22, r24 + 802: 01 c0 rjmp .+2 ; 0x806 <_Z6boutonv+0x170> + _delay_ms(1); + uint8_t curent_heur = rtc.r_heur(); //Lecture du temps DS1307 + if((curent_heur&0x0F) == 0x09) // Si 1e digit = 9 + curent_heur = (((curent_heur&0xF0)>>4)+1)<<4; //Incrémente de 10 + else if(curent_heur >= 0x23) //Si arrivé à 24H retour à 00H, /!\ Attention n'incrémente pas la date !! + curent_heur = 0x00; + 804: 60 e0 ldi r22, 0x00 ; 0 + else + curent_heur = ((curent_heur&0x0F)+1)|(curent_heur&0xF0); //Incrémente de 1 + rtc.w_heur(curent_heur, 0); //Met à jour le DS1307 + 806: 40 e0 ldi r20, 0x00 ; 0 + 808: 8d e0 ldi r24, 0x0D ; 13 + 80a: 91 e0 ldi r25, 0x01 ; 1 + 80c: 0e 94 d4 0a call 0x15a8 ; 0x15a8 <_ZN6ds13076w_heurEhh> + 810: d6 c1 rjmp .+940 ; 0xbbe <__stack+0x2bf> + } + else if(PINB & (1< + 816: 8e 2d mov r24, r14 + 818: 9f 2d mov r25, r15 + { + for(int b = 0 ; b < tmps_max_bp_plus_moins && (PINB & (1< + 81e: 48 c1 rjmp .+656 ; 0xab0 <__stack+0x1b1> + _delay_ms(1); + uint8_t curent_heur = rtc.r_heur(); //Lecture du temps DS1307 + if(curent_heur == 0x00) //Si arrive à 00H, /!\ Attention ne décrémente pas la date !! + curent_heur = 0x23; //Retour à 24H + else if((curent_heur&0x0F) == 0) // Si 1e digit = 0 + 820: 98 2f mov r25, r24 + 822: 9f 70 andi r25, 0x0F ; 15 + 824: 69 f4 brne .+26 ; 0x840 <_Z6boutonv+0x1aa> + curent_heur = ((((curent_heur&0xF0)>>4)-1)<<4)|0x09; //Décrémente de 10 + 826: 82 95 swap r24 + 828: 8f 70 andi r24, 0x0F ; 15 + 82a: 90 e0 ldi r25, 0x00 ; 0 + 82c: 01 97 sbiw r24, 0x01 ; 1 + 82e: 82 95 swap r24 + 830: 92 95 swap r25 + 832: 90 7f andi r25, 0xF0 ; 240 + 834: 98 27 eor r25, r24 + 836: 80 7f andi r24, 0xF0 ; 240 + 838: 98 27 eor r25, r24 + 83a: 68 2f mov r22, r24 + 83c: 69 60 ori r22, 0x09 ; 9 + 83e: 06 c0 rjmp .+12 ; 0x84c <_Z6boutonv+0x1b6> + else + curent_heur = ((curent_heur&0x0f)-1)|(curent_heur&0xf0); //Décrémente de 1 + 840: 91 50 subi r25, 0x01 ; 1 + 842: 80 7f andi r24, 0xF0 ; 240 + 844: 69 2f mov r22, r25 + 846: 68 2b or r22, r24 + 848: 01 c0 rjmp .+2 ; 0x84c <_Z6boutonv+0x1b6> + { + for(int b = 0 ; b < tmps_max_bp_plus_moins && (PINB & (1<>4)-1)<<4)|0x09; //Décrémente de 10 + else + curent_heur = ((curent_heur&0x0f)-1)|(curent_heur&0xf0); //Décrémente de 1 + rtc.w_heur(curent_heur, 0); //Met à jour le DS1307 + 84c: 40 e0 ldi r20, 0x00 ; 0 + 84e: 8d e0 ldi r24, 0x0D ; 13 + 850: 91 e0 ldi r25, 0x01 ; 1 + 852: 0e 94 d4 0a call 0x15a8 ; 0x15a8 <_ZN6ds13076w_heurEhh> + 856: b3 c1 rjmp .+870 ; 0xbbe <__stack+0x2bf> + } + break; + case 4: //Config du jour + PORTC &= LOW(1< tmps_clignotement) //Clignotement + 85a: 05 36 cpi r16, 0x65 ; 101 + 85c: 11 05 cpc r17, r1 + 85e: 34 f0 brlt .+12 ; 0x86c <_Z6boutonv+0x1d6> + clignotement(SR_JOURS, true); + 860: 6d 2d mov r22, r13 + 862: 80 e0 ldi r24, 0x00 ; 0 + 864: 90 e0 ldi r25, 0x00 ; 0 + 866: 0e 94 45 01 call 0x28a ; 0x28a <_Z12clignotementib> + 86a: 02 c0 rjmp .+4 ; 0x870 <_Z6boutonv+0x1da> + else + affichage_date(); + 86c: 0e 94 eb 00 call 0x1d6 ; 0x1d6 <_Z14affichage_datev> + if(PINB & (1< + 874: 8e 2d mov r24, r14 + 876: 9f 2d mov r25, r15 + { + for(int b = 0 ; b < tmps_max_bp_plus_moins && (PINB & (1< + 87c: 2b c1 rjmp .+598 ; 0xad4 <__stack+0x1d5> + _delay_ms(1); + uint8_t curent_day = rtc.r_jour(); //Lecture du temps DS1307 + if((curent_day&0x0F) == 0x09) // Si 1e digit = 9 + curent_day = (((curent_day&0xF0)>>4)+1)<<4; //Incrémente de 10 + 87e: 80 7f andi r24, 0xF0 ; 240 + 880: 60 e1 ldi r22, 0x10 ; 16 + 882: 68 0f add r22, r24 + 884: 04 c0 rjmp .+8 ; 0x88e <_Z6boutonv+0x1f8> + else + curent_day = ((curent_day&0x0F)+1)|(curent_day&0xF0); //Incrémente de 1 + 886: 9f 5f subi r25, 0xFF ; 255 + 888: 80 7f andi r24, 0xF0 ; 240 + 88a: 69 2f mov r22, r25 + 88c: 68 2b or r22, r24 + if(curent_day > 0x31) + 88e: 62 33 cpi r22, 0x32 ; 50 + 890: 08 f0 brcs .+2 ; 0x894 <_Z6boutonv+0x1fe> + curent_day = 0x00; + 892: 60 e0 ldi r22, 0x00 ; 0 + rtc.w_date(curent_day); //Met à jour le DS1307 + 894: 8d e0 ldi r24, 0x0D ; 13 + 896: 91 e0 ldi r25, 0x01 ; 1 + 898: 0e 94 e0 0a call 0x15c0 ; 0x15c0 <_ZN6ds13076w_dateEh> + 89c: 90 c1 rjmp .+800 ; 0xbbe <__stack+0x2bf> + } + else if(PINB & (1< + 8a2: 8e 2d mov r24, r14 + 8a4: 9f 2d mov r25, r15 + { + for(int b = 0 ; b < tmps_max_bp_plus_moins && (PINB & 1< + 8aa: 28 c1 rjmp .+592 ; 0xafc <__stack+0x1fd> + _delay_ms(1); + uint8_t curent_heur = rtc.r_jour(); //Lecture du temps DS1307 + if((curent_heur&0x0F) == 0) // Si 1e digit = 0 + curent_heur = ((((curent_heur&0xF0)>>4)-1)<<4)|0x09; //Décrémente de 10 + 8ac: 82 95 swap r24 + 8ae: 8f 70 andi r24, 0x0F ; 15 + 8b0: 90 e0 ldi r25, 0x00 ; 0 + 8b2: 01 97 sbiw r24, 0x01 ; 1 + 8b4: 82 95 swap r24 + 8b6: 92 95 swap r25 + 8b8: 90 7f andi r25, 0xF0 ; 240 + 8ba: 98 27 eor r25, r24 + 8bc: 80 7f andi r24, 0xF0 ; 240 + 8be: 98 27 eor r25, r24 + 8c0: 68 2f mov r22, r24 + 8c2: 69 60 ori r22, 0x09 ; 9 + 8c4: 04 c0 rjmp .+8 ; 0x8ce <_Z6boutonv+0x238> + else + curent_heur = ((curent_heur&0x0F)-1)|(curent_heur&0xF0); //Décrémente de 1 + 8c6: 91 50 subi r25, 0x01 ; 1 + 8c8: 80 7f andi r24, 0xF0 ; 240 + 8ca: 69 2f mov r22, r25 + 8cc: 68 2b or r22, r24 + if(curent_heur == 0x00) + 8ce: 61 11 cpse r22, r1 + 8d0: 01 c0 rjmp .+2 ; 0x8d4 <_Z6boutonv+0x23e> + curent_heur = 0x31; + 8d2: 61 e3 ldi r22, 0x31 ; 49 + rtc.w_date(curent_heur); //Met à jour le DS1307 + 8d4: 8d e0 ldi r24, 0x0D ; 13 + 8d6: 91 e0 ldi r25, 0x01 ; 1 + 8d8: 0e 94 e0 0a call 0x15c0 ; 0x15c0 <_ZN6ds13076w_dateEh> + 8dc: 70 c1 rjmp .+736 ; 0xbbe <__stack+0x2bf> + } + break; + case 5: //config du mois + if(a > tmps_clignotement) //Clignotement + 8de: 05 36 cpi r16, 0x65 ; 101 + 8e0: 11 05 cpc r17, r1 + 8e2: 34 f0 brlt .+12 ; 0x8f0 <_Z6boutonv+0x25a> + clignotement(SR_MOIS, true); + 8e4: 6d 2d mov r22, r13 + 8e6: 81 e0 ldi r24, 0x01 ; 1 + 8e8: 90 e0 ldi r25, 0x00 ; 0 + 8ea: 0e 94 45 01 call 0x28a ; 0x28a <_Z12clignotementib> + 8ee: 02 c0 rjmp .+4 ; 0x8f4 <_Z6boutonv+0x25e> + else + affichage_date(); + 8f0: 0e 94 eb 00 call 0x1d6 ; 0x1d6 <_Z14affichage_datev> + if(PINB & (1< + 8f8: 8e 2d mov r24, r14 + 8fa: 9f 2d mov r25, r15 + { + for(int b = 0 ; b < tmps_max_bp_plus_moins && (PINB & (1< + 900: 10 c1 rjmp .+544 ; 0xb22 <__stack+0x223> + _delay_ms(1); + uint8_t curent_months = rtc.r_moi();//Lecture du temps DS1307 + if((curent_months&0x0F) == 0x09) // Si 1e digit = 9 + curent_months = (((curent_months&0xF0)>>4)+1)<<4; //Incrémente de 10 + 902: 80 7f andi r24, 0xF0 ; 240 + 904: 60 e1 ldi r22, 0x10 ; 16 + 906: 68 0f add r22, r24 + 908: 04 c0 rjmp .+8 ; 0x912 <__stack+0x13> + else + curent_months = ((curent_months&0x0F)+1)|(curent_months&0xF0); //Incrémente de 1 + 90a: 9f 5f subi r25, 0xFF ; 255 + 90c: 80 7f andi r24, 0xF0 ; 240 + 90e: 69 2f mov r22, r25 + 910: 68 2b or r22, r24 + if(curent_months > 0x12) + 912: 63 31 cpi r22, 0x13 ; 19 + 914: 08 f0 brcs .+2 ; 0x918 <__stack+0x19> + curent_months = 0x01; + 916: 6d 2d mov r22, r13 + rtc.w_moi(curent_months); //Met à jour le DS1307 + 918: 8d e0 ldi r24, 0x0D ; 13 + 91a: 91 e0 ldi r25, 0x01 ; 1 + 91c: 0e 94 e6 0a call 0x15cc ; 0x15cc <_ZN6ds13075w_moiEh> + 920: 4e c1 rjmp .+668 ; 0xbbe <__stack+0x2bf> + } + else if(PINB & (1< + 926: 8e 2d mov r24, r14 + 928: 9f 2d mov r25, r15 + { + for(int b = 0 ; b < tmps_max_bp_plus_moins && (PINB & 1< + 92e: 0d c1 rjmp .+538 ; 0xb4a <__stack+0x24b> + _delay_ms(1); + uint8_t curent_months = rtc.r_moi();//Lecture du temps DS1307 + if((curent_months&0x0F) == 0) // Si 1e digit = 0 + curent_months = ((((curent_months&0xF0)>>4)-1)<<4)|0x09; //Décrémente de 10 + 930: 82 95 swap r24 + 932: 8f 70 andi r24, 0x0F ; 15 + 934: 90 e0 ldi r25, 0x00 ; 0 + 936: 01 97 sbiw r24, 0x01 ; 1 + 938: 82 95 swap r24 + 93a: 92 95 swap r25 + 93c: 90 7f andi r25, 0xF0 ; 240 + 93e: 98 27 eor r25, r24 + 940: 80 7f andi r24, 0xF0 ; 240 + 942: 98 27 eor r25, r24 + 944: 68 2f mov r22, r24 + 946: 69 60 ori r22, 0x09 ; 9 + 948: 04 c0 rjmp .+8 ; 0x952 <__stack+0x53> + else + curent_months = ((curent_months&0x0F)-1)|(curent_months&0xF0); //Décrémente de 1 + 94a: 91 50 subi r25, 0x01 ; 1 + 94c: 80 7f andi r24, 0xF0 ; 240 + 94e: 69 2f mov r22, r25 + 950: 68 2b or r22, r24 + if(curent_months < 0x01) + 952: 61 11 cpse r22, r1 + 954: 01 c0 rjmp .+2 ; 0x958 <__stack+0x59> + curent_months = 0x12; + 956: 6c 2d mov r22, r12 + rtc.w_moi(curent_months); //Met à jour le DS1307 + 958: 8d e0 ldi r24, 0x0D ; 13 + 95a: 91 e0 ldi r25, 0x01 ; 1 + 95c: 0e 94 e6 0a call 0x15cc ; 0x15cc <_ZN6ds13075w_moiEh> + 960: 2e c1 rjmp .+604 ; 0xbbe <__stack+0x2bf> + } + break; + case 6: //Config de l'année + if(a > tmps_clignotement) //Clignotement + 962: 05 36 cpi r16, 0x65 ; 101 + 964: 11 05 cpc r17, r1 + 966: 34 f0 brlt .+12 ; 0x974 <__stack+0x75> + clignotement(SR_ANNEE, true); + 968: 6d 2d mov r22, r13 + 96a: 82 e0 ldi r24, 0x02 ; 2 + 96c: 90 e0 ldi r25, 0x00 ; 0 + 96e: 0e 94 45 01 call 0x28a ; 0x28a <_Z12clignotementib> + 972: 02 c0 rjmp .+4 ; 0x978 <__stack+0x79> + else + affichage_date(); + 974: 0e 94 eb 00 call 0x1d6 ; 0x1d6 <_Z14affichage_datev> + if(PINB & (1< + 97c: 8e 2d mov r24, r14 + 97e: 9f 2d mov r25, r15 + { + for(int b = 0 ; b < tmps_max_bp_plus_moins && (PINB & (1< + 984: ff c0 rjmp .+510 ; 0xb84 <__stack+0x285> + _delay_ms(1); + uint8_t curent_year = rtc.r_year();//Lecture du temps DS1307 + if((curent_year&0x0F) == 0x09) // Si 1e digit = 9 + curent_year = (((curent_year&0xF0)>>4)+1)<<4; //Incrémente de 10 + 986: 80 7f andi r24, 0xF0 ; 240 + 988: 60 e1 ldi r22, 0x10 ; 16 + 98a: 68 0f add r22, r24 + 98c: 04 c0 rjmp .+8 ; 0x996 <__stack+0x97> + else + curent_year = ((curent_year&0x0F)+1)|(curent_year&0xF0); //Incrémente de 1 + 98e: 9f 5f subi r25, 0xFF ; 255 + 990: 80 7f andi r24, 0xF0 ; 240 + 992: 69 2f mov r22, r25 + 994: 68 2b or r22, r24 + if(curent_year > 0x99) + 996: 6a 39 cpi r22, 0x9A ; 154 + 998: 08 f0 brcs .+2 ; 0x99c <__stack+0x9d> + curent_year = 0x00; + 99a: 60 e0 ldi r22, 0x00 ; 0 + rtc.w_year(curent_year); //Met à jour le DS1307 + 99c: 8d e0 ldi r24, 0x0D ; 13 + 99e: 91 e0 ldi r25, 0x01 ; 1 + 9a0: 0e 94 ec 0a call 0x15d8 ; 0x15d8 <_ZN6ds13076w_yearEh> + 9a4: 0c c1 rjmp .+536 ; 0xbbe <__stack+0x2bf> + } + else if(PINB & (1< + 9aa: 8e 2d mov r24, r14 + 9ac: 9f 2d mov r25, r15 + { + for(int b = 0 ; b < tmps_max_bp_plus_moins && (PINB & 1< + 9b2: f2 c0 rjmp .+484 ; 0xb98 <__stack+0x299> + _delay_ms(1); + uint8_t curent_year = rtc.r_year();//Lecture du temps DS1307 + if((curent_year&0x0F) == 0 && curent_year != 0x00) // Si 1e digit = 0 + 9b4: 88 23 and r24, r24 + 9b6: a1 f0 breq .+40 ; 0x9e0 <__stack+0xe1> + curent_year = ((((curent_year&0xF0)>>4)-1)<<4)|0x09; //Décrémente de 10 + 9b8: 82 95 swap r24 + 9ba: 8f 70 andi r24, 0x0F ; 15 + 9bc: 90 e0 ldi r25, 0x00 ; 0 + 9be: 01 97 sbiw r24, 0x01 ; 1 + 9c0: 82 95 swap r24 + 9c2: 92 95 swap r25 + 9c4: 90 7f andi r25, 0xF0 ; 240 + 9c6: 98 27 eor r25, r24 + 9c8: 80 7f andi r24, 0xF0 ; 240 + 9ca: 98 27 eor r25, r24 + 9cc: 68 2f mov r22, r24 + 9ce: 69 60 ori r22, 0x09 ; 9 + 9d0: 0a c0 rjmp .+20 ; 0x9e6 <__stack+0xe7> + else if (curent_year != 0x00) + 9d2: 88 23 and r24, r24 + 9d4: 39 f0 breq .+14 ; 0x9e4 <__stack+0xe5> + curent_year = ((curent_year&0x0F)-1)|(curent_year&0xF0); //Décrémente de 1 + 9d6: 91 50 subi r25, 0x01 ; 1 + 9d8: 80 7f andi r24, 0xF0 ; 240 + 9da: 69 2f mov r22, r25 + 9dc: 68 2b or r22, r24 + 9de: 03 c0 rjmp .+6 ; 0x9e6 <__stack+0xe7> + else + curent_year = 0x99; + 9e0: 6b 2d mov r22, r11 + 9e2: 01 c0 rjmp .+2 ; 0x9e6 <__stack+0xe7> + 9e4: 6b 2d mov r22, r11 + rtc.w_year(curent_year); //Met à jour le DS1307 + 9e6: 8d e0 ldi r24, 0x0D ; 13 + 9e8: 91 e0 ldi r25, 0x01 ; 1 + 9ea: 0e 94 ec 0a call 0x15d8 ; 0x15d8 <_ZN6ds13076w_yearEh> + 9ee: e7 c0 rjmp .+462 ; 0xbbe <__stack+0x2bf> + } + break; + + } + PORTC &= LOW(1< + 9fe: 00 c0 rjmp .+0 ; 0xa00 <__stack+0x101> + a00: 00 00 nop + if (PINB & (1< + a08: e6 c0 rjmp .+460 ; 0xbd6 <__stack+0x2d7> + a0a: 5b ce rjmp .-842 ; 0x6c2 <_Z6boutonv+0x2c> + { + if(a >= (tmps_clignotement*2)) + a = 0; + a0c: c1 e0 ldi r28, 0x01 ; 1 + a0e: d0 e0 ldi r29, 0x00 ; 0 + a10: 00 e0 ldi r16, 0x00 ; 0 + a12: 10 e0 ldi r17, 0x00 ; 0 + curent_heur = 0x00; + else + curent_heur = ((curent_heur&0x0F)+1)|(curent_heur&0xF0); //Incrémente de 1 + rtc.w_heur(curent_heur, 0); //Met à jour le DS1307 + } + else if(PINB & (1<>4)-1)<<4)|0x09; //Décrémente de 10 + else + curent_months = ((curent_months&0x0F)-1)|(curent_months&0xF0); //Décrémente de 1 + if(curent_months < 0x01) + curent_months = 0x12; + a24: 0f 2e mov r0, r31 + a26: f2 e1 ldi r31, 0x12 ; 18 + a28: cf 2e mov r12, r31 + a2a: f0 2d mov r31, r0 + if((curent_months&0x0F) == 0x09) // Si 1e digit = 9 + curent_months = (((curent_months&0xF0)>>4)+1)<<4; //Incrémente de 10 + else + curent_months = ((curent_months&0x0F)+1)|(curent_months&0xF0); //Incrémente de 1 + if(curent_months > 0x12) + curent_months = 0x01; + a2c: dd 24 eor r13, r13 + a2e: d3 94 inc r13 + if((curent_year&0x0F) == 0 && curent_year != 0x00) // Si 1e digit = 0 + curent_year = ((((curent_year&0xF0)>>4)-1)<<4)|0x09; //Décrémente de 10 + else if (curent_year != 0x00) + curent_year = ((curent_year&0x0F)-1)|(curent_year&0xF0); //Décrémente de 1 + else + curent_year = 0x99; + a30: 0f 2e mov r0, r31 + a32: f9 e9 ldi r31, 0x99 ; 153 + a34: bf 2e mov r11, r31 + a36: f0 2d mov r31, r0 + a38: 4b ce rjmp .-874 ; 0x6d0 <_Z6boutonv+0x3a> + affichage_heur(); + if(PINB & (1< + if((curent_minute&0x0F) == 0x09) // Si 1e digit = 9 + a42: 98 2f mov r25, r24 + a44: 9f 70 andi r25, 0x0F ; 15 + a46: 99 30 cpi r25, 0x09 ; 9 + a48: 09 f0 breq .+2 ; 0xa4c <__stack+0x14d> + a4a: 91 ce rjmp .-734 ; 0x76e <_Z6boutonv+0xd8> + a4c: 8c ce rjmp .-744 ; 0x766 <_Z6boutonv+0xd0> + a4e: ef e9 ldi r30, 0x9F ; 159 + a50: ff e0 ldi r31, 0x0F ; 15 + a52: 31 97 sbiw r30, 0x01 ; 1 + a54: f1 f7 brne .-4 ; 0xa52 <__stack+0x153> + a56: 00 c0 rjmp .+0 ; 0xa58 <__stack+0x159> + a58: 00 00 nop + a5a: 01 97 sbiw r24, 0x01 ; 1 + clignotement(SR_MINUTE, false); + else + affichage_heur(); + if(PINB & (1< + a60: 7f ce rjmp .-770 ; 0x760 <_Z6boutonv+0xca> + } + else if(PINB & (1< + if((curent_minute&0x0F) == 0x00) // Si 1e digit = 0 + a6a: 98 2f mov r25, r24 + a6c: 9f 70 andi r25, 0x0F ; 15 + a6e: 09 f4 brne .+2 ; 0xa72 <__stack+0x173> + a70: 8f ce rjmp .-738 ; 0x790 <_Z6boutonv+0xfa> + a72: 9c ce rjmp .-712 ; 0x7ac <_Z6boutonv+0x116> + a74: ef e9 ldi r30, 0x9F ; 159 + a76: ff e0 ldi r31, 0x0F ; 15 + a78: 31 97 sbiw r30, 0x01 ; 1 + a7a: f1 f7 brne .-4 ; 0xa78 <__stack+0x179> + a7c: 00 c0 rjmp .+0 ; 0xa7e <__stack+0x17f> + a7e: 00 00 nop + a80: 01 97 sbiw r24, 0x01 ; 1 + curent_minute = 0x00; + rtc.w_minute(curent_minute); //Met à jour le DS1307 + } + else if(PINB & (1< + a86: 81 ce rjmp .-766 ; 0x78a <_Z6boutonv+0xf4> + affichage_heur(); + if(PINB & (1< + if((curent_heur&0x0F) == 0x09) // Si 1e digit = 9 + a90: 98 2f mov r25, r24 + a92: 9f 70 andi r25, 0x0F ; 15 + a94: 99 30 cpi r25, 0x09 ; 9 + a96: 09 f0 breq .+2 ; 0xa9a <__stack+0x19b> + a98: ae ce rjmp .-676 ; 0x7f6 <_Z6boutonv+0x160> + a9a: a9 ce rjmp .-686 ; 0x7ee <_Z6boutonv+0x158> + a9c: ef e9 ldi r30, 0x9F ; 159 + a9e: ff e0 ldi r31, 0x0F ; 15 + aa0: 31 97 sbiw r30, 0x01 ; 1 + aa2: f1 f7 brne .-4 ; 0xaa0 <__stack+0x1a1> + aa4: 00 c0 rjmp .+0 ; 0xaa6 <__stack+0x1a7> + aa6: 00 00 nop + aa8: 01 97 sbiw r24, 0x01 ; 1 + clignotement(SR_HEUR, false); + else + affichage_heur(); + if(PINB & (1< + aae: 9c ce rjmp .-712 ; 0x7e8 <_Z6boutonv+0x152> + } + else if(PINB & (1< + if(curent_heur == 0x00) //Si arrive à 00H, /!\ Attention ne décrémente pas la date !! + ab8: 88 23 and r24, r24 + aba: 09 f4 brne .+2 ; 0xabe <__stack+0x1bf> + abc: c6 ce rjmp .-628 ; 0x84a <_Z6boutonv+0x1b4> + abe: b0 ce rjmp .-672 ; 0x820 <_Z6boutonv+0x18a> + ac0: ef e9 ldi r30, 0x9F ; 159 + ac2: ff e0 ldi r31, 0x0F ; 15 + ac4: 31 97 sbiw r30, 0x01 ; 1 + ac6: f1 f7 brne .-4 ; 0xac4 <__stack+0x1c5> + ac8: 00 c0 rjmp .+0 ; 0xaca <__stack+0x1cb> + aca: 00 00 nop + acc: 01 97 sbiw r24, 0x01 ; 1 + curent_heur = ((curent_heur&0x0F)+1)|(curent_heur&0xF0); //Incrémente de 1 + rtc.w_heur(curent_heur, 0); //Met à jour le DS1307 + } + else if(PINB & (1< + ad2: a3 ce rjmp .-698 ; 0x81a <_Z6boutonv+0x184> + affichage_date(); + if(PINB & (1< + if((curent_day&0x0F) == 0x09) // Si 1e digit = 9 + adc: 98 2f mov r25, r24 + ade: 9f 70 andi r25, 0x0F ; 15 + ae0: 99 30 cpi r25, 0x09 ; 9 + ae2: 09 f0 breq .+2 ; 0xae6 <__stack+0x1e7> + ae4: d0 ce rjmp .-608 ; 0x886 <_Z6boutonv+0x1f0> + ae6: cb ce rjmp .-618 ; 0x87e <_Z6boutonv+0x1e8> + ae8: ef e9 ldi r30, 0x9F ; 159 + aea: ff e0 ldi r31, 0x0F ; 15 + aec: 31 97 sbiw r30, 0x01 ; 1 + aee: f1 f7 brne .-4 ; 0xaec <__stack+0x1ed> + af0: 00 c0 rjmp .+0 ; 0xaf2 <__stack+0x1f3> + af2: 00 00 nop + af4: 01 97 sbiw r24, 0x01 ; 1 + clignotement(SR_JOURS, true); + else + affichage_date(); + if(PINB & (1< + afa: be ce rjmp .-644 ; 0x878 <_Z6boutonv+0x1e2> + } + else if(PINB & (1< + if((curent_heur&0x0F) == 0) // Si 1e digit = 0 + b04: 98 2f mov r25, r24 + b06: 9f 70 andi r25, 0x0F ; 15 + b08: 09 f4 brne .+2 ; 0xb0c <__stack+0x20d> + b0a: d0 ce rjmp .-608 ; 0x8ac <_Z6boutonv+0x216> + b0c: dc ce rjmp .-584 ; 0x8c6 <_Z6boutonv+0x230> + b0e: ef e9 ldi r30, 0x9F ; 159 + b10: ff e0 ldi r31, 0x0F ; 15 + b12: 31 97 sbiw r30, 0x01 ; 1 + b14: f1 f7 brne .-4 ; 0xb12 <__stack+0x213> + b16: 00 c0 rjmp .+0 ; 0xb18 <__stack+0x219> + b18: 00 00 nop + b1a: 01 97 sbiw r24, 0x01 ; 1 + curent_day = 0x00; + rtc.w_date(curent_day); //Met à jour le DS1307 + } + else if(PINB & (1< + b20: c2 ce rjmp .-636 ; 0x8a6 <_Z6boutonv+0x210> + affichage_date(); + if(PINB & (1< + if((curent_months&0x0F) == 0x09) // Si 1e digit = 9 + b2a: 98 2f mov r25, r24 + b2c: 9f 70 andi r25, 0x0F ; 15 + b2e: 99 30 cpi r25, 0x09 ; 9 + b30: 09 f0 breq .+2 ; 0xb34 <__stack+0x235> + b32: eb ce rjmp .-554 ; 0x90a <__stack+0xb> + b34: e6 ce rjmp .-564 ; 0x902 <__stack+0x3> + b36: ef e9 ldi r30, 0x9F ; 159 + b38: ff e0 ldi r31, 0x0F ; 15 + b3a: 31 97 sbiw r30, 0x01 ; 1 + b3c: f1 f7 brne .-4 ; 0xb3a <__stack+0x23b> + b3e: 00 c0 rjmp .+0 ; 0xb40 <__stack+0x241> + b40: 00 00 nop + b42: 01 97 sbiw r24, 0x01 ; 1 + clignotement(SR_MOIS, true); + else + affichage_date(); + if(PINB & (1< + b48: d9 ce rjmp .-590 ; 0x8fc <_Z6boutonv+0x266> + } + else if(PINB & (1< + if((curent_months&0x0F) == 0) // Si 1e digit = 0 + b52: 98 2f mov r25, r24 + b54: 9f 70 andi r25, 0x0F ; 15 + b56: 09 f4 brne .+2 ; 0xb5a <__stack+0x25b> + b58: eb ce rjmp .-554 ; 0x930 <__stack+0x31> + b5a: f7 ce rjmp .-530 ; 0x94a <__stack+0x4b> + b5c: ef e9 ldi r30, 0x9F ; 159 + b5e: ff e0 ldi r31, 0x0F ; 15 + b60: 31 97 sbiw r30, 0x01 ; 1 + b62: f1 f7 brne .-4 ; 0xb60 <__stack+0x261> + b64: 00 c0 rjmp .+0 ; 0xb66 <__stack+0x267> + b66: 00 00 nop + b68: 01 97 sbiw r24, 0x01 ; 1 + curent_months = 0x01; + rtc.w_moi(curent_months); //Met à jour le DS1307 + } + else if(PINB & (1< + b6e: dd ce rjmp .-582 ; 0x92a <__stack+0x2b> + b70: ef e9 ldi r30, 0x9F ; 159 + b72: ff e0 ldi r31, 0x0F ; 15 + b74: 31 97 sbiw r30, 0x01 ; 1 + b76: f1 f7 brne .-4 ; 0xb74 <__stack+0x275> + b78: 00 c0 rjmp .+0 ; 0xb7a <__stack+0x27b> + b7a: 00 00 nop + b7c: 01 97 sbiw r24, 0x01 ; 1 + clignotement(SR_ANNEE, true); + else + affichage_date(); + if(PINB & (1< + b82: fe ce rjmp .-516 ; 0x980 <__stack+0x81> + _delay_ms(1); + uint8_t curent_year = rtc.r_year();//Lecture du temps DS1307 + b84: 8d e0 ldi r24, 0x0D ; 13 + b86: 91 e0 ldi r25, 0x01 ; 1 + b88: 0e 94 c4 0a call 0x1588 ; 0x1588 <_ZN6ds13076r_yearEv> + if((curent_year&0x0F) == 0x09) // Si 1e digit = 9 + b8c: 98 2f mov r25, r24 + b8e: 9f 70 andi r25, 0x0F ; 15 + b90: 99 30 cpi r25, 0x09 ; 9 + b92: 09 f0 breq .+2 ; 0xb96 <__stack+0x297> + b94: fc ce rjmp .-520 ; 0x98e <__stack+0x8f> + b96: f7 ce rjmp .-530 ; 0x986 <__stack+0x87> + } + else if(PINB & (1< + if((curent_year&0x0F) == 0 && curent_year != 0x00) // Si 1e digit = 0 + ba0: 98 2f mov r25, r24 + ba2: 9f 70 andi r25, 0x0F ; 15 + ba4: 09 f4 brne .+2 ; 0xba8 <__stack+0x2a9> + ba6: 06 cf rjmp .-500 ; 0x9b4 <__stack+0xb5> + ba8: 14 cf rjmp .-472 ; 0x9d2 <__stack+0xd3> + baa: ef e9 ldi r30, 0x9F ; 159 + bac: ff e0 ldi r31, 0x0F ; 15 + bae: 31 97 sbiw r30, 0x01 ; 1 + bb0: f1 f7 brne .-4 ; 0xbae <__stack+0x2af> + bb2: 00 c0 rjmp .+0 ; 0xbb4 <__stack+0x2b5> + bb4: 00 00 nop + bb6: 01 97 sbiw r24, 0x01 ; 1 + curent_year = 0x00; + rtc.w_year(curent_year); //Met à jour le DS1307 + } + else if(PINB & (1< + bbc: f8 ce rjmp .-528 ; 0x9ae <__stack+0xaf> + rtc.w_year(curent_year); //Met à jour le DS1307 + } + break; + + } + PORTC &= LOW(1< + bcc: 00 c0 rjmp .+0 ; 0xbce <__stack+0x2cf> + bce: 00 00 nop + if (PINB & (1< + } + PORTC &= LOW(1<: +void uart_ds1307() +{ + bea: cf 92 push r12 + bec: df 92 push r13 + bee: ef 92 push r14 + bf0: ff 92 push r15 + bf2: 0f 93 push r16 + bf4: 1f 93 push r17 + bf6: cf 93 push r28 + bf8: df 93 push r29 + if(usart == 0xCF) + bfa: 80 91 02 01 lds r24, 0x0102 + bfe: 8f 3c cpi r24, 0xCF ; 207 + c00: 09 f0 breq .+2 ; 0xc04 <_Z11uart_ds1307v+0x1a> + c02: bd c0 rjmp .+378 ; 0xd7e <_Z11uart_ds1307v+0x194> + c04: b1 c0 rjmp .+354 ; 0xd68 <_Z11uart_ds1307v+0x17e> + bool cfg = true; + for(int a = 0; cfg ; a++) + { + usart = USART_Receive(); + if(a>100) + a=0; + c06: 0c 2d mov r16, r12 + c08: 1d 2d mov r17, r13 + if(usart == 0xC1) + c0a: 81 3c cpi r24, 0xC1 ; 193 + c0c: 49 f5 brne .+82 ; 0xc60 <_Z11uart_ds1307v+0x76> + { + usart = USART_Receive(); + c0e: 0e 94 36 0b call 0x166c ; 0x166c <_Z13USART_Receivev> + c12: 80 93 02 01 sts 0x0102, r24 + for(int b = 0; !usart ; b++) + c16: 88 23 and r24, r24 + c18: 09 f4 brne .+2 ; 0xc1c <_Z11uart_ds1307v+0x32> + c1a: 9d c0 rjmp .+314 ; 0xd56 <_Z11uart_ds1307v+0x16c> + c1c: 16 c0 rjmp .+44 ; 0xc4a <_Z11uart_ds1307v+0x60> + { + usart = USART_Receive(); + c1e: 0e 94 36 0b call 0x166c ; 0x166c <_Z13USART_Receivev> + c22: 80 93 02 01 sts 0x0102, r24 + affichage_heur(); + c26: 0e 94 98 00 call 0x130 ; 0x130 <_Z14affichage_heurv> + if(b>100) + c2a: c5 36 cpi r28, 0x65 ; 101 + c2c: d1 05 cpc r29, r1 + c2e: 14 f0 brlt .+4 ; 0xc34 <_Z11uart_ds1307v+0x4a> + b=0; + c30: ce 2d mov r28, r14 + c32: df 2d mov r29, r15 + c34: 8f e9 ldi r24, 0x9F ; 159 + c36: 9f e0 ldi r25, 0x0F ; 15 + c38: 01 97 sbiw r24, 0x01 ; 1 + c3a: f1 f7 brne .-4 ; 0xc38 <_Z11uart_ds1307v+0x4e> + c3c: 00 c0 rjmp .+0 ; 0xc3e <_Z11uart_ds1307v+0x54> + c3e: 00 00 nop + if(a>100) + a=0; + if(usart == 0xC1) + { + usart = USART_Receive(); + for(int b = 0; !usart ; b++) + c40: 21 96 adiw r28, 0x01 ; 1 + c42: 80 91 02 01 lds r24, 0x0102 + c46: 88 23 and r24, r24 + c48: 51 f3 breq .-44 ; 0xc1e <_Z11uart_ds1307v+0x34> + affichage_heur(); + if(b>100) + b=0; + _delay_ms(1); + } + rtc.w_seconde(int_to_bcd(usart)); + c4a: 90 e0 ldi r25, 0x00 ; 0 + c4c: 0e 94 60 00 call 0xc0 ; 0xc0 <_Z10int_to_bcdi> + c50: 68 2f mov r22, r24 + c52: 8d e0 ldi r24, 0x0D ; 13 + c54: 91 e0 ldi r25, 0x01 ; 1 + c56: 0e 94 c8 0a call 0x1590 ; 0x1590 <_ZN6ds13079w_secondeEh> + USART_Transmit(0xC1); + c5a: 81 ec ldi r24, 0xC1 ; 193 + c5c: 0e 94 2e 0b call 0x165c ; 0x165c <_Z14USART_Transmith> + } + if(usart == 0xC2) + c60: 80 91 02 01 lds r24, 0x0102 + c64: 82 3c cpi r24, 0xC2 ; 194 + c66: 49 f5 brne .+82 ; 0xcba <_Z11uart_ds1307v+0xd0> + { + usart = USART_Receive(); + c68: 0e 94 36 0b call 0x166c ; 0x166c <_Z13USART_Receivev> + c6c: 80 93 02 01 sts 0x0102, r24 + for(int b = 0; !usart ; b++) + c70: 88 23 and r24, r24 + c72: 09 f4 brne .+2 ; 0xc76 <_Z11uart_ds1307v+0x8c> + c74: 67 c0 rjmp .+206 ; 0xd44 <_Z11uart_ds1307v+0x15a> + c76: 16 c0 rjmp .+44 ; 0xca4 <_Z11uart_ds1307v+0xba> + { + usart = USART_Receive(); + c78: 0e 94 36 0b call 0x166c ; 0x166c <_Z13USART_Receivev> + c7c: 80 93 02 01 sts 0x0102, r24 + affichage_heur(); + c80: 0e 94 98 00 call 0x130 ; 0x130 <_Z14affichage_heurv> + if(b>100) + c84: c5 36 cpi r28, 0x65 ; 101 + c86: d1 05 cpc r29, r1 + c88: 14 f0 brlt .+4 ; 0xc8e <_Z11uart_ds1307v+0xa4> + b=0; + c8a: ce 2d mov r28, r14 + c8c: df 2d mov r29, r15 + c8e: 8f e9 ldi r24, 0x9F ; 159 + c90: 9f e0 ldi r25, 0x0F ; 15 + c92: 01 97 sbiw r24, 0x01 ; 1 + c94: f1 f7 brne .-4 ; 0xc92 <_Z11uart_ds1307v+0xa8> + c96: 00 c0 rjmp .+0 ; 0xc98 <_Z11uart_ds1307v+0xae> + c98: 00 00 nop + USART_Transmit(0xC1); + } + if(usart == 0xC2) + { + usart = USART_Receive(); + for(int b = 0; !usart ; b++) + c9a: 21 96 adiw r28, 0x01 ; 1 + c9c: 80 91 02 01 lds r24, 0x0102 + ca0: 88 23 and r24, r24 + ca2: 51 f3 breq .-44 ; 0xc78 <_Z11uart_ds1307v+0x8e> + affichage_heur(); + if(b>100) + b=0; + _delay_ms(1); + } + rtc.w_minute(int_to_bcd(usart)); + ca4: 90 e0 ldi r25, 0x00 ; 0 + ca6: 0e 94 60 00 call 0xc0 ; 0xc0 <_Z10int_to_bcdi> + caa: 68 2f mov r22, r24 + cac: 8d e0 ldi r24, 0x0D ; 13 + cae: 91 e0 ldi r25, 0x01 ; 1 + cb0: 0e 94 ce 0a call 0x159c ; 0x159c <_ZN6ds13078w_minuteEh> + USART_Transmit(0xC2); + cb4: 82 ec ldi r24, 0xC2 ; 194 + cb6: 0e 94 2e 0b call 0x165c ; 0x165c <_Z14USART_Transmith> + } + if(usart == 0xC3) + cba: 80 91 02 01 lds r24, 0x0102 + cbe: 83 3c cpi r24, 0xC3 ; 195 + cc0: 49 f5 brne .+82 ; 0xd14 <_Z11uart_ds1307v+0x12a> + { + usart = USART_Receive(); + cc2: 0e 94 36 0b call 0x166c ; 0x166c <_Z13USART_Receivev> + cc6: 80 93 02 01 sts 0x0102, r24 + for(int b = 0; !usart ; b++) + cca: 88 23 and r24, r24 + ccc: 91 f1 breq .+100 ; 0xd32 <_Z11uart_ds1307v+0x148> + cce: 16 c0 rjmp .+44 ; 0xcfc <_Z11uart_ds1307v+0x112> + { + usart = USART_Receive(); + cd0: 0e 94 36 0b call 0x166c ; 0x166c <_Z13USART_Receivev> + cd4: 80 93 02 01 sts 0x0102, r24 + affichage_heur(); + cd8: 0e 94 98 00 call 0x130 ; 0x130 <_Z14affichage_heurv> + if(b>100) + cdc: c5 36 cpi r28, 0x65 ; 101 + cde: d1 05 cpc r29, r1 + ce0: 14 f0 brlt .+4 ; 0xce6 <_Z11uart_ds1307v+0xfc> + b=0; + ce2: ce 2d mov r28, r14 + ce4: df 2d mov r29, r15 + ce6: 8f e9 ldi r24, 0x9F ; 159 + ce8: 9f e0 ldi r25, 0x0F ; 15 + cea: 01 97 sbiw r24, 0x01 ; 1 + cec: f1 f7 brne .-4 ; 0xcea <_Z11uart_ds1307v+0x100> + cee: 00 c0 rjmp .+0 ; 0xcf0 <_Z11uart_ds1307v+0x106> + cf0: 00 00 nop + USART_Transmit(0xC2); + } + if(usart == 0xC3) + { + usart = USART_Receive(); + for(int b = 0; !usart ; b++) + cf2: 21 96 adiw r28, 0x01 ; 1 + cf4: 80 91 02 01 lds r24, 0x0102 + cf8: 88 23 and r24, r24 + cfa: 51 f3 breq .-44 ; 0xcd0 <_Z11uart_ds1307v+0xe6> + affichage_heur(); + if(b>100) + b=0; + _delay_ms(1); + } + rtc.w_heur(int_to_bcd(usart), 0); + cfc: 90 e0 ldi r25, 0x00 ; 0 + cfe: 0e 94 60 00 call 0xc0 ; 0xc0 <_Z10int_to_bcdi> + d02: 40 e0 ldi r20, 0x00 ; 0 + d04: 68 2f mov r22, r24 + d06: 8d e0 ldi r24, 0x0D ; 13 + d08: 91 e0 ldi r25, 0x01 ; 1 + d0a: 0e 94 d4 0a call 0x15a8 ; 0x15a8 <_ZN6ds13076w_heurEhh> + USART_Transmit(0xC3); + d0e: 83 ec ldi r24, 0xC3 ; 195 + d10: 0e 94 2e 0b call 0x165c ; 0x165c <_Z14USART_Transmith> + } + if(usart == 0xC4) + d14: 80 91 02 01 lds r24, 0x0102 + d18: 84 3c cpi r24, 0xC4 ; 196 + d1a: 89 f1 breq .+98 ; 0xd7e <_Z11uart_ds1307v+0x194> +void uart_ds1307() +{ + if(usart == 0xCF) + { + bool cfg = true; + for(int a = 0; cfg ; a++) + d1c: 0f 5f subi r16, 0xFF ; 255 + d1e: 1f 4f sbci r17, 0xFF ; 255 + { + usart = USART_Receive(); + d20: 0e 94 36 0b call 0x166c ; 0x166c <_Z13USART_Receivev> + d24: 80 93 02 01 sts 0x0102, r24 + if(a>100) + d28: 05 36 cpi r16, 0x65 ; 101 + d2a: 11 05 cpc r17, r1 + d2c: 0c f0 brlt .+2 ; 0xd30 <_Z11uart_ds1307v+0x146> + d2e: 6b cf rjmp .-298 ; 0xc06 <_Z11uart_ds1307v+0x1c> + d30: 6c cf rjmp .-296 ; 0xc0a <_Z11uart_ds1307v+0x20> + if(usart == 0xC3) + { + usart = USART_Receive(); + for(int b = 0; !usart ; b++) + { + usart = USART_Receive(); + d32: 0e 94 36 0b call 0x166c ; 0x166c <_Z13USART_Receivev> + d36: 80 93 02 01 sts 0x0102, r24 + affichage_heur(); + d3a: 0e 94 98 00 call 0x130 ; 0x130 <_Z14affichage_heurv> + USART_Transmit(0xC2); + } + if(usart == 0xC3) + { + usart = USART_Receive(); + for(int b = 0; !usart ; b++) + d3e: cc 2d mov r28, r12 + d40: dd 2d mov r29, r13 + d42: d1 cf rjmp .-94 ; 0xce6 <_Z11uart_ds1307v+0xfc> + if(usart == 0xC2) + { + usart = USART_Receive(); + for(int b = 0; !usart ; b++) + { + usart = USART_Receive(); + d44: 0e 94 36 0b call 0x166c ; 0x166c <_Z13USART_Receivev> + d48: 80 93 02 01 sts 0x0102, r24 + affichage_heur(); + d4c: 0e 94 98 00 call 0x130 ; 0x130 <_Z14affichage_heurv> + USART_Transmit(0xC1); + } + if(usart == 0xC2) + { + usart = USART_Receive(); + for(int b = 0; !usart ; b++) + d50: cc 2d mov r28, r12 + d52: dd 2d mov r29, r13 + d54: 9c cf rjmp .-200 ; 0xc8e <_Z11uart_ds1307v+0xa4> + if(usart == 0xC1) + { + usart = USART_Receive(); + for(int b = 0; !usart ; b++) + { + usart = USART_Receive(); + d56: 0e 94 36 0b call 0x166c ; 0x166c <_Z13USART_Receivev> + d5a: 80 93 02 01 sts 0x0102, r24 + affichage_heur(); + d5e: 0e 94 98 00 call 0x130 ; 0x130 <_Z14affichage_heurv> + if(a>100) + a=0; + if(usart == 0xC1) + { + usart = USART_Receive(); + for(int b = 0; !usart ; b++) + d62: cc 2d mov r28, r12 + d64: dd 2d mov r29, r13 + d66: 66 cf rjmp .-308 ; 0xc34 <_Z11uart_ds1307v+0x4a> + if(usart == 0xCF) + { + bool cfg = true; + for(int a = 0; cfg ; a++) + { + usart = USART_Receive(); + d68: 0e 94 36 0b call 0x166c ; 0x166c <_Z13USART_Receivev> + d6c: 80 93 02 01 sts 0x0102, r24 + d70: 00 e0 ldi r16, 0x00 ; 0 + d72: 10 e0 ldi r17, 0x00 ; 0 + if(a>100) + a=0; + if(usart == 0xC1) + { + usart = USART_Receive(); + for(int b = 0; !usart ; b++) + d74: c1 2c mov r12, r1 + d76: d1 2c mov r13, r1 + { + usart = USART_Receive(); + affichage_heur(); + if(b>100) + b=0; + d78: ec 2c mov r14, r12 + d7a: fd 2c mov r15, r13 + d7c: 46 cf rjmp .-372 ; 0xc0a <_Z11uart_ds1307v+0x20> + { + cfg =false; + } + } + } +} + d7e: df 91 pop r29 + d80: cf 91 pop r28 + d82: 1f 91 pop r17 + d84: 0f 91 pop r16 + d86: ff 90 pop r15 + d88: ef 90 pop r14 + d8a: df 90 pop r13 + d8c: cf 90 pop r12 + d8e: 08 95 ret + +00000d90 <_GLOBAL__sub_I_rtc>: + d90: 0f 93 push r16 + d92: 1f 93 push r17 + + + +/* Création des objets */ + +ds1307 rtc; + d94: 8d e0 ldi r24, 0x0D ; 13 + d96: 91 e0 ldi r25, 0x01 ; 1 + d98: 0e 94 1e 0a call 0x143c ; 0x143c <_ZN6ds1307C1Ev> +hc74595 shiftRegister(SHIFT_REGISTER_DATA, SHIFT_REGISTER_CLK, SHIFT_REGISTER_CONFIRM, &PORTD); + d9c: 0b e2 ldi r16, 0x2B ; 43 + d9e: 10 e0 ldi r17, 0x00 ; 0 + da0: 25 e0 ldi r18, 0x05 ; 5 + da2: 30 e0 ldi r19, 0x00 ; 0 + da4: 47 e0 ldi r20, 0x07 ; 7 + da6: 50 e0 ldi r21, 0x00 ; 0 + da8: 66 e0 ldi r22, 0x06 ; 6 + daa: 70 e0 ldi r23, 0x00 ; 0 + dac: 83 e0 ldi r24, 0x03 ; 3 + dae: 91 e0 ldi r25, 0x01 ; 1 + db0: 0e 94 dd 06 call 0xdba ; 0xdba <_ZN7hc74595C1EiiiPVh> + { + cfg =false; + } + } + } +} + db4: 1f 91 pop r17 + db6: 0f 91 pop r16 + db8: 08 95 ret + +00000dba <_ZN7hc74595C1EiiiPVh>: +#define F_CPU 16000000UL +#include +#include +#include "hc74595.h" + +hc74595::hc74595(int data, int clk, int stcp,volatile uint8_t *port_uc/*, volatile uint8_t *ddr_uc*/) + dba: 0f 93 push r16 + dbc: 1f 93 push r17 + dbe: fc 01 movw r30, r24 +{ + pin_DATA = data; + dc0: 60 83 st Z, r22 + dc2: 71 83 std Z+1, r23 ; 0x01 + pin_CLK = clk; + dc4: 42 83 std Z+2, r20 ; 0x02 + dc6: 53 83 std Z+3, r21 ; 0x03 + pin_STCP = stcp; + dc8: 24 83 std Z+4, r18 ; 0x04 + dca: 35 83 std Z+5, r19 ; 0x05 + port = port_uc; + dcc: 17 83 std Z+7, r17 ; 0x07 + dce: 06 83 std Z+6, r16 ; 0x06 + ddr = --port_uc; + dd0: d8 01 movw r26, r16 + dd2: 11 97 sbiw r26, 0x01 ; 1 + dd4: b1 87 std Z+9, r27 ; 0x09 + dd6: a0 87 std Z+8, r26 ; 0x08 + *ddr |= (0x01 << data | 0x01 << clk | 0x01 << stcp); + dd8: 5c 91 ld r21, X + dda: 81 e0 ldi r24, 0x01 ; 1 + ddc: 90 e0 ldi r25, 0x00 ; 0 + dde: fc 01 movw r30, r24 + de0: 02 c0 rjmp .+4 ; 0xde6 <_ZN7hc74595C1EiiiPVh+0x2c> + de2: ee 0f add r30, r30 + de4: ff 1f adc r31, r31 + de6: 2a 95 dec r18 + de8: e2 f7 brpl .-8 ; 0xde2 <_ZN7hc74595C1EiiiPVh+0x28> + dea: 9f 01 movw r18, r30 + dec: 25 2b or r18, r21 + dee: fc 01 movw r30, r24 + df0: 02 c0 rjmp .+4 ; 0xdf6 <_ZN7hc74595C1EiiiPVh+0x3c> + df2: ee 0f add r30, r30 + df4: ff 1f adc r31, r31 + df6: 4a 95 dec r20 + df8: e2 f7 brpl .-8 ; 0xdf2 <_ZN7hc74595C1EiiiPVh+0x38> + dfa: af 01 movw r20, r30 + dfc: 42 2b or r20, r18 + dfe: 02 c0 rjmp .+4 ; 0xe04 <_ZN7hc74595C1EiiiPVh+0x4a> + e00: 88 0f add r24, r24 + e02: 99 1f adc r25, r25 + e04: 6a 95 dec r22 + e06: e2 f7 brpl .-8 ; 0xe00 <_ZN7hc74595C1EiiiPVh+0x46> + e08: 84 2b or r24, r20 + e0a: 8c 93 st X, r24 +} + e0c: 1f 91 pop r17 + e0e: 0f 91 pop r16 + e10: 08 95 ret + +00000e12 <_ZN7hc745954sendEhb>: +void hc74595::send(uint8_t data, bool inverted) //Envoi des donnée au Shift Register +{ + e12: 0f 93 push r16 + e14: 1f 93 push r17 + e16: cf 93 push r28 + e18: df 93 push r29 + e1a: fc 01 movw r30, r24 + + for(int a = 0; a < 8 ; a++) + e1c: 80 e0 ldi r24, 0x00 ; 0 + e1e: 90 e0 ldi r25, 0x00 ; 0 + *port &= ~(0x01 << pin_DATA); + *port|= 0x01 << pin_CLK; //Met l'orloge à 1 + } + else + { + *port &= ~(0x01 << pin_CLK); //Met l'orloge à 0 + e20: 21 e0 ldi r18, 0x01 ; 1 + e22: 30 e0 ldi r19, 0x00 ; 0 + if(data & (0x80 >> a)) //Regarde la valeur de chaque bit + e24: 00 e8 ldi r16, 0x80 ; 128 + e26: 10 e0 ldi r17, 0x00 ; 0 + e28: 70 e0 ldi r23, 0x00 ; 0 +void hc74595::send(uint8_t data, bool inverted) //Envoi des donnée au Shift Register +{ + + for(int a = 0; a < 8 ; a++) + { + if(!inverted) + e2a: 41 11 cpse r20, r1 + e2c: 3d c0 rjmp .+122 ; 0xea8 <_ZN7hc745954sendEhb+0x96> + { + *port &= ~(0x01 << pin_CLK); //Met l'orloge à 0 + e2e: a6 81 ldd r26, Z+6 ; 0x06 + e30: b7 81 ldd r27, Z+7 ; 0x07 + e32: 5c 91 ld r21, X + e34: e9 01 movw r28, r18 + e36: 02 80 ldd r0, Z+2 ; 0x02 + e38: 02 c0 rjmp .+4 ; 0xe3e <_ZN7hc745954sendEhb+0x2c> + e3a: cc 0f add r28, r28 + e3c: dd 1f adc r29, r29 + e3e: 0a 94 dec r0 + e40: e2 f7 brpl .-8 ; 0xe3a <_ZN7hc745954sendEhb+0x28> + e42: c0 95 com r28 + e44: c5 23 and r28, r21 + e46: cc 93 st X, r28 + if(data & (0x01 << a)) //Regarde la valeur de chaque bit + e48: db 01 movw r26, r22 + e4a: 08 2e mov r0, r24 + e4c: 02 c0 rjmp .+4 ; 0xe52 <_ZN7hc745954sendEhb+0x40> + e4e: b5 95 asr r27 + e50: a7 95 ror r26 + e52: 0a 94 dec r0 + e54: e2 f7 brpl .-8 ; 0xe4e <_ZN7hc745954sendEhb+0x3c> + e56: a0 ff sbrs r26, 0 + e58: 0d c0 rjmp .+26 ; 0xe74 <_ZN7hc745954sendEhb+0x62> + *port |= 0x01 << pin_DATA; + e5a: a6 81 ldd r26, Z+6 ; 0x06 + e5c: b7 81 ldd r27, Z+7 ; 0x07 + e5e: 5c 91 ld r21, X + e60: e9 01 movw r28, r18 + e62: 00 80 ld r0, Z + e64: 02 c0 rjmp .+4 ; 0xe6a <_ZN7hc745954sendEhb+0x58> + e66: cc 0f add r28, r28 + e68: dd 1f adc r29, r29 + e6a: 0a 94 dec r0 + e6c: e2 f7 brpl .-8 ; 0xe66 <_ZN7hc745954sendEhb+0x54> + e6e: c5 2b or r28, r21 + e70: cc 93 st X, r28 + e72: 0d c0 rjmp .+26 ; 0xe8e <_ZN7hc745954sendEhb+0x7c> + else + *port &= ~(0x01 << pin_DATA); + e74: a6 81 ldd r26, Z+6 ; 0x06 + e76: b7 81 ldd r27, Z+7 ; 0x07 + e78: 5c 91 ld r21, X + e7a: e9 01 movw r28, r18 + e7c: 00 80 ld r0, Z + e7e: 02 c0 rjmp .+4 ; 0xe84 <_ZN7hc745954sendEhb+0x72> + e80: cc 0f add r28, r28 + e82: dd 1f adc r29, r29 + e84: 0a 94 dec r0 + e86: e2 f7 brpl .-8 ; 0xe80 <_ZN7hc745954sendEhb+0x6e> + e88: c0 95 com r28 + e8a: c5 23 and r28, r21 + e8c: cc 93 st X, r28 + *port|= 0x01 << pin_CLK; //Met l'orloge à 1 + e8e: a6 81 ldd r26, Z+6 ; 0x06 + e90: b7 81 ldd r27, Z+7 ; 0x07 + e92: 5c 91 ld r21, X + e94: e9 01 movw r28, r18 + e96: 02 80 ldd r0, Z+2 ; 0x02 + e98: 02 c0 rjmp .+4 ; 0xe9e <_ZN7hc745954sendEhb+0x8c> + e9a: cc 0f add r28, r28 + e9c: dd 1f adc r29, r29 + e9e: 0a 94 dec r0 + ea0: e2 f7 brpl .-8 ; 0xe9a <_ZN7hc745954sendEhb+0x88> + ea2: c5 2b or r28, r21 + ea4: cc 93 st X, r28 + ea6: 3e c0 rjmp .+124 ; 0xf24 <_ZN7hc745954sendEhb+0x112> + } + else + { + *port &= ~(0x01 << pin_CLK); //Met l'orloge à 0 + ea8: a6 81 ldd r26, Z+6 ; 0x06 + eaa: b7 81 ldd r27, Z+7 ; 0x07 + eac: 5c 91 ld r21, X + eae: e9 01 movw r28, r18 + eb0: 02 80 ldd r0, Z+2 ; 0x02 + eb2: 02 c0 rjmp .+4 ; 0xeb8 <_ZN7hc745954sendEhb+0xa6> + eb4: cc 0f add r28, r28 + eb6: dd 1f adc r29, r29 + eb8: 0a 94 dec r0 + eba: e2 f7 brpl .-8 ; 0xeb4 <_ZN7hc745954sendEhb+0xa2> + ebc: c0 95 com r28 + ebe: c5 23 and r28, r21 + ec0: cc 93 st X, r28 + if(data & (0x80 >> a)) //Regarde la valeur de chaque bit + ec2: d8 01 movw r26, r16 + ec4: 08 2e mov r0, r24 + ec6: 02 c0 rjmp .+4 ; 0xecc <_ZN7hc745954sendEhb+0xba> + ec8: b5 95 asr r27 + eca: a7 95 ror r26 + ecc: 0a 94 dec r0 + ece: e2 f7 brpl .-8 ; 0xec8 <_ZN7hc745954sendEhb+0xb6> + ed0: a6 23 and r26, r22 + ed2: b7 23 and r27, r23 + ed4: ab 2b or r26, r27 + ed6: 69 f0 breq .+26 ; 0xef2 <_ZN7hc745954sendEhb+0xe0> + *port |= 0x01 << pin_DATA; + ed8: a6 81 ldd r26, Z+6 ; 0x06 + eda: b7 81 ldd r27, Z+7 ; 0x07 + edc: 5c 91 ld r21, X + ede: e9 01 movw r28, r18 + ee0: 00 80 ld r0, Z + ee2: 02 c0 rjmp .+4 ; 0xee8 <_ZN7hc745954sendEhb+0xd6> + ee4: cc 0f add r28, r28 + ee6: dd 1f adc r29, r29 + ee8: 0a 94 dec r0 + eea: e2 f7 brpl .-8 ; 0xee4 <_ZN7hc745954sendEhb+0xd2> + eec: c5 2b or r28, r21 + eee: cc 93 st X, r28 + ef0: 0d c0 rjmp .+26 ; 0xf0c <_ZN7hc745954sendEhb+0xfa> + else + *port &= ~(0x01 << pin_DATA); + ef2: a6 81 ldd r26, Z+6 ; 0x06 + ef4: b7 81 ldd r27, Z+7 ; 0x07 + ef6: 5c 91 ld r21, X + ef8: e9 01 movw r28, r18 + efa: 00 80 ld r0, Z + efc: 02 c0 rjmp .+4 ; 0xf02 <_ZN7hc745954sendEhb+0xf0> + efe: cc 0f add r28, r28 + f00: dd 1f adc r29, r29 + f02: 0a 94 dec r0 + f04: e2 f7 brpl .-8 ; 0xefe <_ZN7hc745954sendEhb+0xec> + f06: c0 95 com r28 + f08: c5 23 and r28, r21 + f0a: cc 93 st X, r28 + *port |= 0x01 << pin_CLK; //Met l'orloge à 1 + f0c: a6 81 ldd r26, Z+6 ; 0x06 + f0e: b7 81 ldd r27, Z+7 ; 0x07 + f10: 5c 91 ld r21, X + f12: e9 01 movw r28, r18 + f14: 02 80 ldd r0, Z+2 ; 0x02 + f16: 02 c0 rjmp .+4 ; 0xf1c <_ZN7hc745954sendEhb+0x10a> + f18: cc 0f add r28, r28 + f1a: dd 1f adc r29, r29 + f1c: 0a 94 dec r0 + f1e: e2 f7 brpl .-8 ; 0xf18 <_ZN7hc745954sendEhb+0x106> + f20: c5 2b or r28, r21 + f22: cc 93 st X, r28 + *ddr |= (0x01 << data | 0x01 << clk | 0x01 << stcp); +} +void hc74595::send(uint8_t data, bool inverted) //Envoi des donnée au Shift Register +{ + + for(int a = 0; a < 8 ; a++) + f24: 01 96 adiw r24, 0x01 ; 1 + f26: 88 30 cpi r24, 0x08 ; 8 + f28: 91 05 cpc r25, r1 + f2a: 09 f0 breq .+2 ; 0xf2e <_ZN7hc745954sendEhb+0x11c> + f2c: 7e cf rjmp .-260 ; 0xe2a <_ZN7hc745954sendEhb+0x18> + else + *port &= ~(0x01 << pin_DATA); + *port |= 0x01 << pin_CLK; //Met l'orloge à 1 + } + } +} + f2e: df 91 pop r29 + f30: cf 91 pop r28 + f32: 1f 91 pop r17 + f34: 0f 91 pop r16 + f36: 08 95 ret + +00000f38 <_ZN7hc745957confirmEv>: +void hc74595::confirm() //Envoi le signal du storage register +{ + f38: fc 01 movw r30, r24 + *port |= 0x01 << pin_STCP; + f3a: a6 81 ldd r26, Z+6 ; 0x06 + f3c: b7 81 ldd r27, Z+7 ; 0x07 + f3e: 4c 91 ld r20, X + f40: 21 e0 ldi r18, 0x01 ; 1 + f42: 30 e0 ldi r19, 0x00 ; 0 + f44: c9 01 movw r24, r18 + f46: 04 80 ldd r0, Z+4 ; 0x04 + f48: 02 c0 rjmp .+4 ; 0xf4e <_ZN7hc745957confirmEv+0x16> + f4a: 88 0f add r24, r24 + f4c: 99 1f adc r25, r25 + f4e: 0a 94 dec r0 + f50: e2 f7 brpl .-8 ; 0xf4a <_ZN7hc745957confirmEv+0x12> + f52: 84 2b or r24, r20 + f54: 8c 93 st X, r24 + #else + //round up by default + __ticks_dc = (uint32_t)(ceil(fabs(__tmp))); + #endif + + __builtin_avr_delay_cycles(__ticks_dc); + f56: 85 e0 ldi r24, 0x05 ; 5 + f58: 8a 95 dec r24 + f5a: f1 f7 brne .-4 ; 0xf58 <_ZN7hc745957confirmEv+0x20> + f5c: 00 00 nop + _delay_us(1); + *port &= ~(0x01 << pin_STCP); + f5e: a6 81 ldd r26, Z+6 ; 0x06 + f60: b7 81 ldd r27, Z+7 ; 0x07 + f62: 4c 91 ld r20, X + f64: c9 01 movw r24, r18 + f66: 04 80 ldd r0, Z+4 ; 0x04 + f68: 02 c0 rjmp .+4 ; 0xf6e <_ZN7hc745957confirmEv+0x36> + f6a: 88 0f add r24, r24 + f6c: 99 1f adc r25, r25 + f6e: 0a 94 dec r0 + f70: e2 f7 brpl .-8 ; 0xf6a <_ZN7hc745957confirmEv+0x32> + f72: 80 95 com r24 + f74: 84 23 and r24, r20 + f76: 8c 93 st X, r24 + f78: 08 95 ret + +00000f7a <_ZN5dcf772loEv>: + } + else + parasite_flag = true; +} +void dcf77::lo() +{ + f7a: cf 92 push r12 + f7c: df 92 push r13 + f7e: ef 92 push r14 + f80: ff 92 push r15 + f82: 0f 93 push r16 + f84: 1f 93 push r17 + f86: cf 93 push r28 + f88: df 93 push r29 + f8a: ec 01 movw r28, r24 + + time_check = millis() - time_high_dcf77; + f8c: 0e 94 f2 0a call 0x15e4 ; 0x15e4 <_Z6millisv> + f90: cc 80 ldd r12, Y+4 ; 0x04 + f92: dd 80 ldd r13, Y+5 ; 0x05 + f94: ee 80 ldd r14, Y+6 ; 0x06 + f96: ff 80 ldd r15, Y+7 ; 0x07 + f98: 8b 01 movw r16, r22 + f9a: 0c 19 sub r16, r12 + f9c: 1d 09 sbc r17, r13 + f9e: 1f 8b std Y+23, r17 ; 0x17 + fa0: 0e 8b std Y+22, r16 ; 0x16 + if( time_check >= temps_haut_min || time_high_dcf77 == 0) + fa2: 04 3f cpi r16, 0xF4 ; 244 + fa4: 11 40 sbci r17, 0x01 ; 1 + fa6: 20 f4 brcc .+8 ; 0xfb0 <_ZN5dcf772loEv+0x36> + fa8: cd 28 or r12, r13 + faa: ce 28 or r12, r14 + fac: cf 28 or r12, r15 + fae: 71 f5 brne .+92 ; 0x100c <_ZN5dcf772loEv+0x92> + { + PORTB &= ~(1< + fb8: 0c 81 ldd r16, Y+4 ; 0x04 + fba: 1d 81 ldd r17, Y+5 ; 0x05 + fbc: 2e 81 ldd r18, Y+6 ; 0x06 + fbe: 3f 81 ldd r19, Y+7 ; 0x07 + fc0: ab 01 movw r20, r22 + fc2: bc 01 movw r22, r24 + fc4: 40 1b sub r20, r16 + fc6: 51 0b sbc r21, r17 + fc8: 62 0b sbc r22, r18 + fca: 73 0b sbc r23, r19 + fcc: 4c 83 std Y+4, r20 ; 0x04 + fce: 5d 83 std Y+5, r21 ; 0x05 + fd0: 6e 83 std Y+6, r22 ; 0x06 + fd2: 7f 83 std Y+7, r23 ; 0x07 + time_low_dcf77 = millis(); //Démarage du comptage du temps bas + fd4: 0e 94 f2 0a call 0x15e4 ; 0x15e4 <_Z6millisv> + fd8: 68 83 st Y, r22 + fda: 79 83 std Y+1, r23 ; 0x01 + fdc: 8a 83 std Y+2, r24 ; 0x02 + fde: 9b 83 std Y+3, r25 ; 0x03 + if(time_high_dcf77 > time_no_modulation | dcf77_flag_start) //Si le Temps bas est > à 800, début de la transmition + fe0: 81 e0 ldi r24, 0x01 ; 1 + fe2: 4c 81 ldd r20, Y+4 ; 0x04 + fe4: 5d 81 ldd r21, Y+5 ; 0x05 + fe6: 6e 81 ldd r22, Y+6 ; 0x06 + fe8: 7f 81 ldd r23, Y+7 ; 0x07 + fea: 49 3e cpi r20, 0xE9 ; 233 + fec: 53 40 sbci r21, 0x03 ; 3 + fee: 61 05 cpc r22, r1 + ff0: 71 05 cpc r23, r1 + ff2: 08 f4 brcc .+2 ; 0xff6 <_ZN5dcf772loEv+0x7c> + ff4: 80 e0 ldi r24, 0x00 ; 0 + ff6: 81 11 cpse r24, r1 + ff8: 03 c0 rjmp .+6 ; 0x1000 <_ZN5dcf772loEv+0x86> + ffa: 88 85 ldd r24, Y+8 ; 0x08 + ffc: 88 23 and r24, r24 + ffe: 19 f0 breq .+6 ; 0x1006 <_ZN5dcf772loEv+0x8c> + { + dcf77_flag_start = 1; + 1000: 81 e0 ldi r24, 0x01 ; 1 + 1002: 88 87 std Y+8, r24 ; 0x08 + 1004: 05 c0 rjmp .+10 ; 0x1010 <_ZN5dcf772loEv+0x96> + } + else + { + dcf77_status = en_attente_de_signal; + 1006: 1a 8a std Y+18, r1 ; 0x12 + 1008: 19 8a std Y+17, r1 ; 0x11 + 100a: 02 c0 rjmp .+4 ; 0x1010 <_ZN5dcf772loEv+0x96> + } + } + else + parasite_flag = true; + 100c: 81 e0 ldi r24, 0x01 ; 1 + 100e: 8d 8b std Y+21, r24 ; 0x15 +} + 1010: df 91 pop r29 + 1012: cf 91 pop r28 + 1014: 1f 91 pop r17 + 1016: 0f 91 pop r16 + 1018: ff 90 pop r15 + 101a: ef 90 pop r14 + 101c: df 90 pop r13 + 101e: cf 90 pop r12 + 1020: 08 95 ret + +00001022 <_ZN5dcf776decodeEh>: +bool dcf77::decode(uint8_t bit) +{ + 1022: fc 01 movw r30, r24 + bool flag_no_error = true; + if(bit_dcode_n == 0 && !bit) //Bit 00 Toujours à 0 si le contraire erreur + 1024: 23 89 ldd r18, Z+19 ; 0x13 + 1026: 34 89 ldd r19, Z+20 ; 0x14 + 1028: 21 15 cp r18, r1 + 102a: 31 05 cpc r19, r1 + 102c: 31 f4 brne .+12 ; 0x103a <_ZN5dcf776decodeEh+0x18> + 102e: 66 23 and r22, r22 + 1030: 09 f4 brne .+2 ; 0x1034 <_ZN5dcf776decodeEh+0x12> + 1032: f4 c0 rjmp .+488 ; 0x121c <_ZN5dcf776decodeEh+0x1fa> + flag_no_error = false; + else if(bit_dcode_n >= 1 && bit_dcode_n <= 19); //Bits 01 à 19 ne nous interesse pas + 1034: 40 e0 ldi r20, 0x00 ; 0 + 1036: 50 e0 ldi r21, 0x00 ; 0 + 1038: 3c c0 rjmp .+120 ; 0x10b2 <_ZN5dcf776decodeEh+0x90> + 103a: a9 01 movw r20, r18 + 103c: c9 01 movw r24, r18 + 103e: 01 97 sbiw r24, 0x01 ; 1 + 1040: 43 97 sbiw r24, 0x13 ; 19 + 1042: 08 f4 brcc .+2 ; 0x1046 <_ZN5dcf776decodeEh+0x24> + 1044: ed c0 rjmp .+474 ; 0x1220 <_ZN5dcf776decodeEh+0x1fe> + else if (bit_dcode_n == 20 && !bit) //Bit 20 Toujours à 1 + 1046: 24 31 cpi r18, 0x14 ; 20 + 1048: 31 05 cpc r19, r1 + 104a: 19 f4 brne .+6 ; 0x1052 <_ZN5dcf776decodeEh+0x30> + 104c: 61 11 cpse r22, r1 + 104e: fc c0 rjmp .+504 ; 0x1248 <_ZN5dcf776decodeEh+0x226> + 1050: e9 c0 rjmp .+466 ; 0x1224 <_ZN5dcf776decodeEh+0x202> + flag_no_error = false; + else if (bit_dcode_n >= 21 && bit_dcode_n <= 27) //Bit 21 à 27 = Minute + 1052: c9 01 movw r24, r18 + 1054: 45 97 sbiw r24, 0x15 ; 21 + 1056: 07 97 sbiw r24, 0x07 ; 7 + 1058: 18 f5 brcc .+70 ; 0x10a0 <_ZN5dcf776decodeEh+0x7e> + { + if(bit) + 105a: 66 23 and r22, r22 + 105c: 81 f0 breq .+32 ; 0x107e <_ZN5dcf776decodeEh+0x5c> + dcf77_Minute |= 1 << (bit_dcode_n-21); + 105e: c9 01 movw r24, r18 + 1060: 45 97 sbiw r24, 0x15 ; 21 + 1062: 41 e0 ldi r20, 0x01 ; 1 + 1064: 50 e0 ldi r21, 0x00 ; 0 + 1066: ba 01 movw r22, r20 + 1068: 02 c0 rjmp .+4 ; 0x106e <_ZN5dcf776decodeEh+0x4c> + 106a: 66 0f add r22, r22 + 106c: 77 1f adc r23, r23 + 106e: 8a 95 dec r24 + 1070: e2 f7 brpl .-8 ; 0x106a <_ZN5dcf776decodeEh+0x48> + 1072: cb 01 movw r24, r22 + 1074: 93 85 ldd r25, Z+11 ; 0x0b + 1076: 89 2b or r24, r25 + 1078: 83 87 std Z+11, r24 ; 0x0b + else + parasite_flag = true; +} +bool dcf77::decode(uint8_t bit) +{ + bool flag_no_error = true; + 107a: 81 e0 ldi r24, 0x01 ; 1 + 107c: e0 c0 rjmp .+448 ; 0x123e <_ZN5dcf776decodeEh+0x21c> + else if (bit_dcode_n >= 21 && bit_dcode_n <= 27) //Bit 21 à 27 = Minute + { + if(bit) + dcf77_Minute |= 1 << (bit_dcode_n-21); + else + dcf77_Minute &= ~(1 << (bit_dcode_n-21)); + 107e: c9 01 movw r24, r18 + 1080: 45 97 sbiw r24, 0x15 ; 21 + 1082: 41 e0 ldi r20, 0x01 ; 1 + 1084: 50 e0 ldi r21, 0x00 ; 0 + 1086: ba 01 movw r22, r20 + 1088: 02 c0 rjmp .+4 ; 0x108e <_ZN5dcf776decodeEh+0x6c> + 108a: 66 0f add r22, r22 + 108c: 77 1f adc r23, r23 + 108e: 8a 95 dec r24 + 1090: e2 f7 brpl .-8 ; 0x108a <_ZN5dcf776decodeEh+0x68> + 1092: cb 01 movw r24, r22 + 1094: 80 95 com r24 + 1096: 93 85 ldd r25, Z+11 ; 0x0b + 1098: 89 23 and r24, r25 + 109a: 83 87 std Z+11, r24 ; 0x0b + else + parasite_flag = true; +} +bool dcf77::decode(uint8_t bit) +{ + bool flag_no_error = true; + 109c: 81 e0 ldi r24, 0x01 ; 1 + 109e: cf c0 rjmp .+414 ; 0x123e <_ZN5dcf776decodeEh+0x21c> + if(bit) + dcf77_Minute |= 1 << (bit_dcode_n-21); + else + dcf77_Minute &= ~(1 << (bit_dcode_n-21)); + } + else if(bit_dcode_n == 28 && (dcf77_Minute&0x01) && !bit || bit_dcode_n == 28 && !(dcf77_Minute&0x01) && bit) //Bit de parité des minutes + 10a0: 2c 31 cpi r18, 0x1C ; 28 + 10a2: 31 05 cpc r19, r1 + 10a4: 31 f4 brne .+12 ; 0x10b2 <_ZN5dcf776decodeEh+0x90> + 10a6: 83 85 ldd r24, Z+11 ; 0x0b + 10a8: 80 ff sbrs r24, 0 + 10aa: e0 c0 rjmp .+448 ; 0x126c <_ZN5dcf776decodeEh+0x24a> + 10ac: 61 11 cpse r22, r1 + 10ae: d2 c0 rjmp .+420 ; 0x1254 <_ZN5dcf776decodeEh+0x232> + 10b0: bb c0 rjmp .+374 ; 0x1228 <_ZN5dcf776decodeEh+0x206> + flag_no_error = false; + else if(bit_dcode_n >= 29 && bit_dcode_n <= 34) //Bit 29 à 34 = Heure + 10b2: ca 01 movw r24, r20 + 10b4: 4d 97 sbiw r24, 0x1d ; 29 + 10b6: 06 97 sbiw r24, 0x06 ; 6 + 10b8: 18 f5 brcc .+70 ; 0x1100 <_ZN5dcf776decodeEh+0xde> + { + if(bit) + 10ba: 66 23 and r22, r22 + 10bc: 81 f0 breq .+32 ; 0x10de <_ZN5dcf776decodeEh+0xbc> + dcf77_Heur |= 1 << (bit_dcode_n-29); + 10be: c9 01 movw r24, r18 + 10c0: 4d 97 sbiw r24, 0x1d ; 29 + 10c2: 41 e0 ldi r20, 0x01 ; 1 + 10c4: 50 e0 ldi r21, 0x00 ; 0 + 10c6: ba 01 movw r22, r20 + 10c8: 02 c0 rjmp .+4 ; 0x10ce <_ZN5dcf776decodeEh+0xac> + 10ca: 66 0f add r22, r22 + 10cc: 77 1f adc r23, r23 + 10ce: 8a 95 dec r24 + 10d0: e2 f7 brpl .-8 ; 0x10ca <_ZN5dcf776decodeEh+0xa8> + 10d2: cb 01 movw r24, r22 + 10d4: 94 85 ldd r25, Z+12 ; 0x0c + 10d6: 89 2b or r24, r25 + 10d8: 84 87 std Z+12, r24 ; 0x0c + else + parasite_flag = true; +} +bool dcf77::decode(uint8_t bit) +{ + bool flag_no_error = true; + 10da: 81 e0 ldi r24, 0x01 ; 1 + 10dc: b0 c0 rjmp .+352 ; 0x123e <_ZN5dcf776decodeEh+0x21c> + else if(bit_dcode_n >= 29 && bit_dcode_n <= 34) //Bit 29 à 34 = Heure + { + if(bit) + dcf77_Heur |= 1 << (bit_dcode_n-29); + else + dcf77_Heur &= ~(1 << (bit_dcode_n-29)); + 10de: c9 01 movw r24, r18 + 10e0: 4d 97 sbiw r24, 0x1d ; 29 + 10e2: 41 e0 ldi r20, 0x01 ; 1 + 10e4: 50 e0 ldi r21, 0x00 ; 0 + 10e6: ba 01 movw r22, r20 + 10e8: 02 c0 rjmp .+4 ; 0x10ee <_ZN5dcf776decodeEh+0xcc> + 10ea: 66 0f add r22, r22 + 10ec: 77 1f adc r23, r23 + 10ee: 8a 95 dec r24 + 10f0: e2 f7 brpl .-8 ; 0x10ea <_ZN5dcf776decodeEh+0xc8> + 10f2: cb 01 movw r24, r22 + 10f4: 80 95 com r24 + 10f6: 94 85 ldd r25, Z+12 ; 0x0c + 10f8: 89 23 and r24, r25 + 10fa: 84 87 std Z+12, r24 ; 0x0c + else + parasite_flag = true; +} +bool dcf77::decode(uint8_t bit) +{ + bool flag_no_error = true; + 10fc: 81 e0 ldi r24, 0x01 ; 1 + 10fe: 9f c0 rjmp .+318 ; 0x123e <_ZN5dcf776decodeEh+0x21c> + if(bit) + dcf77_Heur |= 1 << (bit_dcode_n-29); + else + dcf77_Heur &= ~(1 << (bit_dcode_n-29)); + } + else if(bit_dcode_n == 35 && (dcf77_Heur&0x01) && !bit || bit_dcode_n == 35 && !(dcf77_Heur&0x01) && bit) //Bit de parité des Heure + 1100: 23 32 cpi r18, 0x23 ; 35 + 1102: 31 05 cpc r19, r1 + 1104: 81 f4 brne .+32 ; 0x1126 <_ZN5dcf776decodeEh+0x104> + 1106: 84 85 ldd r24, Z+12 ; 0x0c + 1108: 80 ff sbrs r24, 0 + 110a: 09 c0 rjmp .+18 ; 0x111e <_ZN5dcf776decodeEh+0xfc> + 110c: 61 11 cpse r22, r1 + 110e: 0b c0 rjmp .+22 ; 0x1126 <_ZN5dcf776decodeEh+0x104> + 1110: 8d c0 rjmp .+282 ; 0x122c <_ZN5dcf776decodeEh+0x20a> + 1112: 23 32 cpi r18, 0x23 ; 35 + 1114: 31 05 cpc r19, r1 + 1116: 39 f4 brne .+14 ; 0x1126 <_ZN5dcf776decodeEh+0x104> + 1118: 84 85 ldd r24, Z+12 ; 0x0c + 111a: 80 fd sbrc r24, 0 + 111c: 04 c0 rjmp .+8 ; 0x1126 <_ZN5dcf776decodeEh+0x104> + 111e: 66 23 and r22, r22 + 1120: 09 f4 brne .+2 ; 0x1124 <_ZN5dcf776decodeEh+0x102> + 1122: 9e c0 rjmp .+316 ; 0x1260 <_ZN5dcf776decodeEh+0x23e> + 1124: 85 c0 rjmp .+266 ; 0x1230 <_ZN5dcf776decodeEh+0x20e> + flag_no_error = false; + else if(bit_dcode_n >= 36 && bit_dcode_n <= 41) //Bit 36 à 41 = Jours du moi + 1126: ca 01 movw r24, r20 + 1128: 84 97 sbiw r24, 0x24 ; 36 + 112a: 06 97 sbiw r24, 0x06 ; 6 + 112c: 18 f5 brcc .+70 ; 0x1174 <_ZN5dcf776decodeEh+0x152> + { + if(bit) + 112e: 66 23 and r22, r22 + 1130: 81 f0 breq .+32 ; 0x1152 <_ZN5dcf776decodeEh+0x130> + dcf77_Daymonth |= 1 << (bit_dcode_n-36); + 1132: c9 01 movw r24, r18 + 1134: 84 97 sbiw r24, 0x24 ; 36 + 1136: 41 e0 ldi r20, 0x01 ; 1 + 1138: 50 e0 ldi r21, 0x00 ; 0 + 113a: ba 01 movw r22, r20 + 113c: 02 c0 rjmp .+4 ; 0x1142 <_ZN5dcf776decodeEh+0x120> + 113e: 66 0f add r22, r22 + 1140: 77 1f adc r23, r23 + 1142: 8a 95 dec r24 + 1144: e2 f7 brpl .-8 ; 0x113e <_ZN5dcf776decodeEh+0x11c> + 1146: cb 01 movw r24, r22 + 1148: 95 85 ldd r25, Z+13 ; 0x0d + 114a: 89 2b or r24, r25 + 114c: 85 87 std Z+13, r24 ; 0x0d + else + parasite_flag = true; +} +bool dcf77::decode(uint8_t bit) +{ + bool flag_no_error = true; + 114e: 81 e0 ldi r24, 0x01 ; 1 + 1150: 76 c0 rjmp .+236 ; 0x123e <_ZN5dcf776decodeEh+0x21c> + else if(bit_dcode_n >= 36 && bit_dcode_n <= 41) //Bit 36 à 41 = Jours du moi + { + if(bit) + dcf77_Daymonth |= 1 << (bit_dcode_n-36); + else + dcf77_Daymonth &= ~(1 << (bit_dcode_n-36)); + 1152: c9 01 movw r24, r18 + 1154: 84 97 sbiw r24, 0x24 ; 36 + 1156: 41 e0 ldi r20, 0x01 ; 1 + 1158: 50 e0 ldi r21, 0x00 ; 0 + 115a: ba 01 movw r22, r20 + 115c: 02 c0 rjmp .+4 ; 0x1162 <_ZN5dcf776decodeEh+0x140> + 115e: 66 0f add r22, r22 + 1160: 77 1f adc r23, r23 + 1162: 8a 95 dec r24 + 1164: e2 f7 brpl .-8 ; 0x115e <_ZN5dcf776decodeEh+0x13c> + 1166: cb 01 movw r24, r22 + 1168: 80 95 com r24 + 116a: 95 85 ldd r25, Z+13 ; 0x0d + 116c: 89 23 and r24, r25 + 116e: 85 87 std Z+13, r24 ; 0x0d + else + parasite_flag = true; +} +bool dcf77::decode(uint8_t bit) +{ + bool flag_no_error = true; + 1170: 81 e0 ldi r24, 0x01 ; 1 + 1172: 65 c0 rjmp .+202 ; 0x123e <_ZN5dcf776decodeEh+0x21c> + if(bit) + dcf77_Daymonth |= 1 << (bit_dcode_n-36); + else + dcf77_Daymonth &= ~(1 << (bit_dcode_n-36)); + } + else if(bit_dcode_n >= 42 && bit_dcode_n <= 44); //Bit 42 à 44 = Jours de la semaine, ne nous interesse pas + 1174: ca 01 movw r24, r20 + 1176: 8a 97 sbiw r24, 0x2a ; 42 + 1178: 83 30 cpi r24, 0x03 ; 3 + 117a: 91 05 cpc r25, r1 + 117c: 08 f4 brcc .+2 ; 0x1180 <_ZN5dcf776decodeEh+0x15e> + 117e: 5a c0 rjmp .+180 ; 0x1234 <_ZN5dcf776decodeEh+0x212> + else if(bit_dcode_n >= 45 && bit_dcode_n <= 49) //Bit 45 à 49 = Mois + 1180: 03 97 sbiw r24, 0x03 ; 3 + 1182: 05 97 sbiw r24, 0x05 ; 5 + 1184: 18 f5 brcc .+70 ; 0x11cc <_ZN5dcf776decodeEh+0x1aa> + { + if(bit) + 1186: 66 23 and r22, r22 + 1188: 81 f0 breq .+32 ; 0x11aa <_ZN5dcf776decodeEh+0x188> + dcf77_Month |= 1 << (bit_dcode_n-45); + 118a: c9 01 movw r24, r18 + 118c: 8d 97 sbiw r24, 0x2d ; 45 + 118e: 41 e0 ldi r20, 0x01 ; 1 + 1190: 50 e0 ldi r21, 0x00 ; 0 + 1192: ba 01 movw r22, r20 + 1194: 02 c0 rjmp .+4 ; 0x119a <_ZN5dcf776decodeEh+0x178> + 1196: 66 0f add r22, r22 + 1198: 77 1f adc r23, r23 + 119a: 8a 95 dec r24 + 119c: e2 f7 brpl .-8 ; 0x1196 <_ZN5dcf776decodeEh+0x174> + 119e: cb 01 movw r24, r22 + 11a0: 97 85 ldd r25, Z+15 ; 0x0f + 11a2: 89 2b or r24, r25 + 11a4: 87 87 std Z+15, r24 ; 0x0f + else + parasite_flag = true; +} +bool dcf77::decode(uint8_t bit) +{ + bool flag_no_error = true; + 11a6: 81 e0 ldi r24, 0x01 ; 1 + 11a8: 4a c0 rjmp .+148 ; 0x123e <_ZN5dcf776decodeEh+0x21c> + else if(bit_dcode_n >= 45 && bit_dcode_n <= 49) //Bit 45 à 49 = Mois + { + if(bit) + dcf77_Month |= 1 << (bit_dcode_n-45); + else + dcf77_Month &= ~(1 << (bit_dcode_n-45)); + 11aa: c9 01 movw r24, r18 + 11ac: 8d 97 sbiw r24, 0x2d ; 45 + 11ae: 41 e0 ldi r20, 0x01 ; 1 + 11b0: 50 e0 ldi r21, 0x00 ; 0 + 11b2: ba 01 movw r22, r20 + 11b4: 02 c0 rjmp .+4 ; 0x11ba <_ZN5dcf776decodeEh+0x198> + 11b6: 66 0f add r22, r22 + 11b8: 77 1f adc r23, r23 + 11ba: 8a 95 dec r24 + 11bc: e2 f7 brpl .-8 ; 0x11b6 <_ZN5dcf776decodeEh+0x194> + 11be: cb 01 movw r24, r22 + 11c0: 80 95 com r24 + 11c2: 97 85 ldd r25, Z+15 ; 0x0f + 11c4: 89 23 and r24, r25 + 11c6: 87 87 std Z+15, r24 ; 0x0f + else + parasite_flag = true; +} +bool dcf77::decode(uint8_t bit) +{ + bool flag_no_error = true; + 11c8: 81 e0 ldi r24, 0x01 ; 1 + 11ca: 39 c0 rjmp .+114 ; 0x123e <_ZN5dcf776decodeEh+0x21c> + if(bit) + dcf77_Month |= 1 << (bit_dcode_n-45); + else + dcf77_Month &= ~(1 << (bit_dcode_n-45)); + } + else if(bit_dcode_n>= 50 && bit_dcode_n <= 57) //Bit 50 à 57 = Année + 11cc: 42 53 subi r20, 0x32 ; 50 + 11ce: 51 09 sbc r21, r1 + 11d0: 48 30 cpi r20, 0x08 ; 8 + 11d2: 51 05 cpc r21, r1 + 11d4: 88 f5 brcc .+98 ; 0x1238 <_ZN5dcf776decodeEh+0x216> + { + if(bit) + 11d6: 66 23 and r22, r22 + 11d8: 81 f0 breq .+32 ; 0x11fa <_ZN5dcf776decodeEh+0x1d8> + dcf77_Year |= 1 << (bit_dcode_n-50); + 11da: c9 01 movw r24, r18 + 11dc: c2 97 sbiw r24, 0x32 ; 50 + 11de: 41 e0 ldi r20, 0x01 ; 1 + 11e0: 50 e0 ldi r21, 0x00 ; 0 + 11e2: ba 01 movw r22, r20 + 11e4: 02 c0 rjmp .+4 ; 0x11ea <_ZN5dcf776decodeEh+0x1c8> + 11e6: 66 0f add r22, r22 + 11e8: 77 1f adc r23, r23 + 11ea: 8a 95 dec r24 + 11ec: e2 f7 brpl .-8 ; 0x11e6 <_ZN5dcf776decodeEh+0x1c4> + 11ee: cb 01 movw r24, r22 + 11f0: 90 89 ldd r25, Z+16 ; 0x10 + 11f2: 89 2b or r24, r25 + 11f4: 80 8b std Z+16, r24 ; 0x10 + else + parasite_flag = true; +} +bool dcf77::decode(uint8_t bit) +{ + bool flag_no_error = true; + 11f6: 81 e0 ldi r24, 0x01 ; 1 + 11f8: 22 c0 rjmp .+68 ; 0x123e <_ZN5dcf776decodeEh+0x21c> + else if(bit_dcode_n>= 50 && bit_dcode_n <= 57) //Bit 50 à 57 = Année + { + if(bit) + dcf77_Year |= 1 << (bit_dcode_n-50); + else + dcf77_Year &= ~(1 << (bit_dcode_n-50)); + 11fa: c9 01 movw r24, r18 + 11fc: c2 97 sbiw r24, 0x32 ; 50 + 11fe: 41 e0 ldi r20, 0x01 ; 1 + 1200: 50 e0 ldi r21, 0x00 ; 0 + 1202: ba 01 movw r22, r20 + 1204: 02 c0 rjmp .+4 ; 0x120a <_ZN5dcf776decodeEh+0x1e8> + 1206: 66 0f add r22, r22 + 1208: 77 1f adc r23, r23 + 120a: 8a 95 dec r24 + 120c: e2 f7 brpl .-8 ; 0x1206 <_ZN5dcf776decodeEh+0x1e4> + 120e: cb 01 movw r24, r22 + 1210: 80 95 com r24 + 1212: 90 89 ldd r25, Z+16 ; 0x10 + 1214: 89 23 and r24, r25 + 1216: 80 8b std Z+16, r24 ; 0x10 + else + parasite_flag = true; +} +bool dcf77::decode(uint8_t bit) +{ + bool flag_no_error = true; + 1218: 81 e0 ldi r24, 0x01 ; 1 + 121a: 11 c0 rjmp .+34 ; 0x123e <_ZN5dcf776decodeEh+0x21c> + if(bit_dcode_n == 0 && !bit) //Bit 00 Toujours à 0 si le contraire erreur + flag_no_error = false; + 121c: 80 e0 ldi r24, 0x00 ; 0 + 121e: 0f c0 rjmp .+30 ; 0x123e <_ZN5dcf776decodeEh+0x21c> + else + parasite_flag = true; +} +bool dcf77::decode(uint8_t bit) +{ + bool flag_no_error = true; + 1220: 81 e0 ldi r24, 0x01 ; 1 + 1222: 0d c0 rjmp .+26 ; 0x123e <_ZN5dcf776decodeEh+0x21c> + if(bit_dcode_n == 0 && !bit) //Bit 00 Toujours à 0 si le contraire erreur + flag_no_error = false; + else if(bit_dcode_n >= 1 && bit_dcode_n <= 19); //Bits 01 à 19 ne nous interesse pas + else if (bit_dcode_n == 20 && !bit) //Bit 20 Toujours à 1 + flag_no_error = false; + 1224: 80 e0 ldi r24, 0x00 ; 0 + 1226: 0b c0 rjmp .+22 ; 0x123e <_ZN5dcf776decodeEh+0x21c> + dcf77_Minute |= 1 << (bit_dcode_n-21); + else + dcf77_Minute &= ~(1 << (bit_dcode_n-21)); + } + else if(bit_dcode_n == 28 && (dcf77_Minute&0x01) && !bit || bit_dcode_n == 28 && !(dcf77_Minute&0x01) && bit) //Bit de parité des minutes + flag_no_error = false; + 1228: 80 e0 ldi r24, 0x00 ; 0 + 122a: 09 c0 rjmp .+18 ; 0x123e <_ZN5dcf776decodeEh+0x21c> + dcf77_Heur |= 1 << (bit_dcode_n-29); + else + dcf77_Heur &= ~(1 << (bit_dcode_n-29)); + } + else if(bit_dcode_n == 35 && (dcf77_Heur&0x01) && !bit || bit_dcode_n == 35 && !(dcf77_Heur&0x01) && bit) //Bit de parité des Heure + flag_no_error = false; + 122c: 80 e0 ldi r24, 0x00 ; 0 + 122e: 07 c0 rjmp .+14 ; 0x123e <_ZN5dcf776decodeEh+0x21c> + 1230: 80 e0 ldi r24, 0x00 ; 0 + 1232: 05 c0 rjmp .+10 ; 0x123e <_ZN5dcf776decodeEh+0x21c> + else + parasite_flag = true; +} +bool dcf77::decode(uint8_t bit) +{ + bool flag_no_error = true; + 1234: 81 e0 ldi r24, 0x01 ; 1 + 1236: 03 c0 rjmp .+6 ; 0x123e <_ZN5dcf776decodeEh+0x21c> + 1238: 81 e0 ldi r24, 0x01 ; 1 + 123a: 01 c0 rjmp .+2 ; 0x123e <_ZN5dcf776decodeEh+0x21c> + dcf77_Minute |= 1 << (bit_dcode_n-21); + else + dcf77_Minute &= ~(1 << (bit_dcode_n-21)); + } + else if(bit_dcode_n == 28 && (dcf77_Minute&0x01) && !bit || bit_dcode_n == 28 && !(dcf77_Minute&0x01) && bit) //Bit de parité des minutes + flag_no_error = false; + 123c: 80 e0 ldi r24, 0x00 ; 0 + dcf77_Year |= 1 << (bit_dcode_n-50); + else + dcf77_Year &= ~(1 << (bit_dcode_n-50)); + } + else if(bit_dcode_n == 58 && (dcf77_Month&0x01) && !bit || bit_dcode_n && !(dcf77_Month&0x01) && bit);//Parity + bit_dcode_n++; + 123e: 2f 5f subi r18, 0xFF ; 255 + 1240: 3f 4f sbci r19, 0xFF ; 255 + 1242: 34 8b std Z+20, r19 ; 0x14 + 1244: 23 8b std Z+19, r18 ; 0x13 + 1246: 08 95 ret + if(bit_dcode_n == 0 && !bit) //Bit 00 Toujours à 0 si le contraire erreur + flag_no_error = false; + else if(bit_dcode_n >= 1 && bit_dcode_n <= 19); //Bits 01 à 19 ne nous interesse pas + else if (bit_dcode_n == 20 && !bit) //Bit 20 Toujours à 1 + flag_no_error = false; + else if (bit_dcode_n >= 21 && bit_dcode_n <= 27) //Bit 21 à 27 = Minute + 1248: c9 01 movw r24, r18 + 124a: 45 97 sbiw r24, 0x15 ; 21 + 124c: 07 97 sbiw r24, 0x07 ; 7 + 124e: 08 f4 brcc .+2 ; 0x1252 <_ZN5dcf776decodeEh+0x230> + 1250: 06 cf rjmp .-500 ; 0x105e <_ZN5dcf776decodeEh+0x3c> + 1252: 0f c0 rjmp .+30 ; 0x1272 <_ZN5dcf776decodeEh+0x250> + else + dcf77_Minute &= ~(1 << (bit_dcode_n-21)); + } + else if(bit_dcode_n == 28 && (dcf77_Minute&0x01) && !bit || bit_dcode_n == 28 && !(dcf77_Minute&0x01) && bit) //Bit de parité des minutes + flag_no_error = false; + else if(bit_dcode_n >= 29 && bit_dcode_n <= 34) //Bit 29 à 34 = Heure + 1254: c9 01 movw r24, r18 + 1256: 4d 97 sbiw r24, 0x1d ; 29 + 1258: 06 97 sbiw r24, 0x06 ; 6 + 125a: 08 f4 brcc .+2 ; 0x125e <_ZN5dcf776decodeEh+0x23c> + 125c: 2e cf rjmp .-420 ; 0x10ba <_ZN5dcf776decodeEh+0x98> + 125e: 59 cf rjmp .-334 ; 0x1112 <_ZN5dcf776decodeEh+0xf0> + else + dcf77_Heur &= ~(1 << (bit_dcode_n-29)); + } + else if(bit_dcode_n == 35 && (dcf77_Heur&0x01) && !bit || bit_dcode_n == 35 && !(dcf77_Heur&0x01) && bit) //Bit de parité des Heure + flag_no_error = false; + else if(bit_dcode_n >= 36 && bit_dcode_n <= 41) //Bit 36 à 41 = Jours du moi + 1260: ca 01 movw r24, r20 + 1262: 84 97 sbiw r24, 0x24 ; 36 + 1264: 06 97 sbiw r24, 0x06 ; 6 + 1266: 08 f4 brcc .+2 ; 0x126a <_ZN5dcf776decodeEh+0x248> + 1268: 74 cf rjmp .-280 ; 0x1152 <_ZN5dcf776decodeEh+0x130> + 126a: 84 cf rjmp .-248 ; 0x1174 <_ZN5dcf776decodeEh+0x152> + if(bit) + dcf77_Minute |= 1 << (bit_dcode_n-21); + else + dcf77_Minute &= ~(1 << (bit_dcode_n-21)); + } + else if(bit_dcode_n == 28 && (dcf77_Minute&0x01) && !bit || bit_dcode_n == 28 && !(dcf77_Minute&0x01) && bit) //Bit de parité des minutes + 126c: 66 23 and r22, r22 + 126e: 91 f3 breq .-28 ; 0x1254 <_ZN5dcf776decodeEh+0x232> + 1270: e5 cf rjmp .-54 ; 0x123c <_ZN5dcf776decodeEh+0x21a> + flag_no_error = false; + else if(bit_dcode_n >= 29 && bit_dcode_n <= 34) //Bit 29 à 34 = Heure + 1272: c9 01 movw r24, r18 + 1274: 4d 97 sbiw r24, 0x1d ; 29 + 1276: 06 97 sbiw r24, 0x06 ; 6 + 1278: 08 f4 brcc .+2 ; 0x127c <_ZN5dcf776decodeEh+0x25a> + 127a: 1f cf rjmp .-450 ; 0x10ba <_ZN5dcf776decodeEh+0x98> + 127c: 54 cf rjmp .-344 ; 0x1126 <_ZN5dcf776decodeEh+0x104> + +0000127e <_ZN5dcf772hiEv>: + dcf77_flag_start = 0; + dcf77_bit_count = 0; + cli(); +} +void dcf77::hi() +{ + 127e: 8f 92 push r8 + 1280: 9f 92 push r9 + 1282: af 92 push r10 + 1284: bf 92 push r11 + 1286: ff 92 push r15 + 1288: 0f 93 push r16 + 128a: 1f 93 push r17 + 128c: cf 93 push r28 + 128e: df 93 push r29 + 1290: ec 01 movw r28, r24 + + time_check = millis() - time_low_dcf77; + 1292: 0e 94 f2 0a call 0x15e4 ; 0x15e4 <_Z6millisv> + 1296: 88 80 ld r8, Y + 1298: 99 80 ldd r9, Y+1 ; 0x01 + 129a: aa 80 ldd r10, Y+2 ; 0x02 + 129c: bb 80 ldd r11, Y+3 ; 0x03 + 129e: 8b 01 movw r16, r22 + 12a0: 08 19 sub r16, r8 + 12a2: 19 09 sbc r17, r9 + 12a4: 1f 8b std Y+23, r17 ; 0x17 + 12a6: 0e 8b std Y+22, r16 ; 0x16 + if( time_check >= temps_bas_min || time_low_dcf77 == 0) + 12a8: 04 31 cpi r16, 0x14 ; 20 + 12aa: 11 05 cpc r17, r1 + 12ac: 28 f4 brcc .+10 ; 0x12b8 <_ZN5dcf772hiEv+0x3a> + 12ae: 89 28 or r8, r9 + 12b0: 8a 28 or r8, r10 + 12b2: 8b 28 or r8, r11 + 12b4: 09 f0 breq .+2 ; 0x12b8 <_ZN5dcf772hiEv+0x3a> + 12b6: 56 c0 rjmp .+172 ; 0x1364 <_ZN5dcf772hiEv+0xe6> + { + PORTB |= 1< + 12c0: 6c 83 std Y+4, r22 ; 0x04 + 12c2: 7d 83 std Y+5, r23 ; 0x05 + 12c4: 8e 83 std Y+6, r24 ; 0x06 + 12c6: 9f 83 std Y+7, r25 ; 0x07 + time_low_dcf77 = millis() - time_low_dcf77; //Calcul du Temps bas + 12c8: 0e 94 f2 0a call 0x15e4 ; 0x15e4 <_Z6millisv> + 12cc: 08 81 ld r16, Y + 12ce: 19 81 ldd r17, Y+1 ; 0x01 + 12d0: 2a 81 ldd r18, Y+2 ; 0x02 + 12d2: 3b 81 ldd r19, Y+3 ; 0x03 + 12d4: ab 01 movw r20, r22 + 12d6: bc 01 movw r22, r24 + 12d8: 40 1b sub r20, r16 + 12da: 51 0b sbc r21, r17 + 12dc: 62 0b sbc r22, r18 + 12de: 73 0b sbc r23, r19 + 12e0: 48 83 st Y, r20 + 12e2: 59 83 std Y+1, r21 ; 0x01 + 12e4: 6a 83 std Y+2, r22 ; 0x02 + 12e6: 7b 83 std Y+3, r23 ; 0x03 + if(dcf77_flag_start && dcf77_bit_count <= 58) //Démarage de la démodulation si toute les condition sont OK + 12e8: 88 85 ldd r24, Y+8 ; 0x08 + 12ea: 88 23 and r24, r24 + 12ec: 79 f1 breq .+94 ; 0x134c <_ZN5dcf772hiEv+0xce> + 12ee: 89 85 ldd r24, Y+9 ; 0x09 + 12f0: 9a 85 ldd r25, Y+10 ; 0x0a + 12f2: cb 97 sbiw r24, 0x3b ; 59 + 12f4: 7c f5 brge .+94 ; 0x1354 <_ZN5dcf772hiEv+0xd6> + { + dcf77_status = decodage_en_cours; //En cours de décodage + 12f6: 81 e0 ldi r24, 0x01 ; 1 + 12f8: 90 e0 ldi r25, 0x00 ; 0 + 12fa: 9a 8b std Y+18, r25 ; 0x12 + 12fc: 89 8b std Y+17, r24 ; 0x11 + int bit; + if(time_low_dcf77 >= time_low_dcf77_min_0 && time_low_dcf77 <= time_low_dcf77_max_0) //Si le temp bas est <= 100ms le bit est à 0 + 12fe: db 01 movw r26, r22 + 1300: ca 01 movw r24, r20 + 1302: 80 55 subi r24, 0x50 ; 80 + 1304: 91 09 sbc r25, r1 + 1306: a1 09 sbc r26, r1 + 1308: b1 09 sbc r27, r1 + 130a: 89 97 sbiw r24, 0x29 ; 41 + 130c: a1 05 cpc r26, r1 + 130e: b1 05 cpc r27, r1 + 1310: 50 f0 brcs .+20 ; 0x1326 <_ZN5dcf772hiEv+0xa8> + bit = 0; + else if(time_low_dcf77 >= time_low_dcf77_min_1 && time_low_dcf77 <= time_low_dcf77_max_1) //Si le temp bas est <= 200ms le bit est à 1 + 1312: 44 5b subi r20, 0xB4 ; 180 + 1314: 51 09 sbc r21, r1 + 1316: 61 09 sbc r22, r1 + 1318: 71 09 sbc r23, r1 + 131a: 49 32 cpi r20, 0x29 ; 41 + 131c: 51 05 cpc r21, r1 + 131e: 61 05 cpc r22, r1 + 1320: 71 05 cpc r23, r1 + 1322: 18 f0 brcs .+6 ; 0x132a <_ZN5dcf772hiEv+0xac> + 1324: 04 c0 rjmp .+8 ; 0x132e <_ZN5dcf772hiEv+0xb0> + if(dcf77_flag_start && dcf77_bit_count <= 58) //Démarage de la démodulation si toute les condition sont OK + { + dcf77_status = decodage_en_cours; //En cours de décodage + int bit; + if(time_low_dcf77 >= time_low_dcf77_min_0 && time_low_dcf77 <= time_low_dcf77_max_0) //Si le temp bas est <= 100ms le bit est à 0 + bit = 0; + 1326: f1 2c mov r15, r1 + 1328: 02 c0 rjmp .+4 ; 0x132e <_ZN5dcf772hiEv+0xb0> + else if(time_low_dcf77 >= time_low_dcf77_min_1 && time_low_dcf77 <= time_low_dcf77_max_1) //Si le temp bas est <= 200ms le bit est à 1 + bit = 1; + 132a: ff 24 eor r15, r15 + 132c: f3 94 inc r15 + { + //dcf77_bit_count = 0; + //dcf77_flag_start = 0; + //return; + } + if(dcf77::decode(bit)) + 132e: 6f 2d mov r22, r15 + 1330: ce 01 movw r24, r28 + 1332: 0e 94 11 08 call 0x1022 ; 0x1022 <_ZN5dcf776decodeEh> + 1336: 88 23 and r24, r24 + 1338: 19 f0 breq .+6 ; 0x1340 <_ZN5dcf772hiEv+0xc2> + { + dcf77_bit_count = 0; + 133a: 1a 86 std Y+10, r1 ; 0x0a + 133c: 19 86 std Y+9, r1 ; 0x09 + dcf77_flag_start = 0; + 133e: 18 86 std Y+8, r1 ; 0x08 + //return; + } + dcf77_bit_count++; + 1340: 89 85 ldd r24, Y+9 ; 0x09 + 1342: 9a 85 ldd r25, Y+10 ; 0x0a + 1344: 01 96 adiw r24, 0x01 ; 1 + 1346: 9a 87 std Y+10, r25 ; 0x0a + 1348: 89 87 std Y+9, r24 ; 0x09 + 134a: 0e c0 rjmp .+28 ; 0x1368 <_ZN5dcf772hiEv+0xea> + } + else if(dcf77_bit_count > 58)//Après le décodage 60e bit + 134c: 89 85 ldd r24, Y+9 ; 0x09 + 134e: 9a 85 ldd r25, Y+10 ; 0x0a + 1350: cb 97 sbiw r24, 0x3b ; 59 + 1352: 54 f0 brlt .+20 ; 0x1368 <_ZN5dcf772hiEv+0xea> + { + //atc_.stop_capture(); //Arêt de la capture + dcf77_flag_start = 0; //Remise a zero du drapeau de démarage + 1354: 18 86 std Y+8, r1 ; 0x08 + dcf77_bit_count = 0; //Mise à zero le nombre de bit decodé + 1356: 1a 86 std Y+10, r1 ; 0x0a + 1358: 19 86 std Y+9, r1 ; 0x09 + dcf77_status = decodage_effectuer; + 135a: 82 e0 ldi r24, 0x02 ; 2 + 135c: 90 e0 ldi r25, 0x00 ; 0 + 135e: 9a 8b std Y+18, r25 ; 0x12 + 1360: 89 8b std Y+17, r24 ; 0x11 + 1362: 02 c0 rjmp .+4 ; 0x1368 <_ZN5dcf772hiEv+0xea> + // lcd1.set_cursor(5, 1); + // lcd1.print_text("Wt S.F."); + } + } + else + parasite_flag = true; + 1364: 81 e0 ldi r24, 0x01 ; 1 + 1366: 8d 8b std Y+21, r24 ; 0x15 +} + 1368: df 91 pop r29 + 136a: cf 91 pop r28 + 136c: 1f 91 pop r17 + 136e: 0f 91 pop r16 + 1370: ff 90 pop r15 + 1372: bf 90 pop r11 + 1374: af 90 pop r10 + 1376: 9f 90 pop r9 + 1378: 8f 90 pop r8 + 137a: 08 95 ret + +0000137c <__vector_1>: +uint8_t dcf77::year() +{ + return dcf77_Year; +} +ISR(INT0_vect)//Vecteur d'interuption INT0 +{ + 137c: 1f 92 push r1 + 137e: 0f 92 push r0 + 1380: 0f b6 in r0, 0x3f ; 63 + 1382: 0f 92 push r0 + 1384: 11 24 eor r1, r1 + 1386: 2f 93 push r18 + 1388: 3f 93 push r19 + 138a: 4f 93 push r20 + 138c: 5f 93 push r21 + 138e: 6f 93 push r22 + 1390: 7f 93 push r23 + 1392: 8f 93 push r24 + 1394: 9f 93 push r25 + 1396: af 93 push r26 + 1398: bf 93 push r27 + 139a: ef 93 push r30 + 139c: ff 93 push r31 + return 1; +} + +static __inline__ uint8_t __iCliRetVal(void) +{ + cli(); + 139e: f8 94 cli + ATOMIC_BLOCK(ATOMIC_FORCEON) + { + if(((PIND&(1<>PIND2))//Si c'est au niveau haut + 13a0: 4a 9b sbis 0x09, 2 ; 9 + 13a2: 05 c0 rjmp .+10 ; 0x13ae <__vector_1+0x32> + { + atc_.hi(); + 13a4: 8f e0 ldi r24, 0x0F ; 15 + 13a6: 91 e0 ldi r25, 0x01 ; 1 + 13a8: 0e 94 3f 09 call 0x127e ; 0x127e <_ZN5dcf772hiEv> + 13ac: 04 c0 rjmp .+8 ; 0x13b6 <__vector_1+0x3a> + } + else //Passage au niveau bas + { + atc_.lo(); + 13ae: 8f e0 ldi r24, 0x0F ; 15 + 13b0: 91 e0 ldi r25, 0x01 ; 1 + 13b2: 0e 94 bd 07 call 0xf7a ; 0xf7a <_ZN5dcf772loEv> + return 1; +} + +static __inline__ void __iSeiParam(const uint8_t *__s) +{ + sei(); + 13b6: 78 94 sei + } + } + 13b8: ff 91 pop r31 + 13ba: ef 91 pop r30 + 13bc: bf 91 pop r27 + 13be: af 91 pop r26 + 13c0: 9f 91 pop r25 + 13c2: 8f 91 pop r24 + 13c4: 7f 91 pop r23 + 13c6: 6f 91 pop r22 + 13c8: 5f 91 pop r21 + 13ca: 4f 91 pop r20 + 13cc: 3f 91 pop r19 + 13ce: 2f 91 pop r18 + 13d0: 0f 90 pop r0 + 13d2: 0f be out 0x3f, r0 ; 63 + 13d4: 0f 90 pop r0 + 13d6: 1f 90 pop r1 + 13d8: 18 95 reti + +000013da <_GLOBAL__sub_I_atc_>: +#ifndef DCF77_H_ +#define DCF77_H_ + +#include + +class dcf77 + 13da: 10 92 0f 01 sts 0x010F, r1 + 13de: 10 92 10 01 sts 0x0110, r1 + 13e2: 10 92 11 01 sts 0x0111, r1 + 13e6: 10 92 12 01 sts 0x0112, r1 + 13ea: 10 92 13 01 sts 0x0113, r1 + 13ee: 10 92 14 01 sts 0x0114, r1 + 13f2: 10 92 15 01 sts 0x0115, r1 + 13f6: 10 92 16 01 sts 0x0116, r1 + 13fa: 10 92 17 01 sts 0x0117, r1 + 13fe: 10 92 19 01 sts 0x0119, r1 + 1402: 10 92 18 01 sts 0x0118, r1 + 1406: 10 92 1a 01 sts 0x011A, r1 + 140a: 10 92 1b 01 sts 0x011B, r1 + 140e: 10 92 1c 01 sts 0x011C, r1 + 1412: 10 92 1d 01 sts 0x011D, r1 + 1416: 10 92 1e 01 sts 0x011E, r1 + 141a: 10 92 1f 01 sts 0x011F, r1 + 141e: 10 92 21 01 sts 0x0121, r1 + 1422: 10 92 20 01 sts 0x0120, r1 + 1426: 10 92 23 01 sts 0x0123, r1 + 142a: 10 92 22 01 sts 0x0122, r1 + 142e: 10 92 24 01 sts 0x0124, r1 + 1432: 10 92 26 01 sts 0x0126, r1 + 1436: 10 92 25 01 sts 0x0125, r1 + 143a: 08 95 ret + +0000143c <_ZN6ds1307C1Ev>: +#define LED_GREEN 1<: +} + +void ds1307::write(int adresse_m, uint8_t data) +{ + //SCK Config à 80Khz (MAX DS1307 = 100Khz) + TWBR = 0x5C; //Bit rate division à 92 + 1442: 8c e5 ldi r24, 0x5C ; 92 + 1444: 80 93 b8 00 sts 0x00B8, r24 + TWSR &= ~((1< + { + + } + + //DS1307 adresse write + TWDR = adresse_DS1307; //Inscrit l'adresse, Mode write + 1464: 80 ed ldi r24, 0xD0 ; 208 + 1466: 80 93 bb 00 sts 0x00BB, r24 + TWCR = (1< + { + + } + + //Adresse memoir send + TWDR = adresse_m; //Inscrit l'adresse mémoire + 147a: 60 93 bb 00 sts 0x00BB, r22 + TWCR = (1< + { + + } + + //Data send + TWDR = data; //Inscrit les donnée + 148e: 40 93 bb 00 sts 0x00BB, r20 + TWCR = (1< + { + + } + + //Stop condition + TWCR = (1< + { + + } + TWCR &= (~(1<: +} +uint8_t ds1307::read(uint8_t adresse_m) +{ + TWBR = 0x5C; //Bit rate division à 92 + 14be: 8c e5 ldi r24, 0x5C ; 92 + 14c0: 80 93 b8 00 sts 0x00B8, r24 + TWSR &= ~((1< + + + } + + //DS1307 adresse write + TWDR = adresse_DS1307; //Inscrit l'adresse, Mode write + 14e0: 80 ed ldi r24, 0xD0 ; 208 + 14e2: 80 93 bb 00 sts 0x00BB, r24 + TWCR = (1< + { + + } + + //DS1307 adresse mem + TWDR = adresse_m; //Inscrit l'adresse mémoir + 14f6: 60 93 bb 00 sts 0x00BB, r22 + TWCR = (1< + { + + } + + //Restart condition + TWCR = (1< + { + + } + + //DS1307 adresse + read + TWDR = adresse_DS1307|0x01; //Inscrit l'adresse + Mode read + 151a: 81 ed ldi r24, 0xD1 ; 209 + 151c: 80 93 bb 00 sts 0x00BB, r24 + TWCR = (1< + { + + } + + //Receive + TWCR = (1< + + } + + + + uint8_t data = TWDR; + 1540: 80 91 bb 00 lds r24, 0x00BB + + //Stop condition + TWCR = (1< + { + + } + + TWCR&=(~(1<: +uint8_t ds1307::r_seconde() +{ + return ds1307::read(0x00); + 1560: 60 e0 ldi r22, 0x00 ; 0 + 1562: 0e 94 5f 0a call 0x14be ; 0x14be <_ZN6ds13074readEh> +} + 1566: 08 95 ret + +00001568 <_ZN6ds13078r_minuteEv>: +uint8_t ds1307::r_minute() +{ + return ds1307::read(0x01); + 1568: 61 e0 ldi r22, 0x01 ; 1 + 156a: 0e 94 5f 0a call 0x14be ; 0x14be <_ZN6ds13074readEh> +} + 156e: 08 95 ret + +00001570 <_ZN6ds13076r_heurEv>: +uint8_t ds1307::r_heur() +{ + return ds1307::read(0x02); + 1570: 62 e0 ldi r22, 0x02 ; 2 + 1572: 0e 94 5f 0a call 0x14be ; 0x14be <_ZN6ds13074readEh> +} + 1576: 08 95 ret + +00001578 <_ZN6ds13076r_jourEv>: +uint8_t ds1307::r_jour() +{ + return ds1307::read(0x04); + 1578: 64 e0 ldi r22, 0x04 ; 4 + 157a: 0e 94 5f 0a call 0x14be ; 0x14be <_ZN6ds13074readEh> +} + 157e: 08 95 ret + +00001580 <_ZN6ds13075r_moiEv>: +uint8_t ds1307::r_moi() +{ + return ds1307::read(0x05); + 1580: 65 e0 ldi r22, 0x05 ; 5 + 1582: 0e 94 5f 0a call 0x14be ; 0x14be <_ZN6ds13074readEh> +} + 1586: 08 95 ret + +00001588 <_ZN6ds13076r_yearEv>: +uint8_t ds1307::r_year() +{ + return ds1307::read(0x06); + 1588: 66 e0 ldi r22, 0x06 ; 6 + 158a: 0e 94 5f 0a call 0x14be ; 0x14be <_ZN6ds13074readEh> +} + 158e: 08 95 ret + +00001590 <_ZN6ds13079w_secondeEh>: +void ds1307::w_seconde(uint8_t data) +{ + 1590: 46 2f mov r20, r22 + ds1307::write(0x00, data); + 1592: 60 e0 ldi r22, 0x00 ; 0 + 1594: 70 e0 ldi r23, 0x00 ; 0 + 1596: 0e 94 21 0a call 0x1442 ; 0x1442 <_ZN6ds13075writeEih> + 159a: 08 95 ret + +0000159c <_ZN6ds13078w_minuteEh>: +} +void ds1307::w_minute(uint8_t data) +{ + 159c: 46 2f mov r20, r22 + ds1307::write(0x01, data); + 159e: 61 e0 ldi r22, 0x01 ; 1 + 15a0: 70 e0 ldi r23, 0x00 ; 0 + 15a2: 0e 94 21 0a call 0x1442 ; 0x1442 <_ZN6ds13075writeEih> + 15a6: 08 95 ret + +000015a8 <_ZN6ds13076w_heurEhh>: +} +void ds1307::w_heur(uint8_t data, uint8_t pm) +{ + if(pm) + 15a8: 44 23 and r20, r20 + 15aa: 19 f0 breq .+6 ; 0x15b2 <_ZN6ds13076w_heurEhh+0xa> + data |= (1<<6); + 15ac: 46 2f mov r20, r22 + 15ae: 40 64 ori r20, 0x40 ; 64 + 15b0: 02 c0 rjmp .+4 ; 0x15b6 <_ZN6ds13076w_heurEhh+0xe> + else + data &= ~(1<<6); + 15b2: 46 2f mov r20, r22 + 15b4: 4f 7b andi r20, 0xBF ; 191 + ds1307::write(0x02, data); + 15b6: 62 e0 ldi r22, 0x02 ; 2 + 15b8: 70 e0 ldi r23, 0x00 ; 0 + 15ba: 0e 94 21 0a call 0x1442 ; 0x1442 <_ZN6ds13075writeEih> + 15be: 08 95 ret + +000015c0 <_ZN6ds13076w_dateEh>: +} +void ds1307::w_date(uint8_t data) +{ + 15c0: 46 2f mov r20, r22 + ds1307::write(0x04, data); + 15c2: 64 e0 ldi r22, 0x04 ; 4 + 15c4: 70 e0 ldi r23, 0x00 ; 0 + 15c6: 0e 94 21 0a call 0x1442 ; 0x1442 <_ZN6ds13075writeEih> + 15ca: 08 95 ret + +000015cc <_ZN6ds13075w_moiEh>: +} +void ds1307::w_moi(uint8_t data) +{ + 15cc: 46 2f mov r20, r22 + ds1307::write(0x05, data); + 15ce: 65 e0 ldi r22, 0x05 ; 5 + 15d0: 70 e0 ldi r23, 0x00 ; 0 + 15d2: 0e 94 21 0a call 0x1442 ; 0x1442 <_ZN6ds13075writeEih> + 15d6: 08 95 ret + +000015d8 <_ZN6ds13076w_yearEh>: +} +void ds1307::w_year(uint8_t data) +{ + 15d8: 46 2f mov r20, r22 + ds1307::write(0x06, data); + 15da: 66 e0 ldi r22, 0x06 ; 6 + 15dc: 70 e0 ldi r23, 0x00 ; 0 + 15de: 0e 94 21 0a call 0x1442 ; 0x1442 <_ZN6ds13075writeEih> + 15e2: 08 95 ret + +000015e4 <_Z6millisv>: + return 1; +} + +static __inline__ uint8_t __iCliRetVal(void) +{ + cli(); + 15e4: f8 94 cli +{ + unsigned long millis_return; + + // Ensure this cannot be disrupted + ATOMIC_BLOCK(ATOMIC_FORCEON) { + millis_return = timer1_millis; + 15e6: 60 91 27 01 lds r22, 0x0127 + 15ea: 70 91 28 01 lds r23, 0x0128 + 15ee: 80 91 29 01 lds r24, 0x0129 + 15f2: 90 91 2a 01 lds r25, 0x012A + return 1; +} + +static __inline__ void __iSeiParam(const uint8_t *__s) +{ + sei(); + 15f6: 78 94 sei + } + + return millis_return; +} + 15f8: 08 95 ret + +000015fa <__vector_11>: +ISR (TIMER1_COMPA_vect) +{ + 15fa: 1f 92 push r1 + 15fc: 0f 92 push r0 + 15fe: 0f b6 in r0, 0x3f ; 63 + 1600: 0f 92 push r0 + 1602: 11 24 eor r1, r1 + 1604: 8f 93 push r24 + 1606: 9f 93 push r25 + 1608: af 93 push r26 + 160a: bf 93 push r27 + timer1_millis++; + 160c: 80 91 27 01 lds r24, 0x0127 + 1610: 90 91 28 01 lds r25, 0x0128 + 1614: a0 91 29 01 lds r26, 0x0129 + 1618: b0 91 2a 01 lds r27, 0x012A + 161c: 01 96 adiw r24, 0x01 ; 1 + 161e: a1 1d adc r26, r1 + 1620: b1 1d adc r27, r1 + 1622: 80 93 27 01 sts 0x0127, r24 + 1626: 90 93 28 01 sts 0x0128, r25 + 162a: a0 93 29 01 sts 0x0129, r26 + 162e: b0 93 2a 01 sts 0x012A, r27 +} + 1632: bf 91 pop r27 + 1634: af 91 pop r26 + 1636: 9f 91 pop r25 + 1638: 8f 91 pop r24 + 163a: 0f 90 pop r0 + 163c: 0f be out 0x3f, r0 ; 63 + 163e: 0f 90 pop r0 + 1640: 1f 90 pop r1 + 1642: 18 95 reti + +00001644 <_Z9USART_iniv>: +#define BAUD 9600 +#define MYUBRR (((F_CPU / (BAUD * 16UL))) - 1) + +void USART_ini() +{ + UBRR0H = (unsigned char)(MYUBRR>>8); + 1644: 10 92 c5 00 sts 0x00C5, r1 + UBRR0L = (unsigned char)MYUBRR; + 1648: 87 e6 ldi r24, 0x67 ; 103 + 164a: 80 93 c4 00 sts 0x00C4, r24 + UCSR0B = (1<: +} +void USART_Transmit( unsigned char data ) +{ + /* Wait for empty transmit buffer */ + while ( !( UCSR0A & (1< + ; + /* Put data into buffer, sends the data */ + UDR0 = data; + 1666: 80 93 c6 00 sts 0x00C6, r24 + 166a: 08 95 ret + +0000166c <_Z13USART_Receivev>: +} +unsigned char USART_Receive( void ) +{ + /* Wait for data to be received */ + if((UCSR0A & (1< + return UDR0; + 1674: 80 91 c6 00 lds r24, 0x00C6 + 1678: 08 95 ret + else + return false; + 167a: 80 e0 ldi r24, 0x00 ; 0 + 167c: 08 95 ret + +0000167e
: +#include +#include +#include "./fonction.h" //Inclusion des fonction +int main(void) //Fonction Principale +{ + setup_pins(); //Configuration des pins et du registre à décalage + 167e: 0e 94 77 00 call 0xee ; 0xee <_Z10setup_pinsv> + while(1)//Boucle infinie + { + routine_affichage(); //Routinne d'affihage des tube nixie + 1682: 0e 94 3e 01 call 0x27c ; 0x27c <_Z17routine_affichagev> + bouton(); //Gestion des boutons de configuration + 1686: 0e 94 4b 03 call 0x696 ; 0x696 <_Z6boutonv> + couleur(); //Gestion des LED RGB + 168a: 0e 94 d9 02 call 0x5b2 ; 0x5b2 <_Z7couleurv> + uart_ds1307(); + 168e: 0e 94 f5 05 call 0xbea ; 0xbea <_Z11uart_ds1307v> + 1692: f7 cf rjmp .-18 ; 0x1682 + +00001694 <__tablejump2__>: + 1694: ee 0f add r30, r30 + 1696: ff 1f adc r31, r31 + +00001698 <__tablejump__>: + 1698: 05 90 lpm r0, Z+ + 169a: f4 91 lpm r31, Z + 169c: e0 2d mov r30, r0 + 169e: 09 94 ijmp + +000016a0 <_exit>: + 16a0: f8 94 cli + +000016a2 <__stop_program>: + 16a2: ff cf rjmp .-2 ; 0x16a2 <__stop_program> diff --git a/Debug/Nixie clock.map b/Debug/Nixie clock.map new file mode 100644 index 0000000..fac7d0c --- /dev/null +++ b/Debug/Nixie clock.map @@ -0,0 +1,844 @@ +Archive member included because of file (symbol) + +c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_exit.o) + c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5/crtm328p.o (exit) +c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_copy_data.o) + lib/LCD.o (__do_copy_data) +c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_clear_bss.o) + fonction.o (__do_clear_bss) +c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_ctors.o) + fonction.o (__do_global_ctors) +c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_tablejump.o) + c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_ctors.o) (__tablejump__) +c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(sprintf.o) + lib/LCD.o (sprintf) +c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(vfprintf_std.o) + c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(sprintf.o) (vfprintf) +c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(strnlen_P.o) + c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(vfprintf_std.o) (strnlen_P) +c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(strnlen.o) + c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(vfprintf_std.o) (strnlen) +c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(fputc.o) + c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(vfprintf_std.o) (fputc) +c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(ultoa_invert.o) + c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(vfprintf_std.o) (__ultoa_invert) +c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_prologue.o) + c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(sprintf.o) (__prologue_saves__) +c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_epilogue.o) + c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(sprintf.o) (__epilogue_restores__) + +Discarded input sections + + .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5/crtm328p.o + .text 0x00000000 0x0 fonction.o + .bss 0x00000000 0x0 fonction.o + .text._Z13init_interuptv + 0x00000000 0x18 fonction.o + .text._Z18affichage_shutdwonv + 0x00000000 0x2e fonction.o + .bss.abc 0x00000000 0x2 fonction.o + .bss.bcm_blue 0x00000000 0x2 fonction.o + .bss.bcm_green + 0x00000000 0x2 fonction.o + .bss.bcm_red 0x00000000 0x2 fonction.o + .text 0x00000000 0x0 lib/LCD.o + .bss 0x00000000 0x0 lib/LCD.o + .text._ZN7PCF85744sendEhh + 0x00000000 0x86 lib/LCD.o + .text._ZN3LCD15check_busy_flagEv + 0x00000000 0x14 lib/LCD.o + .text._ZN3LCD4sendEhb + 0x00000000 0x5a lib/LCD.o + .text._ZN3LCD12display_initEv + 0x00000000 0x6e lib/LCD.o + .text._ZN3LCD10send_leterEh + 0x00000000 0x2c lib/LCD.o + .text._ZN3LCD5clearEv + 0x00000000 0x32 lib/LCD.o + .text._ZN3LCD10set_cursorEii + 0x00000000 0x48 lib/LCD.o + .text._ZN3LCD10print_textEPc + 0x00000000 0x50 lib/LCD.o + .rodata.str1.1 + 0x00000000 0x3 lib/LCD.o + .text._ZN3LCD12print_numberEi + 0x00000000 0x6a lib/LCD.o + .text 0x00000000 0x0 lib/hc74595.o + .bss 0x00000000 0x0 lib/hc74595.o + .text 0x00000000 0x0 lib/DCF77.o + .bss 0x00000000 0x0 lib/DCF77.o + .text._ZN5dcf7713start_captureEv + 0x00000000 0x20 lib/DCF77.o + .text._ZN5dcf7712stop_captureEv + 0x00000000 0xe lib/DCF77.o + .text._ZN5dcf776statusEv + 0x00000000 0x8 lib/DCF77.o + .text._ZN5dcf777minutesEv + 0x00000000 0x6 lib/DCF77.o + .text._ZN5dcf775heureEv + 0x00000000 0x6 lib/DCF77.o + .text._ZN5dcf775monthEv + 0x00000000 0x6 lib/DCF77.o + .text._ZN5dcf779day_monthEv + 0x00000000 0x6 lib/DCF77.o + .text._ZN5dcf774yearEv + 0x00000000 0x6 lib/DCF77.o + .bss.lcd1 0x00000000 0x1 lib/DCF77.o + .text 0x00000000 0x0 lib/DS1307.o + .bss 0x00000000 0x0 lib/DS1307.o + .text 0x00000000 0x0 lib/timer.o + .bss 0x00000000 0x0 lib/timer.o + .text._Z11timer1_initv + 0x00000000 0x24 lib/timer.o + .text._Z16interup_1hz_initv + 0x00000000 0x10 lib/timer.o + .text 0x00000000 0x0 lib/UART.o + .bss 0x00000000 0x0 lib/UART.o + .text 0x00000000 0x0 Nixie clock.o + .bss 0x00000000 0x0 Nixie clock.o + .text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_exit.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_exit.o) + .text.libgcc.mul + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_exit.o) + .text.libgcc.div + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_exit.o) + .text.libgcc 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_exit.o) + .text.libgcc.prologue + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_exit.o) + .text.libgcc.builtins + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_exit.o) + .text.libgcc.fmul + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_exit.o) + .text.libgcc.fixed + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_exit.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_copy_data.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_copy_data.o) + .text.libgcc.mul + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_copy_data.o) + .text.libgcc.div + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_copy_data.o) + .text.libgcc 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_copy_data.o) + .text.libgcc.prologue + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_copy_data.o) + .text.libgcc.builtins + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_copy_data.o) + .text.libgcc.fmul + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_copy_data.o) + .text.libgcc.fixed + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_copy_data.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_clear_bss.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_clear_bss.o) + .text.libgcc.mul + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_clear_bss.o) + .text.libgcc.div + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_clear_bss.o) + .text.libgcc 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_clear_bss.o) + .text.libgcc.prologue + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_clear_bss.o) + .text.libgcc.builtins + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_clear_bss.o) + .text.libgcc.fmul + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_clear_bss.o) + .text.libgcc.fixed + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_clear_bss.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_ctors.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_ctors.o) + .text.libgcc.mul + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_ctors.o) + .text.libgcc.div + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_ctors.o) + .text.libgcc 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_ctors.o) + .text.libgcc.prologue + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_ctors.o) + .text.libgcc.builtins + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_ctors.o) + .text.libgcc.fmul + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_ctors.o) + .text.libgcc.fixed + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_ctors.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_tablejump.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_tablejump.o) + .text.libgcc.mul + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_tablejump.o) + .text.libgcc.div + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_tablejump.o) + .text.libgcc.prologue + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_tablejump.o) + .text.libgcc.builtins + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_tablejump.o) + .text.libgcc.fmul + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_tablejump.o) + .text.libgcc.fixed + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_tablejump.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(sprintf.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(sprintf.o) + .text.avr-libc + 0x00000000 0x44 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(sprintf.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(vfprintf_std.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(vfprintf_std.o) + .text.avr-libc + 0x00000000 0x3a4 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(vfprintf_std.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(strnlen_P.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(strnlen_P.o) + .text.avr-libc + 0x00000000 0x16 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(strnlen_P.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(strnlen.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(strnlen.o) + .text.avr-libc + 0x00000000 0x16 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(strnlen.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(fputc.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(fputc.o) + .text.avr-libc + 0x00000000 0x64 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(fputc.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(ultoa_invert.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(ultoa_invert.o) + .text.avr-libc + 0x00000000 0xbc c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(ultoa_invert.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_prologue.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_prologue.o) + .text.libgcc.mul + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_prologue.o) + .text.libgcc.div + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_prologue.o) + .text.libgcc 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_prologue.o) + .text.libgcc.prologue + 0x00000000 0x38 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_prologue.o) + .text.libgcc.builtins + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_prologue.o) + .text.libgcc.fmul + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_prologue.o) + .text.libgcc.fixed + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_prologue.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_epilogue.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_epilogue.o) + .text.libgcc.mul + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_epilogue.o) + .text.libgcc.div + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_epilogue.o) + .text.libgcc 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_epilogue.o) + .text.libgcc.prologue + 0x00000000 0x36 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_epilogue.o) + .text.libgcc.builtins + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_epilogue.o) + .text.libgcc.fmul + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_epilogue.o) + .text.libgcc.fixed + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_epilogue.o) + +Memory Configuration + +Name Origin Length Attributes +text 0x00000000 0x00020000 xr +data 0x00800060 0x0000ffa0 rw !x +eeprom 0x00810000 0x00010000 rw !x +fuse 0x00820000 0x00000400 rw !x +lock 0x00830000 0x00000400 rw !x +signature 0x00840000 0x00000400 rw !x +user_signatures 0x00850000 0x00000400 rw !x +*default* 0x00000000 0xffffffff + +Linker script and memory map + +Address of section .data set to 0x800100 +LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5/crtm328p.o +LOAD fonction.o +LOAD lib/LCD.o +LOAD lib/hc74595.o +LOAD lib/DCF77.o +LOAD lib/DS1307.o +LOAD lib/timer.o +LOAD lib/UART.o +LOAD Nixie clock.o +START GROUP +LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a +END GROUP +LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a +LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a +START GROUP +LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a +LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a +LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a +END GROUP + +.hash + *(.hash) + +.dynsym + *(.dynsym) + +.dynstr + *(.dynstr) + +.gnu.version + *(.gnu.version) + +.gnu.version_d + *(.gnu.version_d) + +.gnu.version_r + *(.gnu.version_r) + +.rel.init + *(.rel.init) + +.rela.init + *(.rela.init) + +.rel.text + *(.rel.text) + *(.rel.text.*) + *(.rel.gnu.linkonce.t*) + +.rela.text + *(.rela.text) + *(.rela.text.*) + *(.rela.gnu.linkonce.t*) + +.rel.fini + *(.rel.fini) + +.rela.fini + *(.rela.fini) + +.rel.rodata + *(.rel.rodata) + *(.rel.rodata.*) + *(.rel.gnu.linkonce.r*) + +.rela.rodata + *(.rela.rodata) + *(.rela.rodata.*) + *(.rela.gnu.linkonce.r*) + +.rel.data + *(.rel.data) + *(.rel.data.*) + *(.rel.gnu.linkonce.d*) + +.rela.data + *(.rela.data) + *(.rela.data.*) + *(.rela.gnu.linkonce.d*) + +.rel.ctors + *(.rel.ctors) + +.rela.ctors + *(.rela.ctors) + +.rel.dtors + *(.rel.dtors) + +.rela.dtors + *(.rela.dtors) + +.rel.got + *(.rel.got) + +.rela.got + *(.rela.got) + +.rel.bss + *(.rel.bss) + +.rela.bss + *(.rela.bss) + +.rel.plt + *(.rel.plt) + +.rela.plt + *(.rela.plt) + +.text 0x00000000 0x16a4 + *(.vectors) + .vectors 0x00000000 0x68 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5/crtm328p.o + 0x00000000 __vector_default + 0x00000000 __vectors + *(.vectors) + *(.progmem.gcc*) + 0x00000068 . = ALIGN (0x2) + 0x00000068 __trampolines_start = . + *(.trampolines) + .trampolines 0x00000068 0x0 linker stubs + *(.trampolines*) + 0x00000068 __trampolines_end = . + *(.progmem*) + 0x00000068 . = ALIGN (0x2) + *(.jumptables) + *(.jumptables*) + *(.lowtext) + *(.lowtext*) + 0x00000068 __ctors_start = . + *(.ctors) + .ctors 0x00000068 0x2 fonction.o + .ctors 0x0000006a 0x2 lib/DCF77.o + 0x0000006c __ctors_end = . + 0x0000006c __dtors_start = . + *(.dtors) + 0x0000006c __dtors_end = . + SORT(*)(.ctors) + SORT(*)(.dtors) + *(.init0) + .init0 0x0000006c 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5/crtm328p.o + 0x0000006c __init + *(.init0) + *(.init1) + *(.init1) + *(.init2) + .init2 0x0000006c 0xc c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5/crtm328p.o + *(.init2) + *(.init3) + *(.init3) + *(.init4) + .init4 0x00000078 0x16 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_copy_data.o) + 0x00000078 __do_copy_data + .init4 0x0000008e 0x10 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_clear_bss.o) + 0x0000008e __do_clear_bss + *(.init4) + *(.init5) + *(.init5) + *(.init6) + .init6 0x0000009e 0x16 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_ctors.o) + 0x0000009e __do_global_ctors + *(.init6) + *(.init7) + *(.init7) + *(.init8) + *(.init8) + *(.init9) + .init9 0x000000b4 0x8 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5/crtm328p.o + *(.init9) + *(.text) + .text 0x000000bc 0x4 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5/crtm328p.o + 0x000000bc __vector_22 + 0x000000bc __vector_24 + 0x000000bc __vector_12 + 0x000000bc __bad_interrupt + 0x000000bc __vector_6 + 0x000000bc __vector_3 + 0x000000bc __vector_23 + 0x000000bc __vector_25 + 0x000000bc __vector_13 + 0x000000bc __vector_17 + 0x000000bc __vector_19 + 0x000000bc __vector_7 + 0x000000bc __vector_5 + 0x000000bc __vector_4 + 0x000000bc __vector_9 + 0x000000bc __vector_2 + 0x000000bc __vector_21 + 0x000000bc __vector_15 + 0x000000bc __vector_8 + 0x000000bc __vector_14 + 0x000000bc __vector_10 + 0x000000bc __vector_16 + 0x000000bc __vector_18 + 0x000000bc __vector_20 + 0x000000c0 . = ALIGN (0x2) + *(.text.*) + .text._Z10int_to_bcdi + 0x000000c0 0x2e fonction.o + 0x000000c0 _Z10int_to_bcdi + .text._Z10setup_pinsv + 0x000000ee 0x42 fonction.o + 0x000000ee _Z10setup_pinsv + .text._Z14affichage_heurv + 0x00000130 0xa6 fonction.o + 0x00000130 _Z14affichage_heurv + .text._Z14affichage_datev + 0x000001d6 0xa6 fonction.o + 0x000001d6 _Z14affichage_datev + .text._Z17routine_affichagev + 0x0000027c 0xe fonction.o + 0x0000027c _Z17routine_affichagev + .text._Z12clignotementib + 0x0000028a 0x328 fonction.o + 0x0000028a _Z12clignotementib + .text._Z7couleurv + 0x000005b2 0xe4 fonction.o + 0x000005b2 _Z7couleurv + .text._Z6boutonv + 0x00000696 0x554 fonction.o + 0x00000696 _Z6boutonv + .text._Z11uart_ds1307v + 0x00000bea 0x1a6 fonction.o + 0x00000bea _Z11uart_ds1307v + .text._GLOBAL__sub_I_rtc + 0x00000d90 0x2a fonction.o + .text._ZN7hc74595C2EiiiPVh + 0x00000dba 0x58 lib/hc74595.o + 0x00000dba _ZN7hc74595C2EiiiPVh + 0x00000dba _ZN7hc74595C1EiiiPVh + .text._ZN7hc745954sendEhb + 0x00000e12 0x126 lib/hc74595.o + 0x00000e12 _ZN7hc745954sendEhb + .text._ZN7hc745957confirmEv + 0x00000f38 0x42 lib/hc74595.o + 0x00000f38 _ZN7hc745957confirmEv + .text._ZN5dcf772loEv + 0x00000f7a 0xa8 lib/DCF77.o + 0x00000f7a _ZN5dcf772loEv + .text._ZN5dcf776decodeEh + 0x00001022 0x25c lib/DCF77.o + 0x00001022 _ZN5dcf776decodeEh + .text._ZN5dcf772hiEv + 0x0000127e 0xfe lib/DCF77.o + 0x0000127e _ZN5dcf772hiEv + .text.__vector_1 + 0x0000137c 0x5e lib/DCF77.o + 0x0000137c __vector_1 + .text._GLOBAL__sub_I_atc_ + 0x000013da 0x62 lib/DCF77.o + .text._ZN6ds1307C2Ev + 0x0000143c 0x6 lib/DS1307.o + 0x0000143c _ZN6ds1307C2Ev + 0x0000143c _ZN6ds1307C1Ev + .text._ZN6ds13075writeEih + 0x00001442 0x7c lib/DS1307.o + 0x00001442 _ZN6ds13075writeEih + .text._ZN6ds13074readEh + 0x000014be 0xa2 lib/DS1307.o + 0x000014be _ZN6ds13074readEh + .text._ZN6ds13079r_secondeEv + 0x00001560 0x8 lib/DS1307.o + 0x00001560 _ZN6ds13079r_secondeEv + .text._ZN6ds13078r_minuteEv + 0x00001568 0x8 lib/DS1307.o + 0x00001568 _ZN6ds13078r_minuteEv + .text._ZN6ds13076r_heurEv + 0x00001570 0x8 lib/DS1307.o + 0x00001570 _ZN6ds13076r_heurEv + .text._ZN6ds13076r_jourEv + 0x00001578 0x8 lib/DS1307.o + 0x00001578 _ZN6ds13076r_jourEv + .text._ZN6ds13075r_moiEv + 0x00001580 0x8 lib/DS1307.o + 0x00001580 _ZN6ds13075r_moiEv + .text._ZN6ds13076r_yearEv + 0x00001588 0x8 lib/DS1307.o + 0x00001588 _ZN6ds13076r_yearEv + .text._ZN6ds13079w_secondeEh + 0x00001590 0xc lib/DS1307.o + 0x00001590 _ZN6ds13079w_secondeEh + .text._ZN6ds13078w_minuteEh + 0x0000159c 0xc lib/DS1307.o + 0x0000159c _ZN6ds13078w_minuteEh + .text._ZN6ds13076w_heurEhh + 0x000015a8 0x18 lib/DS1307.o + 0x000015a8 _ZN6ds13076w_heurEhh + .text._ZN6ds13076w_dateEh + 0x000015c0 0xc lib/DS1307.o + 0x000015c0 _ZN6ds13076w_dateEh + .text._ZN6ds13075w_moiEh + 0x000015cc 0xc lib/DS1307.o + 0x000015cc _ZN6ds13075w_moiEh + .text._ZN6ds13076w_yearEh + 0x000015d8 0xc lib/DS1307.o + 0x000015d8 _ZN6ds13076w_yearEh + .text._Z6millisv + 0x000015e4 0x16 lib/timer.o + 0x000015e4 _Z6millisv + .text.__vector_11 + 0x000015fa 0x4a lib/timer.o + 0x000015fa __vector_11 + .text._Z9USART_iniv + 0x00001644 0x18 lib/UART.o + 0x00001644 _Z9USART_iniv + .text._Z14USART_Transmith + 0x0000165c 0x10 lib/UART.o + 0x0000165c _Z14USART_Transmith + .text._Z13USART_Receivev + 0x0000166c 0x12 lib/UART.o + 0x0000166c _Z13USART_Receivev + .text.main 0x0000167e 0x16 Nixie clock.o + 0x0000167e main + .text.libgcc 0x00001694 0xc c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_tablejump.o) + 0x00001694 __tablejump2__ + 0x00001698 __tablejump__ + 0x000016a0 . = ALIGN (0x2) + *(.fini9) + .fini9 0x000016a0 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_exit.o) + 0x000016a0 _exit + 0x000016a0 exit + *(.fini9) + *(.fini8) + *(.fini8) + *(.fini7) + *(.fini7) + *(.fini6) + *(.fini6) + *(.fini5) + *(.fini5) + *(.fini4) + *(.fini4) + *(.fini3) + *(.fini3) + *(.fini2) + *(.fini2) + *(.fini1) + *(.fini1) + *(.fini0) + .fini0 0x000016a0 0x4 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_exit.o) + *(.fini0) + 0x000016a4 _etext = . + +.data 0x00800100 0x0 load address 0x000016a4 + 0x00800100 PROVIDE (__data_start, .) + *(.data) + .data 0x00800100 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5/crtm328p.o + .data 0x00800100 0x0 fonction.o + .data 0x00800100 0x0 lib/LCD.o + .data 0x00800100 0x0 lib/hc74595.o + .data 0x00800100 0x0 lib/DCF77.o + .data 0x00800100 0x0 lib/DS1307.o + .data 0x00800100 0x0 lib/timer.o + .data 0x00800100 0x0 lib/UART.o + .data 0x00800100 0x0 Nixie clock.o + .data 0x00800100 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_exit.o) + .data 0x00800100 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_copy_data.o) + .data 0x00800100 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_clear_bss.o) + .data 0x00800100 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_ctors.o) + .data 0x00800100 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_tablejump.o) + .data 0x00800100 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(sprintf.o) + .data 0x00800100 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(vfprintf_std.o) + .data 0x00800100 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(strnlen_P.o) + .data 0x00800100 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(strnlen.o) + .data 0x00800100 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(fputc.o) + .data 0x00800100 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(ultoa_invert.o) + .data 0x00800100 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_prologue.o) + .data 0x00800100 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_epilogue.o) + *(.data*) + *(.rodata) + *(.rodata*) + *(.gnu.linkonce.d*) + 0x00800100 . = ALIGN (0x2) + 0x00800100 _edata = . + 0x00800100 PROVIDE (__data_end, .) + +.bss 0x00800100 0x2b + 0x00800100 PROVIDE (__bss_start, .) + *(.bss) + *(.bss*) + .bss.bcm_rgb_actif + 0x00800100 0x2 fonction.o + 0x00800100 bcm_rgb_actif + .bss.usart 0x00800102 0x1 fonction.o + 0x00800102 usart + .bss.shiftRegister + 0x00800103 0xa fonction.o + 0x00800103 shiftRegister + .bss.rtc 0x0080010d 0x2 fonction.o + 0x0080010d rtc + .bss.atc_ 0x0080010f 0x18 lib/DCF77.o + 0x0080010f atc_ + .bss.timer1_millis + 0x00800127 0x4 lib/timer.o + 0x00800127 timer1_millis + *(COMMON) + 0x0080012b PROVIDE (__bss_end, .) + 0x000016a4 __data_load_start = LOADADDR (.data) + 0x000016a4 __data_load_end = (__data_load_start + SIZEOF (.data)) + +.noinit 0x0080012b 0x0 + 0x0080012b PROVIDE (__noinit_start, .) + *(.noinit*) + 0x0080012b PROVIDE (__noinit_end, .) + 0x0080012b _end = . + 0x0080012b PROVIDE (__heap_start, .) + +.eeprom 0x00810000 0x0 + *(.eeprom*) + 0x00810000 __eeprom_end = . + +.fuse + *(.fuse) + *(.lfuse) + *(.hfuse) + *(.efuse) + +.lock + *(.lock*) + +.signature + *(.signature*) + +.user_signatures + *(.user_signatures*) + +.stab + *(.stab) + +.stabstr + *(.stabstr) + +.stab.excl + *(.stab.excl) + +.stab.exclstr + *(.stab.exclstr) + +.stab.index + *(.stab.index) + +.stab.indexstr + *(.stab.indexstr) + +.comment 0x00000000 0x5c + *(.comment) + .comment 0x00000000 0x30 fonction.o + 0x31 (size before relaxing) + .comment 0x00000000 0x31 lib/LCD.o + .comment 0x00000000 0x31 lib/hc74595.o + .comment 0x00000000 0x31 lib/DCF77.o + .comment 0x00000000 0x31 lib/DS1307.o + .comment 0x00000000 0x31 lib/timer.o + .comment 0x00000000 0x31 lib/UART.o + .comment 0x00000000 0x31 Nixie clock.o + .comment 0x00000000 0x31 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(sprintf.o) + .comment 0x00000030 0x2c c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(vfprintf_std.o) + 0x2d (size before relaxing) + .comment 0x00000000 0x31 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1056/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(fputc.o) + +.note.gnu.build-id + *(.note.gnu.build-id) + +.debug + *(.debug) + +.line + *(.line) + +.debug_srcinfo + *(.debug_srcinfo) + +.debug_sfnames + *(.debug_sfnames) + +.debug_aranges 0x00000000 0x2a0 + *(.debug_aranges) + .debug_aranges + 0x00000000 0x78 fonction.o + .debug_aranges + 0x00000078 0x60 lib/LCD.o + .debug_aranges + 0x000000d8 0x30 lib/hc74595.o + .debug_aranges + 0x00000108 0x80 lib/DCF77.o + .debug_aranges + 0x00000188 0x90 lib/DS1307.o + .debug_aranges + 0x00000218 0x38 lib/timer.o + .debug_aranges + 0x00000250 0x30 lib/UART.o + .debug_aranges + 0x00000280 0x20 Nixie clock.o + +.debug_pubnames + *(.debug_pubnames) + +.debug_info 0x00000000 0x391a + *(.debug_info .gnu.linkonce.wi.*) + .debug_info 0x00000000 0x1957 fonction.o + .debug_info 0x00001957 0x9d8 lib/LCD.o + .debug_info 0x0000232f 0x2fa lib/hc74595.o + .debug_info 0x00002629 0x85e lib/DCF77.o + .debug_info 0x00002e87 0x754 lib/DS1307.o + .debug_info 0x000035db 0x18e lib/timer.o + .debug_info 0x00003769 0xc3 lib/UART.o + .debug_info 0x0000382c 0xee Nixie clock.o + +.debug_abbrev 0x00000000 0xe5f + *(.debug_abbrev) + .debug_abbrev 0x00000000 0x344 fonction.o + .debug_abbrev 0x00000344 0x286 lib/LCD.o + .debug_abbrev 0x000005ca 0x1f4 lib/hc74595.o + .debug_abbrev 0x000007be 0x2de lib/DCF77.o + .debug_abbrev 0x00000a9c 0x1a1 lib/DS1307.o + .debug_abbrev 0x00000c3d 0x135 lib/timer.o + .debug_abbrev 0x00000d72 0x8a lib/UART.o + .debug_abbrev 0x00000dfc 0x63 Nixie clock.o + +.debug_line 0x00000000 0x101d + *(.debug_line .debug_line.* .debug_line_end) + .debug_line 0x00000000 0x4ee fonction.o + .debug_line 0x000004ee 0x247 lib/LCD.o + .debug_line 0x00000735 0x181 lib/hc74595.o + .debug_line 0x000008b6 0x2fa lib/DCF77.o + .debug_line 0x00000bb0 0x226 lib/DS1307.o + .debug_line 0x00000dd6 0x171 lib/timer.o + .debug_line 0x00000f47 0x6b lib/UART.o + .debug_line 0x00000fb2 0x6b Nixie clock.o + +.debug_frame 0x00000000 0x648 + *(.debug_frame) + .debug_frame 0x00000000 0x138 fonction.o + .debug_frame 0x00000138 0x13c lib/LCD.o + .debug_frame 0x00000274 0x64 lib/hc74595.o + .debug_frame 0x000002d8 0x190 lib/DCF77.o + .debug_frame 0x00000468 0x104 lib/DS1307.o + .debug_frame 0x0000056c 0x74 lib/timer.o + .debug_frame 0x000005e0 0x44 lib/UART.o + .debug_frame 0x00000624 0x24 Nixie clock.o + +.debug_str 0x00000000 0xb41 + *(.debug_str) + .debug_str 0x00000000 0x63d fonction.o + 0x685 (size before relaxing) + .debug_str 0x0000063d 0x18e lib/LCD.o + 0x365 (size before relaxing) + .debug_str 0x000007cb 0x3e lib/hc74595.o + 0x269 (size before relaxing) + .debug_str 0x00000809 0x283 lib/DCF77.o + 0x58e (size before relaxing) + .debug_str 0x00000a8c 0x2b lib/DS1307.o + 0x353 (size before relaxing) + .debug_str 0x00000ab7 0x60 lib/timer.o + 0x22c (size before relaxing) + .debug_str 0x00000b17 0x10 lib/UART.o + 0x1dc (size before relaxing) + .debug_str 0x00000b27 0x1a Nixie clock.o + 0x20c (size before relaxing) + +.debug_loc 0x00000000 0x23d5 + *(.debug_loc) + .debug_loc 0x00000000 0x12f6 fonction.o + .debug_loc 0x000012f6 0x60f lib/LCD.o + .debug_loc 0x00001905 0x1a3 lib/hc74595.o + .debug_loc 0x00001aa8 0x54c lib/DCF77.o + .debug_loc 0x00001ff4 0x35e lib/DS1307.o + .debug_loc 0x00002352 0x83 lib/timer.o + +.debug_macinfo + *(.debug_macinfo) + +.debug_weaknames + *(.debug_weaknames) + +.debug_funcnames + *(.debug_funcnames) + +.debug_typenames + *(.debug_typenames) + +.debug_varnames + *(.debug_varnames) + +.debug_pubtypes + *(.debug_pubtypes) + +.debug_ranges 0x00000000 0x4c8 + *(.debug_ranges) + .debug_ranges 0x00000000 0x310 fonction.o + .debug_ranges 0x00000310 0x50 lib/LCD.o + .debug_ranges 0x00000360 0x20 lib/hc74595.o + .debug_ranges 0x00000380 0x70 lib/DCF77.o + .debug_ranges 0x000003f0 0x80 lib/DS1307.o + .debug_ranges 0x00000470 0x28 lib/timer.o + .debug_ranges 0x00000498 0x20 lib/UART.o + .debug_ranges 0x000004b8 0x10 Nixie clock.o + +.debug_macro + *(.debug_macro) +OUTPUT(Nixie clock.elf elf32-avr) +LOAD linker stubs diff --git a/Debug/Nixie clock.o b/Debug/Nixie clock.o new file mode 100644 index 0000000000000000000000000000000000000000..ce142955aa087c111f69330fb6ffcb3cfc53e935 GIT binary patch literal 3328 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 literal 0 HcmV?d00001 diff --git a/Debug/lib/DCF77.d b/Debug/lib/DCF77.d new file mode 100644 index 0000000..45cf401 --- /dev/null +++ b/Debug/lib/DCF77.d @@ -0,0 +1,63 @@ +lib/DCF77.d lib/DCF77.o: ../lib/DCF77.cpp ../lib/DCF77.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\stdint.h \ + ../lib/timer.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\avr\io.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\inttypes.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\avr\iom328p.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\avr\portpins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\avr\common.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\avr\version.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\avr\fuse.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\avr\lock.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\avr\interrupt.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\util\atomic.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\util\delay.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\util\delay_basic.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\math.h \ + ../lib/LCD.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\string.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h + +../lib/DCF77.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\stdint.h: + +../lib/timer.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\avr\io.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\inttypes.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\avr\iom328p.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\avr\portpins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\avr\common.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\avr\version.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\avr\fuse.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\avr\lock.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\avr\interrupt.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\util\atomic.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\util\delay.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\util\delay_basic.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\math.h: + +../lib/LCD.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\string.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h: diff --git a/Debug/lib/DCF77.o b/Debug/lib/DCF77.o new file mode 100644 index 0000000000000000000000000000000000000000..aa8f6df685b80dc622ba4fb289522f1d1d9ae3d0 GIT binary patch literal 19032 zcmeHO4Rn;%nZDnANlZwX5aJIYgnA^;zt!kCnM}ykWF}4~2--?w z0Qpn$1EN^Vu|KZ0wyw5yyVh#fV?9=_*3utOx2^cID|Ow9maW#Mvd?qB_s-l5vG(kq z-JY{&@5wj!xzBy>d*A!}-S3;phI1Rwa~wyR;HZmLCZ$wkxl)^uS+4~Zs#?ufFAcpq z^o}!guYZ?P6E?5Dv-d#HP)r@%yKdL311}Ba?>>0v5og@y@taFFf4D1u_e+DX4!%2h zbg+16>X28GWX@& z^agtu_I}-Y+*x$;MTO0UU4@N(SNFyHHuN#St#5tbw!XXjdJi=AUfmn--O#(@oQoHQ zbFa@;hkFk6mZ;$^o3@lYhk6fexm68M+BR{U8ty%C+je?7b)b0QX#czYulB#xpTGNv zQ@*u+>$DSUbDhJj<<4O>yy(EH18Vqd&JP`D&yqa~%#2#*hGA6=|Ij&i&v9U(Jw)69 z^<$12ZY{oH>bBj!!_PZIo3>W=-P#Kqqv!YRhN9e4RB6k7n|h9_VbA_^&INn&()KSH z#r`hX-zfG+%kS9@MY*RaucPN1E&FNaPw-i{R}DYsY_#g!I7*$nQRgP9bF}=P-B6T! ziszhdd-`eyFcNCm-IJSc%Wb3B-2=O~irvxjdv-%n?kN^ud{M#jnu}o9>-(ohvDd$K zYh}-NukT08@7WDSxu@vC2vNz{zQ}p}oY2Ax>$jJ0&);oET@7UWI#6(L!NUbx z_uQNNaIQME^s0*r!UfkCtf;#vSFab;_Fk15K04#~yAsteI$T{`Ig>U|+&p13EjoAX zy>%;Akyt-8VKeh?kvg*1)sy`X_3!K7saIC-*1@e@VSStUxlw=Ksy{dB&mQDX9V{L! zezbV7WX7DKg+mt(g@zJC8-{ic?HhV%=*gjXhmHMG>Ik{fsrSiR0zD{X8!S%n43O!?`m$OK@ za=qm7UNT3LCs61s&zIy$i?z5wk`rolvQUx}y=0LjCwa-Sl04Z<`XxEpOBPFVikBQG z$uh5^5=l<=lBJRicwU_#$!ROJ8z;KQ>Hc$PAgP=X60NxMUqKTbC3!P--c8_d$>bF{ z?Fr@1(ph(azQ@jLiz)XMo%Jy2?`E>b0Ae&M_(|`bmqEO8O#Z3q{PℜW7EM)A=QE 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 literal 0 HcmV?d00001 diff --git a/Debug/lib/DS1307.d b/Debug/lib/DS1307.d new file mode 100644 index 0000000..6b45085 --- /dev/null +++ b/Debug/lib/DS1307.d @@ -0,0 +1,46 @@ +lib/DS1307.d lib/DS1307.o: ../lib/DS1307.cpp \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\avr\io.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\inttypes.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\avr\iom328p.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\avr\portpins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\avr\common.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\avr\version.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\avr\fuse.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\avr\lock.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\util\delay.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\util\delay_basic.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\math.h \ + ../lib/DS1307.h + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\avr\io.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\inttypes.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\avr\iom328p.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\avr\portpins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\avr\common.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\avr\version.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\avr\fuse.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\avr\lock.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\util\delay.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\util\delay_basic.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\math.h: + +../lib/DS1307.h: diff --git a/Debug/lib/DS1307.o b/Debug/lib/DS1307.o new file mode 100644 index 0000000000000000000000000000000000000000..b9c29eb1d994743cdebd2d585bd73bcf084a3710 GIT binary patch literal 13772 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 RkR_h{7o)b{*<=~le*x5-f}#Kb literal 0 HcmV?d00001 diff --git a/Debug/lib/UART.d b/Debug/lib/UART.d new file mode 100644 index 0000000..3fe62b4 --- /dev/null +++ b/Debug/lib/UART.d @@ -0,0 +1,46 @@ +lib/UART.d lib/UART.o: ../lib/UART.cpp \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\avr\io.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\inttypes.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\avr\iom328p.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\avr\portpins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\avr\common.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\avr\version.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\avr\fuse.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\avr\lock.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\util\delay.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\util\delay_basic.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\math.h \ + ../lib/UART.h + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\avr\io.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\inttypes.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\avr\iom328p.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\avr\portpins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\avr\common.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\avr\version.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\avr\fuse.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\avr\lock.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\util\delay.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\util\delay_basic.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\math.h: + +../lib/UART.h: diff --git a/Debug/lib/UART.o b/Debug/lib/UART.o new file mode 100644 index 0000000000000000000000000000000000000000..573a08e46db2cad2dc20daec53f58713870021a7 GIT binary patch literal 3540 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 literal 0 HcmV?d00001 diff --git a/Debug/make4656-1.bat b/Debug/make4656-1.bat new file mode 100644 index 0000000..b8734e7 --- /dev/null +++ b/Debug/make4656-1.bat @@ -0,0 +1,2 @@ +@echo off +"C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.2.939\avr8-gnu-toolchain\bin\avr-objcopy.exe" -O ihex -R .eeprom -R .fuse -R .lock -R .signature "Nixie clock.elf" "Nixie clock.hex" diff --git a/Debug/make5444-1.bat b/Debug/make5444-1.bat new file mode 100644 index 0000000..37ac279 --- /dev/null +++ b/Debug/make5444-1.bat @@ -0,0 +1,2 @@ +@echo off +"C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.2.939\avr8-gnu-toolchain\bin\avr-g++.exe" -o "Nixie clock.elf" fonction.o lib/LCD.o lib/hc74595.o lib/DCF77.o lib/DS1307.o lib/timer.o "Nixie clock.o" -Wl,-Map="Nixie clock.map" -Wl,--start-group -Wl,-lm -Wl,--end-group -Wl,--gc-sections -mmcu=atmega328p diff --git a/Debug/make5444-2.bat b/Debug/make5444-2.bat new file mode 100644 index 0000000..5e228eb --- /dev/null +++ b/Debug/make5444-2.bat @@ -0,0 +1,2 @@ +@echo off +"C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.2.939\avr8-gnu-toolchain\bin\avr-objcopy.exe" -j .eeprom --set-section-flags=.eeprom=alloc,load --change-section-lma .eeprom=0 --no-change-warnings -O ihex "Nixie clock.elf" "Nixie clock.eep" || exit 0 diff --git a/Debug/make6940-1.bat b/Debug/make6940-1.bat new file mode 100644 index 0000000..b8734e7 --- /dev/null +++ b/Debug/make6940-1.bat @@ -0,0 +1,2 @@ +@echo off +"C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.2.939\avr8-gnu-toolchain\bin\avr-objcopy.exe" -O ihex -R .eeprom -R .fuse -R .lock -R .signature "Nixie clock.elf" "Nixie clock.hex" diff --git a/Debug/make6940-2.bat b/Debug/make6940-2.bat new file mode 100644 index 0000000..5e228eb --- /dev/null +++ b/Debug/make6940-2.bat @@ -0,0 +1,2 @@ +@echo off +"C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.2.939\avr8-gnu-toolchain\bin\avr-objcopy.exe" -j .eeprom --set-section-flags=.eeprom=alloc,load --change-section-lma .eeprom=0 --no-change-warnings -O ihex "Nixie clock.elf" "Nixie clock.eep" || exit 0 diff --git a/Debug/make6940-3.bat b/Debug/make6940-3.bat new file mode 100644 index 0000000..e07dbb7 --- /dev/null +++ b/Debug/make6940-3.bat @@ -0,0 +1,2 @@ +@echo off +"C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.2.939\avr8-gnu-toolchain\bin\avr-objdump.exe" -h -S "Nixie clock.elf" > "Nixie clock.lss" diff --git a/Debug/make6940-4.bat b/Debug/make6940-4.bat new file mode 100644 index 0000000..12a732c --- /dev/null +++ b/Debug/make6940-4.bat @@ -0,0 +1,2 @@ +@echo off +"C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.2.939\avr8-gnu-toolchain\bin\avr-objcopy.exe" -O srec -R .eeprom -R .fuse -R .lock -R .signature "Nixie clock.elf" "Nixie clock.srec" diff --git a/Debug/makedep.mk b/Debug/makedep.mk new file mode 100644 index 0000000..4d186bf --- /dev/null +++ b/Debug/makedep.mk @@ -0,0 +1,20 @@ +################################################################################ +# Automatically-generated file. Do not edit or delete the file +################################################################################ + +fonction.cpp + +lib\LCD.cpp + +lib\hc74595.cpp + +lib\DCF77.cpp + +lib\DS1307.cpp + +lib\timer.cpp + +lib\UART.cpp + +Nixie clock.cpp + diff --git a/Nixie clock.cpp b/Nixie clock.cpp new file mode 100644 index 0000000..f934de8 --- /dev/null +++ b/Nixie clock.cpp @@ -0,0 +1,24 @@ +/* + * Horloge à Tube Nixie + * + * + * V:1.1Beta + * Dernière modification : 27.05.14 + * + */ +#define F_CPU 16000000UL //Fréquence horloge à 16Mhz +#include +#include +#include +#include "./fonction.h" //Inclusion des fonction +int main(void) //Fonction Principale +{ + setup_pins(); //Configuration des pins et du registre à décalage + while(1)//Boucle infinie + { + routine_affichage(); //Routinne d'affihage des tube nixie + bouton(); //Gestion des boutons de configuration + couleur(); //Gestion des LED RGB + uart_ds1307(); + } +} \ No newline at end of file diff --git a/Nixie clock.cppproj b/Nixie clock.cppproj new file mode 100644 index 0000000..fcb7579 --- /dev/null +++ b/Nixie clock.cppproj @@ -0,0 +1,196 @@ + + + + 2.0 + 6.1 + com.Atmel.AVRGCC8.CPP + {f71abc8f-40b1-4ec1-b079-ec2cf2114afb} + ATmega328P + none + Executable + CPP + $(MSBuildProjectName) + .elf + $(MSBuildProjectDirectory)\$(Configuration) + Nixie clock + Nixie clock + Nixie clock + Native + true + false + exception_table + 0 + true + 0x20000000 + true + + 2 + + + + + + + + + + + + + + com.atmel.avrdbg.tool.simulator + + com.atmel.avrdbg.tool.simulator + Simulator + + + + + + 127.0.0.1 + 64002 + False + + + + false + + + + + + + + + + True + True + True + True + True + True + + + NDEBUG + + + Optimize for size (-Os) + True + True + True + True + True + + + NDEBUG + + + Optimize for size (-Os) + True + True + True + + + libm + + + <segmentname>=<address>, for example .boot=0xff + + + + + + + True + True + True + True + True + True + + + DEBUG + + + Optimize (-O1) + True + True + Default (-g2) + True + True + True + + + DEBUG + + + Optimize (-O1) + True + True + Default (-g2) + True + + + libm + + + <segmentname>=<address>, for example .boot=0xff + Default (-Wa,-g) + + + + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + + + + + \ No newline at end of file diff --git a/Nixie clock.cpp~ b/Nixie clock.cpp~ new file mode 100644 index 0000000..f934de8 --- /dev/null +++ b/Nixie clock.cpp~ @@ -0,0 +1,24 @@ +/* + * Horloge à Tube Nixie + * + * + * V:1.1Beta + * Dernière modification : 27.05.14 + * + */ +#define F_CPU 16000000UL //Fréquence horloge à 16Mhz +#include +#include +#include +#include "./fonction.h" //Inclusion des fonction +int main(void) //Fonction Principale +{ + setup_pins(); //Configuration des pins et du registre à décalage + while(1)//Boucle infinie + { + routine_affichage(); //Routinne d'affihage des tube nixie + bouton(); //Gestion des boutons de configuration + couleur(); //Gestion des LED RGB + uart_ds1307(); + } +} \ No newline at end of file diff --git a/Nixie clock.h b/Nixie clock.h new file mode 100644 index 0000000..a8d17d6 --- /dev/null +++ b/Nixie clock.h @@ -0,0 +1,17 @@ +/* + * Nixie_clock.h + * + * Created: 25/12/2013 14:25:40 + * Author: Adrien + */ + + +#ifndef NIXIE CLOCK_H_ +#define NIXIE CLOCK_H_ + +void affichage_heur(); +void affichage_date(); + + + +#endif /* NIXIE CLOCK_H_ */ \ No newline at end of file diff --git a/fonction.cpp b/fonction.cpp new file mode 100644 index 0000000..cc6ff25 --- /dev/null +++ b/fonction.cpp @@ -0,0 +1,537 @@ +/* + * fonction.cpp + * + * Created: 19/12/2013 14:18:08 + * Author: Adrien + */ + +#define F_CPU 16000000UL //Fréquence horloge à 16Mhz + +#include +#include +#include +/* Chargement des librairie */ +#include "./lib/hc74595.h" +#include "./lib/DS1307.h" +#include "lib/UART.h" + +/* Config des pin */ +#define LED_RED 1< Passage à 0 sur les Nixie Tube ...) +#define LOW(bit) ~(bit) + + + +/* Création des objets */ + +ds1307 rtc; +hc74595 shiftRegister(SHIFT_REGISTER_DATA, SHIFT_REGISTER_CLK, SHIFT_REGISTER_CONFIRM, &PORTD); +uint8_t usart; +int bcm_rgb_actif = 0; + +int bcm_red = 0; +int bcm_green = 0; +int bcm_blue = 0; +int abc=0; +void init_interupt() +{ + TCCR0A = 0x00; + TCCR0B = (TCCR0B&(~(_BV(CS01)|_BV(CS02))))|_BV(CS00); //Prescale 8 + TCNT0 = 0x00 ; + OCR0A = 0x01; + TIMSK0 = _BV(OCIE0A); //Enable interupt +} +int int_to_bcd(int val) +{ + int high = 0; + while (val >= 10) // Count tens + { + high++; + val -= 10; + } + + return (high << 4) | val; +} +void setup_pins() +{ + USART_ini(); + DDRD &= LOW(1<>4)|((envoi&0x0f)<<4); + shiftRegister.send(envoi, 0); + envoi = rtc.r_minute(); + envoi = (envoi>>4)|((envoi&0x0f)<<4); + shiftRegister.send(envoi, 0); + envoi = rtc.r_seconde(); + envoi = (envoi>>4)|((envoi&0x0f)<<4); + shiftRegister.send(envoi, 0); + shiftRegister.confirm(); +} +void affichage_date() +{ + uint8_t envoi = rtc.r_jour(); + envoi = (envoi>>4)|((envoi&0x0f)<<4); + shiftRegister.send(envoi, false); + envoi = rtc.r_moi(); + envoi = (envoi>>4)|((envoi&0x0f)<<4); + shiftRegister.send(envoi, false); + envoi = rtc.r_year(); + envoi = (envoi>>4)|((envoi&0x0f)<<4); + shiftRegister.send(envoi, false); + shiftRegister.confirm(); +} +void affichage_shutdwon() +{ + shiftRegister.send(0xFF, false); + shiftRegister.send(0xFF, false); + shiftRegister.send(0xFF, false); + shiftRegister.confirm(); +} +void routine_affichage() +{ + uint8_t secondes_var = rtc.r_seconde(); + if(secondes_var >= 0x20 && secondes_var <= 0x30 && 1==2) //Affiche la date pandant 10 seconde + affichage_date(); + else + affichage_heur(); +} +void clignotement(int n, bool date) +{ + n++; + uint8_t envoi; + if(date) + { + switch(n) + { + case 1: + envoi = 0xff; + shiftRegister.send(envoi, false); + envoi = rtc.r_moi(); + envoi = (envoi>>4)|((envoi&0x0f)<<4); + shiftRegister.send(envoi, false); + envoi = rtc.r_year(); + envoi = (envoi>>4)|((envoi&0x0f)<<4); + shiftRegister.send(envoi, false); + shiftRegister.confirm(); + break; + case 2: + envoi = rtc.r_jour(); + envoi = (envoi>>4)|((envoi&0x0f)<<4); + shiftRegister.send(envoi, false); + envoi = 0xff; + shiftRegister.send(envoi, false); + envoi = rtc.r_year(); + envoi = (envoi>>4)|((envoi&0x0f)<<4); + shiftRegister.send(envoi, false); + shiftRegister.confirm(); + break; + case 3: + envoi = rtc.r_jour(); + envoi = (envoi>>4)|((envoi&0x0f)<<4); + shiftRegister.send(envoi, false); + envoi = rtc.r_moi(); + envoi = (envoi>>4)|((envoi&0x0f)<<4); + shiftRegister.send(envoi, false); + envoi = 0xff; + shiftRegister.send(envoi, false); + shiftRegister.confirm(); + break; + } + } + else + { + switch(n) + { + case 1: + envoi = 0xff; + shiftRegister.send(envoi, 0); + envoi = rtc.r_minute(); + envoi = (envoi>>4)|((envoi&0x0f)<<4); + shiftRegister.send(envoi, 0); + envoi = rtc.r_seconde(); + envoi = (envoi>>4)|((envoi&0x0f)<<4); + shiftRegister.send(envoi, 0); + shiftRegister.confirm(); + break; + case 2: + envoi = rtc.r_heur(); + envoi = (envoi>>4)|((envoi&0x0f)<<4); + shiftRegister.send(envoi, 0); + envoi = 0xff; + shiftRegister.send(envoi, 0); + envoi = rtc.r_seconde(); + envoi = (envoi>>4)|((envoi&0x0f)<<4); + shiftRegister.send(envoi, 0); + shiftRegister.confirm(); + break; + case 3: + envoi = rtc.r_heur(); + envoi = (envoi>>4)|((envoi&0x0f)<<4); + shiftRegister.send(envoi, 0); + envoi = rtc.r_minute(); + envoi = (envoi>>4)|((envoi&0x0f)<<4); + shiftRegister.send(envoi, 0); + envoi = 0xff; + shiftRegister.send(envoi, 0); + shiftRegister.confirm(); + break; + } + } +} +void couleur() +{ + usart = USART_Receive(); + uint8_t mask = LED_BLUE|LED_GREEN|LED_RED; //COnfigure le mask + uint8_t curent_couleur; + if((PINB & (1< mask) + curent_couleur = 0x00; + else + bcm_rgb_actif = 0; + if (curent_couleur&LED_BLUE) + PORTB |= LED_BLUE; + else + PORTB &= LOW(LED_BLUE); + if(curent_couleur&LED_GREEN) + PORTB |= LED_GREEN; + else + PORTB &= LOW(LED_GREEN); + if(curent_couleur & LED_RED) + PORTB |= LED_RED; + else + PORTB &= LOW(LED_RED); + } + } + else if((PINB & (1<= (tmps_clignotement*2)) + a = 0; + if (PINB & (1< tmps_clignotement) //Clignotement + clignotement(SR_SECONDE, false); + else + affichage_heur(); + if((PINB & (1< tmps_clignotement) //Clignotement + clignotement(SR_MINUTE, false); + else + affichage_heur(); + if(PINB & (1<>4)+1)<<4; //Incrémente de 10 + else + curent_minute++; //Incrémente de 1 + if(curent_minute >= 0x60) //Si supérieur à 60 retour à 00 /!\ Pas d'incrémentation de l'heur !! + curent_minute = 0x00; + rtc.w_minute(curent_minute); //Met à jour le DS1307 + } + else if(PINB & (1<>4)-1)<<4)|0x09; //Décrémente de 10 + else if(curent_minute == 0x00) // Bug en simulation ..........???????????~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + curent_minute = 0x59; + else + curent_minute--; //Décrémente de 1 + if(curent_minute > 0x60) + curent_minute = 0x59; + rtc.w_minute(curent_minute); //Met à jour le DS1307 + } + + break; + case 3: //Config de l'heur + if(a > tmps_clignotement) //Clignotement toute les + clignotement(SR_HEUR, false); + else + affichage_heur(); + if(PINB & (1<>4)+1)<<4; //Incrémente de 10 + else if(curent_heur >= 0x23) //Si arrivé à 24H retour à 00H, /!\ Attention n'incrémente pas la date !! + curent_heur = 0x00; + else + curent_heur = ((curent_heur&0x0F)+1)|(curent_heur&0xF0); //Incrémente de 1 + rtc.w_heur(curent_heur, 0); //Met à jour le DS1307 + } + else if(PINB & (1<>4)-1)<<4)|0x09; //Décrémente de 10 + else + curent_heur = ((curent_heur&0x0f)-1)|(curent_heur&0xf0); //Décrémente de 1 + rtc.w_heur(curent_heur, 0); //Met à jour le DS1307 + } + break; + case 4: //Config du jour + PORTC &= LOW(1< tmps_clignotement) //Clignotement + clignotement(SR_JOURS, true); + else + affichage_date(); + if(PINB & (1<>4)+1)<<4; //Incrémente de 10 + else + curent_day = ((curent_day&0x0F)+1)|(curent_day&0xF0); //Incrémente de 1 + if(curent_day > 0x31) + curent_day = 0x00; + rtc.w_date(curent_day); //Met à jour le DS1307 + } + else if(PINB & (1<>4)-1)<<4)|0x09; //Décrémente de 10 + else + curent_heur = ((curent_heur&0x0F)-1)|(curent_heur&0xF0); //Décrémente de 1 + if(curent_heur == 0x00) + curent_heur = 0x31; + rtc.w_date(curent_heur); //Met à jour le DS1307 + } + break; + case 5: //config du mois + if(a > tmps_clignotement) //Clignotement + clignotement(SR_MOIS, true); + else + affichage_date(); + if(PINB & (1<>4)+1)<<4; //Incrémente de 10 + else + curent_months = ((curent_months&0x0F)+1)|(curent_months&0xF0); //Incrémente de 1 + if(curent_months > 0x12) + curent_months = 0x01; + rtc.w_moi(curent_months); //Met à jour le DS1307 + } + else if(PINB & (1<>4)-1)<<4)|0x09; //Décrémente de 10 + else + curent_months = ((curent_months&0x0F)-1)|(curent_months&0xF0); //Décrémente de 1 + if(curent_months < 0x01) + curent_months = 0x12; + rtc.w_moi(curent_months); //Met à jour le DS1307 + } + break; + case 6: //Config de l'année + if(a > tmps_clignotement) //Clignotement + clignotement(SR_ANNEE, true); + else + affichage_date(); + if(PINB & (1<>4)+1)<<4; //Incrémente de 10 + else + curent_year = ((curent_year&0x0F)+1)|(curent_year&0xF0); //Incrémente de 1 + if(curent_year > 0x99) + curent_year = 0x00; + rtc.w_year(curent_year); //Met à jour le DS1307 + } + else if(PINB & (1<>4)-1)<<4)|0x09; //Décrémente de 10 + else if (curent_year != 0x00) + curent_year = ((curent_year&0x0F)-1)|(curent_year&0xF0); //Décrémente de 1 + else + curent_year = 0x99; + rtc.w_year(curent_year); //Met à jour le DS1307 + } + break; + + } + PORTC &= LOW(1<100) + a=0; + if(usart == 0xC1) + { + usart = USART_Receive(); + for(int b = 0; !usart ; b++) + { + usart = USART_Receive(); + affichage_heur(); + if(b>100) + b=0; + _delay_ms(1); + } + rtc.w_seconde(int_to_bcd(usart)); + USART_Transmit(0xC1); + } + if(usart == 0xC2) + { + usart = USART_Receive(); + for(int b = 0; !usart ; b++) + { + usart = USART_Receive(); + affichage_heur(); + if(b>100) + b=0; + _delay_ms(1); + } + rtc.w_minute(int_to_bcd(usart)); + USART_Transmit(0xC2); + } + if(usart == 0xC3) + { + usart = USART_Receive(); + for(int b = 0; !usart ; b++) + { + usart = USART_Receive(); + affichage_heur(); + if(b>100) + b=0; + _delay_ms(1); + } + rtc.w_heur(int_to_bcd(usart), 0); + USART_Transmit(0xC3); + } + if(usart == 0xC4) + { + cfg =false; + } + } + } +} diff --git a/fonction.h b/fonction.h new file mode 100644 index 0000000..36f86a8 --- /dev/null +++ b/fonction.h @@ -0,0 +1,26 @@ +/* + * fonction.h + * + * Created: 22/12/2013 15:47:39 + * Author: Adrien + */ + + +#ifndef FONCTION_H_ +#define FONCTION_H_ + +void init_interupt(); +void first(); +void setup_pins(); +void affichage_heur(); +void affichage_date(); +void clignotement(int n, bool date); +void routine_affichage(); +void couleur(); +void bouton(); +void uart_ds1307(); +void affichage_shutdwon(); +int int_to_bcd(int val); + + +#endif /* FONCTION_H_ */ \ No newline at end of file diff --git a/lib/DCF77 - Copie.cpp b/lib/DCF77 - Copie.cpp new file mode 100644 index 0000000..635b384 --- /dev/null +++ b/lib/DCF77 - Copie.cpp @@ -0,0 +1,138 @@ +/* + * DCF77.cpp + * + * Created: 19/12/2013 14:06:30 + * Author: Adrien + */ +#include "DCF77.h" +#include "timer.h" +#include +#include + +volatile uint8_t dcf77_bits_capture[6]; //Tableau comportent les bits décoder (6 * 8bits) +volatile unsigned long int time_low = 0; +volatile unsigned long int time_high = 0; +volatile bool dcf77_flag_start = 0; // Drapeau qui permet de savoir si on peut commencé la capture +volatile bool dcf77_flag_decode = 0; // " " " " " " " " " le décodage +volatile int dcf77_bit_count = 0; // Compte le nombre de bit déja encodé +void dcf77::start_capture() +{ + timer1_init(); + dcf77_flag_start = 0; + DDRD |= 1<= 0 ; y--) + { + if(z == 0 && !(dcf77_bits_capture[0] >> 8)) //Bit 00 TOUJOURS à 0 + { + if(decodage_bit_n <= 19) // Bit 00 à 19 ne nous interesse pas + {} + else if(decodage_bit_n <= 28) //Partie minutes + { + if((dcf77_bits_capture[z]>>y) && decodage_bit_n == 20) //Bit 20 TOUJOURS à 1 + {} + else + return false; + if (decodage_bit_n > 20 && decodage_bit_n <= 28)//Arrivé a la partie minute + { + if(decodage_bit_n == 21) + place_bit = 0; + if(decodage_bit_n != 28) + { + Minute |= ((dcf77_bits_capture[z]>>y) & 0x01) << place_bit; + place_bit++; + } + else if((Minute&0x1) && !((dcf77_bits_capture[z]>>y)&0x01) || !(Minute&0x1) && ((dcf77_bits_capture[z]>>y)&0x01)) + {} + else + return false; + } + } + } + else + return false; + decodage_bit_n++; + } + } +} +ISR(INT0_vect) +{ + if(PORTD&(1< 59)//Après le décodage 60e bit + { + dcf77_flag_start = 0; //Remise a zero du drapeau de démarage + dcf77_flag_decode = 1; //Mise a un du drapeau decode + dcf77_bit_count = 0; //Mise à zero le nombre de bit decodé + } + } + else //Passage au niveau bas + { + time_high = millis() - time_high; //Calcul du temps Haut + time_low = millis(); //Démarage du comptage du temps bas + if(time_high > 800) //Si le Temps bas est > à 800, début de la transmition + dcf77_flag_start = 1; + } +} \ No newline at end of file diff --git a/lib/DCF77 - Copie.h b/lib/DCF77 - Copie.h new file mode 100644 index 0000000..c15bd9d --- /dev/null +++ b/lib/DCF77 - Copie.h @@ -0,0 +1,39 @@ +/* + * DCF77.h + * + * Created: 22/12/2013 15:47:27 + * Author: Adrien + */ + + +#ifndef DCF77_H_ +#define DCF77_H_ + +#include +class dcf77 +{ + private: + uint8_t dcf77_bits[6]; + uint8_t Minute = 0x00; + uint8_t Heur = 0x00; + uint8_t Daymonth = 0x00; + uint8_t Dayweek = 0x00; + uint8_t Month = 0x00; + uint8_t Year = 0x00; + bool dcf77_flag_send_decode; + bool decode(); + public: + void start_capture(); + void stop_capture(); + bool ready(); + uint8_t minutes(); + uint8_t heure(); + uint8_t day_month(); + uint8_t day_week(); + uint8_t month(); + uint8_t year(); +}; + + + +#endif /* DCF77_H_ */ \ No newline at end of file diff --git a/lib/DCF77.cpp b/lib/DCF77.cpp new file mode 100644 index 0000000..5c79b96 --- /dev/null +++ b/lib/DCF77.cpp @@ -0,0 +1,211 @@ +/* + * DCF77.cpp + * + * Created: 19/12/2013 14:06:30 + * Author: Adrien + */ + +#include "DCF77.h" +#include "timer.h" +#include +#include +#include +#include +#include "LCD.h" + +#define LCD_DEBUG false +#define time_low_dcf77_min_0 80 +#define time_low_dcf77_max_0 120 +#define time_low_dcf77_min_1 180 +#define time_low_dcf77_max_1 220 +#define time_no_modulation 1000 +#define en_attente_de_signal 0 +#define decodage_en_cours 1 +#define decodage_effectuer 2 +#define decodage_erreur 3 +#define temps_haut_min 500 +#define temps_bas_min 20 + + +dcf77 atc_; +//#if LCD_DEBUG + LCD lcd1; +//#endif + +void dcf77::start_capture() +{ + DDRB |= 1<= temps_bas_min || time_low_dcf77 == 0) + { + PORTB |= 1<= time_low_dcf77_min_0 && time_low_dcf77 <= time_low_dcf77_max_0) //Si le temp bas est <= 100ms le bit est à 0 + bit = 0; + else if(time_low_dcf77 >= time_low_dcf77_min_1 && time_low_dcf77 <= time_low_dcf77_max_1) //Si le temp bas est <= 200ms le bit est à 1 + bit = 1; + else //ereur + { + //dcf77_bit_count = 0; + //dcf77_flag_start = 0; + //return; + } + if(dcf77::decode(bit)) + { + dcf77_bit_count = 0; + dcf77_flag_start = 0; + //return; + } + dcf77_bit_count++; + } + else if(dcf77_bit_count > 58)//Après le décodage 60e bit + { + //atc_.stop_capture(); //Arêt de la capture + dcf77_flag_start = 0; //Remise a zero du drapeau de démarage + dcf77_bit_count = 0; //Mise à zero le nombre de bit decodé + dcf77_status = decodage_effectuer; + } + else + { + // lcd1.set_cursor(5, 1); + // lcd1.print_text("Wt S.F."); + } + } + else + parasite_flag = true; +} +void dcf77::lo() +{ + + time_check = millis() - time_high_dcf77; + if( time_check >= temps_haut_min || time_high_dcf77 == 0) + { + PORTB &= ~(1< time_no_modulation | dcf77_flag_start) //Si le Temps bas est > à 800, début de la transmition + { + dcf77_flag_start = 1; + } + else + { + dcf77_status = en_attente_de_signal; + } + } + else + parasite_flag = true; +} +bool dcf77::decode(uint8_t bit) +{ + bool flag_no_error = true; + if(bit_dcode_n == 0 && !bit) //Bit 00 Toujours à 0 si le contraire erreur + flag_no_error = false; + else if(bit_dcode_n >= 1 && bit_dcode_n <= 19); //Bits 01 à 19 ne nous interesse pas + else if (bit_dcode_n == 20 && !bit) //Bit 20 Toujours à 1 + flag_no_error = false; + else if (bit_dcode_n >= 21 && bit_dcode_n <= 27) //Bit 21 à 27 = Minute + { + if(bit) + dcf77_Minute |= 1 << (bit_dcode_n-21); + else + dcf77_Minute &= ~(1 << (bit_dcode_n-21)); + } + else if(bit_dcode_n == 28 && (dcf77_Minute&0x01) && !bit || bit_dcode_n == 28 && !(dcf77_Minute&0x01) && bit) //Bit de parité des minutes + flag_no_error = false; + else if(bit_dcode_n >= 29 && bit_dcode_n <= 34) //Bit 29 à 34 = Heure + { + if(bit) + dcf77_Heur |= 1 << (bit_dcode_n-29); + else + dcf77_Heur &= ~(1 << (bit_dcode_n-29)); + } + else if(bit_dcode_n == 35 && (dcf77_Heur&0x01) && !bit || bit_dcode_n == 35 && !(dcf77_Heur&0x01) && bit) //Bit de parité des Heure + flag_no_error = false; + else if(bit_dcode_n >= 36 && bit_dcode_n <= 41) //Bit 36 à 41 = Jours du moi + { + if(bit) + dcf77_Daymonth |= 1 << (bit_dcode_n-36); + else + dcf77_Daymonth &= ~(1 << (bit_dcode_n-36)); + } + else if(bit_dcode_n >= 42 && bit_dcode_n <= 44); //Bit 42 à 44 = Jours de la semaine, ne nous interesse pas + else if(bit_dcode_n >= 45 && bit_dcode_n <= 49) //Bit 45 à 49 = Mois + { + if(bit) + dcf77_Month |= 1 << (bit_dcode_n-45); + else + dcf77_Month &= ~(1 << (bit_dcode_n-45)); + } + else if(bit_dcode_n>= 50 && bit_dcode_n <= 57) //Bit 50 à 57 = Année + { + if(bit) + dcf77_Year |= 1 << (bit_dcode_n-50); + else + dcf77_Year &= ~(1 << (bit_dcode_n-50)); + } + else if(bit_dcode_n == 58 && (dcf77_Month&0x01) && !bit || bit_dcode_n && !(dcf77_Month&0x01) && bit);//Parity + bit_dcode_n++; + return flag_no_error; +} +int dcf77::status() +{ + return dcf77_status; +} +uint8_t dcf77::minutes() +{ + return dcf77_Minute; +} +uint8_t dcf77::heure() +{ + return dcf77_Heur; +} +uint8_t dcf77::month() +{ + return dcf77_Month; +} +uint8_t dcf77::day_month() +{ + return dcf77_Daymonth; +} +uint8_t dcf77::year() +{ + return dcf77_Year; +} +ISR(INT0_vect)//Vecteur d'interuption INT0 +{ + ATOMIC_BLOCK(ATOMIC_FORCEON) + { + if(((PIND&(1<>PIND2))//Si c'est au niveau haut + { + atc_.hi(); + } + else //Passage au niveau bas + { + atc_.lo(); + } + } +} \ No newline at end of file diff --git a/lib/DCF77.cpp~ b/lib/DCF77.cpp~ new file mode 100644 index 0000000..5c79b96 --- /dev/null +++ b/lib/DCF77.cpp~ @@ -0,0 +1,211 @@ +/* + * DCF77.cpp + * + * Created: 19/12/2013 14:06:30 + * Author: Adrien + */ + +#include "DCF77.h" +#include "timer.h" +#include +#include +#include +#include +#include "LCD.h" + +#define LCD_DEBUG false +#define time_low_dcf77_min_0 80 +#define time_low_dcf77_max_0 120 +#define time_low_dcf77_min_1 180 +#define time_low_dcf77_max_1 220 +#define time_no_modulation 1000 +#define en_attente_de_signal 0 +#define decodage_en_cours 1 +#define decodage_effectuer 2 +#define decodage_erreur 3 +#define temps_haut_min 500 +#define temps_bas_min 20 + + +dcf77 atc_; +//#if LCD_DEBUG + LCD lcd1; +//#endif + +void dcf77::start_capture() +{ + DDRB |= 1<= temps_bas_min || time_low_dcf77 == 0) + { + PORTB |= 1<= time_low_dcf77_min_0 && time_low_dcf77 <= time_low_dcf77_max_0) //Si le temp bas est <= 100ms le bit est à 0 + bit = 0; + else if(time_low_dcf77 >= time_low_dcf77_min_1 && time_low_dcf77 <= time_low_dcf77_max_1) //Si le temp bas est <= 200ms le bit est à 1 + bit = 1; + else //ereur + { + //dcf77_bit_count = 0; + //dcf77_flag_start = 0; + //return; + } + if(dcf77::decode(bit)) + { + dcf77_bit_count = 0; + dcf77_flag_start = 0; + //return; + } + dcf77_bit_count++; + } + else if(dcf77_bit_count > 58)//Après le décodage 60e bit + { + //atc_.stop_capture(); //Arêt de la capture + dcf77_flag_start = 0; //Remise a zero du drapeau de démarage + dcf77_bit_count = 0; //Mise à zero le nombre de bit decodé + dcf77_status = decodage_effectuer; + } + else + { + // lcd1.set_cursor(5, 1); + // lcd1.print_text("Wt S.F."); + } + } + else + parasite_flag = true; +} +void dcf77::lo() +{ + + time_check = millis() - time_high_dcf77; + if( time_check >= temps_haut_min || time_high_dcf77 == 0) + { + PORTB &= ~(1< time_no_modulation | dcf77_flag_start) //Si le Temps bas est > à 800, début de la transmition + { + dcf77_flag_start = 1; + } + else + { + dcf77_status = en_attente_de_signal; + } + } + else + parasite_flag = true; +} +bool dcf77::decode(uint8_t bit) +{ + bool flag_no_error = true; + if(bit_dcode_n == 0 && !bit) //Bit 00 Toujours à 0 si le contraire erreur + flag_no_error = false; + else if(bit_dcode_n >= 1 && bit_dcode_n <= 19); //Bits 01 à 19 ne nous interesse pas + else if (bit_dcode_n == 20 && !bit) //Bit 20 Toujours à 1 + flag_no_error = false; + else if (bit_dcode_n >= 21 && bit_dcode_n <= 27) //Bit 21 à 27 = Minute + { + if(bit) + dcf77_Minute |= 1 << (bit_dcode_n-21); + else + dcf77_Minute &= ~(1 << (bit_dcode_n-21)); + } + else if(bit_dcode_n == 28 && (dcf77_Minute&0x01) && !bit || bit_dcode_n == 28 && !(dcf77_Minute&0x01) && bit) //Bit de parité des minutes + flag_no_error = false; + else if(bit_dcode_n >= 29 && bit_dcode_n <= 34) //Bit 29 à 34 = Heure + { + if(bit) + dcf77_Heur |= 1 << (bit_dcode_n-29); + else + dcf77_Heur &= ~(1 << (bit_dcode_n-29)); + } + else if(bit_dcode_n == 35 && (dcf77_Heur&0x01) && !bit || bit_dcode_n == 35 && !(dcf77_Heur&0x01) && bit) //Bit de parité des Heure + flag_no_error = false; + else if(bit_dcode_n >= 36 && bit_dcode_n <= 41) //Bit 36 à 41 = Jours du moi + { + if(bit) + dcf77_Daymonth |= 1 << (bit_dcode_n-36); + else + dcf77_Daymonth &= ~(1 << (bit_dcode_n-36)); + } + else if(bit_dcode_n >= 42 && bit_dcode_n <= 44); //Bit 42 à 44 = Jours de la semaine, ne nous interesse pas + else if(bit_dcode_n >= 45 && bit_dcode_n <= 49) //Bit 45 à 49 = Mois + { + if(bit) + dcf77_Month |= 1 << (bit_dcode_n-45); + else + dcf77_Month &= ~(1 << (bit_dcode_n-45)); + } + else if(bit_dcode_n>= 50 && bit_dcode_n <= 57) //Bit 50 à 57 = Année + { + if(bit) + dcf77_Year |= 1 << (bit_dcode_n-50); + else + dcf77_Year &= ~(1 << (bit_dcode_n-50)); + } + else if(bit_dcode_n == 58 && (dcf77_Month&0x01) && !bit || bit_dcode_n && !(dcf77_Month&0x01) && bit);//Parity + bit_dcode_n++; + return flag_no_error; +} +int dcf77::status() +{ + return dcf77_status; +} +uint8_t dcf77::minutes() +{ + return dcf77_Minute; +} +uint8_t dcf77::heure() +{ + return dcf77_Heur; +} +uint8_t dcf77::month() +{ + return dcf77_Month; +} +uint8_t dcf77::day_month() +{ + return dcf77_Daymonth; +} +uint8_t dcf77::year() +{ + return dcf77_Year; +} +ISR(INT0_vect)//Vecteur d'interuption INT0 +{ + ATOMIC_BLOCK(ATOMIC_FORCEON) + { + if(((PIND&(1<>PIND2))//Si c'est au niveau haut + { + atc_.hi(); + } + else //Passage au niveau bas + { + atc_.lo(); + } + } +} \ No newline at end of file diff --git a/lib/DCF77.h b/lib/DCF77.h new file mode 100644 index 0000000..12cb93b --- /dev/null +++ b/lib/DCF77.h @@ -0,0 +1,52 @@ +/* + * DCF77.h + * + * Created: 22/12/2013 15:47:27 + * Author: Adrien + */ + + +#ifndef DCF77_H_ +#define DCF77_H_ + +#include + +class dcf77 +{ + private: + //uint8_t dcf77_bits[6]; + //bool dcf77_flag_send_decode; + unsigned long int time_low_dcf77 = 0; + unsigned long int time_high_dcf77 = 0; + bool dcf77_flag_start = 0; // Drapeau qui permet de savoir si on peut commencé la capture + //bool dcf77_flag_end_decode = 0; // " " " " " " le décodage est terminé + int dcf77_bit_count = 0; // Compte le nombre de bit déja encodé + uint8_t dcf77_Minute = 0x00; + uint8_t dcf77_Heur = 0x00; + uint8_t dcf77_Daymonth = 0x00; + uint8_t dcf77_Dayweek = 0x00; + uint8_t dcf77_Month = 0x00; + uint8_t dcf77_Year = 0x00; + int dcf77_status = 0; + int bit_dcode_n = 0; + bool parasite_flag = false; + unsigned int time_check = 0; + + public: + void start_capture(); + void stop_capture(); + void lo(); + void hi(); + uint8_t minutes(); + uint8_t heure(); + uint8_t day_month(); + uint8_t day_week(); + uint8_t month(); + uint8_t year(); + bool decode(uint8_t bit); + int status(); +}; + + + +#endif /* DCF77_H_ */ \ No newline at end of file diff --git a/lib/DS1307.cpp b/lib/DS1307.cpp new file mode 100644 index 0000000..3fff52a --- /dev/null +++ b/lib/DS1307.cpp @@ -0,0 +1,190 @@ +/* + * ds1307.cpp + * + * Created: 19/12/2013 14:06:21 + * Author: Adrien + * + * Note : Après réflection, l'utilisation d'une class est inutile ... + * + */ + +#define F_CPU 16000000UL +#include +#include +#include "DS1307.h" + +#define adresse_DS1307 0xD0 //Adresse I2C du DS1307 + +#define LED_RED 1< +class ds1307 +{ + private: + uint8_t curent_couleur; + bool iic_error; + public: + ds1307(); + void write(int adresse_m, uint8_t data); + uint8_t read(uint8_t adresse_m); + uint8_t r_seconde(); + uint8_t r_minute(); + uint8_t r_heur(); + uint8_t r_jour(); + uint8_t r_moi(); + uint8_t r_year(); + void w_seconde(uint8_t data); + void w_minute(uint8_t data); + void w_heur(uint8_t data, uint8_t pm); + void w_date(uint8_t data); + void w_moi(uint8_t data); + void w_year(uint8_t data); +}; + + + +#endif /* DS1307_H_ */ \ No newline at end of file diff --git a/lib/LCD.cpp b/lib/LCD.cpp new file mode 100644 index 0000000..53404e8 --- /dev/null +++ b/lib/LCD.cpp @@ -0,0 +1,170 @@ +/* + * LCD.cpp + * + * Created: 27/12/2013 13:32:02 + * Author: Adrien + */ + +/************************************************************************************************************ + * Cette librairie permet de controlé un écrans LCD a traver un PCF8574 avec comme adresse 0x40 * + * * + * ############################## * + * #----------------------------# * + * #| Configuration des pins |# * + * #|~~~~~~~~~~~~~~~~~~~~~~~~~~|# * + * #| PCF8574 | LCD |# * + * #|~~~~~~~~~~~~~~|~~~~~~~~~~~|# * + * #| 0 | D4 |# * + * #| 1 | D5 |# * + * #| 2 | D6 |# * + * #| 3 | D7 |# * + * #| 4 | NC |# * + * #| 5 | E |# * + * #| 6 | RS |# * + * #| 7 | RW |# * + * #----------------------------# * + * ############################## * + * * + * * + * @@ §§ §§ ####### * + * @@@@ §§ §§ ## ##### * + * @@ @@ §§ §§ ## #### * + * @@ @@ §§ §§ ## ## * + * @@ @@ §§ §§ ## ## * + * @@~&&&&&&~@@ §§ §§ ## #### * + * @@ @@ §§§§ ## ##### * + * @@ @@ §§ ####### * + * * + ************************************************************************************************************ + */ + +#define adresse_DS1307 0x40 +#define F_CPU 16000000UL + +#define RS 0x01<<6 +#define RW 0x01<<7 +#define E 0x01<<5 +#define D4 0x01<<0 +#define D5 0x01<<1 +#define D6 0x01<<2 +#define D7 0x01<<3 +#define D0 0x01<<0 +#define D1 0x01<<1 +#define D2 0x01<<2 +#define D3 0x01<<3 + +#include +#include +#include +#include +#include "LCD.h" + + + + uint8_t PCF8574::send(uint8_t data, uint8_t read) + { + uint8_t read_data; + //SCK Config (27.77Khz) + TWBR = 0x0A; //Bit rate division à 10 + TWSR = (TWSR & ~((1<>3)) + return true; + else + return false; + } + void LCD::send(uint8_t data, bool debut_instuction) + { + while(check_busy_flag() && debut_instuction) //Vérifie qu'il n'y a pas une oppétation en cours + {} + PCF8574::send(0x00, 0); //Met les pins à0 + PCF8574::send(data, 0); //Ecris les données + data |= (E); + //_delay_ms(1000); + PCF8574::send(data, 0); //Confirme les données + _delay_us(1); //Attente que la confiramation soit bien reçue + data &= ~(E); + PCF8574::send(data, 0); + _delay_us(1); + } + void LCD::display_init() + { + send(0x03, true); //Mode 4bit + + send(0x08, false); //Mode 2ligne + + send(0x00, true);send(0x01, false); //Clear display + send(0x00, true);send(0x02, false); //Return home + send(0x00, true);send((D2|D1), false); //Incrémentation de la RAM et déplacement du curseur vers la droite + send(0x00, true);send((D3|D2), false); //Allume l'afficheur sans curseur + + } + void LCD::send_leter(uint8_t lettre) + { + uint8_t data = (RS)|(lettre>>4); //Inscrit les 4 dernier bit dans la RAM + send(data, true); + data = (RS)|(lettre&0b00001111); //Inscrit les 4 premier bit dans la RAM + send(data, false); + } + void LCD::clear() + { + send(0x00, true); send(D0, false); //Clear Display + send(0x00, true);send(0x02, false); //Return home + } + void LCD::set_cursor(int x, int y) + { + uint8_t data; + if(y == 1) + data = 0x00 + x; + else if(y == 2) + data = 0x40 + x; + send((data>>4)|0x08, true);_delay_us(5);send(data&0x0F, false); + } + void LCD::print_text(char *txt) + { + for(int a = 0 ; a < strlen(txt) ; a++) + send_leter(txt[a]); + } + void LCD::print_number(int num) + { + char c[64]; + sprintf(c, "%d", num); + print_text(c); + } \ No newline at end of file diff --git a/lib/LCD.h b/lib/LCD.h new file mode 100644 index 0000000..60ef628 --- /dev/null +++ b/lib/LCD.h @@ -0,0 +1,37 @@ +/* + * LCD.h + * + * Created: 27/12/2013 13:32:19 + * Author: Adrien + */ + + +#ifndef LCD_H_ +#define LCD_H_ + + +#include +#include + +class PCF8574 +{ + public: + static uint8_t send(uint8_t data, uint8_t read); +}; +class LCD +{ + private: + bool check_busy_flag(); + public: + void setup(int rs_pin, int rw_pin, int e_pin, int d4_pin, int d5_pin, int d6_pin, int d7_pin); + void send(uint8_t data, bool BF); + void display_init(); + void send_leter(uint8_t lettre); + void print_text(char *txt); + void print_number(int num); + void clear(); + void set_cursor(int x, int y); +}; + + +#endif /* LCD_H_ */ \ No newline at end of file diff --git a/lib/UART.cpp b/lib/UART.cpp new file mode 100644 index 0000000..861a228 --- /dev/null +++ b/lib/UART.cpp @@ -0,0 +1,37 @@ +/* + * UART.cpp + * + * Created: 31/05/2014 23:16:31 + * Author: Adrien + */ + +#include +#include +#include "UART.h" +#define F_CPU 16000000UL +#define BAUD 9600 +#define MYUBRR (((F_CPU / (BAUD * 16UL))) - 1) + +void USART_ini() +{ + UBRR0H = (unsigned char)(MYUBRR>>8); + UBRR0L = (unsigned char)MYUBRR; + UCSR0B = (1< +#include +#include "hc74595.h" + +hc74595::hc74595(int data, int clk, int stcp,volatile uint8_t *port_uc/*, volatile uint8_t *ddr_uc*/) +{ + pin_DATA = data; + pin_CLK = clk; + pin_STCP = stcp; + port = port_uc; + ddr = --port_uc; + *ddr |= (0x01 << data | 0x01 << clk | 0x01 << stcp); +} +void hc74595::send(uint8_t data, bool inverted) //Envoi des donnée au Shift Register +{ + + for(int a = 0; a < 8 ; a++) + { + if(!inverted) + { + *port &= ~(0x01 << pin_CLK); //Met l'orloge à 0 + if(data & (0x01 << a)) //Regarde la valeur de chaque bit + *port |= 0x01 << pin_DATA; + else + *port &= ~(0x01 << pin_DATA); + *port|= 0x01 << pin_CLK; //Met l'orloge à 1 + } + else + { + *port &= ~(0x01 << pin_CLK); //Met l'orloge à 0 + if(data & (0x80 >> a)) //Regarde la valeur de chaque bit + *port |= 0x01 << pin_DATA; + else + *port &= ~(0x01 << pin_DATA); + *port |= 0x01 << pin_CLK; //Met l'orloge à 1 + } + } +} +void hc74595::confirm() //Envoi le signal du storage register +{ + *port |= 0x01 << pin_STCP; + _delay_us(1); + *port &= ~(0x01 << pin_STCP); +} + + + +/*----------------------------------------------------------------------------------------------------------- +/* + * _74595.cpp + * + * Created: 19/12/2013 14:06:10 + * Author: Adrien + * + +#include +#include "hc74595.h" + +void hc74595::setup(int data, int clk, int stcp, char port_uc) +{ + pin_DATA = data; + pin_CLK = clk; + pin_STCP = stcp; + port = port_uc; + switch (port) //Configure les pin nésessaire en sortie + { + case 'B' : + DDRB |= (0x01 << data | 0x01 << clk | 0x01 << stcp); + break; + case 'C' : + DDRC |= (0x01 << data | 0x01 << clk | 0x01 << stcp); + break; + case 'D' : + DDRD |= (0x01 << data | 0x01 << clk | 0x01 << stcp); + break; + } +} +void hc74595::hc74595(int data, int clk, int stcp, uint8_t *port_uc) +{ + pin_DATA = data; + pin_CLK = clk; + pin_STCP = stcp; + *port = port_uc; + *port |= (0x01 << data | 0x01 << clk | 0x01 << stcp); +} +void hc74595::send(uint8_t data, bool inverted) //Envoi des donnée au Shift Register +{ + switch (port) + { + case 'B' : + for(int a = 0; a < 8 ; a++) + { + if(!inverted) + { + PORTB &= ~(0x01 << pin_CLK); //Met l'orloge à 0 + if(data & (0x01 << a)) //Regarde la valeur de chaque bit + PORTB |= 0x01 << pin_DATA; + else + PORTB &= ~(0x01 << pin_DATA); + PORTB |= 0x01 << pin_CLK; //Met l'orloge à 1 + } + else + { + PORTB &= ~(0x01 << pin_CLK); //Met l'orloge à 0 + if(data & (0x80 >> a)) //Regarde la valeur de chaque bit + PORTB |= 0x01 << pin_DATA; + else + PORTB &= ~(0x01 << pin_DATA); + PORTB |= 0x01 << pin_CLK; //Met l'orloge à 1 + } + } + break; + case 'C' : + for(int a = 0; a < 8 ; a++) + { + if(!inverted) + { + PORTC &= ~(0x01 << pin_CLK); //Met l'orloge à 0 + if(data & (0x01 << a)) //Regarde la valeur de chaque bit + PORTC |= 0x01 << pin_DATA; + else + PORTC &= ~(0x01 << pin_DATA); + PORTC |= 0x01 << pin_CLK; //Met l'orloge à 1 + } + else + { + PORTC &= ~(0x01 << pin_CLK); //Met l'orloge à 0 + if(data & (0x80 >> a)) //Regarde la valeur de chaque bit + PORTC |= 0x01 << pin_DATA; + else + PORTC &= ~(0x01 << pin_DATA); + PORTC |= 0x01 << pin_CLK; //Met l'orloge à 1 + } + } + break; + case 'D' : + for(int a = 0; a < 8 ; a++) + { + if(!inverted) + { + PORTD &= ~(0x01 << pin_CLK); //Met l'orloge à 0 + if(data & (0x01 << a)) //Regarde la valeur de chaque bit + PORTD |= 0x01 << pin_DATA; + else + PORTD &= ~(0x01 << pin_DATA); + PORTD |= 0x01 << pin_CLK; //Met l'orloge à 1 + } + else + { + PORTD &= ~(0x01 << pin_CLK); //Met l'orloge à 0 + if(data & (0x80 >> a)) //Regarde la valeur de chaque bit + PORTD |= 0x01 << pin_DATA; + else + PORTD &= ~(0x01 << pin_DATA); + PORTD |= 0x01 << pin_CLK; //Met l'orloge à 1 + } + } + break; + } +} +void hc74595::confirm() //Envoi le signal du storage register +{ + switch(port) + { + case 'B' : + PORTB |= 0x01 << pin_STCP; + PORTB &= ~(0x01 << pin_STCP); + break; + case 'C' : + PORTC |= 0x01 << pin_STCP; + PORTC &= ~(0x01 << pin_STCP); + break; + case 'D' : + PORTD |= 0x01 << pin_STCP; + PORTD &= ~(0x01 << pin_STCP); + break; + } +} +*/ \ No newline at end of file diff --git a/lib/hc74595.h b/lib/hc74595.h new file mode 100644 index 0000000..fdba132 --- /dev/null +++ b/lib/hc74595.h @@ -0,0 +1,27 @@ +/* + * _74hc595.h + * + * Created: 22/12/2013 15:19:47 + * Author: Adrien + */ + + +#ifndef HC74595_H_ +#define HC74595_H_ + +#include +class hc74595 +{ + private: + int pin_DATA; + int pin_CLK; + int pin_STCP; + volatile uint8_t *port; + volatile uint8_t *ddr; + public: + hc74595(int data, int clk, int stcp, volatile uint8_t *port_uc); + void send(uint8_t data, bool inverted); + void confirm(); +}; + +#endif /* 74HC595_H_ */ \ No newline at end of file diff --git a/lib/timer.cpp b/lib/timer.cpp new file mode 100644 index 0000000..b9ecd8d --- /dev/null +++ b/lib/timer.cpp @@ -0,0 +1,104 @@ +#define F_CPU 16000000UL // 16 MHz + +// Calculate the value needed for +// the CTC match value in OCR1A. +#define CTC_MATCH_OVERFLOW ((F_CPU / 1000) / 8) + +#include +#include +#include +volatile unsigned long timer1_millis; +void timer1_init() +{ + // clear to compar (CTC) mode, Clock/8 + TCCR1B |= (1 << WGM12) | (1 << CS11); + + + OCR1AH = (CTC_MATCH_OVERFLOW >> 8); + OCR1AL = CTC_MATCH_OVERFLOW; + + // Activation du mode comparaison + TIMSK1 |= (1 << OCIE1A); + + sei(); + +} +void interup_1hz_init()//DS1307 +{ + EICRA |= 1< +#include + +#include "timer.h" +volatile unsigned long us = 0; +volatile unsigned long us_s = 0; +volatile unsigned long int s = 0; +#define calibration 1; +void timer1_init() +{ + TCCR1A = 0x00; //Désactive les comparateur + Mode normal + TCCR1B = 0x00;//Mise a zero de toutes les valeurs + us = 0; + s = 0; + TCNT1 = 0x0000; + /* + Horloge à 16Mhz + 1 période = 62.5ns + clk/8 = 0.5µs débordement à 32768 µs + clk/64 = 4µs débordement à 262144 µs + clk/256 = 16µs débordement à 1 048 576µs + clk/1024 = 64µs débordement à 4 194 304µs + Le prescale sera à 8 + * + TCCR1B |= (1< +#include +#include +volatile unsigned long timer1_millis; +void timer1_init() +{ + // CTC mode, Clock/8 + TCCR1B |= (1 << WGM12) | (1 << CS11); + + // Load the high byte, then the low byte + // into the output compare + OCR1AH = (CTC_MATCH_OVERFLOW >> 8); + OCR1AL = CTC_MATCH_OVERFLOW; + + // Enable the compare match interrupt + TIMSK1 |= (1 << OCIE1A); + + // Now enable global interrupts + sei(); + +} +void interup_1hz_init() +{ + EICRA |= 1< +#include + +#include "timer.h" +volatile unsigned long us = 0; +volatile unsigned long us_s = 0; +volatile unsigned long int s = 0; +#define calibration 1; +void timer1_init() +{ + TCCR1A = 0x00; //Désactive les comparateur + Mode normal + TCCR1B = 0x00;//Mise a zero de toutes les valeurs + us = 0; + s = 0; + TCNT1 = 0x0000; + /* + Horloge à 16Mhz + 1 période = 62.5ns + clk/8 = 0.5µs débordement à 32768 µs + clk/64 = 4µs débordement à 262144 µs + clk/256 = 16µs débordement à 1 048 576µs + clk/1024 = 64µs débordement à 4 194 304µs + Le prescale sera à 8 + * + TCCR1B |= (1< http://jump.to/fleury +File: $Id: uart.c,v 1.6.2.1 2007/07/01 11:14:38 peter Exp $ +Software: AVR-GCC 4.1, AVR Libc 1.4.6 or higher +Hardware: any AVR with built-in UART, +License: GNU General Public License + +DESCRIPTION: + An interrupt is generated when the UART has finished transmitting or + receiving a byte. The interrupt handling routines use circular buffers + for buffering received and transmitted data. + + The UART_RX_BUFFER_SIZE and UART_TX_BUFFER_SIZE variables define + the buffer size in bytes. Note that these variables must be a + power of 2. + +USAGE: + Refere to the header file uart.h for a description of the routines. + See also example test_uart.c. + +NOTES: + Based on Atmel Application Note AVR306 + +LICENSE: + Copyright (C) 2006 Peter Fleury + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + +*************************************************************************/ + +/************************************************************************ +uart_available, uart_flush, uart1_available, and uart1_flush functions +were adapted from the Arduino HardwareSerial.h library by Tim Sharpe on +11 Jan 2009. The license info for HardwareSerial.h is as follows: + + HardwareSerial.cpp - Hardware serial library for Wiring + Copyright (c) 2006 Nicholas Zambetti. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Modified 23 November 2006 by David A. Mellis +************************************************************************/ + +/************************************************************************ +Changelog for modifications made by Tim Sharpe, starting with the current + library version on his Web site as of 05/01/2009. + +Date Description +========================================================================= +05/11/2009 Changed all existing UARTx_RECEIVE_INTERRUPT and UARTx_TRANSMIT_INTERRUPT + macros to use the "_vect" format introduced in AVR-Libc + v1.4.0. Had to split the 3290 and 6490 out of their existing + macro due to an inconsistency in the UART0_RECEIVE_INTERRUPT + vector name (seems like a typo: USART_RX_vect for the 3290/6490 + vice USART0_RX_vect for the others in the macro). + Verified all existing macro register names against the device + header files in AVR-Libc v1.6.6 to catch any inconsistencies. +05/12/2009 Added support for 48P, 88P, 168P, and 328P by adding them to the + existing 48/88/168 macro. + Added Arduino-style available() and flush() functions for both + supported UARTs. Really wanted to keep them out of the library, so + that it would be as close as possible to Peter Fleury's original + library, but has scoping issues accessing internal variables from + another program. Go C! +05/13/2009 Changed Interrupt Service Routine label from the old "SIGNAL" to + the "ISR" format introduced in AVR-Libc v1.4.0. + +************************************************************************/ + +#include +#include +#include +#include "uart.h" + + +/* + * constants and macros + */ + +/* size of RX/TX buffers */ +#define UART_RX_BUFFER_MASK ( UART_RX_BUFFER_SIZE - 1) +#define UART_TX_BUFFER_MASK ( UART_TX_BUFFER_SIZE - 1) + +#if ( UART_RX_BUFFER_SIZE & UART_RX_BUFFER_MASK ) +#error RX buffer size is not a power of 2 +#endif +#if ( UART_TX_BUFFER_SIZE & UART_TX_BUFFER_MASK ) +#error TX buffer size is not a power of 2 +#endif + +#if defined(__AVR_AT90S2313__) \ + || defined(__AVR_AT90S4414__) || defined(__AVR_AT90S4434__) \ + || defined(__AVR_AT90S8515__) || defined(__AVR_AT90S8535__) \ + || defined(__AVR_ATmega103__) + /* old AVR classic or ATmega103 with one UART */ + #define AT90_UART + #define UART0_RECEIVE_INTERRUPT UART_RX_vect + #define UART0_TRANSMIT_INTERRUPT UART_UDRE_vect + #define UART0_STATUS USR + #define UART0_CONTROL UCR + #define UART0_DATA UDR + #define UART0_UDRIE UDRIE +#elif defined(__AVR_AT90S2333__) || defined(__AVR_AT90S4433__) + /* old AVR classic with one UART */ + #define AT90_UART + #define UART0_RECEIVE_INTERRUPT UART_RX_vect + #define UART0_TRANSMIT_INTERRUPT UART_UDRE_vect + #define UART0_STATUS UCSRA + #define UART0_CONTROL UCSRB + #define UART0_DATA UDR + #define UART0_UDRIE UDRIE +#elif defined(__AVR_ATmega8__) || defined(__AVR_ATmega16__) || defined(__AVR_ATmega32__) \ + || defined(__AVR_ATmega323__) + /* ATmega with one USART */ + #define ATMEGA_USART + #define UART0_RECEIVE_INTERRUPT USART_RXC_vect + #define UART0_TRANSMIT_INTERRUPT USART_UDRE_vect + #define UART0_STATUS UCSRA + #define UART0_CONTROL UCSRB + #define UART0_DATA UDR + #define UART0_UDRIE UDRIE +#elif defined(__AVR_ATmega8515__) || defined(__AVR_ATmega8535__) + /* ATmega with one USART */ + #define ATMEGA_USART + #define UART0_RECEIVE_INTERRUPT USART_RX_vect + #define UART0_TRANSMIT_INTERRUPT USART_UDRE_vect + #define UART0_STATUS UCSRA + #define UART0_CONTROL UCSRB + #define UART0_DATA UDR + #define UART0_UDRIE UDRIE +#elif defined(__AVR_ATmega163__) + /* ATmega163 with one UART */ + #define ATMEGA_UART + #define UART0_RECEIVE_INTERRUPT UART_RX_vect + #define UART0_TRANSMIT_INTERRUPT UART_UDRE_vect + #define UART0_STATUS UCSRA + #define UART0_CONTROL UCSRB + #define UART0_DATA UDR + #define UART0_UDRIE UDRIE +#elif defined(__AVR_ATmega162__) + /* ATmega with two USART */ + #define ATMEGA_USART0 + #define ATMEGA_USART1 + #define UART0_RECEIVE_INTERRUPT USART0_RXC_vect + #define UART1_RECEIVE_INTERRUPT USART1_RXC_vect + #define UART0_TRANSMIT_INTERRUPT USART0_UDRE_vect + #define UART1_TRANSMIT_INTERRUPT USART1_UDRE_vect + #define UART0_STATUS UCSR0A + #define UART0_CONTROL UCSR0B + #define UART0_DATA UDR0 + #define UART0_UDRIE UDRIE0 + #define UART1_STATUS UCSR1A + #define UART1_CONTROL UCSR1B + #define UART1_DATA UDR1 + #define UART1_UDRIE UDRIE1 +#elif defined(__AVR_ATmega64__) || defined(__AVR_ATmega128__) + /* ATmega with two USART */ + #define ATMEGA_USART0 + #define ATMEGA_USART1 + #define UART0_RECEIVE_INTERRUPT USART0_RX_vect + #define UART1_RECEIVE_INTERRUPT USART1_RX_vect + #define UART0_TRANSMIT_INTERRUPT USART0_UDRE_vect + #define UART1_TRANSMIT_INTERRUPT USART1_UDRE_vect + #define UART0_STATUS UCSR0A + #define UART0_CONTROL UCSR0B + #define UART0_DATA UDR0 + #define UART0_UDRIE UDRIE0 + #define UART1_STATUS UCSR1A + #define UART1_CONTROL UCSR1B + #define UART1_DATA UDR1 + #define UART1_UDRIE UDRIE1 +#elif defined(__AVR_ATmega161__) + /* ATmega with UART */ + #error "AVR ATmega161 currently not supported by this libaray !" +#elif defined(__AVR_ATmega169__) + /* ATmega with one USART */ + #define ATMEGA_USART + #define UART0_RECEIVE_INTERRUPT USART0_RX_vect + #define UART0_TRANSMIT_INTERRUPT USART0_UDRE_vect + #define UART0_STATUS UCSRA + #define UART0_CONTROL UCSRB + #define UART0_DATA UDR + #define UART0_UDRIE UDRIE +#elif defined(__AVR_ATmega48__) ||defined(__AVR_ATmega88__) || defined(__AVR_ATmega168__) || \ + defined(__AVR_ATmega48P__) ||defined(__AVR_ATmega88P__) || defined(__AVR_ATmega168P__) || \ + defined(__AVR_ATmega328P__) + /* TLS-Added 48P/88P/168P/328P */ + /* ATmega with one USART */ + #define ATMEGA_USART0 + #define UART0_RECEIVE_INTERRUPT USART_RX_vect + #define UART0_TRANSMIT_INTERRUPT USART_UDRE_vect + #define UART0_STATUS UCSR0A + #define UART0_CONTROL UCSR0B + #define UART0_DATA UDR0 + #define UART0_UDRIE UDRIE0 +#elif defined(__AVR_ATtiny2313__) + #define ATMEGA_USART + #define UART0_RECEIVE_INTERRUPT USART_RX_vect + #define UART0_TRANSMIT_INTERRUPT USART_UDRE_vect + #define UART0_STATUS UCSRA + #define UART0_CONTROL UCSRB + #define UART0_DATA UDR + #define UART0_UDRIE UDRIE +#elif defined(__AVR_ATmega329__) ||\ + defined(__AVR_ATmega649__) ||\ + defined(__AVR_ATmega325__) ||defined(__AVR_ATmega3250__) ||\ + defined(__AVR_ATmega645__) ||defined(__AVR_ATmega6450__) + /* ATmega with one USART */ + #define ATMEGA_USART0 + #define UART0_RECEIVE_INTERRUPT USART0_RX_vect + #define UART0_TRANSMIT_INTERRUPT USART0_UDRE_vect + #define UART0_STATUS UCSR0A + #define UART0_CONTROL UCSR0B + #define UART0_DATA UDR0 + #define UART0_UDRIE UDRIE0 +#elif defined(__AVR_ATmega3290__) ||\ + defined(__AVR_ATmega6490__) || + /* TLS-Separated these two from the previous group because of inconsistency in the USART_RX */ + /* ATmega with one USART */ + #define ATMEGA_USART0 + #define UART0_RECEIVE_INTERRUPT USART_RX_vect + #define UART0_TRANSMIT_INTERRUPT USART0_UDRE_vect + #define UART0_STATUS UCSR0A + #define UART0_CONTROL UCSR0B + #define UART0_DATA UDR0 + #define UART0_UDRIE UDRIE0 +#elif defined(__AVR_ATmega2560__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega640__) +/* ATmega with two USART */ + #define ATMEGA_USART0 + #define ATMEGA_USART1 + #define UART0_RECEIVE_INTERRUPT USART0_RX_vect + #define UART1_RECEIVE_INTERRUPT USART0_UDRE_vect + #define UART0_TRANSMIT_INTERRUPT USART1_RX_vect + #define UART1_TRANSMIT_INTERRUPT USART1_UDRE_vect + #define UART0_STATUS UCSR0A + #define UART0_CONTROL UCSR0B + #define UART0_DATA UDR0 + #define UART0_UDRIE UDRIE0 + #define UART1_STATUS UCSR1A + #define UART1_CONTROL UCSR1B + #define UART1_DATA UDR1 + #define UART1_UDRIE UDRIE1 +#elif defined(__AVR_ATmega644__) + /* ATmega with one USART */ + #define ATMEGA_USART0 + #define UART0_RECEIVE_INTERRUPT USART0_RX_vect + #define UART0_TRANSMIT_INTERRUPT USART0_UDRE_vect + #define UART0_STATUS UCSR0A + #define UART0_CONTROL UCSR0B + #define UART0_DATA UDR0 + #define UART0_UDRIE UDRIE0 +#elif defined(__AVR_ATmega164P__) || defined(__AVR_ATmega324P__) || defined(__AVR_ATmega644P__) + /* ATmega with two USART */ + #define ATMEGA_USART0 + #define ATMEGA_USART1 + #define UART0_RECEIVE_INTERRUPT USART0_RX_vect + #define UART1_RECEIVE_INTERRUPT USART0_UDRE_vect + #define UART0_TRANSMIT_INTERRUPT USART1_RX_vect + #define UART1_TRANSMIT_INTERRUPT USART1_UDRE_vect + #define UART0_STATUS UCSR0A + #define UART0_CONTROL UCSR0B + #define UART0_DATA UDR0 + #define UART0_UDRIE UDRIE0 + #define UART1_STATUS UCSR1A + #define UART1_CONTROL UCSR1B + #define UART1_DATA UDR1 + #define UART1_UDRIE UDRIE1 +#else + #error "no UART definition for MCU available" +#endif + + +/* + * module global variables + */ +static volatile unsigned char UART_TxBuf[UART_TX_BUFFER_SIZE]; +static volatile unsigned char UART_RxBuf[UART_RX_BUFFER_SIZE]; +static volatile unsigned char UART_TxHead; +static volatile unsigned char UART_TxTail; +static volatile unsigned char UART_RxHead; +static volatile unsigned char UART_RxTail; +static volatile unsigned char UART_LastRxError; + +#if defined( ATMEGA_USART1 ) +static volatile unsigned char UART1_TxBuf[UART_TX_BUFFER_SIZE]; +static volatile unsigned char UART1_RxBuf[UART_RX_BUFFER_SIZE]; +static volatile unsigned char UART1_TxHead; +static volatile unsigned char UART1_TxTail; +static volatile unsigned char UART1_RxHead; +static volatile unsigned char UART1_RxTail; +static volatile unsigned char UART1_LastRxError; +#endif + + + +ISR(UART0_RECEIVE_INTERRUPT) +/************************************************************************* +Function: UART Receive Complete interrupt +Purpose: called when the UART has received a character +**************************************************************************/ +{ + unsigned char tmphead; + unsigned char data; + unsigned char usr; + unsigned char lastRxError; + + + /* read UART status register and UART data register */ + usr = UART0_STATUS; + data = UART0_DATA; + + /* */ +#if defined( AT90_UART ) + lastRxError = (usr & (_BV(FE)|_BV(DOR)) ); +#elif defined( ATMEGA_USART ) + lastRxError = (usr & (_BV(FE)|_BV(DOR)) ); +#elif defined( ATMEGA_USART0 ) + lastRxError = (usr & (_BV(FE0)|_BV(DOR0)) ); +#elif defined ( ATMEGA_UART ) + lastRxError = (usr & (_BV(FE)|_BV(DOR)) ); +#endif + + /* calculate buffer index */ + tmphead = ( UART_RxHead + 1) & UART_RX_BUFFER_MASK; + + if ( tmphead == UART_RxTail ) { + /* error: receive buffer overflow */ + lastRxError = UART_BUFFER_OVERFLOW >> 8; + }else{ + /* store new index */ + UART_RxHead = tmphead; + /* store received data in buffer */ + UART_RxBuf[tmphead] = data; + } + UART_LastRxError = lastRxError; +} + + +ISR(UART0_TRANSMIT_INTERRUPT) +/************************************************************************* +Function: UART Data Register Empty interrupt +Purpose: called when the UART is ready to transmit the next byte +**************************************************************************/ +{ + unsigned char tmptail; + + + if ( UART_TxHead != UART_TxTail) { + /* calculate and store new buffer index */ + tmptail = (UART_TxTail + 1) & UART_TX_BUFFER_MASK; + UART_TxTail = tmptail; + /* get one byte from buffer and write it to UART */ + UART0_DATA = UART_TxBuf[tmptail]; /* start transmission */ + }else{ + /* tx buffer empty, disable UDRE interrupt */ + UART0_CONTROL &= ~_BV(UART0_UDRIE); + } +} + + +/************************************************************************* +Function: uart_init() +Purpose: initialize UART and set baudrate +Input: baudrate using macro UART_BAUD_SELECT() +Returns: none +**************************************************************************/ +void uart_init(unsigned int baudrate) +{ + UART_TxHead = 0; + UART_TxTail = 0; + UART_RxHead = 0; + UART_RxTail = 0; + +#if defined( AT90_UART ) + /* set baud rate */ + UBRR = (unsigned char)baudrate; + + /* enable UART receiver and transmmitter and receive complete interrupt */ + UART0_CONTROL = _BV(RXCIE)|_BV(RXEN)|_BV(TXEN); + +#elif defined (ATMEGA_USART) + /* Set baud rate */ + if ( baudrate & 0x8000 ) + { + UART0_STATUS = (1<>8); + UBRRL = (unsigned char) baudrate; + + /* Enable USART receiver and transmitter and receive complete interrupt */ + UART0_CONTROL = _BV(RXCIE)|(1<>8); + UBRR0L = (unsigned char) baudrate; + + /* Enable USART receiver and transmitter and receive complete interrupt */ + UART0_CONTROL = _BV(RXCIE0)|(1<>8); + UBRR = (unsigned char) baudrate; + + /* Enable UART receiver and transmitter and receive complete interrupt */ + UART0_CONTROL = _BV(RXCIE)|(1<> 8; + }else{ + /* store new index */ + UART1_RxHead = tmphead; + /* store received data in buffer */ + UART1_RxBuf[tmphead] = data; + } + UART1_LastRxError = lastRxError; +} + + +SIGNAL(UART1_TRANSMIT_INTERRUPT) +/************************************************************************* +Function: UART1 Data Register Empty interrupt +Purpose: called when the UART1 is ready to transmit the next byte +**************************************************************************/ +{ + unsigned char tmptail; + + + if ( UART1_TxHead != UART1_TxTail) { + /* calculate and store new buffer index */ + tmptail = (UART1_TxTail + 1) & UART_TX_BUFFER_MASK; + UART1_TxTail = tmptail; + /* get one byte from buffer and write it to UART */ + UART1_DATA = UART1_TxBuf[tmptail]; /* start transmission */ + }else{ + /* tx buffer empty, disable UDRE interrupt */ + UART1_CONTROL &= ~_BV(UART1_UDRIE); + } +} + + +/************************************************************************* +Function: uart1_init() +Purpose: initialize UART1 and set baudrate +Input: baudrate using macro UART_BAUD_SELECT() +Returns: none +**************************************************************************/ +void uart1_init(unsigned int baudrate) +{ + UART1_TxHead = 0; + UART1_TxTail = 0; + UART1_RxHead = 0; + UART1_RxTail = 0; + + + /* Set baud rate */ + if ( baudrate & 0x8000 ) + { + UART1_STATUS = (1<>8); + UBRR1L = (unsigned char) baudrate; + + /* Enable USART receiver and transmitter and receive complete interrupt */ + UART1_CONTROL = _BV(RXCIE1)|(1< http://jump.to/fleury +File: $Id: uart.h,v 1.8.2.1 2007/07/01 11:14:38 peter Exp $ +Software: AVR-GCC 4.1, AVR Libc 1.4 +Hardware: any AVR with built-in UART, tested on AT90S8515 & ATmega8 at 4 Mhz +License: GNU General Public License +Usage: see Doxygen manual + +LICENSE: + Copyright (C) 2006 Peter Fleury + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + +************************************************************************/ + +/************************************************************************ +uart_available, uart_flush, uart1_available, and uart1_flush functions +were adapted from the Arduino HardwareSerial.h library by Tim Sharpe on +11 Jan 2009. The license info for HardwareSerial.h is as follows: + + HardwareSerial.h - Hardware serial library for Wiring + Copyright (c) 2006 Nicholas Zambetti. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +************************************************************************/ + +/************************************************************************ +Changelog for modifications made by Tim Sharpe, starting with the current + library version on his Web site as of 05/01/2009. + +Date Description +========================================================================= +05/12/2009 Added Arduino-style available() and flush() functions for both + supported UARTs. Really wanted to keep them out of the library, so + that it would be as close as possible to Peter Fleury's original + library, but has scoping issues accessing internal variables from + another program. Go C! + +************************************************************************/ + +/** + * @defgroup pfleury_uart UART Library + * @code #include @endcode + * + * @brief Interrupt UART library using the built-in UART with transmit and receive circular buffers. + * + * This library can be used to transmit and receive data through the built in UART. + * + * An interrupt is generated when the UART has finished transmitting or + * receiving a byte. The interrupt handling routines use circular buffers + * for buffering received and transmitted data. + * + * The UART_RX_BUFFER_SIZE and UART_TX_BUFFER_SIZE constants define + * the size of the circular buffers in bytes. Note that these constants must be a power of 2. + * You may need to adapt this constants to your target and your application by adding + * CDEFS += -DUART_RX_BUFFER_SIZE=nn -DUART_RX_BUFFER_SIZE=nn to your Makefile. + * + * @note Based on Atmel Application Note AVR306 + * @author Peter Fleury pfleury@gmx.ch http://jump.to/fleury + */ + +/**@{*/ + + +#if (__GNUC__ * 100 + __GNUC_MINOR__) < 304 +#error "This library requires AVR-GCC 3.4 or later, update to newer AVR-GCC compiler !" +#endif + + +/* +** constants and macros +*/ + +/** @brief UART Baudrate Expression + * @param xtalcpu system clock in Mhz, e.g. 4000000L for 4Mhz + * @param baudrate baudrate in bps, e.g. 1200, 2400, 9600 + */ +#define UART_BAUD_SELECT(baudRate,xtalCpu) ((xtalCpu)/((baudRate)*16l)-1) + +/** @brief UART Baudrate Expression for ATmega double speed mode + * @param xtalcpu system clock in Mhz, e.g. 4000000L for 4Mhz + * @param baudrate baudrate in bps, e.g. 1200, 2400, 9600 + */ +#define UART_BAUD_SELECT_DOUBLE_SPEED(baudRate,xtalCpu) (((xtalCpu)/((baudRate)*8l)-1)|0x8000) + + +/** Size of the circular receive buffer, must be power of 2 */ +#ifndef UART_RX_BUFFER_SIZE +#define UART_RX_BUFFER_SIZE 32 +#endif +/** Size of the circular transmit buffer, must be power of 2 */ +#ifndef UART_TX_BUFFER_SIZE +#define UART_TX_BUFFER_SIZE 32 +#endif + +/* test if the size of the circular buffers fits into SRAM */ +#if ( (UART_RX_BUFFER_SIZE+UART_TX_BUFFER_SIZE) >= (RAMEND-0x60 ) ) +#error "size of UART_RX_BUFFER_SIZE + UART_TX_BUFFER_SIZE larger than size of SRAM" +#endif + +/* +** high byte error return code of uart_getc() +*/ +#define UART_FRAME_ERROR 0x0800 /* Framing Error by UART */ +#define UART_OVERRUN_ERROR 0x0400 /* Overrun condition by UART */ +#define UART_BUFFER_OVERFLOW 0x0200 /* receive ringbuffer overflow */ +#define UART_NO_DATA 0x0100 /* no receive data available */ + + +/* +** function prototypes +*/ + +/** + @brief Initialize UART and set baudrate + @param baudrate Specify baudrate using macro UART_BAUD_SELECT() + @return none +*/ +extern void uart_init(unsigned int baudrate); + + +/** + * @brief Get received byte from ringbuffer + * + * Returns in the lower byte the received character and in the + * higher byte the last receive error. + * UART_NO_DATA is returned when no data is available. + * + * @param void + * @return lower byte: received byte from ringbuffer + * @return higher byte: last receive status + * - \b 0 successfully received data from UART + * - \b UART_NO_DATA + *
no receive data available + * - \b UART_BUFFER_OVERFLOW + *
Receive ringbuffer overflow. + * We are not reading the receive buffer fast enough, + * one or more received character have been dropped + * - \b UART_OVERRUN_ERROR + *
Overrun condition by UART. + * A character already present in the UART UDR register was + * not read by the interrupt handler before the next character arrived, + * one or more received characters have been dropped. + * - \b UART_FRAME_ERROR + *
Framing Error by UART + */ +extern unsigned int uart_getc(void); + + +/** + * @brief Put byte to ringbuffer for transmitting via UART + * @param data byte to be transmitted + * @return none + */ +extern void uart_putc(unsigned char data); + + +/** + * @brief Put string to ringbuffer for transmitting via UART + * + * The string is buffered by the uart library in a circular buffer + * and one character at a time is transmitted to the UART using interrupts. + * Blocks if it can not write the whole string into the circular buffer. + * + * @param s string to be transmitted + * @return none + */ +extern void uart_puts(const char *s ); + + +/** + * @brief Put string from program memory to ringbuffer for transmitting via UART. + * + * The string is buffered by the uart library in a circular buffer + * and one character at a time is transmitted to the UART using interrupts. + * Blocks if it can not write the whole string into the circular buffer. + * + * @param s program memory string to be transmitted + * @return none + * @see uart_puts_P + */ +extern void uart_puts_p(const char *s ); + +/** + * @brief Macro to automatically put a string constant into program memory + */ +#define uart_puts_P(__s) uart_puts_p(PSTR(__s)) + +/** + * @brief Return number of bytes waiting in the receive buffer + * @param none + * @return bytes waiting in the receive buffer + */ +extern int uart_available(void); + +/** + * @brief Flush bytes waiting in receive buffer + * @param none + * @return none + */ +extern void uart_flush(void); + + +/** @brief Initialize USART1 (only available on selected ATmegas) @see uart_init */ +extern void uart1_init(unsigned int baudrate); +/** @brief Get received byte of USART1 from ringbuffer. (only available on selected ATmega) @see uart_getc */ +extern unsigned int uart1_getc(void); +/** @brief Put byte to ringbuffer for transmitting via USART1 (only available on selected ATmega) @see uart_putc */ +extern void uart1_putc(unsigned char data); +/** @brief Put string to ringbuffer for transmitting via USART1 (only available on selected ATmega) @see uart_puts */ +extern void uart1_puts(const char *s ); +/** @brief Put string from program memory to ringbuffer for transmitting via USART1 (only available on selected ATmega) @see uart_puts_p */ +extern void uart1_puts_p(const char *s ); +/** @brief Macro to automatically put a string constant into program memory */ +#define uart1_puts_P(__s) uart1_puts_p(PSTR(__s)) +/** @brief Return number of bytes waiting in the receive buffer */ +extern int uart1_available(void); +/** @brief Flush bytes waiting in receive buffer */ +extern void uart1_flush(void); + +/**@}*/ + + +#endif // UART_H +