- •Ответы по дисциплине мпт (2015 г.)
- •1. Основные понятия и определения микропроцессорной техники: микропроцессор, микропроцессорная система, микрокомпьютер, контроллер, микроконтроллер. Принципы построения микропроцессорных систем.
- •2. Архитектура микропроцессора: архитектура со сложной системой команд (cisc-процессоры), архитектура с упрощенной системой команд (risc-процессоры), принстонская и гарвардская архитектуры.
- •3. Структура микропроцессорной системы и основные режимы ее работы – выполнение основной программы, обслуживание прерываний, прямой доступ к памяти.
- •4. Классификация микропроцессоров: универсальные и специализированные, цифровые сигнальные процессоры и микроконтроллеры
- •5. Классификация и структура микроконтроллеров (мк). Процессорное ядро мк, его основные характеристики.
- •6. Типы памяти микроконтроллеров: память программ, память данных, регистры.
- •7. Однокристальные микроконтроллеры семейства pic: состав и общая характеристика. Микроконтроллер pic16f84a: основные параметры, внутренняя структура, назначение выводов.
- •8. Микроконтроллер pic16f84a: организация памяти программ и данных, портов ввода/вывода.
- •9. Применение языка Си для разработки программ микроконтроллерных систем. Интегрированная среда mikroC pro для pic-микроконтроллеров.
- •10. Представление информации в языке Си: имена, типы данных, переменные и константы, массивы и строки.
- •11. Арифметические операции в языке mikroC. Виды операций, примеры их использования в программах.
- •12. Операции отношения и логические в языке mikroC. Виды операций, примеры их использования в программах.
- •13. Поразрядные операции в языке mikroC. Виды операций, примеры их использования в программах.
- •14. Операторы выбора if и switch в языке mikroC. Выполняемые функции, примеры их использования в программах.
- •15. Операторы цикла языка mikroC: for, while, do … while. Выполняемые функции, примеры использования в программах.
- •16. Операторы перехода языка mikroC: break, continue, goto. Выполняемые функции, промеры использования в программах.
- •17. Функции языка mikroC: определение и прототипы.
- •18. Управление отдельными разрядами регистров pic-микроконтроллеров в языке mikroC. Встроенные функции формирования временных задержек компилятора mikroC pro for pic.
- •19. Программирование на mikroC типовых процедур управления для pic-микроконтроллеров: управление светодиодом, формирование периодических сигналов, опрос контактов переключателя.
- •20. Средства аналогового ввода/вывода микроконтроллеров: назначение, принцип построения аналого-цифрового преобразователя (ацп). Модуль ацп в pic-микроконтроллерах.
- •21. Микроконтроллеры семейства avr фирмы Atmel: общая характеристика, внутренняя структура
- •22. Интегрированная среда разработки для avr-микроконтроллеров mikroC pro for avr. Программирование параллельного ввода/вывода данных в avr-микроконтроллерах
- •23. Программирование на mikroC для avr-микроконтроллеров процедур управления отдельными разрядами портов, опроса контактов переключателей
- •24. Интерфейсы микропроцессорных систем, классификация и принципы построения. Интерфейсы параллельные и последовательные, синхронные и асинхронные
- •25. Последовательный асинхронный интерфейс rs-232. Назначение, форматы передачи данных, основные технические характеристики
- •26. Последовательные асинхронные интерфейсы rs-422 и rs-485. Назначение, форматы передачи данных, основные технические характеристики
- •27. Последовательный синхронный интерфейс spi. Назначение, форматы передачи данных, основные технические характеристики
- •28. Интерфейсная шина i2c. Назначение, форматы передачи данных, основные технические характеристики
- •29. Интерфейсная шина can. Назначение, форматы передачи данных, основные технические характеристики
- •30. Общие принципы и основные этапы разработки микроконтроллерных систем. Разработка и отладка аппаратных средств и программного обеспечения. Методы совместной отладки аппаратных и программных средств
18. Управление отдельными разрядами регистров pic-микроконтроллеров в языке mikroC. Встроенные функции формирования временных задержек компилятора mikroC pro for pic.
В программах для PIC-микроконтроллеров часто требуется управлять отдельными линиями портов МК, а также опрашивать их состояния.
Язык mikroC позволяет иметь доступ к отдельными битами регистров специальных функций. Это можно выполнить следующими способами.
1. Указать имя регистра, а затем после знака точки как разделителя идентификатор номера бита в регистре в виде: B0, B1, B2, B3, B4, B5, B6, B7, где В0 – младший бит.
Например:
// для порта С, настроенного на вывод
PORTC.B0 = 1; // вывести лог. 1 на 0-ю линию порта С
PORTC.B7 = 0; // вывести лог. 0 на 7-ю линию порта С
// для регистра управления прерываниями INTCON
INTCON.B7 = 1; // Установить в 1 бит GIE разрешения глобальных
// прерываний (7-й бит в регистре INTCON)
2. Указать имя бита в регистре специальных функций, а затем идентификатор вида: _bit.
Например:
GIE_bit = 1; // установить в 1 бит GIE в регистре INTCON
В языке mikroC биты линий портов PIC-микроконтроллеров обозначаются:
RA0, RA1, RA3 и т.п. порта А;
RB0, … , RB7 порта В;
RC0, … , RC7 порта С.
RD0, … , RD7 порта D.
// для порта С, настроенного на вывод
RC0_bit = 1; // вывести лог. 1 на 0-ю линию порта С
RC7_bit = 0; // вывести лог. 0 на 7-ю линию порта С
В управляющих программах для микроконтроллеров часто возникает необходимость в формировании временных задержек. Компилятор mikroC PRO for PIC имеет так называемые встроенные функции задержки, которые формируют временные задержки программным методом. Наибольшее применение находят три функции:
1) Delay_us(константа), где константа определяет величину задержки в микросекундах (константа – это целое число типа unsigned long в пределах от 1 до 4294967295);
2) Delay_ms(константа), где константа определяет величину задержки в миллисекундах ( константа – это целое число типа unsigned long в пределах от 1 до 4294967295);
3) Vdelay_ms(переменная), где значение переменной определяет величину задержки в миллисекундах (переменная должна быть типа unsigned int, а величина ее в пределах от 1 до 65535).
Примеры:
Delay_us(100); // задержка на время 100 мкс
Delay_ms(2000); // задержка на время 2000 мс = 2 с
unsigned int time = 500;
Vdelay_ms(time); // задержка на время 500 мс
19. Программирование на mikroC типовых процедур управления для pic-микроконтроллеров: управление светодиодом, формирование периодических сигналов, опрос контактов переключателя.
Программа управления светодиодом
Рассмотрим простейшее микроконтроллерное устройство (МКУ), в котором МК типа PIC16F877 управляет светодиодом, присоединенным к линии (разряду) RC0 порта C. Принципиальная схема такого МКУ (при моделировании в среде Proteus) может иметь вид, приведенный на рисунке 1. При высоком уровне (логическая 1) на выводе порта RC0 светодиод горит, а при низком уровне (логический 0) на выводе порта RC0 светодиод не горит.
Рассмотрим программу, которая производит переключение светодиода через интервал 0,5 с, то есть с частотой 1 Гц.
/****************************************************************
led.c – программа управления светодиодом
****************************************************************/
void main( )
{
TRISC = 0; // настроить все линии порта С на вывод
PORTC = 0; // погасить светодиод
while(1) // бесконечный цикл вывода
{
PORTC.B0 = 1; // зажечь светодиод D1
Delay_ms(500); // задержка на 500 мс
PORTC.B0 = 0; // погасить светодиод D1
Delay_ms(500); // задержка на 500 мс
}
}
Рисунок 1 - Принципиальная схема МКУ для управления светодиодом
Программа формирования меандра
В различных управляющих и измерительных устройствах широко применяются периодические последовательности прямоугольных импульсов, у которых длительность импульса tи равна паузе tп :
tи = tп = T / 2,
где Т – период следования импульсов, а ƒ = 1 / Т – частота следования.
Последовательность прямоугольных импульсов с такими параметрами часто называют меандром. Меандр легко сформировать программным методом с использованием функций временной задержки.
Допустим, что требуется разработать МКУ, которое выдает на линию RC1 порта C микроконтроллера меандр с частотой 10 Гц (период 100 мс). Схема МКУ (при моделировании ее в среде Proteus) приведена на рисунке 2.
Текст программы генерации меандра на языке mikroC следующий.
/**************************************************************
meandr.c – программа генерации меандра частоты 10 Гц
**************************************************************/
void main( )
{
TRISC = 0;
while(1)
{
PORTC.B1 = 1;
Delay_ms(50);
PORTC.B1 = 0;
Delay_ms(50);
}
}
Рисунок 2 – Схема МКУ для генерации меандра
Программирование процедуры опроса переключателя
Рассмотрим теперь, как на языке mikroC выполняется опрос состояния контактов переключателя (кнопки). На рисунке 3 приведена схема МКУ (при моделировании ее в Proteus), в которой управление светодиодом D1 производится от переключателя (кнопки) SB1 по следующему алгоритму. Когда контакт SB1 замкнут, светодиод D1 горит, когда контакт SB1 разомкнут, D1 не горит. Рассмотрим два варианта программы управления светодиодом D1 от кнопки SB1. Для упрощения текста программы будем считать, что у кнопки SB1 нет дребезга контактов.
Сначала рассмотрим программу, в которой для опроса состояния контактов кнопки используются циклы while( ).
/****************************************************************
led_but_1.c – первая программа управления светодиодом от кнопки
****************************************************************/
void main( )
{
TRISB = 0xFF; // настроить все линии порта В на ввод
TRISC = 0; // настроить все линии порта С на вывод
PORTC = 0; // погасить светодиод
while( 1 ) // бесконечный цикл повторения
{
while(PORTB.B1 == 1); // ожидание замыкания контакта SB1
PORTC.B0 = 1; // зажечь светодиод
while(PORTB.B1 == 0); // ожидание размыкания контакта SB1
PORTC.B0 = 0; // погасить светодиод
}
}
Рисунок 3 – Принципиальная схема МКУ с управлением
светодиодом от кнопки
Теперь рассмотрим программу, в которой для опроса состояния контактов кнопки SB1 используется оператор выбора if … else.
/*************************************************************
led_but_2.c - вторая программа управления светодиодом от кнопки
************************************************************* */
void main( )
{
TRISB = 0xFF; // настроить все линии порта В на ввод
TRISC = 0; // настроить все линии порта С на вывод
PORTC = 0; // погасить светодиод
while(1) // бесконечный цикл опроса
{
if(PORTB.B1 ==0) // если контакт кнопки SB1 замкнут, то
PORTC.B0 = 1; // зажечь светодиод
else // иначе
PORTC.B0 = 0; // погасить светодиод
}
}
