- 单片机C语言程序设计实训100例
- 彭伟编著
- 645字
- 2025-02-19 23:22:26
1.3 特殊功能寄存器
由图1-2可知,片内数据RAM中80H~FFH空间大部用于特殊功能寄存器,表1-1列出了8051单片机的所有特殊功能寄存器。
表1-1 8051单片机的特殊功能寄存器

上述特殊功能寄存器分别用于以下功能单元。
CPU:ACC、B、PSW、SP、DPTR。
并行口:P0、P1、P2、P3。
中断系统:IE、IP。
定时器/计数器:TMOD、TCON、T0(TH0,TL0)、T1(TH1,TL1)。
串行口:SCON、SBUF、PCON。
本书用C语言开发单片机系统时,由于ACC可以位寻址,它常被用于判断字节中各位的状态,例如,要判断某字节第3位是否为1,可将ACC看成一个字节变量,让ACC获取该字节的值,然后直接判断ACC3是否为1,当然需要先有定义sbit ACC3 = ACC^3。
又如PSW寄存器,由于PSW可以位寻址,reg51.h已包含有该寄存器的各位定义,定义片断如下:
/* BIT Register */ /* PSW */ sbit CY = 0xD7; sbit AC = 0xD6; sbit F0 = 0xD5; sbit RS1 = 0xD4; sbit RS0 = 0xD3; sbit OV = 0xD2; sbit P = 0xD0;
其中CY和F0仍在C语言程序中直接大量使用,例如,要将字节变量d(10101101)由高位开始逐位串行发送,可对d进行8次左移,并逐次发送CY,即
for (i = 0 ; i < 8 ; i++) { d <<= 1; DQ = CY; }
代码中DQ为某外部芯片接收串行数据的引脚,这段代码利用汇编语言程序中常用的进位标志位CY,可以方便地获取移出的各位。
表1-1中带有*号的特殊功能寄存器是可位寻址的,Keil\c51下头文件reg51.h对P0~P3以外的可位寻址的各寄存器位给出了独立定义,如果要直接引用4个I/O端口的各引脚,需要在程序中用sbit进行单独定义,当然也可以将头文件reg51.h(keil\c51\inc)改成at89x52.h(keil\c51\inc\atmel),4个端口的各引脚在该头文件中均被单独定义,如P0.1被定义为P0_1,尽管其中有些定义对8051单片机是无效的,但这并不影响程序正常编译运行。