Лекции по «Проектированию и программированию микропроцессорных систем управления»

Автор работы: Пользователь скрыл имя, 24 Декабря 2012 в 22:23, курс лекций

Краткое описание

К началу 70-х годов были созданы сложные системы. Возникла потребность в передаче части функций управления периферийным устройствам, расположенным рядом с объектом управления. К концу 60-х годов в технике стала проявляться тенденция к децентрализации управления. Для этого требовались недорогие, малогабаритные и надежные вычислители. С другой стороны электрическая промышленность к этому времени способна была производить интегральные микросхемы (ИМС) до 3-го уровня интеграции.

Содержание

1. Введение, цели и задачи курса ……………………………………………………………… 3
2. Историческая справка …………………………………………………………………………. 4
3. Структурная организация типового микроконтроллера МК51 …………………………….. 7
4. Методология проектирования систем на основе МП и МЭВМ ……………………………. 8
Описание микроконтроллера C8051F310/311 ……………………………………………… 12
1. Краткий обзор ……………………………………………………………………………… 12
2. Предельно допустимые параметры ……………………………………………………… 24
3. Основные электрические параметры …………………………………………………… . 25
4. Описание корпусов и выводов …………………………………………………………… 26
5. 10-разрядный АЦП ………………………………………………………………………… 30
6. Источник опорного напряжения ………………………………………………………… 44
7. Компараторы …………………….………………………………………………………… 46
8.4. Режимы управления электропитанием ……………………………………………… 53
9. Источники сброса ………………………….……………………………………………… 55
10. Flash-память ……………………………………………………………………………… 60
11. Встроенная память XRAM ……………………………………………………………… 70
12. Генераторы …………………………………………………………….………………… 72
13. Порты ввода/вывода ……………………..……………………………………………… 76
14. SMBus ……………………………………..……………………………………………… 87
15. UART0 ……………………………………..……………………………………………… 103
16. Модуль расширенного SPI (SPI0) ……..……………………………………………… 111
17. Таймеры ……………………………………………………………………………………… 122
18. Программируемый массив счетчиков ……………………………………………………… 137
Список использованных источников ……………………………………………………………

Прикрепленные файлы: 1 файл

Лекции по курсу МК.doc

— 4.57 Мб (Скачать документ)

Чтение:

0: Биты START или «повторный START» не  обнаружены.

1: Обнаружен бит START или «повторный START».

Бит 4: STO: Флаг окончания передачи модуля SMBus.

Запись:

0: Бит STOP не передается.

1: Установка в 1 бита STO приведет  к передаче бита STOP после следующего  цикла 

ACK. Когда генерируется бит STOP, бит STO будет аппаратно сброшен в 0.

Если оба бита STA и STO установлены  в 1, то будут сгенерированы сначала  бит STOP,

а затем бит START.

Чтение:

0: Бит STOP не обнаружен.

1: Бит STOP обнаружен (в ведомом  режиме) или задержан (в ведущем  режиме).

Бит 3: ACKRQ: Запрос подтверждения. Этот доступный только для чтения бит

устанавливается в 1, если модуль SMBus уже  принял байт и должен записать в 

бит ACK правильное ответное значение ACK.

Бит 2: ARBLOST: Флаг потери арбитража. Этот доступный только для чтения бит 

устанавливается в 1, если модуль SMBus, работая в режиме передатчика, теряет

арбитраж. Потеря арбитража при  работе в ведомом режиме означает ошибку

состояния шины.

Бит 1: ACK: Флаг подтверждения. Этот бит  определяет уровень исходящего ACK и  отражает

уровень входящего ACK. Этот бит должен записываться каждый раз при

получении байта (когда ACKRQ = 1), или  считываться после передачи

каждого байта.

0: NACK, т.е. «нет подтверждения», получен  (в режиме передатчика) ИЛИ  будет передан (в режиме приемника).

1: ACK, т.е. «подтверждение», получен (в режиме передатчика) ИЛИ будет

передан (в режиме приемника).

Бит 0: SI: Флаг прерывания от модуля SMBus. Этот бит устанавливается аппаратно  в 1 при 

возникновении условий, перечисленных  в таблице 14.3.

Бит SI должен сбрасываться программно. Если SI = 1, то SCL удерживается на

низком уровне и обмен по шине останавливается.

 

Таблица 14.3. События, вызывающие аппаратную установку/сброс

битов регистра SMB0CN

 

14.4.3. Регистр данных

