Учебники

Встроенные системы — регистры

Регистры используются в ЦП для временного хранения информации, которая может быть данными, подлежащими обработке, или адресом, указывающим на данные, которые должны быть извлечены. В 8051 существует один тип данных из 8 битов, от MSB (младший значащий бит) D7 до LSB (младший значащий бит) D0. С 8-битным типом данных любой тип данных больше 8 бит должен быть разбит на 8-битные блоки перед обработкой.

Наиболее широко используемыми регистрами 8051 являются A (аккумулятор), B, R0-R7, DPTR (указатель данных) и PC (программный счетчик). Все эти регистры имеют 8 бит, кроме DPTR и ПК.

Регистры хранения в 8051

Мы обсудим следующие типы регистров хранения здесь —

  • аккумуляторный
  • R зарегистрироваться
  • B зарегистрироваться
  • Указатель данных (DPTR)
  • Счетчик программ (ПК)
  • Указатель стека (SP)

аккумуляторный

Аккумулятор, регистр A, используется для всех арифметических и логических операций. Если аккумулятор отсутствует, то каждый результат каждого вычисления (сложение, умножение, сдвиг и т. Д.) Должен храниться в основной памяти. Доступ к основной памяти медленнее, чем доступ к регистру, такому как аккумулятор, потому что технология, используемая для большой основной памяти, медленнее (но дешевле), чем используемая для регистра.

Регистры «R»

Регистры «R» представляют собой набор из восьми регистров, а именно, R0, R1-R7. Эти регистры функционируют как регистры вспомогательного или временного хранения во многих операциях. Рассмотрим пример суммы 10 и 20. Сохраните переменную 10 в аккумуляторе, а другую переменную 20, скажем, в регистре R4. Чтобы обработать операцию сложения, выполните следующую команду —

ADD A,R4

После выполнения этой инструкции аккумулятор будет содержать значение 30. Таким образом, регистры «R» являются очень важными вспомогательными или вспомогательными регистрами . Аккумулятор сам по себе был бы не очень полезен, если бы не эти «R» регистры. Регистры «R» предназначены для временного хранения значений.

Давайте возьмем другой пример. Мы сложим значения в R1 и R2 вместе, а затем вычтем значения R3 и R4 из результата.

MOV A,R3   ;Move the value of R3 into the accumulator 
ADD A,R4   ;Add the value of R4 
MOV R5,A   ;Store the resulting value temporarily in R5 
MOV A,R1   ;Move the value of R1 into the accumulator 
ADD A,R2   ;Add the value of R2 
SUBB A,R5  ;Subtract the value of R5 (which now contains R3 + R4)

Как видите, мы использовали R5 для временного удержания суммы R3 и R4. Конечно, это не самый эффективный способ вычисления (R1 + R2) — (R3 + R4), но он иллюстрирует использование регистров «R» в качестве способа временного хранения значений.

8-битные регистры

Регистр «B»

Регистр «B» очень похож на Аккумулятор в том смысле, что он может содержать 8-битное (1-байтовое) значение. Регистр «B» используется только двумя инструкциями 8051: MUL AB и DIV AB . Чтобы быстро и легко умножить или разделить A на другое число, вы можете сохранить другое число в «B» и использовать эти две инструкции. Помимо использования инструкций MUL и DIV, регистр «B» часто используется как еще один регистр временного хранения, очень похожий на девятый регистр R.

Указатель данных

Указатель данных (DPTR) — это единственный доступный для пользователя 16-разрядный (2-байтовый) регистр 8051. Регистры Accumulator, R0 – R7 и B являются однобайтовыми регистрами значений. DPTR предназначен для указания на данные. Он используется 8051 для доступа к внешней памяти по адресу, указанному DPTR. DPTR — единственный доступный 16-битный регистр, который часто используется для хранения 2-байтовых значений.

Счетчик программ

Счетчик программ (ПК) — это 2-байтовый адрес, который сообщает 8051, где в памяти находится следующая команда для выполнения. Компьютер запускается в 0000h, когда инициализируется 8051, и увеличивается каждый раз после выполнения инструкции. ПК не всегда увеличивается на 1. Некоторые инструкции могут потребовать 2 или 3 байта; в таких случаях ПК будет увеличен на 2 или 3.

Операции ветвления, перехода и прерывания загружают счетчик программ с адресом, отличным от следующего последовательного местоположения. Активация сброса при включении питания приведет к потере всех значений в регистре. Это означает, что значение ПК при сбросе равно 0, что заставляет ЦП извлечь первый код операции из местоположения ПЗУ 0000. Это означает, что мы должны поместить первый байт кода обновления в местоположение ПЗУ 0000, потому что именно здесь ЦП ожидает найти Первая инструкция.

Указатель стека (SP)

Указатель стека, как и все регистры, кроме DPTR и ПК, может содержать 8-битное (1-байтовое) значение. Указатель стека указывает местоположение, откуда следующее значение должно быть удалено из стека. Когда значение помещается в стек, значение SP увеличивается, а затем значение сохраняется в результирующей ячейке памяти. Когда значение выгружается из стека, оно возвращается из ячейки памяти, указанной SP, а затем значение SP уменьшается.

