Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
1. Создали программу, выполняющую функции согласно варианту 6 задания:
«Короткая змейка» Поочередно зажигаются индикаторы PA.0 -> PA.1 ->... -> PA.7 -> PB.7 -> PB.0 -> PC.0 ->... -> PD.0. Длина змейки = 8, т. е. всегда активны не более 8 LED индикаторов.
Алгоритм программы:
В регистрах направления данных утановить бит на выход
Регистр порта А установить в состояние 0хFF
Регистры остальных портов сбросить
Цикл пока не завершится программа
Цикл по counter от 0 до 8, шаг 1
Погасить бит counter у порта А
Установить бит (7-counter) у порта B в состояние 0xFF
Задержка в 1000 мс
Все цикл по counter
Цикл по counter от 0 до 8, шаг 1
Погасить бит (7-counter) у порта B
Установить бит counter у порта C в состояние 0xFF
Задержка в 1000 мс
Все цикл по counter
Цикл по counter от 0 до 8, шаг 1
Погасить бит counter у порта C
Установить бит (7-counter) у порта D в состояние 0xFF
Задержка в 1000 мс
Все цикл по counter
Цикл по counter от 7 до 0, шаг -1
Погасить бит counter у порта D
Задержка в 1000 мс
Все цикл по counter
Конец цикла пока
Текст программы:
#include <avr\io.h>
#include <util\delay.h>
char counter;
void wait() // delay in 100 ms
{
_delay_ms(1000);
}
int main()
{
// all ports = out
DDRA = 0xFF; // set direction to be output
DDRB = 0xFF; // set direction to be output
DDRC = 0xFF; // set direction to be output
DDRD = 0xFF; // set direction to be output
//all state ports = 0
PORTA = 0xFF; // turn OFF the PORTA leds
PORTB = 0x00; // turn OFF the PORTB leds
PORTC = 0x00; // turn OFF the PORTC leds
PORTD = 0x00; // turn OFF the PORTD leds
while (1)
{
wait();
for (counter=0; counter<8; counter++)
{
PORTA &= ~(1 << counter);
PORTB |= (1 << (7-counter));
wait();
}// end for
for (counter=0; counter<8; counter++)
{
PORTB &= ~(1 << (7-counter));
PORTC |= (1 << counter);
wait();
}// end for
for (counter=0; counter<8; counter++)
{
PORTC &= ~(1 << counter);
PORTD |= (1 << (7-counter));
wait();
}// end for
for (counter=7; counter>-1; counter--)
{
PORTD &= ~(1 << counter);
wait();
}// end for
}//end while_1
} // end main
2. Создали проект Lab2_N_6 в каталоге LAB2\N_6. Установили свойства проекта:
Включили в проект файл программы Led_mps_2.с.
3. Выполнили компиляцию проекта и получили следующий отчет компилятора:
Build started 6.10.2004 at 01:16:00
avr-gcc -mmcu=atmega16 -Wall -gdwarf-2 -std=gnu99 -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT main_Led_Curtain.o -MF dep/main_Led_Curtain.o.d -c../main_Led_Curtain.c
avr-gcc -mmcu=atmega16 -Wl,-Map=Lab2_N_6.map main_Led_Curtain.o -o Lab2_N_6.elf
avr-objcopy -O ihex -R.eeprom -R.fuse -R.lock -R.signature Lab2_N_6.elf Lab2_N_6.hex
avr-objcopy -j.eeprom --set-section-flags=.eeprom="alloc,load" --change-section-lma.eeprom=0 --no-change-warnings -O ihex Lab2_N_6.elf Lab2_N_6.eep || exit 0
avr-objdump -h -S Lab2_N_6.elf > Lab2_N_6.lss
ђҐ¦Ё ўлў®¤ Є® ¤ нЄа (ECHO) ®вЄ«озҐ.
AVR Memory Usage
----------------
Device: atmega16
Program: 482 bytes (2.9% Full)
(.text +.data +.bootloader)
Data: 1 bytes (0.1% Full)
(.data +.bss +.noinit)
Build succeeded with 0 Warnings...
Сгенерированный системой “Makefile”:
###############################################################################
# Makefile for the project Lab2_N_6
###############################################################################
## General Flags
PROJECT = Lab2_N_6
MCU = atmega16
TARGET = Lab2_N_6.elf
CC = avr-gcc
CPP = avr-g++
## 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 -std=gnu99 -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
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 += -Wl,-Map=Lab2_N_6.map
## Intel Hex file production flags
HEX_FLASH_FLAGS = -R.eeprom -R.fuse -R.lock -R.signature
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
## Objects that must be built in order to link
OBJECTS = main_Led_Curtain.o
## Objects explicitly added by the user
LINKONLYOBJECTS =
## Build
all: $(TARGET) Lab2_N_6.hex Lab2_N_6.eep Lab2_N_6.lss size
## Compile
main_Led_Curtain.o:../main_Led_Curtain.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) Lab2_N_6.elf dep/* Lab2_N_6.hex Lab2_N_6.eep Lab2_N_6.lss Lab2_N_6.map
## Other dependencies
-include $(shell mkdir dep 2>NUL) $(wildcard dep/*)
4. Провели коммутацию портов МК в соответствии с требованиями программы. Запустили и отладили программу на средствах стенда. Программа работает корректно.
5. Провели отладку ПО с использованием симулятора.
Симулирование программы идет значительно медленнее реальной скорости работы программы на микроконтроллере, поэтому временные задержки на время симуляции были сокращены.
Дата публикования: 2015-10-09; Прочитано: 175 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!