Защо някои sfr в ​​8051 са малко адресируеми?

Според това: http://www.8052.com/tutsfr.php , sfrs чийто адрес се дели на 8 са битово адресируеми. Можете да правите неща като SETB или CLR върху тях. Но не се ли припокриват с други адреси на паметта? Имам предвид, например, P0 е след 80 часа. Така че P0.0 ще бъде 80h, P0.1 ще бъде 81h. Но 81h е адреса на SP. Не се ли припокриват?


person Grissiom    schedule 19.06.2010    source източник


Отговори (2)


Бъркате битов адрес с байтов адрес. Те не се припокриват и не се отнасят за едно и също физическо местоположение. Инструкциите, които приемат битови адреси (напр. SETB), знаят как да декодират битовия адрес в байтов адрес и битово число. Байтовият адрес се получава чрез маскиране на 3-те най-ниски бита в битовия адрес. Номерът на бита се получава чрез маскиране на най-високите 5 бита.

напр. битов адрес 87h --> байтов адрес 80h, бит #7

person mocj    schedule 09.07.2010
comment
Благодаря ви много за обяснението. Вярно е за SFR. Но какво, ако SETB 01h? Трябва да бъде байт адрес #20 и бит #1. Мога ли да кажа, че адресируемата памет с битове и адресируемата с байтове памет са в различно пространство на паметта, което може да се обработва автоматично от хардуер (или въведения)? - person Grissiom; 10.07.2010
comment
Да, както отбелязахте, процедурата е същата за не-SFR (адреси ‹ 80h), с изключение на това, че има допълнително отместване от 20h, добавено към байтовия адрес. Инструкциите ще обработват адресирането вътрешно, но внимавайте да ги мислите като „различни“ пространства на паметта, те се припокриват. SETB 01h ще зададе бит #1 в място на паметта 20h. Това може да бъде презаписано от байт адресируема MOV инструкция, която е насочена към адрес 20h. MOV 20h,00h. Това ще изчисти битовите адреси от 00h до 07h. Програмист, пази се ;) - person mocj; 12.07.2010

P0.0 и P0.1 се отнасят само за отделни битове на 8-битовия регистър P0 (доколкото разбирам).

person leppie    schedule 19.06.2010
comment
Да, но ако са малко адресируеми, в крайна сметка ще имат адрес. - person Grissiom; 19.06.2010