Регистр данных модуля SMBus (SMB0DAT) содержит байт последовательных данных, который необходимо передать, или байт последовательных данных, который только что принят. Программа может считывать из регистра или записывать в регистр данные, когда флаг SI установлен в 1. Программа не должна пытаться обратиться к регистру SMB0DAT, когда модуль SMBus включен и флаг SI сброшен в 0, т.к. в этот момент может осуществляться аппаратный сдвиг байта данных в регистр или из регистра.

Данные всегда сдвигаются старшими разрядами вперед. После приема байта  первый бит принятых данных занимает старший разряд регистра SMB0DAT. Когда данные выдвигаются из регистра на шину, данные с шины одновременно вдвигаются в регистр. Поэтому регистр SMB0DAT всегда содержит последний байт данных, присутствующий в настоящий момент на шине. Таким образом, в случае потери арбитража переход от ведущего передатчика к ведомому приемнику осуществляется с корректными данными (или с корректным адресом) в регистре SMB0DAT.

 

 

 

 

 

SFR-описание 14.3. SMB0DAT: Регистр  данных модуля SMBus

SFR-адрес: 0xC2

Биты 7-0: SMB0DAT: Данные модуля SMBus.

Регистр SMB0DAT содержит байт данных, который  должен передаваться

последовательному интерфейсу SMBus, или  байт данных, только что принятый от

последовательного интерфейса SMBus. Читать из этого регистра или записывать в этот

регистр можно всегда, когда флаг прерывания от последовательного порта SI

(SMB0CN.0) установлен в 1. Последовательные  данные в регистре остаются  стабильными, пока SI = 1. Когда флаг SI не установлен в 1, система  может находиться в процессе  сдвига данных в регистр (или из регистра) SMB0DAT и обращаться к этому регистру нельзя.

 

14.5. Режимы работы модуля SMBus

Модуль SMBus может быть настроен для  работы как в режиме ведущего, так  и в режиме ведомого. В любой  конкретный момент времени он может  работать в одном из четырех режимов: ведущий передатчик, ведущий приемник, ведомый передатчик, ведомый приемник. Модуль SMBus переходит в ведущий режим каждый раз, когда генерирует бит START, и остается в ведущем режиме до потери арбитража или до генерации бита STOP.

Прерывание от модуля SMBus генерируется по окончании каждого сообщения (байта) SMBus; однако следует иметь  ввиду, что прерывание генерируется до цикла ACK при работе в режиме приемника, и после цикла ACK при работе в  режиме передатчика.

 

14.5.1. Режим ведущего передатчика

Последовательные данные выдаются на линию SDA, а тактовые импульсы выдаются на линию SCL. SMBus генерирует бит START и  затем передает первый байт, который  содержит адрес целевого ведомого устройства и бит направления. В этом случае бит направления (R/W) будет сброшен в 0, инициируя операцию записи. Затем модуль SMBus передает один или несколько байт последовательных данных. После передачи каждого байта ведомый генерирует бит подтверждения. Передача заканчивается, когда бит STO устанавливается в 1 и на шине генерируется бит STOP. Следует иметь ввиду, что модуль SMBus переключится в режим ведущего приемника, если после прерывания от ведущего передатчика регистр SMB0DAT не будет записан. На рисунке 14.5 показана передача данных в режиме ведущего. Показана передача двух байт данных, хотя может быть передано любое количество байт. Следует обратить внимание, что в этом режиме прерывание «байт данных передан» генерируется после цикла ACK.

Рисунок 14.5. Передача данных в режиме ведущего

14.5.2. Режим ведущего  приемника

Последовательные данные принимаются  с линии SDA, а тактовые импульсы выдаются на линию SCL.

Модуль SMBus генерирует бит START и затем  передает первый байт, который содержит адрес целевого ведомого устройства и бит направления. В этом случае бит направления (R/W) будет установлен в 1, инициируя операцию чтения. Модуль SMBus принимает последовательные данные от ведомого по линии SDA, при этом генерирует тактовые импульсы на линии SCL. Ведомый передает один или несколько байт последовательных данных. После приема каждого байта бит ACKRQ устанавливается в 1 и генерируется прерывание. Программа должна записать бит ACK (SMB0CN.1), чтобы определить значение (тип) генерируемого подтверждения.

(Примечание: при записи ACK = 1 генерируется ACK, при записи ACK = 0 генерируется NACK).

