- •Потоковые процессоры
- •Общие сведения
- •Альтернативные функции
- •Устройство портов
- •3.3.1.Регистр режима работы таймера/счетчика tmod
- •3.3.2.Регистр управления/статуса таймера tcon.
- •3.3.3.Режимы работы таймеров-счетчиков.
- •3.5.3.Регистр управления мощностью pcon.
- •3.5.1.Функциональное назначение бит регистра управления/статуса приемопередатчика scon.
- •3.5.2.Скорость приема/передачи информации через последовательный порт.
- •Вопрос #11 Контроллер прерываний msc-51. Особенности работы, программирование
- •3.6.1.Регистр масок прерывания (ie).
- •3.6.2.Регистр приоритетов прерываний (ip).
- •3.6.3.Выполнение подпрограммы прерывания.
- •Режим захвата.
- •Режим 16-разрядного программируемого таймера.
- •Режим скоростного вывода.
- •Режим сторожевого таймера (watchdog timer).
- •Режим генерации импульсов заданной скважности.
- •2.1.1 Центральный процессор (cpu)
- •2.1.2. Периферийные устройства 8xc196kc и 8xc196kd
- •1. Повышение тактовой частоты.
- •2. Увеличение объема и пропускной способности подсистемы памяти.
- •3. Увеличение количества параллельно работающих исполнительных устройств.
- •4. Системы на одном кристалле (SoC) и новые технологии.
- •Программные симуляторы.
- •Режим генерации импульсов заданной скважности. (Модуль pca как генератор шим)
- •Режим захвата.
- •Режим 16-разрядного программируемого таймера.
- •Режим скоростного вывода.
Режим 16-разрядного программируемого таймера.
В этом режиме 16-разрядное значение РСА таймера-счетчика сравнивается с 16-разрядным значением, которое было предварительно загружено в регистры CCAPnH, CCAPnL одного из модулей сравнения-захвата. Это происходит трижды за машинный цикл. Установка бита ЕСОМn в регистре ССАРМn разрешает функцию сравнения, как показано на рисунке. Для перехода в режим программируемого таймера также должен быть установлен бит МАТn. Когда происходит совпадение значений РСА таймерасчетчика и регистров CCAPnH, CCAPnL, устанавлиается флаг событий CCFn. При этом будет генерироваться запрос на прерывание, если бит ECCFn установлен. Математическое обеспечение должно сбрасывать флаг событий CCFn перед тем, как произойдет следующее совпадение.
Подпрограмма обработки прерывания может записать новое 16-paзpядное значение в регистры ССАРnН, CCAPnL. Однако следует помнить, что запись в CCAPnL сбрасывает ЕСОМn бит, тем самым запрещая функцию сравнения на время пока происходит изменение содержимого этих регистров, что позволяет избежать неверного совпадения. Запись ССАРnН устанавливает бит ЕСОМn и возобновляет работу компаратора. По этой причине математическое обеспечение должно записывать сначала CCAPnL, затем ССАРnН.
Режим скоростного вывода.
В этом режиме формируется сигнал на внешнем выводе СЕХn, когда происходит совпадение РСА таймера со значением, которое было предварительно загружено в регистры ССАРnН, CCAPnL одного из модулей. В этом режиме бит TOGn должен быть установлен дополнительно к битам ЕСОМn и МАТn, как показано на рисунке в предыдущем разделе. Устанавливая или сбрасывая этот бит в своей программе, вы можете формировать на внешнем выводе СЕХn или фронт, или спад. Кроме того, при совпадении может генерироваться запрос на прерывание, если бит ECCFn установлен. Режим скоростного вывода является более точным по сравнению с переключением контактов параллельного порта программным путем, поскольку формирование сигнала на внешнем выводе происходит до обращения к подпрограмме обработки прерывания. Это значит, что задержка, связанная с выполнением подпрограммы обработки прерывания, не будет влиять на формирование сигнала. Если подпрограмма обработки прерывания не изменит содержимого регистров ССАРnН, CCAPnL, то следующий сигнал "совпадение" будет сформирован после того, как значение РСА таймера-счетчика снова совпадет со старым сравниваемым значением.
Доп. Вопрос #4 – “Последовательный связной адаптер”
Синхронный обмен.
Режим 0 соответствует синхронному режиму последовательного обмена. Информация принимается и передаётся через вход приёмника RXD (вывод P0.3). Принимаются или передаются 8 бит данных. Через вывод выхода передатчика TXD (вывод P3.1) выдаются импульсы синхронизации (сдвига), которые стробируют (сопровождают) каждый бит данных при приёме или передаче. Частота передачи бита при этом максимально и равна 1/12 тактовой частоты кварцевого резонатора. (SM0 и SM1 сброшены). Приём осуществляется при условии что RI = 0 и REN = 1. Передача из последовательного порта инициализируется любой командой, в которой буферный регистр SBUF указан как получатель байта.
Асинхронный обмен.
Режим 1. В этом режиме передаются через вывод TXD или принимаются через RXD 10 бит информации: старт-бит (0), 8 бит данных и стоп-бит (1) при приеме информации в бит RB8 регистра управления/статуса приемопередатчика SCON заносятся стоп-бит Скорость приема/передачи — величина переменная и задается таймером. (SM0=0, SM1=1)
Режим 2. В этом режиме через вывод TXD передаются или через RXD принимаются 11 бит информации: старт-бит, 8 бит данных, программируемый девятый бит и стоп-бит. При передаче девятый бит данных может принимать значение 0 или 1 или, например, для повышения достоверности передачи путем контроля по четности в него может быть помещено значение признака паритета из слова состояния программы (PSW.0). При приеме девятый бит данных помещается в бит RB8 SCON, а стоп-бит, в отличие от режима 1, теряется. Частота приема/передачи выбирается программой и может быть равна либо 1/32, либо 1/64 частоты резонатора в зависимости от управляющего бита SMOD. (SM0=1, SM1=0)
Режим 3. совпадает с режимом 2 во всех деталях, за исключением частоты приема/передачи, которая является величиной переменной и задается таймером. (SM0=1, SM1=1)
Во всех режимах работы приём начинается с приходом старт-бита(при обнаружении на входе RXD перехода сигнала из состояния 1 в состояние 0), если REN=1
Передача из последовательного порта инициализируется любой командой, в которой буферный регистр SBUF указан как получатель байта.
Вычислить частоту работы при передаче одного байта, при скорости 19200 бод, fосц = 12МГц
A: Fv=( fосц/12)*(2/64)*(1/(256-TH1))
Если говорить о 51-ом, то такую скорость не получить, т.к. если используется Т1 при такой частоте тактового генератора контроллера, то нет такого значения TH1.
2/32*(12МГц/(12*(256-TH1)))=BaudRate
1/16*(1000000/(256-TH1))=BaudRate
16*BaudRate=1000000/(256-TH1)
16*19200=1000000/(256-TH1)
256-TH1=1000000/(16*19200)=3,255
TH1=256-3.255=252.745
Ближайшее целое это 253, при этом скорость будет уже не 19200, а 20833 и работа, например, с компьютером без специальных средств невозможна (нестандартная частота).
А вообще если 19200, то частота будет 10/8*19200=24кГц (т.к. в простом случае боды это скорость передачи данных, а у нас на каждые 8 бит приходится еще 2 бита служебных стоп-старт битов, значит передаем 10, значит частота выше в 10/8 раза)
Как организовать прием и передачу данных на разных частотах одновременно?
T2MOD = 0x00;
PCON = 0x80; //бит SMOD. Удвоение скорости обмена UART
SCON = 0x58; //настройка UART. Режим 1 - 9-бит, разрешение приема, 9-й бит=1 (0101 1000)
TH2 = RCAP2H = 0xff; //загрузка Т2 исходя из выбранной скорости обмена-115200
TL2 = RCAP2L = 0xfa; //
TH1 = …
T2CON = 0x…; //настройка Т2. Т2-задающий генератор UART (0011 0000) – T2CON.4 – бит синхронизации передатчика. Если 1, то T1 не используется. T2CON.5 – бит синхронизации приемника
|
RCLK |
T2CON.5 |
Выбор таймера/счетчика 2 для задания скорости работы приемника в режимах 1 и 3. При RCLK = 1 используется таймер/счетчик 2, при RCLK = 0 - таймер/счетчик 1 |
|
TCLK |
Т2СОN.4 |
Выбор таймера/счетчика 2 для задания скорости работы передатчика в режимах 1 и 2. При TCLK = 1 используется таймер/счетчик 2, при TCLK = 0 - таймер/счетчик 1 |
TI=RI = 0; //cброс флагов прерывания UART
TR2 = 1;
//настройка прерываний
IE = 0x90; //Общее, UART
Работа таймера Т2 в режиме генератора скорости обмена данными
Таймер Т2 превращается в генератор скорости обмена установкой в 1 битов TCLK и/или RCLK в T2CON. Отметим, что скорости в бодах для передачи и приема могут отличаться. Это достигается, например, при использовании таймера 2 для приема, а таймера 1 - для передачи (или наоборот). Установка RCLK и/или TCLK переводит таймер Т2 в режим генератора скорости передачи в бодах. Режим генератора скорости передачи в бодах имеет общее с режимом автоперезагрузки в том, что переполнение содержимого регистров таймера/счетчика TL2 и TH2 вызывает перезагрузку регистров TL2 и TH2 16-битным значением из регистров RCAP2H и RCAP2L, предварительно установленным программно. Скорости передачи в бодах в режимах 1 и 3 определяются следующим образом:
Скорость в режимах 1 и 3 = (скорость переполнения таймера 2)/16 При этом таймер может работать как в режиме таймера, так и в режиме счетчика. В большинстве случаев выбирают режим таймера (C/T2 = 0). Обратим внимание на одну особенность работы таймера/счетчика Т2 при использовании его в качестве генератора скорости передачи в бодах. Обычно, как таймер, он инкрементирует свое содержимое в каждом машинном цикле с частотой, равной 1/12 частоты генератора). Однако, как генератор скорости передачи в бодах, он инкрементирует свое значение в 6 раз быстрее с частотой, равной 1/2 частоты генератора). Формула скорости передачи в бодах в зависимости от значений RCAP2L, RCAP2H выглядит следующим образом:
Частота генератора
Скорость = ______________________________
в режимах 1 и 3 32 * [ 65536 - (RCAP2H, RCAP2L) ]
где (RCAP2H, RCAP2L) - содержимое RCAP2H и RCAP2L, взятое как 16-битное целое без знака. Отметим, что переполнение TH2 не устанавливает TF2 и не вызывает прерывания. Кроме того, если EXEN2=1, то перепад из 1 в 0 в Р1.1 установит в 1 флаг EXF2, но не вызовет перезагрузки из (RCAP2H, RCAP2L) в (TH2, TL2). Таким образом, когда таймер Т2 используется как генератор скорости передачи в бодах, вход Р1.1 может использоваться при необходимости как вход дополнительного внешнего прерывания. Следует отметить, что при работе таймера/счетчика Т2 в "таймерном" режиме генератора скорости передачи в бодах нельзя пытаться считывать или записывать в TH2 или TL2. В этом случае таймер инкрементируется 6 раз в течение каждого машинного цикла, и результаты чтения или записи будут неопределенными. Регистры RCAP2 можно читать, но нельзя в них записывать, т.к. запись может отменить ближайшую по времени перезагрузку и вызвать ошибки приема или передачи. Таймер должен быть отключен (TR2=0) перед обращением к регистрам таймера TH2, TL2 или к регистрам RCAP2H, RCAP2L.
Доп. вопрос #5 – “Память”
- способы доступа к внутренней памяти с адреса 00h no lFh
Возможно использование косвенной и прямой адресации для адресования ячеек внутренней памяти данных. Однако использование косвенной регистровой адресации позволяет экономить память программ, так как команды, работающие с регистрами R0-R7 короче команд, использующих прямую адресацию. 00H-07H – банк 0, 08H-0FH – банк 1, 10H-17H – банк 2, 18H-1FH – банк 3.
ИЛИ
Однозначно в какой бы то ни было области от 00h-FFh есть косвенная адресация.
Ячейки с адресами 20h-2Fh –Могут адресоваться прямо, побитово, косвенно.
Ячейки с адресом свыше 7Fh осуществляет доступ к области регистров специальных функций, а косвенная - к верхней области внутренней памяти данных. Т.о. эти две области занимают одно и то же адресное пространство, хотя и разделены физически. Все байты в нижней 128-байтной половине внутренней памяти данных могут адресоваться как прямо, так и косвенно.
- способы доступа к внутренней памяти с адреса 20h no 2Fh
Этот диапазон ячеек (16 бит) образует область флагов, определяемых пользователем. Эти ячейки могут адресоваться прямо, побитово, косвенно.
- способы доступа к внутренней памяти с адреса 30h no 7Fh
Ячейки резидентного ОЗУ. Возможна косвенная адресация только в байтовом формате. Возможна прямая адресация.
- способы доступа к внутренней памяти с адреса 80h no FFh
Ячейки с адресами 80h-FFh – 1 байт в области регистров специальных функций SFR. Допускают байтовую и побитовую адресацию. Используется лишь прямая адресация при обращении. Те ячейки памяти, которые не заняты регистрами, физически отсутствуют на кристаллах МК семейства 8051 при обращении к ним можно прочитать лишь команды возврата, косвенная в верхней области ОЗУ. Т.е. эти 2 области занимают одно и то же адресное пространство, хотя и разделены физически. В итоге к SFR прямая, а к памяти только косвенная!
- рассчитайте адрес ячейки памяти для команды movx a,@r0
- рассчитайте адрес ячейки памяти для команды move a,@a+pc
Адрес ячейки вычисляется следующим образом ((A)+(PC)+1)
Общая инфа:
косвенный доступ к внешней памяти данных через MOVX A, @Ri – с использованием однобайтового адреса, где Ri (i=0,1)
обращение к внешней памяти программ MOVC A, @A + PC – считывание из ВПП данных
Доп. вопрос #6 – “Порты”
- идентификаторы типа передаваемых данных через порт P0
- в чем разница в поведении программы, использующей команду JB P1.0, NEXT от использующей JBC P1.0, NEXT
JBC <bit>, <re18>
JB выполняет переход по адресу ветвления если указанный бит равен “1”, в противном случае выполняется следующая команда. Адрес ветвления вычисляется: (PC):=(PC)+3, если <bit>=1, то (PC):=(PC)+<re18> . Проверяемый бит не изменится.
JBC – выполняет переход по адресу ветвления, если bit=1, в противном случае выполняется следующая команда. Адрес ветвления вычисляется: (PC):=(PC)+3. Если (bit)=1, то (bit):=0, (PC):=(PC)+<re18> - указанный бит сбрасывается.
Если это команда используется для проверки бита порта, то значение, которое используется как операнд, считывается из “защёлки” порта, а не с вывода БИС.
- напишите программу формирования одиночного импульса на выводе p1.0
CLR P1.0 // Сброс бита в 0
SETB P1.0 // Установка бита в 1
CLR P1.0
- изобразите схему подключения светодиода к выводу P1.0 микроконтроллера i80C51
Порты микросхемы служат для управления внешними устройствами, подключенными к микроконтроллеру. Схема подключения простейших внешних устройств приведена на рисунке 1. Этот рисунок иллюстрирует особенности подключения индикаторов к параллельным портам микроконтроллера MCS-51. Присутствие в схеме мощного транзистора позволяет подключать к выводам порта светодиодные индикаторы непосредственно без усилителя мощности. Однако при этом необходимо следить за максимальной допустимой мощностью, рассеиваемой на микросхеме и напряжением, подаваемом на светодиод. Эквивалентная схема, на которой показан путь протекания выходного тока порта приведена на рисунке 3. Как видно из этой схемы именно этот ток используется для зажигания светодиода. Для умощнения выводов порта можно применить транзисторный ключ, показанный на рисунке 2. Обратите внимание, что база транзистора подключена непосредственно к выводу порта. Это стало возможным только благодаря использованию в схеме порта генератора тока в верхнем плече выходного каскада (Схему подключения устройств к портам с TTL выходами можно посмотреть здесь). Если выходного тока достаточно для открывания транзисторного ключа, то резистор R2 не используется. Этот резистор подключается для увеличения базового тока транзисторного ключа. На максимальное значение тока через этот резистор накладываются те же ограничения, что и для непосредственного подключения светодиодного индикатора к выводам порта.


