MCS-51系列特殊功能寄存器(摘抄)

1. P0 (80H)


P0.7


P0.6


P0.5


P0.4


P0.3


P0.2


P0.1


P0.0

2.SP 栈指针(81H)

3.DPTR 数据指针(由DPH和DPL组成)

DPL 数据指针低八位 (82H)

DPH 数据指针高八位 (83H)

4.PCON 电源管理寄存器 (87H)


SMOD


——


——


——


GF1


GF0


PD


IDL

SMOD :波特率倍增位。SMOD=0时,不变;SMOD=1时,倍增。

GF1,GF0 :通用标志位。

PD :掉电方式位。PD=1时,进入掉电方式。

IDL :待机方式位。IDL=1时,进入待机方式。

5.TMOD 定时/记数方式寄存器 (89H)


GATE


C/T


M1


M0


GATE


C/T


M1


M0

GATE :门控位。GATE=0时,直接由TR启动定时器;GATE=1时,须外部INT为1时,且TR启动定时器。

C/T :功能选择位。C/T=0时,为定时器;C/T=1时,为计数器。

M1,M0 :方式选择位。


M1


M0


工作方式


方式描述


0


0


方式0


13位计数器


0


1


方式1


16位计数器


1


0


方式2


8位自动重装计数器


1


1


方式3


T0:分成两个8位计数器,T1:停止记数。

6.TCON 定时/记数控制寄存器 (88H)


TF1


TR1


TF0


TR0


IE1


IT1


IE0


IT0

TF1 :定时器1溢出标志。由硬件置1,并且进入中断;进入中断服务程序后,由硬件清0,查询方式下由软件清0。

TR1 :定时器运行控制位。TR1=0时,关闭T1;TR1=1时,启动T1。

TF0 :定时器0溢出标志。由硬件置1,并且进入中断;进入中断服务程序后,由硬件清0,查询方式下由软件清0。

TR0 :定时器运行控制位。TR0=0时,关闭T0;TR0=1时,启动T0。

IE1 :外部中断1请求标志。

IT1 :外部中断1触发方式。IT1=0时,为低电平触发方式;IT1=1时,为负跳变触发方式(边沿触发)。

IE0 :外部中断0请求标志。

IT0 :外部中断0触发方式。IT0=0时,为低电平触发方式;IT0=1时,为负跳变触发方式(边沿触发)。

7.P1 (90H)


P1.7


P1.6


P1.5


P1.4


P1.3


P1.2


P1.1


P1.0

8.SCON 串行控制寄存器 (98H)


SM0


SM1


SM2


REN


TB8


RB8


TI


RI

SM0,SM1 :串行方式控制。


SM1


SM0


工作方式


功能描述


波特率


0


0


方式0


8位同步移位寄存器


fosc/12


0


1


方式1


10位UART


可变


1


0


方式2


11位UART


fosc/64或fosc/32


1


1


方式3


11位UART


可变

SM2 :多机通讯控制位。SM2=0时,禁止多机通讯;SM2=1时,允许多机通讯。

REN :允许串行接收位。REN=0时,禁止串行接收;REN=1时,允许串行接收。

TB8 :发送数据第九位(D8)。

RB8 :接收数据第九位(D8)。

TI :发送中断标志位。

RI :接收中断标志位。

9.P2 (A0H)


P2.7


P2.6


P2.5


P2.4


P2.3


P2.2


P2.1


P2.0

10.IE 中断允许控制寄存器 (A8H)


EA


——


ET2


ES


ET1


EX1


ET0


EX0

EA :CPU中断总允许位。EA=0时,屏蔽所有中断请求;EA=1时,CPU开放中断。

ES :串行口中断允许位。ES=0时,串行口禁止中断;ES=1时,串行口允许中断。

ET1 :T1中断允许位。ET1=0时,T1禁止中断;ET1=1时,T1允许中断。

EX1:外部中断1(INT1)允许位。EX1=0时,INT1禁止中断;EX1=1时,INT1允许中断。

ET0 :T0中断允许位。ET0=0时,T0禁止中断;ET0=1时,T0允许中断。

EX0:外部中断0(INT0)允许位。EX0=0时,INT0禁止中断;EX0=1时,INT0允许中断。

ET2 :T2中断允许位。ET2=0时,T2禁止中断;ET2=1时,T2允许中断。

11.P3 (B0H)


P3.7


P3.6


P3.5


P3.4


P3.3


P3.2


P3.1


P3.0

12.IP 中断优先级控制寄存器 (B8H)


——


——


PT2


PS


PT1


PX1


PT0


PX0

PS :串行口中断优先级控制位。PS=0时,优先级低;PS=1时,设定串行口为高优先级中断。

PT1 :T1中断优先级控制位。PT1=0时,优先级低;PT1=1时,设定T1为高优先级中断。

PX1 :外部中断1(INT1)优先级控制位。PX1=0时,优先级低;PX1=1时,设定外部中断1(INT1)为高优先级中断。

PT0 :T0中断优先级控制位。PT0=0时,优先级低;PT0=1时,设定T0为高优先级中断。

PX0 :外部中断0(INT0)优先级控制位。PX0=0时,优先级低;PX0=1时,设定外部中断0(INT0)为高优先级中断。

13.PSW 程序状态字寄存器 (D0H)


CY


AC


F0


RS1


RS0


OV


F1


P

CY :进位标志。

AC :半进位标志。

F0,F1 :用户标志位。

RS1,RS0 :


RS1


RS0


寄存器组


片内RAM地址


0


0


第0组


