close

Вход

Забыли?

вход по аккаунту

?

lab1 (3)

код для вставкиСкачать
Министерство образования и науки РФ
Тверской государственный технический университет
Кафедра электронных вычислительных машин
Отчет по лабораторной работе № 3
Программирование микроконтроллеров с помощью языка С. Простые программы взаимодействия с пользователем. Пошаговая отладка программ. Симулятор. JTAG отладка
Вариант №11
Выполнил: студент группы
ВМКСС-1004
Лобачев А. М.
Принял: Гаврилов И. Ю.
Тверь, 2013
1 Цель:
Целью данной работы является ознакомление с основами программирования современных микроконтроллеров на языке "С", организацией базовых средств ввода вывода (портов) микроконтроллеров, а также особенностями создания, отладки программ и созданием загружаемых в микроконтроллер файлов.
2 Задачи:
1. 2. 2.2. Ознакомиться с базовой структурой микроконтроллера, организацией памяти и портов;
2.3. Научиться конфигурировать порты ввода - вывода МК для выполнения заданных функций.
2.4. Ознакомиться с назначением make файла;
2.5. научиться проводить отладку проекта в режиме;
2.6. получить практические навыки программирования на основе предложенных заданий по управлению светодиодными индикаторами и считыванию значений входных портов.
3 Задание на лабораторную работу:
3. 3.2. Изучить и разобраться в теоретической части лабораторной работы 3.3. Создать программу, выполняющую функции согласно варианту задания 3.4. Создать проект. Включить в проект файл программы или создать новый.
3.5. Провести компиляцию и сборку проекта. Разобраться в созданном make файле и свойствах проекта.
3.6. Загрузить в контроллер прошивку программы и убедиться в корректности работы программы. При необходимости провести исправление алгоритма и программы.
3.7. Запустить симуляцию проекта, убедиться в корректности выполнения программы. Отследить поведение основных переменных проекта и портов контроллера.
3.8. Оформить отчет.
3.9. Задание на выполнение (Вариант 1)
Поочередное мигание двух LED индикаторов порта B.0 и B.1 с периодом 1 с. Начало работы определяется моментом нажатия на кнопку порта С.1.
4 Выполнение работы
4. 4.1. Исходные текст программы
#define F_CPU 1000000UL
#include <math.h> #include <avr/io.h>
#include <avr/iom16.h>
#include <util/delay.h>
int main(void)
{
DDRB = 0xFF;
DDRC = 0x00;
int l=0;
int k=0;
while(1)
{
if(PINC == 0b00000010)
{
l=1;
}
if(PINC == 0b00000001)
{
l=0;
PORTB = 0b00000000;
}
if(l==1)
{
PORTB = 0b00000001;
_delay_ms(1000);
PORTB = 0b00000010;
_delay_ms(1000);
}
}
}
4.1 Результат работы микроконтроллера
4.2. Созданный системой "Makefile"
################################################################################
# Automatically-generated file. Do not edit!
################################################################################
SHELL := cmd.exe
RM := rm -rf
USER_OBJS :=
LIBS := PROJ := O_SRCS := C_SRCS := S_SRCS := S_UPPER_SRCS := OBJ_SRCS := ASM_SRCS := PREPROCESSING_SRCS := OBJS := OBJS_AS_ARGS := C_DEPS := C_DEPS_AS_ARGS := EXECUTABLES := OUTPUT_FILE_PATH :=
OUTPUT_FILE_PATH_AS_ARGS :=
AVR_APP_PATH :=$$$AVR_APP_PATH$$$
QUOTE := "
ADDITIONAL_DEPENDENCIES:=
OUTPUT_FILE_DEP:=
# Every subdirectory with source files must be described here
SUBDIRS := # Add inputs and outputs from these tool invocations to the build variables C_SRCS += \
../lab1.cpp
PREPROCESSING_SRCS += ASM_SRCS += OBJS += \
lab1.o
OBJS_AS_ARGS += \
lab1.o
C_DEPS += \
lab1.d
C_DEPS_AS_ARGS += \
lab1.d
OUTPUT_FILE_PATH +=lab1.elf
OUTPUT_FILE_PATH_AS_ARGS +=lab1.elf
ADDITIONAL_DEPENDENCIES:=
OUTPUT_FILE_DEP:= ./makedep.mk
# AVR32/GNU C Compiler
./%.o: .././%.cpp
@echo Building file: $<
@echo Invoking: AVR8/GNU C++ Compiler
$(QUOTE)C:\Program Files (x86)\Atmel\Atmel Studio 6.0\extensions\Atmel\AVRGCC\3.3.2.31\AVRToolchain\bin\avr-g++.exe$(QUOTE) -funsigned-char -funsigned-bitfields -O1 -fpack-struct -fshort-enums -g2 -Wall -c -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -mmcu=atmega16 -o"$@" "$<" @echo Finished building: $<
# AVR32/GNU Preprocessing Assembler
# AVR32/GNU Assembler
ifneq ($(MAKECMDGOALS),clean)
ifneq ($(strip $(C_DEPS)),)
-include $(C_DEPS)
endif
endif
# Add inputs and outputs from these tool invocations to the build variables # All Target
all: $(OUTPUT_FILE_PATH) $(ADDITIONAL_DEPENDENCIES)
$(OUTPUT_FILE_PATH): $(OBJS) $(USER_OBJS) $(OUTPUT_FILE_DEP)
@echo Building target: $@
@echo Invoking: AVR8/GNU C++ Linker
$(QUOTE)C:\Program Files (x86)\Atmel\Atmel Studio 6.0\extensions\Atmel\AVRGCC\3.3.2.31\AVRToolchain\bin\avr-g++.exe$(QUOTE) -o$(OUTPUT_FILE_PATH_AS_ARGS) $(OBJS_AS_ARGS) $(USER_OBJS) $(LIBS) -Wl,-Map="lab1.map" -Wl,--start-group -Wl,-lm -Wl,--end-group -mmcu=atmega16 @echo Finished building target: $@
"C:\Program Files (x86)\Atmel\Atmel Studio 6.0\extensions\Atmel\AVRGCC\3.3.2.31\AVRToolchain\bin\avr-objcopy.exe" -O ihex -R .eeprom -R .fuse -R .lock -R .signature "lab1.elf" "lab1.hex"
"C:\Program Files (x86)\Atmel\Atmel Studio 6.0\extensions\Atmel\AVRGCC\3.3.2.31\AVRToolchain\bin\avr-objcopy.exe" -j .eeprom --set-section-flags=.eeprom=alloc,load --change-section-lma .eeprom=0 --no-change-warnings -O ihex "lab1.elf" "lab1.eep" || exit 0
"C:\Program Files (x86)\Atmel\Atmel Studio 6.0\extensions\Atmel\AVRGCC\3.3.2.31\AVRToolchain\bin\avr-objdump.exe" -h -S "lab1.elf" > "lab1.lss"
"C:\Program Files (x86)\Atmel\Atmel Studio 6.0\extensions\Atmel\AVRGCC\3.3.2.31\AVRToolchain\bin\avr-size.exe" -C --mcu=atmega16 "lab1.elf"
# Other Targets
clean:
-$(RM) $(OBJS_AS_ARGS)$(C_DEPS_AS_ARGS) $(EXECUTABLES) rm -rf "lab1.hex" "lab1.lss" "lab1.eep" "lab1.map"
4.2 Отчет построения проекта
------ Build started: Project: lab1, Configuration: Debug AVR ------
Build started.
Project "lab1.cppproj" (default targets):
Target "PreBuildEvent" skipped, due to false condition; ('$(PreBuildEvent)'!='') was evaluated as (''!='').
Target "CoreBuild" in file "C:\Program Files (x86)\Atmel\Atmel Studio 6.0\Vs\Compiler.targets" from project "F:\4 курс\МПС\лабораторные\лаб3\lab1\lab1\lab1.cppproj" (target "Build" depends on it):
Task "RunCompilerTask"
C:\Program Files (x86)\Atmel\Atmel Studio 6.0\make\make.exe all lab1.cpp
Invoking: AVR8/GNU C++ Compiler
"C:\Program Files (x86)\Atmel\Atmel Studio 6.0\extensions\Atmel\AVRGCC\3.3.2.31\AVRToolchain\bin\avr-g++.exe" -funsigned-char -funsigned-bitfields -O1 -fpack-struct -fshort-enums -g2 -Wall -c -MD -MP -MF "lab1.d" -MT"lab1.d" -mmcu=atmega16 -o"lab1.o" ".././lab1.cpp" .././lab1.cpp: In function 'int main()':
F:\4 курс\МПС\лабораторные\лаб3\lab1\lab1\lab1.cpp(14,6): unused variable 'k'
Finished building: .././lab1.cpp
Building target: lab1.elf
Invoking: AVR8/GNU C++ Linker
"C:\Program Files (x86)\Atmel\Atmel Studio 6.0\extensions\Atmel\AVRGCC\3.3.2.31\AVRToolchain\bin\avr-g++.exe" -o lab1.elf lab1.o -Wl,-Map="lab1.map" -Wl,--start-group -Wl,-lm -Wl,--end-group -mmcu=atmega16 Finished building target: lab1.elf
"C:\Program Files (x86)\Atmel\Atmel Studio 6.0\extensions\Atmel\AVRGCC\3.3.2.31\AVRToolchain\bin\avr-objcopy.exe" -O ihex -R .eeprom -R .fuse -R .lock -R .signature "lab1.elf" "lab1.hex"
"C:\Program Files (x86)\Atmel\Atmel Studio 6.0\extensions\Atmel\AVRGCC\3.3.2.31\AVRToolchain\bin\avr-objcopy.exe" -j .eeprom --set-section-flags=.eeprom=alloc,load --change-section-lma .eeprom=0 --no-change-warnings -O ihex "lab1.elf" "lab1.eep" || exit 0
"C:\Program Files (x86)\Atmel\Atmel Studio 6.0\extensions\Atmel\AVRGCC\3.3.2.31\AVRToolchain\bin\avr-objdump.exe" -h -S "lab1.elf" > "lab1.lss"
"C:\Program Files (x86)\Atmel\Atmel Studio 6.0\extensions\Atmel\AVRGCC\3.3.2.31\AVRToolchain\bin\avr-size.exe" -C --mcu=atmega16 "lab1.elf"
AVR Memory Usage
----------------
Device: atmega16
Program: 206 bytes (1.3% Full)
(.text + .data + .bootloader)
Data: 0 bytes (0.0% Full)
(.data + .bss + .noinit)
Done executing task "RunCompilerTask".
Done building target "CoreBuild" in project "lab1.cppproj".
Target "PostBuildEvent" skipped, due to false condition; ('$(PostBuildEvent)' != '') was evaluated as ('' != '').
Target "Build" in file "C:\Program Files (x86)\Atmel\Atmel Studio 6.0\Vs\Avr.common.targets" from project "F:\4 курс\МПС\лабораторные\лаб3\lab1\lab1\lab1.cppproj" (entry point):
Done building target "Build" in project "lab1.cppproj".
Done building project "lab1.cppproj".
Build succeeded.
========== Build: 1 succeeded or up-to-date, 0 failed, 0 skipped ==========
5 Ответы на контрольные вопросы
1. Особенности архитектуры микроконтроллера AtMega16?
AVR-архитектура, на основе которой построены микроконтроллеры, объединяет мощный гарвардский 8 битный RISC-процессор с раздельным доступом к памяти программ и данных, 32 регистра общего назначения, каждый из которых может работать как регистр- аккумулятор, и развитую систему команд фиксированной 16-бит длины. Большинство команд выполняются за один машинный такт с одновременным исполнением текущей и выборкой следующей команды, что обеспечивает производительность до 1 MIPS на каждый МГц тактовой частоты.
32 регистра общего назначения образуют регистровый файл быстрого доступа, где каждый регистр напрямую связан с АЛУ. За один такт из регистрового файла выбираются два операнда, выполняется операция, и результат возвращается в регистровый файл. АЛУ поддерживает арифметические и логические операции с регистрами, между регистром и константой или непосредственно с регистром.
Регистровый файл также доступен как часть памяти данных. 6 из 32-х регистров могут использоваться как три 16-разрядных регистра-указателя для косвенной адресации. Старшие микроконтроллеры семейства AVR имеют в составе АЛУ аппаратный умножитель.
2. В чем особенность организации портов МК?
В данном микроконтроллере, как и в большинстве остальных, внешние выводы могут выполнять несколько функций, что необходимо для увеличения функциональности МК при ограниченном количестве физических выводов. Обычно это либо цифровой ввод - вывод, либо альтернативная функция (или функции) периферийных устройств, например входы АЦП, последовательный порт, выходы ШИМ таймеров и т.д. 3.Зачем используется Pull-Up резистор?
pull-up - резистор используется в схемах рядом со входными контактами логических компонентов, которым важен только факт: подаётся ноль вольт (логический ноль) или не ноль (логическая единица).
4.Можно ли записать информацию в PINB?
Нет. Данные регистр доступен только для чтения.
5.Какими способами можно обратиться к PORTA?
PORTA=0b00000001
PORTA = PORTA | 0x01; //Установка бита 0 порта PORTA Использование побитового сдвига
PORTA = (1 << 5); //Установка значения порта PORTA в 00100000b (бит5 = 1, остальные = 0)
PORTA &= ~(1 << 5); //Сброс только бита 5 порта PORTA
использование макроса _BV(n) PORTA |= _BV(5); //Установка только бита 5 порта PORTA
6.Как прочитать реальное содержимое входного порта?
PINxn - Регистр чтения состояния порта. Из этого регистра можно только читать. Этот регистр содержит информацию о логическом уровне на выводах МК и это не зависит от настроек порта.
7.Можно ли настроить отдельный бит порта B на ввод, а остальные на вывод?
Можно. Выводы портов, в достаточной степени, автономны, и их режим может устанавливаться независимо друг от друга.
9.Какие способы подключения кнопки и светодиода можно применять?
Подключение кнопки:
1) Подключение кнопки с активным "0" при нажатии.
2) Подключение кнопки с активной "1" при нажатии.
Подключение светодиода:
1) Подключение LED индикатора с включением "0"
2) Подключение LED индикатора с включением "1"
Выбор конкретной схемотехнической реализации зависит от конкретных электрических характеристик выводов порта (нагрузочная способность, входные токи и т.д.)
10.Можно ли на стенде отключить светодиодный индикатор PB5?
Светодиоды подключены напрямую к портам МК, поэтому физически отключить его нельзя. Можно только отключить порт B5.
10.Как подключены кнопки (push button) к выводам микроконтроллера? Можно ли изменить схему их подключения с помощью джамперов?
Кнопки напрямую подключены к портам микроконтроллера. С помошб джампера J13 можно изменить из схему подключения (с активным нулем или с активной единицей).
11.В чем особенность GCC компилятора?
"GNU Compiler Collection (обычно используется сокращение GCC) - набор компиляторов для различных языков программирования, разработанный в рамках проекта GNU. GCC является свободным программным обеспечением, распространяется фондом свободного программного обеспечения (FSF) на условиях GNU GPL и GNU LGPL и является ключевым компонентом GNU toolchain. Он используется как стандартный компилятор для свободных UNIX-подобных операционных систем.
Изначально названный GNU C Compiler поддерживал только язык Си. Позднее, GCC был расширен для компиляции исходных кодов на таких языках программирования как C++, Objective-C, Java, Фортран и Ada."
11.Для чего используется утилита "make"?
"make - утилита, автоматизирующая процесс преобразования файлов из одной формы в другую. Чаще всего это компиляция исходного кода в объектные файлы и последующая компоновка в исполняемые файлы или библиотеки.
12.Как описывается (чем управляется) поведение (работа) утилиты "make"?
Для описания выполняемых действий "make" используется текстовый файл "makefile". В данном файле по определенным правилам указываются Цели (задачи) и способы их достижения. Например, в качестве целей могут быть указаны следующие операции: компиляция исходных файлов, линковка, преобразование форматов, программирование (прошивка) контроллера, очистка проекта и т.д. Для достижения Цели обычно производится вызов дополнительных утилит (программ) с необходимыми параметрами, указанными в командной строке, например вызов компилятора GCC со списком файлов и параметров компиляции.
13.Можно ли написать и использовать собственный "Makefile"?
Можно написать и использовать собственный "Makefile".
14.Найдите в "Makefile" переменные, отвечающие за список файлов проекта.
OBJECTS (OBJS) - Переменная, отвечающая за список файлов проекта.
15.Найдите в "Makefile" переменная, отвечающая за флаги компиляции.
CFLAGS - переменная, отвечающая за флаги компиляции
16.Как можно обратиться к отдельному биту регистра, порта? Какой макрос для этого используется?
Для этого используется макрос PORTA |= _BV(5)
17.Для чего используется программный симулятор? Какие у него достоинства и недостатки?
Симулятор, встроенный в AVR Studio является программным симулятором МК устройств с архитектурой AVR. Он симулирует ядро МК, включая все команды, прерывания и большую часть средств ввода-вывода. AVR симулятор подключается в AVR Studio как отдельное целевое устройство, что позволяет проводить полноценную отладку программных средств (пошаговое исполнение, точки останова, наблюдаемые переменные и т.д.). Не все модули МК поддерживаются симулятором. Полностью поддерживаются следующие модули: •порты ввода - вывода
•все виды прерываний
•таймеры / счетчики
•последовательный интерфейс
•интерфейс SPI
•LCD контроллер (встроенный)
К достоинствам симулятора можно отнести возможность моделирования окружающей среды исследуемой системы, что позволяет производить работу в реальном масштабе времени с точки зрения наблюдателя, находящегося внутри исследуемой системы. Однако неполное моделирование периферийных модулей МК, сложность задания тестовых воздействий ограничивает использование симулятора, в основном, простыми задачами.
6 Выводы
В результате выполнение данной лабораторной работы были получены первые навыки практического использования средств разработки и моделирования систем на микроконтроллерах. В ходе лабораторной работы произошло ознакомление с основами программирования современных микроконтроллеров нка языке СИ, организацией базовых средств ввода-вывода (портов) микроконтроллеров, а также особенностями создания, отладки программ и созданием загружаемых в микроконтроллера файлов.
В результате выполнения данной лабораторной работы было произведено моделирование модели микроконтроллера AtMega16 с различной прошивкой, соответствующей заданию.
В результате анализа полученных на лабораторной работе результатов было установлено, что микроконтроллер под управлением созданной программы работает верно.
1
Документ
Категория
Рефераты
Просмотров
40
Размер файла
1 410 Кб
Теги
lab1
1/--страниц
Пожаловаться на содержимое документа