Рисунок 1. Схема подключения светодиодных индикаторов к параллельному порту.
Рисунок 2. Эквивалентная схема подключения светодиодного индикатора к параллельному порту.
Доп. вопрос #7 – “Режимы работы”
- ONCE
Режим насхемной эмуляции, используется для того, чтобы отключить микроконтроллер при включении питании. Режим применяется для тестирования и отладки. Режим не программируется, только аппаратно подать землю на контроллеры, потом RESET – процессор в состоянии “отключено”.
- ORL pcon,#01h
PCON.0 принимает значение “1”, - Включается режим холостого хода.
- ORL pcon,#02h
PCON.1 принимает значение “1”, - Включается режим пониженной мощности.
- ORL pcon,#03h.
МК переходит в режим пониженной потребляемой мощности. Если устанавливаются в 1 и powerdown и idle, то powerdown имеет более высокий приоритет и МК переходит в powerdown. В режиме Powerdown – отключается задающий генератор (нет тактового сигнала), выключается периферия, потребляемый ток падает.
- ANL pcon,#00h
Переход в режим обычно потребляемой мощности, выход из режима холостого хода
Доп. вопрос #9 – “Система команд”
- Система команд. Как изменится состояние PSW после команды orl a, #01h
Команда orl a,#01h записывает в младший бит ACC единицу (логическое ИЛИ). Если в ACC.0 был 0, тогда PSW.0 (С – флаг приоритета) – инвертируется. Если в ACC.0 был 1, то PSW.0 останется прежним, так как содержимое ACC не изменилось.
- Система команд. Как изменится состояние PSW после команды orl p1, a
Ничего не произойдёт, так как логические команды не модифицируют флаги PSW. (Кроме бита P – (PSW P.0 – флаг паритета) значение которого изменяется всеми командами, изменяющими содержимое аккумулятора.) Если бы orl a,P1 – то бит чётности P мог бы измениться.
- Система команд. Как изменится состояние Acc после команды xrl a, #01h
В ACC произойдет инверсия младшего бита. (сложение по модулю 2)
- Система команд. Как изменится состояние Acc после команды anl a, #0FEh
В АСС в младший бит запишется 0 (1*1=1, 0*1=0) (0FEh=1111 1110b)
