1.서론저번 주에는 8051 구조에 대해 알아보았다. 이번에는 사용자가 프로그램하여 직접적으로 액세스가 가능한 메모리 구조에 대해 알아본다. 8051에 대한 프로그램밍에 있어서 가장 중요한 부분은 메모리의 전체적 구조와 그 역할이므로 이 조사는 아주 중요하다고 생각된다.저번의 조사와 가끔 겹치는 부분도 있지만 여기서는 더욱 자세한 조사가 필요하다고 생갓된다.2. 8051 메모리 구조8051은 프로그램 메모리 영역과 데이터 메모리 영역을 각각 가진다.프로그램 메모리는 ROM영역이며 64K 바이트의 어드레스 공간을 가질 수 있다. 그리고 8051은 하위 4K 바이트 ROM 칩이 내장되어 있다.데이터 메모리는 RAM 영역으로 128바이트의 칩 내부 RAM, 128 바이트의 특수기능 레지스터(SFR) 와 64K의 칩 외부 메모리로 구성된다.프로그램 메모리와 데이터 메모리는 각각 별도의 주소 공간을 가진다. 따라서 최대 128K 바이트(64 ROM+64 RAM)까지 주소 공간을 확장해서 사용할수 있다.3.1 프로그램 메모리 : ROM외부60K바이트외부 64K바이트FFFFH FFFFH1000H내부4K바이트0FFFHOR0000H 0000H*8051 프로그램 메모리.*사용자가 프로그램 내용을 저장하게 되는 프로그램 메모리는 ROM영역으로 64K 까지 연결해서 사용할 수 있다. 64K 바이트의 프로그램 메모리는 내부 ROM영역(4K 내장)과 외부 ROM 영역으로 구성된다.ROM사용 영역은 8051의 EA핀의 전압 레벨에 의해서 결정 될 수 있다. EA(external access)를 'high'로 하면 하위 4K 바이트의 칩 내부 ROM을 사용하고 , 나머지 60K 바이트는 외부 ROM을 사용하게 되며, EA를 'LOW'롤 하면 64K 바이트의 프로그램 메모리 영역은 모두 다 외부 ROM을 사용하게 된다.외부 프로그램 메모리와 데이터 메모리를 사용할 경우 16 비트의 어드레스는 포트 0과 포트 2를 통하여 출력된다. 그러나 , 포트 0은 어드레스 출력용 기능과 데이터 입출력용부 데이터 메모리8051은 내부 데이터 메모리 외에도 64K 바이트의 외부 데이터 메모리(RAM)를 연결하여 사용할 수 있다. 외부 데이터 메모리는 MOVX 명령에 의해서 접근할 수 있다.외부 RAM을 사용할 때의 읽기, 쓰기 제어용 신호는 RD, WR를 사용하며, 2바이트의 주소를 사용한다. 이때 사용하는 주소 지정용 레지스터는 DPTR이며, 데이터용 레지스터는 ACC만 사용 할 수 있다. 또한 256 번지 이하의 주소를 사용 할 경우에는 R0, R1 도 주소용 레지스터로 사용할 수 있다. 포트 0으로 번갈아가면서 출력되는 어드레스/데이터 신호는 어드레스 신호가 출력될 때 ALE='H' 신호가 출력되어서 래치회로가 어드레스 신호를 저장하게 된다.3.2.2 내부 데이터 메모리내부 데이터 메모리는 128 바이트의 칩 내부 메모리와 128 바이트의 특수기능 레지스터(SFR)로 구성되어 있다.각 메모리 공간은 각기 다른 주소 지정방식을 사용한다. 따라서 ,물리적으로 동일한 위치가 아니어도 동일한 주소 값을 가질 수 있으나, 동일한 주소에 대하여 직접, 간접 또는 비트 주소 지정방식에 의해서 물리적으로 다른 위치를 지정하게 된다.*데이터 메모리의 어드레스 지정방식*영역지정방식명령어어드레스 레지스터사용 예하위 128 바이트직접, 간접MOVR0, R1MOV A,20HSFR직접MOVMOV A,80H외부메모리간접MOVXR0, R1, DPTRMOVX A,@DPTR*내부 데이터 메모리*영역주소 범위크기레지스터 뱅크00H-1FH32 바이트비트주소지정영역20H-2FH16 바이트스크래치 패드 영역30H-7FH80 바이트하위 128 바이트 영역은 레지스터 뱅크영역, 비트 주소 지정영역 및 스크래치 패드 영역으로 나뉜다.스크래치패드영역7F7E7D7C7B7A797877767574737271706F6E6D6C6B6A696867666564636261605F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A393 값을 변경하여 레지스터 값을 뱅크가 달리 지정되면 동일한 레지스터 이름을 사용하여도 그 값은 영향을 받지 않게 된다.RS1RS2뱅크영역00뱅크 001뱅크 210뱅크 311뱅크 4(2) 비트 어드레스 영역내부 데이터 RAM의 20H-2FH는 비트 주소 지정영역이다. 이 영역의 메모리는 1 비트 단위의 연산이 가능하기 때문에 제어기 등에서 칩 내부 의 상태나 칩 외부의 상태 값을 1 비트 단위로 저장하거나 연산할 경우 매우 편리하게 사용할 수 있는 영역이다. 이러한 비트 어드레스 영역은 특히 제어기를 구성할 때 사용자의 프로그램을 쉽고 간편하게 해준다. 이영역에서 1비트를 지겅하는 방법은 비트 주소(00H-7FH)를 직접 이용하여 지정하거나, 바이트 주소와 비트 주소(20H.0-2FH.7)를 이용하여 지정하는 방법이 있다.(3) 스크래치 패드 영역30H-7FH 영역은 스크래치 패드 영역이다. 이 영역은 사용자가 임의로 사용할 수 있는 데이터 메모리용으로나 스택 영역으로 사용될 수 있다. 이 영역에서는 직접, 간접 주소 지정방식을 모두 사용할 수 있다.(3) 특수기능 레지스터(SFR)내부 데이터 메모리의 80H-FF영역은 고유한 특성을 제공하는 특수 기능 레지스터(SFR)로서 일반 마이크로 프로세서와 기능적으로 차이가 나는 부분이다.이 영역의 각 SFR은 일반 마이크로 프로세서의 범용 레지스터 기능과 각종 칩 내장 장치들을 위한 각종 기능을 수행한다.SFR 영역내의 16개 어드레스는 비트 및 바이트 어드레싱을 사용 할수 있으며, 이러한 사용 가능한 비트 어드레싱의 SPR은 어드레스가 0H 또는 8H 끝나는 어드레스이어야만 한다.*특수 기능 레지스터*기호설명주소기호설명주소*ACC누산기E0H*TCON타이머/카운터 제어 레지스터88HBBFP지스터F0HTH0타이머/카운터0 상위바이트8CH*PSW프로그램 상태 레지스터D0HTL0타이머/카운터0 상위바이트8AHSP스택 포인터81HTH1타이머/카운터0 상위바이트8DHDPTR데이터 포인터 레지스터:DPH83HTL1타이머/카운터0 로 표현b. B 레지스터곱셈 및 나눗셈에서 사용되는 연산용 레지스터c. PSW(program status word)프로그램 상태 레지스터인 PSW 는 CPU의 현재 상태를 표시한다.CYACF0RS1RS0OV-PMSB LSB.CY PSW.7 : CARRY FLAG덧셈/뼁셈 및 로테이트 명령을 I 바이트 이상 확장하여 실행할 경우 계산의 결과가 최고 비트에 올림수 즉 CARRY, 또는 BORROW가 발생되면 세트 된다..AC PSW.6 : 보조 CARRY FLAG덧셈/뺄셈에서 3비트째의 CARRY 또는 BORROW 가 발생하면 세트된다. 보조 캐리는 BCD 연산에서 자주 사용한다..F0 PSW.5 : 일반용도사용자가 임의로 사용할 수 있는 플래그.RS1 PSW.4 : 레지스터 뱅크 선택 비트 1.RS2 PSW.3 : 레지스터 뱅크 선택 비트 0RS1RS2뱅크지정00뱅크 001뱅크 210뱅크 311뱅크 4.OV PSW.2 : OVER FLOW FLAG부호 있는 수의 덧셈/뺄셈에서 -128∼+127을 넘게되 면 세트되며 곱셈명령에 서 F로를 넘으면 세트된다. 나눗셈에서 분모(제수) 가 0 인 경우 세트된다..P PSW.0 : PARITY FLAG논리 연산시 어큐뮬레이터 레지스터의 패리티가 우수(even) 일 때 1, 기수(odd) 일 때 0으로 세트된다.d. SP(stack pointer)8비트로서 스택을 가리키는 데 사용하는 것으로서 메모리의 특정위치를 정하여 데이터를 읽기, 쓰기를 한다. 스택은 서브루틴을 호출할 경우 리턴번지와 일시적인 변수, 인터럽트처리등에서 상태를 일시적으로 저장하여 인터럽트처리 후 다시 원상태를 복귀한다.e. DPTR (data pointer)상위 8비트(DPH), 하위8비트(DPL)로서 16비트 또는 개별 8비트로서 사용할 수 있는 레지스터로서 레지스터 간접점프에서 점프할 어드레스를 저장하며, 테이블 참조 명령시 베이스 레지스터로 사용한다. 또는 외부 데이터 프로그램 메모리와 데이터 전송시 어드레스 포인터로도 사용한다.(DPL)f. IP운터 1 타이머/카운터 0.GATE : GATE가 '1'일때는 외부에서 카운터를 제어한다. 즉 외부에 카운터 스타트 스위치 와 스톱 스위치가 있다고 생각하면 편리할 것이다. 이 스타트 스위치 역할을 해 주는 것이 INTx에 HIGH 입력을 주는 것이고 (카운트 시작) 스톱 스위 치 역할을 하는 것이 INTx에 LOW 입력을 주는 것이다.(카운터 정지)GATE가 '0'일때는 외부의 핀의 제어명령을 받지 않게 된다..C/T : 타이머/카운터의 선택 비트 C/T=0일 때는 타이머로 C/T=1일 때는 카운터로 작동.M1 : 모드 선택 비트.M0 : 모드 선택 비트M1M2모드000011102113i. TCON(timer control) : 타이머/카운터 레지스터TCON 레지스터는 타이머/카운터 제어에 상위 4비트가 사용되고 외부 인터럽트 제어에 하위 4비트가 사용된다.TF1TR1TF0TR0IE1IT1IE0IT0타이머/카운터제어 인터럽트 제어.TF1 TCON.7 : 타이머1의 오버플로우 플래그. 타이머/카운터 1 오버 플로우 시에 1로 하드웨어 설정되어 마이크로 프로세서가 인터럽트 서비스 프로그램을 실행할 때 하드웨어는 비트를 자동적으로 소거한다..TR1 TCON.6 : 타이머1의 인에이블 비트, 이 비트가 '1' 이면 카운트 시작, '0'이면 카 운트 정지..TF0 TCON.5 : 타이머0의 오버플로우 플래그. 타이머/카운터 0 오버 플로우 시에 1로 하드웨어 설정되어 마이크로 프로세서가 인터럽트 서비스 프로그램을 실행할 때 하드웨어는 비트를 자동적으로 소거한다..TR0 TCON.4 : 타이머0의 인에이블 비트, 이 비트가 '1' 이면 카운트 시작, '0'이면 카운 트 정지..IE1 TCON.3 : INT1에지 플래그 비트, INT이 에지 트리거 모드로 되어있을 때만 입 력펄스의 하강 에지에서 '1'로 되고 인터럽트가 처리될 때'0'으로 된다. 외부 인터럽트가 검출 되었을 때 하드웨어는 이 비트를 설정하고 인터럽트가 처리되었을 때 하드웨어는 자동으로 이 비트를 소거한다한다.