00H~07H


0


1


第1组


08H~0FH


1


0


第2组


10H~17H


1


1


第3组


18H~1FH

OV :溢出标志。

P :基偶标志。

14.ACC 累加器A。(E0H)

15.B B寄存器 (F0H)

时间: 2024-08-09 09:44:12

MCS-51系列特殊功能寄存器(摘抄)的相关文章

MCS-51系列特殊功能寄存器(摘录)

MCS-51系列特殊功能寄存器(80H~FFH) 1. P0 (80H) P0.7 P0.6 P0.5 P0.4 P0.3 P0.2 P0.1 P0.0 2.SP 栈指针(81H) 3.DPTR 数据指针(由DPH和DPL组成) DPL 数据指针低八位 (82H) DPH 数据指针高八位 (83H) 4.PCON 电源管理寄存器 (87H) SMOD -- -- -- GF1 GF0 PD IDL SMOD :波特率倍增位.SMOD=0时,不变:SMOD=1时,倍增. GF1,GF0 :通用标志

51系列小型操作系统精髓 简单实现

源码地址(专业定制程序:MCU,Windows,Android ,VC串口,Android蓝牙等不限.) 1.切换任务并记录位置,保证在时间到后能切换回来.(在任务中切换出去,在定时器中切换回来.)(时间片轮转) ;******************************************** ;RTOS 用定时器0的多任务处理程序 ;项目增加方式使用. ;程序不影响其它数据,目前程序的前后段不能进行参数传递 . 最多可以同时运行8个任务, ;执行时使用定时器0,定时时间根据初始化时的

寄存器、特殊功能寄存器和ram之间的区别联系

存储器在CPU外,一般指硬盘,U盘等可以在切断电源后保存资料的设备,容量一般比较大,缺点是读写速度都很慢,普通的机械硬盘读写速度一般是50MB/S左右. 内存和寄存器就是为了解决存储器读写速度慢而产生的多级存储机制,从20世纪50年代开始,磁芯存储器曾一度成为主存的主要存储介质,但从20世纪70年代开始,逐步被半导体存储器所取代,目前的计算机都是用半导体存储器.现在的DDR2内存的读写速度一般为6~8GB/S,跟机器性能也有关系.从根本上讲,寄存器与RAM的物理结构不一样. 一般寄存器是指由基本

51系列小型操作系统精髓 简单实现8 C语言版待改进

使用keil4  ,代码Code Optimization:0   运行OK 可运行8个任务 Program Size: data=21.0 xdata=0 code=401  (包括2个示例变量,未优化) 任务从中断处切换,在定时时间到后从定时中断中切换回来. 待改进地方 1.手动优化汇编程序 2. 重入问题 3.参数进函数和时中断的保护问题 #include "STC12C5A.H" #define TIMER_RELOAD()  {TL0=0x00;TH0=0xC4;}//使能T

51系列小型操作系统精髓 简单实现11 C语言版优化后说明(有图)

/* CRTOS 实时可剥夺型内核 1.任务不用预加载,不用预定义.任务调用时加载,可删除(退出死循环即可) 2.单位轮转查询时间由晶振和定时器初始化决定.在这里为10ms 3.定时时间为[ time*单位轮转查询时间 ] ,其中time为 rtos_wait(time)中time. 4.可运行多个任务[自定义] 5.任务从rtos_wait()处切换,在定时时间到后从定时中断中切换回来,任务执行后,回到中断,再从中断回到主程序. */ #include "STC12C5A.H" #d

51系列小型操作系统精髓 简单实现7 C语言版待改进

#include "STC12C5A.H" #define TIMER_RELOAD()  {TL0=0x00;TH0=0xC4;}//使能T/C  初始10ms #define MAX_TASKS 2 //任务槽最大个数. unsigned char idata task_stack[MAX_TASKS][2];//任务堆栈.  PC指针为16位,需2个字节task_stack[][0]L  task_stack[][1]H. unsigned char idata task_tim

51系列小型操作系统精髓 简单实现2

在51单片机中,不能直接修改PC,但有一种方法是可以改变PC的.函数调用里会把PC值压入堆栈中,调用结束后,会把PC值弹出到PC中. 能改变PC就可以控制程序流程. 1.在任务中切换出去 #define MAX_TASKS 8 //任务槽最大个数. unsigned char idata task_stack[MAX_TASKS][2];//任务堆栈. //保存当前断点 并把SP=SP-2; task_stack[task_id][0] =*(SP--); task_stack[task_id]

51系列小型操作系统精髓 简单实现3

现在遇到的问题: 1.任务不用预加载,进入一个任务,加载一个任务.没有任务时,定时器怎么处理?当只有一个任务时,怎么处理?多个任务怎么轮转或按优先级切换? 2.关于各任务定时时间,一个一个地减是否麻烦,有没有更好的方法? 3.没有保护寄存,这样切换,是否对?当任务函数有多个层嵌套时,有没有问题? #include "STC12C5A.H" #define TIMER_RELOAD() {TL0=0x00;TH0=0xC4;}//使能T/C 初始10ms #define MAX_TASK

51系列小型操作系统精髓 简单实现4

#include <REG52.H> #define MAX_TASKS 2 //任务槽个数.必须和实际任务数一至 #define MAX_TASK_DEP 12 //最大栈深.最低不得少于2 个,保守值为12. unsigned char idata task_stack[MAX_TASKS][MAX_TASK_DEP];//任务堆栈. unsigned char idata task_sp[MAX_TASKS]; unsigned char task_id; //当前活动任务号 //任务切