5. 特殊功能寄存器SFR
本手册中在对寄存器进行描述时可能使用了下列缩写:
缩写词 | 描述 |
---|---|
RO | 表示访问类型:只读 |
WO | 表示访问类型:只写,读取的值无效 |
RW | 表示访问类型:可读可写 |
h | 以其结束表示16进制数 |
b | 以其结束表示2进制数 |
5.1 SFR简介和地址分布
CH559用特殊功能寄存器SFR和xSFR控制、管理设备以及设置工作模式。
SFR占用内部数据存储空间的80h-FFh地址范围,只能通过直接地址方式的指令访问。其中地址为x0h或x8h的寄存器是可以按位寻址的,这样就能避免访问某个具体的位时而修改其他位的值;其它地址为非8倍数的寄存器只能按字节访问。
部分SFR仅在安全模式下才能写入数据,而在非安全模式下是只读状态,例如:GLOBAL_CFG、PLL_CFG、CLOCK_CFG、SLEEP_CTRL、WAKE_CTRL。
部分 SFR 具有一个或者多个别名,例如:SPI0_CK_SE/SPI0_S_PRE、UDEV_CTRL/UHUB0_CTRL、UEP1_CTRL/UH_SETUP、UEP2_CTRL/UH_RX_CTRL、UEP2_T_LEN/UH_EP_PID、UEP3_CTRL/UH_TX_CTRL、 UEP3_T_LEN/UH_TX_LEN、P5_PIN/P4_CFG。
部分地址对应于多个独立的 SFR,例如:TL2/T2CAP1L、TH2/T2CAP1H、SAFE_MOD/CHIP_ID、T3_COUNT_L/T3_CK_SE_L、T3_COUNT_H/T3_CK_SE_H、SER1_FIFO/SER1_RBR/SER1_THR/SER1_DLL、 SER1_IER/SER1_DLM、SER1_IIR/SER1_FCR、SER1_ADDR/SER1_DIV、ROM_CTRL/ROM_STATUS。
xSFR占用外部数据存储空间xdata类型的2440h-298Fh地址范围,或者pdata类型的40H-8Fh 地址范围。xSFR只能通过MOVX指令间接寻址按字节访问,默认是基于DPTR指针;但在bXIR_XSFR 置1后,还可以用更快捷的R0或者R1作为pdata类型指针访问名称为pU*和pLED_*的xSFR。
部分xSFR具有一个或者多个别名,例如:UEP2_3_MOD/UH_EP_MOD、UEP2_DMA_H/UH_RX_DMA_H、UEP2_DMA_L/UH_RX_DMA_L、UEP2_DMA/UH_RX_DMA、UEP3_DMA_H/UH_TX_DMA_H、EP3_DMA_L/UH_TX_DMA_L、UEP3_DMA/UH_TX_DMA。
部分地址对应于多个独立的xSFR,例如:LED_DATA/LED_FIFO_CN。
CH559包含8051标准SFR所有的寄存器,同时又增加了其他设备控制寄存器。具体SFR见下表。
表 5.1 特殊功能寄存器表
备注:(1)、红色文本代表可以按位寻址;(2)、以下是颜色框对应说明
色 | 描述 |
---|---|
寄存器地址 | |
SPI0相关寄存器 | |
ADC相关寄存器 | |
USB相关寄存器 | |
定时/计数器2相关寄存器 | |
端口设置相关寄存器 | |
SPI1相关寄存器 | |
PWM1和PWM2相关寄存器 | |
UART1相关寄存器 | |
定时/计数器0和1相关寄存器 | |
Flash-ROM相关寄存器 |
5.2 SFR分类和复位值
功能分类 | 名称 | 地址 | 描述 | 复位值 |
---|---|---|---|---|
系统设置相关寄存器 | B | F0h | B寄存器 | 0000 0000b |
ACC | E0h | 累加器 | 0000 0000b | |
PSW | D0h | 程序状态寄存器 | 0000 0000b | |
GLOBAL_CFG | B1h | 全局配置寄存器(引导程序状态下) | 1110 0000b | |
全局配置寄存器(应用程序状态下) | 1100 0000b | |||
CHIP_ID | A1h | 芯片ID识别码(只读) | 0101 1001b | |
SAFE_MOD | A1h | 安全模式控制寄存器(只写) | 0000 0000b | |
DPH | 83h | 数据地址指针高8位 | 0000 0000b | |
DPL | 82h | 数据地址指针低8位 | 0000 0000b | |
DPTR | 82h | DPL和DPH组成16位SFR | 0000h | |
SP | 81h | 堆栈指针 | 0000 0111b | |
时钟、睡眠及电源控制相关寄存器 | WDOG_COUNT | FFh | 看门狗计数寄存器 | 0000 0000b |
RESET_KEEP | FEh | 复位保持寄存器(上电复位状态下) | 0000 0000b | |
WAKE_CTRL | EBh | 睡眠唤醒控制寄存器 | 0000 0000b | |
SLEEP_CTRL | EAh | 睡眠控制寄存器 | 0000 0000b | |
CLOCK_CFG | B3h | 系统时钟配置寄存器 | 1001 1000b | |
PLL_CFG | B2h | PLL时钟配置寄存器 | 1101 1000b | |
PCON | 87h | 电源控制寄存器(上电复位状态下) | 0001 0000b | |
中断控制相关寄存器 | IP_EX | E9h | 扩展中断优先级控制寄存器 | 0000 0000b |
IE_EX | E8h | 扩展中断使能寄存器 | 0000 0000b | |
GPIO_IE | CFh | GPIO中断使能寄存器 | 0000 0000b | |
IP | B8h | 中断优先级控制寄存器 | 0000 0000b | |
IE | A8h | 中断使能寄存器 | 0000 0000b | |
Flash-ROM相关寄存器 | ROM_DATA_H | 8Fh | flash-ROM数据寄存器高字节 | xxxx xxxxb |
ROM_DATA_L | 8Eh | flash-ROM 数据寄存器低字节 | xxxx xxxxb | |
ROM_DATA | 8Eh | ROM_DATA_L和ROM_DATA_H组成16位SFR | xxxxh | |
ROM_STATUS | 86h | flash-ROM状态寄存器(只读) | 1000 0000b | |
ROM_CTRL | 86h | flash-ROM控制寄存器(只写) | 0000 0000b | |
ROM_ADDR_H | 85h | flash-ROM地址寄存器高字节 | xxxx xxxxb | |
ROM_ADDR_L | 84h | flash-ROM地址寄存器低字节 | xxxx xxxxb | |
ROM_ADDR | 84h | ROM_ADDR_L和ROM_ADDR_H组成16位SFR | xxxxh | |
端口设置相关寄存器 | XBUS_SPEED | FDh | 外部总线速度配置寄存器 | 1111 1111b |
XBUS_AUX | FDh | 外部总线辅助设置寄存器 | 0000 0000b | |
PIN_FUNC | CEh | 引脚功能选择寄存器 | 0000 0000b | |
P4_CFG | C7h | P4端口配置寄存器 | 0000 0000b | |
P5_IN | C7h | P5端口输入寄存器(只读) | 0000 0000b | |
PORT_CFG | C6h | 端口配置寄存器 | 0000 1111b | |
P0_PU | C5h | P0端口上拉使能寄存器(En_P0_Pullup=0) | 0000 0000b | |
P0端口上拉使能寄存器(En_P0_Pullup=1) | 1111 1111b | |||
P0_DIR | C4h | P0端口方向控制寄存器 | 0000 0000b | |
P4_PU | C3h | P4端口上拉使能寄存器 | 1111 1111b | |
P4_DIR | C2h | P4端口方向控制寄存器 | 0000 0000b | |
P4_IN | C1h | P4端口输入寄存器(只读) | 1111 1111b | |
P4_OUT | C0h | P4端口输出寄存器 | 0000 0000b | |
P3_PU | BFh | P3端口上拉控制寄存器 | 1111 1111b | |
P3_DIR | BEh | P3端口方向使能寄存器 | 0000 0000b | |
P2_PU | BDh | P2端口上拉使能寄存器 | 1111 1111b | |
P2_DIR | BCh | P2端口方向控制寄存器 | 0000 0000b | |
P1_PU | BBh | P1端口上拉使能寄存器 | 1111 1111b | |
P1_DIR | BAh | P1端口方向控制寄存器 | 0000 0000b | |
P1_IE | B9h | P1端口输入使能寄存器 | 1111 1111b | |
P3 | B0h | P3端口输入输出寄存器 | 1111 1111b | |
P2 | A0h | P2端口输入输出寄存器 | 1111 1111b | |
P1 | 90h | P1端口输入输出寄存器 | 1111 1111b | |
P0 | 80h | P0端口输入输出寄存器 | 1111 1111b | |
定时/计数器0和1相关寄存器 | TH1 | 8Dh | Timer1计数高字节 | xxxx xxxxb |
TH0 | 8Ch | Timer0计数高字节 | xxxx xxxxb | |
TL1 | 8Bh3 | Timer1计数低字节 | xxxx xxxxb | |
TL0 | 8Ah | Timer0计数低字节 | xxxx xxxxb | |
TMOD | 89h | Timer0/1方式寄存器 | 0000 0000b | |
TCON | 88h | Timer0/1控制寄存器 | 0000 0000b | |
UART0相关寄存器 | SBUF | 99h | UART0数据寄存器 | xxxx xxxxb |
SCON | 98h | UART0控制寄存器 | 0000 0000b | |
定时/计数器2相关寄存器 | TH2 | CDh | Timer2计数器高字节 | 0000 0000b |
TL2 | CCh | Timer2计数器低字节 | 0000 0000b | |
T2COUNT | CCh | TL2和TH2组成16位SFR | 0000h | |
T2CAP1H | CDh | Timer2捕捉1数据高字节(只读) | xxxx xxxxb | |
T2CAP1L | CCh | Timer2捕捉1数据低字节(只读) | xxxx xxxxb | |
T2CAP1 | CCh | T2CAP1L和T2CAP1H组成16位SFR | xxxxh | |
RCAP2H | CBh | 计数重载/捕捉2数据寄存器高字节 | 0000 0000b | |
RCAP2L | CAh | 计数重载/捕捉2数据寄存器低字节 | 0000 0000b | |
RCAP2 | CAh | RCAP2L和RCAP2H组成16位SFR | 0000h | |
T2MOD | C9h | Timer2方式寄存器 | 0000 0000b | |
T2CON | C8h | Timer2控制寄存器 | 0000 0000b | |
定时/计数器3相关寄存器 | T3_FIFO_H | AFh | Timer3的FIFO高字节 | xxxx xxxxb |
T3_FIFO_L | AEh | Timer3的FIFO低字节 | xxxx xxxxb | |
T3_FIFO | AEh | T3_FIFO_L和T3_FIFO_H组成16位SFR | xxxxh | |
T3_DMA_AH | ADh | DMA当前缓冲区地址高字节 | 0000 xxxxb | |
T3_DMA_AL | ACh | DMA当前缓冲区地址低字节 | xxxx xxx0b | |
T3_DMA | ACh | T3_DMA_AL和T3_DMA_AH组成16位SFR | 0xxxh | |
T3_DMA_CN | ABh | DMA剩余计数寄存器 | 0000 0000b | |
T3_CTRL | AAh | Timer3控制寄存器 | 0000 0010b | |
T3_STAT | A9h | Timer3状态寄存器 | 0000 0000b | |
T3_END_H | A7h | Timer3计数终值高字节 | xxxx xxxxb | |
T3_END_L | A6h | Timer3计数终值低字节 | xxxx xxxxb | |
T3_END | A6h | T3_END_L和T3_END_H组成16位SFR | xxxxh | |
T3_COUNT_H | A5h | Timer3当前计数高字节(只读) | 0000 0000b | |
T3_COUNT_L | A4h | Timer3当前计数低字节(只读) | 0000 0000b | |
T3_COUNT | A4h | T3_COUNT_L和T3_COUNT_H组成16位SFR | 0000h | |
T3_CK_SE_H | A5h | Timer3时钟分频设置高字节 | 0000 0000b | |
T3_CK_SE_L | A4h | Timer3 时钟分频设置低字节 | 0010 0000b | |
T3_CK_SE | A4h | T3_CK_SE_L和T3_CK_SE_H组成16位SFR | 0020h | |
T3_SETUP | A3h | Timer3设置寄存器 | 0000 0100b | |
PWM1和PWM2相关寄存器 | PWM_CYCLE | 9Fh | PWM循环周期寄存器 | xxxx xxxxb |
PWM_CK_SE | 9Eh | PWM时钟分频设置寄存器 | 0000 0000b | |
PWM_CTRL | 9Dh | PWM控制寄存器 | 0000 0010b | |
PWM_DATA | 9Ch | PWM1数据寄存器 | xxxx xxxxb | |
PWM_DATA2 | 9Bh | PWM2数据寄存器 | xxxx xxxxb | |
SPI0相关寄存器 | SPI0_SETUP | FCh | SPI0设置寄存器 | 0000 0000b |
SPI0_S_PRE | FBh | SPI0从机模式预置数据寄存 | 0010 0000b | |
SPI0_CK_SE | FBh | SPI0时钟分频设置寄存器 | 0010 0000b | |
SPI0_CTRL | FAh | SPI0控制寄存器 | 0000 0010b | |
SPI0_DATA | F9h | SPI0数据收发寄存器 | xxxx xxxxb | |
SPI0_STAT | F8h | SPI0状态寄存器 | 0000 1000b | |
SPI1相关寄存器 | SPI1_CK_SE | B7h | SPI1时钟分频设置寄存器 | 0010 0000b |
SPI1_CTRL | B6h | SPI1控制寄存器 | 0000 0010b | |
SPI1_DATA | B5h | SPI1数据收发寄存器 | xxxx xxxxb | |
SPI1_STAT | B4h | SPI1状态寄存器 | 0000 1000b | |
UART1相关寄存器 | SER1_DLL | 9Ah | UART1波特率除数锁存器低字节 | xxxx xxxxb |
SER1_FIFO | 9Ah | UART1数据FIFO读写寄存器 | xxxx xxxxb | |
SER1_DIV | 97h | UART1预分频除数寄存器 | 0xxx xxxxb | |
SER1_ADDR | 97h | UART1总线地址预置寄存器 | 1111 1111b | |
SER1_MSR | 96h | UART1调制解调器MODEM状态寄存器(只读) | 1111 0000b | |
SER1_LSR | 95h | UART1线路状态寄存器(只读) | 0110 0000b | |
SER1_MCR | 94h | UART1调制解调器MODEM控制寄存器 | 0000 0000b | |
SER1_LCR | 93h | UART1线路控制寄存器 | 0000 0000b | |
SER1_IIR | 92h | UART1中断识别寄存器(只读) | 0000 0001b | |
SER1_FCR | 92h | FIFO控制寄存器(只写) | 0000 0000b | |
SER1_DLM | 91h | UART1波特率除数锁存器高字节 | 1000 0000b | |
SER1_IER | 91h | UART1中断使能寄存器 | 0000 0000b | |
ADC相关寄存器 | ADC_EX_SW | F7h | ADC扩展模拟开关控制寄存器 | 0000 0000b |
ADC_SETUP | F6h | ADC设置寄存器 | 0000 1000b | |
ADC_FIFO_H | F5h | ADC的FIFO高字节(只读) | 0000 0xxxb | |
ADC_FIFO_L | F4h | ADC的FIFO低字节(只读) | xxxx xxxxb | |
ADC_FIFO | F4h | ADC_FIFO_L和ADC_FIFO_H组成16位SFR | 0xxxh | |
ADC_CHANN | F3h | ADC通道选择寄存器 | 0000 0000b | |
ADC_CTRL | F2h | ADC控制寄存器 | 0000 0000b | |
ADC_STAT | F1h | ADC状态寄存器 | 0000 0100b | |
ADC_CK_SE | EFh | ADC时钟分频设置寄存器 | 0001 0000b | |
ADC_DMA_CN | EEh | DMA剩余计数寄存器 | 0000 0000b | |
ADC_DMA_AH | EDh | DMA当前缓冲区地址高字节 | 0000 xxxxb | |
ADC_DMA_AL | ECh | DMA当前缓冲区地址低字节 | xxxx xxx0b | |
ADC_DMA | ECh | ADC_DMA_AL和ADC_DMA_AH组成16位SFR | 0xxxh | |
USB相关寄存器 | USB_DMA_AH | E7h | DMA当前缓冲区地址高字节(只读) | 000x xxxxb |
USB_DMA_AL | E6h | DMA当前缓冲区地址低字节(只读) | xxxx xxx0b | |
USB_DMA | E6h | USB_DMA_AL和USB_DMA_AH组成16位SFR | xxxxh | |
UHUB1_CTRL | E5h | USB主机HUB1端口控制寄存器 | 1100 x000b | |
UHUB0_CTRL | E4h | USB主机HUB0端口控制寄存器 | 0100 x000b | |
UDEV_CTRL | E4h | USB设备端口控制寄存器 | 0100 x000b | |
USB_DEV_AD | E3h | USB设备地址寄存器 | 0000 0000b | |
USB_CTRL | E2h | USB控制寄存器 | 0000 0110b | |
USB_INT_EN | E1h | USB中断使能寄存器 | 0000 0000b | |
UEP4_T_LEN | DFh | 端点4发送长度寄存器 | 0xxx xxxxb | |
UEP4_CTRL | DEh | 端点4控制寄存器 | 0000 0000b | |
UEP0_T_LEN | DDh | 端点0发送长度寄存器 | 0xxx xxxxb | |
UEP0_CTRL | DCh | 端点0控制寄存器 | 0000 0000b | |
USB_HUB_ST | DBh | USB主机HUB端口状态寄存器(只读) | 0000 0000b | |
USB_MIS_ST | DAh | USB杂项状态寄存器(只读) | xx10 1000b | |
USB_INT_ST | D9h | USB中断状态寄存器(只读) | 00xx xxxxb | |
USB_INT_FG | D8h | USB中断标志寄存器 | 0010 0000b | |
UEP3_T_LEN | D7h | 端点3发送长度寄存器 | 0xxx xxxxb | |
UH_TX_LEN | D7h | USB主机发送长度寄存器 | 0xxx xxxxb | |
UEP3_CTRL | D6h | 端点3控制寄存器 | 0000 0000b | |
UH_TX_CTRL | D6h | USB主机发送端点控制寄存器 | 0000 0000b | |
UEP2_T_LEN | D5h | 端点2发送长度寄存器 | 0000 0000b | |
UH_EP_PID | D5h | USB主机令牌设置寄存器 | 0000 0000b | |
UEP2_CTRL | D4h | 端点2控制寄存器 | 0000 0000b | |
UH_RX_CTRL | D4h | USB主机接收端点控制寄存器 | 0000 0000b | |
UEP1_T_LEN | D3h | 端点1发送长度寄存器 | 0xxx xxxxb | |
UEP1_CTRL | D2h | 端点1控制寄存器 | 0000 0000b | |
UH_SETUP | D2h | USB主机辅助设置寄存器 | 0000 0000b | |
USB_RX_LEN | D1h | USB接收长度寄存器(只读) | 0xxx xxxxb | |
USB相关寄存器xSFR区域 | UEP4_1_MOD | 2446h | 端点1、4模式控制寄存器 | 0000 0000b |
UEP2_3_MOD | 2447h | 端点2、3模式控制寄存器 | 0000 0000b | |
UH_EP_MOD | 2447h | USB主机端点模式控制寄存器 | 0000 0000b | |
UEP0_DMA_H | 2448h | 端点0和4缓冲区起始地址高字节 | 000x xxxxb | |
UEP0_DMA_L | 2449h | 端点0和4缓冲区起始地址低字节 | xxxx xxx0b | |
UEP0_DMA | 2448h | UEP0_DMA_L和UEP0_DMA_H组成16位SFR | xxxxh | |
UEP1_DMA_H | 244Ah | 端点1缓冲区起始地址高字节 | 000x xxxxb | |
UEP1_DMA_L | 244Bh | 端点1缓冲区起始地址低字节 | xxxx xxx0b | |
UEP1_DMA | 244Ah | UEP1_DMA_L和UEP1_DMA_H组成16位SFR | xxxxh | |
UEP2_DMA_H | 244Ch | 端点2缓冲区起始地址高字节 | 000x xxxxb | |
UEP2_DMA_L | 244Dh | 端点2缓冲区起始地址低字节 | xxxx xxx0b | |
UEP2_DMA | 244Ch | UEP2_DMA_L和UEP2_DMA_H组成16位SFR | xxxxh | |
UH_RX_DMA_H | 244Ch | USB主机接收缓冲区起始地址高字节 | 000x xxxxb | |
UH_RX_DMA_L | 244Dh | USB主机接收缓冲区起始地址低字节 | xxxx xxx0b | |
UH_RX_DMA | 244Ch | UH_RX_DMA_L和UH_RX_DMA_H组成16位SFR | xxxxh | |
UEP3_DMA_H | 244Eh | 端点3缓冲区起始地址高字节 | 000x xxxxb | |
UEP3_DMA_L | 244Fh | 端点3缓冲区起始地址低字节 | xxxx xxx0b | |
UEP3_DMA | 244Eh | UEP3_DMA_L和UEP3_DMA_H组成16位SFR | xxxxh | |
UH_TX_DMA_H | 244Eh | USB主机发送缓冲区起始地址高字节 | 000x xxxxb | |
UH_TX_DMA_L | 244Fh | USB主机发送缓冲区起始地址低字节 | xxxx xxx0b | |
UH_TX_DMA | 244Eh | UH_TX_DMA_L和UH_TX_DMA_H组成16位SFR | xxxxh | |
pU* | 254*h | 在bXIR_XSFR置1后,该名称用于以pdata类型寻址上述xSFR,比xdata类型寻址更快捷 | ||
LED控制卡相关寄存器xSFR区域 | LED_STAT | 2880h | LED状态寄存器 | 010x 0000b |
LED_CTRL | 2881h | LED控制寄存器 | 0000 0010b | |
LED_FIFO_CN | 2882h | FIFO计数状态寄存器(只读) | 0000 0000b | |
LED_DATA | 2882h | LED数据寄存器(只写) | xxxx xxxxb | |
LED_CK_SE | 2883h | LED时钟分频设置寄存器 | 0001 0000b | |
LED_DMA_AH | 2884h | DMA当前缓冲区地址高字节 | 000x xxxxb | |
LED_DMA_AL | 2885h | DMA当前缓冲区地址低字节 | xxxx xxx0b | |
LED_DMA | 2884h | LED_DMA_AL和LED_DMA_AH组成16位SFR | xxxxh | |
LED_DMA_CN | 2886h | LED DMA剩余计数寄存器 | xxxx xxxxb | |
LED_DMA_XH | 2888h | DMA当前辅助缓冲区地址高字节 | 000x xxxxb | |
LED_DMA_XL | 2889h | DMA当前辅助缓冲区地址低字节 | xxxx xxx0b | |
LED_DMA_X | 2888h | LED_DMA_XL和LED_DMA_XH组成16位SFR | xxxxh | |
pLED_* | 298*h | 在bXIR_XSFR置1后,该名称用于以pdata类型寻址上述xSFR,比xdata类型寻址更快捷 |
5.3 通用8051寄存器
表 5.3.1 通用8051寄存器列表
名称 | 地址 | 描述 | 复位值 |
---|---|---|---|
B | F0h | B寄存器 | 00h |
A, ACC | E0h | 累加器 | 00h |
PSW | D0h | 程序状态寄存器 | 00h |
GLOBAL_CFG | B1h | 全局配置寄存器(引导程序状态下) | E0h |
全局配置寄存器(应用程序状态下) | C0h | ||
CHIP_ID | A1h | 芯片ID识别码(只读) | 59h |
SAFE_MOD | A1h | 安全模式控制寄存器(只写) | 00h |
PCON | 87h | 电源控制寄存器(上电复位状态下) | 10h |
DPH | 83h | 数据地址指针高8位 | 00h |
DPL | 82h | 数据地址指针低8位 | 00h |
DPTR | 82h | DPL和DPH组成16位SFR | 0000h |
SP | 81h | 堆栈指针 | 07h |
B寄存器 (B):
位 | 名称 | 访问 | 描述 | 复位值 |
---|---|---|---|---|
[7:0] | B | RW | 算术运算寄存器,主要用于乘法和除法运算,可按位寻址 | 00h |
A累加器(A, ACC):
位 | 名称 | 访问 | 描述 | 复位值 |
---|---|---|---|---|
[7:0] | A/ACC | RW | 算术运算累加器,可按位寻址 | 00h |
程序状态寄存器(PSW):
位 | 名称 | 访问 | 描述 | 复位值 |
---|---|---|---|---|
7 | CY | RW | 进位标志位:执行算术运算和逻辑运算指令时,用于记录最高位的进位或者借位;进行8位加法运算时,最高位进位,则该位置位,否则清零;进行8位减法运算时,若借位,则该位置位,否则清零;逻辑指令可使该位置位或清零 | 0 |
6 | AC | RW | 辅助进位标志位:记录加减法运算时,低4位向高4位有进位或借位,AC置位,否则清零 | 0 |
5 | F0 | RW | 可按位寻址的通用标志位0:使用者可自己定义,可软件清零或置位 | 0 |
4 | RS1 | RW | 寄存器组选择位高位 | 0 |
3 | RS0 | RW | 寄存器组选择位低位 | 0 |
2 | OV | RW | 溢出标志位:加减法运算时,运算结果超过8位二进制数,则OV置1,标志溢出,否则清0 | 0 |
1 | F1 | RW | 可按位寻址的通用标志位1:使用者可自己定义,可软件清零或置位 | 0 |
0 | P | R0 | 奇偶标志位:记录指令执行后累加器A中1的奇偶性,奇数个1则P置位,偶数个1则P清零 | 0 |
处理器的状态保存在状态寄存器PSW中,PSW支持按位寻址。状态字中包括进位标志位,用于BCD码处理的辅助进位标志位,奇偶标志位,溢出标志位,还有用于工作寄存器组选择的RS0和RS1。工作寄存器组所在的区域都可以通过直接或者间接方式进行访问。
表 5.3.2 RS1和RS0工作寄存器组选择表
RS1 | RS0 | 工作寄存器组 |
---|---|---|
0 | 0 | 0组(00h-07h) |
0 | 1 | 1组(08h-0Fh) |
1 | 0 | 2组(10h-17h) |
1 | 1 | 3组(18h-1Fh) |
表 5.3.3 影响标志位的操作(X表示标志位与操作结果有关)
操作 | CY | OV | AC |
---|---|---|---|
ADD | X | X | X |
ADDC | X | X | X |
SUBB | X | X | X |
MUL | 0 | X | |
DIV | 0 | X | |
DA A | X | ||
RRC A | X | ||
RLC A | X | ||
CJNE | X | ||
SETB C | 1 | ||
CLR C | 0 | ||
CPL C | X | ||
MOV C, bit | X | ||
ANL C, bit | X | ||
ANL C,/bit | X | ||
ORL C, bit | X | ||
ORL C,/bit | X |
数据地址指针(DPTR):
位 | 名称 | 访问 | 描述 | 复位值 |
---|---|---|---|---|
[7:0] | DPL | RW | 数据指针低字节 | 00h |
[7:0] | DPH | RW | 数据指针高字节 | 00h |
DPL和DPH组成16位数据指针DPTR,用于访问xSFR、xBUS、xRAM数据存储器或者程序存储器,实际DPTR对应DPTR0和DPTR1两组物理上的16位数据指针,由XBUS_AUX中的DPS动态选择。
堆栈指针(SP):
位 | 名称 | 访问 | 描述 | 复位值 |
---|---|---|---|---|
[7:0] | SP | RW | 堆栈指针,主要用于程序调用和中断调用以及数据进出栈 | 07h |
堆栈具体功能:保护端点和保护现场,按先入后出的原则进行管理。入栈时SP指针自动加1,保存数据或断点信息;出栈时取SP指针指向数据单元,SP指针自动减1。SP在复位后的初值是07h,相应的默认堆栈存储从08h开始。
5.4 特有寄存器
全局配置寄存器(GLOBAL_CFG),仅在安全模式下可写:
位 | 名称 | 访问 | 描述 | 复位值 |
---|---|---|---|---|
[7:6] | Reserved | RO | 固定值11 | 11b |
5 | bBOOT_LOAD | RO | Bootloader状态位,用于区分ISP引导程序状态或者应用程序状态:电源上电时置1,软件复位时清0。 对于有ISP引导程序的芯片,该位为1说明从未软件复位过,通常是上电后运行的ISP引导程序状态;该位为0说明已经软件复位过,通常是应用程序状态 | 1 |
4 | bSW_RESET | RW | 软件复位控制位:置1导致软件复位,硬件自动清零 | 0 |
3 | bCODE_WE | RW | Flash-ROM写允许位:该位为0则写保护;为1则Flash-ROM可写可擦 | 0 |
2 | bDATA_WE | RW | Flash-ROM的DataFlash区域写允许位:该位为0则写保护;为1则DataFlash区域可写可擦 | 0 |
1 | bXIR_XSFR | RW | MOVX_@R0/R1指令访问范围控制位:该位为0允许访问全部xdata区域xRAM/xBUS/xSFR;该位为1则专用于访问xSFR,不能访问xRAM/xBUS | 0 |
0 | bWDOG_EN | RW | 看门狗复位使能位:该位为0看门狗只用作定时器;该位为1允许计时溢出时产生看门狗复位 | 0 |
芯片ID识别码(CHIP_ID):
位 | 名称 | 访问 | 描述 | 复位值 |
---|---|---|---|---|
[7:0] | CHIP_ID | RO | 固定值59h,用于识别芯片 | 59h |
安全模式控制寄存器(SAFE_MOD):
位 | 名称 | 访问 | 描述 | 复位值 |
---|---|---|---|---|
[7:0] | SAFE_MOD | WO | 用于进入或者终止安全模式 | 00h |
部分SFR仅在安全模式下才能写入数据,而在非安全模式下总是只读状态。进入安全模式步骤:
- 向该寄存器写入55h;
- 接着向该寄存器写入AAh;
- 此后约13到23个系统主频周期都处于安全模式下,该有效期内可以改写一个或多个安全类SFR或普通SFR
- 超出上述有效期后自动终止安全模式
- 或者再向该寄存器写任意值可以提前终止安全模式