Состав семейства MCS-51

Автор работы: Пользователь скрыл имя, 11 Апреля 2011 в 12:22, реферат

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

В настоящее время среди всех 8-разрядных микроконтроллеров - семейство MCS-51 является несомненным чемпионом по количеству разновидностей и количеству компаний, выпускающих его модификации. Оно получило свое название от первого представителя этого семейства - микроконтроллера 8051, выпущенного в 1980 году на базе технологии n-МОП.

Содержимое работы - 1 файл

MSC51.doc

— 589.00 Кб (Скачать файл)

Рисунок 1. Формат регистра управления режимами работы таймеров TMOD. 

Так как управление таймерами 0 и 1 полностью идентично, то приведём назначение битов по именам:Символ Позиция бита Имя и назначение

GATE TMOD.7 для таймера 1 и TMOD.3 для таймера 0 

Управление блокировкой  таймера от ножки INTx. Если бит установлен в 1, то таймер/счетчик "x" разрешен до тех пор, пока на входе "lNTx" высокий уровень и бит управления "TRx" установлен. Если бит сброшен в 0, то Т/С разрешается, как только бит управления "TRx" устанавливается в 1.

С/Т TMOD.6 для таймера 1 и TMOD.2 для таймера 0 

Бит выбора режима таймера или счетчика событий. Если бит сброшен в 0, то таймер работает от внутреннего генератора, если установлен в 1, то работает от внешних сигналов на входе "Tx"

M1 TMOD.5 для таймера 1 и TMOD.1 для таймера 0 Выбор режима работы таймера  M1 M0 

0 0 

13 битный таймер/счетчик  "TLx" работает как 5-битный  предварительный делитель

0 1 

16 битный таймер/счетчик. "THx" и "TLx" включены последовательно

1 0 

8-битный автоперезагружаемый  таймер/счетчик. "THx" хранит значение, которое должно быть перезагружено в "TLx" каждый раз по переполнению

1 1 

Таймер/счетчик 1 останавливается. Таймер/счетчик 0: TL0 работает как 8-битный таймер/счетчик, и его режим определяется управляющими битами таймера 0. TH0 работает только как 8 битный таймер, и его режим определяется управляющими битами таймера 1 

M0 TMOD.4 для Т/С1 и TMOD.0 для Т/С0 
 

Режим 0 

В нулевом режиме таймер работает как 13-битный суммирующий  счётчик. Этот счётчик состоит из 8 бит регистра ТНх и младших 5 бит регистра TLx, где x в обозначении  регистра заменяется на 0 или 1 в зависимости от того таймера, которым мы управляем. Старшие 3 бита регистров TLx не определены и игнорируются. Установка запускающего таймер флага TR0 или TR1 не очищает эти регистры. Работе таймера 0 или таймера 1 в режиме 0 соответствует схема:

Рисунок 2. Схема  таймеров 0 или 1 в режиме 0. 

Этот режим  был введён для совместимости  с устаревшим семейством микроконтроллеров MCS-48 для облегчения переноса уже  разработанных программ на новые  процессоры и поэтому в настоящее  время не используется. Тем не менее, в этом режиме можно обеспечить формирование интервала времени длительностью до 8096 мс при частоте задающего генератора 12 МГц. 

Когда содержимое счетчика изменяется из состояния все "1" в состояние все "0" , то устанавливается (принимает значение "1") флаг прерывания таймера TF0 или TF1. 

Обычно пользователя интересует не максимальный интервал времени, а свой конкретный интервал времени. Для уменьшения интервала  времени в регистры таймера можно  предварительно занести число и  тем самым сформировать произвольный интервал времени. Рассмотрим пример подготовки таймера T0 для формирования временного интервала 5мс.

;Настроить режим  работы таймера-------------------------------------------------------------------------------------------

  mov TMOD,#00000000b          ;настроить таймеры T0 и T1 на  нулевой режим работы

           ;||||||||

           ;||||||++-------Перевести таймер T0 в тринадцатиразрядный  режим работы

           ;|||||+---------Синхронизироваться от  внутреннего генератора

           ;||||+----------Запретить управление таймером  от ножки INT0

           ;||++-----------Перевести таймер T1 в тринадцатиразрядный  режим работы

           ;|+-------------Синхронизироваться от  внутреннего генератора

           ;+--------------Запретить управление таймером от ножки INT1

          