Программа должна записать ‘0’ в  бит ACK после приема последнего байта, чтобы передать (сгенерировать на шине) NACK. Модуль SMBus выйдет из режима ведущего приемника после установки в 1 бита STO и генерации бита STOP. Следует иметь ввиду, что модуль SMBus перейдет в режим ведущего передатчика, если в режиме ведущего приемника записать данные в регистр SMB0DAT. На рисунке 14.6 показан прием данных в режиме ведущего. Показан прием двух байт данных, хотя может быть принято любое количество байт. Следует обратить внимание, что в этом режиме прерывание «байт данных передан» генерируется до цикла ACK.

Рисунок 14.6. Прием данных в режиме ведущего

15.5.3. Режим ведомого приемника.

Последовательные данные принимаются  с линии SDA, а тактовые импульсы принимаются  с линии SCL.

Если ведомый режим разрешен (INH = 0), то модуль SMBus перейдет в режим  ведомого приемника при получении  бита START и следующих за ним адреса ведомого и бита направления (в этом случае ЗАПИСЬ). При входе в режим ведомого приемника генерируется прерывание и устанавливается в 1 бит ACKRQ. Программа отвечает на принятый адрес ведомого битом ACK или игнорирует принятый адрес ведомого битом NACK.

Если адрес ведомого игнорируется, то прерывания от ведомого будут запрещены до обнаружения следующего бита START.

Если принятый адрес ведомого подтвержден (битом ACK), то принимаются ноль или  более байт данных. Программа должна записывать бит ACK после приема каждого байта, чтобы подтвердить (ACK) или не подтвердить (NACK) принятый байт. Модуль SMBus выйдет из режима ведомого приемника после приема бита STOP. Следует иметь ввиду, что модуль SMBus перейдет в режим ведомого передатчика, если в режиме ведомого приемника записать данные в регистр SMB0DAT. На рисунке 14.7 показан прием данных в режиме ведомого. Показан прием двух байт данных, хотя может быть принято любое количество байт. Следует обратить внимание, что в этом режиме прерывание «байт данных передан» генерируется до цикла ACK.

Рисунок 14.7. Прием данных в режиме ведомого

14.5.4. Режим ведомого  передатчика

Последовательные данные выдаются на линию SDA, а тактовые импульсы принимаются  с линии SCL.

Если ведомый режим разрешен (INH = 0), то модуль SMBus перейдет в режим ведомого приемника (для приема адреса ведомого) при получении бита START и следующих за ним адреса ведомого и бита направления (в этом случае ЧТЕНИЕ). При входе в режим ведомого передатчика генерируется прерывание и устанавливается в 1 бит ACKRQ. Программа отвечает на принятый адрес ведомого битом ACK или игнорирует принятый адрес ведомого битом NACK.

Если адрес ведомого игнорируется, то прерывания от ведомого будут запрещены  до

обнаружения следующего бита START.

Если принятый адрес ведомого подтвержден (битом ACK), то передаваемые данные следует записать в регистр SMB0DAT. Модуль SMBus перейдет в режим ведомого передатчика и передаст один или более байт данных. После передачи каждого байта ведущий посылает бит подтверждения; если битом подтверждения является ACK, то в регистр SMB0DAT следует записать следующий байт данных.

Если битом подтверждения является NACK, регистр SMB0DAT не должен

записываться до сброса бита SI (Примечание: Если в режиме ведомого передатчика  регистр SMB0DAT записывается после получения NACK, то может быть сгенерировано условие ошибки). Модуль SMBus выйдет из режима ведомого передатчика после приема бита STOP. Следует иметь ввиду, что модуль SMBus перейдет в режим ведомого приемника, если после прерывания от ведомого передатчика регистр SMB0DAT не записывается. На рисунке 14.8 показана передача данных в режиме ведомого. Показана передача двух байт данных, хотя может быть передано любое количество байт. Следует обратить внимание, что в этом режиме прерывание «байт данных передан» генерируется после ACK.

Рисунок 14.8. Передача данных в режиме ведомого

14.6. Декодирование состояний  модуля SMBus

Текущее состояние модуля SMBus можно  легко определить с помощью регистра SMB0CN. В приведенной ниже таблице  ВЕКТОР СОСТОЯНИЯ определяется четырьмя старшими битами регистра SMB0CN: MASTER, TXMODE, STA и STO. Следует иметь ввиду, что приведенные варианты ответных реакций являются только типичными ответными реакциями; специфичные для конкретного приложения процедуры также допустимы с учетом соответствия их спецификации SMBus. Выделенные цветом ответные реакции разрешены, но они не соответствуют спецификации SMBus.

 

 

 

