8051의이해 8051 의칩구성및 CPU 이해 메모리구조 8051 의신호 포트구성 dolicom@naver.com http://blog.naver.com/dolicom
8051 의특징 4K 바이트의프로그램메모리내장 4개의레지스터뱅크를포함한 128바이트데이터메모리 사용자지정가능한 128비트플래그 불 (boolean) 대수처리기능 8비트단위의 4개의입. 출력포트 (P0,P1,P2,P3) 2개의 16비트타이머 / 카운터 다중모드로사용할수있는고속직렬포트 우선순위설정가능한 4개의인터럽트 64K 바이트까지확장가능한프로그램데이터메모리 아이들 (idle) 모드와파워다운모드기능
8051 패밀리 기능 8051 8052 8031 ROM (program) 4K 8K 0K RAM ( 데이터 ) 128 256 128 Timer 2 3 2 I/O 핀 32 32 32 Serial 포트 1 1 1 인터럽트소스 6 8 6
8051 의이해 8051 내부구조
8051 의내부구성 외부인터럽트 Interrupt Control ROM 프로그램 RAM Timer/Counter Timer 1 Timer 0 카운터 입력 CPU OSC Bus Control 4 I/O 포트 Serial Port P0 P1 P2 P3 TxD RxD Address/Data
CPU - 8051 제어장치 (CU : Control Unit) A,BB 레지스터 일반레지스터 (R0~R7) PSW (Flag) PC (16 비트프로그램카운터 ) SP (8 비트내부데이터데이터포인터 ) 데이터포인터 (DPTR)
제어장치 CU Control Unit 명령을읽어해독하고명령이실행될때까지 CPU 의내부신호를만든다. CPU 제어신호 소스 / 목적지오퍼랜드를제어하는신호 MOV A,#10 -> 10 을읽어레지스터에저장 산술논리연산장치의동작을제어하는신호 ADD A,#10 -> A 레지스터와 10( 오퍼랜드임시버퍼 ) 와더하기위한 ALU 제어신호발생
PC 프로그램카운터 프로그램메모리에저장되어있는명령의실행을위한위치를가리키는 16비트레지스터 실행시킬명령이기억되어있는프로그램메모리의번지를가리킨다. CPU 리셋 (RESET) 신호에의해 0x00000000 으로지정됨. 리셋에의해프로그램메모리의 0000H 번지부터실행
ALU (Arithmetic Logic Unit) 8 비트산술논리연산장치 덧셈 +, 뺄셈 8/16비트 +1 증가, 8비트 -1 감소 BCD (Binary Coded Decimal) 10진조정 곱셈나눗셈 AND, OR, XOR, 로테이트 (Rotate) 바이트컴플리먼트 (1의보수 ), 비트컴플리먼트 니블 (nibble: 4비트 ) 단위의데이터교환 비트단위처리기능 (Boolean 대수처리기능 ) 조건점프의판단기능
레지스터및 PSW A(accumulator) 산술논리연산명령에서연산자로사용 - 명령이끝나면결과기억 로테이트, 패리티검사, 제로테스터명령에사용 간접점프및프로그램읽기명령에서오프셋 (offset) 으로사용 외부데이터메모리와데이터전송 프로그램메모리에서데이터읽을때
PSW (Program Status Word) ALU을통해실행되는결과의플래그상태저장 직접영향을주는명령 ADD, SUBB, RRC, 모든명령이영향을주지않는다 : MOV 사용자플래그 : F0 레지스터뱅크선택 (RS1, RS0)
PSW 구성 CY AC F0 RS1 RS0 OV -- P PSW.0 CY : 캐리플래그 (Carry Flag) PSW.1 AC : 보조캐리플래그 (Auxiliary carry flag) PSW.2 F0 : 사용자플래그 PSW.3 RS1 : 뱅크선택상위비트 1 PSW.4 RS0 : 뱅크선택상위비트 0 PSW.5 OV : 오버플로플래그 (Overflow Flag) PSW.6 PSW.7 P : 패리티플래그 (odd/even parity) RS1 RS0 레지스터뱅크 주 소 0 0 0 00H-07H07H 리셋 0 1 1 08H-0FH 1 0 2 10H-17H 1 1 3 18H-1FH
B, SP B 레지스터 8비트곱셈 / 나눗셈 A레지스터와함께 16비트레지스터로사용 곱셈 / 나눗셈의결과저장 SP ( 스택포인터 : Stack Pointer) 8비트로스택의메모리번지를가리킴 (RAM) 8051 의내부메모리사용 리셋후 08H 번지로지정 프로그래머에의해변경하여사용할수있다. 스택에저장 (PUSH) 할때주소값 1증가하고꺼낼때 1 감소
DPTR (Data Pointer) 16 비트레지스터 상위 8 비트 (DPH) 와하위 8 비트 (DPL) 로사용가능 외부데이터메모리에서전송할때주소값으로사용 어드레스포인터 간접점프명령에서점프할주소값저장 프로그램읽기명령에서베이스 (base) 레지스터
8051 의이해 8051 메모리구조
8051 메모리구조 FF 80 7F 30 2F 20 1F 18 17 10 0F 08 07 00 특수기능레지스터 (SFR) 사용자데이터메모리영역 비트단위처리영역 뱅크 3 (R0~R7) 뱅크 2 (R0~R7) 뱅크 1 (R0~R7) 뱅크 0 (R0~R7) 내부 RAM & SFR 0FFF 0000 4K(8051) 내부 ROM EA=1 외부 ROM 64K EA=0 프로그램메모리 FFFF 60K 1000 0FFF 외부 RAM 64K FFFF 64K 0000 0000 데이터메모리
8051 의메모리의구성 I 내부메모리 특수영역내부 RAM 일반레지스터 일반변수영역 ( 사용자데이터영역 ) 특수기능레지스터 (Timer, 시리얼통신제어 ) 비트단위처리변수영역 프로그램영역 4K 바이트 (8051) 프로그램저장 다양한용량의패밀리칩이있음
8051 의메모리의구성 II 외부메모리 외부프로그램메모리확장 ( 외부 ROM) 64K 바이트까지확장가능한프로그램메모리 8051 의경우내부 4K 바이트는 EA 핀으로제어 EA=0 : 전영역을외부 ROM 으로 0x0000~0xFFFF0000 0 EA=1 : 내부 ROM (0x0000~0x0FFF)+ 외부 ROM(0x1000~0xFFFF) 외부데이터메모리 내부데이터메모리와별도로 64K 바이트까지확장가능 별도의명령에의해외부데이터억세스 NOVX A,@DPTR
8051 의이해 내부 RAM - 일반레지스터 - 비트어드레스영역 - 사용자데이터영역과스택 - SFR
8051 의메모리의구성 CPU 일반레지스터 R0~R7 R7 일반레지스터 4뱅크 8개의일반데이터저장용레지스터 4 개의뱅크로구성 뱅크설정은 PSW 의 RS1:RS0 비트를설정하면, 이 R0~R7 은해당메모리에할당된다. RS1:RS0에의해뱅크가할당되면레지스터 R0~R7 R7 은해당뱅크로주소값이설정된다.
뱅크의개념 MOV A,R0 PSW RS[1:0]=00 RS[1:0]=01 RS[1:0]=10 RS[1:0]=11 R7 R6 R5 R4 R3 R2 R1 07 06 05 04 03 02 01 R7 0F R7 17 R6 R5 R4 R3 R2 R1 0E 0D 0C 0B 0A 09 R0 00 R0 08 R0 10 R0 18 뱅크 0 뱅크 1 뱅크 2 뱅크 3 R0 : 00 R0 : 08 R0 : 10 R0 : 18 R6 R5 R4 R3 R2 R1 16 15 14 13 12 11 R7 R6 R5 R4 R3 R2 R1 1F 1E 1D 1C 1B 1A 19
MOV A,R0 뱅크 0 뱅크 1 뱅크 2 뱅크 3............ R2 03 02 R2 4D 0A R2 B5 12 R2 B5 1A R1 D3 01 R1 C3 09 R1 A5 11 R1 44 19 R0 34 00 R0 13 08 R0 22 10 R0 30 18 PSW R0 RS[1:0]=00 RS[1:0]=01 RS[1:0]=10 RS[1:0]=11 34 13 22 30 실행전 A 11 22 33 44 실행후 A 34 13 22 30
뱅크의사용예 ISR (Interrupt Service Rountine) 인터럽트서비스루틴-인터럽트시처리프로그램 인터럽트가발생하면인터럽트서비스루틴에서사용하는모든레지스터를스택에대피해야하는데, 뱅크를변경하면기존의뱅크 R0~R7 R7 의레지스터값은유지되고다른뱅크에값이변경된다. R2 R1 뱅크 0 뱅크 1 A,B,PSW 스택에...... 대피 03 02 ISR의시작에서 R2 4D 뱅크변경 D3 01 R1 C3 R0 34 00 R0 13 08 0A 09 * 리셋후초기에 SP=0FH 로변경 ISR 에서사용
비트어드레스영역 내부 RAM 0x20~0x2F 0 2F 16 바이트 각비트별로변수선언가능 16x8=128 128 개의비트변수선언가능 비트번호 0x00~0x7F로선언 C 에서선언과사용 bit keyst; - 0과 1의 boolean 상태 bit save, cy; save = P14 ^ P15; - 포트 1 의 4 와 5 핀의상태를 XOR 한다 cy = (P14 & P15) (save & P16);
사용자데이터영역과스택 사용자데이터영역 사용자가정의하여사용하는일반메모리 0x30~0x7F 0 메모리 C에서 char, int 등의일반변수를선언하면이영역에할당 스택 스택은 SFR 외의영역에임의의위치에설정할수있다. 리셋에의 SP=0x07로 0x08 부터사용 MOV SP,#60 명령으로메모리위치변경이가능 C에서는내부적으로처리된다. Startup.a51에정의되어있다.
SFR 특수기능레지스터 내부 RAM 0x80 ~ 0xFF에할당 CPU 동작과관련된레지스터 A,B,PSW, SP, DPTR 포트 (Port) : P0, P1, P2, P3 Interrupt : IP, IE Power Control : PCON Timer : TCON,TMOD,TL0, TL1, TH0,TH1 Serial 통신 : SCON, SBUF
외부데이터메모리 내부 RAM 과별도 64K 바이트까지가능 외부에데이터를저장한다. MOVX 명령으로전송 MOVX A,@DPTR MOVX @DPTR,A C 에서 #define SELECT (*(unsigned char*)(0x2fc48)) SELECT = 0x9e; #define ADDR (*(unsigned ( char xdata *)(0x22000)) ADDR = 0x31; C = *((char xdata *) 0x27000);
프로그램메모리 8051 은내부 4K 바이트 ROM 0x0000~0x0FFF 외부프로그램메모리가능 (64K 바이트 ) 내부 ROM과외부 ROM이있을경우내부의 4K 바이트 ROM을선택가능 0FFF 0000 EA=1 4K(8051) 내부 ROM 사용 외부 ROM 60K 외부 ROM 4K 사용않함 FFFF 1000 0FFF 0000 0FFF 0000 EA=0 4K(8051) 내부 ROM 사용않함 외부 ROM 64K FFFF 1000 0FFF 0000 프로그램메모리 프로그램메모리
C51 에서사용하는메모리형 C51 에서사용하는메모리형과포인터값 터 메모리형포인터설명 값 idata 1 간접액세스가능한내부 RAM 0x00~0x7F xdata 2 외부데이터메모리 0x0000~0xFFFF pdata 3 data 4 페이지화된외부데이터메모리 0x00~0xFF 직접액세스가능한내부데이터 0x00~0x7F 0x7F code 5 프로그램메모리 (64K 0x0000~0xFFFF)
파워절약모드 8051 의파워절약모드 아이들모드 (idle mode) 파워다운모드 PCON 으로설정한다. IDL=1 : 아이들모드 PD=1 : 파워다운모드 IDL=1, PD=1 : 파워다운모드 PCON 0x87 7 6 5 4 3 2 1 0 - - - SMOD GF1 GF0 PD IDL
XTAL2 XTAL1 8051 OSC 클럭발생회로 인터럽트로직 시리얼포트 타이머 CPU PD IDL
아이들모드 (Idle Mode) 타이머 / 시리얼인터럽트에의해아이들모드빠져나온다. ISR에서 IDL을클리어하여보통상태로 시스템쉬지있다가외부입력이들어오면응답 시스템초기설정 이벤트가발생할때까지대기하여파워절약 이벤트시인터럽트요청 -> ISR 로들어간다. ISR 에서 IDL 클리어하여처리하고 다시 IDL 로들어간다.
파워다운모드 클럭발진자체를정지하여파워다운에서빠져나오려면리셋밖에는없다. 데이터메모리와레지스터값유지 시스템이상시내부데이터 RAM 보존 데이터메모리는백업배터리가연결되어데이터메모리는백업배터리가연결되어있어야하며, 전원감시가필요
파워다운모드시진행절차 시스템을초기설정하고프로그램실행 전원이상장치를계속감시 전원이상발생하면내부데이터메모리를백업배터리가있어데이터보존이가능한외부메모리로옮김 CPU는 PD를 1로셋하여파워다운모드로들아감 파워다운모드는하드웨어리셋으로해제
8051 의이해 8051 핀기능및인터페이스
8051 칩구조 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 RST (RXD)P3.0 (TXD)P3.1 (INT0)P3.2 (INT1)P3.3 (T0)P3.4 (T1)P3.5 (WR)P3.6 (RD)P3.7 XTAL2 XTAL1 GND 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 8051 (8031) 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 Vcc P0.0(AD0) P0.1(AD1) P0.2(AD2) P0.3(AD3) P0.4(AD4) P0.5(AD5) P0.6(AD6) P0.7(AD7) EA/VPP ALE/PROG PSEN P2.7(A15) P2.6(A14) P2.5(A13) P2.4(A12) P2.3(A11) P2.2(A10) P2.1(A9) P2.0(A8)
8051 의핀기능 포트의구조및기능 RESET 리셋 ALE (Address Latch Enable) PSEN EA XTAL1, XTAL2 전원 : VCC(+5V), VSS(GND)
8051 핀 전원과클럭발진 Vcc(40 핀 ): 칩에 Vcc 전압을공급한다. +5V 전원. GND(20 핀 ):GND 클럭 : XTAL1 / XTAL2(19,18 핀 ) 단순한크리스탈발진기을 XTAL1 과 XTAL2 에연결 외부에서발진클럭을 XTAL1 에만공급
클럭의발진방법 1 CPU 는이클럭에맞추어동작. C2 30pF C1 30pF XTAL1 XTAL2 GND 발진회로 CPU
외부클럭을사용 외부에서완전한클럭을만들어공급 Vcc CPU 클럭 발진회로 XTAL1 XTAL2 사용하지않음 발진회로사용하지않음 GND CPU
Machine Cycle 한명령이실행되기까지의전체시간 Fetch -기계어명령읽기 Decode - 기계어기능해석 Execute - 실행 Store - 메모리에저장 ADD A,R0
외부데이터와클럭-MOVX 예
머신사이클 한명령이실행되는시간 (12 클럭 ) 주파수와시간과는 시간 = 1 주파수 주파수 = 1 시간 XTAL = 11.0592 MHz 11.0592 MHz / 12 = 921.6 khz machine cycle = 1 / 921.6 khz = 1.085 μs XTAL = 16 MHz. 16 MHz / 12 = 1.333 MHz; machine cycle = 1 / 1.333 MHz = 0.75 μs
RESET 리셋 RST(9 핀 ):reset Active high : 리셋시 1 을입력 CPU 동작시적어도 2 머신사이클동안 1로유지 파워온리셋 (Power-on on reset) 5V R 4.7K ViR VRESET RESET C 4.7uF 74HC14
74HC14 VIN VOUT
RESET Time R 과 C 의값에따라시간이결정된다. ViR 5V ViH R 4.7K VRESET ViL ViR 0 t C 4.7uF 74HC14 V14in 74LS14 내부입력처리 쉬미트트리거 VRESET RESET time=2 머신사이클이상
리셋 (Reset) 시초기값설정 레지스터 PC ACC B PSW SP DPTR 리셋값 0000 0000 0000 0000 0007 0000 모든 RAM 0 으로채움
8051 외부데이터액세스신호 /EA(31핀):External Access 외부프로그램메모리사용 8031, 8032 은 ROM 이없어의미없다. /EA = 0 외부프로그램메모리사용 /EA = 1 내부프로그램메모리사용 /PSEN(29핀):Program Store Enable 프로그램메모리를읽고있다는의미 ROM의 /CS 및 /OE 신호를만드는데사용 ALE(30핀 ):Address Latch Enable - Active high 포트 0 어드레스버스와데이터버스양쪽다사용하기때문에구분필요 ALE=1일때, 포트0은어드레스버스이므로 74LS373에래치하여하위8비트주소값으로사용
8051 의이해 8051 포트 P0~P ~P3
Read-Modify-Write Instruction 한명령에의해데이터를읽고, 조작한후다시쓰는명령 ANL (AND) ANL PI, A ORL (OR) ORL P2, A XRL (XOR) XRL P3, A JBC ( 조건점프 ) JBC P1.1,LABEL CPL ( 비트보수 ) CPL P3.0 INC (1증가) INC P2 DEC (1감소) DEC P2) DJNZ (0 일때까지반복 ) DJNZ P3, LABEL MOV PX.Y,C (Port X.Y에캐리값을세트 ) CLR PX.Y (Port X.Y 클리어 ) SETB PX.Y (Port X.Y 에 1 세트 )
Read-Modify-Write 예 Mnemonics ANL ORL XRL JBC PX.Y, TARGET CPL INC DEC DJNZ PX, TARGET MOV PX.Y,C CLR PX.Y SETB PX.Y Example ANL P1,A ORL P1,A XRL P1,A JBC P1.1, TARGET CPL P1.2 INC P1 DEC P1 DJNZ P1,TARGET MOV P1.2,C CLR P1.3 SETB P1.4
8051 Port 구조
포트 0 (P0.00 ~ P0.7) 8비트오픈드레인 (Open Drain) 일반포트사용 외부메모리사용않할때 입력으로사용할때는 1 을출력하고사용 외부메모리사용할때하위어드레스 A0~A7로사용 ALE 1 일때하위어드레스임을나타내 ALE=1 일때하위어드레스임을나타내므로 74LS373 으로래치하여사용
포트 0 - 일반포트동작구조 래치읽기 TB2 CPU 내부데이터버스 D Q P1.X P0.X 핀 래치에쓰기제어신호 Clk Q M1 핀입력 TB1
포트 0 출력으로사용 오픈드레인 풀업저항필요 Vcc 10 K 8051 P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7 Port 0
포트 0 출력구조 래치읽기 TB2 +5V 10K CPU 내부데이터버스래치에쓰기제어신호 D Q P1.X Clk Q M1 P0.X 핀입력 TB1
포트 0 출력 출력 0 래치읽기 MOV P1,#0FFH CPU 내부데이터버스래치에쓰기제어신호 0 0 TB2 D Q P1.X Clk Q 0 1 CLR P0.0 0 On M1 +5V P0.X 10K 0 출력 핀입력 0 TB1
포트 0 출력 출력 1 래치읽기 MOV P1,#0FFH 0 TB2 +5V 10K CPU 내부데이터버스래치에쓰기제어신호 1 D Q P1.X Clk Q 1 0 Off M1 P0.X 1 출력 핀입력 0 TB1
포트 0 입력으로사용 래치읽기 MOV P0,#0FFH TB2 초기설정으로 1을출력한다. 시스템이시작할때한번한다. P0.x = 1; P0 = 0xFF; CPU 내부데이터버스래치에쓰기제어신호 1 D Q P1.X Clk Q 1 0 Off M1 P0.X 핀입력 MOV A,P0 1 TB1 입력명령으로핀의상태를읽는다 unsigned char pst; pst = P0;
포트 0 외부메모리의버스로사용 외부메모리를액세스하기위해서는포트0는주소하위8비트와데이터비트로사용한다. 입출력을위한풀업저항은필요없다. ALE, /PSEN, /RD, /WR 신호와함께 ROM 과 RAM 의제어신호를만든다.
외부 ROM PSEN ALE G 74LS373 OE CS P0.0 P0.7 D A0 A7 D0 EA D7 P2.0 A8 P2.7 A15 8051 ROM
외부 ROM 읽기 step1 EA PSEN ALE P0.0 P0.7 1. 8051 읽기 2. 74373 에하위신호보냄 8비트주소값을저장 G D 74LS373 Address 하위 8 비트 OE CS A0 A7 D0 D7 Address 상위 8비트 P2.0 A8 P2.7 A12 8051 ROM
외부 ROM 읽기 step2 PSEN ALE P0.0 P0.7 2. 74373에하위 8 비트주소값을저장되어있다. G 74LS373 D Address OE CS A0 A7 D0 EA 3. ROM 은데이터보낸다. D7 P2.0 P2.7 A8 A12 8051 ROM
외부프로그램메모리읽기 ALE PSEN PORT0 명령어 A0-A7 명령어 IN A0-A7 PORT2 A8-A15 OUT 74LS373 에래치 A0-A7 LATCH OUT
외부 RAM 외부 RAM PSEN CS WR RD WE OE 8051 ALE P0.0 P0.7 G D 74LS373 A0 A7 D0 EA D7 P2.0 A8 P2.7 A15
외부 RAM 쓰기 MOVX @DPTR,A 8051 PSEN 1 0 WR 0 0 RD 1 1 ALE G 74LS373 P0.0 D P0.7 CS WE OE A0 A7 외부 RAM D0 D7 P2.0 A8 P2.7 A15
외부데이터메모리쓰기 ALE PSEN WR PORT0 명령어 A0-A7 DATA OUT A0-A7 PORT2 A8-A15 OUT 74LS373 에래치 A0-A7 latch RD = 1
외부데이터메모리쓰기
외부 RAM 읽기 MOVX A,@DPTR PSEN 1 0 WR 1 1 RD 0 0 외부 RAM CS WE OE 8051 ALE P0.0 P0.7 G D 74LS373 A0 A7 D0 D7 P2.0 A8 P2.7 A15
외부데이터메모리읽기 ALE PSEN RD PORT0 명령어 A0-A7 A7 DATA IN A0-A7 A7 PORT2 A8-A15 A15 OUT 74LS373 에래치 A0-A7 LATCH OUT WR = 1
포트 1 P1.0 ~ P1.7 8 비트양방향입출력단자 내부풀업되어있다 외부저항이필요없다 범용입출력으로사용한다.
포트 1 의구조 래치읽기 TB2 Vcc Load(L1) CPU 내부데이터버스 D Q P1.X P1.X 핀 래치에쓰기제어신호 Clk Q M1 핀입력 TB1
포트 1 출력 1 을했을때 래치읽기 1. 핀에 1 을출력 MOV P1,#0FFH CPU 내부데이터버스 래치에쓰기제어신호 1 Z 0 TB2 D Q P1.X Clk Q 1 0 Vcc Load(L1) Off M1 2. 출력 Vcc P1.X 핀 핀입력 Z 0 TB1
포트 1 출력 0 을했을때 래치읽기 1. 핀에 0 을출력 MOV P1,#00H CPU 내부데이터버스 래치에쓰기제어신호 0 Z 0 TB2 D Q P1.X Clk Q 0 1 On Vcc Load(L1) 0 P1.X핀 2. 출력 GND M1 핀입력 Z 0 0 TB1
포트 1 입력 1 래치읽기 1. 핀에 1 출력 MOV P1,#0FFH CPU 내부데이터버스 래치에쓰기제어신호 1 Z 0 TB2 D Q P1.X Clk Q 1 0 Vcc Load(L1) Off M1 2. MOV A,P1 외부핀 =High 1 P1.X 핀 핀입력 1 1 1 TB1
포트 1 입력 0 래치읽기 1. 핀에 1 출력 MOV P1,#0FFH CPU 내부데이터버스 래치에쓰기제어신호 Z 0 TB2 1 D Q 1 P1.X Clk 3. 내부버스로전달 0 0 TB1 1 핀입력 Q 0 Vcc Load(L1) Off M1 0 2. MOV A,P1 외부핀 =0V P1.X 핀
포트프로그램 ; 초기설정과정 MOV A,#0FFH ;A=11111111B MOV P1,A ;P1을입력으로설정 ; 포트로부터입력하기 BACK: MOV A,P1 ; 포트에서읽어 A로 MOV P2,A ; P2에출력 SJMP BACK ; 반복
C 에서의사용 #include <win51.h> void init_port() { P1 = 0xFF; - 포트를입력으로하기위해초기값을설정 } unsigned char pdata; void main() { init_port(); while (1) } { } pdata = P1; P2 = pdata ;
Read-Modify-Write 명령어실행 MOV P1,#55H ;P1=01010101 ORL P1,#0F0H ;P1=11110101 11110101 래치읽기 CPU P1.7=0 OR 1 CPU 내부데이터버스래치에쓰기제어신호 0 0 1 1 TB2 D Q 0 1 P1.7 Clk Q 1 0 Vcc Load(L1) M1 P1.7=0 P1.7=1 P1.7 핀 핀입력 Z 0 TB1
포트 2 P2.0 ~ P2.7 8 비트양방향입출력단자 내부풀업되어있다 외부저항이필요없다 범용입출력으로사용한다. 외부메모리사용할때는 A8~A15 로사용
포트 3 P3.0 ~ P3.7 8비트양방향입출력단자 내부풀업되어있다 다른기능과선택적으로사용 시리얼통신신호 :RxD, TxD 외부인터럽트신호 :/INT0, /INT1 타이머의클럭입력 :T0, T1 외부메모리액세스신호 :/WR, /RD
포트 3 의다른기능신호 P3 비트 P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7 기능 RxD TxD INT0 INT1 T0 T1 WR RD 핀번호 10 11 12 13 14 15 16 17