이에 따르면 : http://www.8052.com/tutsfr.php, 주소가 8로 나눌 수있는 sfrs는 비트 주소 지정 가능합니다. SETB 또는 CLR과 같은 작업을 수행 할 수 있습니다. 그러나 다른 메모리 주소와 겹치지 않습니까? 예를 들어, P0은 80 시간입니다. 그래서 P0.0은 80h가 될 것이고, P0.1은 81h가 될 것입니다. 그러나 81h는 SP의 주소입니다. 중복되지 않습니까?8051의 일부 sfr이 비트 주소 지정이 가능한 이유는 무엇입니까?
0
A
답변
2
바이트 주소와 비트 주소를 혼동하고 있습니다. 동일한 물리적 위치를 중첩하거나 참조하지 않습니다. 비트 주소를 취하는 명령어 (예 : SETB)는 비트 주소를 비트 주소와 비트 번호로 디코딩하는 방법을 알고 있습니다. 바이트 주소는 비트 주소에서 3 개의 최하위 비트를 마스킹하여 얻습니다. 비트 번호는 최상위 5 비트를 마스킹하여 얻어집니다.
예 : 비트 주소 87h -> 바이트 주소 80h, 비트 # 7
0
P0.0과 P0.1은 8 비트 P0 레지스터의 개별 비트만을 나타냅니다 (내가 이해 한 것부터).
+0
그래도 그들이 주소를 지정할 수 있다면 그들은 결국 주소를가집니다. – Grissiom
설명해 주셔서 대단히 감사드립니다. SFR은 마찬가지입니다. 그러나'SETB 01h'가 있다면? 바이트 주소 # 20 및 비트 # 1이어야합니다. 비트 주소 지정 가능 메모리와 바이트 주소 지정 가능 메모리가 하드웨어 (또는 소개)에 의해 자동으로 처리 될 수있는 다른 메모리 공간에 있다고 말할 수 있습니까? – Grissiom
예, 언급 한대로, 비 SFR (주소 <80h)에 대한 절차는 바이트 주소에 추가 된 20h의 추가 오프셋을 제외하고 동일합니다. 명령어는 내부적으로 주소 지정을 처리하지만, '다른'메모리 공간으로주의 깊게 생각하면 중복됩니다. SETB 01h는 메모리 위치 20h에 # 1 비트를 설정합니다. 주소 20h를 대상으로하는 바이트 주소 지정 MOV 명령으로 덮어 쓸 수 있습니다. MOV 20h, 00h. 그러면 비트 주소 00h에서 07h가 지워집니다. 프로그래머 조심;) – mocj