Таблица 14.4. Декодирование  состояний SMBus

 

Таблица 19.4. Декодирование  состояний SMBus (продолжение)

 

 

 

 

15. UART0

UART0 представляет собой асинхронный полнодуплексный последовательный порт, способный работать в режимах 1 и 3 стандартного (для архитектуры 8051) UART. Поддержка усовершенствованного режима генерации скорости передачи данных позволяет использовать для генерации стандартных скоростей обмена различные источники тактирования (см. раздел «15.1. Усовершенствованный режим генерации скорости передачи данных»). Буферизация принимаемых данных позволяет UART0 начать прием второго входящего байта данных до того, как программа закончит чтение предыдущего байта данных.

С работой UART0 связаны следующие  регистры специального назначения: регистр  управления UART0 (SCON0) и буфер данных UART0 (SBUF0). Одна и та же ячейка памяти, адресуемая как SBUF0, обеспечивает доступ и к регистру передатчика, и к регистру приемника. Операции записи в SBUF0 всегда обращаются к регистру передатчика. Операции чтения из SBUF0 всегда обращаются к буферизованному регистру приемника; невозможно прочитать данные из регистра передатчика.

Если прерывания от модуля UART0 разрешены, то запрос прерывания генерируется каждый раз при завершении передачи байта данных (установка в 1 флага TI0 в регистре SCON0) или при получении байта данных (установка в 1 флага RI0 в регистре SCON0). Флаги прерываний от UART0 не сбрасываются аппаратно при переходе к процедуре обслуживания прерывания. Они должны сбрасываться программно. Это позволяет программе определить причину, вызвавшую прерывание от UART0 (завершение передачи или завершение приема).

 

Рисунок 15.1. Структурная схема UART0

15.1. Усовершенствованный  режим генерации скорости передачи  данных

Скорость передачи данных UART0 генерируется Таймером 1, работающим в 8-разрядном  режиме с автоперезагрузкой. Частота  передатчика (ТХ) определяется переполнением  регистра TL1; частота приемника определяется переполнением регистра-копии регистра TL1 (обозначенного как «RX-Таймер» на рисунке 15.2), который недоступен из программы пользователя. Скорость передачи данных передатчика и приемника равна деленной на два частоте переполнения регистров TL1 и RX-Таймер соответственно. RX-Таймер работает тогда, когда включен Таймер 1 и использует то же самое значение перезагрузки (TH1). Однако перезагрузка регистра RX-Таймер происходит в тот момент, когда на выводе RX обнаруживается событие START. Это позволяет начать прием данных в любой момент при обнаружении события START, независимо от состояния Таймера ТХ.

Рисунок 15.2. Логика генератора скорости передачи данных UART0

Таймер 1 следует настроить для  работы в режиме 2, т.е. как 8-разрядный таймер с автоперезагрузкой (см. раздел «21.1.3. Режим 2: 8-разрядный таймер/счетчик с автоперезагрузкой» на стр. 253). Значение перезагрузки Таймера 1 следует установить таким образом, чтобы частота переполнений таймера была в два раза больше необходимой скорости передачи данных. Частота тактового сигнала Таймера 1 может быть одной из следующих:

1) SYSCLK;

2) SYSCLK/4;

3) SYSCLK/12;

4) SYSCLK/48;

5) Частота внешнего генератора / 8;

6) Частота внешнего сигнала на  входе T1.

Скорость передачи данных UART0 определяется из уравнений 15.1-А и 15.1-В.

Уравнение 15.1. Скорость передачи данных UART0

А) Скорость передачи данных UART0 = (Частота переполнения Таймера 1) / 2

В) Частота переполнения Таймера 1 = T1CLK / (256 – T1H),

где T1CLK – частота тактирования Таймера 1;

   T1H – старший байт Таймера 1 (8-разрядное значение перезагрузки).

Выбор частоты тактирования Таймера 1 описан в разделе «21. Таймеры» на стр. 251. В таблицах 15.1 –15.6 приведены  системные параметры для стандартных  скоростей обмена при различных частотах системного тактового сигнала. Следует отметить, что внутренний генератор может генерировать системный тактовый сигнал, в то время как выходной сигнал внешнего генератора подается на Таймер 1.

Информация о работе Лекции по «Проектированию и программированию микропроцессорных систем управления»