Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Краткие теоретические сведенияЯзык программирования СИ51 удовлетворяет стандарту ANSI CИ и предназначен для получения компактных и быстродействующих программ для микроконтроллеров семейства MCS-51. Он учитывает особенности построения аппаратуры этих микросхем. Язык СИ51 обеспечивает гибкость программирования на широко известном языке CИ, при скорости работы и компактности, сравнимой с программами, написанными на языке программирования ассемблер. Программа на СИ51 должна начинаться с включения файла заголовка, в котором находится информация о портах вв/выв, специальных регистрах, управляющих битах и т.д., т.е. должны быть определены аппаратные ресурсы микроконтроллера и даны их аббревиатуры. Имя файла заголовка зависит от среды программирования, например, REG51.H – для среды KeilµVision; io51.h.- для компилятора СИ51 ICC8051; При написании программы для микроконтроллера всегда необходимо видеть перед глазами принципиальную схему устройства, для которого пишется программа, так как схема и программа тесно связаны между собой и дополняют друг друга. Для иллюстрации этого воспользуемся схемой, приведённой на рис. 1. К примеру, заставим светится светодиод VD1. Светодиод светится только тогда, когда через него протекает ток. Для этого на шестом выводе порта P0 должен присутствовать нулевой потенциал. Соответствующий программный модуль представлен ниже:
#include<REG51.h> void main(void) {P0=0; //Зажигание светодиода while(1); //Бесконечный цикл }
Эта программа содержит только один исполняемый оператор присваивания 'P0=0;', т.е. во все биты порта Р0 записываем нули. Следующий оператор “while(1);” обеспечивает зацикливание программы, которое было сделано для того, чтобы никакие действия больше не производились. В противном случае микроконтроллер перейдёт к следующей ячейке памяти и будет выполнять команды, которые мы не записывали. Обратите внимание, что язык программирования «знает», где находится порт P0. Эта информация содержится в строке #include<REG51.h>. Для работы с битами в СИ51 используются типы данных, приведенные в табл.1.
Таблица 1 Типы данных для работы с битами
Рис. 1. Пример простейшей схемы устройства, построенного с использованием микроконтроллера
Типы данных включенные в табл. 1, не описаны стандартом ANSI, поэтому к ним нельзя обращаться при помощи указателей. Обращение к битам зависит от среды программирования. При работе с компилятором СИ51 ICC8051 к битам порта можно обращаться без предварительного описания; например, Р0.1 – обращение к первому биту нулевого порта. В среде KeilµVision - описание требуется. Ключевое слово bit используется для объявления битовых переменных, смысл которых ясен из названия. Например: bit mb; Ключевое слово sbit используется очень часто в программах ВЕ51 для доступа к отдельным битам. Например, для среды KeilµVision можно использовать следующий вариант:
sbit bit0=P1^0;
Ключевое слово sfr применяется очень часто в программах ВЕ51 для обращения к отдельным битам специальных регистров. Например, для среды KeilµVision возможны следующие варианты:
sfr P0=0x60; sfr TMOD=0x89.
Ключевые слова sbit, sfr используются для обращения к глобальным переменным. Для примера заставим светится светодиод VD1 в зависимости от состояния тумблера (см. рис.1). Соответствующий программный модуль приведен ниже.
#include<reg51.h> sbit sv=P0^6; sbit t=P2^7; void main(void) {sv=t; //Зажигание светодиода в зависимости от //состояния тумблера while(1); //Бесконечный цикл }
Заметим, что светодиод, подключенный к шестому выводу порта Р0 будет светиться, если тумблер, подсоединенный к выводу 7 порта Р2, будет опущен. Задание 1. Проверьте работу рассмотренной выше программы.
С целью экономии ресурсов МК светодиоды и тумблеры можно подключить к одному порту через общую шину. Схема и соответствующий программный модуль приведены ниже.
Рис. 2. Пример простейшей схемы устройства, построенного с использованием микроконтроллера
При начальной установке все биты портов Р0-Р3 устанавливаются в 1. Следовательно, регистр, к которому подключены тумблеры, отключается от шины, т.к. а регистр, к которому подключены светодиоды, будет работать в режиме записи . На выходах D0:D7 этого регистра установятся единичные сигналы, и светодиоды окажутся погашенными (отсутствует разность потенциалов). Составим программу, которая обеспечивает ввод восьмибитного кода с тумблерного регистра и выдачу его на светодиоды.
#include <REG51.H>
sbit stb1=P1^5; sbit stb2=P1^6; sbit OE=P1^7;
main() { unsigned char x; //схему D1 переводим в режим чтения stb1=0; //схему D2 переводим в режим записи stb2=1; //разрешаем информационную связь со схемой D2, и тем //самым в регистр D2 и в порт Р0 записываем состояние //тумблеров OE=0; //состояние порта Р0 сохраняем в переменной х х=P0; //переводим схему D2 в состояние чтения stb2=0; //отключаем схему D2 от шины OE=1; //инвертируем состояние х и записываем в порт Р0; //схема D1 находится в состоянии записи; //данные с Р0 запишутся в регистр и выведутся //на светодиоды P0=~x; //схему D1 переводим в режим записи stb1=1; //бесконечный цикл while(1); } Задание 2. Разработайте МПС на базе МК ВЕ51, обеспечивающую ввод восьмибитного кода с тумблерного регистра и выдачу его на светодиоды в соответствии с вариантом задания. Напишите и отладьте соответствующий программный модуль. Варианты заданий: а) ШД – порт Р0, управляющие сигналы – Р2; б) ШД – порт Р1, управляющие сигналы – Р0; в) ШД – порт Р1, управляющие сигналы – Р2; г) ШД – порт Р2, управляющие сигналы – Р0; д) ШД – порт Р2, управляющие сигналы – Р1.
Задание 3. Подключите к МК ВЕ51 два контроллера параллельного ввода/вывода КР580ВВ55. Напишите программу инициализации контроллеров для случая работы всех каналов первого контроллера на ввод в режиме 0, а всех каналов второго контроллера на вывод в режиме 0. Отладьте программный модуль. Справочный материал для выполнения задания приведен на рис. 3, рис. 4 и в табл. 2. Настройка контроллера осуществляется посредством управляющего слова. Вначале необходимо составить управляющее слово в соответствии со структурой, приведенной на рис. 4, а затем записать его в регистр управляющего слова (РУС). Соответствующая комбинация управляющих сигналов контроллера представлена в табл. 2. Рис. 3. Программируемый периферийный адаптер К580ВВ55
Таблица 2 Основные операции ППА
Рис. 4. Управляющее слово РЕЖИМ РАБОТЫ (УСРР) адаптера КР580ВВ55 Контрольные вопросы 1. Сколько портов ввода/вывода содержит МК ВЕ51? 2. Какое специальное назначение имеют порт Р0 и порт Р2 МК ВЕ51? 3. Каково функциональное назначение порта Р3? 4. Как обратиться к разряду порта на языке СИ51? 5. Как вывести число в порт МК ВЕ51? 6. Какие операции можно осуществлять над содержимым портов ввода/вывода ВЕ51? 7. Где реализованы порты ввода/вывода ВЕ51? 8. Что такое «принцип наложения сред» и с какой целью он используется в архитектуре однокристальных контроллеров?
|