;Настроить таймер  на генерацию 5-ти миллисекундного  интервала времени--------------------------------------

    mov TH0, #HIGH(-5000)  ;Загрузить старший байт  таймера

    mov TL0, #LOW(-5000)    ;Загрузить младший байт таймера 

В рассмотренном  примере для расщепления 16-ти битной константы на два отдельных байта  были использованы функции выделения  старшего и младшего байта. Эти функции  присутствуют в большинстве ассемблеров  для микроконтроллеров MCS-51. Если же язык программирования не содержит в своём составе подобные функции, то можно для выделения байтов воспользоваться операцией деления на 256.

    mov TH0, #-5000/256          ;Загрузить  старший байт таймера

    mov TL0, #-(5000-5000/256)   ;Загрузить младший байт таймера 

Режим 1 

В первом режиме работы таймер работает как шестнадцатиразрядный счётчик. Режим 1 похож на режим 0, за исключением того, что в регистрах  таймера использует все 16 бит. В этом режиме регистры ТНх и TLx также включены друг за другом. Работе таймера 0 или таймера 1 в режиме 1 соответствует схема: 

Рисунок 3. Схема  таймеров 0 или 1 в режиме 1. 

В этом режиме можно  обеспечить формирование интервала  времени длительностью до 65536 мкс  при частоте задающего генератора 12 МГц. 

Рассмотрим пример использования таймера T0 для формирования временного интервала 15мс.

;Настроить режим  работы таймера-------------------------------------------------------------------------------------------

    mov TMOD,#00000001b ;перевести таймер T0 в первый режим работы, а T1 - в нулевой

             ;||||||||

             ;||||||++-------Перевести таймер T0 в шестнадцатиразрядный  режим работы

             ;|||||+-----------Синхронизироваться от  внутреннего генератора

             ;||||+------------Запретить управление таймером от ножки INT0

             ;||++-------------Перевести таймер T1 в тринадцатиразрядный  режим

             ;|+----------------Синхронизироваться от  внутреннего генератора

             ;+-----------------Запретить управление  таймером от ножки INT1 

;Настроить таймер  на генерацию 15-ти миллисекундного  интервала времени------------------------------------

    mov TH0, #HIGH(-15000)  ;Загрузить старший байт  таймера

    mov TL0, #LOW(-15000)   ;Загрузить младший  байт таймера

OjidanTimer:

    jnb TF0, OjidanTimer    ;Подождать пока не переполнится таймер 

В рассмотренном  примере переполнение таймера произойдёт через 15000 циклов процессора, то есть через 15 мс. Программа будет постоянно  проверять состояние флага переполнения таймера и как только он установится в единицу перейдёт к выполнению следующей команды. 

Нулевой и первый режимы работы таймеров T0 и T1 предназначены  для формирования одиночного интервала  времени. Если возникает необходимость  формировать последовательность интервалов времени для периодических процессов, то загрузка регистров TH0 и TL0 для задания нужного интервала времени производится программно, что для коротких интервалов времени может привести к значительным затратам процессорного времени. 

Для формирования последовательности одинаковых интервалов времени используется режим работы таймера с перезагрузкой - режим 2. 

Режим 2

В режиме 2 регистр  таймера TLx работает как 8-битный счетчик  с автоматической перезагрузкой  начального значения из регистра ТНх  в регистр TLx. Переполнение регистра TLx не только устанавливает флаг TFx, но и загружает регистр TLx содержимым регистра ТНх, который предварительно инициализируется программно. Перезагрузка не изменяет содержимое регистра ТНх. Работе таймера 0 или таймера 1 в режиме 2 соответствует схема: 

Рисунок 4. Схема  таймеров 0 или 1 в режиме 2. 

Работа с таймерами  во втором режиме не отличается от рассмотренных  ранее примеров, поэтому следующий  пример инициализации таймера на генерацию частоты с периодом сто микросекунд (10кГц) приводится без комментария.

