- •Однокристальный миКрОконтроллер к1816ве51 методические указания
- •Введение
- •Контрольные вопросы
- •Домашнее задание к выполнению лабораторной работы №2
- •Лабораторная работа №2 система внешних прерываний
- •Краткие теоретические сведения
- •Задания на лабораторную работу
- •Контрольные вопросы
- •Краткие теоретические сведения к заданию 2
- •Краткие теоретические сведения к заданию 3
- •Контрольные вопросы
- •Регистр режима работы таймера/счетчика
- •Регистр управления/статуса таймера
- •Регистр управления/статуса уапп
- •Регистр управления мощностью рум
- •Настройка таймера 1 для управления частотой работы уапп
- •Регистр масок прерывания (рмп)
- •Регистр приоритетов прерывания
- •Библиографический список
- •Содержание
- •Однокристальный миКрОконтроллер к1816ве51 методические указания
- •394026 Воронеж, Московский просп., 14
Краткие теоретические сведения к заданию 3
Через универсальный асинхронный приемопередатчик (УАПП), который в литературных источниках часто называют последовательным портом, осуществляются прием и передача информации, представленной в последовательном коде (младшими битами вперед). Наличие буферного регистра приемника SBUF позволяет совмещать операцию чтения ранее принятого байта с приемом очередного. Но если к моменту окончания приема байта предыдущий не был считан из SBUF, то он будет потерян. Работой последовательного порта управляют три регистра:
регистр управления/статуса приемопередатчика SCON (sequential -последовательный, control – управлять);
бит SMOD регистра управления мощностью PCON (power control);
буферный регистр приемопередатчика SBUF.
Регистр SCON содержит не только управляющие биты, определяющие режим работы последовательного порта, но и девятый бит принимаемых или передаваемых данных (RB8 и ТВ8) и биты прерывания приемопередатчика (R1 и Т1).
Последовательный порт может работать в четырех различных режимах.
Режим 0. Синхронный режим. Информация передается и принимается через вывод входа приемника RxD. Принимаются или передается 8 бит данных. Через вывод TxD выдаются импульсы синхронизации, которые сопровождают каждый бит. Скорость передачи фиксирована и составляет 1/12 Fг, где Fг – частота кварцеваго резонатора.
Режим 1. Асинхронный 8-ми битовый режим. Передаются (через TXD) или принимаются (через RXD) 10 бит: старт-бит (логический 0), 8 бит данных (младшим разрядом вперед) и стоп-бит (логическая 1). При приеме стоп-бит поступает в бит RB8 регистра SCON. Скорость передачи в режиме 1 переменная: для управления скоростью передачи Вы можете использовать таймер Т1 и/или Т2.
Режим 2. Асинхронный 9-ти битовый режим с фиксированной скоростью передачи. Передаются (через TXD) или принимаются (через RXD) 11 бит: старт-бит. 8 бит данных (младшим разрядом вперед), программируемый 9-й бит данных и стоп-бит. При передаче, в 9-й бит данных (бит ТВ8 регистра SCON) может быть записан логический 0 или 1, например, значение бита четности (бит Р регистра PSW). При приеме, 9-й бит данных поступает в бит RB8 регистра SCON. Присутствие стоп-бита контролируется схемой обнаружения ошибки кадра. Скорость передачи программируется и может быть равна либо 1/32, либо 1/64 частоты резонатора в зависимости от управляющего бита SMOD.
Режим 3. Асинхронный 9-ти битовый режим. Совпадает с режимом 2 во всех деталях, за исключением частоты приема/передачи, которая задается таймером.
Во всех четырех режимах передача начинается любой командой, которая использует SBUF как регистр-приемник. Прием в режиме 0 начинается при условии RI = 0, REN = 1. Прием в других режимах начинается с приходом старт-бита, если бит REN установлен.
Флаг прерывания передатчика ТI устанавливается аппаратно в конце периода передачи стоп-бита во всех режимах. Соответствующая подпрограмма обслуживания прерывания должна сбрасывать бит TI.
Флаг прерывания приемника RI устанавливается аппаратно в конце периода приема восьмого бита данных в режиме 0 и в середине периода приема стоп-бита в режимах 1, 2 и 3. Подпрограмма обслуживания прерывания должна сбрасывать бит RI.
Все библиотечные функции ввода/вывода, такие как printf(), scanf(), getchar(), putchar() и т.д., работают с вводом/выводом через последовательный порт микроконтроллера. Это означает, например, что хорошо знакомая программистам функция printf() классического ANSI CИ в компилляторе С51 выводит данные в последовательный порт микроконтроллера ВЕ51, а не на экран консоли. Точно так же стандартная библиотечная функция СИ scanf() в СИ51 ожидает приема данных с последовательного порта, а не сконсоли, как в обычных компиляторах СИ.
Задание 3.Организуйте связь по последовательному каналу между двумя МПС, реализованными на базе МК ВЕ51. Режим работы - асинхронный, двунаправленный
Функциональная схема, обеспечивающая данный режим работы обмена, представлена на рис. 9. Ниже представлен фрагмент программы инициализации каналов для машины- источника, а также выдачи последовательности заданной длины.
Требуется написать и отладить фрагмент программы инициализации каналов для машины- приемника, а также приема последовательности заданной длины. Для этого достаточно скорректировать выше приведенный модуль. Обращение к функции ввода будет выглядеть как
s[i]=getchar();
Также в программном модуле необходимо разрешить прием данных через УАПП и установить флаг прерывания приемника.
Рис.9. Функциональная схема подсистемы последовательного
обмена данными между однокристальными микроконтроллерами ВЕ51
#include <REG51.h>
// stdio.h – файл заголовка, обеспечивающий работу с
//функциями ввода/вывода
#include <stdio.h>
// intrins.h – файл заголовка, обеспечивающий работу со //строковыми данными
#include <intrins.h>
main()
{
int i; //переменная цикла
unsigned char s[5]=”Hello”;//слово, выводимое через УАПП
EA=1;//разрешение прерываний
SM1=1;//задание режима работы УАПП
SM0=0;//задание режима работы УАПП
TH1=0x56;//для задания частоты прерываний от
//таймера1
TMOD=0x2;//задаем режим работы таймера
TR1=1;//запускаем таймер1
ET1=1;//разрешаем прерывания от таймера1
REN=0;//запрещаем прием данных через УАПП
for(i=0; i<5; i++)
{
TI=1;//установка флага прерывания предатчика
putchar(s[i]);//вывод символа через УАПП
}
for(;;);
}
