80C196KC 에는 CPU기능외에도 다양한 기능이 있다.
그래서 이넘을 CPU라고 부르기보다는 Controller라고 부른다.
이넘은 카운터/타이머, I/O,ADC,HSI,HSO,PWM,인터럽트콘트롤러등을 가진다.
그래서 이넘들을 제어하기 위해서 특별한 레지스터를 이용하는데,
그것이 바로 SFR이다.
SFR를 보면 더 많은 기능을 제어하기 위해서 윈도우라는 개념을 이용해서,
같은 번지에 다수의 레지스터를 할당한다.
15H번지에는 IOS2,IOC0가 할당 되어있고,
16H번지에는 IOS1,IOC1,PWM1_CONTROL이 할당되어 있다.
이때 WSR상태와 읽기/쓰기 상태에 따라 레지스터를 선택되어진다.
위에서 예로든 15H번지 같은 경우
WSR=0 일때, 읽을때는 IOS0가 쓸때는 IOC0가 선택된다.
17H |
IOS2 |
PWM_CONTROL |
PWM2_CONTROL |
PWM_CONTROL |
IOS2 |
16H |
IOS1 |
IOC1 |
PWM1_CONTROL |
IOC1 |
IOS1 |
15H |
IOS0 |
IOC0 |
RESERVED |
IOC0 |
IOS0 |
14H |
WSR |
WSR |
WSR |
WSR |
WSR |
13H |
INT_MASK1 |
INT_MASK1 |
INT_MASK1 |
INT_MASK1 |
INT_MASK1 |
12H |
INT_PEND1 |
INT_PEND1 |
INT_PEND1 |
INT_PEND1 |
INT_PEND1 |
11H |
SP_STAT |
SP_CON |
RESERVED |
SP_CON |
SP_STAT |
10H |
PORT2 |
PORT2 |
RESERVED |
RESERVED |
RESERVED |
0FH |
PORT1 |
PORT1 |
RESERVED |
RESERVED |
RESERVED |
0EH |
PORT0 |
BAUD RATE |
RESERVED |
RESERVED |
RESERVED |
0DH |
TIMER2(HI) |
TIMER2(HI) |
RESERVED |
T2CAPTURE(HI) |
T2CAPTURE(HI) |
0CH |
TIMER2(LO) |
TIMER2(LO) |
IOC3 |
T2CAPUTRE(LO) |
T2CAPUTRE(LO) |
0BH |
TIMER1(HI) |
IOC2 |
RESERVED |
IOC2 |
TIMER1(HI) |
0AH |
TIMER1(LO) |
WATCHDOG |
RESERVED |
WATCHDOG |
TIMER1(LO) |
09H |
INT_PENT |
INT_PEND |
INT_PEND |
INT_PEND |
INT_PENT |
08H |
INT_MASK |
INT_MASK |
INT_MASK |
INT_MASK |
INT_MASK |
07H |
SBUF(Rx) |
SBUF(Tx) |
PTSSRV(HI) |
SBUF(Tx) |
SBUF(Rx) |
06H |
HSI_STATUS |
HSO_COMMAND |
PTSSRV(LO) |
HSO_COMMAND |
HSI_STATUS |
05H |
HSI_TIME(HI) |
HSO_TIME(HI) |
PTSSEL(HI) |
HSO_TIME(HI) |
HSI_TIME(HI) |
04H |
HSI_TIME(LO) |
HSO_TIME(LO) |
PTSSEL(LO) |
HSO_TIME(LO) |
HSI_TIME(LO) |
03H |
AD_RESULT(HI) |
HSI_MODE |
AD_TIME |
HSI_MODE |
AD_RESULT(HI) |
02H |
AD_RESULT(LO) |
AD_COMMAND |
RESERVED |
AD_COMMAND |
AD_RESULT(LO) |
01H |
ZERO_REG(HI) |
ZERO_REG(HI) |
ZERO_REG(HI) |
ZERO_REG(HI) |
ZERO_REG(HI) |
00H |
ZERO_REG(LO) |
ZERO_REG(LO) |
ZERO_REG(LO) |
ZERO_REG(LO) |
ZERO_REG(LO) |
|
when read |
when write |
read & write |
when read |
when write |
wsr=0 |
wsr=1 |
wsr=15 |