Этот порядок работы важен. SP будет инициализирован до 07h, когда инициализируется 8051. Если значение помещается в стек одновременно, оно будет сохранено во внутреннем адресе памяти 08h, потому что 8051 сначала увеличит значение SP (с 07h до 08h), а затем сохранит переданное значение в этой памяти адрес (08ч). SP изменяется напрямую с помощью 8051 с помощью шести инструкций: PUSH, POP, ACALL, LCALL, RET и RETI.

ROM Space в 8051

Некоторые члены семейства 8051 имеют только 4 Кбайт встроенного ПЗУ (например, 8751, AT8951); некоторые имеют 8Кб ПЗУ, как AT89C52, а некоторые члены семейства имеют 32Кбайт и 64Кбайт встроенного ПЗУ, такие как Dallas Semiconductor. Следует помнить, что ни один из членов семейства 8051 не может получить доступ к более чем 64 Кбайт кода операции, поскольку счетчик программы в 8051 является 16-разрядным регистром (адрес от 0000 до FFFF).

Первое местоположение программного ПЗУ внутри 8051 имеет адрес 0000H, тогда как последнее местоположение может отличаться в зависимости от размера ПЗУ на чипе. Среди членов семейства 8051 AT8951 имеет $ k байтов встроенного ПЗУ, имеющего адрес памяти от 0000 (первое местоположение) до 0FFFH (последнее местоположение).

ROM Space

Флаговые биты 8051 и регистр PSW

Регистр слова состояния программы (PSW) представляет собой 8-битный регистр, также известный как регистр флага . Он имеет ширину 8 бит, но используется только 6 бит. Два неиспользованных бита являются определяемыми пользователем флагами . Четыре из флагов называются условными флагами , что означает, что они указывают условие, которое возникает после выполнения инструкции. К этим четырем относятся CY (перенос), AC (вспомогательный перенос), P (четность) и OV (переполнение). Биты RS0 и RS1 используются для изменения банковских регистров. На следующем рисунке показан регистр слова состояния программы.

Регистр PSW содержит те биты состояния, которые отражают текущее состояние ЦП.

CY Калифорния F0 RS1 RS0 О.В. п

CY PSW.7 Несут флаг
переменный ток PSW.6 Вспомогательный флаг для перевозки
F0 PSW.5 Флаг 0 доступен пользователю общего назначения.
RS1 PSW.4 Зарегистрировать селектор банка, бит 1
RS0 PSW.3 Зарегистрировать селектор банка, бит 0
О.В. PSW.2 Флаг переполнения
PSW.1 Определяемый пользователем FLAG
п PSW.0 ФЛАГИ Паритета. Устанавливается / сбрасывается аппаратно во время цикла инструкций для указания четного / нечетного числа 1 бита в аккумуляторе.

Мы можем выбрать соответствующий бит регистра банка, используя биты RS0 и RS1.

RS1 RS2 Зарегистрировать банк Адрес
0 0 0 00H-07H
0 1 1 08H-0FH
1 0 2 10H-17H
1 1 3 18H-1FH
  • CY, флаг переноса — этот флаг переноса устанавливается (1) всякий раз, когда происходит перенос из бита D7. На это влияет после 8-битной операции сложения или вычитания. Он также может быть сброшен в 1 или 0 напрямую с помощью такой команды, как «SETB C» и «CLR C», где «SETB» обозначает установленный перенос битов, а «CLR» обозначает чистый перенос.

  • AC, флаг вспомогательного переноса — если во время операции ADD или SUB происходит перенос из D3 и D4, бит AC устанавливается; в противном случае это очищается. Он используется для инструкции для выполнения двоично-десятичной арифметики.

  • P, флаг четностифлаг четности представляет количество единиц только в регистре аккумулятора. Если регистр A содержит нечетное число единиц, то P = 1; и для четного числа 1, P = 0.

  • OV, флаг переполнения — этот флаг устанавливается всякий раз, когда результат операции со знаком слишком велик, что приводит к переполнению старшего бита в знаковый бит. Он используется только для обнаружения ошибок в знаковых арифметических операциях.

CY, флаг переноса — этот флаг переноса устанавливается (1) всякий раз, когда происходит перенос из бита D7. На это влияет после 8-битной операции сложения или вычитания. Он также может быть сброшен в 1 или 0 напрямую с помощью такой команды, как «SETB C» и «CLR C», где «SETB» обозначает установленный перенос битов, а «CLR» обозначает чистый перенос.

AC, флаг вспомогательного переноса — если во время операции ADD или SUB происходит перенос из D3 и D4, бит AC устанавливается; в противном случае это очищается. Он используется для инструкции для выполнения двоично-десятичной арифметики.

P, флаг четностифлаг четности представляет количество единиц только в регистре аккумулятора. Если регистр A содержит нечетное число единиц, то P = 1; и для четного числа 1, P = 0.

OV, флаг переполнения — этот флаг устанавливается всякий раз, когда результат операции со знаком слишком велик, что приводит к переполнению старшего бита в знаковый бит. Он используется только для обнаружения ошибок в знаковых арифметических операциях.

пример

Покажите состояние флагов CY, AC и P после добавления 9CH и 64H в следующей инструкции.

MOV A, # 9CH

ДОБАВИТЬ A, # 64H