;Настроить режим  работы таймера-------------------------------------------------------------------------------------------

   mov TMOD, #00000010b ;перевести таймер T0 во второй  режим работы, а T1 - в нулевой

             ;||||||||

             ;||||||++---Перевести таймер T0 в режим 8-ми разр. таймера с автозагрузкой

             ;|||||+-----Синхронизироваться от внутреннего  генератора

             ;|||+-------Запретить управление таймером  от ножки INT0

             ;||++-------Перевести таймер T1 в тринадцатиразрядный режим

             ;|+---------Синхронизироваться от внутреннего  генератора

             ;+----------Запретить управление таймером  от ножки INT1 

   mov TMOD,#2          ;перевести таймер T0 во второй  режим работы, а T1 - в нулевой

   mov TH0, #-50        ;Загрузить старший байт таймера

   mov TL0, #-50        ;Загрузить младший байт таймера 

OjidanTimer:

    jnb TF0, OjidanTimer    ;Подождать пока  не переполнится таймер

 

  cpl P2.6              ;Проинвертировать сигнал на шестой ножке второго порта и

  sjmp OjidanTimer      ;снова перейти к ожиданию окончания  временного интервала 

Режим 3  

Таймер 1 при  работе в режиме 3 просто хранит свое значение. Эффект такой же как при  сбросе бита TR1. 

Таймер 0 в режиме 3 представляет собой два раздельных 8 битных счетчика (регистры TL0 и ТН0), Регистр TL0 использует биты управления таймера 0: С/Т0. GATE0, TR0 и TF0. Регистр ТН0 работает только в режиме таймера и использует биты TR1 и TF1 таймера 1. Таким образом, регистр ТН0 управляет прерыванием таймера 1. Логика работы таймера 0 в режиме 3 показана на схеме:

Рисунок 5. Схема  таймерa 0 в режиме 3. 

Работа таймера TL0 разрешается, если бит TR0 = 1, а таймера TH0 - если бит TR1 = 1. Таймер 1 при работе таймера 0 в режиме 3 постоянно включен. 

Этот режим  работы позволяет реализовать два  независимых таймера, если таймер 1 используется для работы последовательного  порта, но надо сказать, что на практике режим 2 мало интересен. 

Управление таймерами-счётчиками. 

Схема управления таймерами 0 и 1 идентична и для таймера T0 приведена на рисунке 6. Для схемы управления таймером T1 изменятся только номера управляющих бит (нули будут заменены на 1). В приведенной схеме заштрихованным прямоугольником обозначены внешние ножки микросхемы микроконтроллера 

Рисунок 5. Схема  таймерa 0 в режиме 3. 

Работа таймера TL0 разрешается, если бит TR0 = 1, а таймера TH0 - если бит TR1 = 1. Таймер 1 при работе таймера 0 в режиме 3 постоянно включен. 

Этот режим  работы позволяет реализовать два  независимых таймера, если таймер 1 используется для работы последовательного порта, но надо сказать, что на практике режим 2 мало интересен. 

Управление  таймерами-счётчиками. 

Схема управления таймерами 0 и 1 идентична и для  таймера T0 приведена на рисунке 6. Для  схемы управления таймером T1 изменятся только номера управляющих бит (нули будут заменены на 1). В приведенной схеме заштрихованным прямоугольником обозначены внешние ножки микросхемы микроконтроллера.

Рисунок 6. Схема  управления таймерами 0 или 1. 

Из схемы видно, что таймер может включаться и выключаться битами TRx. Таким образом можно уменьшать потребление микросхемы и уровень помех, создаваемый ею. Учитывая, что счетчики таймеров переключаются на высокой частоте, то они могут потреблять до половины тока потребления микроконтроллера. Следует отметить, что при включении и после сброса микроконтроллера работа таймеров запрещена. 

Есть возможность  управлять работой таймера извне  при помощи внешней ножки T0 для  таймера T0 или T1 для таймера T1. Для  этого необходимо записать в бит GATEx логическую единицу (не забыв при этом разрешить работу таймера при помощи бита TRx). 

Кроме того, таймер может синхронизироваться от внешнего генератора. Для этого в бит  управления C/T нужно записать логическую единицу. 

Информация о работе Состав семейства MCS-51