- •1. Операторы выбора языка c51: if и switch.
- •2. Операторы цикла языка с51: while, do…while, for.
- •3. Операторы перехода языка с51: break, continue, goto.
- •4. Программирование параллельным вводом/выводом в с51: операторы управления портами и отдельными разрядами портов. Примеры программ управления светодиодами и опроса контактов переключателей.
- •/* Программа управления светодиодом vd1 от кнопки sb1 */
- •5. Программирование таймеров микроконтроллеров mcs-51 на языке с51.
- •6. Программирование системы прерываний микроконтроллеров mcs-51 на языке с51.
- •7. Программирование последовательного ввода/вывода микроконтроллеров mcs-51 на языке с51.
- •8. Микроконтроллеры pic18: общая характеристика, особенности архитектуры и системы команд.
- •9. Язык с18 для pic-микроконтроллеров: структура программы, директивы препроцессора, ключевые слова.
- •10. Представление информации в языке с18: типы данных, переменные и константы.
- •11. Операции арифметические, поразрядные логические, логические и отношения в языке с18.
- •12. Операторы управления вычислительным процессом в языке с18.
- •13. Функции в языке с18: определение функции, прототип, библиотечные функции.
- •14. Функции формирования временных задержек в языке с18.
- •15. Программирование на языке с18 типовых функций управления и контроля: вывод информации в порт, управление отдельными разрядами портов, опрос переключателя.
- •16. Подключение жк-дисплея к pic-микроконтроллеру: структура жк-дисплея, функции управления дисплеем.
- •17. Аналого-цифровое преобразование в pic-микроконтроллерах: структура внутреннего ацп, функции управления ацп на языке с18.
- •18. Реализация широтно-импульсной модуляции в pic-микроконтроллерах: параметры шим, функции управления шим на языке с18.
- •Void ClosePwm1(void);
- •Void OpenPwm1(char period);
- •Void SetDcpwm1(unsigned int dutycycle);
- •19. Прерывания в pic18: источники прерываний, управляющие биты, программирование прерываний на языке с18.
- •20. Динамическое управление линейным дисплеем на семисегментных индикаторах в pic-микроконтроллерах.
- •21. Интерфейсы мпс: понятие и характеристики. Стандартные интерфейсы мпс.
- •22. Внешние интерфейсы мпс: основные параметры, последовательные и параллельные, синхронные и асинхронные, способы соединения устройств.
- •23. Интерфейс rs-232: назначение, основные технические характеристики, принципы передачи данных.
- •24. Интерфейс ирпс: назначение, основные технические характеристики, принципы передачи данных.
- •25. Интерфейсы rs-422 и rs-485: назначение, основные технические характеристики, принципы передачи данных.
- •26. Интерфейс spi: назначение, основные технические характеристики, принципы передачи данных.
- •27. Интерфейс i2c: назначение, основные технические характеристики, принципы передачи
- •28. Интерфейс can: общее описание и основные параметры, виды и форматы сообщений в can.
- •29. Интерфейс can: арбитраж, обнаружение и обработка ошибок, скорость передачи и длина сети.
4. Программирование параллельным вводом/выводом в с51: операторы управления портами и отдельными разрядами портов. Примеры программ управления светодиодами и опроса контактов переключателей.
Микроконтроллеры семейства MCS-51 имеют несколько портов ввода/вывода, позволяющих получать информацию от внешних устройств (ввод данных) или отправлять данные внешним устройствам (вывод данных). Стандартный МК 8051 имеет четыре 8-разрядных порта, которые нумеруются цифрами: порт 0, порт 1, порт 2 и порт 3. Все порты являются двунаправленными, то есть они могут использоваться как для ввода, так и для вывода.
Управление портами производится при помощи так называемых регистров специальных функций (РСФ). Каждый из четырех портов имеет свой РСФ, они именуются, соответственно, как Р0, Р1, Р2 и Р3.
В заголовочном файле reg51.h переменные Р0-Р3 объявляются с помощью ключевого слова sfr как регистры специальных функций.
Объявив имена портов как РСФ, мы можем их использовать для записи данных или чтения данных.
Например, мы можем послать какие-либо данные в порт Р1 следующим образом:
P1 = 0xF0; // записать 11110000 в порт 1
Операцию предварительной записи единиц в регистры-защелки порта часто называют настройкой порта на ввод или настройкой на режим чтения.
Таким образом, для чтения данных из порта Р1 нужно выполнить следующий код программы:
unsigned char port_data; // объявление однобайтной переменной
// для хранения введенных данных
P1 = 0xFF; // настроить порт 1 на ввод
port_data = P1; // чтение (ввод) из порта 1
По сигналу сброса RST в регистры-защелки всех портов МК 8051 автоматически записываются единицы, настраивающие их тем самым на режим ввода.
В языке С51 имеется возможность доступа к отдельным разрядам (битам) регистров специальных функций, в частности, к разрядам (линиям) портов Р0-Р3. Для этого используется ключевое слово sbit.
Например, для доступа к разряду 0 порта Р2 (линия Р2.0) можно создать битовую переменную с именем Р2_0 следующим образом:
sbit P2_0 = P2^0;
Здесь символ “^” означает доступ к разряду 0 порта Р2. В классическом Си этот символ обозначает поразрядную операцию Исключающее ИЛИ.
С использованием переменной Р2_0 мы можем записывать (выводить) данные на линию Р2.0 порта:
P2_0 = 1; // вывести 1 на линию Р2.0 порта Р2
P2_0 = 0; // вывести 0 на линию Р2.0 порта Р2
При чтении (вводе) с выводов порта (ножки микросхемы) необходимо предварительно объявить битовую переменную, в которой будут храниться введенные данные. Это объявление в С51 выполняется с использованием ключевого слова bit. Битовая переменная может принимать одно из двух значений: 0 или 1. Вот пример объявления битовых переменных:
bit my_bit;
bit bit0;
Для хранения битовых переменных используется внутренняя область памяти данных МК (ячейки памяти с адресами 20H – 2FH), обладающая свойством поразрядной адресации.
Таким образом, для чтения данных (вводе) с линии порта Р2.7 нужно выполнить следующий код программы:
sbit P2_7 = P2^7; // объявление переменной P2_7
bit bit2_7; // объявление переменной bit2_7
P2_7 = 1; // настроить линию Р2.7 на ввод
bit2_7 = P2_7; // чтение состояния линии порта Р2.7
Следует отметить, что переменные, объявленные с помощью ключевого слова sbit, могут быть только глобальными, т.е. их нельзя объявлять в теле функции, где они используются, в том числе и main( ).
/*программа переключения светодиода */
#include<reg51.h>
void delay_ms( unsigned int MS); // прототип функции задержки
sbit P2_0 = P2^0;
void main(void)
{
while( 1 )
{
P2_0 = 0; // зажечь светодиод
delay_ms( 1000 ); // задержка на 1000 мс = 1 с
P2_0 = 1; // погасить светодиод
delay_ms( 1000 );
}
}
void delay_ms( unsigned int MS) // функция задержки
{
unsigned int i, j;
for( i = 0; i < MS; i++)
for( j = 0; j < 123; j++);
}