Регистры используются в ЦП для временного хранения информации, которая может быть данными, подлежащими обработке, или адресом, указывающим на данные, которые должны быть извлечены. В 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» в качестве способа временного хранения значений.
Регистр «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 (последнее местоположение).
Флаговые биты 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