Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Ход выполнения л.р



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 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.011 с)...