commit 1304211773ea30607976efa5e3516ffe0d3f735b Author: Christoffer Martinsson Date: Mon Aug 19 20:55:03 2013 +0200 First commit diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..e23fe5b --- /dev/null +++ b/Makefile @@ -0,0 +1,511 @@ +# Hey Emacs, this is a -*- makefile -*- +#---------------------------------------------------------------------------- +# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al. +# +# Released to the Public Domain +# +# Additional material for this makefile was written by: +# Peter Fleury +# Tim Henigan +# Colin O'Flynn +# Reiner Patommel +# Markus Pfaff +# Sander Pool +# Frederik Rouleau +# +#---------------------------------------------------------------------------- +# On command line: +# +# make all = Make software. +# +# make clean = Clean out built project files. +# +# make coff = Convert ELF to AVR COFF. +# +# make extcoff = Convert ELF to AVR Extended COFF. +# +# make program = Download the hex file to the device, using avrdude. +# Please customize the avrdude settings below first! +# +# make debug = Start either simulavr or avarice as specified for debugging, +# with avr-gdb or avr-insight as the front end for debugging. +# +# make filename.s = Just compile filename.c into the assembler code only. +# +# make filename.i = Create a preprocessed source file for use in submitting +# bug reports to the GCC project. +# +# To rebuild project do "make clean" then "make all". +#---------------------------------------------------------------------------- + + +# MCU name +MCU = atmega162 + + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +F_CPU = 8000000 + + +# Output format. (can be srec, ihex, binary) +FORMAT = ihex + + +# Target file name (without extension). +TARGET = RoboMI + + +# List C source files here. (C dependencies are automatically generated.) +SRC = RoboMI.c #lcdDOG.c spiMaster.c usart0.c usart1.c roboMSP.c rfID.c +#$(TARGET).c + + +# List Assembler source files here. +# Make them always end in a capital .S. Files ending in a lowercase .s +# will not be considered source files but generated files (assembler +# output from the compiler), and will be deleted upon "make clean"! +# Even though the DOS/Win* filesystem matches both .s and .S the same, +# it will preserve the spelling of the filenames, and gcc itself does +# care about how the name is spelled on its command-line. +ASRC = + + +# Optimization level, can be [0, 1, 2, 3, s]. +# 0 = turn off optimization. s = optimize for size. +# (Note: 3 is not always the best optimization level. See avr-libc FAQ.) +OPT = s + + +# Debugging format. +# Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs. +# AVR Studio 4.10 requires dwarf-2. +# AVR [Extended] COFF format requires stabs, plus an avr-objcopy run. +DEBUG = dwarf-2 + + +# List any extra directories to look for include files here. +# Each directory must be seperated by a space. +# Use forward slashes for directory separators. +# For a directory that has spaces, enclose it in quotes. +EXTRAINCDIRS = /media/CM/Projects/cmAvrLibC + + +# Compiler flag to set the C Standard level. +# c89 = "ANSI" C +# gnu89 = c89 plus GCC extensions +# c99 = ISO C99 standard (not yet fully implemented) +# gnu99 = c99 plus GCC extensions +CSTANDARD = -std=gnu99 + + +# Place -D or -U options here +CDEFS = -DF_CPU=$(F_CPU)UL + + +# Place -I options here +CINCS = + + + +#---------------- Compiler Options ---------------- +# -g*: generate debugging information +# -O*: optimization level +# -f...: tuning, see GCC manual and avr-libc documentation +# -Wall...: warning level +# -Wa,...: tell GCC to pass this to the assembler. +# -adhlns...: create assembler listing +CFLAGS = -g$(DEBUG) +CFLAGS += $(CDEFS) $(CINCS) +CFLAGS += -O$(OPT) +CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums +CFLAGS += -Wall -Wstrict-prototypes +CFLAGS += -Wa,-adhlns=$(<:.c=.lst) +CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) +CFLAGS += $(CSTANDARD) + + +#---------------- Assembler Options ---------------- +# -Wa,...: tell GCC to pass this to the assembler. +# -ahlms: create listing +# -gstabs: have the assembler create line number information; note that +# for use in COFF files, additional information about filenames +# and function names needs to be present in the assembler source +# files -- see avr-libc docs [FIXME: not yet described there] +# -listing-cont-lines: Sets the maximum number of continuation lines of hex +# dump that will be displayed for a given single line of source input. +ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs,--listing-cont-lines=100 + + +#---------------- Library Options ---------------- +# Minimalistic printf version +PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min + +# Floating point printf version (requires MATH_LIB = -lm below) +PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt + +# If this is left blank, then it will use the Standard printf version. +PRINTF_LIB = +#PRINTF_LIB = $(PRINTF_LIB_MIN) +#PRINTF_LIB = $(PRINTF_LIB_FLOAT) + + +# Minimalistic scanf version +SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min + +# Floating point + %[ scanf version (requires MATH_LIB = -lm below) +SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt + +# If this is left blank, then it will use the Standard scanf version. +SCANF_LIB = +#SCANF_LIB = $(SCANF_LIB_MIN) +#SCANF_LIB = $(SCANF_LIB_FLOAT) + + +MATH_LIB = -lm + +CM_LIB = /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a + + +#---------------- External Memory Options ---------------- + +# 64 KB of external RAM, starting after internal RAM (ATmega128!), +# used for variables (.data/.bss) and heap (malloc()). +#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff + +# 64 KB of external RAM, starting after internal RAM (ATmega128!), +# only used for heap (malloc()). +#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff + +EXTMEMOPTS = + + + +#---------------- Linker Options ---------------- +# -Wl,...: tell GCC to pass this to linker. +# -Map: create map file +# --cref: add cross reference to map file +LDFLAGS = -Wl,-Map=$(TARGET).map,--cref +LDFLAGS += $(EXTMEMOPTS) +LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB) $(CM_LIB) + + + +#---------------- Programming Options (avrdude) ---------------- + +# Programming hardware: alf avr910 avrisp bascom bsd +# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500 +# +# Type: avrdude -c ? +# to get a full listing. +# +AVRDUDE_PROGRAMMER = stk500 + +# com1 = serial port. Use lpt1 to connect to parallel port. +AVRDUDE_PORT = com1 # programmer connected to serial device + +AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex +#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep + + +# Uncomment the following if you want avrdude's erase cycle counter. +# Note that this counter needs to be initialized first using -Yn, +# see avrdude manual. +#AVRDUDE_ERASE_COUNTER = -y + +# Uncomment the following if you do /not/ wish a verification to be +# performed after programming the device. +#AVRDUDE_NO_VERIFY = -V + +# Increase verbosity level. Please use this when submitting bug +# reports about avrdude. See +# to submit bug reports. +#AVRDUDE_VERBOSE = -v -v + +AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) +AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY) +AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE) +AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER) + + + +#---------------- Debugging Options ---------------- + +# For simulavr only - target MCU frequency. +DEBUG_MFREQ = $(F_CPU) + +# Set the DEBUG_UI to either gdb or insight. +# DEBUG_UI = gdb +DEBUG_UI = insight + +# Set the debugging back-end to either avarice, simulavr. +DEBUG_BACKEND = avarice +#DEBUG_BACKEND = simulavr + +# GDB Init Filename. +GDBINIT_FILE = __avr_gdbinit + +# When using avarice settings for the JTAG +JTAG_DEV = /dev/com1 + +# Debugging port used to communicate between GDB / avarice / simulavr. +DEBUG_PORT = 4242 + +# Debugging host used to communicate between GDB / avarice / simulavr, normally +# just set to localhost unless doing some sort of crazy debugging when +# avarice is running on a different computer. +DEBUG_HOST = localhost + + + +#============================================================================ + + +# Define programs and commands. +SHELL = sh +CC = avr-gcc +OBJCOPY = avr-objcopy +OBJDUMP = avr-objdump +SIZE = avr-size +NM = avr-nm +AVRDUDE = avrdude +REMOVE = rm -f +COPY = cp +WINSHELL = cmd + + +# Define Messages +# English +MSG_ERRORS_NONE = Errors: none +MSG_BEGIN = -------- begin -------- +MSG_END = -------- end -------- +MSG_SIZE_BEFORE = Size before: +MSG_SIZE_AFTER = Size after: +MSG_COFF = Converting to AVR COFF: +MSG_EXTENDED_COFF = Converting to AVR Extended COFF: +MSG_FLASH = Creating load file for Flash: +MSG_EEPROM = Creating load file for EEPROM: +MSG_EXTENDED_LISTING = Creating Extended Listing: +MSG_SYMBOL_TABLE = Creating Symbol Table: +MSG_LINKING = Linking: +MSG_COMPILING = Compiling: +MSG_ASSEMBLING = Assembling: +MSG_CLEANING = Cleaning project: + + + + +# Define all object files. +OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) + +# Define all listing files. +LST = $(SRC:.c=.lst) $(ASRC:.S=.lst) + + +# Compiler flags to generate dependency files. +GENDEPFLAGS = -MD -MP -MF .dep/$(@F).d + + +# Combine all necessary flags and optional flags. +# Add target processor to flags. +ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS) +ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS) + + + + + +# Default target. +all: begin gccversion sizebefore build sizeafter end + +build: elf hex eep lss sym + +elf: $(TARGET).elf +hex: $(TARGET).hex +eep: $(TARGET).eep +lss: $(TARGET).lss +sym: $(TARGET).sym + + + +# Eye candy. +# AVR Studio 3.x does not check make's exit code but relies on +# the following magic strings to be generated by the compile job. +begin: + @echo + @echo $(MSG_BEGIN) + +end: + @echo $(MSG_END) + @echo + + +# Display size of file. +HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex +ELFSIZE = $(SIZE) --format=avr --mcu=$(MCU) $(TARGET).elf + +sizebefore: + @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \ + 2>/dev/null; echo; fi + +sizeafter: + @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \ + 2>/dev/null; echo; fi + + + +# Display compiler version information. +gccversion : + @$(CC) --version + + + +# Program the device. +program: $(TARGET).hex $(TARGET).eep + $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM) + + +# Generate avr-gdb config/init file which does the following: +# define the reset signal, load the target file, connect to target, and set +# a breakpoint at main(). +gdb-config: + @$(REMOVE) $(GDBINIT_FILE) + @echo define reset >> $(GDBINIT_FILE) + @echo SIGNAL SIGHUP >> $(GDBINIT_FILE) + @echo end >> $(GDBINIT_FILE) + @echo file $(TARGET).elf >> $(GDBINIT_FILE) + @echo target remote $(DEBUG_HOST):$(DEBUG_PORT) >> $(GDBINIT_FILE) +ifeq ($(DEBUG_BACKEND),simulavr) + @echo load >> $(GDBINIT_FILE) +endif + @echo break main >> $(GDBINIT_FILE) + +debug: gdb-config $(TARGET).elf +ifeq ($(DEBUG_BACKEND), avarice) + @echo Starting AVaRICE - Press enter when "waiting to connect" message displays. + @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \ + $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT) + @$(WINSHELL) /c pause + +else + @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \ + $(DEBUG_MFREQ) --port $(DEBUG_PORT) +endif + @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE) + + + + +# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB. +COFFCONVERT=$(OBJCOPY) --debugging \ +--change-section-address .data-0x800000 \ +--change-section-address .bss-0x800000 \ +--change-section-address .noinit-0x800000 \ +--change-section-address .eeprom-0x810000 + + +coff: $(TARGET).elf + @echo + @echo $(MSG_COFF) $(TARGET).cof + $(COFFCONVERT) -O coff-avr $< $(TARGET).cof + + +extcoff: $(TARGET).elf + @echo + @echo $(MSG_EXTENDED_COFF) $(TARGET).cof + $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof + + + +# Create final output files (.hex, .eep) from ELF output file. +%.hex: %.elf + @echo + @echo $(MSG_FLASH) $@ + $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@ + +%.eep: %.elf + @echo + @echo $(MSG_EEPROM) $@ + -$(OBJCOPY) -j .eeprom --set-section-flags .eeprom=alloc,load \ + --change-section-lma .eeprom=0 -O $(FORMAT) $< $@ + +# Create extended listing file from ELF output file. +%.lss: %.elf + @echo + @echo $(MSG_EXTENDED_LISTING) $@ + $(OBJDUMP) -h -S $< > $@ + +# Create a symbol table from ELF output file. +%.sym: %.elf + @echo + @echo $(MSG_SYMBOL_TABLE) $@ + $(NM) -n $< > $@ + + + +# Link: create ELF output file from object files. +.SECONDARY : $(TARGET).elf +.PRECIOUS : $(OBJ) +%.elf: $(OBJ) + @echo + @echo $(MSG_LINKING) $@ + $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS) + + +# Compile: create object files from C source files. +%.o : %.c + @echo + @echo $(MSG_COMPILING) $< + $(CC) -c $(ALL_CFLAGS) $< -o $@ + + +# Compile: create assembler files from C source files. +%.s : %.c + $(CC) -S $(ALL_CFLAGS) $< -o $@ + + +# Assemble: create object files from assembler source files. +%.o : %.S + @echo + @echo $(MSG_ASSEMBLING) $< + $(CC) -c $(ALL_ASFLAGS) $< -o $@ + +# Create preprocessed source for use in sending a bug report. +%.i : %.c + $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ + + +# Target: clean project. +clean: begin clean_list end + +clean_list : + @echo + @echo $(MSG_CLEANING) + $(REMOVE) $(TARGET).hex + $(REMOVE) $(TARGET).eep + $(REMOVE) $(TARGET).cof + $(REMOVE) $(TARGET).elf + $(REMOVE) $(TARGET).map + $(REMOVE) $(TARGET).sym + $(REMOVE) $(TARGET).lss + $(REMOVE) $(OBJ) + $(REMOVE) $(LST) + $(REMOVE) $(SRC:.c=.s) + $(REMOVE) $(SRC:.c=.d) + $(REMOVE) $(SRC:.c=.i) + $(REMOVE) .dep/* + + + +# Include the dependency files. +-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*) + + +# Listing of phony targets. +.PHONY : all begin finish end sizebefore sizeafter gccversion \ +build elf hex eep lss sym coff extcoff \ +clean clean_list program debug gdb-config + diff --git a/RoboMI.aps b/RoboMI.aps new file mode 100644 index 0000000..cebd6f7 --- /dev/null +++ b/RoboMI.aps @@ -0,0 +1 @@ +RoboMI09-Mar-2006 21:51:4915-Apr-2006 16:05:27241009-Mar-2006 21:51:4944, 12, 0, 462AVR GCCdefault\RoboMI.elfD:\-Project-\RoboContest06\roboMSI_robot_v01\C\JTAG ICEATmega16251191falseR00R01R02R03R04R05R06R07R08R09R10R11R12R13R14R15R16R17R18R19R20R21R22R23R24R25R26R27R28R29R30R31Auto00roboMSPbufferservoCounter0D:\-Project-\RoboContest06\roboMSI_robot_v01\C\RoboMI.cdefault\RoboMI.lssdefault\RoboMI.mapdefaultNOatmega162111RoboMI.elfdefault\1D:\-Project-\cmAvrLibC\D:\-Project-\cmAvrLibClibcmAvrLibC.a-Wall -gdwarf-2 -DF_CPU=16000000UL -Os -fsigned-chardefault1C:\Program Files\WinAVR\bin\avr-gcc.exeC:\Program Files\WinAVR\utils\bin\make.exe11520025000000001000000001main11-65517200000RoboMI.c25900001D:\-Project-\cmAvrLibC\rfID.c25800002D:\-Project-\cmAvrLibC\lcdDOG.c25800003D:\-Project-\cmAvrLibC\roboMSP.c25800004D:\-Project-\cmAvrLibC\spiMaster.c25800005D:\-Project-\cmAvrLibC\ping.c258-1 72 716 6971278 0Maximized diff --git a/RoboMI.c b/RoboMI.c new file mode 100644 index 0000000..66a05ad --- /dev/null +++ b/RoboMI.c @@ -0,0 +1,1358 @@ +/*================================================================================================ + + CMtec RoboMSI (MasterSlaveInterface) copyright 2005 v1.0 (2006-02-21) + + Name: Christoffer Martinsson + E-mail: cm@cmtec.se + + +================================================================================================*/ +//#define F_CPU 8000000UL //internal 8MHz +//#define F_CPU 16000000UL + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +// Time defenitions for servo generator +#define SERVO_TIMER 0xEE +#define SERVO_POS_RIGHT_90 67 //31 +#define SERVO_POS_RIGHT_45 103 //49 +#define SERVO_POS_CENTER 140 //68 +#define SERVO_POS_LEFT_45 174 //86 +#define SERVO_POS_LEFT_90 208 //104 + +#define SERVO_POS_MOTOR_STOP 119 //68 +#define SERVO_POS_MOTOR_FW 133//130 //68 +#define SERVO_POS_MOTOR_RE 108//111 //68 +#define SERVO_POS_MOTOR_FW_SOFT 127 //68 +#define SERVO_POS_MOTOR_RE_SOFT 114 //68 +#define SERVO_POS_MOTOR_FW_FAST 134//139//133 //68 +#define SERVO_POS_MOTOR_RE_FAST 104//105//108 //68 + +// Formula = X * 13 (X = distance in mm) +#define DISTANCE_TO_STOP 5500UL +#define DISTANCE_ONE_METER 6000UL +#define DISTANCE_TWO_METER 26400UL + +// Port defenitions for servo generator +#define SERVO_PING PC1 +#define SERVO_MOTOR_LEFT PC0 +#define SERVO_MOTOR_RIGHT PC2 +#define SERVO_PORT PORTC +// Variables for servo generator +uint8_t servoPing = SERVO_POS_CENTER; +uint8_t servoMotorLeft = SERVO_POS_MOTOR_STOP; +uint8_t servoMotorRight = SERVO_POS_MOTOR_STOP; +uint8_t servoCounter = 0; + +uint8_t servoMotorLeftReg = SERVO_POS_MOTOR_STOP; +uint8_t servoMotorRightReg = SERVO_POS_MOTOR_STOP; + +// Time definitions for Program Timer +#define PROG_TIMER 0xBFFF // 14ms //0xB1DF // 20ms +// Variables for Program Timer +uint8_t progCounterPing = 0; +uint8_t progCounterPPM = 0; + +uint8_t progCounter = 0; +uint8_t progTimer = 0; +uint8_t progPosition = 0; +uint8_t progDoUpdate = 0; + +uint16_t tempDistance = 0; +uint16_t tempDistanceToWall = 0; +uint16_t tempLastDistanceToWall = 0; +uint16_t tempLeftDistance = 0; +uint16_t tempRightDistance = 0; + +// Variables for main program +uint8_t roboActive = 0; +uint8_t rfEnable = 0; + +uint8_t switchOneCheck = 0; +uint8_t switchTwoCheck = 0; + +uint8_t regulatorMode = 0; +uint8_t regulatorTimer = 0; +uint8_t regulatorCounter = 0; +uint8_t regulatorMeasureCounter = 0; + +const char menuTable[][49] PROGMEM = +{ + " CMtec " + "roboCrawler v1.1" + " ", + + " mode 1: " + " Follow wall at " + " a distance(1m) ", + + " mode 2: " + " Drive and void " + " any walls ", + + " mode 3: " + "Measure distance" + " forward ", + + " mode RF: " + " RF actived and " + "waiting for com.", +}; + +void checkCommunication(void); +void showDistanceOnLCD(uint16_t distance, uint8_t mode, uint8_t position); +/*================================================================================================ + Functions +================================================================================================*/ +/*------------------------------------------------------------------------------------------------ + initIO + + Description: Initialise I/O + Input: - + Output: - +------------------------------------------------------------------------------------------------*/ +void initIO (void){ + + TCCR1B = (1<>8); + TCNT1L = (uint8_t)(PROG_TIMER); + + TCNT2 = SERVO_TIMER; + + TIMSK |= (1<= 2) + { + // Start for servo PPM pulses + servoCounter = 0; + SERVO_PORT |= (1<>8); + TCNT1L = (uint8_t)(PROG_TIMER); +} +/*------------------------------------------------------------------------------------------------ + SIG_OVERFLOW2 + + Description: Timer1 overflow interrupt. Used as servo (PPM) timer + Input: - + Output: - +------------------------------------------------------------------------------------------------*/ +ISR (TIMER2_OVF_vect) +{ + uint8_t done = 1; + + // Check each servo output if pulselength is reached + if(servoCounter >= servoPing) + SERVO_PORT &= ~(1<= servoMotorLeft) + SERVO_PORT &= ~(1<= servoMotorRight) + SERVO_PORT &= ~(1<= progTimer) + { + switch (progPosition) + { + case 0: + // Kör frammåt + lcdClearDisplay(); + lcdSetLayout(1); + lcdSetPos(0x00); + lcdWriteString("Drive: FORWARD "); + + servoMotorLeft = SERVO_POS_MOTOR_FW_FAST; + servoMotorRight = SERVO_POS_MOTOR_FW_FAST; + + progTimer = 20; + progPosition++; + + break; + + case 1: + // Kör frammåt till dess att avståndet mot väggen är 1meter + servoMotorLeft = SERVO_POS_MOTOR_FW_SOFT; + servoMotorRight = SERVO_POS_MOTOR_FW_SOFT; + + pingSendPing(); + progTimer = 4; + + if(pingGetReady()) + { + + tempDistance = pingGetDistance(); + + if(tempDistance < DISTANCE_ONE_METER) + { + showDistanceOnLCD(0,0,2); + progTimer = 1; + progPosition++; + } + else + { + showDistanceOnLCD(tempDistance-DISTANCE_ONE_METER,0,2); + } + } + + break; + + case 2: + // Bromsa (backa något) + lcdSetPos(0x00); + lcdWriteString("Drive: STOP "); + // Stop and breake + servoMotorLeft = SERVO_POS_MOTOR_STOP; + servoMotorRight = SERVO_POS_MOTOR_STOP; + servoMotorLeft = SERVO_POS_MOTOR_RE; + servoMotorRight = SERVO_POS_MOTOR_RE; + + progTimer = 40; + progPosition++; + + break; + + case 3: + // Stanna + + servoMotorLeft = SERVO_POS_MOTOR_STOP; + servoMotorRight = SERVO_POS_MOTOR_STOP; + + progTimer = 1; + regulatorMeasureCounter = 0; + progPosition++; + + break; + + case 4: + // Vrid servo 45grader vänster (från centrum) + servoPing = SERVO_POS_LEFT_45; + progTimer = 20; + progPosition++; + + break; + + case 5: + // Mät och spara avstånd + pingSendPing(); + progTimer = 4; + + if(pingGetReady()) + { + tempLeftDistance = pingGetDistance(); + progTimer = 1; + progPosition++; + } + + break; + + case 6: + // Vrid servo 45grader höger (från centrum) + servoPing = SERVO_POS_RIGHT_45; + progTimer = 40; + progPosition++; + + break; + + case 7: + // Mät och spara avstånd + pingSendPing(); + progTimer = 4; + + if(pingGetReady()) + { + tempRightDistance = pingGetDistance(); + progTimer = 1; + progPosition++; + } + + break; + + case 8: + + servoPing = SERVO_POS_CENTER; + + if(tempLeftDistance > tempRightDistance) + { + regulatorMode = 0; // Mäter åt höger + } + else + { + regulatorMode = 1; // Mäter åt vänster + } + + progTimer = 50; + progPosition++; + + break; + + case 9: + // Mät och spara avstånd + pingSendPing(); + progTimer = 4; + + if(pingGetReady()) + { + lcdSetPos(0x00); + lcdWriteString("Align to wall "); + tempLastDistanceToWall = pingGetDistance(); + tempDistanceToWall = tempLastDistanceToWall; + progTimer = 1; + progPosition++; + } + + break; + + case 10: + // Reglera in sig vinkerät mot väggen + // Vrider sig ett steg + if (regulatorMode == 0) // Tittar höger + { + // sväng höger + servoMotorLeft = SERVO_POS_MOTOR_FW_FAST; + servoMotorRight = SERVO_POS_MOTOR_RE_FAST; + progTimer = 7; + } + else if (regulatorMode == 1) // Tittar vänster + { + // sväng vänster + servoMotorLeft = SERVO_POS_MOTOR_RE_FAST; + servoMotorRight = SERVO_POS_MOTOR_FW_FAST; + progTimer = 7; + } + + progPosition++; + + break; + + case 11: + // Reglera in sig vinkerät mot väggen + // Kontrollerar avstånd + pingSendPing(); + progTimer = 4; + + servoMotorLeft = SERVO_POS_MOTOR_STOP; + servoMotorRight = SERVO_POS_MOTOR_STOP; + + if(pingGetReady()) + { + + tempDistance = pingGetDistance(); + + if(tempDistance > tempLastDistanceToWall) + { + lcdSetPos(0x00); + lcdWriteString(" ^-- (1m) --^ "); + + progTimer = 1; + progPosition++; + } + else + progPosition--; + + tempLastDistanceToWall = tempDistance; + } + + break; + + case 12: + // Reglera in position 1meter från väggen + pingSendPing(); + progTimer = 4; + + if(pingGetReady()) + { + + tempDistance = pingGetDistance(); + + if(tempDistance > DISTANCE_ONE_METER) + showDistanceOnLCD((tempDistance-DISTANCE_ONE_METER),0,2); + else + showDistanceOnLCD((DISTANCE_ONE_METER-tempDistance),1,2); + + if(tempDistance < (DISTANCE_ONE_METER - 200)) + { + // Kör frammåt (öka hastigheten långsamt) + if(servoMotorLeft > SERVO_POS_MOTOR_RE_SOFT) + { + servoMotorLeft--; + servoMotorRight--; + } + + regulatorMeasureCounter = 0; + } + else if(tempDistance > (DISTANCE_ONE_METER + 200)) + { + // Kör bakåt (öka hastigheten långsamt) + if(servoMotorLeft < SERVO_POS_MOTOR_FW_SOFT) + { + servoMotorLeft++; + servoMotorRight++; + + } + + regulatorMeasureCounter = 0; + } + else + { + servoMotorLeft = SERVO_POS_MOTOR_STOP; + servoMotorRight = SERVO_POS_MOTOR_STOP; + + if(++regulatorMeasureCounter == 5) + { + lcdSetPos(0x00); + lcdWriteString("Posistion locked"); + + servoMotorLeft = SERVO_POS_MOTOR_STOP; + servoMotorRight = SERVO_POS_MOTOR_STOP; + tempDistanceToWall = tempDistance; + progTimer = 50; + regulatorMeasureCounter = 0; + progPosition++; + } + } + } + + break; + + case 13: + // Vrider 90grader + servoPing = SERVO_POS_CENTER; + + if(tempLeftDistance > tempRightDistance) + { + lcdSetPos(0x00); + lcdWriteString("Drive: Turn < "); + + servoMotorLeft = SERVO_POS_MOTOR_RE_FAST; + servoMotorRight = SERVO_POS_MOTOR_FW_FAST; + servoPing = SERVO_POS_RIGHT_90; + regulatorMode = 0; // Mäter åt höger + progTimer = 50; + } + else + { + lcdSetPos(0x00); + lcdWriteString("Drive: Turn > "); + + servoMotorLeft = SERVO_POS_MOTOR_FW_FAST; + servoMotorRight = SERVO_POS_MOTOR_RE_FAST; + servoPing = SERVO_POS_LEFT_90; + regulatorMode = 1; // Mäter åt vänster + progTimer = 50; + } + + progPosition++; + + break; + + case 14: + // Stanna + servoMotorLeft = SERVO_POS_MOTOR_STOP; + servoMotorRight = SERVO_POS_MOTOR_STOP; + + progTimer = 10; + regulatorTimer = 2; + progPosition++; + progPosition++; + progPosition++; + + break; + + case 15: + // Kör frammåt + lcdSetPos(0x00); + lcdWriteString("Drive: FORWARD "); + + servoMotorLeft = SERVO_POS_MOTOR_FW_FAST; + servoMotorRight = SERVO_POS_MOTOR_FW_FAST; + + progTimer = 20; + progPosition++; + + break; + + case 16: + // Kör frammåt + servoMotorLeft = SERVO_POS_MOTOR_FW_SOFT; + servoMotorRight = SERVO_POS_MOTOR_FW_SOFT; + + progTimer = 10; + progPosition++; + + break; + + case 17: + // Mäter avstånd + pingSendPing(); + progTimer = 3; + + if(pingGetReady()) + { + + tempDistance = pingGetDistance(); + progTimer = 1; + progPosition++; + + } + + break; + + case 18: + // Reglerar 1meter från väggen + if(++regulatorCounter >= regulatorTimer) + { + progPosition++; + progTimer = 1; + regulatorCounter = 0; + } + else + { + uint8_t calculateProgTimer = 0; + if (regulatorMode == 0) // Tittar höger + { + lcdSetPos(0x00); + lcdWriteString(" ]--- (1m) --->|"); + + if(tempDistance > DISTANCE_ONE_METER) + showDistanceOnLCD((tempDistance-DISTANCE_ONE_METER),3,2); + else + showDistanceOnLCD((DISTANCE_ONE_METER-tempDistance),2,2); + + if((tempDistance < tempLastDistanceToWall) && (tempDistance < (DISTANCE_ONE_METER -1000))) + { + // sväng vänster + servoMotorLeft = SERVO_POS_MOTOR_RE_FAST; + servoMotorRight = SERVO_POS_MOTOR_FW_FAST; + + calculateProgTimer = ((DISTANCE_ONE_METER - tempDistance)/40); + + if(calculateProgTimer < 15) + progTimer = calculateProgTimer; + else + progTimer = 15; + + } + else if((tempDistance < tempLastDistanceToWall) && (tempDistance < (DISTANCE_ONE_METER -10))) + { + // sväng vänster + servoMotorLeft = SERVO_POS_MOTOR_RE_FAST; + servoMotorRight = SERVO_POS_MOTOR_FW_FAST; + + progTimer = 5; + + } + else if((tempDistance > tempLastDistanceToWall) && (tempDistance > (DISTANCE_ONE_METER+1000))) + { + // sväng höger + servoMotorLeft = SERVO_POS_MOTOR_FW_FAST; + servoMotorRight = SERVO_POS_MOTOR_RE_FAST; + + calculateProgTimer = ((tempDistance - DISTANCE_ONE_METER)/40); + + if(calculateProgTimer < 15) + progTimer = calculateProgTimer; + else + progTimer = 15; + + } + else if((tempDistance > tempLastDistanceToWall) && (tempDistance > (DISTANCE_ONE_METER+10))) + { + // sväng höger + servoMotorLeft = SERVO_POS_MOTOR_FW_FAST; + servoMotorRight = SERVO_POS_MOTOR_RE_FAST; + + progTimer = 5; + + } + else + { + servoMotorLeft = SERVO_POS_MOTOR_FW_SOFT; + servoMotorRight = SERVO_POS_MOTOR_FW_SOFT; + progTimer = 4; + } + } + + else if (regulatorMode == 1) // Tittar vänster + { + lcdSetPos(0x00); + lcdWriteString("|<--- (1m) ---[ "); + + if(tempDistance > DISTANCE_ONE_METER) + showDistanceOnLCD((tempDistance-DISTANCE_ONE_METER),2,2); + else + showDistanceOnLCD((DISTANCE_ONE_METER-tempDistance),3,2); + + if((tempDistance < tempLastDistanceToWall) && (tempDistance < (DISTANCE_ONE_METER-1000))) + { + // sväng höger + servoMotorLeft = SERVO_POS_MOTOR_FW_FAST; + servoMotorRight = SERVO_POS_MOTOR_RE_FAST; + + calculateProgTimer = ((DISTANCE_ONE_METER - tempDistance)/40); + + if(calculateProgTimer < 15) + progTimer = calculateProgTimer; + else + progTimer = 15; + + } + else if((tempDistance < tempLastDistanceToWall) && (tempDistance < (DISTANCE_ONE_METER-10))) + { + // sväng höger + servoMotorLeft = SERVO_POS_MOTOR_FW_FAST; + servoMotorRight = SERVO_POS_MOTOR_RE_FAST; + + progTimer = 5; + + } + else if((tempDistance > tempLastDistanceToWall) && (tempDistance > (DISTANCE_ONE_METER +1000))) + { + // sväng vänster + servoMotorLeft = SERVO_POS_MOTOR_RE_FAST; + servoMotorRight = SERVO_POS_MOTOR_FW_FAST; + + calculateProgTimer = ((tempDistance - DISTANCE_ONE_METER)/40); + + if(calculateProgTimer < 15) + progTimer = calculateProgTimer; + else + progTimer = 15; + } + else if((tempDistance > tempLastDistanceToWall) && (tempDistance > (DISTANCE_ONE_METER +10))) + { + // sväng vänster + servoMotorLeft = SERVO_POS_MOTOR_RE_FAST; + servoMotorRight = SERVO_POS_MOTOR_FW_FAST; + + progTimer = 5; + } + else + { + servoMotorLeft = SERVO_POS_MOTOR_FW_SOFT; + servoMotorRight = SERVO_POS_MOTOR_FW_SOFT; + progTimer = 4; + } + } + tempLastDistanceToWall = tempDistance; + progPosition--; + progPosition--; + } + + break; + + case 19: + + servoPing = SERVO_POS_CENTER; + + servoMotorLeft = SERVO_POS_MOTOR_STOP; + servoMotorRight = SERVO_POS_MOTOR_STOP; + + progTimer = 35; + progPosition++; + + break; + + case 20: + + progTimer = 3; + pingSendPing(); + + if(pingGetReady()) + { + + tempDistance = pingGetDistance(); + + if(tempDistance < DISTANCE_ONE_METER) + { + showDistanceOnLCD(0,0,1); + progPosition = 2; + } + else if (tempDistance < (DISTANCE_ONE_METER*2)) + { + showDistanceOnLCD(tempDistance-DISTANCE_ONE_METER,0,1); + regulatorTimer = 2; + progPosition++; + } + else + { + showDistanceOnLCD(tempDistance-DISTANCE_ONE_METER,0,1); + regulatorTimer = 10; + progPosition++; + } + } + + break; + + case 21: + + if (regulatorMode == 0) // Tittar höger + { + servoPing = SERVO_POS_RIGHT_90; + } + else + { + servoPing = SERVO_POS_LEFT_90; + } + + progTimer = 5; + progPosition = 15; + + break; + + } + + progCounter = 0; + } + } + + // Program for robot AI + if (roboActive == 2) + { + // Program(2) for random RFID serach + if (++progCounter >= progTimer) + { + + switch (progPosition) + { + case 0: + + lcdClearDisplay(); + lcdSetLayout(1); + + progTimer = 1; + progPosition++; + + break; + + case 1: + + lcdSetPos(0x00); + lcdWriteString("Drive: FORWARD "); + + servoMotorLeft = SERVO_POS_MOTOR_FW_FAST; + servoMotorRight = SERVO_POS_MOTOR_FW_FAST; + + progTimer = 20; + progPosition++; + + break; + + case 2: + + servoMotorLeft = SERVO_POS_MOTOR_FW_SOFT; + servoMotorRight = SERVO_POS_MOTOR_FW_SOFT; + + pingSendPing(); + progTimer = 3; + + if(pingGetReady()) + { + + tempDistance = pingGetDistance(); + + if(tempDistance < DISTANCE_TO_STOP) + { + showDistanceOnLCD(0,0,2); + progPosition++; + } + else + { + showDistanceOnLCD(tempDistance-DISTANCE_TO_STOP,0,2); + } + + } + + break; + + case 3: + + lcdSetPos(0x00); + lcdWriteString("Drive: STOP "); + + // Stop and breake + servoMotorLeft = SERVO_POS_MOTOR_STOP; + servoMotorRight = SERVO_POS_MOTOR_STOP; + servoMotorLeft = SERVO_POS_MOTOR_RE; + servoMotorRight = SERVO_POS_MOTOR_RE; + + progTimer = 50; + + progPosition++; + + break; + + case 4: + + servoMotorLeft = SERVO_POS_MOTOR_STOP; + servoMotorRight = SERVO_POS_MOTOR_STOP; + + progTimer = 2; + + progPosition++; + + break; + + case 5: + + servoPing = SERVO_POS_LEFT_45; + + progTimer = 20; + + progPosition++; + + break; + + case 6: + + pingSendPing(); + progTimer = 4; + + if(pingGetReady()) + { + tempLeftDistance = pingGetDistance(); + progTimer = 20; + progPosition++; + } + + + break; + + case 7: + + servoPing = SERVO_POS_RIGHT_45; + + progTimer = 40; + + progPosition++; + + break; + + case 8: + + pingSendPing(); + progTimer = 4; + + if(pingGetReady()) + { + tempRightDistance = pingGetDistance(); + + servoPing = SERVO_POS_CENTER; + + if((tempLeftDistance < DISTANCE_TO_STOP ) + && (tempRightDistance < DISTANCE_TO_STOP)) + { + lcdSetPos(0x00); + lcdWriteString("Drive: Turn <<< "); + + servoMotorLeft = SERVO_POS_MOTOR_RE_FAST; + servoMotorRight = SERVO_POS_MOTOR_FW_FAST; + progTimer = 70; + } + else if(tempLeftDistance > tempRightDistance) + { + lcdSetPos(0x00); + lcdWriteString("Drive: Turn < "); + + servoMotorLeft = SERVO_POS_MOTOR_RE_FAST; + servoMotorRight = SERVO_POS_MOTOR_FW_FAST; + progTimer = 40; + } + else + { + lcdSetPos(0x00); + lcdWriteString("Drive: Turn > "); + + servoMotorLeft = SERVO_POS_MOTOR_FW_FAST; + servoMotorRight = SERVO_POS_MOTOR_RE_FAST; + progTimer = 40; + } + + progPosition++; + } + + break; + + case 9: + + servoMotorLeft = SERVO_POS_MOTOR_STOP; + servoMotorRight = SERVO_POS_MOTOR_STOP; + + progTimer = 10; + progPosition = 1; + + break; + } + + progCounter = 0; + } + } + + if (roboActive == 3) + { + // Program(2) for random RFID serach + if (++progCounter >= progTimer) + { + + switch (progPosition) + { + case 0: + + lcdClearDisplay(); + lcdSetLayout(1); + lcdSetPos(0x00); + lcdWriteString("Servo: forward "); + lcdSetPos(0x10); + lcdWriteString("Distance: "); + + progTimer = 1; + progPosition++; + + break; + + case 1: + + pingSendPing(); + progTimer = 10; + + if(pingGetReady()) + { + + tempDistance = pingGetDistance(); + lcdSetPos(0x1A); + lcdWriteHexAsDecimal(tempDistance); + + } + + break; + } + + progCounter = 0; + } + } +} +/*------------------------------------------------------------------------------------------------ + showDistanceOnLCD + + Description: + Input: - + Output: - +------------------------------------------------------------------------------------------------*/ +void showDistanceOnLCD(uint16_t distance, uint8_t mode, uint8_t position) +{ + if(position == 1) + lcdSetPos(0x00); + else if(position == 2) + lcdSetPos(0x10); + else if(position == 3) + lcdSetPos(0x20); + + if(mode == 0) // Both arrow pointing in + { + if(distance > 32000) + { + lcdWriteString(" "); + } + else if(distance > 16000) + { + lcdWriteString("> <"); + } + else if(distance > 8000) + { + lcdWriteString(">> <<"); + } + else if(distance > 4000) + { + lcdWriteString(">>> <<<"); + } + else if(distance > 2000) + { + lcdWriteString(">>>> <<<<"); + } + else if(distance > 1000) + { + lcdWriteString(">>>>> <<<<<"); + } + else if(distance > 500) + { + lcdWriteString(">>>>>> <<<<<<"); + } + else if(distance > 100) + { + lcdWriteString(">>>>>>> <<<<<<<"); + } + else + { + lcdWriteString(">>>>>>>[]<<<<<<<"); + } + } + else if(mode == 1) // Both arrow pointing Out + { + if(distance > 32000) + { + lcdWriteString(" "); + } + else if(distance > 16000) + { + lcdWriteString(" < > "); + } + else if(distance > 8000) + { + lcdWriteString(" << >> "); + } + else if(distance > 4000) + { + lcdWriteString(" <<< >>> "); + } + else if(distance > 2000) + { + lcdWriteString(" <<<< >>>> "); + } + else if(distance > 1000) + { + lcdWriteString(" <<<<< >>>>> "); + } + else if(distance > 500) + { + lcdWriteString(" <<<<<< >>>>>> "); + } + else if(distance > 100) + { + lcdWriteString("<<<<<<< >>>>>>>"); + } + else + { + lcdWriteString("<<<<<<<[]>>>>>>>"); + } + } + else if(mode == 2) // Left arrow pointing out. + { + if(distance > 6400) + { + lcdWriteString("<<<<<<< "); + } + else if(distance > 3200) + { + lcdWriteString(" <<<<<< "); + } + else if(distance > 1600) + { + lcdWriteString(" <<<<< "); + } + else if(distance > 800) + { + lcdWriteString(" <<<< "); + } + else if(distance > 400) + { + lcdWriteString(" <<< "); + } + else if(distance > 200) + { + lcdWriteString(" << "); + } + else if(distance > 30) + { + lcdWriteString(" < "); + } + else + { + lcdWriteString(" [] "); + } + } + else if(mode == 3) // Right arrow pointing out. + { + if(distance > 6400) + { + lcdWriteString(" >>>>>>>"); + } + else if(distance > 3200) + { + lcdWriteString(" >>>>>> "); + } + else if(distance > 1600) + { + lcdWriteString(" >>>>> "); + } + else if(distance > 800) + { + lcdWriteString(" >>>> "); + } + else if(distance > 400) + { + lcdWriteString(" >>> "); + } + else if(distance > 200) + { + lcdWriteString(" >> "); + } + else if(distance > 30) + { + lcdWriteString(" > "); + } + else + { + lcdWriteString(" [] "); + } + } +} +/*------------------------------------------------------------------------------------------------ + checkCommunication + + Description: Check for incoming data packets. + Input: - + Output: - +------------------------------------------------------------------------------------------------*/ +void checkCommunication(void){ + + + if (rfIdGetTagPresent()) + { + uint8_t *tempPointer = rfIdGetTag(); + + lcdSetPos(0x13); + lcdWriteString(tempPointer); + roboMSPSetData(tempPointer); + + } + + switch (roboMSPGetActiveStatus()) + { + case ACTIVATE_P1: + activateRobot(1); + rfIdEnable(); + break; + + case ACTIVATE_P2: + activateRobot(2); + rfIdEnable(); + break; + + case DEACTIVATE: + deactivateRobot(); + break; + + case ACK: + rfIdClearBuffer(); + break; + } + +} +/*================================================================================================ + Main +================================================================================================*/ +int main (void){ + + cli(); // Disable global interrupt + + initIO(); + lcdInit(); + rfIdInit(); + roboMSPInit(); + pingInit(); + + lcdSetIntensity(50); + lcdSetLayout(2); + lcdWriteStringP(menuTable[0]); + + rfIdDisable(); + roboMSPDisable(); + + sei(); // Enable global interrupt + + while(1){ + + if(progDoUpdate) + { + progDoUpdate = 0; + updateProgram(); + } + + // Active-mode 1 (left switch lower position) + if (!bit_is_set(PINA,PA4)) + { + if(switchOneCheck) + { + activateRobot(3); + switchOneCheck = 0; + } + } + // Active-mode 2 (left switch middle position) + else if ((bit_is_set(PINA,PA5)) && (bit_is_set(PINA,PA4))) + { + if(!switchOneCheck) + { + deactivateRobot(); + rfEnable = 0; + switchOneCheck = 1; + main(); + } + } + // Active-mode 3 (left switch upper position) + else if (!bit_is_set(PINA,PA5)) + { + if(switchOneCheck) + { + lcdSetLayout(0); + lcdWriteStringP(menuTable[4]); + rfEnable = 1; + rfIdEnable(); + roboMSPEnable(); + switchOneCheck = 0; + } + } + + // Active-mode 1 (left switch lower position) + if (!bit_is_set(PINA,PA6)) + { + if(switchTwoCheck) + { + activateRobot(1); + switchTwoCheck = 0; + } + } + // Active-mode 2 (left switch middle position) + else if ((bit_is_set(PINA,PA7)) && (bit_is_set(PINA,PA6))) + { + if(!switchTwoCheck) + { + deactivateRobot(); + rfEnable = 0; + switchTwoCheck = 1; + main(); + } + } + // Active-mode 3 (left switch upper position) + else if (!bit_is_set(PINA,PA7)) + { + if(switchTwoCheck) + { + activateRobot(2); + switchTwoCheck = 0; + } + } + + } + + + return (0); +} +/*================================================================================================ + End +================================================================================================*/ + diff --git a/RoboMI.eep b/RoboMI.eep new file mode 100644 index 0000000..1996e8f --- /dev/null +++ b/RoboMI.eep @@ -0,0 +1 @@ +:00000001FF diff --git a/RoboMI.elf b/RoboMI.elf new file mode 100644 index 0000000..1eaec4d Binary files /dev/null and b/RoboMI.elf differ diff --git a/RoboMI.hex b/RoboMI.hex new file mode 100644 index 0000000..68bfc99 --- /dev/null +++ b/RoboMI.hex @@ -0,0 +1,441 @@ +:100000000C94C9000C94AC0B0C94E6000C94E60024 +:100010000C94E6000C94E6000C94E6000C94E600C8 +:100020000C94E6000C94E6000C94E6000C9423017A +:100030000C94E6000C94E6000C94E6000C94FF008F +:100040000C94E6000C94E6000C94E6000C94710904 +:100050000C94890A0C94E6000C94E6000C94E600DB +:100060000C94E6000C94E6000C94E6000C94E60078 +:10007000C102C702EE02FC02080310032103290398 +:100080003A0353036F038503BD032A0460046C0421 +:100090007C048604980473058005B4052020202084 +:1000A00020434D746563202020202020726F626FF2 +:1000B000437261776C65722076312E3120202020CA +:1000C0002020202020202020202020200020202050 +:1000D00020206D6F646520313A2020202020466F5B +:1000E0006C6C6F772077616C6C20617420206120CC +:1000F00064697374616E636528316D292000202066 +:100100002020206D6F646520323A2020202020447A +:100110007269766520616E6420766F6964202020A4 +:1001200020616E792077616C6C7320202020002084 +:10013000202020206D6F646520333A202020204D40 +:100140006561737572652064697374616E6365209F +:10015000202020666F7277617264202020202000AA +:10016000202020206D6F64652052463A20202020F8 +:10017000205246206163746976656420616E642054 +:1001800077616974696E6720666F7220636F6D2E88 +:10019000000011241FBECFEFD4E0DEBFCDBF14E0BE +:1001A000A0E0B1E0EAE4F8E102C005900D92AA32C5 +:1001B000B107D9F714E0AAE2B4E001C01D92A53658 +:1001C000B107E1F70E9418070C94240C0C9400006E +:1001D00082E08EBD8FEB8DBD8FEF8CBD8EEE83BD2B +:1001E00089B7846889BF84B3876084BB8AB38F7002 +:1001F0008ABB8BB3806F8BBB10922F0408951F9224 +:100200000F920FB60F9211248F9380912C048F5F61 +:1002100080932C04823050F010922A0485B38760BA +:1002200085BB87B5826087BD10922C0481E08093E6 +:1002300030048FEB8DBD8FEF8CBD8F910F900FBE73 +:100240000F901F9018951F920F920FB60F921124C6 +:100250002F938F939F9390912A0480910304981772 +:1002600018F0A99821E002C0000020E08091040469 +:10027000981710F0A89802C0000020E080910504B3 +:10028000981720F0AA98222319F406C0000004C091 +:1002900087B58D7F87BD05C09F5F90932A040000BE +:1002A00000008EEE83BD9F918F912F910F900FBE16 +:1002B0000F901F9018951F93182F80E00E94A80799 +:1002C00081E3189FC001112484569F4F0E942D087E +:1002D00088EC80932E0410933B041F910895109294 +:1002E0003B0487E780930404809305048CE88093A3 +:1002F00003040E94BB0908951F93CF93DF93EC0181 +:10030000162F413011F480E007C0423011F480E133 +:1003100003C0433019F480E20E94D3071123B9F5DA +:100320008DE7C130D807C8F58EE3C138D80718F07B +:1003300081E191E0CAC08FE1C134D80718F082E2B0 +:1003400091E0C3C08FE0C13AD80718F083E391E091 +:10035000BCC087E0C13DD80718F084E491E0B5C087 +:1003600083E0C93ED80718F085E591E0AEC081E092 +:10037000C53FD80718F086E691E0A7C0C536D1057D +:1003800018F087E791E0A1C088E891E09EC01130A5 +:10039000D1F58DE7C130D80718F080E091E095C025 +:1003A0008EE3C138D80718F089E991E08EC08FE15B +:1003B000C134D80718F08AEA91E087C08FE0C13ACB +:1003C000D80718F08BEB91E080C087E0C13DD807DB +:1003D00018F08CEC91E079C083E0C93ED80718F0A2 +:1003E0008DED91E072C081E0C53FD80718F08EEE28 +:1003F00091E06BC0C536D10518F08FEF91E065C074 +:1004000080E192E062C0123071F589E1C130D80715 +:1004100018F081E292E059C08CE0C138D80718F09A +:1004200082E392E052C086E0C134D80718F083E43A +:1004300092E04BC083E0C132D80718F084E592E027 +:1004400044C081E0C139D80718F085E692E03DC08C +:10045000C93CD10518F086E792E037C06F9798F154 +:1004600087E892E032C0133091F589E1C130D807B6 +:1004700018F089EA92E029C08CE0C138D80718F05A +:100480008AEB92E022C086E0C134D80718F08BECEA +:1004900092E01BC083E0C132D80718F08CED92E0E7 +:1004A00014C081E0C139D80718F08DEE92E00DC07C +:1004B000C93CD10518F08EEF92E007C06F9718F095 +:1004C0008FE093E002C088E992E00E943B08DF9150 +:1004D000CF911F9108950F931F930E946D09882358 +:1004E00061F00E9464098C0183E10E94D307C80176 +:1004F0000E943B08C8010E94130A0E94C30983306E +:1005000061F0843018F4823099F405C0843059F0D9 +:10051000853071F40BC081E001C082E00E945B0174 +:100520000E94BF0905C00E946F0102C00E946909B4 +:100530001F910F9108951F9380913C04882311F01F +:100540000E946B0280913B04813009F01EC38091B0 +:100550002D048F5F80932D0490912E04891708F449 +:1005600014C380912F04E82FF0E0E631F10508F084 +:100570000AC3E85CFF4FEE0FFF1F0590F491E02DDA +:1005800009940E94DF0781E00E94A807A5C18FE7B8 +:1005900080930404809305040E948C0B84E0809374 +:1005A0002E040E94A70B882309F4EDC20E94A00B21 +:1005B000909332048093310427E18037920738F416 +:1005C00042E060E080E090E00E947C01AFC142E048 +:1005D00060E0805797410E947C01D5C280E00E9474 +:1005E000D30781E393E00E943B088CE680930404E8 +:1005F0008093050488E27DC187E78093040480939B +:10060000050481E080932E041092420484E0B9C274 +:100610008EEA8093030484E180932E0485E0B1C2C6 +:100620000E948C0B84E080932E040E94A70B8823E9 +:1006300009F4A9C20E94A00B909338048093370458 +:1006400075C187E68093030488E280932E0487E0D7 +:1006500098C20E948C0B84E080932E040E94A70B0A +:10066000882309F490C20E94A00B90933A048093CF +:1006700039045CC18CE880930304209137043091E5 +:1006800038048091390490913A048217930718F442 +:1006900010923F0403C081E080933F0482E3809383 +:1006A0002E0489E06EC20E948C0B84E080932E049D +:1006B0000E94A70B882309F466C280E00E94D3073A +:1006C00082E493E00E943B080E94A00B90933604C2 +:1006D00080933504909334048093330427C1809130 +:1006E0003F04882329F486E88093040488E606C042 +:1006F000813049F488E68093040486E880930504F9 +:1007000087E080932E048BE03CC20E948C0B84E037 +:1007100080932E0487E780930404809305040E944D +:10072000A70B882309F42FC20E94A00B90933204D8 +:10073000809331042091350430913604281739070D +:1007400070F480E00E94D30783E593E00E943B08A9 +:1007500081E080932E0480912F048F5F03C08091ED +:100760002F04815080932F048091310490913204A2 +:10077000909336048093350406C20E948C0B84E06B +:1007800080932E040E94A70B882309F4FCC10E94C9 +:10079000A00B9C01909332048093310447E1813790 +:1007A000940728F042E060E08057974106C042E09D +:1007B00061E080E797E1821B930B0E947C018091AE +:1007C00031049091320426E1883A920758F48091DE +:1007D00004048337B0F081508093040480910504B1 +:1007E00081500DC08953984178F0809104048F376F +:1007F00040F48F5F80930404809105048F5F8093A1 +:10080000050410924204BFC117E71093040410932B +:100810000504809142048F5F80934204853009F083 +:10082000B2C180E00E94D30784E693E00E943B08B7 +:1008300010930404109305048091310490913204C4 +:10084000909334048093330482E380932E041092B7 +:10085000420486C18CE880930304209137043091D0 +:1008600038048091390490913A048217930798F4E0 +:1008700080E00E94D30785E793E00E943B0888E66A +:100880008093040486E88093050483E48093030442 +:1008900010923F0413C080E00E94D30784E893E0E5 +:1008A0000E943B0886E88093040488E68093050450 +:1008B00080ED8093030481E080933F0482E319C0BC +:1008C00087E780930404809305048AE080932E04D4 +:1008D00082E08093400418C080E00E94D30780E249 +:1008E00093E00E943B0886E880930404809305040B +:1008F00084E180932E0434C18FE7809304048093B5 +:1009000005048AE080932E0481E13BC10E948C0B98 +:1009100083E080932E040E94A70B882309F433C13F +:100920000E94A00B909332048093310481E0E1CFC8 +:10093000809141048F5F8093410490914004891716 +:1009400048F083E180932F0481E080932E0410927D +:10095000410419C180913F04882309F047C00E94D7 +:10096000D30783E993E00E943B0820913104309142 +:10097000320487E12137380730F042E063E0C901F3 +:100980008057974106C042E062E080E797E1821B12 +:10099000930B0E947C01609131047091320480912C +:1009A0003504909136046817790770F423E16838AC +:1009B000720728F488E68093040486E84AC06656E5 +:1009C000774108F07CC073C08617970708F077C09E +:1009D0008BE16935780728F086E88093040488E67F +:1009E0004EC06B57774108F46AC039C0813009F0B6 +:1009F0006EC080E00E94D30784EA93E00E943B0827 +:100A0000209131043091320447E12137340730F02E +:100A100042E062E0C9018057974106C042E063E0CE +:100A200080E797E1821B930B0E947C016091310467 +:100A300070913204809135049091360468177907DB +:100A400098F483E16838780738F486E880930404E2 +:100A500088E68093050426C06656774180F586E8CF +:100A60008093040488E627C08617970740F54BE17A +:100A700069357407C8F088E68093040486E880939B +:100A8000050480E090E0605777418040904028E284 +:100A900030E040E050E00E94E70B2F3018F4209344 +:100AA0002E0415C08FE011C06B57774140F088E6E7 +:100AB0008093040486E88093050485E006C08FE7F0 +:100AC000809304048093050484E080932E04809135 +:100AD00031049091320490933604809335048091D0 +:100AE0002F0482504EC08CE88093030487E78093E4 +:100AF00004048093050483E280932E0484E141C0C2 +:100B000083E080932E040E948C0B0E94A70B882305 +:100B1000D1F10E94A00B909332048093310427E11D +:100B20008037920740F441E060E080E090E00E946E +:100B30007C0182E026C09C0120573741805E9E42A6 +:100B400038F441E060E0C9010E947C0182E006C007 +:100B500041E060E0C9010E947C018AE0809340048A +:100B600080912F048F5F0DC080913F04882311F482 +:100B700083E401C080ED8093030485E080932E041C +:100B80008FE080932F0410922D0420913B0422309B +:100B900009F001C180912D048F5F80932D04909105 +:100BA0002E04891708F4F7C080912F04843009F4CB +:100BB00068C0853050F4813011F18130C8F0823046 +:100BC00059F1833009F0E5C04EC0873009F47CC08C +:100BD000883038F4853009F45DC0863009F0D9C01A +:100BE00061C0883009F478C0893009F0D2C0C6C02D +:100BF0000E94DF0781E00E94A80781E0B9C080E081 +:100C00000E94D30780E293E00E943B0886E880932D +:100C100004048093050456C08FE7809304048093F6 +:100C200005040E948C0B83E080932E040E94A70B86 +:100C3000882309F4AEC00E94A00B909332048093E5 +:100C4000310425E18C37920738F442E060E080E01F +:100C500090E00E947C018EC042E060E08C5795419C +:100C60000E947C0196C080E00E94D30781E393E05C +:100C70000E943B088CE6809304048093050482E381 +:100C800077C087E7809304048093050420932E04A3 +:100C900085E07DC08EEA8093030484E180932E0476 +:100CA00086E075C00E948C0B84E080932E040E9425 +:100CB000A70B882309F46DC00E94A00B9093380401 +:100CC0008093370484E154C087E68093030488E26C +:100CD00080932E0488E05BC00E948C0B84E080939C +:100CE0002E040E94A70B882309F453C00E94A00B76 +:100CF0009C0190933A04809339048CE88093030418 +:100D0000809137049091380445E18C37940798F42A +:100D100045E12C37340778F480E00E94D30785EB57 +:100D200093E00E943B0888E68093040486E8809361 +:100D3000050486E41DC02817390760F480E00E948E +:100D4000D30786EC93E00E943B0888E68093040476 +:100D500086E80BC080E00E94D30787ED93E00E94F5 +:100D60003B0886E88093040488E68093050488E2C3 +:100D700080932E0480912F048F5F09C087E78093B2 +:100D80000404809305048AE080932E0481E080931C +:100D90002F0410922D0480913B04833009F046C04B +:100DA00080912D048F5F80932D0490912E048917DC +:100DB000E8F180912F04882319F08130A9F51CC037 +:100DC0000E94DF0781E00E94A80780E00E94D3070D +:100DD00088EE93E00E943B0880E10E94D30788EFF1 +:100DE00093E00E943B0881E080932E0480912F04C1 +:100DF0008F5F80932F0418C00E948C0B8AE0809331 +:100E00002E040E94A70B882379F00E94A00B9093D8 +:100E10003204809331048AE10E94D3078091310427 +:100E2000909132040E94800810922D041F91089521 +:100E3000CF93DF93F8940E94E8000E9440090E943B +:100E4000B0090E94300A0E94AB0B82E30E9499070E +:100E500082E00E94A8078CE990E00E942D080E9481 +:100E6000BB090E94420A7894C0E6D1E08091300428 +:100E7000882321F0109230040E949B02CC9908C074 +:100E800080913D04882359F183E00E945B0125C0D5 +:100E9000CD9B10C0CC9B0EC080913D048823F9F4FB +:100EA0000E946F0110923C0481E080933D040E94F7 +:100EB000180715C0CD9913C080913D04882379F09F +:100EC00080E00E94A807CE010E942D0881E0809357 +:100ED0003C040E94BF090E94450A10923D04CE992D +:100EE00006C080913E04882309F281E01BC0CF9B9D +:100EF00011C0CE9B0FC080913E04882309F0B6CF6D +:100F00000E946F0110923C0481E080933E040E9495 +:100F10001807ACCFCF99AACF80913E04882309F45B +:100F2000A5CF82E00E945B0110923E049FCF9927DB +:100F3000089581BF08951F93182F0E94F90A80E039 +:100F40000E94FC0AC198812F0E94EF0A1F91089508 +:100F5000813051F0813018F08230F9F412C089E309 +:100F60000E949B078DE10AC089E30E949B078CE1E8 +:100F70000E949B078EE30E949B0780E10E949B07D3 +:100F8000089589E30E949B078CE10E949B078EE3F2 +:100F90000E949B0788E10E949B0708958F708067DD +:100FA0000E949B07089580680E949B07089582E035 +:100FB0000E949B0780E49FE10197F1F7089581E08B +:100FC0000E949B0780E49FE10197F1F70895882331 +:100FD00031F0813049F480914304816003C08091F5 +:100FE00043048E7F809343048091430488600E9471 +:100FF0009B070895882331F0813049F480914304A0 +:10100000826003C0809143048D7F8093430480916C +:10101000430488600E949B070895882331F0813043 +:1010200049F480914304846003C0809143048B7F22 +:10103000809343048091430488600E949B07089535 +:101040001F93182F0E94F90A80E00E94FC0AC19A9F +:10105000812F0E94EF0A1F910895CF93DF93EC0137 +:1010600002C00E942008FE01219684918823C9F7BE +:10107000DF91CF910895CF93DF93EC0102C00E94DE +:10108000200889918823D9F7DF91CF910895CF93D4 +:10109000DF93CDB7DEB727970FB6F894DEBF0FBE4C +:1010A000CDBFBC0180E3898388E78A83FE01339644 +:1010B0004CE050E033E0CB01042E02C096958795BA +:1010C0000A94E2F7282F2F708F7090700A9710F013 +:1010D000295C01C020632083445050403F5F31961B +:1010E000373049F71F82CE0101960E943B082796B0 +:1010F0000FB6F894DEBF0FBECDBFDF91CF9108953C +:101100008F929F92AF92BF92CF92DF92EF92FF9217 +:101110000F931F93CF93DF93CDB7DEB725970FB60D +:10112000F894DEBF0FBECDBF8C01DE011196E8E062 +:10113000F4E085E001900D928150E1F7C80160E193 +:1011400077E20E94D30BFB01E62E262F332780E1A6 +:1011500097E2289F6001299FD00C389FD00C112462 +:10116000C8018C199D0968EE73E00E94D30BF62E1E +:10117000262F332788EE93E0289F4001299F900C6B +:10118000389F900C112494012C0D3D1DC801821B29 +:10119000930B64E670E00E94D30B462F84E6689FB1 +:1011A000500111242A0D3B1DC801821B930B6AE0DC +:1011B00070E00E94D30BEE2311F430E004C08E2FB8 +:1011C0008063898331E0FF2011F4EE2039F0FE01C5 +:1011D000E30FF11D8F2D806381833F5F442321F452 +:1011E000FF2011F4EE2039F0FE01E30FF11D842FF2 +:1011F000806381833F5F662331F4442321F4FF2021 +:1012000011F4EE2039F0FE01E30FF11D862F80630B +:1012100081833F5FAE014F5F5F4FFA01E30FF11D26 +:10122000202F2C1928192A198AE0689FC00111243F +:10123000281B20632083232F04C0AE0FBF1F80E232 +:101240008C932F5FDA01E22FFF272530B0F3E40FF4 +:10125000F51F1082CA010E943B0825960FB6F8942C +:10126000DEBF0FBECDBFDF91CF911F910F91FF90D9 +:10127000EF90DF90CF90BF90AF909F908F900895A8 +:101280000E94060B87B3836087BB83B78A6683BFE0 +:1012900080E00E94A80780E50E949B078CE60E94E0 +:1012A0009B0786E00E949B0781E00E940D0880E07A +:1012B0000E94FA0780E00E94E70786E00E94CE07BE +:1012C0000E94DF0711BE08951092450486E494E061 +:1012D00008951092440495980895809145049927A3 +:1012E00008951F920F920FB60F9211242F933F93E0 +:1012F0004F935F936F937F938F939F93AF93BF931E +:10130000EF93FF930E94300B90914404992331F4A2 +:101310008A30A9F481E08093440411C09B3048F4E2 +:10132000E92FFF27EB5BFB4F80839F5F9093440483 +:1013300006C09B3021F4959A81E080934504FF918B +:10134000EF91BF91AF919F918F917F916F915F913D +:101350004F913F912F910F900FBE0F901F901895B6 +:101360000E943D0B80E699E00E94100B109244040D +:101370008D9A959808950E943B0B959A089595989B +:101380000E94390B089580910E0410920E04992743 +:101390000895BC0140E050E020E030E0FB01E20FA6 +:1013A000F31F8081480F511D2F5F3F4F2C303105B7 +:1013B000A9F7842F992708951F931091620486E559 +:1013C00094E00E94C909181751F580915704992794 +:1013D0008F709070892B19F5809158048234B1F088 +:1013E000833428F4803261F08134C9F40CC0843431 +:1013F00099F0843470F08A3F91F485E090E011C058 +:1014000081E090E00EC082E090E00BC083E090E0CD +:1014100008C084E090E005C086E090E002C080E073 +:1014200090E01F910895DC01E1E1F4E08D9181935A +:1014300084E0EB31F807D1F7CF010C970E94C9097E +:1014400080931B0481E08093540408958091530499 +:10145000992708951092520481E0809355040895CD +:101460000E947D0B80E895E20E944C0B8C9A1092B2 +:10147000520481E0809355041092540484E08093D8 +:101480000E0408950E94790B08950E94750B08952B +:10149000CF93DF93949A80E49CE9FC013197F1F7B4 +:1014A000FC013197F1F7FC013197F1F70197F1F762 +:1014B00080E00E94710B80E00E94710B80E00E942E +:1014C000710B80915404882351F0CFE0D4E08991CE +:1014D0000E94710B84E0CC31D80751F0F8CFCCE1F9 +:1014E000D4E089910E94710B84E0C932D807C9F712 +:1014F00080E00E94710B80E00E94710B80E00E94EE +:10150000710B949880E89EE30197F1F7DF91CF91FA +:1015100008951F920F920FB60F9211242F933F93AD +:101520004F935F936F937F938F939F93AF93BF93EB +:10153000EF93FF930E946C0B90915204992341F416 +:101540008A3081F48093560481E0809352040AC06B +:101550009D3040F4E92FFF27EA5AFB4F80839F5FBD +:1015600090935204809152048D3041F50E94420ABA +:1015700078940E94DC09809353048330A1F0843076 +:1015800028F4813051F08230A9F40DC0853071F01B +:10159000853040F0863071F406C080930E040E94BE +:1015A000480A08C084E080930E0404C080930E04AF +:1015B00010925404109252040E94450AFF91EF9138 +:1015C000BF91AF919F918F917F916F915F914F915B +:1015D0003F912F910F900FBE0F901F9018958FB9CC +:1015E000779BFECF08958FB19927089568986998E1 +:1015F00008956898699A089521E030E002C0220FAA +:10160000331F8A95E2F720952BBB089587B3806B33 +:1016100087BBC69AD09AD89A8DB181658DB9089545 +:101620009C0194E0220F331F9A95E1F74427552738 +:1016300060E074E284EF90E00E94090C2150304099 +:1016400040405040BB2757FDBA95A52F942F832FBC +:101650002F5F3F4F4F4F5F4F80BD215029B90895F5 +:101660005F9BFECF8CB1992708955D9BFECF8CB90F +:101670000895579A089557980895899A8AB1886964 +:101680008AB90895FC0104C05D9BFECF8CB93196E8 +:1016900080818823C9F708959C0194E0220F331FAD +:1016A0009A95E1F74427552760E074E284EF90E0D3 +:1016B0000E94090C2150304040405040BB2757FD4C +:1016C000BA95A52F942F832F2F5F3F4F4F4F5F4F1A +:1016D0008CBF215020B90895179BFECF83B1992765 +:1016E0000895159BFECF83B9089581B1806981B9B2 +:1016F000089581B18F7681B90895BB9A81B18869C7 +:1017000081B90895FC0104C0159BFECF83B93196C1 +:1017100080818823C9F70895F89480916404882310 +:1017200069F48A9A929A8AE08A95F1F792988A984F +:1017300085B7836085BF8BB780648BBF789408952D +:10174000109264048091880090918900089580919E +:1017500064049927089508951F920F920FB60F926F +:1017600011248F9305B600FE0DC0109289001092CF +:10177000880085B78E7F85BF80918A0082608093C4 +:101780008A000BC080918A008D7F80938A0081E05F +:10179000809364048BB78F7B8BBF8F910F900FBEAC +:1017A0000F901F901895AA1BBB1B51E107C0AA1FE1 +:1017B000BB1FA617B70710F0A61BB70B881F991FF2 +:1017C0005A95A9F780959095BC01CD010895A1E2A5 +:1017D0001A2EAA1BBB1BFD010DC0AA1FBB1FEE1FAB +:1017E000FF1FA217B307E407F50720F0A21BB30BF6 +:1017F000E40BF50B661F771F881F991F1A9469F772 +:1018000060957095809590959B01AC01BD01CF01CD +:10181000089597FB092E05260ED057FD04D0D7DF7B +:101820000AD0001C38F450954095309521953F4FD3 +:101830004F4F5F4F0895F6F790958095709561959D +:0A1840007F4F8F4F9F4F0895FFCF99 +:10184A00202020202020202020202020202020208E +:10185A00003E202020202020202020202020202080 +:10186A003C003E3E20202020202020202020202036 +:10187A003C3C003E3E3E20202020202020202020EC +:10188A003C3C3C003E3E3E3E2020202020202020A2 +:10189A003C3C3C3C003E3E3E3E3E20202020202058 +:1018AA003C3C3C3C3C003E3E3E3E3E3E202020200E +:1018BA003C3C3C3C3C3C003E3E3E3E3E3E3E2020C4 +:1018CA003C3C3C3C3C3C3C003E3E3E3E3E3E3E5B5D +:1018DA005D3C3C3C3C3C3C3C002020202020203C01 +:1018EA0020203E2020202020200020202020203CD4 +:1018FA003C20203E3E202020202000202020203C8A +:10190A003C3C20203E3E3E20202020002020203C3F +:10191A003C3C3C20203E3E3E3E2020200020203CF5 +:10192A003C3C3C3C20203E3E3E3E3E202000203CAB +:10193A003C3C3C3C3C20203E3E3E3E3E3E20003C61 +:10194A003C3C3C3C3C3C20203E3E3E3E3E3E3E0033 +:10195A003C3C3C3C3C3C3C5B5D3E3E3E3E3E3E3E6F +:10196A00003C3C3C3C3C3C3C2020202020202020C9 +:10197A002000203C3C3C3C3C3C20202020202020D5 +:10198A0020200020203C3C3C3C3C202020202020E1 +:10199A00202020002020203C3C3C3C2020202020ED +:1019AA002020202000202020203C3C3C20202020F9 +:1019BA0020202020200020202020203C3C20202005 +:1019CA00202020202020002020202020203C202011 +:1019DA002020202020202000202020202020205BE2 +:1019EA005D202020202020200020202020202020D0 +:1019FA0020203E3E3E3E3E3E3E002020202020202B +:101A0A002020203E3E3E3E3E3E2000202020202038 +:101A1A00202020203E3E3E3E3E2020002020202046 +:101A2A0020202020203E3E3E3E2020200020202054 +:101A3A002020202020203E3E3E2020202000202062 +:101A4A00202020202020203E3E2020202020002070 +:101A5A0020202020202020203E202020202020007E +:101A6A0044726976653A20464F52574152442020C3 +:101A7A000044726976653A2053544F502020202042 +:101A8A002000416C69676E20746F2077616C6C204E +:101A9A0020200020205E2D2D2028316D29202D2D7B +:101AAA005E202000506F73697374696F6E206C6FCB +:101ABA00636B65640044726976653A205475726E88 +:101ACA00203C200044726976653A205475726E2073 +:101ADA003E2000205D2D2D2D2028316D29202D2D11 +:101AEA002D3E7C007C3C2D2D2D2028316D29202D6A +:101AFA002D2D5B200044726976653A205475726E0A +:101B0A00203C3C3C200044726976653A2054757248 +:101B1A006E203C2020200044726976653A20547574 +:101B2A00726E203E20202000536572766F3A20663E +:101B3A006F7277617264200044697374616E6365C1 +:101B4A003A20008C77777777202020202000040A1B +:101B5A004030000000000000000000000A803055FC +:0A1B6A005555555555555555B70012 +:00000001FF diff --git a/RoboMI.lss b/RoboMI.lss new file mode 100644 index 0000000..4f4dc48 --- /dev/null +++ b/RoboMI.lss @@ -0,0 +1,4643 @@ + +RoboMI.elf: file format elf32-avr + +Sections: +Idx Name Size VMA LMA File off Algn + 0 .data 0000032a 00800100 0000184a 000018be 2**0 + CONTENTS, ALLOC, LOAD, DATA + 1 .text 0000184a 00000000 00000000 00000074 2**1 + CONTENTS, ALLOC, LOAD, READONLY, CODE + 2 .bss 0000003b 0080042a 00001b74 00001be8 2**0 + ALLOC + 3 .stab 00002f4c 00000000 00000000 00001be8 2**2 + CONTENTS, READONLY, DEBUGGING + 4 .stabstr 0000132e 00000000 00000000 00004b34 2**0 + CONTENTS, READONLY, DEBUGGING + 5 .debug_aranges 00000020 00000000 00000000 00005e62 2**0 + CONTENTS, READONLY, DEBUGGING + 6 .debug_pubnames 00000299 00000000 00000000 00005e82 2**0 + CONTENTS, READONLY, DEBUGGING + 7 .debug_info 000003ff 00000000 00000000 0000611b 2**0 + CONTENTS, READONLY, DEBUGGING + 8 .debug_abbrev 0000013e 00000000 00000000 0000651a 2**0 + CONTENTS, READONLY, DEBUGGING + 9 .debug_line 00000f52 00000000 00000000 00006658 2**0 + CONTENTS, READONLY, DEBUGGING + 10 .debug_frame 000000a0 00000000 00000000 000075ac 2**2 + CONTENTS, READONLY, DEBUGGING + 11 .debug_str 000002dc 00000000 00000000 0000764c 2**0 + CONTENTS, READONLY, DEBUGGING + 12 .debug_loc 000000ab 00000000 00000000 00007928 2**0 + CONTENTS, READONLY, DEBUGGING +Disassembly of section .text: + +00000000 <__vectors>: + 0: 0c 94 c9 00 jmp 0x192 ; 0x192 <__ctors_end> + 4: 0c 94 ac 0b jmp 0x1758 ; 0x1758 <__vector_1> + 8: 0c 94 e6 00 jmp 0x1cc ; 0x1cc <__bad_interrupt> + c: 0c 94 e6 00 jmp 0x1cc ; 0x1cc <__bad_interrupt> + 10: 0c 94 e6 00 jmp 0x1cc ; 0x1cc <__bad_interrupt> + 14: 0c 94 e6 00 jmp 0x1cc ; 0x1cc <__bad_interrupt> + 18: 0c 94 e6 00 jmp 0x1cc ; 0x1cc <__bad_interrupt> + 1c: 0c 94 e6 00 jmp 0x1cc ; 0x1cc <__bad_interrupt> + 20: 0c 94 e6 00 jmp 0x1cc ; 0x1cc <__bad_interrupt> + 24: 0c 94 e6 00 jmp 0x1cc ; 0x1cc <__bad_interrupt> + 28: 0c 94 e6 00 jmp 0x1cc ; 0x1cc <__bad_interrupt> + 2c: 0c 94 23 01 jmp 0x246 ; 0x246 <__vector_11> + 30: 0c 94 e6 00 jmp 0x1cc ; 0x1cc <__bad_interrupt> + 34: 0c 94 e6 00 jmp 0x1cc ; 0x1cc <__bad_interrupt> + 38: 0c 94 e6 00 jmp 0x1cc ; 0x1cc <__bad_interrupt> + 3c: 0c 94 ff 00 jmp 0x1fe ; 0x1fe <__vector_15> + 40: 0c 94 e6 00 jmp 0x1cc ; 0x1cc <__bad_interrupt> + 44: 0c 94 e6 00 jmp 0x1cc ; 0x1cc <__bad_interrupt> + 48: 0c 94 e6 00 jmp 0x1cc ; 0x1cc <__bad_interrupt> + 4c: 0c 94 71 09 jmp 0x12e2 ; 0x12e2 <__vector_19> + 50: 0c 94 89 0a jmp 0x1512 ; 0x1512 <__vector_20> + 54: 0c 94 e6 00 jmp 0x1cc ; 0x1cc <__bad_interrupt> + 58: 0c 94 e6 00 jmp 0x1cc ; 0x1cc <__bad_interrupt> + 5c: 0c 94 e6 00 jmp 0x1cc ; 0x1cc <__bad_interrupt> + 60: 0c 94 e6 00 jmp 0x1cc ; 0x1cc <__bad_interrupt> + 64: 0c 94 e6 00 jmp 0x1cc ; 0x1cc <__bad_interrupt> + 68: 0c 94 e6 00 jmp 0x1cc ; 0x1cc <__bad_interrupt> + 6c: 0c 94 e6 00 jmp 0x1cc ; 0x1cc <__bad_interrupt> + 70: c1 02 muls r28, r17 + 72: c7 02 muls r28, r23 + 74: ee 02 muls r30, r30 + 76: fc 02 muls r31, r28 + 78: 08 03 fmul r16, r16 + 7a: 10 03 mulsu r17, r16 + 7c: 21 03 mulsu r18, r17 + 7e: 29 03 fmul r18, r17 + 80: 3a 03 fmul r19, r18 + 82: 53 03 mulsu r21, r19 + 84: 6f 03 fmul r22, r23 + 86: 85 03 fmuls r16, r21 + 88: bd 03 fmulsu r19, r21 + 8a: 2a 04 cpc r2, r10 + 8c: 60 04 cpc r6, r0 + 8e: 6c 04 cpc r6, r12 + 90: 7c 04 cpc r7, r12 + 92: 86 04 cpc r8, r6 + 94: 98 04 cpc r9, r8 + 96: 73 05 cpc r23, r3 + 98: 80 05 cpc r24, r0 + 9a: b4 05 cpc r27, r4 + +0000009c : + 9c: 20 20 20 20 20 43 4d 74 65 63 20 20 20 20 20 20 CMtec + ac: 72 6f 62 6f 43 72 61 77 6c 65 72 20 76 31 2e 31 roboCrawler v1.1 + bc: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 + cc: 00 20 20 20 20 20 6d 6f 64 65 20 31 3a 20 20 20 . mode 1: + dc: 20 20 46 6f 6c 6c 6f 77 20 77 61 6c 6c 20 61 74 Follow wall at + ec: 20 20 61 20 64 69 73 74 61 6e 63 65 28 31 6d 29 a distance(1m) + fc: 20 00 20 20 20 20 20 6d 6f 64 65 20 32 3a 20 20 . mode 2: + 10c: 20 20 20 44 72 69 76 65 20 61 6e 64 20 76 6f 69 Drive and voi + 11c: 64 20 20 20 20 61 6e 79 20 77 61 6c 6c 73 20 20 d any walls + 12c: 20 20 00 20 20 20 20 20 6d 6f 64 65 20 33 3a 20 . mode 3: + 13c: 20 20 20 4d 65 61 73 75 72 65 20 64 69 73 74 61 Measure dista + 14c: 6e 63 65 20 20 20 20 66 6f 72 77 61 72 64 20 20 nce forward + 15c: 20 20 20 00 20 20 20 20 6d 6f 64 65 20 52 46 3a . mode RF: + 16c: 20 20 20 20 20 52 46 20 61 63 74 69 76 65 64 20 RF actived + 17c: 61 6e 64 20 77 61 69 74 69 6e 67 20 66 6f 72 20 and waiting for + 18c: 63 6f 6d 2e 00 00 com... + +00000192 <__ctors_end>: + 192: 11 24 eor r1, r1 + 194: 1f be out 0x3f, r1 ; 63 + 196: cf ef ldi r28, 0xFF ; 255 + 198: d4 e0 ldi r29, 0x04 ; 4 + 19a: de bf out 0x3e, r29 ; 62 + 19c: cd bf out 0x3d, r28 ; 61 + +0000019e <__do_copy_data>: + 19e: 14 e0 ldi r17, 0x04 ; 4 + 1a0: a0 e0 ldi r26, 0x00 ; 0 + 1a2: b1 e0 ldi r27, 0x01 ; 1 + 1a4: ea e4 ldi r30, 0x4A ; 74 + 1a6: f8 e1 ldi r31, 0x18 ; 24 + 1a8: 02 c0 rjmp .+4 ; 0x1ae <.do_copy_data_start> + +000001aa <.do_copy_data_loop>: + 1aa: 05 90 lpm r0, Z+ + 1ac: 0d 92 st X+, r0 + +000001ae <.do_copy_data_start>: + 1ae: aa 32 cpi r26, 0x2A ; 42 + 1b0: b1 07 cpc r27, r17 + 1b2: d9 f7 brne .-10 ; 0x1aa <.do_copy_data_loop> + +000001b4 <__do_clear_bss>: + 1b4: 14 e0 ldi r17, 0x04 ; 4 + 1b6: aa e2 ldi r26, 0x2A ; 42 + 1b8: b4 e0 ldi r27, 0x04 ; 4 + 1ba: 01 c0 rjmp .+2 ; 0x1be <.do_clear_bss_start> + +000001bc <.do_clear_bss_loop>: + 1bc: 1d 92 st X+, r1 + +000001be <.do_clear_bss_start>: + 1be: a5 36 cpi r26, 0x65 ; 101 + 1c0: b1 07 cpc r27, r17 + 1c2: e1 f7 brne .-8 ; 0x1bc <.do_clear_bss_loop> + 1c4: 0e 94 18 07 call 0xe30 ; 0xe30
+ 1c8: 0c 94 24 0c jmp 0x1848 ; 0x1848 <_exit> + +000001cc <__bad_interrupt>: + 1cc: 0c 94 00 00 jmp 0 ; 0x0 <__heap_end> + +000001d0 : + + Description: Initialise I/O + Input: - + Output: - +------------------------------------------------------------------------------------------------*/ +void initIO (void){ + 1d0: 82 e0 ldi r24, 0x02 ; 2 + 1d2: 8e bd out 0x2e, r24 ; 46 + + TCCR1B = (1<>8); + 1d4: 8f eb ldi r24, 0xBF ; 191 + 1d6: 8d bd out 0x2d, r24 ; 45 + TCNT1L = (uint8_t)(PROG_TIMER); + 1d8: 8f ef ldi r24, 0xFF ; 255 + 1da: 8c bd out 0x2c, r24 ; 44 + + TCNT2 = SERVO_TIMER; + 1dc: 8e ee ldi r24, 0xEE ; 238 + 1de: 83 bd out 0x23, r24 ; 35 + + TIMSK |= (1<: + Description: Timer1 overflow interrupt. Used as program timer + Input: - + Output: - +------------------------------------------------------------------------------------------------*/ +ISR (TIMER1_OVF_vect) +{ + 1fe: 1f 92 push r1 + 200: 0f 92 push r0 + 202: 0f b6 in r0, 0x3f ; 63 + 204: 0f 92 push r0 + 206: 11 24 eor r1, r1 + 208: 8f 93 push r24 + // Program for update PPM pulses to all servos + if (++progCounterPPM >= 2) + 20a: 80 91 2c 04 lds r24, 0x042C + 20e: 8f 5f subi r24, 0xFF ; 255 + 210: 80 93 2c 04 sts 0x042C, r24 + 214: 82 30 cpi r24, 0x02 ; 2 + 216: 50 f0 brcs .+20 ; 0x22c <__vector_15+0x2e> + { + // Start for servo PPM pulses + servoCounter = 0; + 218: 10 92 2a 04 sts 0x042A, r1 + SERVO_PORT |= (1<>8); + 232: 8f eb ldi r24, 0xBF ; 191 + 234: 8d bd out 0x2d, r24 ; 45 + TCNT1L = (uint8_t)(PROG_TIMER); + 236: 8f ef ldi r24, 0xFF ; 255 + 238: 8c bd out 0x2c, r24 ; 44 + 23a: 8f 91 pop r24 + 23c: 0f 90 pop r0 + 23e: 0f be out 0x3f, r0 ; 63 + 240: 0f 90 pop r0 + 242: 1f 90 pop r1 + 244: 18 95 reti + +00000246 <__vector_11>: + Description: Timer1 overflow interrupt. Used as servo (PPM) timer + Input: - + Output: - +------------------------------------------------------------------------------------------------*/ +ISR (TIMER2_OVF_vect) +{ + 246: 1f 92 push r1 + 248: 0f 92 push r0 + 24a: 0f b6 in r0, 0x3f ; 63 + 24c: 0f 92 push r0 + 24e: 11 24 eor r1, r1 + 250: 2f 93 push r18 + 252: 8f 93 push r24 + 254: 9f 93 push r25 + uint8_t done = 1; + + // Check each servo output if pulselength is reached + if(servoCounter >= servoPing) + 256: 90 91 2a 04 lds r25, 0x042A + 25a: 80 91 03 04 lds r24, 0x0403 + 25e: 98 17 cp r25, r24 + 260: 18 f0 brcs .+6 ; 0x268 <__vector_11+0x22> + SERVO_PORT &= ~(1< + else + { + done = 0; + asm volatile("NOP"); // Correction for constant interrupt length + 268: 00 00 nop + 26a: 20 e0 ldi r18, 0x00 ; 0 + } + + if(servoCounter >= servoMotorLeft) + 26c: 80 91 04 04 lds r24, 0x0404 + 270: 98 17 cp r25, r24 + 272: 10 f0 brcs .+4 ; 0x278 <__vector_11+0x32> + SERVO_PORT &= ~(1< + else + { + done = 0; + asm volatile("NOP"); // Correction for constant interrupt length + 278: 00 00 nop + 27a: 20 e0 ldi r18, 0x00 ; 0 + } + + if(servoCounter >= servoMotorRight) + 27c: 80 91 05 04 lds r24, 0x0405 + 280: 98 17 cp r25, r24 + 282: 20 f0 brcs .+8 ; 0x28c <__vector_11+0x46> + SERVO_PORT &= ~(1< + 28a: 06 c0 rjmp .+12 ; 0x298 <__vector_11+0x52> + if(servoCounter >= servoMotorRight) + SERVO_PORT &= ~(1< + } + + if(done) + TCCR2 &= ~(1< + else + { + servoCounter++; + 298: 9f 5f subi r25, 0xFF ; 255 + 29a: 90 93 2a 04 sts 0x042A, r25 + asm volatile("NOP"); // Correction for constant interrupt length + 29e: 00 00 nop + asm volatile("NOP"); + 2a0: 00 00 nop + } + TCNT2 = SERVO_TIMER; + 2a2: 8e ee ldi r24, 0xEE ; 238 + 2a4: 83 bd out 0x23, r24 ; 35 + 2a6: 9f 91 pop r25 + 2a8: 8f 91 pop r24 + 2aa: 2f 91 pop r18 + 2ac: 0f 90 pop r0 + 2ae: 0f be out 0x3f, r0 ; 63 + 2b0: 0f 90 pop r0 + 2b2: 1f 90 pop r1 + 2b4: 18 95 reti + +000002b6 : + Description: + Input: - + Output: - +------------------------------------------------------------------------------------------------*/ +void activateRobot(uint8_t mode) +{ + 2b6: 1f 93 push r17 + 2b8: 18 2f mov r17, r24 + lcdSetLayout(0); + 2ba: 80 e0 ldi r24, 0x00 ; 0 + 2bc: 0e 94 a8 07 call 0xf50 ; 0xf50 + lcdWriteStringP(menuTable[mode]); + 2c0: 81 e3 ldi r24, 0x31 ; 49 + 2c2: 18 9f mul r17, r24 + 2c4: c0 01 movw r24, r0 + 2c6: 11 24 eor r1, r1 + 2c8: 84 56 subi r24, 0x64 ; 100 + 2ca: 9f 4f sbci r25, 0xFF ; 255 + 2cc: 0e 94 2d 08 call 0x105a ; 0x105a + + progTimer = 200; + 2d0: 88 ec ldi r24, 0xC8 ; 200 + 2d2: 80 93 2e 04 sts 0x042E, r24 + + roboActive = mode; + 2d6: 10 93 3b 04 sts 0x043B, r17 + 2da: 1f 91 pop r17 + 2dc: 08 95 ret + +000002de : + Description: + Input: - + Output: - +------------------------------------------------------------------------------------------------*/ +void deactivateRobot(void) +{ + 2de: 10 92 3b 04 sts 0x043B, r1 + roboActive = 0; + + servoMotorLeft = SERVO_POS_MOTOR_STOP; + 2e2: 87 e7 ldi r24, 0x77 ; 119 + 2e4: 80 93 04 04 sts 0x0404, r24 + servoMotorRight = SERVO_POS_MOTOR_STOP; + 2e8: 80 93 05 04 sts 0x0405, r24 + servoPing = SERVO_POS_CENTER; + 2ec: 8c e8 ldi r24, 0x8C ; 140 + 2ee: 80 93 03 04 sts 0x0403, r24 + + rfIdDisable(); + 2f2: 0e 94 bb 09 call 0x1376 ; 0x1376 + 2f6: 08 95 ret + +000002f8 : + Description: + Input: - + Output: - +------------------------------------------------------------------------------------------------*/ +void showDistanceOnLCD(uint16_t distance, uint8_t mode, uint8_t position) +{ + 2f8: 1f 93 push r17 + 2fa: cf 93 push r28 + 2fc: df 93 push r29 + 2fe: ec 01 movw r28, r24 + 300: 16 2f mov r17, r22 + if(position == 1) + 302: 41 30 cpi r20, 0x01 ; 1 + 304: 11 f4 brne .+4 ; 0x30a + lcdSetPos(0x00); + 306: 80 e0 ldi r24, 0x00 ; 0 + 308: 07 c0 rjmp .+14 ; 0x318 + else if(position == 2) + 30a: 42 30 cpi r20, 0x02 ; 2 + 30c: 11 f4 brne .+4 ; 0x312 + lcdSetPos(0x10); + 30e: 80 e1 ldi r24, 0x10 ; 16 + 310: 03 c0 rjmp .+6 ; 0x318 + else if(position == 3) + 312: 43 30 cpi r20, 0x03 ; 3 + 314: 19 f4 brne .+6 ; 0x31c + lcdSetPos(0x20); + 316: 80 e2 ldi r24, 0x20 ; 32 + 318: 0e 94 d3 07 call 0xfa6 ; 0xfa6 + + if(mode == 0) // Both arrow pointing in + 31c: 11 23 and r17, r17 + 31e: b9 f5 brne .+110 ; 0x38e + { + if(distance > 32000) + 320: 8d e7 ldi r24, 0x7D ; 125 + 322: c1 30 cpi r28, 0x01 ; 1 + 324: d8 07 cpc r29, r24 + 326: c8 f5 brcc .+114 ; 0x39a + { + lcdWriteString(" "); + } + else if(distance > 16000) + 328: 8e e3 ldi r24, 0x3E ; 62 + 32a: c1 38 cpi r28, 0x81 ; 129 + 32c: d8 07 cpc r29, r24 + 32e: 18 f0 brcs .+6 ; 0x336 + { + lcdWriteString("> <"); + 330: 81 e1 ldi r24, 0x11 ; 17 + 332: 91 e0 ldi r25, 0x01 ; 1 + 334: ca c0 rjmp .+404 ; 0x4ca + } + else if(distance > 8000) + 336: 8f e1 ldi r24, 0x1F ; 31 + 338: c1 34 cpi r28, 0x41 ; 65 + 33a: d8 07 cpc r29, r24 + 33c: 18 f0 brcs .+6 ; 0x344 + { + lcdWriteString(">> <<"); + 33e: 82 e2 ldi r24, 0x22 ; 34 + 340: 91 e0 ldi r25, 0x01 ; 1 + 342: c3 c0 rjmp .+390 ; 0x4ca + } + else if(distance > 4000) + 344: 8f e0 ldi r24, 0x0F ; 15 + 346: c1 3a cpi r28, 0xA1 ; 161 + 348: d8 07 cpc r29, r24 + 34a: 18 f0 brcs .+6 ; 0x352 + { + lcdWriteString(">>> <<<"); + 34c: 83 e3 ldi r24, 0x33 ; 51 + 34e: 91 e0 ldi r25, 0x01 ; 1 + 350: bc c0 rjmp .+376 ; 0x4ca + } + else if(distance > 2000) + 352: 87 e0 ldi r24, 0x07 ; 7 + 354: c1 3d cpi r28, 0xD1 ; 209 + 356: d8 07 cpc r29, r24 + 358: 18 f0 brcs .+6 ; 0x360 + { + lcdWriteString(">>>> <<<<"); + 35a: 84 e4 ldi r24, 0x44 ; 68 + 35c: 91 e0 ldi r25, 0x01 ; 1 + 35e: b5 c0 rjmp .+362 ; 0x4ca + } + else if(distance > 1000) + 360: 83 e0 ldi r24, 0x03 ; 3 + 362: c9 3e cpi r28, 0xE9 ; 233 + 364: d8 07 cpc r29, r24 + 366: 18 f0 brcs .+6 ; 0x36e + { + lcdWriteString(">>>>> <<<<<"); + 368: 85 e5 ldi r24, 0x55 ; 85 + 36a: 91 e0 ldi r25, 0x01 ; 1 + 36c: ae c0 rjmp .+348 ; 0x4ca + } + else if(distance > 500) + 36e: 81 e0 ldi r24, 0x01 ; 1 + 370: c5 3f cpi r28, 0xF5 ; 245 + 372: d8 07 cpc r29, r24 + 374: 18 f0 brcs .+6 ; 0x37c + { + lcdWriteString(">>>>>> <<<<<<"); + 376: 86 e6 ldi r24, 0x66 ; 102 + 378: 91 e0 ldi r25, 0x01 ; 1 + 37a: a7 c0 rjmp .+334 ; 0x4ca + } + else if(distance > 100) + 37c: c5 36 cpi r28, 0x65 ; 101 + 37e: d1 05 cpc r29, r1 + 380: 18 f0 brcs .+6 ; 0x388 + { + lcdWriteString(">>>>>>> <<<<<<<"); + 382: 87 e7 ldi r24, 0x77 ; 119 + 384: 91 e0 ldi r25, 0x01 ; 1 + 386: a1 c0 rjmp .+322 ; 0x4ca + } + else + { + lcdWriteString(">>>>>>>[]<<<<<<<"); + 388: 88 e8 ldi r24, 0x88 ; 136 + 38a: 91 e0 ldi r25, 0x01 ; 1 + 38c: 9e c0 rjmp .+316 ; 0x4ca + } + } + else if(mode == 1) // Both arrow pointing Out + 38e: 11 30 cpi r17, 0x01 ; 1 + 390: d1 f5 brne .+116 ; 0x406 + { + if(distance > 32000) + 392: 8d e7 ldi r24, 0x7D ; 125 + 394: c1 30 cpi r28, 0x01 ; 1 + 396: d8 07 cpc r29, r24 + 398: 18 f0 brcs .+6 ; 0x3a0 + { + lcdWriteString(" "); + 39a: 80 e0 ldi r24, 0x00 ; 0 + 39c: 91 e0 ldi r25, 0x01 ; 1 + 39e: 95 c0 rjmp .+298 ; 0x4ca + } + else if(distance > 16000) + 3a0: 8e e3 ldi r24, 0x3E ; 62 + 3a2: c1 38 cpi r28, 0x81 ; 129 + 3a4: d8 07 cpc r29, r24 + 3a6: 18 f0 brcs .+6 ; 0x3ae + { + lcdWriteString(" < > "); + 3a8: 89 e9 ldi r24, 0x99 ; 153 + 3aa: 91 e0 ldi r25, 0x01 ; 1 + 3ac: 8e c0 rjmp .+284 ; 0x4ca + } + else if(distance > 8000) + 3ae: 8f e1 ldi r24, 0x1F ; 31 + 3b0: c1 34 cpi r28, 0x41 ; 65 + 3b2: d8 07 cpc r29, r24 + 3b4: 18 f0 brcs .+6 ; 0x3bc + { + lcdWriteString(" << >> "); + 3b6: 8a ea ldi r24, 0xAA ; 170 + 3b8: 91 e0 ldi r25, 0x01 ; 1 + 3ba: 87 c0 rjmp .+270 ; 0x4ca + } + else if(distance > 4000) + 3bc: 8f e0 ldi r24, 0x0F ; 15 + 3be: c1 3a cpi r28, 0xA1 ; 161 + 3c0: d8 07 cpc r29, r24 + 3c2: 18 f0 brcs .+6 ; 0x3ca + { + lcdWriteString(" <<< >>> "); + 3c4: 8b eb ldi r24, 0xBB ; 187 + 3c6: 91 e0 ldi r25, 0x01 ; 1 + 3c8: 80 c0 rjmp .+256 ; 0x4ca + } + else if(distance > 2000) + 3ca: 87 e0 ldi r24, 0x07 ; 7 + 3cc: c1 3d cpi r28, 0xD1 ; 209 + 3ce: d8 07 cpc r29, r24 + 3d0: 18 f0 brcs .+6 ; 0x3d8 + { + lcdWriteString(" <<<< >>>> "); + 3d2: 8c ec ldi r24, 0xCC ; 204 + 3d4: 91 e0 ldi r25, 0x01 ; 1 + 3d6: 79 c0 rjmp .+242 ; 0x4ca + } + else if(distance > 1000) + 3d8: 83 e0 ldi r24, 0x03 ; 3 + 3da: c9 3e cpi r28, 0xE9 ; 233 + 3dc: d8 07 cpc r29, r24 + 3de: 18 f0 brcs .+6 ; 0x3e6 + { + lcdWriteString(" <<<<< >>>>> "); + 3e0: 8d ed ldi r24, 0xDD ; 221 + 3e2: 91 e0 ldi r25, 0x01 ; 1 + 3e4: 72 c0 rjmp .+228 ; 0x4ca + } + else if(distance > 500) + 3e6: 81 e0 ldi r24, 0x01 ; 1 + 3e8: c5 3f cpi r28, 0xF5 ; 245 + 3ea: d8 07 cpc r29, r24 + 3ec: 18 f0 brcs .+6 ; 0x3f4 + { + lcdWriteString(" <<<<<< >>>>>> "); + 3ee: 8e ee ldi r24, 0xEE ; 238 + 3f0: 91 e0 ldi r25, 0x01 ; 1 + 3f2: 6b c0 rjmp .+214 ; 0x4ca + } + else if(distance > 100) + 3f4: c5 36 cpi r28, 0x65 ; 101 + 3f6: d1 05 cpc r29, r1 + 3f8: 18 f0 brcs .+6 ; 0x400 + { + lcdWriteString("<<<<<<< >>>>>>>"); + 3fa: 8f ef ldi r24, 0xFF ; 255 + 3fc: 91 e0 ldi r25, 0x01 ; 1 + 3fe: 65 c0 rjmp .+202 ; 0x4ca + } + else + { + lcdWriteString("<<<<<<<[]>>>>>>>"); + 400: 80 e1 ldi r24, 0x10 ; 16 + 402: 92 e0 ldi r25, 0x02 ; 2 + 404: 62 c0 rjmp .+196 ; 0x4ca + } + } + else if(mode == 2) // Left arrow pointing out. + 406: 12 30 cpi r17, 0x02 ; 2 + 408: 71 f5 brne .+92 ; 0x466 + { + if(distance > 6400) + 40a: 89 e1 ldi r24, 0x19 ; 25 + 40c: c1 30 cpi r28, 0x01 ; 1 + 40e: d8 07 cpc r29, r24 + 410: 18 f0 brcs .+6 ; 0x418 + { + lcdWriteString("<<<<<<< "); + 412: 81 e2 ldi r24, 0x21 ; 33 + 414: 92 e0 ldi r25, 0x02 ; 2 + 416: 59 c0 rjmp .+178 ; 0x4ca + } + else if(distance > 3200) + 418: 8c e0 ldi r24, 0x0C ; 12 + 41a: c1 38 cpi r28, 0x81 ; 129 + 41c: d8 07 cpc r29, r24 + 41e: 18 f0 brcs .+6 ; 0x426 + { + lcdWriteString(" <<<<<< "); + 420: 82 e3 ldi r24, 0x32 ; 50 + 422: 92 e0 ldi r25, 0x02 ; 2 + 424: 52 c0 rjmp .+164 ; 0x4ca + } + else if(distance > 1600) + 426: 86 e0 ldi r24, 0x06 ; 6 + 428: c1 34 cpi r28, 0x41 ; 65 + 42a: d8 07 cpc r29, r24 + 42c: 18 f0 brcs .+6 ; 0x434 + { + lcdWriteString(" <<<<< "); + 42e: 83 e4 ldi r24, 0x43 ; 67 + 430: 92 e0 ldi r25, 0x02 ; 2 + 432: 4b c0 rjmp .+150 ; 0x4ca + } + else if(distance > 800) + 434: 83 e0 ldi r24, 0x03 ; 3 + 436: c1 32 cpi r28, 0x21 ; 33 + 438: d8 07 cpc r29, r24 + 43a: 18 f0 brcs .+6 ; 0x442 + { + lcdWriteString(" <<<< "); + 43c: 84 e5 ldi r24, 0x54 ; 84 + 43e: 92 e0 ldi r25, 0x02 ; 2 + 440: 44 c0 rjmp .+136 ; 0x4ca + } + else if(distance > 400) + 442: 81 e0 ldi r24, 0x01 ; 1 + 444: c1 39 cpi r28, 0x91 ; 145 + 446: d8 07 cpc r29, r24 + 448: 18 f0 brcs .+6 ; 0x450 + { + lcdWriteString(" <<< "); + 44a: 85 e6 ldi r24, 0x65 ; 101 + 44c: 92 e0 ldi r25, 0x02 ; 2 + 44e: 3d c0 rjmp .+122 ; 0x4ca + } + else if(distance > 200) + 450: c9 3c cpi r28, 0xC9 ; 201 + 452: d1 05 cpc r29, r1 + 454: 18 f0 brcs .+6 ; 0x45c + { + lcdWriteString(" << "); + 456: 86 e7 ldi r24, 0x76 ; 118 + 458: 92 e0 ldi r25, 0x02 ; 2 + 45a: 37 c0 rjmp .+110 ; 0x4ca + } + else if(distance > 30) + 45c: 6f 97 sbiw r28, 0x1f ; 31 + 45e: 98 f1 brcs .+102 ; 0x4c6 + { + lcdWriteString(" < "); + 460: 87 e8 ldi r24, 0x87 ; 135 + 462: 92 e0 ldi r25, 0x02 ; 2 + 464: 32 c0 rjmp .+100 ; 0x4ca + else + { + lcdWriteString(" [] "); + } + } + else if(mode == 3) // Right arrow pointing out. + 466: 13 30 cpi r17, 0x03 ; 3 + 468: 91 f5 brne .+100 ; 0x4ce + { + if(distance > 6400) + 46a: 89 e1 ldi r24, 0x19 ; 25 + 46c: c1 30 cpi r28, 0x01 ; 1 + 46e: d8 07 cpc r29, r24 + 470: 18 f0 brcs .+6 ; 0x478 + { + lcdWriteString(" >>>>>>>"); + 472: 89 ea ldi r24, 0xA9 ; 169 + 474: 92 e0 ldi r25, 0x02 ; 2 + 476: 29 c0 rjmp .+82 ; 0x4ca + } + else if(distance > 3200) + 478: 8c e0 ldi r24, 0x0C ; 12 + 47a: c1 38 cpi r28, 0x81 ; 129 + 47c: d8 07 cpc r29, r24 + 47e: 18 f0 brcs .+6 ; 0x486 + { + lcdWriteString(" >>>>>> "); + 480: 8a eb ldi r24, 0xBA ; 186 + 482: 92 e0 ldi r25, 0x02 ; 2 + 484: 22 c0 rjmp .+68 ; 0x4ca + } + else if(distance > 1600) + 486: 86 e0 ldi r24, 0x06 ; 6 + 488: c1 34 cpi r28, 0x41 ; 65 + 48a: d8 07 cpc r29, r24 + 48c: 18 f0 brcs .+6 ; 0x494 + { + lcdWriteString(" >>>>> "); + 48e: 8b ec ldi r24, 0xCB ; 203 + 490: 92 e0 ldi r25, 0x02 ; 2 + 492: 1b c0 rjmp .+54 ; 0x4ca + } + else if(distance > 800) + 494: 83 e0 ldi r24, 0x03 ; 3 + 496: c1 32 cpi r28, 0x21 ; 33 + 498: d8 07 cpc r29, r24 + 49a: 18 f0 brcs .+6 ; 0x4a2 + { + lcdWriteString(" >>>> "); + 49c: 8c ed ldi r24, 0xDC ; 220 + 49e: 92 e0 ldi r25, 0x02 ; 2 + 4a0: 14 c0 rjmp .+40 ; 0x4ca + } + else if(distance > 400) + 4a2: 81 e0 ldi r24, 0x01 ; 1 + 4a4: c1 39 cpi r28, 0x91 ; 145 + 4a6: d8 07 cpc r29, r24 + 4a8: 18 f0 brcs .+6 ; 0x4b0 + { + lcdWriteString(" >>> "); + 4aa: 8d ee ldi r24, 0xED ; 237 + 4ac: 92 e0 ldi r25, 0x02 ; 2 + 4ae: 0d c0 rjmp .+26 ; 0x4ca + } + else if(distance > 200) + 4b0: c9 3c cpi r28, 0xC9 ; 201 + 4b2: d1 05 cpc r29, r1 + 4b4: 18 f0 brcs .+6 ; 0x4bc + { + lcdWriteString(" >> "); + 4b6: 8e ef ldi r24, 0xFE ; 254 + 4b8: 92 e0 ldi r25, 0x02 ; 2 + 4ba: 07 c0 rjmp .+14 ; 0x4ca + } + else if(distance > 30) + 4bc: 6f 97 sbiw r28, 0x1f ; 31 + 4be: 18 f0 brcs .+6 ; 0x4c6 + { + lcdWriteString(" > "); + 4c0: 8f e0 ldi r24, 0x0F ; 15 + 4c2: 93 e0 ldi r25, 0x03 ; 3 + 4c4: 02 c0 rjmp .+4 ; 0x4ca + } + else + { + lcdWriteString(" [] "); + 4c6: 88 e9 ldi r24, 0x98 ; 152 + 4c8: 92 e0 ldi r25, 0x02 ; 2 + 4ca: 0e 94 3b 08 call 0x1076 ; 0x1076 + 4ce: df 91 pop r29 + 4d0: cf 91 pop r28 + 4d2: 1f 91 pop r17 + 4d4: 08 95 ret + +000004d6 : + + Description: Check for incoming data packets. + Input: - + Output: - +------------------------------------------------------------------------------------------------*/ +void checkCommunication(void){ + 4d6: 0f 93 push r16 + 4d8: 1f 93 push r17 + + + if (rfIdGetTagPresent()) + 4da: 0e 94 6d 09 call 0x12da ; 0x12da + 4de: 88 23 and r24, r24 + 4e0: 61 f0 breq .+24 ; 0x4fa + { + uint8_t *tempPointer = rfIdGetTag(); + 4e2: 0e 94 64 09 call 0x12c8 ; 0x12c8 + 4e6: 8c 01 movw r16, r24 + + lcdSetPos(0x13); + 4e8: 83 e1 ldi r24, 0x13 ; 19 + 4ea: 0e 94 d3 07 call 0xfa6 ; 0xfa6 + lcdWriteString(tempPointer); + 4ee: c8 01 movw r24, r16 + 4f0: 0e 94 3b 08 call 0x1076 ; 0x1076 + roboMSPSetData(tempPointer); + 4f4: c8 01 movw r24, r16 + 4f6: 0e 94 13 0a call 0x1426 ; 0x1426 + + } + + switch (roboMSPGetActiveStatus()) + 4fa: 0e 94 c3 09 call 0x1386 ; 0x1386 + 4fe: 83 30 cpi r24, 0x03 ; 3 + 500: 61 f0 breq .+24 ; 0x51a <__stack+0x1b> + 502: 84 30 cpi r24, 0x04 ; 4 + 504: 18 f4 brcc .+6 ; 0x50c <__stack+0xd> + 506: 82 30 cpi r24, 0x02 ; 2 + 508: 99 f4 brne .+38 ; 0x530 <__stack+0x31> + 50a: 05 c0 rjmp .+10 ; 0x516 <__stack+0x17> + 50c: 84 30 cpi r24, 0x04 ; 4 + 50e: 59 f0 breq .+22 ; 0x526 <__stack+0x27> + 510: 85 30 cpi r24, 0x05 ; 5 + 512: 71 f4 brne .+28 ; 0x530 <__stack+0x31> + 514: 0b c0 rjmp .+22 ; 0x52c <__stack+0x2d> + { + case ACTIVATE_P1: + activateRobot(1); + 516: 81 e0 ldi r24, 0x01 ; 1 + 518: 01 c0 rjmp .+2 ; 0x51c <__stack+0x1d> + rfIdEnable(); + break; + + case ACTIVATE_P2: + activateRobot(2); + 51a: 82 e0 ldi r24, 0x02 ; 2 + 51c: 0e 94 5b 01 call 0x2b6 ; 0x2b6 + rfIdEnable(); + 520: 0e 94 bf 09 call 0x137e ; 0x137e + 524: 05 c0 rjmp .+10 ; 0x530 <__stack+0x31> + break; + + case DEACTIVATE: + deactivateRobot(); + 526: 0e 94 6f 01 call 0x2de ; 0x2de + 52a: 02 c0 rjmp .+4 ; 0x530 <__stack+0x31> + break; + + case ACK: + rfIdClearBuffer(); + 52c: 0e 94 69 09 call 0x12d2 ; 0x12d2 + 530: 1f 91 pop r17 + 532: 0f 91 pop r16 + 534: 08 95 ret + +00000536 : + Description: + Input: - + Output: - +------------------------------------------------------------------------------------------------*/ +void updateProgram(void) +{ + 536: 1f 93 push r17 + // Check radio communication + if(rfEnable) + 538: 80 91 3c 04 lds r24, 0x043C + 53c: 88 23 and r24, r24 + 53e: 11 f0 breq .+4 ; 0x544 + checkCommunication(); + 540: 0e 94 6b 02 call 0x4d6 ; 0x4d6 + + // Program for robot AI + if (roboActive == 1) + 544: 80 91 3b 04 lds r24, 0x043B + 548: 81 30 cpi r24, 0x01 ; 1 + 54a: 09 f0 breq .+2 ; 0x54e + 54c: 1e c3 rjmp .+1596 ; 0xb8a + { + // Program(2) for random RFID serach + if (++progCounter >= progTimer) + 54e: 80 91 2d 04 lds r24, 0x042D + 552: 8f 5f subi r24, 0xFF ; 255 + 554: 80 93 2d 04 sts 0x042D, r24 + 558: 90 91 2e 04 lds r25, 0x042E + 55c: 89 17 cp r24, r25 + 55e: 08 f4 brcc .+2 ; 0x562 + 560: 14 c3 rjmp .+1576 ; 0xb8a + { + switch (progPosition) + 562: 80 91 2f 04 lds r24, 0x042F + 566: e8 2f mov r30, r24 + 568: f0 e0 ldi r31, 0x00 ; 0 + 56a: e6 31 cpi r30, 0x16 ; 22 + 56c: f1 05 cpc r31, r1 + 56e: 08 f0 brcs .+2 ; 0x572 + 570: 0a c3 rjmp .+1556 ; 0xb86 + 572: e8 5c subi r30, 0xC8 ; 200 + 574: ff 4f sbci r31, 0xFF ; 255 + 576: ee 0f add r30, r30 + 578: ff 1f adc r31, r31 + 57a: 05 90 lpm r0, Z+ + 57c: f4 91 lpm r31, Z + 57e: e0 2d mov r30, r0 + 580: 09 94 ijmp + { + case 0: + // Kör frammåt + lcdClearDisplay(); + 582: 0e 94 df 07 call 0xfbe ; 0xfbe + lcdSetLayout(1); + 586: 81 e0 ldi r24, 0x01 ; 1 + 588: 0e 94 a8 07 call 0xf50 ; 0xf50 + 58c: a5 c1 rjmp .+842 ; 0x8d8 + + break; + + case 1: + // Kör frammåt till dess att avståndet mot väggen är 1meter + servoMotorLeft = SERVO_POS_MOTOR_FW_SOFT; + 58e: 8f e7 ldi r24, 0x7F ; 127 + 590: 80 93 04 04 sts 0x0404, r24 + servoMotorRight = SERVO_POS_MOTOR_FW_SOFT; + 594: 80 93 05 04 sts 0x0405, r24 + + pingSendPing(); + 598: 0e 94 8c 0b call 0x1718 ; 0x1718 + progTimer = 4; + 59c: 84 e0 ldi r24, 0x04 ; 4 + 59e: 80 93 2e 04 sts 0x042E, r24 + + if(pingGetReady()) + 5a2: 0e 94 a7 0b call 0x174e ; 0x174e + 5a6: 88 23 and r24, r24 + 5a8: 09 f4 brne .+2 ; 0x5ac + 5aa: ed c2 rjmp .+1498 ; 0xb86 + { + + tempDistance = pingGetDistance(); + 5ac: 0e 94 a0 0b call 0x1740 ; 0x1740 + 5b0: 90 93 32 04 sts 0x0432, r25 + 5b4: 80 93 31 04 sts 0x0431, r24 + + if(tempDistance < DISTANCE_ONE_METER) + 5b8: 27 e1 ldi r18, 0x17 ; 23 + 5ba: 80 37 cpi r24, 0x70 ; 112 + 5bc: 92 07 cpc r25, r18 + 5be: 38 f4 brcc .+14 ; 0x5ce + { + showDistanceOnLCD(0,0,2); + 5c0: 42 e0 ldi r20, 0x02 ; 2 + 5c2: 60 e0 ldi r22, 0x00 ; 0 + 5c4: 80 e0 ldi r24, 0x00 ; 0 + 5c6: 90 e0 ldi r25, 0x00 ; 0 + 5c8: 0e 94 7c 01 call 0x2f8 ; 0x2f8 + 5cc: af c1 rjmp .+862 ; 0x92c + progTimer = 1; + progPosition++; + } + else + { + showDistanceOnLCD(tempDistance-DISTANCE_ONE_METER,0,2); + 5ce: 42 e0 ldi r20, 0x02 ; 2 + 5d0: 60 e0 ldi r22, 0x00 ; 0 + 5d2: 80 57 subi r24, 0x70 ; 112 + 5d4: 97 41 sbci r25, 0x17 ; 23 + 5d6: 0e 94 7c 01 call 0x2f8 ; 0x2f8 + 5da: d5 c2 rjmp .+1450 ; 0xb86 + + break; + + case 2: + // Bromsa (backa något) + lcdSetPos(0x00); + 5dc: 80 e0 ldi r24, 0x00 ; 0 + 5de: 0e 94 d3 07 call 0xfa6 ; 0xfa6 + lcdWriteString("Drive: STOP "); + 5e2: 81 e3 ldi r24, 0x31 ; 49 + 5e4: 93 e0 ldi r25, 0x03 ; 3 + 5e6: 0e 94 3b 08 call 0x1076 ; 0x1076 + // Stop and breake + servoMotorLeft = SERVO_POS_MOTOR_STOP; + servoMotorRight = SERVO_POS_MOTOR_STOP; + servoMotorLeft = SERVO_POS_MOTOR_RE; + 5ea: 8c e6 ldi r24, 0x6C ; 108 + 5ec: 80 93 04 04 sts 0x0404, r24 + servoMotorRight = SERVO_POS_MOTOR_RE; + 5f0: 80 93 05 04 sts 0x0405, r24 + + progTimer = 40; + 5f4: 88 e2 ldi r24, 0x28 ; 40 + 5f6: 7d c1 rjmp .+762 ; 0x8f2 + break; + + case 3: + // Stanna + + servoMotorLeft = SERVO_POS_MOTOR_STOP; + 5f8: 87 e7 ldi r24, 0x77 ; 119 + 5fa: 80 93 04 04 sts 0x0404, r24 + servoMotorRight = SERVO_POS_MOTOR_STOP; + 5fe: 80 93 05 04 sts 0x0405, r24 + + progTimer = 1; + 602: 81 e0 ldi r24, 0x01 ; 1 + 604: 80 93 2e 04 sts 0x042E, r24 + regulatorMeasureCounter = 0; + 608: 10 92 42 04 sts 0x0442, r1 + progPosition++; + 60c: 84 e0 ldi r24, 0x04 ; 4 + 60e: b9 c2 rjmp .+1394 ; 0xb82 + + break; + + case 4: + // Vrid servo 45grader vänster (från centrum) + servoPing = SERVO_POS_LEFT_45; + 610: 8e ea ldi r24, 0xAE ; 174 + 612: 80 93 03 04 sts 0x0403, r24 + progTimer = 20; + 616: 84 e1 ldi r24, 0x14 ; 20 + 618: 80 93 2e 04 sts 0x042E, r24 + progPosition++; + 61c: 85 e0 ldi r24, 0x05 ; 5 + 61e: b1 c2 rjmp .+1378 ; 0xb82 + + break; + + case 5: + // Mät och spara avstånd + pingSendPing(); + 620: 0e 94 8c 0b call 0x1718 ; 0x1718 + progTimer = 4; + 624: 84 e0 ldi r24, 0x04 ; 4 + 626: 80 93 2e 04 sts 0x042E, r24 + + if(pingGetReady()) + 62a: 0e 94 a7 0b call 0x174e ; 0x174e + 62e: 88 23 and r24, r24 + 630: 09 f4 brne .+2 ; 0x634 + 632: a9 c2 rjmp .+1362 ; 0xb86 + { + tempLeftDistance = pingGetDistance(); + 634: 0e 94 a0 0b call 0x1740 ; 0x1740 + 638: 90 93 38 04 sts 0x0438, r25 + 63c: 80 93 37 04 sts 0x0437, r24 + 640: 75 c1 rjmp .+746 ; 0x92c + + break; + + case 6: + // Vrid servo 45grader höger (från centrum) + servoPing = SERVO_POS_RIGHT_45; + 642: 87 e6 ldi r24, 0x67 ; 103 + 644: 80 93 03 04 sts 0x0403, r24 + progTimer = 40; + 648: 88 e2 ldi r24, 0x28 ; 40 + 64a: 80 93 2e 04 sts 0x042E, r24 + progPosition++; + 64e: 87 e0 ldi r24, 0x07 ; 7 + 650: 98 c2 rjmp .+1328 ; 0xb82 + + break; + + case 7: + // Mät och spara avstånd + pingSendPing(); + 652: 0e 94 8c 0b call 0x1718 ; 0x1718 + progTimer = 4; + 656: 84 e0 ldi r24, 0x04 ; 4 + 658: 80 93 2e 04 sts 0x042E, r24 + + if(pingGetReady()) + 65c: 0e 94 a7 0b call 0x174e ; 0x174e + 660: 88 23 and r24, r24 + 662: 09 f4 brne .+2 ; 0x666 + 664: 90 c2 rjmp .+1312 ; 0xb86 + { + tempRightDistance = pingGetDistance(); + 666: 0e 94 a0 0b call 0x1740 ; 0x1740 + 66a: 90 93 3a 04 sts 0x043A, r25 + 66e: 80 93 39 04 sts 0x0439, r24 + 672: 5c c1 rjmp .+696 ; 0x92c + + break; + + case 8: + + servoPing = SERVO_POS_CENTER; + 674: 8c e8 ldi r24, 0x8C ; 140 + 676: 80 93 03 04 sts 0x0403, r24 + + if(tempLeftDistance > tempRightDistance) + 67a: 20 91 37 04 lds r18, 0x0437 + 67e: 30 91 38 04 lds r19, 0x0438 + 682: 80 91 39 04 lds r24, 0x0439 + 686: 90 91 3a 04 lds r25, 0x043A + 68a: 82 17 cp r24, r18 + 68c: 93 07 cpc r25, r19 + 68e: 18 f4 brcc .+6 ; 0x696 + { + regulatorMode = 0; // Mäter åt höger + 690: 10 92 3f 04 sts 0x043F, r1 + 694: 03 c0 rjmp .+6 ; 0x69c + } + else + { + regulatorMode = 1; // Mäter åt vänster + 696: 81 e0 ldi r24, 0x01 ; 1 + 698: 80 93 3f 04 sts 0x043F, r24 + } + + progTimer = 50; + 69c: 82 e3 ldi r24, 0x32 ; 50 + 69e: 80 93 2e 04 sts 0x042E, r24 + progPosition++; + 6a2: 89 e0 ldi r24, 0x09 ; 9 + 6a4: 6e c2 rjmp .+1244 ; 0xb82 + + break; + + case 9: + // Mät och spara avstånd + pingSendPing(); + 6a6: 0e 94 8c 0b call 0x1718 ; 0x1718 + progTimer = 4; + 6aa: 84 e0 ldi r24, 0x04 ; 4 + 6ac: 80 93 2e 04 sts 0x042E, r24 + + if(pingGetReady()) + 6b0: 0e 94 a7 0b call 0x174e ; 0x174e + 6b4: 88 23 and r24, r24 + 6b6: 09 f4 brne .+2 ; 0x6ba + 6b8: 66 c2 rjmp .+1228 ; 0xb86 + { + lcdSetPos(0x00); + 6ba: 80 e0 ldi r24, 0x00 ; 0 + 6bc: 0e 94 d3 07 call 0xfa6 ; 0xfa6 + lcdWriteString("Align to wall "); + 6c0: 82 e4 ldi r24, 0x42 ; 66 + 6c2: 93 e0 ldi r25, 0x03 ; 3 + 6c4: 0e 94 3b 08 call 0x1076 ; 0x1076 + tempLastDistanceToWall = pingGetDistance(); + 6c8: 0e 94 a0 0b call 0x1740 ; 0x1740 + 6cc: 90 93 36 04 sts 0x0436, r25 + 6d0: 80 93 35 04 sts 0x0435, r24 + tempDistanceToWall = tempLastDistanceToWall; + 6d4: 90 93 34 04 sts 0x0434, r25 + 6d8: 80 93 33 04 sts 0x0433, r24 + 6dc: 27 c1 rjmp .+590 ; 0x92c + break; + + case 10: + // Reglera in sig vinkerät mot väggen + // Vrider sig ett steg + if (regulatorMode == 0) // Tittar höger + 6de: 80 91 3f 04 lds r24, 0x043F + 6e2: 88 23 and r24, r24 + 6e4: 29 f4 brne .+10 ; 0x6f0 + { + // sväng höger + servoMotorLeft = SERVO_POS_MOTOR_FW_FAST; + 6e6: 86 e8 ldi r24, 0x86 ; 134 + 6e8: 80 93 04 04 sts 0x0404, r24 + servoMotorRight = SERVO_POS_MOTOR_RE_FAST; + 6ec: 88 e6 ldi r24, 0x68 ; 104 + 6ee: 06 c0 rjmp .+12 ; 0x6fc + progTimer = 7; + } + else if (regulatorMode == 1) // Tittar vänster + 6f0: 81 30 cpi r24, 0x01 ; 1 + 6f2: 49 f4 brne .+18 ; 0x706 + { + // sväng vänster + servoMotorLeft = SERVO_POS_MOTOR_RE_FAST; + 6f4: 88 e6 ldi r24, 0x68 ; 104 + 6f6: 80 93 04 04 sts 0x0404, r24 + servoMotorRight = SERVO_POS_MOTOR_FW_FAST; + 6fa: 86 e8 ldi r24, 0x86 ; 134 + 6fc: 80 93 05 04 sts 0x0405, r24 + progTimer = 7; + 700: 87 e0 ldi r24, 0x07 ; 7 + 702: 80 93 2e 04 sts 0x042E, r24 + } + + progPosition++; + 706: 8b e0 ldi r24, 0x0B ; 11 + 708: 3c c2 rjmp .+1144 ; 0xb82 + break; + + case 11: + // Reglera in sig vinkerät mot väggen + // Kontrollerar avstånd + pingSendPing(); + 70a: 0e 94 8c 0b call 0x1718 ; 0x1718 + progTimer = 4; + 70e: 84 e0 ldi r24, 0x04 ; 4 + 710: 80 93 2e 04 sts 0x042E, r24 + + servoMotorLeft = SERVO_POS_MOTOR_STOP; + 714: 87 e7 ldi r24, 0x77 ; 119 + 716: 80 93 04 04 sts 0x0404, r24 + servoMotorRight = SERVO_POS_MOTOR_STOP; + 71a: 80 93 05 04 sts 0x0405, r24 + + if(pingGetReady()) + 71e: 0e 94 a7 0b call 0x174e ; 0x174e + 722: 88 23 and r24, r24 + 724: 09 f4 brne .+2 ; 0x728 + 726: 2f c2 rjmp .+1118 ; 0xb86 + { + + tempDistance = pingGetDistance(); + 728: 0e 94 a0 0b call 0x1740 ; 0x1740 + 72c: 90 93 32 04 sts 0x0432, r25 + 730: 80 93 31 04 sts 0x0431, r24 + + if(tempDistance > tempLastDistanceToWall) + 734: 20 91 35 04 lds r18, 0x0435 + 738: 30 91 36 04 lds r19, 0x0436 + 73c: 28 17 cp r18, r24 + 73e: 39 07 cpc r19, r25 + 740: 70 f4 brcc .+28 ; 0x75e + { + lcdSetPos(0x00); + 742: 80 e0 ldi r24, 0x00 ; 0 + 744: 0e 94 d3 07 call 0xfa6 ; 0xfa6 + lcdWriteString(" ^-- (1m) --^ "); + 748: 83 e5 ldi r24, 0x53 ; 83 + 74a: 93 e0 ldi r25, 0x03 ; 3 + 74c: 0e 94 3b 08 call 0x1076 ; 0x1076 + + progTimer = 1; + 750: 81 e0 ldi r24, 0x01 ; 1 + 752: 80 93 2e 04 sts 0x042E, r24 + progPosition++; + 756: 80 91 2f 04 lds r24, 0x042F + 75a: 8f 5f subi r24, 0xFF ; 255 + 75c: 03 c0 rjmp .+6 ; 0x764 + } + else + progPosition--; + 75e: 80 91 2f 04 lds r24, 0x042F + 762: 81 50 subi r24, 0x01 ; 1 + 764: 80 93 2f 04 sts 0x042F, r24 + + tempLastDistanceToWall = tempDistance; + 768: 80 91 31 04 lds r24, 0x0431 + 76c: 90 91 32 04 lds r25, 0x0432 + 770: 90 93 36 04 sts 0x0436, r25 + 774: 80 93 35 04 sts 0x0435, r24 + 778: 06 c2 rjmp .+1036 ; 0xb86 + + break; + + case 12: + // Reglera in position 1meter från väggen + pingSendPing(); + 77a: 0e 94 8c 0b call 0x1718 ; 0x1718 + progTimer = 4; + 77e: 84 e0 ldi r24, 0x04 ; 4 + 780: 80 93 2e 04 sts 0x042E, r24 + + if(pingGetReady()) + 784: 0e 94 a7 0b call 0x174e ; 0x174e + 788: 88 23 and r24, r24 + 78a: 09 f4 brne .+2 ; 0x78e + 78c: fc c1 rjmp .+1016 ; 0xb86 + { + + tempDistance = pingGetDistance(); + 78e: 0e 94 a0 0b call 0x1740 ; 0x1740 + 792: 9c 01 movw r18, r24 + 794: 90 93 32 04 sts 0x0432, r25 + 798: 80 93 31 04 sts 0x0431, r24 + + if(tempDistance > DISTANCE_ONE_METER) + 79c: 47 e1 ldi r20, 0x17 ; 23 + 79e: 81 37 cpi r24, 0x71 ; 113 + 7a0: 94 07 cpc r25, r20 + 7a2: 28 f0 brcs .+10 ; 0x7ae + showDistanceOnLCD((tempDistance-DISTANCE_ONE_METER),0,2); + 7a4: 42 e0 ldi r20, 0x02 ; 2 + 7a6: 60 e0 ldi r22, 0x00 ; 0 + 7a8: 80 57 subi r24, 0x70 ; 112 + 7aa: 97 41 sbci r25, 0x17 ; 23 + 7ac: 06 c0 rjmp .+12 ; 0x7ba + else + showDistanceOnLCD((DISTANCE_ONE_METER-tempDistance),1,2); + 7ae: 42 e0 ldi r20, 0x02 ; 2 + 7b0: 61 e0 ldi r22, 0x01 ; 1 + 7b2: 80 e7 ldi r24, 0x70 ; 112 + 7b4: 97 e1 ldi r25, 0x17 ; 23 + 7b6: 82 1b sub r24, r18 + 7b8: 93 0b sbc r25, r19 + 7ba: 0e 94 7c 01 call 0x2f8 ; 0x2f8 + + if(tempDistance < (DISTANCE_ONE_METER - 200)) + 7be: 80 91 31 04 lds r24, 0x0431 + 7c2: 90 91 32 04 lds r25, 0x0432 + 7c6: 26 e1 ldi r18, 0x16 ; 22 + 7c8: 88 3a cpi r24, 0xA8 ; 168 + 7ca: 92 07 cpc r25, r18 + 7cc: 58 f4 brcc .+22 ; 0x7e4 + { + // Kör frammåt (öka hastigheten långsamt) + if(servoMotorLeft > SERVO_POS_MOTOR_RE_SOFT) + 7ce: 80 91 04 04 lds r24, 0x0404 + 7d2: 83 37 cpi r24, 0x73 ; 115 + 7d4: b0 f0 brcs .+44 ; 0x802 + { + servoMotorLeft--; + 7d6: 81 50 subi r24, 0x01 ; 1 + 7d8: 80 93 04 04 sts 0x0404, r24 + servoMotorRight--; + 7dc: 80 91 05 04 lds r24, 0x0405 + 7e0: 81 50 subi r24, 0x01 ; 1 + 7e2: 0d c0 rjmp .+26 ; 0x7fe + } + + regulatorMeasureCounter = 0; + } + else if(tempDistance > (DISTANCE_ONE_METER + 200)) + 7e4: 89 53 subi r24, 0x39 ; 57 + 7e6: 98 41 sbci r25, 0x18 ; 24 + 7e8: 78 f0 brcs .+30 ; 0x808 + { + // Kör bakåt (öka hastigheten långsamt) + if(servoMotorLeft < SERVO_POS_MOTOR_FW_SOFT) + 7ea: 80 91 04 04 lds r24, 0x0404 + 7ee: 8f 37 cpi r24, 0x7F ; 127 + 7f0: 40 f4 brcc .+16 ; 0x802 + { + servoMotorLeft++; + 7f2: 8f 5f subi r24, 0xFF ; 255 + 7f4: 80 93 04 04 sts 0x0404, r24 + servoMotorRight++; + 7f8: 80 91 05 04 lds r24, 0x0405 + 7fc: 8f 5f subi r24, 0xFF ; 255 + 7fe: 80 93 05 04 sts 0x0405, r24 + + } + + regulatorMeasureCounter = 0; + 802: 10 92 42 04 sts 0x0442, r1 + 806: bf c1 rjmp .+894 ; 0xb86 + } + else + { + servoMotorLeft = SERVO_POS_MOTOR_STOP; + 808: 17 e7 ldi r17, 0x77 ; 119 + 80a: 10 93 04 04 sts 0x0404, r17 + servoMotorRight = SERVO_POS_MOTOR_STOP; + 80e: 10 93 05 04 sts 0x0405, r17 + + if(++regulatorMeasureCounter == 5) + 812: 80 91 42 04 lds r24, 0x0442 + 816: 8f 5f subi r24, 0xFF ; 255 + 818: 80 93 42 04 sts 0x0442, r24 + 81c: 85 30 cpi r24, 0x05 ; 5 + 81e: 09 f0 breq .+2 ; 0x822 + 820: b2 c1 rjmp .+868 ; 0xb86 + { + lcdSetPos(0x00); + 822: 80 e0 ldi r24, 0x00 ; 0 + 824: 0e 94 d3 07 call 0xfa6 ; 0xfa6 + lcdWriteString("Posistion locked"); + 828: 84 e6 ldi r24, 0x64 ; 100 + 82a: 93 e0 ldi r25, 0x03 ; 3 + 82c: 0e 94 3b 08 call 0x1076 ; 0x1076 + + servoMotorLeft = SERVO_POS_MOTOR_STOP; + 830: 10 93 04 04 sts 0x0404, r17 + servoMotorRight = SERVO_POS_MOTOR_STOP; + 834: 10 93 05 04 sts 0x0405, r17 + tempDistanceToWall = tempDistance; + 838: 80 91 31 04 lds r24, 0x0431 + 83c: 90 91 32 04 lds r25, 0x0432 + 840: 90 93 34 04 sts 0x0434, r25 + 844: 80 93 33 04 sts 0x0433, r24 + progTimer = 50; + 848: 82 e3 ldi r24, 0x32 ; 50 + 84a: 80 93 2e 04 sts 0x042E, r24 + regulatorMeasureCounter = 0; + 84e: 10 92 42 04 sts 0x0442, r1 + 852: 86 c1 rjmp .+780 ; 0xb60 + + break; + + case 13: + // Vrider 90grader + servoPing = SERVO_POS_CENTER; + 854: 8c e8 ldi r24, 0x8C ; 140 + 856: 80 93 03 04 sts 0x0403, r24 + + if(tempLeftDistance > tempRightDistance) + 85a: 20 91 37 04 lds r18, 0x0437 + 85e: 30 91 38 04 lds r19, 0x0438 + 862: 80 91 39 04 lds r24, 0x0439 + 866: 90 91 3a 04 lds r25, 0x043A + 86a: 82 17 cp r24, r18 + 86c: 93 07 cpc r25, r19 + 86e: 98 f4 brcc .+38 ; 0x896 + { + lcdSetPos(0x00); + 870: 80 e0 ldi r24, 0x00 ; 0 + 872: 0e 94 d3 07 call 0xfa6 ; 0xfa6 + lcdWriteString("Drive: Turn < "); + 876: 85 e7 ldi r24, 0x75 ; 117 + 878: 93 e0 ldi r25, 0x03 ; 3 + 87a: 0e 94 3b 08 call 0x1076 ; 0x1076 + + servoMotorLeft = SERVO_POS_MOTOR_RE_FAST; + 87e: 88 e6 ldi r24, 0x68 ; 104 + 880: 80 93 04 04 sts 0x0404, r24 + servoMotorRight = SERVO_POS_MOTOR_FW_FAST; + 884: 86 e8 ldi r24, 0x86 ; 134 + 886: 80 93 05 04 sts 0x0405, r24 + servoPing = SERVO_POS_RIGHT_90; + 88a: 83 e4 ldi r24, 0x43 ; 67 + 88c: 80 93 03 04 sts 0x0403, r24 + regulatorMode = 0; // Mäter åt höger + 890: 10 92 3f 04 sts 0x043F, r1 + 894: 13 c0 rjmp .+38 ; 0x8bc + progTimer = 50; + } + else + { + lcdSetPos(0x00); + 896: 80 e0 ldi r24, 0x00 ; 0 + 898: 0e 94 d3 07 call 0xfa6 ; 0xfa6 + lcdWriteString("Drive: Turn > "); + 89c: 84 e8 ldi r24, 0x84 ; 132 + 89e: 93 e0 ldi r25, 0x03 ; 3 + 8a0: 0e 94 3b 08 call 0x1076 ; 0x1076 + + servoMotorLeft = SERVO_POS_MOTOR_FW_FAST; + 8a4: 86 e8 ldi r24, 0x86 ; 134 + 8a6: 80 93 04 04 sts 0x0404, r24 + servoMotorRight = SERVO_POS_MOTOR_RE_FAST; + 8aa: 88 e6 ldi r24, 0x68 ; 104 + 8ac: 80 93 05 04 sts 0x0405, r24 + servoPing = SERVO_POS_LEFT_90; + 8b0: 80 ed ldi r24, 0xD0 ; 208 + 8b2: 80 93 03 04 sts 0x0403, r24 + regulatorMode = 1; // Mäter åt vänster + 8b6: 81 e0 ldi r24, 0x01 ; 1 + 8b8: 80 93 3f 04 sts 0x043F, r24 + progTimer = 50; + 8bc: 82 e3 ldi r24, 0x32 ; 50 + 8be: 19 c0 rjmp .+50 ; 0x8f2 + + break; + + case 14: + // Stanna + servoMotorLeft = SERVO_POS_MOTOR_STOP; + 8c0: 87 e7 ldi r24, 0x77 ; 119 + 8c2: 80 93 04 04 sts 0x0404, r24 + servoMotorRight = SERVO_POS_MOTOR_STOP; + 8c6: 80 93 05 04 sts 0x0405, r24 + + progTimer = 10; + 8ca: 8a e0 ldi r24, 0x0A ; 10 + 8cc: 80 93 2e 04 sts 0x042E, r24 + regulatorTimer = 2; + 8d0: 82 e0 ldi r24, 0x02 ; 2 + 8d2: 80 93 40 04 sts 0x0440, r24 + 8d6: 18 c0 rjmp .+48 ; 0x908 + + break; + + case 15: + // Kör frammåt + lcdSetPos(0x00); + 8d8: 80 e0 ldi r24, 0x00 ; 0 + 8da: 0e 94 d3 07 call 0xfa6 ; 0xfa6 + lcdWriteString("Drive: FORWARD "); + 8de: 80 e2 ldi r24, 0x20 ; 32 + 8e0: 93 e0 ldi r25, 0x03 ; 3 + 8e2: 0e 94 3b 08 call 0x1076 ; 0x1076 + + servoMotorLeft = SERVO_POS_MOTOR_FW_FAST; + 8e6: 86 e8 ldi r24, 0x86 ; 134 + 8e8: 80 93 04 04 sts 0x0404, r24 + servoMotorRight = SERVO_POS_MOTOR_FW_FAST; + 8ec: 80 93 05 04 sts 0x0405, r24 + + progTimer = 20; + 8f0: 84 e1 ldi r24, 0x14 ; 20 + 8f2: 80 93 2e 04 sts 0x042E, r24 + 8f6: 34 c1 rjmp .+616 ; 0xb60 + + break; + + case 16: + // Kör frammåt + servoMotorLeft = SERVO_POS_MOTOR_FW_SOFT; + 8f8: 8f e7 ldi r24, 0x7F ; 127 + 8fa: 80 93 04 04 sts 0x0404, r24 + servoMotorRight = SERVO_POS_MOTOR_FW_SOFT; + 8fe: 80 93 05 04 sts 0x0405, r24 + + progTimer = 10; + 902: 8a e0 ldi r24, 0x0A ; 10 + 904: 80 93 2e 04 sts 0x042E, r24 + progPosition++; + 908: 81 e1 ldi r24, 0x11 ; 17 + 90a: 3b c1 rjmp .+630 ; 0xb82 + + break; + + case 17: + // Mäter avstånd + pingSendPing(); + 90c: 0e 94 8c 0b call 0x1718 ; 0x1718 + progTimer = 3; + 910: 83 e0 ldi r24, 0x03 ; 3 + 912: 80 93 2e 04 sts 0x042E, r24 + + if(pingGetReady()) + 916: 0e 94 a7 0b call 0x174e ; 0x174e + 91a: 88 23 and r24, r24 + 91c: 09 f4 brne .+2 ; 0x920 + 91e: 33 c1 rjmp .+614 ; 0xb86 + { + + tempDistance = pingGetDistance(); + 920: 0e 94 a0 0b call 0x1740 ; 0x1740 + 924: 90 93 32 04 sts 0x0432, r25 + 928: 80 93 31 04 sts 0x0431, r24 + progTimer = 1; + 92c: 81 e0 ldi r24, 0x01 ; 1 + 92e: e1 cf rjmp .-62 ; 0x8f2 + + break; + + case 18: + // Reglerar 1meter från väggen + if(++regulatorCounter >= regulatorTimer) + 930: 80 91 41 04 lds r24, 0x0441 + 934: 8f 5f subi r24, 0xFF ; 255 + 936: 80 93 41 04 sts 0x0441, r24 + 93a: 90 91 40 04 lds r25, 0x0440 + 93e: 89 17 cp r24, r25 + 940: 48 f0 brcs .+18 ; 0x954 + { + progPosition++; + 942: 83 e1 ldi r24, 0x13 ; 19 + 944: 80 93 2f 04 sts 0x042F, r24 + progTimer = 1; + 948: 81 e0 ldi r24, 0x01 ; 1 + 94a: 80 93 2e 04 sts 0x042E, r24 + regulatorCounter = 0; + 94e: 10 92 41 04 sts 0x0441, r1 + 952: 19 c1 rjmp .+562 ; 0xb86 + } + else + { + uint8_t calculateProgTimer = 0; + if (regulatorMode == 0) // Tittar höger + 954: 80 91 3f 04 lds r24, 0x043F + 958: 88 23 and r24, r24 + 95a: 09 f0 breq .+2 ; 0x95e + 95c: 47 c0 rjmp .+142 ; 0x9ec + { + lcdSetPos(0x00); + 95e: 0e 94 d3 07 call 0xfa6 ; 0xfa6 + lcdWriteString(" ]--- (1m) --->|"); + 962: 83 e9 ldi r24, 0x93 ; 147 + 964: 93 e0 ldi r25, 0x03 ; 3 + 966: 0e 94 3b 08 call 0x1076 ; 0x1076 + + if(tempDistance > DISTANCE_ONE_METER) + 96a: 20 91 31 04 lds r18, 0x0431 + 96e: 30 91 32 04 lds r19, 0x0432 + 972: 87 e1 ldi r24, 0x17 ; 23 + 974: 21 37 cpi r18, 0x71 ; 113 + 976: 38 07 cpc r19, r24 + 978: 30 f0 brcs .+12 ; 0x986 + showDistanceOnLCD((tempDistance-DISTANCE_ONE_METER),3,2); + 97a: 42 e0 ldi r20, 0x02 ; 2 + 97c: 63 e0 ldi r22, 0x03 ; 3 + 97e: c9 01 movw r24, r18 + 980: 80 57 subi r24, 0x70 ; 112 + 982: 97 41 sbci r25, 0x17 ; 23 + 984: 06 c0 rjmp .+12 ; 0x992 + else + showDistanceOnLCD((DISTANCE_ONE_METER-tempDistance),2,2); + 986: 42 e0 ldi r20, 0x02 ; 2 + 988: 62 e0 ldi r22, 0x02 ; 2 + 98a: 80 e7 ldi r24, 0x70 ; 112 + 98c: 97 e1 ldi r25, 0x17 ; 23 + 98e: 82 1b sub r24, r18 + 990: 93 0b sbc r25, r19 + 992: 0e 94 7c 01 call 0x2f8 ; 0x2f8 + + if((tempDistance < tempLastDistanceToWall) && (tempDistance < (DISTANCE_ONE_METER -1000))) + 996: 60 91 31 04 lds r22, 0x0431 + 99a: 70 91 32 04 lds r23, 0x0432 + 99e: 80 91 35 04 lds r24, 0x0435 + 9a2: 90 91 36 04 lds r25, 0x0436 + 9a6: 68 17 cp r22, r24 + 9a8: 79 07 cpc r23, r25 + 9aa: 70 f4 brcc .+28 ; 0x9c8 + 9ac: 23 e1 ldi r18, 0x13 ; 19 + 9ae: 68 38 cpi r22, 0x88 ; 136 + 9b0: 72 07 cpc r23, r18 + 9b2: 28 f4 brcc .+10 ; 0x9be + { + // sväng vänster + servoMotorLeft = SERVO_POS_MOTOR_RE_FAST; + 9b4: 88 e6 ldi r24, 0x68 ; 104 + 9b6: 80 93 04 04 sts 0x0404, r24 + servoMotorRight = SERVO_POS_MOTOR_FW_FAST; + 9ba: 86 e8 ldi r24, 0x86 ; 134 + 9bc: 4a c0 rjmp .+148 ; 0xa52 + progTimer = calculateProgTimer; + else + progTimer = 15; + + } + else if((tempDistance < tempLastDistanceToWall) && (tempDistance < (DISTANCE_ONE_METER -10))) + 9be: 66 56 subi r22, 0x66 ; 102 + 9c0: 77 41 sbci r23, 0x17 ; 23 + 9c2: 08 f0 brcs .+2 ; 0x9c6 + 9c4: 7c c0 rjmp .+248 ; 0xabe + 9c6: 73 c0 rjmp .+230 ; 0xaae + servoMotorRight = SERVO_POS_MOTOR_FW_FAST; + + progTimer = 5; + + } + else if((tempDistance > tempLastDistanceToWall) && (tempDistance > (DISTANCE_ONE_METER+1000))) + 9c8: 86 17 cp r24, r22 + 9ca: 97 07 cpc r25, r23 + 9cc: 08 f0 brcs .+2 ; 0x9d0 + 9ce: 77 c0 rjmp .+238 ; 0xabe + 9d0: 8b e1 ldi r24, 0x1B ; 27 + 9d2: 69 35 cpi r22, 0x59 ; 89 + 9d4: 78 07 cpc r23, r24 + 9d6: 28 f0 brcs .+10 ; 0x9e2 + { + // sväng höger + servoMotorLeft = SERVO_POS_MOTOR_FW_FAST; + 9d8: 86 e8 ldi r24, 0x86 ; 134 + 9da: 80 93 04 04 sts 0x0404, r24 + servoMotorRight = SERVO_POS_MOTOR_RE_FAST; + 9de: 88 e6 ldi r24, 0x68 ; 104 + 9e0: 4e c0 rjmp .+156 ; 0xa7e + progTimer = calculateProgTimer; + else + progTimer = 15; + + } + else if((tempDistance > tempLastDistanceToWall) && (tempDistance > (DISTANCE_ONE_METER+10))) + 9e2: 6b 57 subi r22, 0x7B ; 123 + 9e4: 77 41 sbci r23, 0x17 ; 23 + 9e6: 08 f4 brcc .+2 ; 0x9ea + 9e8: 6a c0 rjmp .+212 ; 0xabe + 9ea: 39 c0 rjmp .+114 ; 0xa5e + servoMotorRight = SERVO_POS_MOTOR_FW_SOFT; + progTimer = 4; + } + } + + else if (regulatorMode == 1) // Tittar vänster + 9ec: 81 30 cpi r24, 0x01 ; 1 + 9ee: 09 f0 breq .+2 ; 0x9f2 + 9f0: 6e c0 rjmp .+220 ; 0xace + { + lcdSetPos(0x00); + 9f2: 80 e0 ldi r24, 0x00 ; 0 + 9f4: 0e 94 d3 07 call 0xfa6 ; 0xfa6 + lcdWriteString("|<--- (1m) ---[ "); + 9f8: 84 ea ldi r24, 0xA4 ; 164 + 9fa: 93 e0 ldi r25, 0x03 ; 3 + 9fc: 0e 94 3b 08 call 0x1076 ; 0x1076 + + if(tempDistance > DISTANCE_ONE_METER) + a00: 20 91 31 04 lds r18, 0x0431 + a04: 30 91 32 04 lds r19, 0x0432 + a08: 47 e1 ldi r20, 0x17 ; 23 + a0a: 21 37 cpi r18, 0x71 ; 113 + a0c: 34 07 cpc r19, r20 + a0e: 30 f0 brcs .+12 ; 0xa1c + showDistanceOnLCD((tempDistance-DISTANCE_ONE_METER),2,2); + a10: 42 e0 ldi r20, 0x02 ; 2 + a12: 62 e0 ldi r22, 0x02 ; 2 + a14: c9 01 movw r24, r18 + a16: 80 57 subi r24, 0x70 ; 112 + a18: 97 41 sbci r25, 0x17 ; 23 + a1a: 06 c0 rjmp .+12 ; 0xa28 + else + showDistanceOnLCD((DISTANCE_ONE_METER-tempDistance),3,2); + a1c: 42 e0 ldi r20, 0x02 ; 2 + a1e: 63 e0 ldi r22, 0x03 ; 3 + a20: 80 e7 ldi r24, 0x70 ; 112 + a22: 97 e1 ldi r25, 0x17 ; 23 + a24: 82 1b sub r24, r18 + a26: 93 0b sbc r25, r19 + a28: 0e 94 7c 01 call 0x2f8 ; 0x2f8 + + if((tempDistance < tempLastDistanceToWall) && (tempDistance < (DISTANCE_ONE_METER-1000))) + a2c: 60 91 31 04 lds r22, 0x0431 + a30: 70 91 32 04 lds r23, 0x0432 + a34: 80 91 35 04 lds r24, 0x0435 + a38: 90 91 36 04 lds r25, 0x0436 + a3c: 68 17 cp r22, r24 + a3e: 79 07 cpc r23, r25 + a40: 98 f4 brcc .+38 ; 0xa68 + a42: 83 e1 ldi r24, 0x13 ; 19 + a44: 68 38 cpi r22, 0x88 ; 136 + a46: 78 07 cpc r23, r24 + a48: 38 f4 brcc .+14 ; 0xa58 + { + // sväng höger + servoMotorLeft = SERVO_POS_MOTOR_FW_FAST; + a4a: 86 e8 ldi r24, 0x86 ; 134 + a4c: 80 93 04 04 sts 0x0404, r24 + servoMotorRight = SERVO_POS_MOTOR_RE_FAST; + a50: 88 e6 ldi r24, 0x68 ; 104 + a52: 80 93 05 04 sts 0x0405, r24 + a56: 26 c0 rjmp .+76 ; 0xaa4 + progTimer = calculateProgTimer; + else + progTimer = 15; + + } + else if((tempDistance < tempLastDistanceToWall) && (tempDistance < (DISTANCE_ONE_METER-10))) + a58: 66 56 subi r22, 0x66 ; 102 + a5a: 77 41 sbci r23, 0x17 ; 23 + a5c: 80 f5 brcc .+96 ; 0xabe + { + // sväng höger + servoMotorLeft = SERVO_POS_MOTOR_FW_FAST; + a5e: 86 e8 ldi r24, 0x86 ; 134 + a60: 80 93 04 04 sts 0x0404, r24 + servoMotorRight = SERVO_POS_MOTOR_RE_FAST; + a64: 88 e6 ldi r24, 0x68 ; 104 + a66: 27 c0 rjmp .+78 ; 0xab6 + + progTimer = 5; + + } + else if((tempDistance > tempLastDistanceToWall) && (tempDistance > (DISTANCE_ONE_METER +1000))) + a68: 86 17 cp r24, r22 + a6a: 97 07 cpc r25, r23 + a6c: 40 f5 brcc .+80 ; 0xabe + a6e: 4b e1 ldi r20, 0x1B ; 27 + a70: 69 35 cpi r22, 0x59 ; 89 + a72: 74 07 cpc r23, r20 + a74: c8 f0 brcs .+50 ; 0xaa8 + { + // sväng vänster + servoMotorLeft = SERVO_POS_MOTOR_RE_FAST; + a76: 88 e6 ldi r24, 0x68 ; 104 + a78: 80 93 04 04 sts 0x0404, r24 + servoMotorRight = SERVO_POS_MOTOR_FW_FAST; + a7c: 86 e8 ldi r24, 0x86 ; 134 + a7e: 80 93 05 04 sts 0x0405, r24 + + calculateProgTimer = ((tempDistance - DISTANCE_ONE_METER)/40); + a82: 80 e0 ldi r24, 0x00 ; 0 + a84: 90 e0 ldi r25, 0x00 ; 0 + a86: 60 57 subi r22, 0x70 ; 112 + a88: 77 41 sbci r23, 0x17 ; 23 + a8a: 80 40 sbci r24, 0x00 ; 0 + a8c: 90 40 sbci r25, 0x00 ; 0 + a8e: 28 e2 ldi r18, 0x28 ; 40 + a90: 30 e0 ldi r19, 0x00 ; 0 + a92: 40 e0 ldi r20, 0x00 ; 0 + a94: 50 e0 ldi r21, 0x00 ; 0 + a96: 0e 94 e7 0b call 0x17ce ; 0x17ce <__udivmodsi4> + + if(calculateProgTimer < 15) + a9a: 2f 30 cpi r18, 0x0F ; 15 + a9c: 18 f4 brcc .+6 ; 0xaa4 + progTimer = calculateProgTimer; + a9e: 20 93 2e 04 sts 0x042E, r18 + aa2: 15 c0 rjmp .+42 ; 0xace + else + progTimer = 15; + aa4: 8f e0 ldi r24, 0x0F ; 15 + aa6: 11 c0 rjmp .+34 ; 0xaca + } + else if((tempDistance > tempLastDistanceToWall) && (tempDistance > (DISTANCE_ONE_METER +10))) + aa8: 6b 57 subi r22, 0x7B ; 123 + aaa: 77 41 sbci r23, 0x17 ; 23 + aac: 40 f0 brcs .+16 ; 0xabe + { + // sväng vänster + servoMotorLeft = SERVO_POS_MOTOR_RE_FAST; + aae: 88 e6 ldi r24, 0x68 ; 104 + ab0: 80 93 04 04 sts 0x0404, r24 + servoMotorRight = SERVO_POS_MOTOR_FW_FAST; + ab4: 86 e8 ldi r24, 0x86 ; 134 + ab6: 80 93 05 04 sts 0x0405, r24 + + progTimer = 5; + aba: 85 e0 ldi r24, 0x05 ; 5 + abc: 06 c0 rjmp .+12 ; 0xaca + } + else + { + servoMotorLeft = SERVO_POS_MOTOR_FW_SOFT; + abe: 8f e7 ldi r24, 0x7F ; 127 + ac0: 80 93 04 04 sts 0x0404, r24 + servoMotorRight = SERVO_POS_MOTOR_FW_SOFT; + ac4: 80 93 05 04 sts 0x0405, r24 + progTimer = 4; + ac8: 84 e0 ldi r24, 0x04 ; 4 + aca: 80 93 2e 04 sts 0x042E, r24 + } + } + tempLastDistanceToWall = tempDistance; + ace: 80 91 31 04 lds r24, 0x0431 + ad2: 90 91 32 04 lds r25, 0x0432 + ad6: 90 93 36 04 sts 0x0436, r25 + ada: 80 93 35 04 sts 0x0435, r24 + progPosition--; + ade: 80 91 2f 04 lds r24, 0x042F + progPosition--; + ae2: 82 50 subi r24, 0x02 ; 2 + ae4: 4e c0 rjmp .+156 ; 0xb82 + + break; + + case 19: + + servoPing = SERVO_POS_CENTER; + ae6: 8c e8 ldi r24, 0x8C ; 140 + ae8: 80 93 03 04 sts 0x0403, r24 + + servoMotorLeft = SERVO_POS_MOTOR_STOP; + aec: 87 e7 ldi r24, 0x77 ; 119 + aee: 80 93 04 04 sts 0x0404, r24 + servoMotorRight = SERVO_POS_MOTOR_STOP; + af2: 80 93 05 04 sts 0x0405, r24 + + progTimer = 35; + af6: 83 e2 ldi r24, 0x23 ; 35 + af8: 80 93 2e 04 sts 0x042E, r24 + progPosition++; + afc: 84 e1 ldi r24, 0x14 ; 20 + afe: 41 c0 rjmp .+130 ; 0xb82 + + break; + + case 20: + + progTimer = 3; + b00: 83 e0 ldi r24, 0x03 ; 3 + b02: 80 93 2e 04 sts 0x042E, r24 + pingSendPing(); + b06: 0e 94 8c 0b call 0x1718 ; 0x1718 + + if(pingGetReady()) + b0a: 0e 94 a7 0b call 0x174e ; 0x174e + b0e: 88 23 and r24, r24 + b10: d1 f1 breq .+116 ; 0xb86 + { + + tempDistance = pingGetDistance(); + b12: 0e 94 a0 0b call 0x1740 ; 0x1740 + b16: 90 93 32 04 sts 0x0432, r25 + b1a: 80 93 31 04 sts 0x0431, r24 + + if(tempDistance < DISTANCE_ONE_METER) + b1e: 27 e1 ldi r18, 0x17 ; 23 + b20: 80 37 cpi r24, 0x70 ; 112 + b22: 92 07 cpc r25, r18 + b24: 40 f4 brcc .+16 ; 0xb36 + { + showDistanceOnLCD(0,0,1); + b26: 41 e0 ldi r20, 0x01 ; 1 + b28: 60 e0 ldi r22, 0x00 ; 0 + b2a: 80 e0 ldi r24, 0x00 ; 0 + b2c: 90 e0 ldi r25, 0x00 ; 0 + b2e: 0e 94 7c 01 call 0x2f8 ; 0x2f8 + progPosition = 2; + b32: 82 e0 ldi r24, 0x02 ; 2 + b34: 26 c0 rjmp .+76 ; 0xb82 + b36: 9c 01 movw r18, r24 + b38: 20 57 subi r18, 0x70 ; 112 + b3a: 37 41 sbci r19, 0x17 ; 23 + } + else if (tempDistance < (DISTANCE_ONE_METER*2)) + b3c: 80 5e subi r24, 0xE0 ; 224 + b3e: 9e 42 sbci r25, 0x2E ; 46 + b40: 38 f4 brcc .+14 ; 0xb50 + { + showDistanceOnLCD(tempDistance-DISTANCE_ONE_METER,0,1); + b42: 41 e0 ldi r20, 0x01 ; 1 + b44: 60 e0 ldi r22, 0x00 ; 0 + b46: c9 01 movw r24, r18 + b48: 0e 94 7c 01 call 0x2f8 ; 0x2f8 + regulatorTimer = 2; + b4c: 82 e0 ldi r24, 0x02 ; 2 + b4e: 06 c0 rjmp .+12 ; 0xb5c + progPosition++; + } + else + { + showDistanceOnLCD(tempDistance-DISTANCE_ONE_METER,0,1); + b50: 41 e0 ldi r20, 0x01 ; 1 + b52: 60 e0 ldi r22, 0x00 ; 0 + b54: c9 01 movw r24, r18 + b56: 0e 94 7c 01 call 0x2f8 ; 0x2f8 + regulatorTimer = 10; + b5a: 8a e0 ldi r24, 0x0A ; 10 + b5c: 80 93 40 04 sts 0x0440, r24 + progPosition++; + b60: 80 91 2f 04 lds r24, 0x042F + b64: 8f 5f subi r24, 0xFF ; 255 + b66: 0d c0 rjmp .+26 ; 0xb82 + + break; + + case 21: + + if (regulatorMode == 0) // Tittar höger + b68: 80 91 3f 04 lds r24, 0x043F + b6c: 88 23 and r24, r24 + b6e: 11 f4 brne .+4 ; 0xb74 + { + servoPing = SERVO_POS_RIGHT_90; + b70: 83 e4 ldi r24, 0x43 ; 67 + b72: 01 c0 rjmp .+2 ; 0xb76 + } + else + { + servoPing = SERVO_POS_LEFT_90; + b74: 80 ed ldi r24, 0xD0 ; 208 + b76: 80 93 03 04 sts 0x0403, r24 + } + + progTimer = 5; + b7a: 85 e0 ldi r24, 0x05 ; 5 + b7c: 80 93 2e 04 sts 0x042E, r24 + progPosition = 15; + b80: 8f e0 ldi r24, 0x0F ; 15 + b82: 80 93 2f 04 sts 0x042F, r24 + + break; + + } + + progCounter = 0; + b86: 10 92 2d 04 sts 0x042D, r1 + } + } + + // Program for robot AI + if (roboActive == 2) + b8a: 20 91 3b 04 lds r18, 0x043B + b8e: 22 30 cpi r18, 0x02 ; 2 + b90: 09 f0 breq .+2 ; 0xb94 + b92: 01 c1 rjmp .+514 ; 0xd96 + { + // Program(2) for random RFID serach + if (++progCounter >= progTimer) + b94: 80 91 2d 04 lds r24, 0x042D + b98: 8f 5f subi r24, 0xFF ; 255 + b9a: 80 93 2d 04 sts 0x042D, r24 + b9e: 90 91 2e 04 lds r25, 0x042E + ba2: 89 17 cp r24, r25 + ba4: 08 f4 brcc .+2 ; 0xba8 + ba6: f7 c0 rjmp .+494 ; 0xd96 + { + + switch (progPosition) + ba8: 80 91 2f 04 lds r24, 0x042F + bac: 84 30 cpi r24, 0x04 ; 4 + bae: 09 f4 brne .+2 ; 0xbb2 + bb0: 68 c0 rjmp .+208 ; 0xc82 + bb2: 85 30 cpi r24, 0x05 ; 5 + bb4: 50 f4 brcc .+20 ; 0xbca + bb6: 81 30 cpi r24, 0x01 ; 1 + bb8: 11 f1 breq .+68 ; 0xbfe + bba: 81 30 cpi r24, 0x01 ; 1 + bbc: c8 f0 brcs .+50 ; 0xbf0 + bbe: 82 30 cpi r24, 0x02 ; 2 + bc0: 59 f1 breq .+86 ; 0xc18 + bc2: 83 30 cpi r24, 0x03 ; 3 + bc4: 09 f0 breq .+2 ; 0xbc8 + bc6: e5 c0 rjmp .+458 ; 0xd92 + bc8: 4e c0 rjmp .+156 ; 0xc66 + bca: 87 30 cpi r24, 0x07 ; 7 + bcc: 09 f4 brne .+2 ; 0xbd0 + bce: 7c c0 rjmp .+248 ; 0xcc8 + bd0: 88 30 cpi r24, 0x08 ; 8 + bd2: 38 f4 brcc .+14 ; 0xbe2 + bd4: 85 30 cpi r24, 0x05 ; 5 + bd6: 09 f4 brne .+2 ; 0xbda + bd8: 5d c0 rjmp .+186 ; 0xc94 + bda: 86 30 cpi r24, 0x06 ; 6 + bdc: 09 f0 breq .+2 ; 0xbe0 + bde: d9 c0 rjmp .+434 ; 0xd92 + be0: 61 c0 rjmp .+194 ; 0xca4 + be2: 88 30 cpi r24, 0x08 ; 8 + be4: 09 f4 brne .+2 ; 0xbe8 + be6: 78 c0 rjmp .+240 ; 0xcd8 + be8: 89 30 cpi r24, 0x09 ; 9 + bea: 09 f0 breq .+2 ; 0xbee + bec: d2 c0 rjmp .+420 ; 0xd92 + bee: c6 c0 rjmp .+396 ; 0xd7c + { + case 0: + + lcdClearDisplay(); + bf0: 0e 94 df 07 call 0xfbe ; 0xfbe + lcdSetLayout(1); + bf4: 81 e0 ldi r24, 0x01 ; 1 + bf6: 0e 94 a8 07 call 0xf50 ; 0xf50 + + progTimer = 1; + bfa: 81 e0 ldi r24, 0x01 ; 1 + bfc: b9 c0 rjmp .+370 ; 0xd70 + + break; + + case 1: + + lcdSetPos(0x00); + bfe: 80 e0 ldi r24, 0x00 ; 0 + c00: 0e 94 d3 07 call 0xfa6 ; 0xfa6 + lcdWriteString("Drive: FORWARD "); + c04: 80 e2 ldi r24, 0x20 ; 32 + c06: 93 e0 ldi r25, 0x03 ; 3 + c08: 0e 94 3b 08 call 0x1076 ; 0x1076 + + servoMotorLeft = SERVO_POS_MOTOR_FW_FAST; + c0c: 86 e8 ldi r24, 0x86 ; 134 + c0e: 80 93 04 04 sts 0x0404, r24 + servoMotorRight = SERVO_POS_MOTOR_FW_FAST; + c12: 80 93 05 04 sts 0x0405, r24 + c16: 56 c0 rjmp .+172 ; 0xcc4 + + break; + + case 2: + + servoMotorLeft = SERVO_POS_MOTOR_FW_SOFT; + c18: 8f e7 ldi r24, 0x7F ; 127 + c1a: 80 93 04 04 sts 0x0404, r24 + servoMotorRight = SERVO_POS_MOTOR_FW_SOFT; + c1e: 80 93 05 04 sts 0x0405, r24 + + pingSendPing(); + c22: 0e 94 8c 0b call 0x1718 ; 0x1718 + progTimer = 3; + c26: 83 e0 ldi r24, 0x03 ; 3 + c28: 80 93 2e 04 sts 0x042E, r24 + + if(pingGetReady()) + c2c: 0e 94 a7 0b call 0x174e ; 0x174e + c30: 88 23 and r24, r24 + c32: 09 f4 brne .+2 ; 0xc36 + c34: ae c0 rjmp .+348 ; 0xd92 + { + + tempDistance = pingGetDistance(); + c36: 0e 94 a0 0b call 0x1740 ; 0x1740 + c3a: 90 93 32 04 sts 0x0432, r25 + c3e: 80 93 31 04 sts 0x0431, r24 + + if(tempDistance < DISTANCE_TO_STOP) + c42: 25 e1 ldi r18, 0x15 ; 21 + c44: 8c 37 cpi r24, 0x7C ; 124 + c46: 92 07 cpc r25, r18 + c48: 38 f4 brcc .+14 ; 0xc58 + { + showDistanceOnLCD(0,0,2); + c4a: 42 e0 ldi r20, 0x02 ; 2 + c4c: 60 e0 ldi r22, 0x00 ; 0 + c4e: 80 e0 ldi r24, 0x00 ; 0 + c50: 90 e0 ldi r25, 0x00 ; 0 + c52: 0e 94 7c 01 call 0x2f8 ; 0x2f8 + c56: 8e c0 rjmp .+284 ; 0xd74 + progPosition++; + } + else + { + showDistanceOnLCD(tempDistance-DISTANCE_TO_STOP,0,2); + c58: 42 e0 ldi r20, 0x02 ; 2 + c5a: 60 e0 ldi r22, 0x00 ; 0 + c5c: 8c 57 subi r24, 0x7C ; 124 + c5e: 95 41 sbci r25, 0x15 ; 21 + c60: 0e 94 7c 01 call 0x2f8 ; 0x2f8 + c64: 96 c0 rjmp .+300 ; 0xd92 + + break; + + case 3: + + lcdSetPos(0x00); + c66: 80 e0 ldi r24, 0x00 ; 0 + c68: 0e 94 d3 07 call 0xfa6 ; 0xfa6 + lcdWriteString("Drive: STOP "); + c6c: 81 e3 ldi r24, 0x31 ; 49 + c6e: 93 e0 ldi r25, 0x03 ; 3 + c70: 0e 94 3b 08 call 0x1076 ; 0x1076 + + // Stop and breake + servoMotorLeft = SERVO_POS_MOTOR_STOP; + servoMotorRight = SERVO_POS_MOTOR_STOP; + servoMotorLeft = SERVO_POS_MOTOR_RE; + c74: 8c e6 ldi r24, 0x6C ; 108 + c76: 80 93 04 04 sts 0x0404, r24 + servoMotorRight = SERVO_POS_MOTOR_RE; + c7a: 80 93 05 04 sts 0x0405, r24 + + progTimer = 50; + c7e: 82 e3 ldi r24, 0x32 ; 50 + c80: 77 c0 rjmp .+238 ; 0xd70 + + break; + + case 4: + + servoMotorLeft = SERVO_POS_MOTOR_STOP; + c82: 87 e7 ldi r24, 0x77 ; 119 + c84: 80 93 04 04 sts 0x0404, r24 + servoMotorRight = SERVO_POS_MOTOR_STOP; + c88: 80 93 05 04 sts 0x0405, r24 + + progTimer = 2; + c8c: 20 93 2e 04 sts 0x042E, r18 + + progPosition++; + c90: 85 e0 ldi r24, 0x05 ; 5 + c92: 7d c0 rjmp .+250 ; 0xd8e + + break; + + case 5: + + servoPing = SERVO_POS_LEFT_45; + c94: 8e ea ldi r24, 0xAE ; 174 + c96: 80 93 03 04 sts 0x0403, r24 + + progTimer = 20; + c9a: 84 e1 ldi r24, 0x14 ; 20 + c9c: 80 93 2e 04 sts 0x042E, r24 + + progPosition++; + ca0: 86 e0 ldi r24, 0x06 ; 6 + ca2: 75 c0 rjmp .+234 ; 0xd8e + + break; + + case 6: + + pingSendPing(); + ca4: 0e 94 8c 0b call 0x1718 ; 0x1718 + progTimer = 4; + ca8: 84 e0 ldi r24, 0x04 ; 4 + caa: 80 93 2e 04 sts 0x042E, r24 + + if(pingGetReady()) + cae: 0e 94 a7 0b call 0x174e ; 0x174e + cb2: 88 23 and r24, r24 + cb4: 09 f4 brne .+2 ; 0xcb8 + cb6: 6d c0 rjmp .+218 ; 0xd92 + { + tempLeftDistance = pingGetDistance(); + cb8: 0e 94 a0 0b call 0x1740 ; 0x1740 + cbc: 90 93 38 04 sts 0x0438, r25 + cc0: 80 93 37 04 sts 0x0437, r24 + progTimer = 20; + cc4: 84 e1 ldi r24, 0x14 ; 20 + cc6: 54 c0 rjmp .+168 ; 0xd70 + + break; + + case 7: + + servoPing = SERVO_POS_RIGHT_45; + cc8: 87 e6 ldi r24, 0x67 ; 103 + cca: 80 93 03 04 sts 0x0403, r24 + + progTimer = 40; + cce: 88 e2 ldi r24, 0x28 ; 40 + cd0: 80 93 2e 04 sts 0x042E, r24 + + progPosition++; + cd4: 88 e0 ldi r24, 0x08 ; 8 + cd6: 5b c0 rjmp .+182 ; 0xd8e + + break; + + case 8: + + pingSendPing(); + cd8: 0e 94 8c 0b call 0x1718 ; 0x1718 + progTimer = 4; + cdc: 84 e0 ldi r24, 0x04 ; 4 + cde: 80 93 2e 04 sts 0x042E, r24 + + if(pingGetReady()) + ce2: 0e 94 a7 0b call 0x174e ; 0x174e + ce6: 88 23 and r24, r24 + ce8: 09 f4 brne .+2 ; 0xcec + cea: 53 c0 rjmp .+166 ; 0xd92 + { + tempRightDistance = pingGetDistance(); + cec: 0e 94 a0 0b call 0x1740 ; 0x1740 + cf0: 9c 01 movw r18, r24 + cf2: 90 93 3a 04 sts 0x043A, r25 + cf6: 80 93 39 04 sts 0x0439, r24 + + servoPing = SERVO_POS_CENTER; + cfa: 8c e8 ldi r24, 0x8C ; 140 + cfc: 80 93 03 04 sts 0x0403, r24 + + if((tempLeftDistance < DISTANCE_TO_STOP ) + d00: 80 91 37 04 lds r24, 0x0437 + d04: 90 91 38 04 lds r25, 0x0438 + d08: 45 e1 ldi r20, 0x15 ; 21 + d0a: 8c 37 cpi r24, 0x7C ; 124 + d0c: 94 07 cpc r25, r20 + d0e: 98 f4 brcc .+38 ; 0xd36 + d10: 45 e1 ldi r20, 0x15 ; 21 + d12: 2c 37 cpi r18, 0x7C ; 124 + d14: 34 07 cpc r19, r20 + d16: 78 f4 brcc .+30 ; 0xd36 + && (tempRightDistance < DISTANCE_TO_STOP)) + { + lcdSetPos(0x00); + d18: 80 e0 ldi r24, 0x00 ; 0 + d1a: 0e 94 d3 07 call 0xfa6 ; 0xfa6 + lcdWriteString("Drive: Turn <<< "); + d1e: 85 eb ldi r24, 0xB5 ; 181 + d20: 93 e0 ldi r25, 0x03 ; 3 + d22: 0e 94 3b 08 call 0x1076 ; 0x1076 + + servoMotorLeft = SERVO_POS_MOTOR_RE_FAST; + d26: 88 e6 ldi r24, 0x68 ; 104 + d28: 80 93 04 04 sts 0x0404, r24 + servoMotorRight = SERVO_POS_MOTOR_FW_FAST; + d2c: 86 e8 ldi r24, 0x86 ; 134 + d2e: 80 93 05 04 sts 0x0405, r24 + progTimer = 70; + d32: 86 e4 ldi r24, 0x46 ; 70 + d34: 1d c0 rjmp .+58 ; 0xd70 + } + else if(tempLeftDistance > tempRightDistance) + d36: 28 17 cp r18, r24 + d38: 39 07 cpc r19, r25 + d3a: 60 f4 brcc .+24 ; 0xd54 + { + lcdSetPos(0x00); + d3c: 80 e0 ldi r24, 0x00 ; 0 + d3e: 0e 94 d3 07 call 0xfa6 ; 0xfa6 + lcdWriteString("Drive: Turn < "); + d42: 86 ec ldi r24, 0xC6 ; 198 + d44: 93 e0 ldi r25, 0x03 ; 3 + d46: 0e 94 3b 08 call 0x1076 ; 0x1076 + + servoMotorLeft = SERVO_POS_MOTOR_RE_FAST; + d4a: 88 e6 ldi r24, 0x68 ; 104 + d4c: 80 93 04 04 sts 0x0404, r24 + servoMotorRight = SERVO_POS_MOTOR_FW_FAST; + d50: 86 e8 ldi r24, 0x86 ; 134 + d52: 0b c0 rjmp .+22 ; 0xd6a + progTimer = 40; + } + else + { + lcdSetPos(0x00); + d54: 80 e0 ldi r24, 0x00 ; 0 + d56: 0e 94 d3 07 call 0xfa6 ; 0xfa6 + lcdWriteString("Drive: Turn > "); + d5a: 87 ed ldi r24, 0xD7 ; 215 + d5c: 93 e0 ldi r25, 0x03 ; 3 + d5e: 0e 94 3b 08 call 0x1076 ; 0x1076 + + servoMotorLeft = SERVO_POS_MOTOR_FW_FAST; + d62: 86 e8 ldi r24, 0x86 ; 134 + d64: 80 93 04 04 sts 0x0404, r24 + servoMotorRight = SERVO_POS_MOTOR_RE_FAST; + d68: 88 e6 ldi r24, 0x68 ; 104 + d6a: 80 93 05 04 sts 0x0405, r24 + progTimer = 40; + d6e: 88 e2 ldi r24, 0x28 ; 40 + d70: 80 93 2e 04 sts 0x042E, r24 + } + + progPosition++; + d74: 80 91 2f 04 lds r24, 0x042F + d78: 8f 5f subi r24, 0xFF ; 255 + d7a: 09 c0 rjmp .+18 ; 0xd8e + + break; + + case 9: + + servoMotorLeft = SERVO_POS_MOTOR_STOP; + d7c: 87 e7 ldi r24, 0x77 ; 119 + d7e: 80 93 04 04 sts 0x0404, r24 + servoMotorRight = SERVO_POS_MOTOR_STOP; + d82: 80 93 05 04 sts 0x0405, r24 + + progTimer = 10; + d86: 8a e0 ldi r24, 0x0A ; 10 + d88: 80 93 2e 04 sts 0x042E, r24 + progPosition = 1; + d8c: 81 e0 ldi r24, 0x01 ; 1 + d8e: 80 93 2f 04 sts 0x042F, r24 + + break; + } + + progCounter = 0; + d92: 10 92 2d 04 sts 0x042D, r1 + } + } + + if (roboActive == 3) + d96: 80 91 3b 04 lds r24, 0x043B + d9a: 83 30 cpi r24, 0x03 ; 3 + d9c: 09 f0 breq .+2 ; 0xda0 + d9e: 46 c0 rjmp .+140 ; 0xe2c + { + // Program(2) for random RFID serach + if (++progCounter >= progTimer) + da0: 80 91 2d 04 lds r24, 0x042D + da4: 8f 5f subi r24, 0xFF ; 255 + da6: 80 93 2d 04 sts 0x042D, r24 + daa: 90 91 2e 04 lds r25, 0x042E + dae: 89 17 cp r24, r25 + db0: e8 f1 brcs .+122 ; 0xe2c + { + + switch (progPosition) + db2: 80 91 2f 04 lds r24, 0x042F + db6: 88 23 and r24, r24 + db8: 19 f0 breq .+6 ; 0xdc0 + dba: 81 30 cpi r24, 0x01 ; 1 + dbc: a9 f5 brne .+106 ; 0xe28 + dbe: 1c c0 rjmp .+56 ; 0xdf8 + { + case 0: + + lcdClearDisplay(); + dc0: 0e 94 df 07 call 0xfbe ; 0xfbe + lcdSetLayout(1); + dc4: 81 e0 ldi r24, 0x01 ; 1 + dc6: 0e 94 a8 07 call 0xf50 ; 0xf50 + lcdSetPos(0x00); + dca: 80 e0 ldi r24, 0x00 ; 0 + dcc: 0e 94 d3 07 call 0xfa6 ; 0xfa6 + lcdWriteString("Servo: forward "); + dd0: 88 ee ldi r24, 0xE8 ; 232 + dd2: 93 e0 ldi r25, 0x03 ; 3 + dd4: 0e 94 3b 08 call 0x1076 ; 0x1076 + lcdSetPos(0x10); + dd8: 80 e1 ldi r24, 0x10 ; 16 + dda: 0e 94 d3 07 call 0xfa6 ; 0xfa6 + lcdWriteString("Distance: "); + dde: 88 ef ldi r24, 0xF8 ; 248 + de0: 93 e0 ldi r25, 0x03 ; 3 + de2: 0e 94 3b 08 call 0x1076 ; 0x1076 + + progTimer = 1; + de6: 81 e0 ldi r24, 0x01 ; 1 + de8: 80 93 2e 04 sts 0x042E, r24 + progPosition++; + dec: 80 91 2f 04 lds r24, 0x042F + df0: 8f 5f subi r24, 0xFF ; 255 + df2: 80 93 2f 04 sts 0x042F, r24 + df6: 18 c0 rjmp .+48 ; 0xe28 + + break; + + case 1: + + pingSendPing(); + df8: 0e 94 8c 0b call 0x1718 ; 0x1718 + progTimer = 10; + dfc: 8a e0 ldi r24, 0x0A ; 10 + dfe: 80 93 2e 04 sts 0x042E, r24 + + if(pingGetReady()) + e02: 0e 94 a7 0b call 0x174e ; 0x174e + e06: 88 23 and r24, r24 + e08: 79 f0 breq .+30 ; 0xe28 + { + + tempDistance = pingGetDistance(); + e0a: 0e 94 a0 0b call 0x1740 ; 0x1740 + e0e: 90 93 32 04 sts 0x0432, r25 + e12: 80 93 31 04 sts 0x0431, r24 + lcdSetPos(0x1A); + e16: 8a e1 ldi r24, 0x1A ; 26 + e18: 0e 94 d3 07 call 0xfa6 ; 0xfa6 + lcdWriteHexAsDecimal(tempDistance); + e1c: 80 91 31 04 lds r24, 0x0431 + e20: 90 91 32 04 lds r25, 0x0432 + e24: 0e 94 80 08 call 0x1100 ; 0x1100 + } + + break; + } + + progCounter = 0; + e28: 10 92 2d 04 sts 0x042D, r1 + e2c: 1f 91 pop r17 + e2e: 08 95 ret + +00000e30
: + +} +/*================================================================================================ + Main +================================================================================================*/ +int main (void){ + e30: cf 93 push r28 + e32: df 93 push r29 + + cli(); // Disable global interrupt + e34: f8 94 cli + + initIO(); + e36: 0e 94 e8 00 call 0x1d0 ; 0x1d0 + lcdInit(); + e3a: 0e 94 40 09 call 0x1280 ; 0x1280 + rfIdInit(); + e3e: 0e 94 b0 09 call 0x1360 ; 0x1360 + roboMSPInit(); + e42: 0e 94 30 0a call 0x1460 ; 0x1460 + pingInit(); + e46: 0e 94 ab 0b call 0x1756 ; 0x1756 + + lcdSetIntensity(50); + e4a: 82 e3 ldi r24, 0x32 ; 50 + e4c: 0e 94 99 07 call 0xf32 ; 0xf32 + lcdSetLayout(2); + e50: 82 e0 ldi r24, 0x02 ; 2 + e52: 0e 94 a8 07 call 0xf50 ; 0xf50 + lcdWriteStringP(menuTable[0]); + e56: 8c e9 ldi r24, 0x9C ; 156 + e58: 90 e0 ldi r25, 0x00 ; 0 + e5a: 0e 94 2d 08 call 0x105a ; 0x105a + + rfIdDisable(); + e5e: 0e 94 bb 09 call 0x1376 ; 0x1376 + roboMSPDisable(); + e62: 0e 94 42 0a call 0x1484 ; 0x1484 + + sei(); // Enable global interrupt + e66: 78 94 sei + e68: c0 e6 ldi r28, 0x60 ; 96 + e6a: d1 e0 ldi r29, 0x01 ; 1 + + while(1){ + + if(progDoUpdate) + e6c: 80 91 30 04 lds r24, 0x0430 + e70: 88 23 and r24, r24 + e72: 21 f0 breq .+8 ; 0xe7c + { + progDoUpdate = 0; + e74: 10 92 30 04 sts 0x0430, r1 + updateProgram(); + e78: 0e 94 9b 02 call 0x536 ; 0x536 + } + + // Active-mode 1 (left switch lower position) + if (!bit_is_set(PINA,PA4)) + e7c: cc 99 sbic 0x19, 4 ; 25 + e7e: 08 c0 rjmp .+16 ; 0xe90 + { + if(switchOneCheck) + e80: 80 91 3d 04 lds r24, 0x043D + e84: 88 23 and r24, r24 + e86: 59 f1 breq .+86 ; 0xede + { + activateRobot(3); + e88: 83 e0 ldi r24, 0x03 ; 3 + e8a: 0e 94 5b 01 call 0x2b6 ; 0x2b6 + e8e: 25 c0 rjmp .+74 ; 0xeda + switchOneCheck = 0; + } + } + // Active-mode 2 (left switch middle position) + else if ((bit_is_set(PINA,PA5)) && (bit_is_set(PINA,PA4))) + e90: cd 9b sbis 0x19, 5 ; 25 + e92: 10 c0 rjmp .+32 ; 0xeb4 + e94: cc 9b sbis 0x19, 4 ; 25 + e96: 0e c0 rjmp .+28 ; 0xeb4 + { + if(!switchOneCheck) + e98: 80 91 3d 04 lds r24, 0x043D + e9c: 88 23 and r24, r24 + e9e: f9 f4 brne .+62 ; 0xede + { + deactivateRobot(); + ea0: 0e 94 6f 01 call 0x2de ; 0x2de + rfEnable = 0; + ea4: 10 92 3c 04 sts 0x043C, r1 + switchOneCheck = 1; + ea8: 81 e0 ldi r24, 0x01 ; 1 + eaa: 80 93 3d 04 sts 0x043D, r24 + main(); + eae: 0e 94 18 07 call 0xe30 ; 0xe30
+ eb2: 15 c0 rjmp .+42 ; 0xede + } + } + // Active-mode 3 (left switch upper position) + else if (!bit_is_set(PINA,PA5)) + eb4: cd 99 sbic 0x19, 5 ; 25 + eb6: 13 c0 rjmp .+38 ; 0xede + { + if(switchOneCheck) + eb8: 80 91 3d 04 lds r24, 0x043D + ebc: 88 23 and r24, r24 + ebe: 79 f0 breq .+30 ; 0xede + { + lcdSetLayout(0); + ec0: 80 e0 ldi r24, 0x00 ; 0 + ec2: 0e 94 a8 07 call 0xf50 ; 0xf50 + lcdWriteStringP(menuTable[4]); + ec6: ce 01 movw r24, r28 + ec8: 0e 94 2d 08 call 0x105a ; 0x105a + rfEnable = 1; + ecc: 81 e0 ldi r24, 0x01 ; 1 + ece: 80 93 3c 04 sts 0x043C, r24 + rfIdEnable(); + ed2: 0e 94 bf 09 call 0x137e ; 0x137e + roboMSPEnable(); + ed6: 0e 94 45 0a call 0x148a ; 0x148a + switchOneCheck = 0; + eda: 10 92 3d 04 sts 0x043D, r1 + } + } + + // Active-mode 1 (left switch lower position) + if (!bit_is_set(PINA,PA6)) + ede: ce 99 sbic 0x19, 6 ; 25 + ee0: 06 c0 rjmp .+12 ; 0xeee + { + if(switchTwoCheck) + ee2: 80 91 3e 04 lds r24, 0x043E + ee6: 88 23 and r24, r24 + ee8: 09 f2 breq .-126 ; 0xe6c + { + activateRobot(1); + eea: 81 e0 ldi r24, 0x01 ; 1 + eec: 1b c0 rjmp .+54 ; 0xf24 + switchTwoCheck = 0; + } + } + // Active-mode 2 (left switch middle position) + else if ((bit_is_set(PINA,PA7)) && (bit_is_set(PINA,PA6))) + eee: cf 9b sbis 0x19, 7 ; 25 + ef0: 11 c0 rjmp .+34 ; 0xf14 + ef2: ce 9b sbis 0x19, 6 ; 25 + ef4: 0f c0 rjmp .+30 ; 0xf14 + { + if(!switchTwoCheck) + ef6: 80 91 3e 04 lds r24, 0x043E + efa: 88 23 and r24, r24 + efc: 09 f0 breq .+2 ; 0xf00 + efe: b6 cf rjmp .-148 ; 0xe6c + { + deactivateRobot(); + f00: 0e 94 6f 01 call 0x2de ; 0x2de + rfEnable = 0; + f04: 10 92 3c 04 sts 0x043C, r1 + switchTwoCheck = 1; + f08: 81 e0 ldi r24, 0x01 ; 1 + f0a: 80 93 3e 04 sts 0x043E, r24 + main(); + f0e: 0e 94 18 07 call 0xe30 ; 0xe30
+ f12: ac cf rjmp .-168 ; 0xe6c + } + } + // Active-mode 3 (left switch upper position) + else if (!bit_is_set(PINA,PA7)) + f14: cf 99 sbic 0x19, 7 ; 25 + f16: aa cf rjmp .-172 ; 0xe6c + { + if(switchTwoCheck) + f18: 80 91 3e 04 lds r24, 0x043E + f1c: 88 23 and r24, r24 + f1e: 09 f4 brne .+2 ; 0xf22 + f20: a5 cf rjmp .-182 ; 0xe6c + { + activateRobot(2); + f22: 82 e0 ldi r24, 0x02 ; 2 + f24: 0e 94 5b 01 call 0x2b6 ; 0x2b6 + switchTwoCheck = 0; + f28: 10 92 3e 04 sts 0x043E, r1 + f2c: 9f cf rjmp .-194 ; 0xe6c + +00000f2e : + data=0x83; + break; + } + + return(data); +} + f2e: 99 27 eor r25, r25 + f30: 08 95 ret + +00000f32 : + Return: - +------------------------------------------------------------------------------------------------*/ +void lcdSetIntensity (uint8_t intensity) +{ + + OCR0 = intensity; + f32: 81 bf out 0x31, r24 ; 49 + f34: 08 95 ret + +00000f36 : + + Input: cData + Return: - +------------------------------------------------------------------------------------------------*/ +void lcdWriteIns (uint8_t data) +{ + f36: 1f 93 push r17 + f38: 18 2f mov r17, r24 + + spiSetLowSpeed(); + f3a: 0e 94 f9 0a call 0x15f2 ; 0x15f2 + spiSelectDeviceIO(LCD_CS); + f3e: 80 e0 ldi r24, 0x00 ; 0 + f40: 0e 94 fc 0a call 0x15f8 ; 0x15f8 + LCD_PORT &= ~(1< + f4c: 1f 91 pop r17 + f4e: 08 95 ret + +00000f50 : + Return: - +------------------------------------------------------------------------------------------------*/ +void lcdSetLayout (uint8_t layoutType) +{ + + switch(layoutType) + f50: 81 30 cpi r24, 0x01 ; 1 + f52: 51 f0 breq .+20 ; 0xf68 + f54: 81 30 cpi r24, 0x01 ; 1 + f56: 18 f0 brcs .+6 ; 0xf5e + f58: 82 30 cpi r24, 0x02 ; 2 + f5a: f9 f4 brne .+62 ; 0xf9a + f5c: 12 c0 rjmp .+36 ; 0xf82 + { + case 0: // 3 lines + lcdWriteIns(0x39); + f5e: 89 e3 ldi r24, 0x39 ; 57 + f60: 0e 94 9b 07 call 0xf36 ; 0xf36 + lcdWriteIns(0x1D); // bias = 1/4 , 3 line mode + f64: 8d e1 ldi r24, 0x1D ; 29 + f66: 0a c0 rjmp .+20 ; 0xf7c + break; + + case 1: // 2 lines, Double font on lower position + lcdWriteIns(0x39); + f68: 89 e3 ldi r24, 0x39 ; 57 + f6a: 0e 94 9b 07 call 0xf36 ; 0xf36 + lcdWriteIns(0x1C); // bias = 1/4 , 2 line mode + f6e: 8c e1 ldi r24, 0x1C ; 28 + f70: 0e 94 9b 07 call 0xf36 ; 0xf36 + lcdWriteIns(0x3E); + f74: 8e e3 ldi r24, 0x3E ; 62 + f76: 0e 94 9b 07 call 0xf36 ; 0xf36 + lcdWriteIns(0x10); + f7a: 80 e1 ldi r24, 0x10 ; 16 + f7c: 0e 94 9b 07 call 0xf36 ; 0xf36 + f80: 08 95 ret + break; + + case 2: // 2 lines, Double font on upper position + lcdWriteIns(0x39); + f82: 89 e3 ldi r24, 0x39 ; 57 + f84: 0e 94 9b 07 call 0xf36 ; 0xf36 + lcdWriteIns(0x1C); // bias = 1/4 , 2 line mode + f88: 8c e1 ldi r24, 0x1C ; 28 + f8a: 0e 94 9b 07 call 0xf36 ; 0xf36 + lcdWriteIns(0x3E); + f8e: 8e e3 ldi r24, 0x3E ; 62 + f90: 0e 94 9b 07 call 0xf36 ; 0xf36 + lcdWriteIns(0x18); + f94: 88 e1 ldi r24, 0x18 ; 24 + f96: 0e 94 9b 07 call 0xf36 ; 0xf36 + f9a: 08 95 ret + +00000f9c : + Return: - +------------------------------------------------------------------------------------------------*/ +void lcdSetContrast (uint8_t contrastValue) +{ + + lcdWriteIns(0x70|(0x0F & contrastValue)); + f9c: 8f 70 andi r24, 0x0F ; 15 + f9e: 80 67 ori r24, 0x70 ; 112 + fa0: 0e 94 9b 07 call 0xf36 ; 0xf36 + fa4: 08 95 ret + +00000fa6 : + Return: - +------------------------------------------------------------------------------------------------*/ +void lcdSetPos (uint8_t address) +{ + + lcdWriteIns(0x80|address); + fa6: 80 68 ori r24, 0x80 ; 128 + fa8: 0e 94 9b 07 call 0xf36 ; 0xf36 + fac: 08 95 ret + +00000fae : + Return: - +------------------------------------------------------------------------------------------------*/ +void lcdReturnHome (void) +{ + + lcdWriteIns(0x02); + fae: 82 e0 ldi r24, 0x02 ; 2 + fb0: 0e 94 9b 07 call 0xf36 ; 0xf36 + fb4: 80 e4 ldi r24, 0x40 ; 64 + fb6: 9f e1 ldi r25, 0x1F ; 31 + fb8: 01 97 sbiw r24, 0x01 ; 1 + fba: f1 f7 brne .-4 ; 0xfb8 + fbc: 08 95 ret + +00000fbe : + Return: - +------------------------------------------------------------------------------------------------*/ +void lcdClearDisplay (void) +{ + + lcdWriteIns(0x01); + fbe: 81 e0 ldi r24, 0x01 ; 1 + fc0: 0e 94 9b 07 call 0xf36 ; 0xf36 + fc4: 80 e4 ldi r24, 0x40 ; 64 + fc6: 9f e1 ldi r25, 0x1F ; 31 + fc8: 01 97 sbiw r24, 0x01 ; 1 + fca: f1 f7 brne .-4 ; 0xfc8 + fcc: 08 95 ret + +00000fce : + Return: - +------------------------------------------------------------------------------------------------*/ +void lcdSetBlink (uint8_t value) +{ + + switch (value) + fce: 88 23 and r24, r24 + fd0: 31 f0 breq .+12 ; 0xfde + fd2: 81 30 cpi r24, 0x01 ; 1 + fd4: 49 f4 brne .+18 ; 0xfe8 + { + case ON: + lcdTempReg |= 0x01; + fd6: 80 91 43 04 lds r24, 0x0443 + fda: 81 60 ori r24, 0x01 ; 1 + fdc: 03 c0 rjmp .+6 ; 0xfe4 + break; + case OFF: + lcdTempReg &= ~(0x01); + fde: 80 91 43 04 lds r24, 0x0443 + fe2: 8e 7f andi r24, 0xFE ; 254 + fe4: 80 93 43 04 sts 0x0443, r24 + break; + } + + lcdWriteIns(0x08|lcdTempReg); + fe8: 80 91 43 04 lds r24, 0x0443 + fec: 88 60 ori r24, 0x08 ; 8 + fee: 0e 94 9b 07 call 0xf36 ; 0xf36 + ff2: 08 95 ret + +00000ff4 : + Return: - +------------------------------------------------------------------------------------------------*/ +void lcdSetCursor (uint8_t value) +{ + + switch (value) + ff4: 88 23 and r24, r24 + ff6: 31 f0 breq .+12 ; 0x1004 + ff8: 81 30 cpi r24, 0x01 ; 1 + ffa: 49 f4 brne .+18 ; 0x100e + { + case ON: + lcdTempReg |= 0x02; + ffc: 80 91 43 04 lds r24, 0x0443 + 1000: 82 60 ori r24, 0x02 ; 2 + 1002: 03 c0 rjmp .+6 ; 0x100a + break; + case OFF: + lcdTempReg &= ~(0x02); + 1004: 80 91 43 04 lds r24, 0x0443 + 1008: 8d 7f andi r24, 0xFD ; 253 + 100a: 80 93 43 04 sts 0x0443, r24 + break; + } + + lcdWriteIns(0x08|lcdTempReg); + 100e: 80 91 43 04 lds r24, 0x0443 + 1012: 88 60 ori r24, 0x08 ; 8 + 1014: 0e 94 9b 07 call 0xf36 ; 0xf36 + 1018: 08 95 ret + +0000101a : + Return: - +------------------------------------------------------------------------------------------------*/ +void lcdSetDisplay (uint8_t value) +{ + + switch (value) + 101a: 88 23 and r24, r24 + 101c: 31 f0 breq .+12 ; 0x102a + 101e: 81 30 cpi r24, 0x01 ; 1 + 1020: 49 f4 brne .+18 ; 0x1034 + { + case ON: + lcdTempReg |= 0x04; + 1022: 80 91 43 04 lds r24, 0x0443 + 1026: 84 60 ori r24, 0x04 ; 4 + 1028: 03 c0 rjmp .+6 ; 0x1030 + break; + case OFF: + lcdTempReg &= ~(0x04); + 102a: 80 91 43 04 lds r24, 0x0443 + 102e: 8b 7f andi r24, 0xFB ; 251 + 1030: 80 93 43 04 sts 0x0443, r24 + break; + } + + lcdWriteIns(0x08|lcdTempReg); + 1034: 80 91 43 04 lds r24, 0x0443 + 1038: 88 60 ori r24, 0x08 ; 8 + 103a: 0e 94 9b 07 call 0xf36 ; 0xf36 + 103e: 08 95 ret + +00001040 : + + Input: cData + Return: - +------------------------------------------------------------------------------------------------*/ +void lcdWriteChar (uint8_t data) +{ + 1040: 1f 93 push r17 + 1042: 18 2f mov r17, r24 + + spiSetLowSpeed(); + 1044: 0e 94 f9 0a call 0x15f2 ; 0x15f2 + spiSelectDeviceIO(LCD_CS); + 1048: 80 e0 ldi r24, 0x00 ; 0 + 104a: 0e 94 fc 0a call 0x15f8 ; 0x15f8 + LCD_PORT |= (1< + 1056: 1f 91 pop r17 + 1058: 08 95 ret + +0000105a : + + Input: *stringPointer (int[]) + Return: - +------------------------------------------------------------------------------------------------*/ +void lcdWriteStringP (const uint8_t *progmemStringPointer) +{ + 105a: cf 93 push r28 + 105c: df 93 push r29 + 105e: ec 01 movw r28, r24 + 1060: 02 c0 rjmp .+4 ; 0x1066 + + register uint8_t c; + + while((c = pgm_read_byte(progmemStringPointer++))) + { + lcdWriteChar(c); + 1062: 0e 94 20 08 call 0x1040 ; 0x1040 + 1066: fe 01 movw r30, r28 +void lcdWriteStringP (const uint8_t *progmemStringPointer) +{ + + register uint8_t c; + + while((c = pgm_read_byte(progmemStringPointer++))) + 1068: 21 96 adiw r28, 0x01 ; 1 + 106a: 84 91 lpm r24, Z + 106c: 88 23 and r24, r24 + 106e: c9 f7 brne .-14 ; 0x1062 + 1070: df 91 pop r29 + 1072: cf 91 pop r28 + 1074: 08 95 ret + +00001076 : + + Input: *stringPointer (int[]) + Return: - +------------------------------------------------------------------------------------------------*/ +void lcdWriteString (const uint8_t *stringPointer) +{ + 1076: cf 93 push r28 + 1078: df 93 push r29 + 107a: ec 01 movw r28, r24 + 107c: 02 c0 rjmp .+4 ; 0x1082 + + register uint8_t c; + + while((c = *stringPointer++)) + { + lcdWriteChar(c); + 107e: 0e 94 20 08 call 0x1040 ; 0x1040 +void lcdWriteString (const uint8_t *stringPointer) +{ + + register uint8_t c; + + while((c = *stringPointer++)) + 1082: 89 91 ld r24, Y+ + 1084: 88 23 and r24, r24 + 1086: d9 f7 brne .-10 ; 0x107e + 1088: df 91 pop r29 + 108a: cf 91 pop r28 + 108c: 08 95 ret + +0000108e : + Description: Writes hex to LCD + Input: hexValue + Output: - +----------------------------------------------------------------------------------------------------------*/ +void lcdWriteHex(uint16_t hexValue) +{ + 108e: cf 93 push r28 + 1090: df 93 push r29 + 1092: cd b7 in r28, 0x3d ; 61 + 1094: de b7 in r29, 0x3e ; 62 + 1096: 27 97 sbiw r28, 0x07 ; 7 + 1098: 0f b6 in r0, 0x3f ; 63 + 109a: f8 94 cli + 109c: de bf out 0x3e, r29 ; 62 + 109e: 0f be out 0x3f, r0 ; 63 + 10a0: cd bf out 0x3d, r28 ; 61 + 10a2: bc 01 movw r22, r24 + uint8_t tempString[7]; + + uint8_t n=0; + uint8_t i; + + tempString[n] = '0'; + 10a4: 80 e3 ldi r24, 0x30 ; 48 + 10a6: 89 83 std Y+1, r24 ; 0x01 + n++; + tempString[n] = 'x'; + 10a8: 88 e7 ldi r24, 0x78 ; 120 + 10aa: 8a 83 std Y+2, r24 ; 0x02 + 10ac: fe 01 movw r30, r28 + 10ae: 33 96 adiw r30, 0x03 ; 3 + 10b0: 4c e0 ldi r20, 0x0C ; 12 + 10b2: 50 e0 ldi r21, 0x00 ; 0 + 10b4: 33 e0 ldi r19, 0x03 ; 3 + n++; + + for(i=0;i<4;i++) + { + + if(((hexValue>>(12-(i*4)))&0x000F)>0x0009) + 10b6: cb 01 movw r24, r22 + 10b8: 04 2e mov r0, r20 + 10ba: 02 c0 rjmp .+4 ; 0x10c0 + 10bc: 96 95 lsr r25 + 10be: 87 95 ror r24 + 10c0: 0a 94 dec r0 + 10c2: e2 f7 brpl .-8 ; 0x10bc + 10c4: 28 2f mov r18, r24 + 10c6: 2f 70 andi r18, 0x0F ; 15 + 10c8: 8f 70 andi r24, 0x0F ; 15 + 10ca: 90 70 andi r25, 0x00 ; 0 + 10cc: 0a 97 sbiw r24, 0x0a ; 10 + 10ce: 10 f0 brcs .+4 ; 0x10d4 + { + tempString[n] = (((hexValue>>(12-(i*4)))&0x000F)+0x37); + 10d0: 29 5c subi r18, 0xC9 ; 201 + 10d2: 01 c0 rjmp .+2 ; 0x10d6 + n++; + } + else + { + tempString[n] = (((hexValue>>(12-(i*4)))&0x000F)|0x30); + 10d4: 20 63 ori r18, 0x30 ; 48 + 10d6: 20 83 st Z, r18 + 10d8: 44 50 subi r20, 0x04 ; 4 + 10da: 50 40 sbci r21, 0x00 ; 0 + 10dc: 3f 5f subi r19, 0xFF ; 255 + 10de: 31 96 adiw r30, 0x01 ; 1 + tempString[n] = '0'; + n++; + tempString[n] = 'x'; + n++; + + for(i=0;i<4;i++) + 10e0: 37 30 cpi r19, 0x07 ; 7 + 10e2: 49 f7 brne .-46 ; 0x10b6 + tempString[n] = (((hexValue>>(12-(i*4)))&0x000F)|0x30); + n++; + } + } + + tempString[n] = '\0'; + 10e4: 1f 82 std Y+7, r1 ; 0x07 + + lcdWriteString(tempString); + 10e6: ce 01 movw r24, r28 + 10e8: 01 96 adiw r24, 0x01 ; 1 + 10ea: 0e 94 3b 08 call 0x1076 ; 0x1076 + 10ee: 27 96 adiw r28, 0x07 ; 7 + 10f0: 0f b6 in r0, 0x3f ; 63 + 10f2: f8 94 cli + 10f4: de bf out 0x3e, r29 ; 62 + 10f6: 0f be out 0x3f, r0 ; 63 + 10f8: cd bf out 0x3d, r28 ; 61 + 10fa: df 91 pop r29 + 10fc: cf 91 pop r28 + 10fe: 08 95 ret + +00001100 : + Description: Writes hex value as decimal to LCD + Input: sensorValue + Output: - +----------------------------------------------------------------------------------------------------------*/ +void lcdWriteHexAsDecimal(uint16_t hexValue) +{ + 1100: 8f 92 push r8 + 1102: 9f 92 push r9 + 1104: af 92 push r10 + 1106: bf 92 push r11 + 1108: cf 92 push r12 + 110a: df 92 push r13 + 110c: ef 92 push r14 + 110e: ff 92 push r15 + 1110: 0f 93 push r16 + 1112: 1f 93 push r17 + 1114: cf 93 push r28 + 1116: df 93 push r29 + 1118: cd b7 in r28, 0x3d ; 61 + 111a: de b7 in r29, 0x3e ; 62 + 111c: 25 97 sbiw r28, 0x05 ; 5 + 111e: 0f b6 in r0, 0x3f ; 63 + 1120: f8 94 cli + 1122: de bf out 0x3e, r29 ; 62 + 1124: 0f be out 0x3f, r0 ; 63 + 1126: cd bf out 0x3d, r28 ; 61 + 1128: 8c 01 movw r16, r24 + uint8_t tempString[5]={" "}; + 112a: de 01 movw r26, r28 + 112c: 11 96 adiw r26, 0x01 ; 1 + 112e: e8 e0 ldi r30, 0x08 ; 8 + 1130: f4 e0 ldi r31, 0x04 ; 4 + 1132: 85 e0 ldi r24, 0x05 ; 5 + 1134: 01 90 ld r0, Z+ + 1136: 0d 92 st X+, r0 + 1138: 81 50 subi r24, 0x01 ; 1 + 113a: e1 f7 brne .-8 ; 0x1134 + uint8_t secondDigit = 0; + uint8_t thirdDigit = 0; + uint8_t fourthDigit = 0; + uint8_t fifthDigit = 0; + + firstDigit = (hexValue/10000); + 113c: c8 01 movw r24, r16 + 113e: 60 e1 ldi r22, 0x10 ; 16 + 1140: 77 e2 ldi r23, 0x27 ; 39 + 1142: 0e 94 d3 0b call 0x17a6 ; 0x17a6 <__udivmodhi4> + 1146: fb 01 movw r30, r22 + 1148: e6 2e mov r14, r22 + secondDigit = ((hexValue-(firstDigit*10000))/1000); + 114a: 26 2f mov r18, r22 + 114c: 33 27 eor r19, r19 + 114e: 80 e1 ldi r24, 0x10 ; 16 + 1150: 97 e2 ldi r25, 0x27 ; 39 + 1152: 28 9f mul r18, r24 + 1154: 60 01 movw r12, r0 + 1156: 29 9f mul r18, r25 + 1158: d0 0c add r13, r0 + 115a: 38 9f mul r19, r24 + 115c: d0 0c add r13, r0 + 115e: 11 24 eor r1, r1 + 1160: c8 01 movw r24, r16 + 1162: 8c 19 sub r24, r12 + 1164: 9d 09 sbc r25, r13 + 1166: 68 ee ldi r22, 0xE8 ; 232 + 1168: 73 e0 ldi r23, 0x03 ; 3 + 116a: 0e 94 d3 0b call 0x17a6 ; 0x17a6 <__udivmodhi4> + 116e: f6 2e mov r15, r22 + thirdDigit = ((hexValue-(firstDigit*10000+(secondDigit*1000)))/100); + 1170: 26 2f mov r18, r22 + 1172: 33 27 eor r19, r19 + 1174: 88 ee ldi r24, 0xE8 ; 232 + 1176: 93 e0 ldi r25, 0x03 ; 3 + 1178: 28 9f mul r18, r24 + 117a: 40 01 movw r8, r0 + 117c: 29 9f mul r18, r25 + 117e: 90 0c add r9, r0 + 1180: 38 9f mul r19, r24 + 1182: 90 0c add r9, r0 + 1184: 11 24 eor r1, r1 + 1186: 94 01 movw r18, r8 + 1188: 2c 0d add r18, r12 + 118a: 3d 1d adc r19, r13 + 118c: c8 01 movw r24, r16 + 118e: 82 1b sub r24, r18 + 1190: 93 0b sbc r25, r19 + 1192: 64 e6 ldi r22, 0x64 ; 100 + 1194: 70 e0 ldi r23, 0x00 ; 0 + 1196: 0e 94 d3 0b call 0x17a6 ; 0x17a6 <__udivmodhi4> + 119a: 46 2f mov r20, r22 + fourthDigit = ((hexValue-(firstDigit*10000+(secondDigit*1000)+(thirdDigit*100)))/10); + 119c: 84 e6 ldi r24, 0x64 ; 100 + 119e: 68 9f mul r22, r24 + 11a0: 50 01 movw r10, r0 + 11a2: 11 24 eor r1, r1 + 11a4: 2a 0d add r18, r10 + 11a6: 3b 1d adc r19, r11 + 11a8: c8 01 movw r24, r16 + 11aa: 82 1b sub r24, r18 + 11ac: 93 0b sbc r25, r19 + 11ae: 6a e0 ldi r22, 0x0A ; 10 + 11b0: 70 e0 ldi r23, 0x00 ; 0 + 11b2: 0e 94 d3 0b call 0x17a6 ; 0x17a6 <__udivmodhi4> + fifthDigit = (hexValue-(firstDigit*10000+(secondDigit*1000)+(thirdDigit*100)+(fourthDigit*10))); + + uint8_t n = 0; + + if(firstDigit) + 11b6: ee 23 and r30, r30 + 11b8: 11 f4 brne .+4 ; 0x11be + 11ba: 30 e0 ldi r19, 0x00 ; 0 + 11bc: 04 c0 rjmp .+8 ; 0x11c6 + { + tempString[n] = (0x30|firstDigit); + 11be: 8e 2f mov r24, r30 + 11c0: 80 63 ori r24, 0x30 ; 48 + 11c2: 89 83 std Y+1, r24 ; 0x01 + 11c4: 31 e0 ldi r19, 0x01 ; 1 + n++; + } + if(secondDigit||firstDigit) + 11c6: ff 20 and r15, r15 + 11c8: 11 f4 brne .+4 ; 0x11ce + 11ca: ee 20 and r14, r14 + 11cc: 39 f0 breq .+14 ; 0x11dc + { + tempString[n] = (0x30|secondDigit); + 11ce: fe 01 movw r30, r28 + 11d0: e3 0f add r30, r19 + 11d2: f1 1d adc r31, r1 + 11d4: 8f 2d mov r24, r15 + 11d6: 80 63 ori r24, 0x30 ; 48 + 11d8: 81 83 std Z+1, r24 ; 0x01 + n++; + 11da: 3f 5f subi r19, 0xFF ; 255 + } + if(thirdDigit||secondDigit||firstDigit) + 11dc: 44 23 and r20, r20 + 11de: 21 f4 brne .+8 ; 0x11e8 + 11e0: ff 20 and r15, r15 + 11e2: 11 f4 brne .+4 ; 0x11e8 + 11e4: ee 20 and r14, r14 + 11e6: 39 f0 breq .+14 ; 0x11f6 + { + tempString[n] = (0x30|thirdDigit); + 11e8: fe 01 movw r30, r28 + 11ea: e3 0f add r30, r19 + 11ec: f1 1d adc r31, r1 + 11ee: 84 2f mov r24, r20 + 11f0: 80 63 ori r24, 0x30 ; 48 + 11f2: 81 83 std Z+1, r24 ; 0x01 + n++; + 11f4: 3f 5f subi r19, 0xFF ; 255 + } + if(fourthDigit||thirdDigit||secondDigit||firstDigit) + 11f6: 66 23 and r22, r22 + 11f8: 31 f4 brne .+12 ; 0x1206 + 11fa: 44 23 and r20, r20 + 11fc: 21 f4 brne .+8 ; 0x1206 + 11fe: ff 20 and r15, r15 + 1200: 11 f4 brne .+4 ; 0x1206 + 1202: ee 20 and r14, r14 + 1204: 39 f0 breq .+14 ; 0x1214 + { + tempString[n] = (0x30|fourthDigit); + 1206: fe 01 movw r30, r28 + 1208: e3 0f add r30, r19 + 120a: f1 1d adc r31, r1 + 120c: 86 2f mov r24, r22 + 120e: 80 63 ori r24, 0x30 ; 48 + 1210: 81 83 std Z+1, r24 ; 0x01 + n++; + 1212: 3f 5f subi r19, 0xFF ; 255 + } + tempString[n] = (0x30|fifthDigit); + 1214: ae 01 movw r20, r28 + 1216: 4f 5f subi r20, 0xFF ; 255 + 1218: 5f 4f sbci r21, 0xFF ; 255 + 121a: fa 01 movw r30, r20 + 121c: e3 0f add r30, r19 + 121e: f1 1d adc r31, r1 + 1220: 20 2f mov r18, r16 + 1222: 2c 19 sub r18, r12 + 1224: 28 19 sub r18, r8 + 1226: 2a 19 sub r18, r10 + 1228: 8a e0 ldi r24, 0x0A ; 10 + 122a: 68 9f mul r22, r24 + 122c: c0 01 movw r24, r0 + 122e: 11 24 eor r1, r1 + 1230: 28 1b sub r18, r24 + 1232: 20 63 ori r18, 0x30 ; 48 + 1234: 20 83 st Z, r18 + n++; + 1236: 23 2f mov r18, r19 + 1238: 04 c0 rjmp .+8 ; 0x1242 + + while(n<5) + { + tempString[n] = ' '; + 123a: ae 0f add r26, r30 + 123c: bf 1f adc r27, r31 + 123e: 80 e2 ldi r24, 0x20 ; 32 + 1240: 8c 93 st X, r24 + n++; + 1242: 2f 5f subi r18, 0xFF ; 255 + 1244: da 01 movw r26, r20 + 1246: e2 2f mov r30, r18 + 1248: ff 27 eor r31, r31 + n++; + } + tempString[n] = (0x30|fifthDigit); + n++; + + while(n<5) + 124a: 25 30 cpi r18, 0x05 ; 5 + 124c: b0 f3 brcs .-20 ; 0x123a + { + tempString[n] = ' '; + n++; + } + tempString[n] = '\0'; + 124e: e4 0f add r30, r20 + 1250: f5 1f adc r31, r21 + 1252: 10 82 st Z, r1 + + lcdWriteString(tempString); + 1254: ca 01 movw r24, r20 + 1256: 0e 94 3b 08 call 0x1076 ; 0x1076 + 125a: 25 96 adiw r28, 0x05 ; 5 + 125c: 0f b6 in r0, 0x3f ; 63 + 125e: f8 94 cli + 1260: de bf out 0x3e, r29 ; 62 + 1262: 0f be out 0x3f, r0 ; 63 + 1264: cd bf out 0x3d, r28 ; 61 + 1266: df 91 pop r29 + 1268: cf 91 pop r28 + 126a: 1f 91 pop r17 + 126c: 0f 91 pop r16 + 126e: ff 90 pop r15 + 1270: ef 90 pop r14 + 1272: df 90 pop r13 + 1274: cf 90 pop r12 + 1276: bf 90 pop r11 + 1278: af 90 pop r10 + 127a: 9f 90 pop r9 + 127c: 8f 90 pop r8 + 127e: 08 95 ret + +00001280 : + Output: - +------------------------------------------------------------------------------------------------*/ +void lcdInit (void) +{ + + spiInit(); + 1280: 0e 94 06 0b call 0x160c ; 0x160c + + //LCD I/O + LCD_DDR |= (1< + + lcdWriteIns(0x50); // booster off, contrast C5, set C4 + 1296: 80 e5 ldi r24, 0x50 ; 80 + 1298: 0e 94 9b 07 call 0xf36 ; 0xf36 + lcdWriteIns(0x6C); // set voltage follower and gain + 129c: 8c e6 ldi r24, 0x6C ; 108 + 129e: 0e 94 9b 07 call 0xf36 ; 0xf36 + lcdWriteIns(0x06); // cursor auto-increment right + 12a2: 86 e0 ldi r24, 0x06 ; 6 + 12a4: 0e 94 9b 07 call 0xf36 ; 0xf36 + + lcdSetDisplay(ON); + 12a8: 81 e0 ldi r24, 0x01 ; 1 + 12aa: 0e 94 0d 08 call 0x101a ; 0x101a + lcdSetCursor(OFF); + 12ae: 80 e0 ldi r24, 0x00 ; 0 + 12b0: 0e 94 fa 07 call 0xff4 ; 0xff4 + lcdSetBlink(OFF); + 12b4: 80 e0 ldi r24, 0x00 ; 0 + 12b6: 0e 94 e7 07 call 0xfce ; 0xfce + lcdSetContrast(6); + 12ba: 86 e0 ldi r24, 0x06 ; 6 + 12bc: 0e 94 ce 07 call 0xf9c ; 0xf9c + lcdClearDisplay(); + 12c0: 0e 94 df 07 call 0xfbe ; 0xfbe + Return: - +------------------------------------------------------------------------------------------------*/ +void lcdSetIntensity (uint8_t intensity) +{ + + OCR0 = intensity; + 12c4: 11 be out 0x31, r1 ; 49 + 12c6: 08 95 ret + +000012c8 : + Input: - + Return: pointer to rfIdTagBuffer +------------------------------------------------------------------------------------------------*/ +uint8_t* rfIdGetTag( void ) +{ + rfIdGotTag = 0; + 12c8: 10 92 45 04 sts 0x0445, r1 + //PORT_RFID |= (1<: + Input: - + Return: - +------------------------------------------------------------------------------------------------*/ +void rfIdClearBuffer( void ) +{ + rfIdByteCount = 0; + 12d2: 10 92 44 04 sts 0x0444, r1 + PORT_RFID &= ~(1<: + + Input: - + Return: 1 if true, else 0 +------------------------------------------------------------------------------------------------*/ +uint8_t rfIdGetTagPresent( void ) +{ + 12da: 80 91 45 04 lds r24, 0x0445 + return rfIdGotTag; +} + 12de: 99 27 eor r25, r25 + 12e0: 08 95 ret + +000012e2 <__vector_19>: + Description: UART(0) Receive Complete Interrupt + + Input: - + Output: - +------------------------------------------------------------------------------------------------*/ +SIGNAL (SIG_USART0_RECV){ + 12e2: 1f 92 push r1 + 12e4: 0f 92 push r0 + 12e6: 0f b6 in r0, 0x3f ; 63 + 12e8: 0f 92 push r0 + 12ea: 11 24 eor r1, r1 + 12ec: 2f 93 push r18 + 12ee: 3f 93 push r19 + 12f0: 4f 93 push r20 + 12f2: 5f 93 push r21 + 12f4: 6f 93 push r22 + 12f6: 7f 93 push r23 + 12f8: 8f 93 push r24 + 12fa: 9f 93 push r25 + 12fc: af 93 push r26 + 12fe: bf 93 push r27 + 1300: ef 93 push r30 + 1302: ff 93 push r31 + + uint8_t data = usart0Receive(); + 1304: 0e 94 30 0b call 0x1660 ; 0x1660 + + if (rfIdByteCount == 0) + 1308: 90 91 44 04 lds r25, 0x0444 + 130c: 99 23 and r25, r25 + 130e: 31 f4 brne .+12 ; 0x131c <__vector_19+0x3a> + { + if (data == START_BYTE) + 1310: 8a 30 cpi r24, 0x0A ; 10 + 1312: a9 f4 brne .+42 ; 0x133e <__vector_19+0x5c> + { + rfIdByteCount++; + 1314: 81 e0 ldi r24, 0x01 ; 1 + 1316: 80 93 44 04 sts 0x0444, r24 + 131a: 11 c0 rjmp .+34 ; 0x133e <__vector_19+0x5c> + } + } + else if (rfIdByteCount < 11) + 131c: 9b 30 cpi r25, 0x0B ; 11 + 131e: 48 f4 brcc .+18 ; 0x1332 <__vector_19+0x50> + { + rfIdTagBuffer[rfIdByteCount - 1] = data; + 1320: e9 2f mov r30, r25 + 1322: ff 27 eor r31, r31 + 1324: eb 5b subi r30, 0xBB ; 187 + 1326: fb 4f sbci r31, 0xFB ; 251 + 1328: 80 83 st Z, r24 + rfIdByteCount++; + 132a: 9f 5f subi r25, 0xFF ; 255 + 132c: 90 93 44 04 sts 0x0444, r25 + 1330: 06 c0 rjmp .+12 ; 0x133e <__vector_19+0x5c> + } + else if (rfIdByteCount == 11) + 1332: 9b 30 cpi r25, 0x0B ; 11 + 1334: 21 f4 brne .+8 ; 0x133e <__vector_19+0x5c> + { + PORT_RFID |= (1<: + Input: - + Return: - +------------------------------------------------------------------------------------------------*/ +void rfIdInit(void) +{ + usart0Init(); + 1360: 0e 94 3d 0b call 0x167a ; 0x167a + usart0SetBaud(USART0_BAUD_RATE); + 1364: 80 e6 ldi r24, 0x60 ; 96 + 1366: 99 e0 ldi r25, 0x09 ; 9 + 1368: 0e 94 10 0b call 0x1620 ; 0x1620 + rfIdByteCount = 0; + 136c: 10 92 44 04 sts 0x0444, r1 + + DDR_RFID |= (1<: + Input: - + Return: - +------------------------------------------------------------------------------------------------*/ +void rfIdDisable(void) +{ + usart0RxIntDisable(); + 1376: 0e 94 3b 0b call 0x1676 ; 0x1676 + PORT_RFID |= (1<: + Input: - + Return: - +------------------------------------------------------------------------------------------------*/ +void rfIdEnable(void) +{ + PORT_RFID &= ~(1< + 1384: 08 95 ret + +00001386 : + uint8_t firstDigit = 0; + uint8_t secondDigit = 0; + uint8_t thirdDigit = 0; + uint8_t fourthDigit = 0; + uint8_t fifthDigit = 0; + + 1386: 80 91 0e 04 lds r24, 0x040E + firstDigit = (hexValue/10000); + 138a: 10 92 0e 04 sts 0x040E, r1 + secondDigit = ((hexValue-(firstDigit*10000))/1000); + thirdDigit = ((hexValue-(firstDigit*10000+(secondDigit*1000)))/100); + 138e: 99 27 eor r25, r25 + 1390: 08 95 ret + +00001392 : + + if(firstDigit) + { + tempString[n] = (0x30|firstDigit); + n++; + } + 1392: bc 01 movw r22, r24 + 1394: 40 e0 ldi r20, 0x00 ; 0 + 1396: 50 e0 ldi r21, 0x00 ; 0 + 1398: 20 e0 ldi r18, 0x00 ; 0 + 139a: 30 e0 ldi r19, 0x00 ; 0 + if(secondDigit||firstDigit) + { + tempString[n] = (0x30|secondDigit); + n++; + } + if(thirdDigit||secondDigit||firstDigit) + 139c: fb 01 movw r30, r22 + 139e: e2 0f add r30, r18 + 13a0: f3 1f adc r31, r19 + 13a2: 80 81 ld r24, Z + 13a4: 48 0f add r20, r24 + 13a6: 51 1d adc r21, r1 + 13a8: 2f 5f subi r18, 0xFF ; 255 + 13aa: 3f 4f sbci r19, 0xFF ; 255 + n++; + } + if(secondDigit||firstDigit) + { + tempString[n] = (0x30|secondDigit); + n++; + 13ac: 2c 30 cpi r18, 0x0C ; 12 + 13ae: 31 05 cpc r19, r1 + 13b0: a9 f7 brne .-22 ; 0x139c + { + tempString[n] = (0x30|thirdDigit); + n++; + } + if(fourthDigit||thirdDigit||secondDigit||firstDigit) + { + 13b2: 84 2f mov r24, r20 + 13b4: 99 27 eor r25, r25 + 13b6: 08 95 ret + +000013b8 : + + Input: data - char to correct + Return: corrected char +------------------------------------------------------------------------------------------------*/ +uint8_t lcdEngToSwe (uint8_t data) +{ + 13b8: 1f 93 push r17 + + 13ba: 10 91 62 04 lds r17, 0x0462 + 13be: 86 e5 ldi r24, 0x56 ; 86 + 13c0: 94 e0 ldi r25, 0x04 ; 4 + 13c2: 0e 94 c9 09 call 0x1392 ; 0x1392 + 13c6: 18 17 cp r17, r24 + 13c8: 51 f5 brne .+84 ; 0x141e + switch(data) + { + 13ca: 80 91 57 04 lds r24, 0x0457 + 13ce: 99 27 eor r25, r25 + 13d0: 8f 70 andi r24, 0x0F ; 15 + 13d2: 90 70 andi r25, 0x00 ; 0 + 13d4: 89 2b or r24, r25 + 13d6: 19 f5 brne .+70 ; 0x141e + case 'Ö': + data=0x99; + 13d8: 80 91 58 04 lds r24, 0x0458 + 13dc: 82 34 cpi r24, 0x42 ; 66 + 13de: b1 f0 breq .+44 ; 0x140c + 13e0: 83 34 cpi r24, 0x43 ; 67 + 13e2: 28 f4 brcc .+10 ; 0x13ee + 13e4: 80 32 cpi r24, 0x20 ; 32 + 13e6: 61 f0 breq .+24 ; 0x1400 + 13e8: 81 34 cpi r24, 0x41 ; 65 + 13ea: c9 f4 brne .+50 ; 0x141e + 13ec: 0c c0 rjmp .+24 ; 0x1406 + 13ee: 84 34 cpi r24, 0x44 ; 68 + 13f0: 99 f0 breq .+38 ; 0x1418 + 13f2: 84 34 cpi r24, 0x44 ; 68 + 13f4: 70 f0 brcs .+28 ; 0x1412 + 13f6: 8a 3f cpi r24, 0xFA ; 250 + 13f8: 91 f4 brne .+36 ; 0x141e + 13fa: 85 e0 ldi r24, 0x05 ; 5 + 13fc: 90 e0 ldi r25, 0x00 ; 0 + 13fe: 11 c0 rjmp .+34 ; 0x1422 + 1400: 81 e0 ldi r24, 0x01 ; 1 + 1402: 90 e0 ldi r25, 0x00 ; 0 + 1404: 0e c0 rjmp .+28 ; 0x1422 + break; + case 'ö': + data=0x94; + 1406: 82 e0 ldi r24, 0x02 ; 2 + 1408: 90 e0 ldi r25, 0x00 ; 0 + 140a: 0b c0 rjmp .+22 ; 0x1422 + break; + case 'Ä': + 140c: 83 e0 ldi r24, 0x03 ; 3 + 140e: 90 e0 ldi r25, 0x00 ; 0 + 1410: 08 c0 rjmp .+16 ; 0x1422 + data=0x8E; + break; + 1412: 84 e0 ldi r24, 0x04 ; 4 + 1414: 90 e0 ldi r25, 0x00 ; 0 + 1416: 05 c0 rjmp .+10 ; 0x1422 + case 'ä': + data=0x84; + 1418: 86 e0 ldi r24, 0x06 ; 6 + 141a: 90 e0 ldi r25, 0x00 ; 0 + 141c: 02 c0 rjmp .+4 ; 0x1422 + break; + case 'Å': + 141e: 80 e0 ldi r24, 0x00 ; 0 + 1420: 90 e0 ldi r25, 0x00 ; 0 + 1422: 1f 91 pop r17 + 1424: 08 95 ret + +00001426 : + Input: cIntensity + Return: - +------------------------------------------------------------------------------------------------*/ +void lcdSetIntensity (uint8_t intensity) +{ + + 1426: dc 01 movw r26, r24 + 1428: e1 e1 ldi r30, 0x11 ; 17 + 142a: f4 e0 ldi r31, 0x04 ; 4 + OCR0 = intensity; + +} +/*------------------------------------------------------------------------------------------------ + lcdWriteChar + 142c: 8d 91 ld r24, X+ + 142e: 81 93 st Z+, r24 +void lcdSetIntensity (uint8_t intensity) +{ + + OCR0 = intensity; + +} + 1430: 84 e0 ldi r24, 0x04 ; 4 + 1432: eb 31 cpi r30, 0x1B ; 27 + 1434: f8 07 cpc r31, r24 + 1436: d1 f7 brne .-12 ; 0x142c +/*------------------------------------------------------------------------------------------------ + lcdWriteChar + + Description: Writes character data to LCD. + + 1438: cf 01 movw r24, r30 + 143a: 0c 97 sbiw r24, 0x0c ; 12 + 143c: 0e 94 c9 09 call 0x1392 ; 0x1392 + 1440: 80 93 1b 04 sts 0x041B, r24 + Input: cData + Return: - + 1444: 81 e0 ldi r24, 0x01 ; 1 + 1446: 80 93 54 04 sts 0x0454, r24 + 144a: 08 95 ret + +0000144c : + spiSelectDeviceIO(LCD_CS); + LCD_PORT |= (1<: + Input: cData + Return: - +------------------------------------------------------------------------------------------------*/ +void lcdWriteIns (uint8_t data) +{ + + 1454: 10 92 52 04 sts 0x0452, r1 + spiSetLowSpeed(); + 1458: 81 e0 ldi r24, 0x01 ; 1 + 145a: 80 93 55 04 sts 0x0455, r24 + 145e: 08 95 ret + +00001460 : + + Input: *stringPointer (int[]) + Return: - +------------------------------------------------------------------------------------------------*/ +void lcdWriteStringP (const uint8_t *progmemStringPointer) +{ + 1460: 0e 94 7d 0b call 0x16fa ; 0x16fa + + 1464: 80 e8 ldi r24, 0x80 ; 128 + 1466: 95 e2 ldi r25, 0x25 ; 37 + 1468: 0e 94 4c 0b call 0x1698 ; 0x1698 + register uint8_t c; + 146c: 8c 9a sbi 0x11, 4 ; 17 + + while((c = pgm_read_byte(progmemStringPointer++))) + 146e: 10 92 52 04 sts 0x0452, r1 + { + 1472: 81 e0 ldi r24, 0x01 ; 1 + 1474: 80 93 55 04 sts 0x0455, r24 + lcdWriteChar(c); + 1478: 10 92 54 04 sts 0x0454, r1 + } + + 147c: 84 e0 ldi r24, 0x04 ; 4 + 147e: 80 93 0e 04 sts 0x040E, r24 + 1482: 08 95 ret + +00001484 : + + register uint8_t c; + + while((c = *stringPointer++)) + { + lcdWriteChar(c); + 1484: 0e 94 79 0b call 0x16f2 ; 0x16f2 + 1488: 08 95 ret + +0000148a : + +} +/*------------------------------------------------------------------------------------------------ + lcdWriteString + + Description: Writes a string of characters to LCD. + 148a: 0e 94 75 0b call 0x16ea ; 0x16ea + 148e: 08 95 ret + +00001490 : + n++; + + while(n<5) + { + tempString[n] = ' '; + n++; + 1490: cf 93 push r28 + 1492: df 93 push r29 + } + tempString[n] = '\0'; + + 1494: 94 9a sbi 0x12, 4 ; 18 + 1496: 80 e4 ldi r24, 0x40 ; 64 + 1498: 9c e9 ldi r25, 0x9C ; 156 + 149a: fc 01 movw r30, r24 + 149c: 31 97 sbiw r30, 0x01 ; 1 + 149e: f1 f7 brne .-4 ; 0x149c + 14a0: fc 01 movw r30, r24 + 14a2: 31 97 sbiw r30, 0x01 ; 1 + 14a4: f1 f7 brne .-4 ; 0x14a2 + 14a6: fc 01 movw r30, r24 + 14a8: 31 97 sbiw r30, 0x01 ; 1 + 14aa: f1 f7 brne .-4 ; 0x14a8 + 14ac: 01 97 sbiw r24, 0x01 ; 1 + 14ae: f1 f7 brne .-4 ; 0x14ac + lcdWriteHex + + Description: Writes hex to LCD + Input: hexValue + Output: - +----------------------------------------------------------------------------------------------------------*/ + 14b0: 80 e0 ldi r24, 0x00 ; 0 + 14b2: 0e 94 71 0b call 0x16e2 ; 0x16e2 +void lcdWriteHex(uint16_t hexValue) + 14b6: 80 e0 ldi r24, 0x00 ; 0 + 14b8: 0e 94 71 0b call 0x16e2 ; 0x16e2 +{ + 14bc: 80 e0 ldi r24, 0x00 ; 0 + 14be: 0e 94 71 0b call 0x16e2 ; 0x16e2 + uint8_t tempString[7]; + + uint8_t n=0; + 14c2: 80 91 54 04 lds r24, 0x0454 + 14c6: 88 23 and r24, r24 + 14c8: 51 f0 breq .+20 ; 0x14de + 14ca: cf e0 ldi r28, 0x0F ; 15 + 14cc: d4 e0 ldi r29, 0x04 ; 4 + uint8_t i; + + tempString[n] = '0'; + n++; + tempString[n] = 'x'; + 14ce: 89 91 ld r24, Y+ + 14d0: 0e 94 71 0b call 0x16e2 ; 0x16e2 + uint8_t tempString[7]; + + uint8_t n=0; + uint8_t i; + + tempString[n] = '0'; + 14d4: 84 e0 ldi r24, 0x04 ; 4 + 14d6: cc 31 cpi r28, 0x1C ; 28 + 14d8: d8 07 cpc r29, r24 + 14da: 51 f0 breq .+20 ; 0x14f0 + 14dc: f8 cf rjmp .-16 ; 0x14ce + 14de: cc e1 ldi r28, 0x1C ; 28 + 14e0: d4 e0 ldi r29, 0x04 ; 4 + for(i=0;i<4;i++) + { + + if(((hexValue>>(12-(i*4)))&0x000F)>0x0009) + { + tempString[n] = (((hexValue>>(12-(i*4)))&0x000F)+0x37); + 14e2: 89 91 ld r24, Y+ + 14e4: 0e 94 71 0b call 0x16e2 ; 0x16e2 + n++; + + for(i=0;i<4;i++) + { + + if(((hexValue>>(12-(i*4)))&0x000F)>0x0009) + 14e8: 84 e0 ldi r24, 0x04 ; 4 + 14ea: c9 32 cpi r28, 0x29 ; 41 + 14ec: d8 07 cpc r29, r24 + 14ee: c9 f7 brne .-14 ; 0x14e2 + tempString[n] = (((hexValue>>(12-(i*4)))&0x000F)+0x37); + n++; + } + else + { + tempString[n] = (((hexValue>>(12-(i*4)))&0x000F)|0x30); + 14f0: 80 e0 ldi r24, 0x00 ; 0 + 14f2: 0e 94 71 0b call 0x16e2 ; 0x16e2 + n++; + 14f6: 80 e0 ldi r24, 0x00 ; 0 + 14f8: 0e 94 71 0b call 0x16e2 ; 0x16e2 + } + 14fc: 80 e0 ldi r24, 0x00 ; 0 + 14fe: 0e 94 71 0b call 0x16e2 ; 0x16e2 + } + + 1502: 94 98 cbi 0x12, 4 ; 18 + 1504: 80 e8 ldi r24, 0x80 ; 128 + 1506: 9e e3 ldi r25, 0x3E ; 62 + 1508: 01 97 sbiw r24, 0x01 ; 1 + 150a: f1 f7 brne .-4 ; 0x1508 + 150c: df 91 pop r29 + 150e: cf 91 pop r28 + 1510: 08 95 ret + +00001512 <__vector_20>: +------------------------------------------------------------------------------------------------*/ +void lcdSetDisplay (uint8_t value) +{ + + switch (value) + { + 1512: 1f 92 push r1 + 1514: 0f 92 push r0 + 1516: 0f b6 in r0, 0x3f ; 63 + 1518: 0f 92 push r0 + 151a: 11 24 eor r1, r1 + 151c: 2f 93 push r18 + 151e: 3f 93 push r19 + 1520: 4f 93 push r20 + 1522: 5f 93 push r21 + 1524: 6f 93 push r22 + 1526: 7f 93 push r23 + 1528: 8f 93 push r24 + 152a: 9f 93 push r25 + 152c: af 93 push r26 + 152e: bf 93 push r27 + 1530: ef 93 push r30 + 1532: ff 93 push r31 + case ON: + 1534: 0e 94 6c 0b call 0x16d8 ; 0x16d8 + lcdTempReg |= 0x04; + break; + 1538: 90 91 52 04 lds r25, 0x0452 + 153c: 99 23 and r25, r25 + 153e: 41 f4 brne .+16 ; 0x1550 <__vector_20+0x3e> + case OFF: + lcdTempReg &= ~(0x04); + 1540: 8a 30 cpi r24, 0x0A ; 10 + 1542: 81 f4 brne .+32 ; 0x1564 <__vector_20+0x52> + break; + } + 1544: 80 93 56 04 sts 0x0456, r24 + + 1548: 81 e0 ldi r24, 0x01 ; 1 + 154a: 80 93 52 04 sts 0x0452, r24 + 154e: 0a c0 rjmp .+20 ; 0x1564 <__vector_20+0x52> + lcdWriteIns(0x08|lcdTempReg); + +} + 1550: 9d 30 cpi r25, 0x0D ; 13 + 1552: 40 f4 brcc .+16 ; 0x1564 <__vector_20+0x52> +/*------------------------------------------------------------------------------------------------ + lcdSetCursor + 1554: e9 2f mov r30, r25 + 1556: ff 27 eor r31, r31 + 1558: ea 5a subi r30, 0xAA ; 170 + 155a: fb 4f sbci r31, 0xFB ; 251 + 155c: 80 83 st Z, r24 + + 155e: 9f 5f subi r25, 0xFF ; 255 + 1560: 90 93 52 04 sts 0x0452, r25 + Description: Switch cursor on/off on LCD. Value: ON or OFF + + 1564: 80 91 52 04 lds r24, 0x0452 + 1568: 8d 30 cpi r24, 0x0D ; 13 + 156a: 41 f5 brne .+80 ; 0x15bc <__vector_20+0xaa> + Input: value + Return: - + 156c: 0e 94 42 0a call 0x1484 ; 0x1484 +------------------------------------------------------------------------------------------------*/ + 1570: 78 94 sei +void lcdSetCursor (uint8_t value) +{ + 1572: 0e 94 dc 09 call 0x13b8 ; 0x13b8 + 1576: 80 93 53 04 sts 0x0453, r24 + + switch (value) + 157a: 83 30 cpi r24, 0x03 ; 3 + 157c: a1 f0 breq .+40 ; 0x15a6 <__vector_20+0x94> + 157e: 84 30 cpi r24, 0x04 ; 4 + 1580: 28 f4 brcc .+10 ; 0x158c <__vector_20+0x7a> + 1582: 81 30 cpi r24, 0x01 ; 1 + 1584: 51 f0 breq .+20 ; 0x159a <__vector_20+0x88> + 1586: 82 30 cpi r24, 0x02 ; 2 + 1588: a9 f4 brne .+42 ; 0x15b4 <__vector_20+0xa2> + 158a: 0d c0 rjmp .+26 ; 0x15a6 <__vector_20+0x94> + 158c: 85 30 cpi r24, 0x05 ; 5 + 158e: 71 f0 breq .+28 ; 0x15ac <__vector_20+0x9a> + 1590: 85 30 cpi r24, 0x05 ; 5 + 1592: 40 f0 brcs .+16 ; 0x15a4 <__vector_20+0x92> + 1594: 86 30 cpi r24, 0x06 ; 6 + 1596: 71 f4 brne .+28 ; 0x15b4 <__vector_20+0xa2> + 1598: 06 c0 rjmp .+12 ; 0x15a6 <__vector_20+0x94> + { + case ON: + lcdTempReg |= 0x02; + 159a: 80 93 0e 04 sts 0x040E, r24 + break; + 159e: 0e 94 48 0a call 0x1490 ; 0x1490 + 15a2: 08 c0 rjmp .+16 ; 0x15b4 <__vector_20+0xa2> + +} +/*------------------------------------------------------------------------------------------------ + lcdSetBlink + + Description: Switch blink on/off on LCD. Value: ON or OFF + 15a4: 84 e0 ldi r24, 0x04 ; 4 + + Input: value + Return: - +------------------------------------------------------------------------------------------------*/ + 15a6: 80 93 0e 04 sts 0x040E, r24 + 15aa: 04 c0 rjmp .+8 ; 0x15b4 <__vector_20+0xa2> +void lcdSetBlink (uint8_t value) +{ + + switch (value) + 15ac: 80 93 0e 04 sts 0x040E, r24 + { + 15b0: 10 92 54 04 sts 0x0454, r1 + case ON: + lcdTempReg |= 0x01; + break; + case OFF: + 15b4: 10 92 52 04 sts 0x0452, r1 + lcdTempReg &= ~(0x01); + 15b8: 0e 94 45 0a call 0x148a ; 0x148a + 15bc: ff 91 pop r31 + 15be: ef 91 pop r30 + 15c0: bf 91 pop r27 + 15c2: af 91 pop r26 + 15c4: 9f 91 pop r25 + 15c6: 8f 91 pop r24 + 15c8: 7f 91 pop r23 + 15ca: 6f 91 pop r22 + 15cc: 5f 91 pop r21 + 15ce: 4f 91 pop r20 + 15d0: 3f 91 pop r19 + 15d2: 2f 91 pop r18 + 15d4: 0f 90 pop r0 + 15d6: 0f be out 0x3f, r0 ; 63 + 15d8: 0f 90 pop r0 + 15da: 1f 90 pop r1 + 15dc: 18 95 reti + +000015de : + Input: sensorValue + Output: - +----------------------------------------------------------------------------------------------------------*/ +void lcdWriteHexAsDecimal(uint16_t hexValue) +{ + uint8_t tempString[5]={" "}; + 15de: 8f b9 out 0x0f, r24 ; 15 + uint8_t firstDigit = 0; + 15e0: 77 9b sbis 0x0e, 7 ; 14 + 15e2: fe cf rjmp .-4 ; 0x15e0 + 15e4: 08 95 ret + +000015e6 : + secondDigit = ((hexValue-(firstDigit*10000))/1000); + thirdDigit = ((hexValue-(firstDigit*10000+(secondDigit*1000)))/100); + fourthDigit = ((hexValue-(firstDigit*10000+(secondDigit*1000)+(thirdDigit*100)))/10); + fifthDigit = (hexValue-(firstDigit*10000+(secondDigit*1000)+(thirdDigit*100)+(fourthDigit*10))); + + uint8_t n = 0; + 15e6: 8f b1 in r24, 0x0f ; 15 + + 15e8: 99 27 eor r25, r25 + 15ea: 08 95 ret + +000015ec : + if(secondDigit||firstDigit) + { + tempString[n] = (0x30|secondDigit); + n++; + } + if(thirdDigit||secondDigit||firstDigit) + 15ec: 68 98 cbi 0x0d, 0 ; 13 + { + 15ee: 69 98 cbi 0x0d, 1 ; 13 + 15f0: 08 95 ret + +000015f2 : + n++; + } + tempString[n] = (0x30|fifthDigit); + n++; + + while(n<5) + 15f2: 68 98 cbi 0x0d, 0 ; 13 + { + 15f4: 69 9a sbi 0x0d, 1 ; 13 + 15f6: 08 95 ret + +000015f8 : +} +/*---------------------------------------------------------------------------------------------------------- + lcdWriteHex + + Description: Writes hex to LCD + Input: hexValue + 15f8: 21 e0 ldi r18, 0x01 ; 1 + 15fa: 30 e0 ldi r19, 0x00 ; 0 + 15fc: 02 c0 rjmp .+4 ; 0x1602 + 15fe: 22 0f add r18, r18 + 1600: 33 1f adc r19, r19 + 1602: 8a 95 dec r24 + 1604: e2 f7 brpl .-8 ; 0x15fe + 1606: 20 95 com r18 + 1608: 2b bb out 0x1b, r18 ; 27 + 160a: 08 95 ret + +0000160c : + uint8_t i; + + tempString[n] = '0'; + n++; + tempString[n] = 'x'; + n++; + 160c: 87 b3 in r24, 0x17 ; 23 + 160e: 80 6b ori r24, 0xB0 ; 176 + 1610: 87 bb out 0x17, r24 ; 23 + + 1612: c6 9a sbi 0x18, 6 ; 24 + for(i=0;i<4;i++) + { + 1614: d0 9a sbi 0x1a, 0 ; 26 + + 1616: d8 9a sbi 0x1b, 0 ; 27 + if(((hexValue>>(12-(i*4)))&0x000F)>0x0009) + { + 1618: 8d b1 in r24, 0x0d ; 13 + 161a: 81 65 ori r24, 0x51 ; 81 + 161c: 8d b9 out 0x0d, r24 ; 13 + 161e: 08 95 ret + +00001620 : +================================================================================================*/ +/*---------------------------------------------------------------------------------------------------------- + lcdWriteHexAsDecimal + + Description: Writes hex value as decimal to LCD + Input: sensorValue + 1620: 9c 01 movw r18, r24 + 1622: 94 e0 ldi r25, 0x04 ; 4 + 1624: 22 0f add r18, r18 + 1626: 33 1f adc r19, r19 + 1628: 9a 95 dec r25 + 162a: e1 f7 brne .-8 ; 0x1624 + 162c: 44 27 eor r20, r20 + 162e: 55 27 eor r21, r21 + 1630: 60 e0 ldi r22, 0x00 ; 0 + 1632: 74 e2 ldi r23, 0x24 ; 36 + 1634: 84 ef ldi r24, 0xF4 ; 244 + 1636: 90 e0 ldi r25, 0x00 ; 0 + 1638: 0e 94 09 0c call 0x1812 ; 0x1812 <__divmodsi4> + 163c: 21 50 subi r18, 0x01 ; 1 + 163e: 30 40 sbci r19, 0x00 ; 0 + 1640: 40 40 sbci r20, 0x00 ; 0 + 1642: 50 40 sbci r21, 0x00 ; 0 + 1644: bb 27 eor r27, r27 + 1646: 57 fd sbrc r21, 7 + 1648: ba 95 dec r27 + 164a: a5 2f mov r26, r21 + 164c: 94 2f mov r25, r20 + 164e: 83 2f mov r24, r19 + 1650: 2f 5f subi r18, 0xFF ; 255 + 1652: 3f 4f sbci r19, 0xFF ; 255 + 1654: 4f 4f sbci r20, 0xFF ; 255 + 1656: 5f 4f sbci r21, 0xFF ; 255 + 1658: 80 bd out 0x20, r24 ; 32 + Output: - + 165a: 21 50 subi r18, 0x01 ; 1 + 165c: 29 b9 out 0x09, r18 ; 9 + 165e: 08 95 ret + +00001660 : + uint8_t fourthDigit = 0; + uint8_t fifthDigit = 0; + + firstDigit = (hexValue/10000); + secondDigit = ((hexValue-(firstDigit*10000))/1000); + thirdDigit = ((hexValue-(firstDigit*10000+(secondDigit*1000)))/100); + 1660: 5f 9b sbis 0x0b, 7 ; 11 + 1662: fe cf rjmp .-4 ; 0x1660 + fourthDigit = ((hexValue-(firstDigit*10000+(secondDigit*1000)+(thirdDigit*100)))/10); + fifthDigit = (hexValue-(firstDigit*10000+(secondDigit*1000)+(thirdDigit*100)+(fourthDigit*10))); + 1664: 8c b1 in r24, 0x0c ; 12 + + 1666: 99 27 eor r25, r25 + 1668: 08 95 ret + +0000166a : + } + if(secondDigit||firstDigit) + { + tempString[n] = (0x30|secondDigit); + n++; + } + 166a: 5d 9b sbis 0x0b, 5 ; 11 + 166c: fe cf rjmp .-4 ; 0x166a + if(thirdDigit||secondDigit||firstDigit) + { + 166e: 8c b9 out 0x0c, r24 ; 12 + 1670: 08 95 ret + +00001672 : + Input: hexValue + Output: - +----------------------------------------------------------------------------------------------------------*/ +void lcdWriteHex(uint16_t hexValue) +{ + uint8_t tempString[7]; + 1672: 57 9a sbi 0x0a, 7 ; 10 + 1674: 08 95 ret + +00001676 : + n++; + + for(i=0;i<4;i++) + { + + if(((hexValue>>(12-(i*4)))&0x000F)>0x0009) + 1676: 57 98 cbi 0x0a, 7 ; 10 + 1678: 08 95 ret + +0000167a : + } + } + + tempString[n] = '\0'; + + lcdWriteString(tempString); + 167a: 89 9a sbi 0x11, 1 ; 17 +} + 167c: 8a b1 in r24, 0x0a ; 10 + 167e: 88 69 ori r24, 0x98 ; 152 + 1680: 8a b9 out 0x0a, r24 ; 10 + 1682: 08 95 ret + +00001684 : + tempString[n] = (0x30|fourthDigit); + n++; + } + tempString[n] = (0x30|fifthDigit); + n++; + + 1684: fc 01 movw r30, r24 + 1686: 04 c0 rjmp .+8 ; 0x1690 + } + if(secondDigit||firstDigit) + { + tempString[n] = (0x30|secondDigit); + n++; + } + 1688: 5d 9b sbis 0x0b, 5 ; 11 + 168a: fe cf rjmp .-4 ; 0x1688 + if(thirdDigit||secondDigit||firstDigit) + { + 168c: 8c b9 out 0x0c, r24 ; 12 + + while(n<5) + { + tempString[n] = ' '; + n++; + } + 168e: 31 96 adiw r30, 0x01 ; 1 + } + tempString[n] = (0x30|fifthDigit); + n++; + + while(n<5) + { + 1690: 80 81 ld r24, Z + 1692: 88 23 and r24, r24 + 1694: c9 f7 brne .-14 ; 0x1688 + 1696: 08 95 ret + +00001698 : +static uint8_t lcdTempReg; +/*================================================================================================ + Functions +================================================================================================*/ +/*---------------------------------------------------------------------------------------------------------- + lcdWriteHexAsDecimal + 1698: 9c 01 movw r18, r24 + 169a: 94 e0 ldi r25, 0x04 ; 4 + 169c: 22 0f add r18, r18 + 169e: 33 1f adc r19, r19 + 16a0: 9a 95 dec r25 + 16a2: e1 f7 brne .-8 ; 0x169c + 16a4: 44 27 eor r20, r20 + 16a6: 55 27 eor r21, r21 + 16a8: 60 e0 ldi r22, 0x00 ; 0 + 16aa: 74 e2 ldi r23, 0x24 ; 36 + 16ac: 84 ef ldi r24, 0xF4 ; 244 + 16ae: 90 e0 ldi r25, 0x00 ; 0 + 16b0: 0e 94 09 0c call 0x1812 ; 0x1812 <__divmodsi4> + 16b4: 21 50 subi r18, 0x01 ; 1 + 16b6: 30 40 sbci r19, 0x00 ; 0 + 16b8: 40 40 sbci r20, 0x00 ; 0 + 16ba: 50 40 sbci r21, 0x00 ; 0 + 16bc: bb 27 eor r27, r27 + 16be: 57 fd sbrc r21, 7 + 16c0: ba 95 dec r27 + 16c2: a5 2f mov r26, r21 + 16c4: 94 2f mov r25, r20 + 16c6: 83 2f mov r24, r19 + 16c8: 2f 5f subi r18, 0xFF ; 255 + 16ca: 3f 4f sbci r19, 0xFF ; 255 + 16cc: 4f 4f sbci r20, 0xFF ; 255 + 16ce: 5f 4f sbci r21, 0xFF ; 255 + 16d0: 8c bf out 0x3c, r24 ; 60 + + 16d2: 21 50 subi r18, 0x01 ; 1 + 16d4: 20 b9 out 0x00, r18 ; 0 + 16d6: 08 95 ret + +000016d8 : + uint8_t firstDigit = 0; + uint8_t secondDigit = 0; + uint8_t thirdDigit = 0; + uint8_t fourthDigit = 0; + uint8_t fifthDigit = 0; + + 16d8: 17 9b sbis 0x02, 7 ; 2 + 16da: fe cf rjmp .-4 ; 0x16d8 + firstDigit = (hexValue/10000); + secondDigit = ((hexValue-(firstDigit*10000))/1000); + 16dc: 83 b1 in r24, 0x03 ; 3 + thirdDigit = ((hexValue-(firstDigit*10000+(secondDigit*1000)))/100); + 16de: 99 27 eor r25, r25 + 16e0: 08 95 ret + +000016e2 : + { + tempString[n] = (0x30|firstDigit); + n++; + } + if(secondDigit||firstDigit) + { + 16e2: 15 9b sbis 0x02, 5 ; 2 + 16e4: fe cf rjmp .-4 ; 0x16e2 + tempString[n] = (0x30|secondDigit); + n++; + 16e6: 83 b9 out 0x03, r24 ; 3 + 16e8: 08 95 ret + +000016ea : + + Description: Writes hex to LCD + Input: hexValue + Output: - +----------------------------------------------------------------------------------------------------------*/ +void lcdWriteHex(uint16_t hexValue) + 16ea: 81 b1 in r24, 0x01 ; 1 + 16ec: 80 69 ori r24, 0x90 ; 144 + 16ee: 81 b9 out 0x01, r24 ; 1 + 16f0: 08 95 ret + +000016f2 : + n++; + tempString[n] = 'x'; + n++; + + for(i=0;i<4;i++) + { + 16f2: 81 b1 in r24, 0x01 ; 1 + 16f4: 8f 76 andi r24, 0x6F ; 111 + 16f6: 81 b9 out 0x01, r24 ; 1 + 16f8: 08 95 ret + +000016fa : + tempString[n] = (((hexValue>>(12-(i*4)))&0x000F)|0x30); + n++; + } + } + + tempString[n] = '\0'; + 16fa: bb 9a sbi 0x17, 3 ; 23 + + 16fc: 81 b1 in r24, 0x01 ; 1 + 16fe: 88 69 ori r24, 0x98 ; 152 + 1700: 81 b9 out 0x01, r24 ; 1 + 1702: 08 95 ret + +00001704 : + } + if(fourthDigit||thirdDigit||secondDigit||firstDigit) + { + tempString[n] = (0x30|fourthDigit); + n++; + } + 1704: fc 01 movw r30, r24 + 1706: 04 c0 rjmp .+8 ; 0x1710 + { + tempString[n] = (0x30|firstDigit); + n++; + } + if(secondDigit||firstDigit) + { + 1708: 15 9b sbis 0x02, 5 ; 2 + 170a: fe cf rjmp .-4 ; 0x1708 + tempString[n] = (0x30|secondDigit); + n++; + 170c: 83 b9 out 0x03, r24 ; 3 + } + tempString[n] = (0x30|fifthDigit); + n++; + + while(n<5) + { + 170e: 31 96 adiw r30, 0x01 ; 1 + { + tempString[n] = (0x30|fourthDigit); + n++; + } + tempString[n] = (0x30|fifthDigit); + n++; + 1710: 80 81 ld r24, Z + 1712: 88 23 and r24, r24 + 1714: c9 f7 brne .-14 ; 0x1708 + 1716: 08 95 ret + +00001718 : + + Description: Gets pointer current TAG id + + Input: - + Return: pointer to rfIdTagBuffer +------------------------------------------------------------------------------------------------*/ + 1718: f8 94 cli +uint8_t* rfIdGetTag( void ) +{ + 171a: 80 91 64 04 lds r24, 0x0464 + 171e: 88 23 and r24, r24 + 1720: 69 f4 brne .+26 ; 0x173c + rfIdGotTag = 0; + //PORT_RFID |= (1< +/*------------------------------------------------------------------------------------------------ + rfIDClearBuffer + + Description: Clearing current TAG-buffer + 172c: 92 98 cbi 0x12, 2 ; 18 + + 172e: 8a 98 cbi 0x11, 2 ; 17 + Input: - + Return: - + 1730: 85 b7 in r24, 0x35 ; 53 + 1732: 83 60 ori r24, 0x03 ; 3 + 1734: 85 bf out 0x35, r24 ; 53 +------------------------------------------------------------------------------------------------*/ + 1736: 8b b7 in r24, 0x3b ; 59 + 1738: 80 64 ori r24, 0x40 ; 64 + 173a: 8b bf out 0x3b, r24 ; 59 +void rfIdClearBuffer( void ) +{ + rfIdByteCount = 0; + 173c: 78 94 sei + 173e: 08 95 ret + +00001740 : + Description: Returns if a TAG has been transfered to the TAG-buffer + + Input: - + Return: 1 if true, else 0 +------------------------------------------------------------------------------------------------*/ +uint8_t rfIdGetTagPresent( void ) + 1740: 10 92 64 04 sts 0x0464, r1 +{ + 1744: 80 91 88 00 lds r24, 0x0088 + 1748: 90 91 89 00 lds r25, 0x0089 + 174c: 08 95 ret + +0000174e : + + Description: Enable incoming data + + Input: - + Return: - +------------------------------------------------------------------------------------------------*/ + 174e: 80 91 64 04 lds r24, 0x0464 +void rfIdEnable(void) +{ + 1752: 99 27 eor r25, r25 + 1754: 08 95 ret + +00001756 : +/*------------------------------------------------------------------------------------------------ +rfIdDisable + + Description: Disable incoming data + + Input: - + 1756: 08 95 ret + +00001758 <__vector_1>: + rfIdInit + + Description: Initialize components + + Input: - + Return: - + 1758: 1f 92 push r1 + 175a: 0f 92 push r0 + 175c: 0f b6 in r0, 0x3f ; 63 + 175e: 0f 92 push r0 + 1760: 11 24 eor r1, r1 + 1762: 8f 93 push r24 +------------------------------------------------------------------------------------------------*/ + 1764: 05 b6 in r0, 0x35 ; 53 + 1766: 00 fe sbrs r0, 0 + 1768: 0d c0 rjmp .+26 ; 0x1784 <__vector_1+0x2c> +void rfIdInit(void) +{ + 176a: 10 92 89 00 sts 0x0089, r1 + usart0Init(); + 176e: 10 92 88 00 sts 0x0088, r1 + usart0SetBaud(USART0_BAUD_RATE); + rfIdByteCount = 0; + 1772: 85 b7 in r24, 0x35 ; 53 + 1774: 8e 7f andi r24, 0xFE ; 254 + 1776: 85 bf out 0x35, r24 ; 53 + + 1778: 80 91 8a 00 lds r24, 0x008A + 177c: 82 60 ori r24, 0x02 ; 2 + 177e: 80 93 8a 00 sts 0x008A, r24 + 1782: 0b c0 rjmp .+22 ; 0x179a <__vector_1+0x42> + DDR_RFID |= (1<: + 17a6: aa 1b sub r26, r26 + 17a8: bb 1b sub r27, r27 + 17aa: 51 e1 ldi r21, 0x11 ; 17 + 17ac: 07 c0 rjmp .+14 ; 0x17bc <__udivmodhi4_ep> + +000017ae <__udivmodhi4_loop>: + 17ae: aa 1f adc r26, r26 + 17b0: bb 1f adc r27, r27 + 17b2: a6 17 cp r26, r22 + 17b4: b7 07 cpc r27, r23 + 17b6: 10 f0 brcs .+4 ; 0x17bc <__udivmodhi4_ep> + 17b8: a6 1b sub r26, r22 + 17ba: b7 0b sbc r27, r23 + +000017bc <__udivmodhi4_ep>: + 17bc: 88 1f adc r24, r24 + 17be: 99 1f adc r25, r25 + 17c0: 5a 95 dec r21 + 17c2: a9 f7 brne .-22 ; 0x17ae <__udivmodhi4_loop> + 17c4: 80 95 com r24 + 17c6: 90 95 com r25 + 17c8: bc 01 movw r22, r24 + 17ca: cd 01 movw r24, r26 + 17cc: 08 95 ret + +000017ce <__udivmodsi4>: + 17ce: a1 e2 ldi r26, 0x21 ; 33 + 17d0: 1a 2e mov r1, r26 + 17d2: aa 1b sub r26, r26 + 17d4: bb 1b sub r27, r27 + 17d6: fd 01 movw r30, r26 + 17d8: 0d c0 rjmp .+26 ; 0x17f4 <__udivmodsi4_ep> + +000017da <__udivmodsi4_loop>: + 17da: aa 1f adc r26, r26 + 17dc: bb 1f adc r27, r27 + 17de: ee 1f adc r30, r30 + 17e0: ff 1f adc r31, r31 + 17e2: a2 17 cp r26, r18 + 17e4: b3 07 cpc r27, r19 + 17e6: e4 07 cpc r30, r20 + 17e8: f5 07 cpc r31, r21 + 17ea: 20 f0 brcs .+8 ; 0x17f4 <__udivmodsi4_ep> + 17ec: a2 1b sub r26, r18 + 17ee: b3 0b sbc r27, r19 + 17f0: e4 0b sbc r30, r20 + 17f2: f5 0b sbc r31, r21 + +000017f4 <__udivmodsi4_ep>: + 17f4: 66 1f adc r22, r22 + 17f6: 77 1f adc r23, r23 + 17f8: 88 1f adc r24, r24 + 17fa: 99 1f adc r25, r25 + 17fc: 1a 94 dec r1 + 17fe: 69 f7 brne .-38 ; 0x17da <__udivmodsi4_loop> + 1800: 60 95 com r22 + 1802: 70 95 com r23 + 1804: 80 95 com r24 + 1806: 90 95 com r25 + 1808: 9b 01 movw r18, r22 + 180a: ac 01 movw r20, r24 + 180c: bd 01 movw r22, r26 + 180e: cf 01 movw r24, r30 + 1810: 08 95 ret + +00001812 <__divmodsi4>: + 1812: 97 fb bst r25, 7 + 1814: 09 2e mov r0, r25 + 1816: 05 26 eor r0, r21 + 1818: 0e d0 rcall .+28 ; 0x1836 <__divmodsi4_neg1> + 181a: 57 fd sbrc r21, 7 + 181c: 04 d0 rcall .+8 ; 0x1826 <__divmodsi4_neg2> + 181e: d7 df rcall .-82 ; 0x17ce <__udivmodsi4> + 1820: 0a d0 rcall .+20 ; 0x1836 <__divmodsi4_neg1> + 1822: 00 1c adc r0, r0 + 1824: 38 f4 brcc .+14 ; 0x1834 <__divmodsi4_exit> + +00001826 <__divmodsi4_neg2>: + 1826: 50 95 com r21 + 1828: 40 95 com r20 + 182a: 30 95 com r19 + 182c: 21 95 neg r18 + 182e: 3f 4f sbci r19, 0xFF ; 255 + 1830: 4f 4f sbci r20, 0xFF ; 255 + 1832: 5f 4f sbci r21, 0xFF ; 255 + +00001834 <__divmodsi4_exit>: + 1834: 08 95 ret + +00001836 <__divmodsi4_neg1>: + 1836: f6 f7 brtc .-4 ; 0x1834 <__divmodsi4_exit> + 1838: 90 95 com r25 + 183a: 80 95 com r24 + 183c: 70 95 com r23 + 183e: 61 95 neg r22 + 1840: 7f 4f sbci r23, 0xFF ; 255 + 1842: 8f 4f sbci r24, 0xFF ; 255 + 1844: 9f 4f sbci r25, 0xFF ; 255 + 1846: 08 95 ret + +00001848 <_exit>: + 1848: ff cf rjmp .-2 ; 0x1848 <_exit> diff --git a/RoboMI.lst b/RoboMI.lst new file mode 100644 index 0000000..2dcbc1f --- /dev/null +++ b/RoboMI.lst @@ -0,0 +1,2593 @@ + 1 .file "RoboMI.c" + 2 __SREG__ = 0x3f + 3 __SP_H__ = 0x3e + 4 __SP_L__ = 0x3d + 5 __tmp_reg__ = 0 + 6 __zero_reg__ = 1 + 7 .global __do_copy_data + 8 .global __do_clear_bss + 16 .Ltext0: + 17 .global initIO + 19 initIO: + 20 .LFB14: + 21 .LM1: + 22 /* prologue: frame size=0 */ + 23 /* prologue end (size=0) */ + 24 .LM2: + 25 0000 82E0 ldi r24,lo8(2) + 26 0002 8EBD out 78-0x20,r24 + 27 .LM3: + 28 0004 8FEB ldi r24,lo8(-65) + 29 0006 8DBD out 77-0x20,r24 + 30 .LM4: + 31 0008 8FEF ldi r24,lo8(-1) + 32 000a 8CBD out 76-0x20,r24 + 33 .LM5: + 34 000c 8EEE ldi r24,lo8(-18) + 35 000e 83BD out 67-0x20,r24 + 36 .LM6: + 37 0010 89B7 in r24,89-0x20 + 38 0012 8468 ori r24,lo8(-124) + 39 0014 89BF out 89-0x20,r24 + 40 .LM7: + 41 0016 84B3 in r24,52-0x20 + 42 0018 8760 ori r24,lo8(7) + 43 001a 84BB out 52-0x20,r24 + 44 .LM8: + 45 001c 8AB3 in r24,58-0x20 + 46 001e 8F70 andi r24,lo8(15) + 47 0020 8ABB out 58-0x20,r24 + 48 .LM9: + 49 0022 8BB3 in r24,59-0x20 + 50 0024 806F ori r24,lo8(-16) + 51 0026 8BBB out 59-0x20,r24 + 52 .LM10: + 53 0028 1092 0000 sts progPosition,__zero_reg__ + 54 /* epilogue: frame size=0 */ + 55 002c 0895 ret + 56 /* epilogue end (size=1) */ + 57 /* function initIO size 23 (22) */ + 58 .LFE14: + 60 .global __vector_15 + 62 __vector_15: + 63 .LFB15: + 64 .LM11: + 65 /* prologue: frame size=0 */ + 66 002e 1F92 push __zero_reg__ + 67 0030 0F92 push __tmp_reg__ + 68 0032 0FB6 in __tmp_reg__,__SREG__ + 69 0034 0F92 push __tmp_reg__ + 70 0036 1124 clr __zero_reg__ + 71 0038 8F93 push r24 + 72 /* prologue end (size=6) */ + 73 .LM12: + 74 003a 8091 0000 lds r24,progCounterPPM + 75 003e 8F5F subi r24,lo8(-(1)) + 76 0040 8093 0000 sts progCounterPPM,r24 + 77 0044 8230 cpi r24,lo8(2) + 78 0046 00F0 brlo .L4 + 79 .LM13: + 80 0048 1092 0000 sts servoCounter,__zero_reg__ + 81 .LM14: + 82 004c 85B3 in r24,53-0x20 + 83 004e 8760 ori r24,lo8(7) + 84 0050 85BB out 53-0x20,r24 + 85 .LM15: + 86 0052 87B5 in r24,71-0x20 + 87 0054 8260 ori r24,lo8(2) + 88 0056 87BD out 71-0x20,r24 + 89 .LM16: + 90 0058 1092 0000 sts progCounterPPM,__zero_reg__ + 91 .L4: + 92 .LM17: + 93 005c 81E0 ldi r24,lo8(1) + 94 005e 8093 0000 sts progDoUpdate,r24 + 95 .LM18: + 96 0062 8FEB ldi r24,lo8(-65) + 97 0064 8DBD out 77-0x20,r24 + 98 .LM19: + 99 0066 8FEF ldi r24,lo8(-1) + 100 0068 8CBD out 76-0x20,r24 + 101 /* epilogue: frame size=0 */ + 102 006a 8F91 pop r24 + 103 006c 0F90 pop __tmp_reg__ + 104 006e 0FBE out __SREG__,__tmp_reg__ + 105 0070 0F90 pop __tmp_reg__ + 106 0072 1F90 pop __zero_reg__ + 107 0074 1895 reti + 108 /* epilogue end (size=6) */ + 109 /* function __vector_15 size 36 (24) */ + 110 .LFE15: + 112 .global __vector_11 + 114 __vector_11: + 115 .LFB16: + 116 .LM20: + 117 /* prologue: frame size=0 */ + 118 0076 1F92 push __zero_reg__ + 119 0078 0F92 push __tmp_reg__ + 120 007a 0FB6 in __tmp_reg__,__SREG__ + 121 007c 0F92 push __tmp_reg__ + 122 007e 1124 clr __zero_reg__ + 123 0080 2F93 push r18 + 124 0082 8F93 push r24 + 125 0084 9F93 push r25 + 126 /* prologue end (size=8) */ + 127 .LM21: + 128 0086 9091 0000 lds r25,servoCounter + 129 008a 8091 0000 lds r24,servoPing + 130 008e 9817 cp r25,r24 + 131 0090 00F0 brlo .L8 + 132 .LM22: + 133 0092 A998 cbi 53-0x20,1 + 134 0094 21E0 ldi r18,lo8(1) + 135 .LVL0: + 136 0096 00C0 rjmp .L10 + 137 .LVL1: + 138 .L8: + 139 .LM23: + 140 /* #APP */ + 141 0098 0000 NOP + 142 /* #NOAPP */ + 143 009a 20E0 ldi r18,lo8(0) + 144 .LVL2: + 145 .L10: + 146 .LM24: + 147 009c 8091 0000 lds r24,servoMotorLeft + 148 00a0 9817 cp r25,r24 + 149 00a2 00F0 brlo .L11 + 150 .LM25: + 151 00a4 A898 cbi 53-0x20,0 + 152 00a6 00C0 rjmp .L13 + 153 .L11: + 154 .LM26: + 155 /* #APP */ + 156 00a8 0000 NOP + 157 /* #NOAPP */ + 158 00aa 20E0 ldi r18,lo8(0) + 159 .L13: + 160 .LM27: + 161 00ac 8091 0000 lds r24,servoMotorRight + 162 00b0 9817 cp r25,r24 + 163 00b2 00F0 brlo .L14 + 164 .LM28: + 165 00b4 AA98 cbi 53-0x20,2 + 166 .LM29: + 167 00b6 2223 tst r18 + 168 00b8 01F4 brne .L16 + 169 00ba 00C0 rjmp .L17 + 170 .L14: + 171 .LM30: + 172 /* #APP */ + 173 00bc 0000 NOP + 174 /* #NOAPP */ + 175 00be 00C0 rjmp .L17 + 176 .L16: + 177 .LM31: + 178 00c0 87B5 in r24,71-0x20 + 179 00c2 8D7F andi r24,lo8(-3) + 180 00c4 87BD out 71-0x20,r24 + 181 00c6 00C0 rjmp .L18 + 182 .L17: + 183 .LM32: + 184 00c8 9F5F subi r25,lo8(-(1)) + 185 00ca 9093 0000 sts servoCounter,r25 + 186 .LM33: + 187 /* #APP */ + 188 00ce 0000 NOP + 189 .LM34: + 190 00d0 0000 NOP + 191 /* #NOAPP */ + 192 .L18: + 193 .LM35: + 194 00d2 8EEE ldi r24,lo8(-18) + 195 00d4 83BD out 67-0x20,r24 + 196 /* epilogue: frame size=0 */ + 197 00d6 9F91 pop r25 + 198 00d8 8F91 pop r24 + 199 00da 2F91 pop r18 + 200 00dc 0F90 pop __tmp_reg__ + 201 00de 0FBE out __SREG__,__tmp_reg__ + 202 00e0 0F90 pop __tmp_reg__ + 203 00e2 1F90 pop __zero_reg__ + 204 00e4 1895 reti + 205 /* epilogue end (size=8) */ + 206 /* function __vector_11 size 61 (45) */ + 207 .LFE16: + 209 .global activateRobot + 211 activateRobot: + 212 .LFB17: + 213 .LM36: + 214 /* prologue: frame size=0 */ + 215 00e6 1F93 push r17 + 216 /* prologue end (size=1) */ + 217 .LVL3: + 218 00e8 182F mov r17,r24 + 219 .LM37: + 220 00ea 80E0 ldi r24,lo8(0) + 221 .LVL4: + 222 00ec 0E94 0000 call lcdSetLayout + 223 .LM38: + 224 00f0 81E3 ldi r24,lo8(49) + 225 00f2 189F mul r17,r24 + 226 00f4 C001 movw r24,r0 + 227 00f6 1124 clr r1 + 228 00f8 8050 subi r24,lo8(-(menuTable)) + 229 00fa 9040 sbci r25,hi8(-(menuTable)) + 230 00fc 0E94 0000 call lcdWriteStringP + 231 .LM39: + 232 0100 88EC ldi r24,lo8(-56) + 233 0102 8093 0000 sts progTimer,r24 + 234 .LM40: + 235 0106 1093 0000 sts roboActive,r17 + 236 /* epilogue: frame size=0 */ + 237 010a 1F91 pop r17 + 238 010c 0895 ret + 239 /* epilogue end (size=2) */ + 240 /* function activateRobot size 20 (17) */ + 241 .LFE17: + 243 .global deactivateRobot + 245 deactivateRobot: + 246 .LFB18: + 247 .LM41: + 248 /* prologue: frame size=0 */ + 249 /* prologue end (size=0) */ + 250 .LM42: + 251 010e 1092 0000 sts roboActive,__zero_reg__ + 252 .LM43: + 253 0112 87E7 ldi r24,lo8(119) + 254 0114 8093 0000 sts servoMotorLeft,r24 + 255 .LM44: + 256 0118 8093 0000 sts servoMotorRight,r24 + 257 .LM45: + 258 011c 8CE8 ldi r24,lo8(-116) + 259 011e 8093 0000 sts servoPing,r24 + 260 .LM46: + 261 0122 0E94 0000 call rfIdDisable + 262 /* epilogue: frame size=0 */ + 263 0126 0895 ret + 264 /* epilogue end (size=1) */ + 265 /* function deactivateRobot size 13 (12) */ + 266 .LFE18: + 268 .data + 269 .LC0: + 270 0000 2020 2020 .string " " + 270 2020 2020 + 270 2020 2020 + 270 2020 2020 + 270 00 + 271 .LC1: + 272 0011 3E20 2020 .string "> <" + 272 2020 2020 + 272 2020 2020 + 272 2020 203C + 272 00 + 273 .LC2: + 274 0022 3E3E 2020 .string ">> <<" + 274 2020 2020 + 274 2020 2020 + 274 2020 3C3C + 274 00 + 275 .LC3: + 276 0033 3E3E 3E20 .string ">>> <<<" + 276 2020 2020 + 276 2020 2020 + 276 203C 3C3C + 276 00 + 277 .LC4: + 278 0044 3E3E 3E3E .string ">>>> <<<<" + 278 2020 2020 + 278 2020 2020 + 278 3C3C 3C3C + 278 00 + 279 .LC5: + 280 0055 3E3E 3E3E .string ">>>>> <<<<<" + 280 3E20 2020 + 280 2020 203C + 280 3C3C 3C3C + 280 00 + 281 .LC6: + 282 0066 3E3E 3E3E .string ">>>>>> <<<<<<" + 282 3E3E 2020 + 282 2020 3C3C + 282 3C3C 3C3C + 282 00 + 283 .LC7: + 284 0077 3E3E 3E3E .string ">>>>>>> <<<<<<<" + 284 3E3E 3E20 + 284 203C 3C3C + 284 3C3C 3C3C + 284 00 + 285 .LC8: + 286 0088 3E3E 3E3E .string ">>>>>>>[]<<<<<<<" + 286 3E3E 3E5B + 286 5D3C 3C3C + 286 3C3C 3C3C + 286 00 + 287 .LC9: + 288 0099 2020 2020 .string " < > " + 288 2020 3C20 + 288 203E 2020 + 288 2020 2020 + 288 00 + 289 .LC10: + 290 00aa 2020 2020 .string " << >> " + 290 203C 3C20 + 290 203E 3E20 + 290 2020 2020 + 290 00 + 291 .LC11: + 292 00bb 2020 2020 .string " <<< >>> " + 292 3C3C 3C20 + 292 203E 3E3E + 292 2020 2020 + 292 00 + 293 .LC12: + 294 00cc 2020 203C .string " <<<< >>>> " + 294 3C3C 3C20 + 294 203E 3E3E + 294 3E20 2020 + 294 00 + 295 .LC13: + 296 00dd 2020 3C3C .string " <<<<< >>>>> " + 296 3C3C 3C20 + 296 203E 3E3E + 296 3E3E 2020 + 296 00 + 297 .LC14: + 298 00ee 203C 3C3C .string " <<<<<< >>>>>> " + 298 3C3C 3C20 + 298 203E 3E3E + 298 3E3E 3E20 + 298 00 + 299 .LC15: + 300 00ff 3C3C 3C3C .string "<<<<<<< >>>>>>>" + 300 3C3C 3C20 + 300 203E 3E3E + 300 3E3E 3E3E + 300 00 + 301 .LC16: + 302 0110 3C3C 3C3C .string "<<<<<<<[]>>>>>>>" + 302 3C3C 3C5B + 302 5D3E 3E3E + 302 3E3E 3E3E + 302 00 + 303 .LC17: + 304 0121 3C3C 3C3C .string "<<<<<<< " + 304 3C3C 3C20 + 304 2020 2020 + 304 2020 2020 + 304 00 + 305 .LC18: + 306 0132 203C 3C3C .string " <<<<<< " + 306 3C3C 3C20 + 306 2020 2020 + 306 2020 2020 + 306 00 + 307 .LC19: + 308 0143 2020 3C3C .string " <<<<< " + 308 3C3C 3C20 + 308 2020 2020 + 308 2020 2020 + 308 00 + 309 .LC20: + 310 0154 2020 203C .string " <<<< " + 310 3C3C 3C20 + 310 2020 2020 + 310 2020 2020 + 310 00 + 311 .LC21: + 312 0165 2020 2020 .string " <<< " + 312 3C3C 3C20 + 312 2020 2020 + 312 2020 2020 + 312 00 + 313 .LC22: + 314 0176 2020 2020 .string " << " + 314 203C 3C20 + 314 2020 2020 + 314 2020 2020 + 314 00 + 315 .LC23: + 316 0187 2020 2020 .string " < " + 316 2020 3C20 + 316 2020 2020 + 316 2020 2020 + 316 00 + 317 .LC24: + 318 0198 2020 2020 .string " [] " + 318 2020 205B + 318 5D20 2020 + 318 2020 2020 + 318 00 + 319 .LC25: + 320 01a9 2020 2020 .string " >>>>>>>" + 320 2020 2020 + 320 203E 3E3E + 320 3E3E 3E3E + 320 00 + 321 .LC26: + 322 01ba 2020 2020 .string " >>>>>> " + 322 2020 2020 + 322 203E 3E3E + 322 3E3E 3E20 + 322 00 + 323 .LC27: + 324 01cb 2020 2020 .string " >>>>> " + 324 2020 2020 + 324 203E 3E3E + 324 3E3E 2020 + 324 00 + 325 .LC28: + 326 01dc 2020 2020 .string " >>>> " + 326 2020 2020 + 326 203E 3E3E + 326 3E20 2020 + 326 00 + 327 .LC29: + 328 01ed 2020 2020 .string " >>> " + 328 2020 2020 + 328 203E 3E3E + 328 2020 2020 + 328 00 + 329 .LC30: + 330 01fe 2020 2020 .string " >> " + 330 2020 2020 + 330 203E 3E20 + 330 2020 2020 + 330 00 + 331 .LC31: + 332 020f 2020 2020 .string " > " + 332 2020 2020 + 332 203E 2020 + 332 2020 2020 + 332 00 + 333 .text + 334 .global showDistanceOnLCD + 336 showDistanceOnLCD: + 337 .LFB20: + 338 .LM47: + 339 /* prologue: frame size=0 */ + 340 0128 1F93 push r17 + 341 012a CF93 push r28 + 342 012c DF93 push r29 + 343 /* prologue end (size=3) */ + 344 .LVL5: + 345 012e EC01 movw r28,r24 + 346 0130 162F mov r17,r22 + 347 .LM48: + 348 0132 4130 cpi r20,lo8(1) + 349 0134 01F4 brne .L25 + 350 .LVL6: + 351 .LM49: + 352 0136 80E0 ldi r24,lo8(0) + 353 0138 00C0 rjmp .L100 + 354 .LVL7: + 355 .L25: + 356 .LM50: + 357 013a 4230 cpi r20,lo8(2) + 358 013c 01F4 brne .L28 + 359 .LM51: + 360 013e 80E1 ldi r24,lo8(16) + 361 0140 00C0 rjmp .L100 + 362 .LVL8: + 363 .L28: + 364 .LM52: + 365 0142 4330 cpi r20,lo8(3) + 366 0144 01F4 brne .L27 + 367 .LM53: + 368 0146 80E2 ldi r24,lo8(32) + 369 .L100: + 370 0148 0E94 0000 call lcdSetPos + 371 .LVL9: + 372 .L27: + 373 .LM54: + 374 014c 1123 tst r17 + 375 014e 01F4 brne .L31 + 376 .LM55: + 377 0150 8DE7 ldi r24,hi8(32001) + 378 0152 C130 cpi r28,lo8(32001) + 379 0154 D807 cpc r29,r24 + 380 0156 00F4 brsh .L102 + 381 .LM56: + 382 0158 8EE3 ldi r24,hi8(16001) + 383 015a C138 cpi r28,lo8(16001) + 384 015c D807 cpc r29,r24 + 385 015e 00F0 brlo .L36 + 386 .LM57: + 387 0160 80E0 ldi r24,lo8(.LC1) + 388 0162 90E0 ldi r25,hi8(.LC1) + 389 0164 00C0 rjmp .L101 + 390 .L36: + 391 .LM58: + 392 0166 8FE1 ldi r24,hi8(8001) + 393 0168 C134 cpi r28,lo8(8001) + 394 016a D807 cpc r29,r24 + 395 016c 00F0 brlo .L38 + 396 .LM59: + 397 016e 80E0 ldi r24,lo8(.LC2) + 398 0170 90E0 ldi r25,hi8(.LC2) + 399 0172 00C0 rjmp .L101 + 400 .L38: + 401 .LM60: + 402 0174 8FE0 ldi r24,hi8(4001) + 403 0176 C13A cpi r28,lo8(4001) + 404 0178 D807 cpc r29,r24 + 405 017a 00F0 brlo .L40 + 406 .LM61: + 407 017c 80E0 ldi r24,lo8(.LC3) + 408 017e 90E0 ldi r25,hi8(.LC3) + 409 0180 00C0 rjmp .L101 + 410 .L40: + 411 .LM62: + 412 0182 87E0 ldi r24,hi8(2001) + 413 0184 C13D cpi r28,lo8(2001) + 414 0186 D807 cpc r29,r24 + 415 0188 00F0 brlo .L42 + 416 .LM63: + 417 018a 80E0 ldi r24,lo8(.LC4) + 418 018c 90E0 ldi r25,hi8(.LC4) + 419 018e 00C0 rjmp .L101 + 420 .L42: + 421 .LM64: + 422 0190 83E0 ldi r24,hi8(1001) + 423 0192 C93E cpi r28,lo8(1001) + 424 0194 D807 cpc r29,r24 + 425 0196 00F0 brlo .L44 + 426 .LM65: + 427 0198 80E0 ldi r24,lo8(.LC5) + 428 019a 90E0 ldi r25,hi8(.LC5) + 429 019c 00C0 rjmp .L101 + 430 .L44: + 431 .LM66: + 432 019e 81E0 ldi r24,hi8(501) + 433 01a0 C53F cpi r28,lo8(501) + 434 01a2 D807 cpc r29,r24 + 435 01a4 00F0 brlo .L46 + 436 .LM67: + 437 01a6 80E0 ldi r24,lo8(.LC6) + 438 01a8 90E0 ldi r25,hi8(.LC6) + 439 01aa 00C0 rjmp .L101 + 440 .L46: + 441 .LM68: + 442 01ac C536 cpi r28,101 + 443 01ae D105 cpc r29,__zero_reg__ + 444 01b0 00F0 brlo .L48 + 445 .LM69: + 446 01b2 80E0 ldi r24,lo8(.LC7) + 447 01b4 90E0 ldi r25,hi8(.LC7) + 448 01b6 00C0 rjmp .L101 + 449 .L48: + 450 .LM70: + 451 01b8 80E0 ldi r24,lo8(.LC8) + 452 01ba 90E0 ldi r25,hi8(.LC8) + 453 01bc 00C0 rjmp .L101 + 454 .LVL10: + 455 .L31: + 456 .LM71: + 457 01be 1130 cpi r17,lo8(1) + 458 01c0 01F4 brne .L50 + 459 .LM72: + 460 01c2 8DE7 ldi r24,hi8(32001) + 461 01c4 C130 cpi r28,lo8(32001) + 462 01c6 D807 cpc r29,r24 + 463 01c8 00F0 brlo .L52 + 464 .L102: + 465 .LM73: + 466 01ca 80E0 ldi r24,lo8(.LC0) + 467 01cc 90E0 ldi r25,hi8(.LC0) + 468 01ce 00C0 rjmp .L101 + 469 .L52: + 470 .LM74: + 471 01d0 8EE3 ldi r24,hi8(16001) + 472 01d2 C138 cpi r28,lo8(16001) + 473 01d4 D807 cpc r29,r24 + 474 01d6 00F0 brlo .L54 + 475 .LM75: + 476 01d8 80E0 ldi r24,lo8(.LC9) + 477 01da 90E0 ldi r25,hi8(.LC9) + 478 01dc 00C0 rjmp .L101 + 479 .L54: + 480 .LM76: + 481 01de 8FE1 ldi r24,hi8(8001) + 482 01e0 C134 cpi r28,lo8(8001) + 483 01e2 D807 cpc r29,r24 + 484 01e4 00F0 brlo .L56 + 485 .LM77: + 486 01e6 80E0 ldi r24,lo8(.LC10) + 487 01e8 90E0 ldi r25,hi8(.LC10) + 488 01ea 00C0 rjmp .L101 + 489 .L56: + 490 .LM78: + 491 01ec 8FE0 ldi r24,hi8(4001) + 492 01ee C13A cpi r28,lo8(4001) + 493 01f0 D807 cpc r29,r24 + 494 01f2 00F0 brlo .L58 + 495 .LM79: + 496 01f4 80E0 ldi r24,lo8(.LC11) + 497 01f6 90E0 ldi r25,hi8(.LC11) + 498 01f8 00C0 rjmp .L101 + 499 .L58: + 500 .LM80: + 501 01fa 87E0 ldi r24,hi8(2001) + 502 01fc C13D cpi r28,lo8(2001) + 503 01fe D807 cpc r29,r24 + 504 0200 00F0 brlo .L60 + 505 .LM81: + 506 0202 80E0 ldi r24,lo8(.LC12) + 507 0204 90E0 ldi r25,hi8(.LC12) + 508 0206 00C0 rjmp .L101 + 509 .L60: + 510 .LM82: + 511 0208 83E0 ldi r24,hi8(1001) + 512 020a C93E cpi r28,lo8(1001) + 513 020c D807 cpc r29,r24 + 514 020e 00F0 brlo .L62 + 515 .LM83: + 516 0210 80E0 ldi r24,lo8(.LC13) + 517 0212 90E0 ldi r25,hi8(.LC13) + 518 0214 00C0 rjmp .L101 + 519 .L62: + 520 .LM84: + 521 0216 81E0 ldi r24,hi8(501) + 522 0218 C53F cpi r28,lo8(501) + 523 021a D807 cpc r29,r24 + 524 021c 00F0 brlo .L64 + 525 .LM85: + 526 021e 80E0 ldi r24,lo8(.LC14) + 527 0220 90E0 ldi r25,hi8(.LC14) + 528 0222 00C0 rjmp .L101 + 529 .L64: + 530 .LM86: + 531 0224 C536 cpi r28,101 + 532 0226 D105 cpc r29,__zero_reg__ + 533 0228 00F0 brlo .L66 + 534 .LM87: + 535 022a 80E0 ldi r24,lo8(.LC15) + 536 022c 90E0 ldi r25,hi8(.LC15) + 537 022e 00C0 rjmp .L101 + 538 .L66: + 539 .LM88: + 540 0230 80E0 ldi r24,lo8(.LC16) + 541 0232 90E0 ldi r25,hi8(.LC16) + 542 0234 00C0 rjmp .L101 + 543 .LVL11: + 544 .L50: + 545 .LM89: + 546 0236 1230 cpi r17,lo8(2) + 547 0238 01F4 brne .L68 + 548 .LM90: + 549 023a 89E1 ldi r24,hi8(6401) + 550 023c C130 cpi r28,lo8(6401) + 551 023e D807 cpc r29,r24 + 552 0240 00F0 brlo .L70 + 553 .LM91: + 554 0242 80E0 ldi r24,lo8(.LC17) + 555 0244 90E0 ldi r25,hi8(.LC17) + 556 0246 00C0 rjmp .L101 + 557 .L70: + 558 .LM92: + 559 0248 8CE0 ldi r24,hi8(3201) + 560 024a C138 cpi r28,lo8(3201) + 561 024c D807 cpc r29,r24 + 562 024e 00F0 brlo .L72 + 563 .LM93: + 564 0250 80E0 ldi r24,lo8(.LC18) + 565 0252 90E0 ldi r25,hi8(.LC18) + 566 0254 00C0 rjmp .L101 + 567 .L72: + 568 .LM94: + 569 0256 86E0 ldi r24,hi8(1601) + 570 0258 C134 cpi r28,lo8(1601) + 571 025a D807 cpc r29,r24 + 572 025c 00F0 brlo .L74 + 573 .LM95: + 574 025e 80E0 ldi r24,lo8(.LC19) + 575 0260 90E0 ldi r25,hi8(.LC19) + 576 0262 00C0 rjmp .L101 + 577 .L74: + 578 .LM96: + 579 0264 83E0 ldi r24,hi8(801) + 580 0266 C132 cpi r28,lo8(801) + 581 0268 D807 cpc r29,r24 + 582 026a 00F0 brlo .L76 + 583 .LM97: + 584 026c 80E0 ldi r24,lo8(.LC20) + 585 026e 90E0 ldi r25,hi8(.LC20) + 586 0270 00C0 rjmp .L101 + 587 .L76: + 588 .LM98: + 589 0272 81E0 ldi r24,hi8(401) + 590 0274 C139 cpi r28,lo8(401) + 591 0276 D807 cpc r29,r24 + 592 0278 00F0 brlo .L78 + 593 .LM99: + 594 027a 80E0 ldi r24,lo8(.LC21) + 595 027c 90E0 ldi r25,hi8(.LC21) + 596 027e 00C0 rjmp .L101 + 597 .L78: + 598 .LM100: + 599 0280 C93C cpi r28,201 + 600 0282 D105 cpc r29,__zero_reg__ + 601 0284 00F0 brlo .L80 + 602 .LM101: + 603 0286 80E0 ldi r24,lo8(.LC22) + 604 0288 90E0 ldi r25,hi8(.LC22) + 605 028a 00C0 rjmp .L101 + 606 .L80: + 607 .LM102: + 608 028c 6F97 sbiw r28,31 + 609 028e 00F0 brlo .L97 + 610 .LM103: + 611 0290 80E0 ldi r24,lo8(.LC23) + 612 0292 90E0 ldi r25,hi8(.LC23) + 613 0294 00C0 rjmp .L101 + 614 .LVL12: + 615 .L68: + 616 .LM104: + 617 0296 1330 cpi r17,lo8(3) + 618 0298 01F4 brne .L99 + 619 .LM105: + 620 029a 89E1 ldi r24,hi8(6401) + 621 029c C130 cpi r28,lo8(6401) + 622 029e D807 cpc r29,r24 + 623 02a0 00F0 brlo .L85 + 624 .LM106: + 625 02a2 80E0 ldi r24,lo8(.LC25) + 626 02a4 90E0 ldi r25,hi8(.LC25) + 627 02a6 00C0 rjmp .L101 + 628 .L85: + 629 .LM107: + 630 02a8 8CE0 ldi r24,hi8(3201) + 631 02aa C138 cpi r28,lo8(3201) + 632 02ac D807 cpc r29,r24 + 633 02ae 00F0 brlo .L87 + 634 .LM108: + 635 02b0 80E0 ldi r24,lo8(.LC26) + 636 02b2 90E0 ldi r25,hi8(.LC26) + 637 02b4 00C0 rjmp .L101 + 638 .L87: + 639 .LM109: + 640 02b6 86E0 ldi r24,hi8(1601) + 641 02b8 C134 cpi r28,lo8(1601) + 642 02ba D807 cpc r29,r24 + 643 02bc 00F0 brlo .L89 + 644 .LM110: + 645 02be 80E0 ldi r24,lo8(.LC27) + 646 02c0 90E0 ldi r25,hi8(.LC27) + 647 02c2 00C0 rjmp .L101 + 648 .L89: + 649 .LM111: + 650 02c4 83E0 ldi r24,hi8(801) + 651 02c6 C132 cpi r28,lo8(801) + 652 02c8 D807 cpc r29,r24 + 653 02ca 00F0 brlo .L91 + 654 .LM112: + 655 02cc 80E0 ldi r24,lo8(.LC28) + 656 02ce 90E0 ldi r25,hi8(.LC28) + 657 02d0 00C0 rjmp .L101 + 658 .L91: + 659 .LM113: + 660 02d2 81E0 ldi r24,hi8(401) + 661 02d4 C139 cpi r28,lo8(401) + 662 02d6 D807 cpc r29,r24 + 663 02d8 00F0 brlo .L93 + 664 .LM114: + 665 02da 80E0 ldi r24,lo8(.LC29) + 666 02dc 90E0 ldi r25,hi8(.LC29) + 667 02de 00C0 rjmp .L101 + 668 .L93: + 669 .LM115: + 670 02e0 C93C cpi r28,201 + 671 02e2 D105 cpc r29,__zero_reg__ + 672 02e4 00F0 brlo .L95 + 673 .LM116: + 674 02e6 80E0 ldi r24,lo8(.LC30) + 675 02e8 90E0 ldi r25,hi8(.LC30) + 676 02ea 00C0 rjmp .L101 + 677 .L95: + 678 .LM117: + 679 02ec 6F97 sbiw r28,31 + 680 02ee 00F0 brlo .L97 + 681 .LM118: + 682 02f0 80E0 ldi r24,lo8(.LC31) + 683 02f2 90E0 ldi r25,hi8(.LC31) + 684 02f4 00C0 rjmp .L101 + 685 .L97: + 686 .LM119: + 687 02f6 80E0 ldi r24,lo8(.LC24) + 688 02f8 90E0 ldi r25,hi8(.LC24) + 689 .L101: + 690 02fa 0E94 0000 call lcdWriteString + 691 .LVL13: + 692 .LVL14: + 693 .L99: + 694 /* epilogue: frame size=0 */ + 695 02fe DF91 pop r29 + 696 0300 CF91 pop r28 + 697 0302 1F91 pop r17 + 698 0304 0895 ret + 699 /* epilogue end (size=4) */ + 700 /* function showDistanceOnLCD size 241 (234) */ + 701 .LFE20: + 703 .global checkCommunication + 705 checkCommunication: + 706 .LFB21: + 707 .LM120: + 708 /* prologue: frame size=0 */ + 709 0306 0F93 push r16 + 710 0308 1F93 push r17 + 711 /* prologue end (size=2) */ + 712 .LM121: + 713 030a 0E94 0000 call rfIdGetTagPresent + 714 030e 8823 tst r24 + 715 0310 01F0 breq .L104 + 716 .LBB2: + 717 .LM122: + 718 0312 0E94 0000 call rfIdGetTag + 719 0316 8C01 movw r16,r24 + 720 .LVL15: + 721 .LM123: + 722 0318 83E1 ldi r24,lo8(19) + 723 031a 0E94 0000 call lcdSetPos + 724 .LM124: + 725 031e C801 movw r24,r16 + 726 0320 0E94 0000 call lcdWriteString + 727 .LM125: + 728 0324 C801 movw r24,r16 + 729 0326 0E94 0000 call roboMSPSetData + 730 .L104: + 731 .LBE2: + 732 .LM126: + 733 032a 0E94 0000 call roboMSPGetActiveStatus + 734 032e 8330 cpi r24,lo8(3) + 735 0330 01F0 breq .L108 + 736 0332 8430 cpi r24,lo8(4) + 737 0334 00F4 brsh .L111 + 738 0336 8230 cpi r24,lo8(2) + 739 0338 01F4 brne .L112 + 740 033a 00C0 rjmp .L107 + 741 .L111: + 742 033c 8430 cpi r24,lo8(4) + 743 033e 01F0 breq .L109 + 744 0340 8530 cpi r24,lo8(5) + 745 0342 01F4 brne .L112 + 746 0344 00C0 rjmp .L110 + 747 .L107: + 748 .LM127: + 749 0346 81E0 ldi r24,lo8(1) + 750 0348 00C0 rjmp .L113 + 751 .L108: + 752 .LM128: + 753 034a 82E0 ldi r24,lo8(2) + 754 .L113: + 755 034c 0E94 0000 call activateRobot + 756 .LM129: + 757 0350 0E94 0000 call rfIdEnable + 758 0354 00C0 rjmp .L112 + 759 .L109: + 760 .LM130: + 761 0356 0E94 0000 call deactivateRobot + 762 035a 00C0 rjmp .L112 + 763 .L110: + 764 .LM131: + 765 035c 0E94 0000 call rfIdClearBuffer + 766 .L112: + 767 /* epilogue: frame size=0 */ + 768 0360 1F91 pop r17 + 769 0362 0F91 pop r16 + 770 0364 0895 ret + 771 /* epilogue end (size=3) */ + 772 /* function checkCommunication size 48 (43) */ + 773 .LFE21: + 775 .data + 776 .LC32: + 777 0220 4472 6976 .string "Drive: FORWARD " + 777 653A 2046 + 777 4F52 5741 + 777 5244 2020 + 777 00 + 778 .LC33: + 779 0231 4472 6976 .string "Drive: STOP " + 779 653A 2053 + 779 544F 5020 + 779 2020 2020 + 779 00 + 780 .LC34: + 781 0242 416C 6967 .string "Align to wall " + 781 6E20 746F + 781 2077 616C + 781 6C20 2020 + 781 00 + 782 .LC35: + 783 0253 2020 5E2D .string " ^-- (1m) --^ " + 783 2D20 2831 + 783 6D29 202D + 783 2D5E 2020 + 783 00 + 784 .LC36: + 785 0264 506F 7369 .string "Posistion locked" + 785 7374 696F + 785 6E20 6C6F + 785 636B 6564 + 785 00 + 786 .LC37: + 787 0275 4472 6976 .string "Drive: Turn < " + 787 653A 2054 + 787 7572 6E20 + 787 3C20 00 + 788 .LC38: + 789 0284 4472 6976 .string "Drive: Turn > " + 789 653A 2054 + 789 7572 6E20 + 789 3E20 00 + 790 .LC39: + 791 0293 205D 2D2D .string " ]--- (1m) --->|" + 791 2D20 2831 + 791 6D29 202D + 791 2D2D 3E7C + 791 00 + 792 .LC40: + 793 02a4 7C3C 2D2D .string "|<--- (1m) ---[ " + 793 2D20 2831 + 793 6D29 202D + 793 2D2D 5B20 + 793 00 + 794 .LC41: + 795 02b5 4472 6976 .string "Drive: Turn <<< " + 795 653A 2054 + 795 7572 6E20 + 795 3C3C 3C20 + 795 00 + 796 .LC42: + 797 02c6 4472 6976 .string "Drive: Turn < " + 797 653A 2054 + 797 7572 6E20 + 797 3C20 2020 + 797 00 + 798 .LC43: + 799 02d7 4472 6976 .string "Drive: Turn > " + 799 653A 2054 + 799 7572 6E20 + 799 3E20 2020 + 799 00 + 800 .LC44: + 801 02e8 5365 7276 .string "Servo: forward " + 801 6F3A 2066 + 801 6F72 7761 + 801 7264 2000 + 802 .LC45: + 803 02f8 4469 7374 .string "Distance: " + 803 616E 6365 + 803 3A20 00 + 804 .text + 805 .global updateProgram + 807 updateProgram: + 808 .LFB19: + 809 .LM132: + 810 /* prologue: frame size=0 */ + 811 0366 1F93 push r17 + 812 /* prologue end (size=1) */ + 813 .LM133: + 814 0368 8091 0000 lds r24,rfEnable + 815 036c 8823 tst r24 + 816 036e 01F0 breq .L115 + 817 .LM134: + 818 0370 0E94 0000 call checkCommunication + 819 .L115: + 820 .LM135: + 821 0374 8091 0000 lds r24,roboActive + 822 0378 8130 cpi r24,lo8(1) + 823 037a 01F0 breq .+2 + 824 037c 00C0 rjmp .L117 + 825 .LM136: + 826 037e 8091 0000 lds r24,progCounter + 827 0382 8F5F subi r24,lo8(-(1)) + 828 0384 8093 0000 sts progCounter,r24 + 829 0388 9091 0000 lds r25,progTimer + 830 038c 8917 cp r24,r25 + 831 038e 00F4 brsh .+2 + 832 0390 00C0 rjmp .L117 + 833 .LM137: + 834 0392 8091 0000 lds r24,progPosition + 835 0396 E82F mov r30,r24 + 836 0398 F0E0 ldi r31,lo8(0) + 837 039a E631 cpi r30,22 + 838 039c F105 cpc r31,__zero_reg__ + 839 039e 00F0 brlo .+2 + 840 03a0 00C0 rjmp .L120 + 841 03a2 E050 subi r30,lo8(-(gs(.L143))) +**** Warning:expression dangerous with linker stubs + 842 03a4 F040 sbci r31,hi8(-(gs(.L143))) +**** Warning:expression dangerous with linker stubs + 843 03a6 EE0F lsl r30 + 844 03a8 FF1F rol r31 + 845 03aa 0590 lpm __tmp_reg__,Z+ + 846 03ac F491 lpm r31,Z + 847 03ae E02D mov r30,__tmp_reg__ + 848 03b0 0994 ijmp + 849 .data + 850 .section .progmem.gcc_sw_table, "a", @progbits + 851 .p2align 1 + 852 .L143: + 853 .data + 854 .section .progmem.gcc_sw_table, "a", @progbits + 855 .p2align 1 + 856 0000 0000 .word gs(.L121) + 857 0002 0000 .word gs(.L122) + 858 0004 0000 .word gs(.L123) + 859 0006 0000 .word gs(.L124) + 860 0008 0000 .word gs(.L125) + 861 000a 0000 .word gs(.L126) + 862 000c 0000 .word gs(.L127) + 863 000e 0000 .word gs(.L128) + 864 0010 0000 .word gs(.L129) + 865 0012 0000 .word gs(.L130) + 866 0014 0000 .word gs(.L131) + 867 0016 0000 .word gs(.L132) + 868 0018 0000 .word gs(.L133) + 869 001a 0000 .word gs(.L134) + 870 001c 0000 .word gs(.L135) + 871 001e 0000 .word gs(.L136) + 872 0020 0000 .word gs(.L137) + 873 0022 0000 .word gs(.L138) + 874 0024 0000 .word gs(.L139) + 875 0026 0000 .word gs(.L140) + 876 0028 0000 .word gs(.L141) + 877 002a 0000 .word gs(.L142) + 878 .text + 879 .L121: + 880 .LM138: + 881 03b2 0E94 0000 call lcdClearDisplay + 882 .LM139: + 883 03b6 81E0 ldi r24,lo8(1) + 884 03b8 0E94 0000 call lcdSetLayout + 885 03bc 00C0 rjmp .L136 + 886 .L122: + 887 .LM140: + 888 03be 8FE7 ldi r24,lo8(127) + 889 03c0 8093 0000 sts servoMotorLeft,r24 + 890 .LM141: + 891 03c4 8093 0000 sts servoMotorRight,r24 + 892 .LM142: + 893 03c8 0E94 0000 call pingSendPing + 894 .LM143: + 895 03cc 84E0 ldi r24,lo8(4) + 896 03ce 8093 0000 sts progTimer,r24 + 897 .LM144: + 898 03d2 0E94 0000 call pingGetReady + 899 03d6 8823 tst r24 + 900 03d8 01F4 brne .+2 + 901 03da 00C0 rjmp .L120 + 902 .LM145: + 903 03dc 0E94 0000 call pingGetDistance + 904 03e0 9093 0000 sts (tempDistance)+1,r25 + 905 03e4 8093 0000 sts tempDistance,r24 + 906 .LM146: + 907 03e8 27E1 ldi r18,hi8(6000) + 908 03ea 8037 cpi r24,lo8(6000) + 909 03ec 9207 cpc r25,r18 + 910 03ee 00F4 brsh .L145 + 911 .LM147: + 912 03f0 42E0 ldi r20,lo8(2) + 913 03f2 60E0 ldi r22,lo8(0) + 914 03f4 80E0 ldi r24,lo8(0) + 915 03f6 90E0 ldi r25,hi8(0) + 916 03f8 0E94 0000 call showDistanceOnLCD + 917 03fc 00C0 rjmp .L283 + 918 .L145: + 919 .LM148: + 920 03fe 42E0 ldi r20,lo8(2) + 921 0400 60E0 ldi r22,lo8(0) + 922 0402 8057 subi r24,lo8(-(-6000)) + 923 0404 9741 sbci r25,hi8(-(-6000)) + 924 0406 0E94 0000 call showDistanceOnLCD + 925 040a 00C0 rjmp .L120 + 926 .L123: + 927 .LM149: + 928 040c 80E0 ldi r24,lo8(0) + 929 040e 0E94 0000 call lcdSetPos + 930 .LM150: + 931 0412 80E0 ldi r24,lo8(.LC33) + 932 0414 90E0 ldi r25,hi8(.LC33) + 933 0416 0E94 0000 call lcdWriteString + 934 .LM151: + 935 041a 8CE6 ldi r24,lo8(108) + 936 041c 8093 0000 sts servoMotorLeft,r24 + 937 .LM152: + 938 0420 8093 0000 sts servoMotorRight,r24 + 939 .LM153: + 940 0424 88E2 ldi r24,lo8(40) + 941 0426 00C0 rjmp .L280 + 942 .L124: + 943 .LM154: + 944 0428 87E7 ldi r24,lo8(119) + 945 042a 8093 0000 sts servoMotorLeft,r24 + 946 .LM155: + 947 042e 8093 0000 sts servoMotorRight,r24 + 948 .LM156: + 949 0432 81E0 ldi r24,lo8(1) + 950 0434 8093 0000 sts progTimer,r24 + 951 .LM157: + 952 0438 1092 0000 sts regulatorMeasureCounter,__zero_reg__ + 953 .LM158: + 954 043c 84E0 ldi r24,lo8(4) + 955 043e 00C0 rjmp .L266 + 956 .L125: + 957 .LM159: + 958 0440 8EEA ldi r24,lo8(-82) + 959 0442 8093 0000 sts servoPing,r24 + 960 .LM160: + 961 0446 84E1 ldi r24,lo8(20) + 962 0448 8093 0000 sts progTimer,r24 + 963 .LM161: + 964 044c 85E0 ldi r24,lo8(5) + 965 044e 00C0 rjmp .L266 + 966 .L126: + 967 .LM162: + 968 0450 0E94 0000 call pingSendPing + 969 .LM163: + 970 0454 84E0 ldi r24,lo8(4) + 971 0456 8093 0000 sts progTimer,r24 + 972 .LM164: + 973 045a 0E94 0000 call pingGetReady + 974 045e 8823 tst r24 + 975 0460 01F4 brne .+2 + 976 0462 00C0 rjmp .L120 + 977 .LM165: + 978 0464 0E94 0000 call pingGetDistance + 979 0468 9093 0000 sts (tempLeftDistance)+1,r25 + 980 046c 8093 0000 sts tempLeftDistance,r24 + 981 0470 00C0 rjmp .L283 + 982 .L127: + 983 .LM166: + 984 0472 87E6 ldi r24,lo8(103) + 985 0474 8093 0000 sts servoPing,r24 + 986 .LM167: + 987 0478 88E2 ldi r24,lo8(40) + 988 047a 8093 0000 sts progTimer,r24 + 989 .LM168: + 990 047e 87E0 ldi r24,lo8(7) + 991 0480 00C0 rjmp .L266 + 992 .L128: + 993 .LM169: + 994 0482 0E94 0000 call pingSendPing + 995 .LM170: + 996 0486 84E0 ldi r24,lo8(4) + 997 0488 8093 0000 sts progTimer,r24 + 998 .LM171: + 999 048c 0E94 0000 call pingGetReady + 1000 0490 8823 tst r24 + 1001 0492 01F4 brne .+2 + 1002 0494 00C0 rjmp .L120 + 1003 .LM172: + 1004 0496 0E94 0000 call pingGetDistance + 1005 049a 9093 0000 sts (tempRightDistance)+1,r25 + 1006 049e 8093 0000 sts tempRightDistance,r24 + 1007 04a2 00C0 rjmp .L283 + 1008 .L129: + 1009 .LM173: + 1010 04a4 8CE8 ldi r24,lo8(-116) + 1011 04a6 8093 0000 sts servoPing,r24 + 1012 .LM174: + 1013 04aa 2091 0000 lds r18,tempLeftDistance + 1014 04ae 3091 0000 lds r19,(tempLeftDistance)+1 + 1015 04b2 8091 0000 lds r24,tempRightDistance + 1016 04b6 9091 0000 lds r25,(tempRightDistance)+1 + 1017 04ba 8217 cp r24,r18 + 1018 04bc 9307 cpc r25,r19 + 1019 04be 00F4 brsh .L149 + 1020 .LM175: + 1021 04c0 1092 0000 sts regulatorMode,__zero_reg__ + 1022 04c4 00C0 rjmp .L151 + 1023 .L149: + 1024 .LM176: + 1025 04c6 81E0 ldi r24,lo8(1) + 1026 04c8 8093 0000 sts regulatorMode,r24 + 1027 .L151: + 1028 .LM177: + 1029 04cc 82E3 ldi r24,lo8(50) + 1030 04ce 8093 0000 sts progTimer,r24 + 1031 .LM178: + 1032 04d2 89E0 ldi r24,lo8(9) + 1033 04d4 00C0 rjmp .L266 + 1034 .L130: + 1035 .LM179: + 1036 04d6 0E94 0000 call pingSendPing + 1037 .LM180: + 1038 04da 84E0 ldi r24,lo8(4) + 1039 04dc 8093 0000 sts progTimer,r24 + 1040 .LM181: + 1041 04e0 0E94 0000 call pingGetReady + 1042 04e4 8823 tst r24 + 1043 04e6 01F4 brne .+2 + 1044 04e8 00C0 rjmp .L120 + 1045 .LM182: + 1046 04ea 80E0 ldi r24,lo8(0) + 1047 04ec 0E94 0000 call lcdSetPos + 1048 .LM183: + 1049 04f0 80E0 ldi r24,lo8(.LC34) + 1050 04f2 90E0 ldi r25,hi8(.LC34) + 1051 04f4 0E94 0000 call lcdWriteString + 1052 .LM184: + 1053 04f8 0E94 0000 call pingGetDistance + 1054 04fc 9093 0000 sts (tempLastDistanceToWall)+1,r25 + 1055 0500 8093 0000 sts tempLastDistanceToWall,r24 + 1056 .LM185: + 1057 0504 9093 0000 sts (tempDistanceToWall)+1,r25 + 1058 0508 8093 0000 sts tempDistanceToWall,r24 + 1059 050c 00C0 rjmp .L283 + 1060 .L131: + 1061 .LM186: + 1062 050e 8091 0000 lds r24,regulatorMode + 1063 0512 8823 tst r24 + 1064 0514 01F4 brne .L153 + 1065 .LM187: + 1066 0516 86E8 ldi r24,lo8(-122) + 1067 0518 8093 0000 sts servoMotorLeft,r24 + 1068 .LM188: + 1069 051c 88E6 ldi r24,lo8(104) + 1070 051e 00C0 rjmp .L257 + 1071 .L153: + 1072 .LM189: + 1073 0520 8130 cpi r24,lo8(1) + 1074 0522 01F4 brne .L155 + 1075 .LM190: + 1076 0524 88E6 ldi r24,lo8(104) + 1077 0526 8093 0000 sts servoMotorLeft,r24 + 1078 .LM191: + 1079 052a 86E8 ldi r24,lo8(-122) + 1080 .L257: + 1081 052c 8093 0000 sts servoMotorRight,r24 + 1082 .LM192: + 1083 0530 87E0 ldi r24,lo8(7) + 1084 0532 8093 0000 sts progTimer,r24 + 1085 .L155: + 1086 .LM193: + 1087 0536 8BE0 ldi r24,lo8(11) + 1088 0538 00C0 rjmp .L266 + 1089 .L132: + 1090 .LM194: + 1091 053a 0E94 0000 call pingSendPing + 1092 .LM195: + 1093 053e 84E0 ldi r24,lo8(4) + 1094 0540 8093 0000 sts progTimer,r24 + 1095 .LM196: + 1096 0544 87E7 ldi r24,lo8(119) + 1097 0546 8093 0000 sts servoMotorLeft,r24 + 1098 .LM197: + 1099 054a 8093 0000 sts servoMotorRight,r24 + 1100 .LM198: + 1101 054e 0E94 0000 call pingGetReady + 1102 0552 8823 tst r24 + 1103 0554 01F4 brne .+2 + 1104 0556 00C0 rjmp .L120 + 1105 .LM199: + 1106 0558 0E94 0000 call pingGetDistance + 1107 055c 9093 0000 sts (tempDistance)+1,r25 + 1108 0560 8093 0000 sts tempDistance,r24 + 1109 .LM200: + 1110 0564 2091 0000 lds r18,tempLastDistanceToWall + 1111 0568 3091 0000 lds r19,(tempLastDistanceToWall)+1 + 1112 056c 2817 cp r18,r24 + 1113 056e 3907 cpc r19,r25 + 1114 0570 00F4 brsh .L158 + 1115 .LM201: + 1116 0572 80E0 ldi r24,lo8(0) + 1117 0574 0E94 0000 call lcdSetPos + 1118 .LM202: + 1119 0578 80E0 ldi r24,lo8(.LC35) + 1120 057a 90E0 ldi r25,hi8(.LC35) + 1121 057c 0E94 0000 call lcdWriteString + 1122 .LM203: + 1123 0580 81E0 ldi r24,lo8(1) + 1124 0582 8093 0000 sts progTimer,r24 + 1125 .LM204: + 1126 0586 8091 0000 lds r24,progPosition + 1127 058a 8F5F subi r24,lo8(-(1)) + 1128 058c 00C0 rjmp .L258 + 1129 .L158: + 1130 .LM205: + 1131 058e 8091 0000 lds r24,progPosition + 1132 0592 8150 subi r24,lo8(-(-1)) + 1133 .L258: + 1134 0594 8093 0000 sts progPosition,r24 + 1135 .LM206: + 1136 0598 8091 0000 lds r24,tempDistance + 1137 059c 9091 0000 lds r25,(tempDistance)+1 + 1138 05a0 9093 0000 sts (tempLastDistanceToWall)+1,r25 + 1139 05a4 8093 0000 sts tempLastDistanceToWall,r24 + 1140 05a8 00C0 rjmp .L120 + 1141 .L133: + 1142 .LM207: + 1143 05aa 0E94 0000 call pingSendPing + 1144 .LM208: + 1145 05ae 84E0 ldi r24,lo8(4) + 1146 05b0 8093 0000 sts progTimer,r24 + 1147 .LM209: + 1148 05b4 0E94 0000 call pingGetReady + 1149 05b8 8823 tst r24 + 1150 05ba 01F4 brne .+2 + 1151 05bc 00C0 rjmp .L120 + 1152 .LM210: + 1153 05be 0E94 0000 call pingGetDistance + 1154 05c2 9C01 movw r18,r24 + 1155 05c4 9093 0000 sts (tempDistance)+1,r25 + 1156 05c8 8093 0000 sts tempDistance,r24 + 1157 .LM211: + 1158 05cc 47E1 ldi r20,hi8(6001) + 1159 05ce 8137 cpi r24,lo8(6001) + 1160 05d0 9407 cpc r25,r20 + 1161 05d2 00F0 brlo .L162 + 1162 .LM212: + 1163 05d4 42E0 ldi r20,lo8(2) + 1164 05d6 60E0 ldi r22,lo8(0) + 1165 05d8 8057 subi r24,lo8(-(-6000)) + 1166 05da 9741 sbci r25,hi8(-(-6000)) + 1167 05dc 00C0 rjmp .L259 + 1168 .L162: + 1169 .LM213: + 1170 05de 42E0 ldi r20,lo8(2) + 1171 05e0 61E0 ldi r22,lo8(1) + 1172 05e2 80E7 ldi r24,lo8(6000) + 1173 05e4 97E1 ldi r25,hi8(6000) + 1174 05e6 821B sub r24,r18 + 1175 05e8 930B sbc r25,r19 + 1176 .L259: + 1177 05ea 0E94 0000 call showDistanceOnLCD + 1178 .LM214: + 1179 05ee 8091 0000 lds r24,tempDistance + 1180 05f2 9091 0000 lds r25,(tempDistance)+1 + 1181 05f6 26E1 ldi r18,hi8(5800) + 1182 05f8 883A cpi r24,lo8(5800) + 1183 05fa 9207 cpc r25,r18 + 1184 05fc 00F4 brsh .L165 + 1185 .LM215: + 1186 05fe 8091 0000 lds r24,servoMotorLeft + 1187 0602 8337 cpi r24,lo8(115) + 1188 0604 00F0 brlo .L171 + 1189 .LM216: + 1190 0606 8150 subi r24,lo8(-(-1)) + 1191 0608 8093 0000 sts servoMotorLeft,r24 + 1192 .LM217: + 1193 060c 8091 0000 lds r24,servoMotorRight + 1194 0610 8150 subi r24,lo8(-(-1)) + 1195 0612 00C0 rjmp .L269 + 1196 .L165: + 1197 .LM218: + 1198 0614 8953 subi r24,lo8(6201) + 1199 0616 9841 sbci r25,hi8(6201) + 1200 0618 00F0 brlo .L169 + 1201 .LM219: + 1202 061a 8091 0000 lds r24,servoMotorLeft + 1203 061e 8F37 cpi r24,lo8(127) + 1204 0620 00F4 brsh .L171 + 1205 .LM220: + 1206 0622 8F5F subi r24,lo8(-(1)) + 1207 0624 8093 0000 sts servoMotorLeft,r24 + 1208 .LM221: + 1209 0628 8091 0000 lds r24,servoMotorRight + 1210 062c 8F5F subi r24,lo8(-(1)) + 1211 .L269: + 1212 062e 8093 0000 sts servoMotorRight,r24 + 1213 .L171: + 1214 .LM222: + 1215 0632 1092 0000 sts regulatorMeasureCounter,__zero_reg__ + 1216 0636 00C0 rjmp .L120 + 1217 .L169: + 1218 .LM223: + 1219 0638 17E7 ldi r17,lo8(119) + 1220 063a 1093 0000 sts servoMotorLeft,r17 + 1221 .LM224: + 1222 063e 1093 0000 sts servoMotorRight,r17 + 1223 .LM225: + 1224 0642 8091 0000 lds r24,regulatorMeasureCounter + 1225 0646 8F5F subi r24,lo8(-(1)) + 1226 0648 8093 0000 sts regulatorMeasureCounter,r24 + 1227 064c 8530 cpi r24,lo8(5) + 1228 064e 01F0 breq .+2 + 1229 0650 00C0 rjmp .L120 + 1230 .LM226: + 1231 0652 80E0 ldi r24,lo8(0) + 1232 0654 0E94 0000 call lcdSetPos + 1233 .LM227: + 1234 0658 80E0 ldi r24,lo8(.LC36) + 1235 065a 90E0 ldi r25,hi8(.LC36) + 1236 065c 0E94 0000 call lcdWriteString + 1237 .LM228: + 1238 0660 1093 0000 sts servoMotorLeft,r17 + 1239 .LM229: + 1240 0664 1093 0000 sts servoMotorRight,r17 + 1241 .LM230: + 1242 0668 8091 0000 lds r24,tempDistance + 1243 066c 9091 0000 lds r25,(tempDistance)+1 + 1244 0670 9093 0000 sts (tempDistanceToWall)+1,r25 + 1245 0674 8093 0000 sts tempDistanceToWall,r24 + 1246 .LM231: + 1247 0678 82E3 ldi r24,lo8(50) + 1248 067a 8093 0000 sts progTimer,r24 + 1249 .LM232: + 1250 067e 1092 0000 sts regulatorMeasureCounter,__zero_reg__ + 1251 0682 00C0 rjmp .L272 + 1252 .L134: + 1253 .LM233: + 1254 0684 8CE8 ldi r24,lo8(-116) + 1255 0686 8093 0000 sts servoPing,r24 + 1256 .LM234: + 1257 068a 2091 0000 lds r18,tempLeftDistance + 1258 068e 3091 0000 lds r19,(tempLeftDistance)+1 + 1259 0692 8091 0000 lds r24,tempRightDistance + 1260 0696 9091 0000 lds r25,(tempRightDistance)+1 + 1261 069a 8217 cp r24,r18 + 1262 069c 9307 cpc r25,r19 + 1263 069e 00F4 brsh .L174 + 1264 .LM235: + 1265 06a0 80E0 ldi r24,lo8(0) + 1266 06a2 0E94 0000 call lcdSetPos + 1267 .LM236: + 1268 06a6 80E0 ldi r24,lo8(.LC37) + 1269 06a8 90E0 ldi r25,hi8(.LC37) + 1270 06aa 0E94 0000 call lcdWriteString + 1271 .LM237: + 1272 06ae 88E6 ldi r24,lo8(104) + 1273 06b0 8093 0000 sts servoMotorLeft,r24 + 1274 .LM238: + 1275 06b4 86E8 ldi r24,lo8(-122) + 1276 06b6 8093 0000 sts servoMotorRight,r24 + 1277 .LM239: + 1278 06ba 83E4 ldi r24,lo8(67) + 1279 06bc 8093 0000 sts servoPing,r24 + 1280 .LM240: + 1281 06c0 1092 0000 sts regulatorMode,__zero_reg__ + 1282 06c4 00C0 rjmp .L260 + 1283 .L174: + 1284 .LM241: + 1285 06c6 80E0 ldi r24,lo8(0) + 1286 06c8 0E94 0000 call lcdSetPos + 1287 .LM242: + 1288 06cc 80E0 ldi r24,lo8(.LC38) + 1289 06ce 90E0 ldi r25,hi8(.LC38) + 1290 06d0 0E94 0000 call lcdWriteString + 1291 .LM243: + 1292 06d4 86E8 ldi r24,lo8(-122) + 1293 06d6 8093 0000 sts servoMotorLeft,r24 + 1294 .LM244: + 1295 06da 88E6 ldi r24,lo8(104) + 1296 06dc 8093 0000 sts servoMotorRight,r24 + 1297 .LM245: + 1298 06e0 80ED ldi r24,lo8(-48) + 1299 06e2 8093 0000 sts servoPing,r24 + 1300 .LM246: + 1301 06e6 81E0 ldi r24,lo8(1) + 1302 06e8 8093 0000 sts regulatorMode,r24 + 1303 .L260: + 1304 .LM247: + 1305 06ec 82E3 ldi r24,lo8(50) + 1306 06ee 00C0 rjmp .L280 + 1307 .L135: + 1308 .LM248: + 1309 06f0 87E7 ldi r24,lo8(119) + 1310 06f2 8093 0000 sts servoMotorLeft,r24 + 1311 .LM249: + 1312 06f6 8093 0000 sts servoMotorRight,r24 + 1313 .LM250: + 1314 06fa 8AE0 ldi r24,lo8(10) + 1315 06fc 8093 0000 sts progTimer,r24 + 1316 .LM251: + 1317 0700 82E0 ldi r24,lo8(2) + 1318 0702 8093 0000 sts regulatorTimer,r24 + 1319 0706 00C0 rjmp .L273 + 1320 .L136: + 1321 .LM252: + 1322 0708 80E0 ldi r24,lo8(0) + 1323 070a 0E94 0000 call lcdSetPos + 1324 .LM253: + 1325 070e 80E0 ldi r24,lo8(.LC32) + 1326 0710 90E0 ldi r25,hi8(.LC32) + 1327 0712 0E94 0000 call lcdWriteString + 1328 .LM254: + 1329 0716 86E8 ldi r24,lo8(-122) + 1330 0718 8093 0000 sts servoMotorLeft,r24 + 1331 .LM255: + 1332 071c 8093 0000 sts servoMotorRight,r24 + 1333 .LM256: + 1334 0720 84E1 ldi r24,lo8(20) + 1335 .L280: + 1336 0722 8093 0000 sts progTimer,r24 + 1337 0726 00C0 rjmp .L272 + 1338 .L137: + 1339 .LM257: + 1340 0728 8FE7 ldi r24,lo8(127) + 1341 072a 8093 0000 sts servoMotorLeft,r24 + 1342 .LM258: + 1343 072e 8093 0000 sts servoMotorRight,r24 + 1344 .LM259: + 1345 0732 8AE0 ldi r24,lo8(10) + 1346 0734 8093 0000 sts progTimer,r24 + 1347 .L273: + 1348 .LM260: + 1349 0738 81E1 ldi r24,lo8(17) + 1350 073a 00C0 rjmp .L266 + 1351 .L138: + 1352 .LM261: + 1353 073c 0E94 0000 call pingSendPing + 1354 .LM262: + 1355 0740 83E0 ldi r24,lo8(3) + 1356 0742 8093 0000 sts progTimer,r24 + 1357 .LM263: + 1358 0746 0E94 0000 call pingGetReady + 1359 074a 8823 tst r24 + 1360 074c 01F4 brne .+2 + 1361 074e 00C0 rjmp .L120 + 1362 .LM264: + 1363 0750 0E94 0000 call pingGetDistance + 1364 0754 9093 0000 sts (tempDistance)+1,r25 + 1365 0758 8093 0000 sts tempDistance,r24 + 1366 .L283: + 1367 .LM265: + 1368 075c 81E0 ldi r24,lo8(1) + 1369 075e 00C0 rjmp .L280 + 1370 .L139: + 1371 .LM266: + 1372 0760 8091 0000 lds r24,regulatorCounter + 1373 0764 8F5F subi r24,lo8(-(1)) + 1374 0766 8093 0000 sts regulatorCounter,r24 + 1375 076a 9091 0000 lds r25,regulatorTimer + 1376 076e 8917 cp r24,r25 + 1377 0770 00F0 brlo .L178 + 1378 .LM267: + 1379 0772 83E1 ldi r24,lo8(19) + 1380 0774 8093 0000 sts progPosition,r24 + 1381 .LM268: + 1382 0778 81E0 ldi r24,lo8(1) + 1383 077a 8093 0000 sts progTimer,r24 + 1384 .LM269: + 1385 077e 1092 0000 sts regulatorCounter,__zero_reg__ + 1386 0782 00C0 rjmp .L120 + 1387 .L178: + 1388 .LBB3: + 1389 .LM270: + 1390 0784 8091 0000 lds r24,regulatorMode + 1391 0788 8823 tst r24 + 1392 078a 01F0 breq .+2 + 1393 078c 00C0 rjmp .L180 + 1394 .LM271: + 1395 078e 0E94 0000 call lcdSetPos + 1396 .LM272: + 1397 0792 80E0 ldi r24,lo8(.LC39) + 1398 0794 90E0 ldi r25,hi8(.LC39) + 1399 0796 0E94 0000 call lcdWriteString + 1400 .LM273: + 1401 079a 2091 0000 lds r18,tempDistance + 1402 079e 3091 0000 lds r19,(tempDistance)+1 + 1403 07a2 87E1 ldi r24,hi8(6001) + 1404 07a4 2137 cpi r18,lo8(6001) + 1405 07a6 3807 cpc r19,r24 + 1406 07a8 00F0 brlo .L182 + 1407 .LM274: + 1408 07aa 42E0 ldi r20,lo8(2) + 1409 07ac 63E0 ldi r22,lo8(3) + 1410 07ae C901 movw r24,r18 + 1411 07b0 8057 subi r24,lo8(-(-6000)) + 1412 07b2 9741 sbci r25,hi8(-(-6000)) + 1413 07b4 00C0 rjmp .L261 + 1414 .L182: + 1415 .LM275: + 1416 07b6 42E0 ldi r20,lo8(2) + 1417 07b8 62E0 ldi r22,lo8(2) + 1418 07ba 80E7 ldi r24,lo8(6000) + 1419 07bc 97E1 ldi r25,hi8(6000) + 1420 07be 821B sub r24,r18 + 1421 07c0 930B sbc r25,r19 + 1422 .L261: + 1423 07c2 0E94 0000 call showDistanceOnLCD + 1424 .LM276: + 1425 07c6 6091 0000 lds r22,tempDistance + 1426 07ca 7091 0000 lds r23,(tempDistance)+1 + 1427 07ce 8091 0000 lds r24,tempLastDistanceToWall + 1428 07d2 9091 0000 lds r25,(tempLastDistanceToWall)+1 + 1429 07d6 6817 cp r22,r24 + 1430 07d8 7907 cpc r23,r25 + 1431 07da 00F4 brsh .L185 + 1432 07dc 23E1 ldi r18,hi8(5000) + 1433 07de 6838 cpi r22,lo8(5000) + 1434 07e0 7207 cpc r23,r18 + 1435 07e2 00F4 brsh .L187 + 1436 .LM277: + 1437 07e4 88E6 ldi r24,lo8(104) + 1438 07e6 8093 0000 sts servoMotorLeft,r24 + 1439 .LM278: + 1440 07ea 86E8 ldi r24,lo8(-122) + 1441 07ec 00C0 rjmp .L277 + 1442 .L187: + 1443 .LM279: + 1444 07ee 6656 subi r22,lo8(5990) + 1445 07f0 7741 sbci r23,hi8(5990) + 1446 07f2 00F0 brlo .+2 + 1447 07f4 00C0 rjmp .L206 + 1448 07f6 00C0 rjmp .L278 + 1449 .L185: + 1450 .LM280: + 1451 07f8 8617 cp r24,r22 + 1452 07fa 9707 cpc r25,r23 + 1453 07fc 00F0 brlo .+2 + 1454 07fe 00C0 rjmp .L206 + 1455 0800 8BE1 ldi r24,hi8(7001) + 1456 0802 6935 cpi r22,lo8(7001) + 1457 0804 7807 cpc r23,r24 + 1458 0806 00F0 brlo .L193 + 1459 .LM281: + 1460 0808 86E8 ldi r24,lo8(-122) + 1461 080a 8093 0000 sts servoMotorLeft,r24 + 1462 .LM282: + 1463 080e 88E6 ldi r24,lo8(104) + 1464 0810 00C0 rjmp .L276 + 1465 .L193: + 1466 .LM283: + 1467 0812 6B57 subi r22,lo8(6011) + 1468 0814 7741 sbci r23,hi8(6011) + 1469 0816 00F4 brsh .+2 + 1470 0818 00C0 rjmp .L206 + 1471 081a 00C0 rjmp .L279 + 1472 .L180: + 1473 .LM284: + 1474 081c 8130 cpi r24,lo8(1) + 1475 081e 01F0 breq .+2 + 1476 0820 00C0 rjmp .L189 + 1477 .LM285: + 1478 0822 80E0 ldi r24,lo8(0) + 1479 0824 0E94 0000 call lcdSetPos + 1480 .LM286: + 1481 0828 80E0 ldi r24,lo8(.LC40) + 1482 082a 90E0 ldi r25,hi8(.LC40) + 1483 082c 0E94 0000 call lcdWriteString + 1484 .LM287: + 1485 0830 2091 0000 lds r18,tempDistance + 1486 0834 3091 0000 lds r19,(tempDistance)+1 + 1487 0838 47E1 ldi r20,hi8(6001) + 1488 083a 2137 cpi r18,lo8(6001) + 1489 083c 3407 cpc r19,r20 + 1490 083e 00F0 brlo .L199 + 1491 .LM288: + 1492 0840 42E0 ldi r20,lo8(2) + 1493 0842 62E0 ldi r22,lo8(2) + 1494 0844 C901 movw r24,r18 + 1495 0846 8057 subi r24,lo8(-(-6000)) + 1496 0848 9741 sbci r25,hi8(-(-6000)) + 1497 084a 00C0 rjmp .L262 + 1498 .L199: + 1499 .LM289: + 1500 084c 42E0 ldi r20,lo8(2) + 1501 084e 63E0 ldi r22,lo8(3) + 1502 0850 80E7 ldi r24,lo8(6000) + 1503 0852 97E1 ldi r25,hi8(6000) + 1504 0854 821B sub r24,r18 + 1505 0856 930B sbc r25,r19 + 1506 .L262: + 1507 0858 0E94 0000 call showDistanceOnLCD + 1508 .LM290: + 1509 085c 6091 0000 lds r22,tempDistance + 1510 0860 7091 0000 lds r23,(tempDistance)+1 + 1511 0864 8091 0000 lds r24,tempLastDistanceToWall + 1512 0868 9091 0000 lds r25,(tempLastDistanceToWall)+1 + 1513 086c 6817 cp r22,r24 + 1514 086e 7907 cpc r23,r25 + 1515 0870 00F4 brsh .L202 + 1516 0872 83E1 ldi r24,hi8(5000) + 1517 0874 6838 cpi r22,lo8(5000) + 1518 0876 7807 cpc r23,r24 + 1519 0878 00F4 brsh .L204 + 1520 .LM291: + 1521 087a 86E8 ldi r24,lo8(-122) + 1522 087c 8093 0000 sts servoMotorLeft,r24 + 1523 .LM292: + 1524 0880 88E6 ldi r24,lo8(104) + 1525 .L277: + 1526 0882 8093 0000 sts servoMotorRight,r24 + 1527 0886 00C0 rjmp .L211 + 1528 .L204: + 1529 .LM293: + 1530 0888 6656 subi r22,lo8(5990) + 1531 088a 7741 sbci r23,hi8(5990) + 1532 088c 00F4 brsh .L206 + 1533 .L279: + 1534 .LM294: + 1535 088e 86E8 ldi r24,lo8(-122) + 1536 0890 8093 0000 sts servoMotorLeft,r24 + 1537 .LM295: + 1538 0894 88E6 ldi r24,lo8(104) + 1539 0896 00C0 rjmp .L271 + 1540 .L202: + 1541 .LM296: + 1542 0898 8617 cp r24,r22 + 1543 089a 9707 cpc r25,r23 + 1544 089c 00F4 brsh .L206 + 1545 089e 4BE1 ldi r20,hi8(7001) + 1546 08a0 6935 cpi r22,lo8(7001) + 1547 08a2 7407 cpc r23,r20 + 1548 08a4 00F0 brlo .L209 + 1549 .LM297: + 1550 08a6 88E6 ldi r24,lo8(104) + 1551 08a8 8093 0000 sts servoMotorLeft,r24 + 1552 .LM298: + 1553 08ac 86E8 ldi r24,lo8(-122) + 1554 .L276: + 1555 08ae 8093 0000 sts servoMotorRight,r24 + 1556 .LM299: + 1557 08b2 80E0 ldi r24,lo8(0) + 1558 08b4 90E0 ldi r25,hi8(0) + 1559 08b6 6057 subi r22,lo8(-(-6000)) + 1560 08b8 7741 sbci r23,hi8(-(-6000)) + 1561 08ba 8040 sbci r24,hlo8(-(-6000)) + 1562 08bc 9040 sbci r25,hhi8(-(-6000)) + 1563 08be 28E2 ldi r18,lo8(40) + 1564 08c0 30E0 ldi r19,hi8(40) + 1565 08c2 40E0 ldi r20,hlo8(40) + 1566 08c4 50E0 ldi r21,hhi8(40) + 1567 08c6 0E94 0000 call __udivmodsi4 + 1568 .LM300: + 1569 08ca 2F30 cpi r18,lo8(15) + 1570 08cc 00F4 brsh .L211 + 1571 .LM301: + 1572 08ce 2093 0000 sts progTimer,r18 + 1573 08d2 00C0 rjmp .L189 + 1574 .L211: + 1575 .LM302: + 1576 08d4 8FE0 ldi r24,lo8(15) + 1577 08d6 00C0 rjmp .L263 + 1578 .L209: + 1579 .LM303: + 1580 08d8 6B57 subi r22,lo8(6011) + 1581 08da 7741 sbci r23,hi8(6011) + 1582 08dc 00F0 brlo .L206 + 1583 .L278: + 1584 .LM304: + 1585 08de 88E6 ldi r24,lo8(104) + 1586 08e0 8093 0000 sts servoMotorLeft,r24 + 1587 .LM305: + 1588 08e4 86E8 ldi r24,lo8(-122) + 1589 .L271: + 1590 08e6 8093 0000 sts servoMotorRight,r24 + 1591 .LM306: + 1592 08ea 85E0 ldi r24,lo8(5) + 1593 08ec 00C0 rjmp .L263 + 1594 .L206: + 1595 .LM307: + 1596 08ee 8FE7 ldi r24,lo8(127) + 1597 08f0 8093 0000 sts servoMotorLeft,r24 + 1598 .LM308: + 1599 08f4 8093 0000 sts servoMotorRight,r24 + 1600 .LM309: + 1601 08f8 84E0 ldi r24,lo8(4) + 1602 .L263: + 1603 08fa 8093 0000 sts progTimer,r24 + 1604 .L189: + 1605 .LM310: + 1606 08fe 8091 0000 lds r24,tempDistance + 1607 0902 9091 0000 lds r25,(tempDistance)+1 + 1608 0906 9093 0000 sts (tempLastDistanceToWall)+1,r25 + 1609 090a 8093 0000 sts tempLastDistanceToWall,r24 + 1610 .LM311: + 1611 090e 8091 0000 lds r24,progPosition + 1612 .LM312: + 1613 0912 8250 subi r24,lo8(-(-2)) + 1614 0914 00C0 rjmp .L266 + 1615 .L140: + 1616 .LBE3: + 1617 .LM313: + 1618 0916 8CE8 ldi r24,lo8(-116) + 1619 0918 8093 0000 sts servoPing,r24 + 1620 .LM314: + 1621 091c 87E7 ldi r24,lo8(119) + 1622 091e 8093 0000 sts servoMotorLeft,r24 + 1623 .LM315: + 1624 0922 8093 0000 sts servoMotorRight,r24 + 1625 .LM316: + 1626 0926 83E2 ldi r24,lo8(35) + 1627 0928 8093 0000 sts progTimer,r24 + 1628 .LM317: + 1629 092c 84E1 ldi r24,lo8(20) + 1630 092e 00C0 rjmp .L266 + 1631 .L141: + 1632 .LM318: + 1633 0930 83E0 ldi r24,lo8(3) + 1634 0932 8093 0000 sts progTimer,r24 + 1635 .LM319: + 1636 0936 0E94 0000 call pingSendPing + 1637 .LM320: + 1638 093a 0E94 0000 call pingGetReady + 1639 093e 8823 tst r24 + 1640 0940 01F0 breq .L120 + 1641 .LM321: + 1642 0942 0E94 0000 call pingGetDistance + 1643 0946 9093 0000 sts (tempDistance)+1,r25 + 1644 094a 8093 0000 sts tempDistance,r24 + 1645 .LM322: + 1646 094e 27E1 ldi r18,hi8(6000) + 1647 0950 8037 cpi r24,lo8(6000) + 1648 0952 9207 cpc r25,r18 + 1649 0954 00F4 brsh .L215 + 1650 .LM323: + 1651 0956 41E0 ldi r20,lo8(1) + 1652 0958 60E0 ldi r22,lo8(0) + 1653 095a 80E0 ldi r24,lo8(0) + 1654 095c 90E0 ldi r25,hi8(0) + 1655 095e 0E94 0000 call showDistanceOnLCD + 1656 .LM324: + 1657 0962 82E0 ldi r24,lo8(2) + 1658 0964 00C0 rjmp .L266 + 1659 .L215: + 1660 0966 9C01 movw r18,r24 + 1661 0968 2057 subi r18,lo8(-(-6000)) + 1662 096a 3741 sbci r19,hi8(-(-6000)) + 1663 .LM325: + 1664 096c 805E subi r24,lo8(12000) + 1665 096e 9E42 sbci r25,hi8(12000) + 1666 0970 00F4 brsh .L217 + 1667 .LM326: + 1668 0972 41E0 ldi r20,lo8(1) + 1669 0974 60E0 ldi r22,lo8(0) + 1670 0976 C901 movw r24,r18 + 1671 0978 0E94 0000 call showDistanceOnLCD + 1672 .LM327: + 1673 097c 82E0 ldi r24,lo8(2) + 1674 097e 00C0 rjmp .L281 + 1675 .L217: + 1676 .LM328: + 1677 0980 41E0 ldi r20,lo8(1) + 1678 0982 60E0 ldi r22,lo8(0) + 1679 0984 C901 movw r24,r18 + 1680 0986 0E94 0000 call showDistanceOnLCD + 1681 .LM329: + 1682 098a 8AE0 ldi r24,lo8(10) + 1683 .L281: + 1684 098c 8093 0000 sts regulatorTimer,r24 + 1685 .L272: + 1686 .LM330: + 1687 0990 8091 0000 lds r24,progPosition + 1688 0994 8F5F subi r24,lo8(-(1)) + 1689 0996 00C0 rjmp .L266 + 1690 .L142: + 1691 .LM331: + 1692 0998 8091 0000 lds r24,regulatorMode + 1693 099c 8823 tst r24 + 1694 099e 01F4 brne .L219 + 1695 .LM332: + 1696 09a0 83E4 ldi r24,lo8(67) + 1697 09a2 00C0 rjmp .L265 + 1698 .L219: + 1699 .LM333: + 1700 09a4 80ED ldi r24,lo8(-48) + 1701 .L265: + 1702 09a6 8093 0000 sts servoPing,r24 + 1703 .LM334: + 1704 09aa 85E0 ldi r24,lo8(5) + 1705 09ac 8093 0000 sts progTimer,r24 + 1706 .LM335: + 1707 09b0 8FE0 ldi r24,lo8(15) + 1708 .L266: + 1709 09b2 8093 0000 sts progPosition,r24 + 1710 .L120: + 1711 .LM336: + 1712 09b6 1092 0000 sts progCounter,__zero_reg__ + 1713 .L117: + 1714 .LM337: + 1715 09ba 2091 0000 lds r18,roboActive + 1716 09be 2230 cpi r18,lo8(2) + 1717 09c0 01F0 breq .+2 + 1718 09c2 00C0 rjmp .L222 + 1719 .LM338: + 1720 09c4 8091 0000 lds r24,progCounter + 1721 09c8 8F5F subi r24,lo8(-(1)) + 1722 09ca 8093 0000 sts progCounter,r24 + 1723 09ce 9091 0000 lds r25,progTimer + 1724 09d2 8917 cp r24,r25 + 1725 09d4 00F4 brsh .+2 + 1726 09d6 00C0 rjmp .L222 + 1727 .LM339: + 1728 09d8 8091 0000 lds r24,progPosition + 1729 09dc 8430 cpi r24,lo8(4) + 1730 09de 01F4 brne .+2 + 1731 09e0 00C0 rjmp .L230 + 1732 09e2 8530 cpi r24,lo8(5) + 1733 09e4 00F4 brsh .L236 + 1734 09e6 8130 cpi r24,lo8(1) + 1735 09e8 01F0 breq .L227 + 1736 09ea 8130 cpi r24,lo8(1) + 1737 09ec 00F0 brlo .L226 + 1738 09ee 8230 cpi r24,lo8(2) + 1739 09f0 01F0 breq .L228 + 1740 09f2 8330 cpi r24,lo8(3) + 1741 09f4 01F0 breq .+2 + 1742 09f6 00C0 rjmp .L225 + 1743 09f8 00C0 rjmp .L229 + 1744 .L236: + 1745 09fa 8730 cpi r24,lo8(7) + 1746 09fc 01F4 brne .+2 + 1747 09fe 00C0 rjmp .L233 + 1748 0a00 8830 cpi r24,lo8(8) + 1749 0a02 00F4 brsh .L237 + 1750 0a04 8530 cpi r24,lo8(5) + 1751 0a06 01F4 brne .+2 + 1752 0a08 00C0 rjmp .L231 + 1753 0a0a 8630 cpi r24,lo8(6) + 1754 0a0c 01F0 breq .+2 + 1755 0a0e 00C0 rjmp .L225 + 1756 0a10 00C0 rjmp .L232 + 1757 .L237: + 1758 0a12 8830 cpi r24,lo8(8) + 1759 0a14 01F4 brne .+2 + 1760 0a16 00C0 rjmp .L234 + 1761 0a18 8930 cpi r24,lo8(9) + 1762 0a1a 01F0 breq .+2 + 1763 0a1c 00C0 rjmp .L225 + 1764 0a1e 00C0 rjmp .L235 + 1765 .L226: + 1766 .LM340: + 1767 0a20 0E94 0000 call lcdClearDisplay + 1768 .LM341: + 1769 0a24 81E0 ldi r24,lo8(1) + 1770 0a26 0E94 0000 call lcdSetLayout + 1771 .LM342: + 1772 0a2a 81E0 ldi r24,lo8(1) + 1773 0a2c 00C0 rjmp .L267 + 1774 .L227: + 1775 .LM343: + 1776 0a2e 80E0 ldi r24,lo8(0) + 1777 0a30 0E94 0000 call lcdSetPos + 1778 .LM344: + 1779 0a34 80E0 ldi r24,lo8(.LC32) + 1780 0a36 90E0 ldi r25,hi8(.LC32) + 1781 0a38 0E94 0000 call lcdWriteString + 1782 .LM345: + 1783 0a3c 86E8 ldi r24,lo8(-122) + 1784 0a3e 8093 0000 sts servoMotorLeft,r24 + 1785 .LM346: + 1786 0a42 8093 0000 sts servoMotorRight,r24 + 1787 0a46 00C0 rjmp .L282 + 1788 .L228: + 1789 .LM347: + 1790 0a48 8FE7 ldi r24,lo8(127) + 1791 0a4a 8093 0000 sts servoMotorLeft,r24 + 1792 .LM348: + 1793 0a4e 8093 0000 sts servoMotorRight,r24 + 1794 .LM349: + 1795 0a52 0E94 0000 call pingSendPing + 1796 .LM350: + 1797 0a56 83E0 ldi r24,lo8(3) + 1798 0a58 8093 0000 sts progTimer,r24 + 1799 .LM351: + 1800 0a5c 0E94 0000 call pingGetReady + 1801 0a60 8823 tst r24 + 1802 0a62 01F4 brne .+2 + 1803 0a64 00C0 rjmp .L225 + 1804 .LM352: + 1805 0a66 0E94 0000 call pingGetDistance + 1806 0a6a 9093 0000 sts (tempDistance)+1,r25 + 1807 0a6e 8093 0000 sts tempDistance,r24 + 1808 .LM353: + 1809 0a72 25E1 ldi r18,hi8(5500) + 1810 0a74 8C37 cpi r24,lo8(5500) + 1811 0a76 9207 cpc r25,r18 + 1812 0a78 00F4 brsh .L239 + 1813 .LM354: + 1814 0a7a 42E0 ldi r20,lo8(2) + 1815 0a7c 60E0 ldi r22,lo8(0) + 1816 0a7e 80E0 ldi r24,lo8(0) + 1817 0a80 90E0 ldi r25,hi8(0) + 1818 0a82 0E94 0000 call showDistanceOnLCD + 1819 0a86 00C0 rjmp .L275 + 1820 .L239: + 1821 .LM355: + 1822 0a88 42E0 ldi r20,lo8(2) + 1823 0a8a 60E0 ldi r22,lo8(0) + 1824 0a8c 8C57 subi r24,lo8(-(-5500)) + 1825 0a8e 9541 sbci r25,hi8(-(-5500)) + 1826 0a90 0E94 0000 call showDistanceOnLCD + 1827 0a94 00C0 rjmp .L225 + 1828 .L229: + 1829 .LM356: + 1830 0a96 80E0 ldi r24,lo8(0) + 1831 0a98 0E94 0000 call lcdSetPos + 1832 .LM357: + 1833 0a9c 80E0 ldi r24,lo8(.LC33) + 1834 0a9e 90E0 ldi r25,hi8(.LC33) + 1835 0aa0 0E94 0000 call lcdWriteString + 1836 .LM358: + 1837 0aa4 8CE6 ldi r24,lo8(108) + 1838 0aa6 8093 0000 sts servoMotorLeft,r24 + 1839 .LM359: + 1840 0aaa 8093 0000 sts servoMotorRight,r24 + 1841 .LM360: + 1842 0aae 82E3 ldi r24,lo8(50) + 1843 0ab0 00C0 rjmp .L267 + 1844 .L230: + 1845 .LM361: + 1846 0ab2 87E7 ldi r24,lo8(119) + 1847 0ab4 8093 0000 sts servoMotorLeft,r24 + 1848 .LM362: + 1849 0ab8 8093 0000 sts servoMotorRight,r24 + 1850 .LM363: + 1851 0abc 2093 0000 sts progTimer,r18 + 1852 .LM364: + 1853 0ac0 85E0 ldi r24,lo8(5) + 1854 0ac2 00C0 rjmp .L268 + 1855 .L231: + 1856 .LM365: + 1857 0ac4 8EEA ldi r24,lo8(-82) + 1858 0ac6 8093 0000 sts servoPing,r24 + 1859 .LM366: + 1860 0aca 84E1 ldi r24,lo8(20) + 1861 0acc 8093 0000 sts progTimer,r24 + 1862 .LM367: + 1863 0ad0 86E0 ldi r24,lo8(6) + 1864 0ad2 00C0 rjmp .L268 + 1865 .L232: + 1866 .LM368: + 1867 0ad4 0E94 0000 call pingSendPing + 1868 .LM369: + 1869 0ad8 84E0 ldi r24,lo8(4) + 1870 0ada 8093 0000 sts progTimer,r24 + 1871 .LM370: + 1872 0ade 0E94 0000 call pingGetReady + 1873 0ae2 8823 tst r24 + 1874 0ae4 01F4 brne .+2 + 1875 0ae6 00C0 rjmp .L225 + 1876 .LM371: + 1877 0ae8 0E94 0000 call pingGetDistance + 1878 0aec 9093 0000 sts (tempLeftDistance)+1,r25 + 1879 0af0 8093 0000 sts tempLeftDistance,r24 + 1880 .L282: + 1881 .LM372: + 1882 0af4 84E1 ldi r24,lo8(20) + 1883 0af6 00C0 rjmp .L267 + 1884 .L233: + 1885 .LM373: + 1886 0af8 87E6 ldi r24,lo8(103) + 1887 0afa 8093 0000 sts servoPing,r24 + 1888 .LM374: + 1889 0afe 88E2 ldi r24,lo8(40) + 1890 0b00 8093 0000 sts progTimer,r24 + 1891 .LM375: + 1892 0b04 88E0 ldi r24,lo8(8) + 1893 0b06 00C0 rjmp .L268 + 1894 .L234: + 1895 .LM376: + 1896 0b08 0E94 0000 call pingSendPing + 1897 .LM377: + 1898 0b0c 84E0 ldi r24,lo8(4) + 1899 0b0e 8093 0000 sts progTimer,r24 + 1900 .LM378: + 1901 0b12 0E94 0000 call pingGetReady + 1902 0b16 8823 tst r24 + 1903 0b18 01F4 brne .+2 + 1904 0b1a 00C0 rjmp .L225 + 1905 .LM379: + 1906 0b1c 0E94 0000 call pingGetDistance + 1907 0b20 9C01 movw r18,r24 + 1908 0b22 9093 0000 sts (tempRightDistance)+1,r25 + 1909 0b26 8093 0000 sts tempRightDistance,r24 + 1910 .LM380: + 1911 0b2a 8CE8 ldi r24,lo8(-116) + 1912 0b2c 8093 0000 sts servoPing,r24 + 1913 .LM381: + 1914 0b30 8091 0000 lds r24,tempLeftDistance + 1915 0b34 9091 0000 lds r25,(tempLeftDistance)+1 + 1916 0b38 45E1 ldi r20,hi8(5500) + 1917 0b3a 8C37 cpi r24,lo8(5500) + 1918 0b3c 9407 cpc r25,r20 + 1919 0b3e 00F4 brsh .L243 + 1920 0b40 45E1 ldi r20,hi8(5500) + 1921 0b42 2C37 cpi r18,lo8(5500) + 1922 0b44 3407 cpc r19,r20 + 1923 0b46 00F4 brsh .L243 + 1924 .LM382: + 1925 0b48 80E0 ldi r24,lo8(0) + 1926 0b4a 0E94 0000 call lcdSetPos + 1927 .LM383: + 1928 0b4e 80E0 ldi r24,lo8(.LC41) + 1929 0b50 90E0 ldi r25,hi8(.LC41) + 1930 0b52 0E94 0000 call lcdWriteString + 1931 .LM384: + 1932 0b56 88E6 ldi r24,lo8(104) + 1933 0b58 8093 0000 sts servoMotorLeft,r24 + 1934 .LM385: + 1935 0b5c 86E8 ldi r24,lo8(-122) + 1936 0b5e 8093 0000 sts servoMotorRight,r24 + 1937 .LM386: + 1938 0b62 86E4 ldi r24,lo8(70) + 1939 0b64 00C0 rjmp .L267 + 1940 .L243: + 1941 .LM387: + 1942 0b66 2817 cp r18,r24 + 1943 0b68 3907 cpc r19,r25 + 1944 0b6a 00F4 brsh .L247 + 1945 .LM388: + 1946 0b6c 80E0 ldi r24,lo8(0) + 1947 0b6e 0E94 0000 call lcdSetPos + 1948 .LM389: + 1949 0b72 80E0 ldi r24,lo8(.LC42) + 1950 0b74 90E0 ldi r25,hi8(.LC42) + 1951 0b76 0E94 0000 call lcdWriteString + 1952 .LM390: + 1953 0b7a 88E6 ldi r24,lo8(104) + 1954 0b7c 8093 0000 sts servoMotorLeft,r24 + 1955 .LM391: + 1956 0b80 86E8 ldi r24,lo8(-122) + 1957 0b82 00C0 rjmp .L274 + 1958 .L247: + 1959 .LM392: + 1960 0b84 80E0 ldi r24,lo8(0) + 1961 0b86 0E94 0000 call lcdSetPos + 1962 .LM393: + 1963 0b8a 80E0 ldi r24,lo8(.LC43) + 1964 0b8c 90E0 ldi r25,hi8(.LC43) + 1965 0b8e 0E94 0000 call lcdWriteString + 1966 .LM394: + 1967 0b92 86E8 ldi r24,lo8(-122) + 1968 0b94 8093 0000 sts servoMotorLeft,r24 + 1969 .LM395: + 1970 0b98 88E6 ldi r24,lo8(104) + 1971 .L274: + 1972 0b9a 8093 0000 sts servoMotorRight,r24 + 1973 .LM396: + 1974 0b9e 88E2 ldi r24,lo8(40) + 1975 .L267: + 1976 0ba0 8093 0000 sts progTimer,r24 + 1977 .L275: + 1978 .LM397: + 1979 0ba4 8091 0000 lds r24,progPosition + 1980 0ba8 8F5F subi r24,lo8(-(1)) + 1981 0baa 00C0 rjmp .L268 + 1982 .L235: + 1983 .LM398: + 1984 0bac 87E7 ldi r24,lo8(119) + 1985 0bae 8093 0000 sts servoMotorLeft,r24 + 1986 .LM399: + 1987 0bb2 8093 0000 sts servoMotorRight,r24 + 1988 .LM400: + 1989 0bb6 8AE0 ldi r24,lo8(10) + 1990 0bb8 8093 0000 sts progTimer,r24 + 1991 .LM401: + 1992 0bbc 81E0 ldi r24,lo8(1) + 1993 .L268: + 1994 0bbe 8093 0000 sts progPosition,r24 + 1995 .L225: + 1996 .LM402: + 1997 0bc2 1092 0000 sts progCounter,__zero_reg__ + 1998 .L222: + 1999 .LM403: + 2000 0bc6 8091 0000 lds r24,roboActive + 2001 0bca 8330 cpi r24,lo8(3) + 2002 0bcc 01F0 breq .+2 + 2003 0bce 00C0 rjmp .L256 + 2004 .LM404: + 2005 0bd0 8091 0000 lds r24,progCounter + 2006 0bd4 8F5F subi r24,lo8(-(1)) + 2007 0bd6 8093 0000 sts progCounter,r24 + 2008 0bda 9091 0000 lds r25,progTimer + 2009 0bde 8917 cp r24,r25 + 2010 0be0 00F0 brlo .L256 + 2011 .LM405: + 2012 0be2 8091 0000 lds r24,progPosition + 2013 0be6 8823 tst r24 + 2014 0be8 01F0 breq .L253 + 2015 0bea 8130 cpi r24,lo8(1) + 2016 0bec 01F4 brne .L252 + 2017 0bee 00C0 rjmp .L254 + 2018 .L253: + 2019 .LM406: + 2020 0bf0 0E94 0000 call lcdClearDisplay + 2021 .LM407: + 2022 0bf4 81E0 ldi r24,lo8(1) + 2023 0bf6 0E94 0000 call lcdSetLayout + 2024 .LM408: + 2025 0bfa 80E0 ldi r24,lo8(0) + 2026 0bfc 0E94 0000 call lcdSetPos + 2027 .LM409: + 2028 0c00 80E0 ldi r24,lo8(.LC44) + 2029 0c02 90E0 ldi r25,hi8(.LC44) + 2030 0c04 0E94 0000 call lcdWriteString + 2031 .LM410: + 2032 0c08 80E1 ldi r24,lo8(16) + 2033 0c0a 0E94 0000 call lcdSetPos + 2034 .LM411: + 2035 0c0e 80E0 ldi r24,lo8(.LC45) + 2036 0c10 90E0 ldi r25,hi8(.LC45) + 2037 0c12 0E94 0000 call lcdWriteString + 2038 .LM412: + 2039 0c16 81E0 ldi r24,lo8(1) + 2040 0c18 8093 0000 sts progTimer,r24 + 2041 .LM413: + 2042 0c1c 8091 0000 lds r24,progPosition + 2043 0c20 8F5F subi r24,lo8(-(1)) + 2044 0c22 8093 0000 sts progPosition,r24 + 2045 0c26 00C0 rjmp .L252 + 2046 .L254: + 2047 .LM414: + 2048 0c28 0E94 0000 call pingSendPing + 2049 .LM415: + 2050 0c2c 8AE0 ldi r24,lo8(10) + 2051 0c2e 8093 0000 sts progTimer,r24 + 2052 .LM416: + 2053 0c32 0E94 0000 call pingGetReady + 2054 0c36 8823 tst r24 + 2055 0c38 01F0 breq .L252 + 2056 .LM417: + 2057 0c3a 0E94 0000 call pingGetDistance + 2058 0c3e 9093 0000 sts (tempDistance)+1,r25 + 2059 0c42 8093 0000 sts tempDistance,r24 + 2060 .LM418: + 2061 0c46 8AE1 ldi r24,lo8(26) + 2062 0c48 0E94 0000 call lcdSetPos + 2063 .LM419: + 2064 0c4c 8091 0000 lds r24,tempDistance + 2065 0c50 9091 0000 lds r25,(tempDistance)+1 + 2066 0c54 0E94 0000 call lcdWriteHexAsDecimal + 2067 .L252: + 2068 .LM420: + 2069 0c58 1092 0000 sts progCounter,__zero_reg__ + 2070 .L256: + 2071 /* epilogue: frame size=0 */ + 2072 0c5c 1F91 pop r17 + 2073 0c5e 0895 ret + 2074 /* epilogue end (size=2) */ + 2075 /* function updateProgram size 1177 (1174) */ + 2076 .LFE19: + 2078 .global main + 2080 main: + 2081 .LFB22: + 2082 .LM421: + 2083 /* prologue: frame size=0 */ + 2084 0c60 CF93 push r28 + 2085 0c62 DF93 push r29 + 2086 /* prologue end (size=2) */ + 2087 .LM422: + 2088 /* #APP */ + 2089 0c64 F894 cli + 2090 .LM423: + 2091 /* #NOAPP */ + 2092 0c66 0E94 0000 call initIO + 2093 .LM424: + 2094 0c6a 0E94 0000 call lcdInit + 2095 .LM425: + 2096 0c6e 0E94 0000 call rfIdInit + 2097 .LM426: + 2098 0c72 0E94 0000 call roboMSPInit + 2099 .LM427: + 2100 0c76 0E94 0000 call pingInit + 2101 .LM428: + 2102 0c7a 82E3 ldi r24,lo8(50) + 2103 0c7c 0E94 0000 call lcdSetIntensity + 2104 .LM429: + 2105 0c80 82E0 ldi r24,lo8(2) + 2106 0c82 0E94 0000 call lcdSetLayout + 2107 .LM430: + 2108 0c86 80E0 ldi r24,lo8(menuTable) + 2109 0c88 90E0 ldi r25,hi8(menuTable) + 2110 0c8a 0E94 0000 call lcdWriteStringP + 2111 .LM431: + 2112 0c8e 0E94 0000 call rfIdDisable + 2113 .LM432: + 2114 0c92 0E94 0000 call roboMSPDisable + 2115 .LM433: + 2116 /* #APP */ + 2117 0c96 7894 sei + 2118 /* #NOAPP */ + 2119 0c98 C0E0 ldi r28,lo8(menuTable+196) + 2120 0c9a D0E0 ldi r29,hi8(menuTable+196) + 2121 .L313: + 2122 .LM434: + 2123 0c9c 8091 0000 lds r24,progDoUpdate + 2124 0ca0 8823 tst r24 + 2125 0ca2 01F0 breq .L286 + 2126 .LM435: + 2127 0ca4 1092 0000 sts progDoUpdate,__zero_reg__ + 2128 .LM436: + 2129 0ca8 0E94 0000 call updateProgram + 2130 .L286: + 2131 .LM437: + 2132 0cac CC99 sbic 57-0x20,4 + 2133 0cae 00C0 rjmp .L288 + 2134 .LM438: + 2135 0cb0 8091 0000 lds r24,switchOneCheck + 2136 0cb4 8823 tst r24 + 2137 0cb6 01F0 breq .L290 + 2138 .LM439: + 2139 0cb8 83E0 ldi r24,lo8(3) + 2140 0cba 0E94 0000 call activateRobot + 2141 0cbe 00C0 rjmp .L312 + 2142 .L288: + 2143 .LM440: + 2144 0cc0 CD9B sbis 57-0x20,5 + 2145 0cc2 00C0 rjmp .L292 + 2146 0cc4 CC9B sbis 57-0x20,4 + 2147 0cc6 00C0 rjmp .L292 + 2148 .LM441: + 2149 0cc8 8091 0000 lds r24,switchOneCheck + 2150 0ccc 8823 tst r24 + 2151 0cce 01F4 brne .L290 + 2152 .LM442: + 2153 0cd0 0E94 0000 call deactivateRobot + 2154 .LM443: + 2155 0cd4 1092 0000 sts rfEnable,__zero_reg__ + 2156 .LM444: + 2157 0cd8 81E0 ldi r24,lo8(1) + 2158 0cda 8093 0000 sts switchOneCheck,r24 + 2159 .LM445: + 2160 0cde 0E94 0000 call main + 2161 0ce2 00C0 rjmp .L290 + 2162 .L292: + 2163 .LM446: + 2164 0ce4 CD99 sbic 57-0x20,5 + 2165 0ce6 00C0 rjmp .L290 + 2166 .LM447: + 2167 0ce8 8091 0000 lds r24,switchOneCheck + 2168 0cec 8823 tst r24 + 2169 0cee 01F0 breq .L290 + 2170 .LM448: + 2171 0cf0 80E0 ldi r24,lo8(0) + 2172 0cf2 0E94 0000 call lcdSetLayout + 2173 .LM449: + 2174 0cf6 CE01 movw r24,r28 + 2175 0cf8 0E94 0000 call lcdWriteStringP + 2176 .LM450: + 2177 0cfc 81E0 ldi r24,lo8(1) + 2178 0cfe 8093 0000 sts rfEnable,r24 + 2179 .LM451: + 2180 0d02 0E94 0000 call rfIdEnable + 2181 .LM452: + 2182 0d06 0E94 0000 call roboMSPEnable + 2183 .L312: + 2184 .LM453: + 2185 0d0a 1092 0000 sts switchOneCheck,__zero_reg__ + 2186 .L290: + 2187 .LM454: + 2188 0d0e CE99 sbic 57-0x20,6 + 2189 0d10 00C0 rjmp .L298 + 2190 .LM455: + 2191 0d12 8091 0000 lds r24,switchTwoCheck + 2192 0d16 8823 tst r24 + 2193 0d18 01F0 breq .L313 + 2194 .LM456: + 2195 0d1a 81E0 ldi r24,lo8(1) + 2196 0d1c 00C0 rjmp .L311 + 2197 .L298: + 2198 .LM457: + 2199 0d1e CF9B sbis 57-0x20,7 + 2200 0d20 00C0 rjmp .L301 + 2201 0d22 CE9B sbis 57-0x20,6 + 2202 0d24 00C0 rjmp .L301 + 2203 .LM458: + 2204 0d26 8091 0000 lds r24,switchTwoCheck + 2205 0d2a 8823 tst r24 + 2206 0d2c 01F0 breq .+2 + 2207 0d2e 00C0 rjmp .L313 + 2208 .LM459: + 2209 0d30 0E94 0000 call deactivateRobot + 2210 .LM460: + 2211 0d34 1092 0000 sts rfEnable,__zero_reg__ + 2212 .LM461: + 2213 0d38 81E0 ldi r24,lo8(1) + 2214 0d3a 8093 0000 sts switchTwoCheck,r24 + 2215 .LM462: + 2216 0d3e 0E94 0000 call main + 2217 0d42 00C0 rjmp .L313 + 2218 .L301: + 2219 .LM463: + 2220 0d44 CF99 sbic 57-0x20,7 + 2221 0d46 00C0 rjmp .L313 + 2222 .LM464: + 2223 0d48 8091 0000 lds r24,switchTwoCheck + 2224 0d4c 8823 tst r24 + 2225 0d4e 01F4 brne .+2 + 2226 0d50 00C0 rjmp .L313 + 2227 .LM465: + 2228 0d52 82E0 ldi r24,lo8(2) + 2229 .L311: + 2230 0d54 0E94 0000 call activateRobot + 2231 .LM466: + 2232 0d58 1092 0000 sts switchTwoCheck,__zero_reg__ + 2233 0d5c 00C0 rjmp .L313 + 2234 /* epilogue: frame size=0 */ + 2235 /* epilogue: noreturn */ + 2236 /* epilogue end (size=0) */ + 2237 /* function main size 129 (127) */ + 2238 .LFE22: + 2240 .global servoPing + 2241 .data + 2244 servoPing: + 2245 0303 8C .byte -116 + 2246 .global servoMotorLeft + 2249 servoMotorLeft: + 2250 0304 77 .byte 119 + 2251 .global servoMotorRight + 2254 servoMotorRight: + 2255 0305 77 .byte 119 + 2256 .global servoCounter + 2257 .global servoCounter + 2258 .section .bss + 2261 servoCounter: + 2262 0000 00 .skip 1,0 + 2263 .global servoMotorLeftReg + 2264 .data + 2267 servoMotorLeftReg: + 2268 0306 77 .byte 119 + 2269 .global servoMotorRightReg + 2272 servoMotorRightReg: + 2273 0307 77 .byte 119 + 2274 .global progCounterPing + 2275 .global progCounterPing + 2276 .section .bss + 2279 progCounterPing: + 2280 0001 00 .skip 1,0 + 2281 .global progCounterPPM + 2282 .global progCounterPPM + 2285 progCounterPPM: + 2286 0002 00 .skip 1,0 + 2287 .global progCounter + 2288 .global progCounter + 2291 progCounter: + 2292 0003 00 .skip 1,0 + 2293 .global progTimer + 2294 .global progTimer + 2297 progTimer: + 2298 0004 00 .skip 1,0 + 2299 .global progPosition + 2300 .global progPosition + 2303 progPosition: + 2304 0005 00 .skip 1,0 + 2305 .global progDoUpdate + 2306 .global progDoUpdate + 2309 progDoUpdate: + 2310 0006 00 .skip 1,0 + 2311 .global tempDistance + 2312 .global tempDistance + 2315 tempDistance: + 2316 0007 0000 .skip 2,0 + 2317 .global tempDistanceToWall + 2318 .global tempDistanceToWall + 2321 tempDistanceToWall: + 2322 0009 0000 .skip 2,0 + 2323 .global tempLastDistanceToWall + 2324 .global tempLastDistanceToWall + 2327 tempLastDistanceToWall: + 2328 000b 0000 .skip 2,0 + 2329 .global tempLeftDistance + 2330 .global tempLeftDistance + 2333 tempLeftDistance: + 2334 000d 0000 .skip 2,0 + 2335 .global tempRightDistance + 2336 .global tempRightDistance + 2339 tempRightDistance: + 2340 000f 0000 .skip 2,0 + 2341 .global roboActive + 2342 .global roboActive + 2345 roboActive: + 2346 0011 00 .skip 1,0 + 2347 .global rfEnable + 2348 .global rfEnable + 2351 rfEnable: + 2352 0012 00 .skip 1,0 + 2353 .global switchOneCheck + 2354 .global switchOneCheck + 2357 switchOneCheck: + 2358 0013 00 .skip 1,0 + 2359 .global switchTwoCheck + 2360 .global switchTwoCheck + 2363 switchTwoCheck: + 2364 0014 00 .skip 1,0 + 2365 .global regulatorMode + 2366 .global regulatorMode + 2369 regulatorMode: + 2370 0015 00 .skip 1,0 + 2371 .global regulatorTimer + 2372 .global regulatorTimer + 2375 regulatorTimer: + 2376 0016 00 .skip 1,0 + 2377 .global regulatorCounter + 2378 .global regulatorCounter + 2381 regulatorCounter: + 2382 0017 00 .skip 1,0 + 2383 .global regulatorMeasureCounter + 2384 .global regulatorMeasureCounter + 2387 regulatorMeasureCounter: + 2388 0018 00 .skip 1,0 + 2389 .global menuTable + 2390 .section .progmem.data,"a",@progbits + 2393 menuTable: + 2394 0000 2020 2020 .string " CMtec roboCrawler v1.1 " + 2394 2043 4D74 + 2394 6563 2020 + 2394 2020 2020 + 2394 726F 626F + 2395 0031 2020 2020 .string " mode 1: Follow wall at a distance(1m) " + 2395 206D 6F64 + 2395 6520 313A + 2395 2020 2020 + 2395 2046 6F6C + 2396 0062 2020 2020 .string " mode 2: Drive and void any walls " + 2396 206D 6F64 + 2396 6520 323A + 2396 2020 2020 + 2396 2044 7269 + 2397 0093 2020 2020 .string " mode 3: Measure distance forward " + 2397 206D 6F64 + 2397 6520 333A + 2397 2020 2020 + 2397 4D65 6173 + 2398 00c4 2020 2020 .string " mode RF: RF actived and waiting for com." + 2398 6D6F 6465 + 2398 2052 463A + 2398 2020 2020 + 2398 2052 4620 + 2487 .Letext0: +DEFINED SYMBOLS + *ABS*:00000000 RoboMI.c + /tmp/ccgaOObN.s:2 *ABS*:0000003f __SREG__ + /tmp/ccgaOObN.s:3 *ABS*:0000003e __SP_H__ + /tmp/ccgaOObN.s:4 *ABS*:0000003d __SP_L__ + /tmp/ccgaOObN.s:5 *ABS*:00000000 __tmp_reg__ + /tmp/ccgaOObN.s:6 *ABS*:00000001 __zero_reg__ + /tmp/ccgaOObN.s:19 .text:00000000 initIO + /tmp/ccgaOObN.s:2303 .bss:00000005 progPosition + /tmp/ccgaOObN.s:62 .text:0000002e __vector_15 + /tmp/ccgaOObN.s:2285 .bss:00000002 progCounterPPM + /tmp/ccgaOObN.s:2261 .bss:00000000 servoCounter + /tmp/ccgaOObN.s:2309 .bss:00000006 progDoUpdate + /tmp/ccgaOObN.s:114 .text:00000076 __vector_11 + /tmp/ccgaOObN.s:2244 .data:00000303 servoPing + /tmp/ccgaOObN.s:2249 .data:00000304 servoMotorLeft + /tmp/ccgaOObN.s:2254 .data:00000305 servoMotorRight + /tmp/ccgaOObN.s:211 .text:000000e6 activateRobot + /tmp/ccgaOObN.s:2393 .progmem.data:00000000 menuTable + /tmp/ccgaOObN.s:2297 .bss:00000004 progTimer + /tmp/ccgaOObN.s:2345 .bss:00000011 roboActive + /tmp/ccgaOObN.s:245 .text:0000010e deactivateRobot + /tmp/ccgaOObN.s:336 .text:00000128 showDistanceOnLCD + /tmp/ccgaOObN.s:705 .text:00000306 checkCommunication + /tmp/ccgaOObN.s:807 .text:00000366 updateProgram + /tmp/ccgaOObN.s:2351 .bss:00000012 rfEnable + /tmp/ccgaOObN.s:2291 .bss:00000003 progCounter + /tmp/ccgaOObN.s:2315 .bss:00000007 tempDistance + /tmp/ccgaOObN.s:2387 .bss:00000018 regulatorMeasureCounter + /tmp/ccgaOObN.s:2333 .bss:0000000d tempLeftDistance + /tmp/ccgaOObN.s:2339 .bss:0000000f tempRightDistance + /tmp/ccgaOObN.s:2369 .bss:00000015 regulatorMode + /tmp/ccgaOObN.s:2327 .bss:0000000b tempLastDistanceToWall + /tmp/ccgaOObN.s:2321 .bss:00000009 tempDistanceToWall + /tmp/ccgaOObN.s:2375 .bss:00000016 regulatorTimer + /tmp/ccgaOObN.s:2381 .bss:00000017 regulatorCounter + /tmp/ccgaOObN.s:2080 .text:00000c60 main + /tmp/ccgaOObN.s:2357 .bss:00000013 switchOneCheck + /tmp/ccgaOObN.s:2363 .bss:00000014 switchTwoCheck + /tmp/ccgaOObN.s:2267 .data:00000306 servoMotorLeftReg + /tmp/ccgaOObN.s:2272 .data:00000307 servoMotorRightReg + /tmp/ccgaOObN.s:2279 .bss:00000001 progCounterPing + +UNDEFINED SYMBOLS +__do_copy_data +__do_clear_bss +lcdSetLayout +lcdWriteStringP +rfIdDisable +lcdSetPos +lcdWriteString +rfIdGetTagPresent +rfIdGetTag +roboMSPSetData +roboMSPGetActiveStatus +rfIdEnable +rfIdClearBuffer +lcdClearDisplay +pingSendPing +pingGetReady +pingGetDistance +__udivmodsi4 +lcdWriteHexAsDecimal +lcdInit +rfIdInit +roboMSPInit +pingInit +lcdSetIntensity +roboMSPDisable +roboMSPEnable diff --git a/RoboMI.map b/RoboMI.map new file mode 100644 index 0000000..c2fb295 --- /dev/null +++ b/RoboMI.map @@ -0,0 +1,742 @@ +Archive member included because of file (symbol) + +/media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(lcdDOG.o) + RoboMI.o (lcdSetIntensity) +/media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(rfID.o) + RoboMI.o (rfIdGetTag) +/media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(roboMSP.o) + RoboMI.o (roboMSPGetActiveStatus) +/media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(spiMaster.o) + /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(lcdDOG.o) (spiWrite) +/media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(usart0.o) + /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(rfID.o) (usart0SetBaud) +/media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(usart1.o) + /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(roboMSP.o) (usart1SetBaud) +/media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(ping.o) + RoboMI.o (pingSendPing) +/usr/local/avr/lib/gcc/avr/4.2.2/avr5/libgcc.a(_udivmodhi4.o) + /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(lcdDOG.o) (__udivmodhi4) +/usr/local/avr/lib/gcc/avr/4.2.2/avr5/libgcc.a(_udivmodsi4.o) + RoboMI.o (__udivmodsi4) +/usr/local/avr/lib/gcc/avr/4.2.2/avr5/libgcc.a(_divmodsi4.o) + /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(usart0.o) (__divmodsi4) +/usr/local/avr/lib/gcc/avr/4.2.2/avr5/libgcc.a(_exit.o) + /usr/local/avr/lib/gcc/avr/4.2.2/../../../../avr/lib/avr5/crtm162.o (exit) +/usr/local/avr/lib/gcc/avr/4.2.2/avr5/libgcc.a(_copy_data.o) + RoboMI.o (__do_copy_data) +/usr/local/avr/lib/gcc/avr/4.2.2/avr5/libgcc.a(_clear_bss.o) + RoboMI.o (__do_clear_bss) + +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 +*default* 0x00000000 0xffffffff + +Linker script and memory map + +Address of section .data set to 0x800100 +LOAD /usr/local/avr/lib/gcc/avr/4.2.2/../../../../avr/lib/avr5/crtm162.o +LOAD RoboMI.o +LOAD /usr/local/avr/lib/gcc/avr/4.2.2/../../../../avr/lib/avr5/libm.a +LOAD /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a +LOAD /usr/local/avr/lib/gcc/avr/4.2.2/avr5/libgcc.a +LOAD /usr/local/avr/lib/gcc/avr/4.2.2/../../../../avr/lib/avr5/libc.a +LOAD /usr/local/avr/lib/gcc/avr/4.2.2/avr5/libgcc.a + +.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 0x184a + *(.vectors) + .vectors 0x00000000 0x70 /usr/local/avr/lib/gcc/avr/4.2.2/../../../../avr/lib/avr5/crtm162.o + 0x00000000 __vectors + 0x00000000 __vector_default + *(.vectors) + *(.progmem.gcc*) + .progmem.gcc_sw_table + 0x00000070 0x2c RoboMI.o + *(.progmem*) + .progmem.data 0x0000009c 0xf5 RoboMI.o + 0x0000009c menuTable + 0x00000192 . = ALIGN (0x2) + *fill* 0x00000191 0x1 00 + 0x00000192 __trampolines_start = . + *(.trampolines) + .trampolines 0x00000192 0x0 linker stubs + *(.trampolines*) + 0x00000192 __trampolines_end = . + *(.jumptables) + *(.jumptables*) + *(.lowtext) + *(.lowtext*) + 0x00000192 __ctors_start = . + *(.ctors) + 0x00000192 __ctors_end = . + 0x00000192 __dtors_start = . + *(.dtors) + 0x00000192 __dtors_end = . + SORT(*)(.ctors) + SORT(*)(.dtors) + *(.init0) + .init0 0x00000192 0x0 /usr/local/avr/lib/gcc/avr/4.2.2/../../../../avr/lib/avr5/crtm162.o + 0x00000192 __init + *(.init0) + *(.init1) + *(.init1) + *(.init2) + .init2 0x00000192 0xc /usr/local/avr/lib/gcc/avr/4.2.2/../../../../avr/lib/avr5/crtm162.o + *(.init2) + *(.init3) + *(.init3) + *(.init4) + .init4 0x0000019e 0x16 /usr/local/avr/lib/gcc/avr/4.2.2/avr5/libgcc.a(_copy_data.o) + 0x0000019e __do_copy_data + .init4 0x000001b4 0x10 /usr/local/avr/lib/gcc/avr/4.2.2/avr5/libgcc.a(_clear_bss.o) + 0x000001b4 __do_clear_bss + *(.init4) + *(.init5) + *(.init5) + *(.init6) + *(.init6) + *(.init7) + *(.init7) + *(.init8) + *(.init8) + *(.init9) + .init9 0x000001c4 0x8 /usr/local/avr/lib/gcc/avr/4.2.2/../../../../avr/lib/avr5/crtm162.o + *(.init9) + *(.text) + .text 0x000001cc 0x4 /usr/local/avr/lib/gcc/avr/4.2.2/../../../../avr/lib/avr5/crtm162.o + 0x000001cc __vector_22 + 0x000001cc __vector_24 + 0x000001cc __vector_12 + 0x000001cc __bad_interrupt + 0x000001cc __vector_6 + 0x000001cc __vector_3 + 0x000001cc __vector_23 + 0x000001cc __vector_25 + 0x000001cc __vector_13 + 0x000001cc __vector_17 + 0x000001cc __vector_7 + 0x000001cc __vector_27 + 0x000001cc __vector_5 + 0x000001cc __vector_4 + 0x000001cc __vector_9 + 0x000001cc __vector_2 + 0x000001cc __vector_21 + 0x000001cc __vector_8 + 0x000001cc __vector_26 + 0x000001cc __vector_14 + 0x000001cc __vector_10 + 0x000001cc __vector_16 + 0x000001cc __vector_18 + .text 0x000001d0 0xd5e RoboMI.o + 0x000004d6 checkCommunication + 0x00000246 __vector_11 + 0x000002b6 activateRobot + 0x000002f8 showDistanceOnLCD + 0x000002de deactivateRobot + 0x00000e30 main + 0x00000536 updateProgram + 0x000001fe __vector_15 + 0x000001d0 initIO + .text 0x00000f2e 0x39a /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(lcdDOG.o) + 0x00000fa6 lcdSetPos + 0x00001076 lcdWriteString + 0x00000f2e lcdEngToSwe + 0x00000f36 lcdWriteIns + 0x00000ff4 lcdSetCursor + 0x00001280 lcdInit + 0x00000fbe lcdClearDisplay + 0x0000101a lcdSetDisplay + 0x0000105a lcdWriteStringP + 0x00000f50 lcdSetLayout + 0x00000fce lcdSetBlink + 0x00000f32 lcdSetIntensity + 0x00001100 lcdWriteHexAsDecimal + 0x0000108e lcdWriteHex + 0x00000f9c lcdSetContrast + 0x00000fae lcdReturnHome + 0x00001040 lcdWriteChar + .text 0x000012c8 0xbe /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(rfID.o) + 0x000012d2 rfIdClearBuffer + 0x000012c8 rfIdGetTag + 0x00001360 rfIdInit + 0x000012e2 __vector_19 + 0x00001376 rfIdDisable + 0x0000137e rfIdEnable + 0x000012da rfIdGetTagPresent + .text 0x00001386 0x258 /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(roboMSP.o) + 0x00001484 roboMSPDisable + 0x00001392 calculateChecksum + 0x0000144c roboMSPGetCommand + 0x0000148a roboMSPEnable + 0x000013b8 roboMSPValidatePacket + 0x00001454 roboMSPClearBuffer + 0x00001386 roboMSPGetActiveStatus + 0x00001490 roboMSPSendData + 0x00001460 roboMSPInit + 0x00001512 __vector_20 + 0x00001426 roboMSPSetData + .text 0x000015de 0x42 /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(spiMaster.o) + 0x000015ec spiSetHighSpeed + 0x000015f8 spiSelectDeviceIO + 0x000015f2 spiSetLowSpeed + 0x000015de spiWrite + 0x000015e6 spiReadIO + 0x0000160c spiInit + .text 0x00001620 0x78 /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(usart0.o) + 0x00001620 usart0SetBaud + 0x00001660 usart0Receive + 0x00001672 usart0RxIntEnable + 0x00001676 usart0RxIntDisable + 0x00001684 usart0SendString + 0x0000167a usart0Init + 0x0000166a usart0Send + .text 0x00001698 0x80 /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(usart1.o) + 0x00001704 usart1SendString + 0x000016e2 usart1Send + 0x000016f2 usart1RxIntDisable + 0x000016ea usart1RxIntEnable + 0x00001698 usart1SetBaud + 0x000016d8 usart1Receive + 0x000016fa usart1Init + .text 0x00001718 0x8e /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(ping.o) + 0x00001758 __vector_1 + 0x00001718 pingSendPing + 0x00001740 pingGetDistance + 0x0000174e pingGetReady + 0x00001756 pingInit + .text 0x000017a6 0x0 /usr/local/avr/lib/gcc/avr/4.2.2/avr5/libgcc.a(_udivmodhi4.o) + .text 0x000017a6 0x0 /usr/local/avr/lib/gcc/avr/4.2.2/avr5/libgcc.a(_udivmodsi4.o) + .text 0x000017a6 0x0 /usr/local/avr/lib/gcc/avr/4.2.2/avr5/libgcc.a(_divmodsi4.o) + .text 0x000017a6 0x0 /usr/local/avr/lib/gcc/avr/4.2.2/avr5/libgcc.a(_exit.o) + .text 0x000017a6 0x0 /usr/local/avr/lib/gcc/avr/4.2.2/avr5/libgcc.a(_copy_data.o) + .text 0x000017a6 0x0 /usr/local/avr/lib/gcc/avr/4.2.2/avr5/libgcc.a(_clear_bss.o) + 0x000017a6 . = ALIGN (0x2) + *(.text.*) + .text.libgcc 0x000017a6 0x28 /usr/local/avr/lib/gcc/avr/4.2.2/avr5/libgcc.a(_udivmodhi4.o) + 0x000017a6 __udivmodhi4 + .text.libgcc 0x000017ce 0x44 /usr/local/avr/lib/gcc/avr/4.2.2/avr5/libgcc.a(_udivmodsi4.o) + 0x000017ce __udivmodsi4 + .text.libgcc 0x00001812 0x36 /usr/local/avr/lib/gcc/avr/4.2.2/avr5/libgcc.a(_divmodsi4.o) + 0x00001812 __divmodsi4 + .text.libgcc 0x00001848 0x0 /usr/local/avr/lib/gcc/avr/4.2.2/avr5/libgcc.a(_exit.o) + .text.libgcc 0x00001848 0x0 /usr/local/avr/lib/gcc/avr/4.2.2/avr5/libgcc.a(_copy_data.o) + .text.libgcc 0x00001848 0x0 /usr/local/avr/lib/gcc/avr/4.2.2/avr5/libgcc.a(_clear_bss.o) + 0x00001848 . = ALIGN (0x2) + *(.fini9) + .fini9 0x00001848 0x0 /usr/local/avr/lib/gcc/avr/4.2.2/avr5/libgcc.a(_exit.o) + 0x00001848 exit + 0x00001848 _exit + *(.fini9) + *(.fini8) + *(.fini8) + *(.fini7) + *(.fini7) + *(.fini6) + *(.fini6) + *(.fini5) + *(.fini5) + *(.fini4) + *(.fini4) + *(.fini3) + *(.fini3) + *(.fini2) + *(.fini2) + *(.fini1) + *(.fini1) + *(.fini0) + .fini0 0x00001848 0x2 /usr/local/avr/lib/gcc/avr/4.2.2/avr5/libgcc.a(_exit.o) + *(.fini0) + 0x0000184a _etext = . + +.data 0x00800100 0x32a load address 0x0000184a + 0x00800100 PROVIDE (__data_start, .) + *(.data) + .data 0x00800100 0x0 /usr/local/avr/lib/gcc/avr/4.2.2/../../../../avr/lib/avr5/crtm162.o + .data 0x00800100 0x308 RoboMI.o + 0x00800407 servoMotorRightReg + 0x00800404 servoMotorLeft + 0x00800406 servoMotorLeftReg + 0x00800405 servoMotorRight + 0x00800403 servoPing + .data 0x00800408 0x6 /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(lcdDOG.o) + .data 0x0080040e 0x0 /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(rfID.o) + .data 0x0080040e 0x1b /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(roboMSP.o) + .data 0x00800429 0x0 /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(spiMaster.o) + .data 0x00800429 0x0 /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(usart0.o) + .data 0x00800429 0x0 /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(usart1.o) + .data 0x00800429 0x0 /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(ping.o) + .data 0x00800429 0x0 /usr/local/avr/lib/gcc/avr/4.2.2/avr5/libgcc.a(_udivmodhi4.o) + .data 0x00800429 0x0 /usr/local/avr/lib/gcc/avr/4.2.2/avr5/libgcc.a(_udivmodsi4.o) + .data 0x00800429 0x0 /usr/local/avr/lib/gcc/avr/4.2.2/avr5/libgcc.a(_divmodsi4.o) + .data 0x00800429 0x0 /usr/local/avr/lib/gcc/avr/4.2.2/avr5/libgcc.a(_exit.o) + .data 0x00800429 0x0 /usr/local/avr/lib/gcc/avr/4.2.2/avr5/libgcc.a(_copy_data.o) + .data 0x00800429 0x0 /usr/local/avr/lib/gcc/avr/4.2.2/avr5/libgcc.a(_clear_bss.o) + *(.data*) + *(.rodata) + *(.rodata*) + *(.gnu.linkonce.d*) + 0x0080042a . = ALIGN (0x2) + *fill* 0x00800429 0x1 00 + 0x0080042a _edata = . + 0x0080042a PROVIDE (__data_end, .) + +.bss 0x0080042a 0x3b load address 0x00001b74 + 0x0080042a PROVIDE (__bss_start, .) + *(.bss) + .bss 0x0080042a 0x0 /usr/local/avr/lib/gcc/avr/4.2.2/../../../../avr/lib/avr5/crtm162.o + .bss 0x0080042a 0x19 RoboMI.o + 0x00800437 tempLeftDistance + 0x0080043c rfEnable + 0x00800435 tempLastDistanceToWall + 0x0080043b roboActive + 0x00800433 tempDistanceToWall + 0x0080042c progCounterPPM + 0x0080043d switchOneCheck + 0x00800439 tempRightDistance + 0x0080043e switchTwoCheck + 0x00800440 regulatorTimer + 0x0080042b progCounterPing + 0x0080042e progTimer + 0x00800430 progDoUpdate + 0x00800441 regulatorCounter + 0x00800442 regulatorMeasureCounter + 0x00800431 tempDistance + 0x0080042f progPosition + 0x0080042d progCounter + 0x0080042a servoCounter + 0x0080043f regulatorMode + .bss 0x00800443 0x1 /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(lcdDOG.o) + .bss 0x00800444 0xe /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(rfID.o) + .bss 0x00800452 0x12 /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(roboMSP.o) + .bss 0x00800464 0x0 /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(spiMaster.o) + .bss 0x00800464 0x0 /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(usart0.o) + .bss 0x00800464 0x0 /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(usart1.o) + .bss 0x00800464 0x1 /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(ping.o) + 0x00800464 pingGotDistance + .bss 0x00800465 0x0 /usr/local/avr/lib/gcc/avr/4.2.2/avr5/libgcc.a(_udivmodhi4.o) + .bss 0x00800465 0x0 /usr/local/avr/lib/gcc/avr/4.2.2/avr5/libgcc.a(_udivmodsi4.o) + .bss 0x00800465 0x0 /usr/local/avr/lib/gcc/avr/4.2.2/avr5/libgcc.a(_divmodsi4.o) + .bss 0x00800465 0x0 /usr/local/avr/lib/gcc/avr/4.2.2/avr5/libgcc.a(_exit.o) + .bss 0x00800465 0x0 /usr/local/avr/lib/gcc/avr/4.2.2/avr5/libgcc.a(_copy_data.o) + .bss 0x00800465 0x0 /usr/local/avr/lib/gcc/avr/4.2.2/avr5/libgcc.a(_clear_bss.o) + *(.bss*) + *(COMMON) + 0x00800465 PROVIDE (__bss_end, .) + 0x0000184a __data_load_start = LOADADDR (.data) + 0x00001b74 __data_load_end = (__data_load_start + SIZEOF (.data)) + +.noinit 0x00800465 0x0 + 0x00800465 PROVIDE (__noinit_start, .) + *(.noinit*) + 0x00800465 PROVIDE (__noinit_end, .) + 0x00800465 _end = . + 0x00800465 PROVIDE (__heap_start, .) + +.eeprom 0x00810000 0x0 + *(.eeprom*) + 0x00810000 __eeprom_end = . + +.fuse + *(.fuse) + *(.lfuse) + *(.hfuse) + *(.efuse) + +.lock + *(.lock*) + +.signature + *(.signature*) + +.stab 0x00000000 0x2f4c + *(.stab) + .stab 0x00000000 0x6b4 /usr/local/avr/lib/gcc/avr/4.2.2/../../../../avr/lib/avr5/crtm162.o + .stab 0x000006b4 0xdbc /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(lcdDOG.o) + 0xdc8 (size before relaxing) + .stab 0x00001470 0x42c /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(rfID.o) + 0x5d0 (size before relaxing) + .stab 0x0000189c 0x8c4 /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(roboMSP.o) + 0xa80 (size before relaxing) + .stab 0x00002160 0x33c /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(spiMaster.o) + 0x4ec (size before relaxing) + .stab 0x0000249c 0x390 /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(usart0.o) + 0x540 (size before relaxing) + .stab 0x0000282c 0x390 /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(usart1.o) + 0x540 (size before relaxing) + .stab 0x00002bbc 0x390 /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(ping.o) + 0x54c (size before relaxing) + +.stabstr 0x00000000 0x132e + *(.stabstr) + .stabstr 0x00000000 0x132e /usr/local/avr/lib/gcc/avr/4.2.2/../../../../avr/lib/avr5/crtm162.o + +.stab.excl + *(.stab.excl) + +.stab.exclstr + *(.stab.exclstr) + +.stab.index + *(.stab.index) + +.stab.indexstr + *(.stab.indexstr) + +.comment + *(.comment) + +.debug + *(.debug) + +.line + *(.line) + +.debug_srcinfo + *(.debug_srcinfo) + +.debug_sfnames + *(.debug_sfnames) + +.debug_aranges 0x00000000 0x20 + *(.debug_aranges) + .debug_aranges + 0x00000000 0x20 RoboMI.o + +.debug_pubnames + 0x00000000 0x299 + *(.debug_pubnames) + .debug_pubnames + 0x00000000 0x299 RoboMI.o + +.debug_info 0x00000000 0x3ff + *(.debug_info) + .debug_info 0x00000000 0x3ff RoboMI.o + *(.gnu.linkonce.wi.*) + +.debug_abbrev 0x00000000 0x13e + *(.debug_abbrev) + .debug_abbrev 0x00000000 0x13e RoboMI.o + +.debug_line 0x00000000 0xf52 + *(.debug_line) + .debug_line 0x00000000 0xf52 RoboMI.o + +.debug_frame 0x00000000 0xa0 + *(.debug_frame) + .debug_frame 0x00000000 0xa0 RoboMI.o + +.debug_str 0x00000000 0x2dc + *(.debug_str) + .debug_str 0x00000000 0x2dc RoboMI.o + 0x323 (size before relaxing) + +.debug_loc 0x00000000 0xab + *(.debug_loc) + .debug_loc 0x00000000 0xab RoboMI.o + +.debug_macinfo + *(.debug_macinfo) +OUTPUT(RoboMI.elf elf32-avr) +LOAD linker stubs + +Cross Reference Table + +Symbol File +__bad_interrupt /usr/local/avr/lib/gcc/avr/4.2.2/../../../../avr/lib/avr5/crtm162.o +__bss_end /usr/local/avr/lib/gcc/avr/4.2.2/avr5/libgcc.a(_clear_bss.o) +__bss_start /usr/local/avr/lib/gcc/avr/4.2.2/avr5/libgcc.a(_clear_bss.o) +__data_end /usr/local/avr/lib/gcc/avr/4.2.2/avr5/libgcc.a(_copy_data.o) +__data_load_start /usr/local/avr/lib/gcc/avr/4.2.2/avr5/libgcc.a(_copy_data.o) +__data_start /usr/local/avr/lib/gcc/avr/4.2.2/avr5/libgcc.a(_copy_data.o) +__divmodsi4 /usr/local/avr/lib/gcc/avr/4.2.2/avr5/libgcc.a(_divmodsi4.o) + /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(usart1.o) + /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(usart0.o) +__do_clear_bss /usr/local/avr/lib/gcc/avr/4.2.2/avr5/libgcc.a(_clear_bss.o) + /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(ping.o) + /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(usart1.o) + /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(usart0.o) + /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(spiMaster.o) + /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(roboMSP.o) + /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(rfID.o) + /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(lcdDOG.o) + RoboMI.o +__do_copy_data /usr/local/avr/lib/gcc/avr/4.2.2/avr5/libgcc.a(_copy_data.o) + /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(ping.o) + /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(usart1.o) + /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(usart0.o) + /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(spiMaster.o) + /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(roboMSP.o) + /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(rfID.o) + /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(lcdDOG.o) + RoboMI.o +__heap_end /usr/local/avr/lib/gcc/avr/4.2.2/../../../../avr/lib/avr5/crtm162.o +__init /usr/local/avr/lib/gcc/avr/4.2.2/../../../../avr/lib/avr5/crtm162.o +__stack /usr/local/avr/lib/gcc/avr/4.2.2/../../../../avr/lib/avr5/crtm162.o +__udivmodhi4 /usr/local/avr/lib/gcc/avr/4.2.2/avr5/libgcc.a(_udivmodhi4.o) + /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(lcdDOG.o) +__udivmodsi4 /usr/local/avr/lib/gcc/avr/4.2.2/avr5/libgcc.a(_udivmodsi4.o) + /usr/local/avr/lib/gcc/avr/4.2.2/avr5/libgcc.a(_divmodsi4.o) + RoboMI.o +__vector_1 /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(ping.o) + /usr/local/avr/lib/gcc/avr/4.2.2/../../../../avr/lib/avr5/crtm162.o +__vector_10 /usr/local/avr/lib/gcc/avr/4.2.2/../../../../avr/lib/avr5/crtm162.o +__vector_11 RoboMI.o + /usr/local/avr/lib/gcc/avr/4.2.2/../../../../avr/lib/avr5/crtm162.o +__vector_12 /usr/local/avr/lib/gcc/avr/4.2.2/../../../../avr/lib/avr5/crtm162.o +__vector_13 /usr/local/avr/lib/gcc/avr/4.2.2/../../../../avr/lib/avr5/crtm162.o +__vector_14 /usr/local/avr/lib/gcc/avr/4.2.2/../../../../avr/lib/avr5/crtm162.o +__vector_15 RoboMI.o + /usr/local/avr/lib/gcc/avr/4.2.2/../../../../avr/lib/avr5/crtm162.o +__vector_16 /usr/local/avr/lib/gcc/avr/4.2.2/../../../../avr/lib/avr5/crtm162.o +__vector_17 /usr/local/avr/lib/gcc/avr/4.2.2/../../../../avr/lib/avr5/crtm162.o +__vector_18 /usr/local/avr/lib/gcc/avr/4.2.2/../../../../avr/lib/avr5/crtm162.o +__vector_19 /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(rfID.o) + /usr/local/avr/lib/gcc/avr/4.2.2/../../../../avr/lib/avr5/crtm162.o +__vector_2 /usr/local/avr/lib/gcc/avr/4.2.2/../../../../avr/lib/avr5/crtm162.o +__vector_20 /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(roboMSP.o) + /usr/local/avr/lib/gcc/avr/4.2.2/../../../../avr/lib/avr5/crtm162.o +__vector_21 /usr/local/avr/lib/gcc/avr/4.2.2/../../../../avr/lib/avr5/crtm162.o +__vector_22 /usr/local/avr/lib/gcc/avr/4.2.2/../../../../avr/lib/avr5/crtm162.o +__vector_23 /usr/local/avr/lib/gcc/avr/4.2.2/../../../../avr/lib/avr5/crtm162.o +__vector_24 /usr/local/avr/lib/gcc/avr/4.2.2/../../../../avr/lib/avr5/crtm162.o +__vector_25 /usr/local/avr/lib/gcc/avr/4.2.2/../../../../avr/lib/avr5/crtm162.o +__vector_26 /usr/local/avr/lib/gcc/avr/4.2.2/../../../../avr/lib/avr5/crtm162.o +__vector_27 /usr/local/avr/lib/gcc/avr/4.2.2/../../../../avr/lib/avr5/crtm162.o +__vector_3 /usr/local/avr/lib/gcc/avr/4.2.2/../../../../avr/lib/avr5/crtm162.o +__vector_4 /usr/local/avr/lib/gcc/avr/4.2.2/../../../../avr/lib/avr5/crtm162.o +__vector_5 /usr/local/avr/lib/gcc/avr/4.2.2/../../../../avr/lib/avr5/crtm162.o +__vector_6 /usr/local/avr/lib/gcc/avr/4.2.2/../../../../avr/lib/avr5/crtm162.o +__vector_7 /usr/local/avr/lib/gcc/avr/4.2.2/../../../../avr/lib/avr5/crtm162.o +__vector_8 /usr/local/avr/lib/gcc/avr/4.2.2/../../../../avr/lib/avr5/crtm162.o +__vector_9 /usr/local/avr/lib/gcc/avr/4.2.2/../../../../avr/lib/avr5/crtm162.o +__vector_default /usr/local/avr/lib/gcc/avr/4.2.2/../../../../avr/lib/avr5/crtm162.o +__vectors /usr/local/avr/lib/gcc/avr/4.2.2/../../../../avr/lib/avr5/crtm162.o +_exit /usr/local/avr/lib/gcc/avr/4.2.2/avr5/libgcc.a(_exit.o) +activateRobot RoboMI.o +calculateChecksum /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(roboMSP.o) +checkCommunication RoboMI.o +deactivateRobot RoboMI.o +exit /usr/local/avr/lib/gcc/avr/4.2.2/avr5/libgcc.a(_exit.o) + /usr/local/avr/lib/gcc/avr/4.2.2/../../../../avr/lib/avr5/crtm162.o +initIO RoboMI.o +lcdClearDisplay /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(lcdDOG.o) + RoboMI.o +lcdEngToSwe /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(lcdDOG.o) +lcdInit /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(lcdDOG.o) + RoboMI.o +lcdReturnHome /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(lcdDOG.o) +lcdSetBlink /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(lcdDOG.o) +lcdSetContrast /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(lcdDOG.o) +lcdSetCursor /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(lcdDOG.o) +lcdSetDisplay /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(lcdDOG.o) +lcdSetIntensity /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(lcdDOG.o) + RoboMI.o +lcdSetLayout /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(lcdDOG.o) + RoboMI.o +lcdSetPos /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(lcdDOG.o) + RoboMI.o +lcdWriteChar /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(lcdDOG.o) +lcdWriteHex /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(lcdDOG.o) +lcdWriteHexAsDecimal /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(lcdDOG.o) + RoboMI.o +lcdWriteIns /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(lcdDOG.o) +lcdWriteString /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(lcdDOG.o) + RoboMI.o +lcdWriteStringP /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(lcdDOG.o) + RoboMI.o +main RoboMI.o + /usr/local/avr/lib/gcc/avr/4.2.2/../../../../avr/lib/avr5/crtm162.o +menuTable RoboMI.o +pingGetDistance /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(ping.o) + RoboMI.o +pingGetReady /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(ping.o) + RoboMI.o +pingGotDistance /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(ping.o) +pingInit /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(ping.o) + RoboMI.o +pingSendPing /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(ping.o) + RoboMI.o +progCounter RoboMI.o +progCounterPPM RoboMI.o +progCounterPing RoboMI.o +progDoUpdate RoboMI.o +progPosition RoboMI.o +progTimer RoboMI.o +regulatorCounter RoboMI.o +regulatorMeasureCounter RoboMI.o +regulatorMode RoboMI.o +regulatorTimer RoboMI.o +rfEnable RoboMI.o +rfIdClearBuffer /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(rfID.o) + RoboMI.o +rfIdDisable /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(rfID.o) + RoboMI.o +rfIdEnable /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(rfID.o) + RoboMI.o +rfIdGetTag /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(rfID.o) + RoboMI.o +rfIdGetTagPresent /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(rfID.o) + RoboMI.o +rfIdInit /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(rfID.o) + RoboMI.o +roboActive RoboMI.o +roboMSPClearBuffer /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(roboMSP.o) +roboMSPDisable /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(roboMSP.o) + RoboMI.o +roboMSPEnable /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(roboMSP.o) + RoboMI.o +roboMSPGetActiveStatus /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(roboMSP.o) + RoboMI.o +roboMSPGetCommand /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(roboMSP.o) +roboMSPInit /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(roboMSP.o) + RoboMI.o +roboMSPSendData /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(roboMSP.o) +roboMSPSetData /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(roboMSP.o) + RoboMI.o +roboMSPValidatePacket /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(roboMSP.o) +servoCounter RoboMI.o +servoMotorLeft RoboMI.o +servoMotorLeftReg RoboMI.o +servoMotorRight RoboMI.o +servoMotorRightReg RoboMI.o +servoPing RoboMI.o +showDistanceOnLCD RoboMI.o +spiInit /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(spiMaster.o) + /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(lcdDOG.o) +spiReadIO /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(spiMaster.o) +spiSelectDeviceIO /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(spiMaster.o) + /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(lcdDOG.o) +spiSetHighSpeed /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(spiMaster.o) +spiSetLowSpeed /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(spiMaster.o) + /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(lcdDOG.o) +spiWrite /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(spiMaster.o) + /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(lcdDOG.o) +switchOneCheck RoboMI.o +switchTwoCheck RoboMI.o +tempDistance RoboMI.o +tempDistanceToWall RoboMI.o +tempLastDistanceToWall RoboMI.o +tempLeftDistance RoboMI.o +tempRightDistance RoboMI.o +updateProgram RoboMI.o +usart0Init /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(usart0.o) + /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(rfID.o) +usart0Receive /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(usart0.o) + /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(rfID.o) +usart0RxIntDisable /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(usart0.o) + /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(rfID.o) +usart0RxIntEnable /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(usart0.o) + /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(rfID.o) +usart0Send /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(usart0.o) +usart0SendString /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(usart0.o) +usart0SetBaud /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(usart0.o) + /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(rfID.o) +usart1Init /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(usart1.o) + /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(roboMSP.o) +usart1Receive /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(usart1.o) + /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(roboMSP.o) +usart1RxIntDisable /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(usart1.o) + /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(roboMSP.o) +usart1RxIntEnable /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(usart1.o) + /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(roboMSP.o) +usart1Send /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(usart1.o) + /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(roboMSP.o) +usart1SendString /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(usart1.o) +usart1SetBaud /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(usart1.o) + /media/CM/Projects/cmAvrLibC/libcmAvrLibC.a(roboMSP.o) diff --git a/RoboMI.sym b/RoboMI.sym new file mode 100644 index 0000000..fb309e6 --- /dev/null +++ b/RoboMI.sym @@ -0,0 +1,211 @@ +00000000 W __heap_end +00000000 a __tmp_reg__ +00000000 a __tmp_reg__ +00000000 a __tmp_reg__ +00000000 a __tmp_reg__ +00000000 a __tmp_reg__ +00000000 a __tmp_reg__ +00000000 a __tmp_reg__ +00000000 a __tmp_reg__ +00000000 W __vector_default +00000000 T __vectors +00000001 a __zero_reg__ +00000001 a __zero_reg__ +00000001 a __zero_reg__ +00000001 a __zero_reg__ +00000001 a __zero_reg__ +00000001 a __zero_reg__ +00000001 a __zero_reg__ +00000001 a __zero_reg__ +0000003d a __SP_L__ +0000003d a __SP_L__ +0000003d a __SP_L__ +0000003d a __SP_L__ +0000003d a __SP_L__ +0000003d a __SP_L__ +0000003d a __SP_L__ +0000003d a __SP_L__ +0000003e a __SP_H__ +0000003e a __SP_H__ +0000003e a __SP_H__ +0000003e a __SP_H__ +0000003e a __SP_H__ +0000003e a __SP_H__ +0000003e a __SP_H__ +0000003e a __SP_H__ +0000003f a __SREG__ +0000003f a __SREG__ +0000003f a __SREG__ +0000003f a __SREG__ +0000003f a __SREG__ +0000003f a __SREG__ +0000003f a __SREG__ +0000003f a __SREG__ +0000009c T menuTable +00000192 T __ctors_end +00000192 T __ctors_start +00000192 T __dtors_end +00000192 T __dtors_start +00000192 W __init +00000192 T __trampolines_end +00000192 T __trampolines_start +0000019e T __do_copy_data +000001aa t .do_copy_data_loop +000001ae t .do_copy_data_start +000001b4 T __do_clear_bss +000001bc t .do_clear_bss_loop +000001be t .do_clear_bss_start +000001cc T __bad_interrupt +000001cc W __vector_10 +000001cc W __vector_12 +000001cc W __vector_13 +000001cc W __vector_14 +000001cc W __vector_16 +000001cc W __vector_17 +000001cc W __vector_18 +000001cc W __vector_2 +000001cc W __vector_21 +000001cc W __vector_22 +000001cc W __vector_23 +000001cc W __vector_24 +000001cc W __vector_25 +000001cc W __vector_26 +000001cc W __vector_27 +000001cc W __vector_3 +000001cc W __vector_4 +000001cc W __vector_5 +000001cc W __vector_6 +000001cc W __vector_7 +000001cc W __vector_8 +000001cc W __vector_9 +000001d0 T initIO +000001fe T __vector_15 +00000246 T __vector_11 +000002b6 T activateRobot +000002de T deactivateRobot +000002f8 T showDistanceOnLCD +000004d6 T checkCommunication +000004ff W __stack +00000536 T updateProgram +00000e30 T main +00000f2e T lcdEngToSwe +00000f32 T lcdSetIntensity +00000f36 T lcdWriteIns +00000f50 T lcdSetLayout +00000f9c T lcdSetContrast +00000fa6 T lcdSetPos +00000fae T lcdReturnHome +00000fbe T lcdClearDisplay +00000fce T lcdSetBlink +00000ff4 T lcdSetCursor +0000101a T lcdSetDisplay +00001040 T lcdWriteChar +0000105a T lcdWriteStringP +00001076 T lcdWriteString +0000108e T lcdWriteHex +00001100 T lcdWriteHexAsDecimal +00001280 T lcdInit +000012c8 T rfIdGetTag +000012d2 T rfIdClearBuffer +000012da T rfIdGetTagPresent +000012e2 T __vector_19 +00001360 T rfIdInit +00001376 T rfIdDisable +0000137e T rfIdEnable +00001386 T roboMSPGetActiveStatus +00001392 T calculateChecksum +000013b8 T roboMSPValidatePacket +00001426 T roboMSPSetData +0000144c T roboMSPGetCommand +00001454 T roboMSPClearBuffer +00001460 T roboMSPInit +00001484 T roboMSPDisable +0000148a T roboMSPEnable +00001490 T roboMSPSendData +00001512 T __vector_20 +000015de T spiWrite +000015e6 T spiReadIO +000015ec T spiSetHighSpeed +000015f2 T spiSetLowSpeed +000015f8 T spiSelectDeviceIO +0000160c T spiInit +00001620 T usart0SetBaud +00001660 T usart0Receive +0000166a T usart0Send +00001672 T usart0RxIntEnable +00001676 T usart0RxIntDisable +0000167a T usart0Init +00001684 T usart0SendString +00001698 T usart1SetBaud +000016d8 T usart1Receive +000016e2 T usart1Send +000016ea T usart1RxIntEnable +000016f2 T usart1RxIntDisable +000016fa T usart1Init +00001704 T usart1SendString +00001718 T pingSendPing +00001740 T pingGetDistance +0000174e T pingGetReady +00001756 T pingInit +00001758 T __vector_1 +000017a6 T __udivmodhi4 +000017ae t __udivmodhi4_loop +000017bc t __udivmodhi4_ep +000017ce T __udivmodsi4 +000017da t __udivmodsi4_loop +000017f4 t __udivmodsi4_ep +00001812 T __divmodsi4 +00001826 t __divmodsi4_neg2 +00001834 t __divmodsi4_exit +00001836 t __divmodsi4_neg1 +00001848 t __stop_program +00001848 T _exit +00001848 W exit +0000184a A __data_load_start +0000184a T _etext +00001b74 A __data_load_end +00800100 D __data_start +00800403 D servoPing +00800404 D servoMotorLeft +00800405 D servoMotorRight +00800406 D servoMotorLeftReg +00800407 D servoMotorRightReg +0080040e d roboMSPActiveStatus +0080040f d roboMSPbufferSendData +0080041c d roboMSPbufferSendNothing +0080042a B __bss_start +0080042a D __data_end +0080042a D _edata +0080042a B servoCounter +0080042b B progCounterPing +0080042c B progCounterPPM +0080042d B progCounter +0080042e B progTimer +0080042f B progPosition +00800430 B progDoUpdate +00800431 B tempDistance +00800433 B tempDistanceToWall +00800435 B tempLastDistanceToWall +00800437 B tempLeftDistance +00800439 B tempRightDistance +0080043b B roboActive +0080043c B rfEnable +0080043d B switchOneCheck +0080043e B switchTwoCheck +0080043f B regulatorMode +00800440 B regulatorTimer +00800441 B regulatorCounter +00800442 B regulatorMeasureCounter +00800443 b lcdTempReg +00800444 b rfIdByteCount +00800445 b rfIdGotTag +00800446 b rfIdTagBuffer +00800452 b roboMSPbyteCount +00800453 b roboMSPCommand +00800454 b roboMSPSendDataFlag +00800455 b roboMSPBufferReady +00800456 b roboMSPbufferReceive +00800464 B pingGotDistance +00800465 B __bss_end +00800465 N _end +00810000 N __eeprom_end diff --git a/default/Makefile b/default/Makefile new file mode 100644 index 0000000..62f7506 --- /dev/null +++ b/default/Makefile @@ -0,0 +1,83 @@ +############################################################################### +# Makefile for the project RoboMI +############################################################################### + +## General Flags +PROJECT = RoboMI +MCU = atmega162 +TARGET = RoboMI.elf +CC = avr-gcc.exe + +## Options common to compile, link and assembly rules +COMMON = -mmcu=$(MCU) + +## Compile options common for all C compilation units. +CFLAGS = $(COMMON) +CFLAGS += -Wall -gdwarf-2 -DF_CPU=16000000UL -Os -fsigned-char +CFLAGS += -MD -MP -MT $(*F).o -MF dep/$(@F).d + +## Assembly specific flags +ASMFLAGS = $(COMMON) +ASMFLAGS += $(CFLAGS) +ASMFLAGS += -x assembler-with-cpp -Wa,-gdwarf2 + +## Linker flags +LDFLAGS = $(COMMON) +LDFLAGS += + + +## Intel Hex file production flags +HEX_FLASH_FLAGS = -R .eeprom + +HEX_EEPROM_FLAGS = -j .eeprom +HEX_EEPROM_FLAGS += --set-section-flags=.eeprom="alloc,load" +HEX_EEPROM_FLAGS += --change-section-lma .eeprom=0 --no-change-warnings + + +## Include Directories +INCLUDES = -I"D:\Projects\roboCrawler\C\..\..\..\-Project-\cmAvrLibC" + +## Library Directories +LIBDIRS = -L"D:\-Project-\cmAvrLibC" + +## Libraries +LIBS = -lcmAvrLibC + +## Objects that must be built in order to link +OBJECTS = RoboMI.o + +## Objects explicitly added by the user +LINKONLYOBJECTS = + +## Build +all: $(TARGET) RoboMI.hex RoboMI.eep size + +## Compile +RoboMI.o: ../RoboMI.c + $(CC) $(INCLUDES) $(CFLAGS) -c $< + +##Link +$(TARGET): $(OBJECTS) + $(CC) $(LDFLAGS) $(OBJECTS) $(LINKONLYOBJECTS) $(LIBDIRS) $(LIBS) -o $(TARGET) + +%.hex: $(TARGET) + avr-objcopy -O ihex $(HEX_FLASH_FLAGS) $< $@ + +%.eep: $(TARGET) + -avr-objcopy $(HEX_EEPROM_FLAGS) -O ihex $< $@ || exit 0 + +%.lss: $(TARGET) + avr-objdump -h -S $< > $@ + +size: ${TARGET} + @echo + @avr-size -C --mcu=${MCU} ${TARGET} + +## Clean target +.PHONY: clean +clean: + -rm -rf $(OBJECTS) RoboMI.elf dep/* RoboMI.hex RoboMI.eep + +## Other dependencies +-include $(shell mkdir dep 2>/dev/null) $(wildcard dep/*) + diff --git a/default/dep/RoboMI.o.d b/default/dep/RoboMI.o.d new file mode 100644 index 0000000..e69de29 diff --git a/robomi.aws b/robomi.aws new file mode 100644 index 0000000..34656af --- /dev/null +++ b/robomi.aws @@ -0,0 +1 @@ +