- •А.В. Шарапов
- •Часть 1. Микроконтроллеры мк51
- •Предисловие
- •1 Принципы построения цифровых устройств управления
- •2 Общая характеристика микроконтроллеров семейства мк51
- •3 Программная модель и система команд мк51 ( лабораторная работа №1)
- •Программная модель микроконтроллера мк51
- •Система команд микроконтроллера
- •Команды микроконтроллера семейства мк51
- •Команды, влияющие на флаги результата
- •Запись программы на языке ассемблера и ее трансляция
- •Загрузка программы в эмулятор и управление его работой
- •Программа работы
- •Контрольные вопросы
- •Содержание отчета
- •4 Таймеры и система прерываний mк51 (лабораторная работа №2)
- •Таймеры/счетчики событий mcs-51
- •Система прерываний mк51
- •Программа работы
- •Контрольные вопросы
- •Содержание отчета
- •Машинные коды команд mк51
- •5 Упражнения по решению задач
- •6 Примеры программ обработки данных
- •7 Последовательный порт мк51
- •8 Организация линий портов мк51. Подключение внешних устройств
- •9 Направление развития элементной базы 8-разрядных микроконтроллеров Отличительные признаки современной элементной базы
- •Направления развития 8-разрядных мк
- •Модульный принцип построения
- •Резидентная память мк
- •Таймеры и процессоры событий
- •Сторожевой таймер
- •Контроллеры последовательного ввода/вывода
- •Минимизация потребления энергии в системах с мк
- •10 Микроконтроллеры семейства ат89 фирмы Atmel
- •Микроконтроллер at89c4051
- •Микроконтроллер at89s51
- •11 Примеры вопросов компьютерной контрольной работы
- •Литература
- •Часть 2. Микроконтроллеры avr
- •Предисловие
- •1 Общая характеристика микроконтроллеров avr, программная модель и система команд
- •2 Директивы ассемблера
- •Include — Вложить другой файл
- •Форматы представления чисел
- •3 Программный пакет avrStudio
- •4 Микроконтроллер aTtiny15l(лабораторная работа №3)
- •Таймеры aTtiny15l
- •Энергонезависимая память данных еeprom
- •Аналоговый компаратор
- •Аналого-цифровой преобразователь
- •Программа работы
- •Контрольные вопросы
- •Содержание отчета
- •Перечень команд микроконтроллера aTtiny15l
- •5 Микроконтроллер aTmega8 (лабораторная работа № 4)
- •Порты ввода-вывода
- •Регистры таймера т1
- •Режимы работы таймера т1
- •Нормальный режим работы (Normal)
- •Режим сброса таймера при совпадении (стс)
- •Режим быстрой шим (Fast pwm)
- •Режим шим с фазовой коррекцией
- •Режим шим с фазовой и частотной коррекцией
- •Прерывания от таймеров /счетчиков
- •Программа работы
- •Контрольные вопросы
- •Содержание отчета
- •6 Средства разработки программы на языке си, компиляторы и симуляторы
- •7 Язык си для микроконтроллеров
- •Структура программы на языке Си
- •Пункт 4. Объявление переменных
- •8 Загрузка программы в микроконтроллер
- •9 Моделирование работы микроконтроллера avrс помощью симулятораvmlab (лабораторная работа №5)
- •Программа работы
- •Содержание отчета
- •10 Моделирование работы микроконтроллера avr с помощью симулятора proteus vsm
- •11 Измеритель частоты сети
- •Обоснование алгоритма решения задачи
- •Разработка прикладной программы
- •Моделирование работы устройства с помощью vmlab
- •Моделирование работы устройства с помощью симулятора
- •Литература
Структура программы на языке Си
Программа на Си имеет определенную структуру:
1) заголовок;
2) включение необходимых внешних файлов;
3) ваши определения для удобства работы;
4) объявление глобальных переменных (глобальные переменные объявляются вне какой-либо функции, т.е. не после фигурной скобки {, доступны в любом месте программы, значит можно читать их значения и присваивать им значения там, где требуется);
5) описание функций-обработчиков прерываний;
6) описание других функций, используемых в программе;
7) функция main (это единственный обязательный пункт).
Функция имеет { "тело" } в фигурных скобках. Тело – это код на Си, определяющий то, что делает функция. Знак ; после функции не ставится.
Программа на Си начинает работу с функции main(), по необходимости из main() вызываются другие функции программы, по завершении работы функции программа возвращается в main() в то место, откуда функция была вызвана.
main(){ ... какой то код программы ...
вызов функции_1; //программа перейдет в функцию_1
строка программы; // будет выполняться после возврата ... какой то код программы ...
}
Функции могут вызываться не только из main(), но и из других функций. Кроме того, описанный выше ход программы может нарушаться прерываниями.
Приведем пример программы на Си с описанной выше структурой (текст в рамке). По мере надобности программа будет разрываться обычным текстом, а затем продолжаться.
|
|
|
|
/* Пункт 1. Заголовок программы Он оформляется как комментарий, и обычно содержит информацию: - о названии, назначении, версии и авторе программы; - краткое описание алгоритма программы; - пояснения о назначении выводов МК; - другие сведения, которые вы считает полезным указать. */ // комментарий после двух косых черт пишут в одну строку!
// Пункт 2. Включение внешних файлов #include <mega16.h> /* перед компиляцией, препроцессор компилятора вставит вместо этой строчки содержимое (текст) заголовочного файла mega16.h - этот файл содержит перечень регистров, имеющихся в МК ATmega16, и соответствие их названий их физическим адресам в МК. Посмотрите его содержание, вызвав CVAVR\inc\mega16.h */ //delay functions #include <delay.h> /* перед компиляцией, препроцессор компилятора вставит вместо этой строчки текст "хидера" delay.h - этот файл содержит функции для создания пауз в программе. Теперь чтобы сделать паузу вам нужно лишь написать: delay_us(N); // сделать паузу N (число) мкс delay_ms(x); // сделать паузу x мс x - может быть переменная или число от 0 до 65535 (тип unsigned int), например, delay_ms(peremennaya)*/
// Пункт 3. Определения пользователя // AD7896 control signals PORTB bit allocation #define ADC_BUSY PINB.0 #define NCONVST PORTB.1 /* после этих двух строк, перед компиляцией, препроцессор компилятора заменит в тексте программы ADC_BUSY на PINB.0 и NCONVST на PORTB.1. Таким образом, вместо того, чтобы помнить, что вывод занятости AD7896 подключен к ножке PB0, вы можете проверять значение осмысленного понятия ADC_BUSY - "АЦП занят", а вместо управления абстрактной ножкой PB1 (через PORTB.1) можете управлять "НьюКонвекшнСтат" - NCONVST - "стартовать новое АЦ преобразование" #define – Это удобно, но вовсе не обязательно. */ |
|
|
|
|