Loading... 51单片机本来就内置了特殊功能,其分布在**片内RAM**的**高128位**字节中,尽管可能没有填满,但是用户任然是没法使用的。 一下表格记录了**SFR**的 * 名称 * 可否按位寻址 * 所处地址 以便查阅。 | 序号 | SFR | SFR名称 | 字节地址 | 位地址 | | ------ | ------ | --------------------------- | ---------- | ------------ | | 1 | B | 寄存器B | F0H | F7H - F0H | | 2 | ACC | 累加器 | E0H | E7H - E0H | | 3 | PSW | 程序状态字 | D0H | D7H - D0H | | 4 | IP | 中断优先级控制寄存器 | B8H | BFH - B8H | | 5 | P3 | 并行I/O端口 P3 | B0H | BFH - B0H | | 6 | IE | 中断允许控制寄存器 | A8H | AFH - A8H | | 7 | P2 | 并行I/O端口 P2 | A0H | A7H - A0H | | 8 | SBUF | 串行口数据缓冲器 | 99H | 不可位寻址 | | 9 | SCON | 串行口控制寄存器 | 98H | 9FH - 98H | | 10 | P1 | 并行I/O端口 P1 | 90H | 97H - 90H | | 11 | TH1 | 定时器 / 计数器 1 高 8 位 | 8DH | 不可位寻址 | | 12 | TH0 | 定时器 / 计数器 0 高 8 位 | 8CH | 不可位寻址 | | 13 | TL1 | 定时器 / 计数器 1 低 8 位 | 8BH | 不可位寻址 | | 14 | TL0 | 定时器 / 计数器 0 低 8 位 | 8AH | 不可位寻址 | | 15 | TMOD | 定时器 / 计数器方式寄存器 | 89H | 不可位寻址 | | 16 | TCON | 定时器 / 计数器控制寄存器 | 88H | 8FH - 88H | | 17 | PCON | 电源控制寄存器 | 87H | 不可位寻址 | | 18 | DPH | 数据指针高 8 位 | 83H | 不可位寻址 | | 19 | DPL | 数据指针低 8 位 | 82H | 不可位寻址 | | 20 | SP | 堆栈指针 | 81H | 不可位寻址 | | 21 | P0 | 并行I/O端口 P0 | 80H | 87H - 80H | # 特殊功能寄存器 8051有21个特殊功能寄存器,其中大部分是8位的,还有一些是16位的。我们对51单片机的操作实质是对特殊功能寄存器的操作。SFR是我们操作的对象,对他们进行读和写就是在操作51单片机。 ## PSW(程序状态字寄存器) 保存程序在执行过程中一些状态。 ![img](https://s2.loli.net/2022/05/26/3MS6iUyrJbpCm9s.png) **CY:** 进位位CY是在执行加法(减法)时,如果第7位有进位(借位),则将CY置1。 **AC:** 辅助进位位AC,是指第3位向第4位有进位(借位)时,将AC置1。 **F0:** 是用户标志位,留给我们用的。 **RS1和RS0:** 工作寄存器组选择位,由RS1和RS0控制选择哪一组工作寄存器工作。 ![img](https://s2.loli.net/2022/05/26/lOfLgbXACc9V2Mq.png) **OV:** 溢出标志位,在加减法运算的过程中,当第6位或者第7位其中的某一位有进位的时候,OV置1。即第6位进位和第7位进位的异或(D6⊕D7)。 **1:** 这个是保留位,在一些书中也写作是F1。和F0位差不多。 **P:** 奇偶校验位,8051进行的是偶校验。即当累加器ACC的内容中1的个数是奇数个,那么P就被置1,否则清零。 ## 寄存器B 在乘除法运算中与累加器A配合使用。MULAB把累加器A和寄存器B中的8位无符号数相乘,结果的高8位存在寄存器B中,低8位存在累加器A中。DIVAB用B除以A,把商存在A中,余数存在B中。在不做乘除法运算时,B还可以作为通用寄存器来使用。 ## 累加器A 8051的大多数指令都需要使用累加器A,他是使用频率最高的寄存器。外部存储器的读写必须使用A。 ## 堆栈指针sp 堆栈指针存放当前栈的栈顶指针。数据在进栈之前SP先加1,然后数据进栈;数据在出栈时,先将数据弹出,然后SP减1。51的栈是向上生长的。对于8051来说,栈是被放在内部的RAM中,因此栈的最大地址是7FH。在系统复位后SP的初始值是07H。 ## 数据指针DPTR 数据指针是一个16位的寄存器。可分为DPL和DPH两个8位的寄存器。它是唯一一个直接可以做16位数据操作的寄存器。例如:`MOV DPTR,#1000H`。 ## 端口寄存器P0-P3 即就是P0到P3这四个特殊功能寄存器。所有的端口都可以位寻址(支持位操作)。也就是说引脚的操作本质是对其内存映射以后的特殊功能寄存器进行的操作。 ## 中断允许寄存器IE 8051拥有中断系统,他可以触发5个中断源,以及两个中断优先级(即就是最多允许两层的中断嵌套)。 ![img](https://s2.loli.net/2022/05/26/GX42pNdHMECwsPZ.png) **EA:** 控制中断的总开关,EA置1时中断总允许打开。否则中断关闭。 ~~**ET2:** 启用/禁用定时器2的溢出或捕捉中断~~(仅对于8052) **ES:** 启用/禁用串行端口中断 **ET1:** 启用/禁用定时器1溢出中断 **EX1:** 启用/禁用外部中断1 **ET0:** 启用/禁用定时器0溢出中断 **EX0:** 启用/禁用外部中断0 ## 中断优先级寄存器IE 8051的中断有两个中断优先级,默认的优先级从高到低(中断序号0-4) 0. 外部中断0 1. 定时/计数器0 2. 外部中断1 3. 定时/计数器1 4. 串行口 5. ~~(8052有定时/计数器2)~~ ![img](https://s2.loli.net/2022/05/26/75OT8vNMAfzb3p9.png) 当把相应的位置1时,优先级变高,置0时,优先级变低。当全为1或者全为0时,优先级按照默认的优先级来执行。 **IP的每个位名字和IE寄存器每个位是相似的** ## 定时器控制寄存器TCON ![img](https://s2.loli.net/2022/05/26/RixAbOJ7YeE8yGg.png) **TF1(TF0):** 定时/计数器T1(TF0)的溢出标志,T1(T0)计数满后,该位由硬件置1.并向CPU发出中断请求。若CPU开放该中断,则进入中断服务子程序,并由硬件将该位清0. **TR1(TR0):** T1(T0)的运行控制位。用软件控制,置1时,启动T1(T0);清0时,停止T1(T0)。 **IE1(IE0):** 外部中断1(0)的中断标志位。置1时,向CPU发出中断请求。 **IT1(IT0):** 外部中断1(0)的中断触发方式选择位。ITx=1时,设置为边沿触发方式(下降沿);ITx=0时,设置为电平触发方式(低电平)。在边沿触发方式下,CPU在响应中断请求之后,会由硬件将IEx清0. ## 定时器方式选择寄存器TMOD 该寄存器不能位寻址,只能整个字节操作。 ![img](https://s2.loli.net/2022/05/26/IBSPNTnXpm83svf.png) 其中高4位是控制定时器T1的,低4位是控制定时器T0的。 **GATE:** - 当GATE=1 - 则INT0引脚为高电平时且TR0置位,启动定时器T0。 - 则INT1引脚为高电平时且TR1置位,启动定时器T1。 - 当GATE=0 - 则TR0置位,启动定时器T0。 - 则TR1置位,启动定时器T1。 **C/T:** 定时/计数器方式选择位,C/T=1时,工作在计数器模式下;当C/T=0时。工作在定时器模式下。 **M1和M0:** 定时/计数器工作方式选择位。 ![img](https://s2.loli.net/2022/05/26/CYkhTwMy96uBJoa.png) 8051系列单片机的定时/计数器工作方式,因此需要将定时/计数的初值送到T0(T1)。 T1和T0是两个16位的定时器,但是不能直接进行16位数据的读和写,只能分成两个8位来进行读和写操作。 ## 串行口控制寄存器SCON ![img](https://s2.loli.net/2022/05/26/5N79d4hkIgqtA23.png) **SM0和SM1:** 串行口4种工作方式的选择位,它们控制串行口工作在哪种方式之下。 ![img](https://s2.loli.net/2022/05/26/G3Un9zIhDHax2MR.png) **SM2:** 模式2和模式3的多机通信控制位。 **REN:** 允许串行口接受位,REN=1允许接受;REN=0禁止接受,由软件置位或清零。 **TB8:** 在方式2和3,作为第9位数据发送,在双机通信中常作为奇偶校验位,在多机通信中,常作为数据帧或地址帧的标识,TB8=1为地址帧,TB8=0为数据帧。 **RB8:** 在模式2和3下,为接收到的第9位数据。 **TI:** 发送中断标志位(中断源),硬件置位,软件清零。 **RI:** 接受中断标志位(中断源),硬件置位,软件清零。 串行口作为一个中断源,中断入口地址只有一个(0023H),当用中断方式进行发送和接受时,需要查询是TI还是RI引发的中断请求。 ## 串行数据缓存器SBUF 实际上SBUF是两个在物理上独立的发送、接受缓冲器,可以同时发送、接收数据。两个缓冲器共用一个字节地址99H。可以通过对SBUF的读和写来进行区分是哪一个寄存器。 最后修改:2022 年 06 月 01 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