Reg51.h

这个头文件将C程序中能用到的寄存器名或寄存器中某位的名称与硬件地址值做了对应,在程序中直接写出这些名称,集成开发环境就能识别,并最终转换成机器代码,实现对单片机各硬件资源的准确操控。

 

REG51内部规定的SFR寄存器的地址,1.SFR是Special Function Register(特殊功能寄存器)的缩写。

  SFR是80C51单片机中各功能部件对应的寄存器,用于存放相应功能部件的控制命令,状态或数据。它是80C51单片机中最具有特殊的部分,现在所有80C51系列功能的增加和扩展几乎都是通过增加特殊功能寄存器SFR来达到目的的。

  对于80C51系列中的80C51,共定义了21个特殊功能寄存器。在80C52中,除了80C51的21个特殊功能寄存器,还增加了5个,共计26个:

 
* BYTE Register */
sfr P0 = 0x80; //P0口
sfr P1 = 0x90; //P1口
sfr P2 = 0xA0; //P2口
sfr P3 = 0xB0; //P3口
sfr PSW = 0xD0; //程序状态字,具体位意义见位定义
sfr ACC = 0xE0; //累加器,程序员最常用的
sfr B = 0xF0; //寄存器,主要用于乘除
sfr SP = 0x81; //堆栈指针,初始化为07;先加1后压栈,先出栈再减1,
sfr DPL = 0x82;
sfr DPH = 0x83; //数据指针,用途大
sfr PCON = 0x87; //电源控制
sfr TCON = 0x88; //Timer/Counter控制
sfr TMOD = 0x89; //Timer/Counter方式控制
sfr TL0 = 0x8A;
sfr TL1 = 0x8B; //
sfr TH0 = 0x8C; //存着当前的计数值
sfr TH1 = 0x8D; //我就想不明白,当时设计的时候,为什么不把TH0,TL0放在连续的地址!
sfr IE = 0xA8; //好东西,中断控制
sfr IP = 0xB8; //中断优先级控制,没有设计过要求时间严格的系统,所以至今没有用过
sfr SCON = 0x98; //哇,熟悉,串口控制寄存器
sfr SBUF = 0x99; //哇,更熟悉,串口缓冲寄存器

sbit CY = 0xD7; //进位或借位,有就是1,没有就是0
sbit AC = 0xD6; //辅助进借位,(麻烦b)
sbit F0 = 0xD5; //没有具体用途,可以由用户决定他的意义,所以它就没有意义
sbit RS1 = 0xD4;
sbit RS0 = 0xD3; //工作寄存器选择,这个在下面解释
sbit OV = 0xD2; //over!溢出,有是1,没有是0
sbit P = 0xD0; //奇偶校验,奇数个1是1

sbit TF1 = 0x8F; //T1的中断请求标志
sbit TR1 = 0x8E; //Timer 1 running,好记吧~
sbit TF0 = 0x8D; //
sbit TR0 = 0x8C; //把上面两个1换成0
sbit IE1 = 0x8B; //interrupt external 1 外中断请求标志
sbit IT1 = 0x8A; //interrupt triggle 1 外中断触发方式
sbit IE0 = 0x89;
sbit IT0 = 0x88; //同样,把上面的两个1换成0

sbit EA = 0xAF; //Enable all哇,重要,全局中断控制,光着他,哈哈,什么都不用作了,就像放假一样
sbit ES = 0xAC; //Enable Serial,开串口中断
sbit ET1 = 0xAB; //Enable Timer/Counter 1
sbit EX1 = 0xAA; //Enable External 1
sbit ET0 = 0xA9; //Enable Timer/counter 0
sbit EX0 = 0xA8; //Enable External 0

sbit PS = 0xBC; //串行中断优先级
sbit PT1 = 0xBB; //T1优先级
sbit PX1 = 0xBA; //外部中断1优先级
sbit PT0 = 0xB9; //
sbit PX0 = 0xB8; //上面两个1换成0

//控制寄存器!!!!
sbit RD = 0xB7; //读
sbit WR = 0xB6; //写
sbit T1 = 0xB5; //T/C1
sbit T0 = 0xB4; //T/C0
sbit INT1 = 0xB3; //外中断1
sbit INT0 = 0xB2; //外中断0
sbit TXD = 0xB1; //串行发送
sbit RXD = 0xB0; //串行接收

sbit SM0 = 0x9F; //
sbit SM1 = 0x9E; //串口工作方式
sbit SM2 = 0x9D; //什么鬼特征位,要用查书,或者等我以后解释,啊哈
sbit REN = 0x9C; //串行接收允许
sbit TB8 = 0x9B; //收到的第九位
sbit RB8 = 0x9A; //要发的第九位
sbit TI = 0x99; //哇,熟悉吧,发送完成中断标志
sbit RI = 0x98; //接收完成中断标志

C51寄存器详解(Reg51.h)的更多相关文章

  1. 80X86寄存器详解<转载>

    引子 打算写几篇稍近底层或者说是基础的博文,浅要介绍或者说是回顾一些基础知识, 自然,还是得从最基础的开始,那就从汇编语言开刀吧, 从汇编语言开刀的话,我们必须还先要了解一些其他东西, 像  CPU ...

  2. STM32_NVIC寄存器详解

    在MDK内,与NVIC相关的寄存器,MDK为其定义了如下的结构体:  typedef struct  {        vu32   ISER[2];    //2个32位中断使能寄存器分别对应到60 ...

  3. [转载]ARM协处理器CP15寄存器详解

    用于系统存储管理的协处理器CP15  原地址:http://blog.csdn.net/gameit/article/details/13169405 MCR{cond}     coproc,opc ...

  4. 2.3 ARM寄存器详解

    一共有37个寄存器 1. 31个通用寄存器 2. 6个状态寄存器 R13作为堆栈指针 R14链接寄存器 1.保存函数返回地址 2. 异常返回地址 R15程序计数器(PC指针) 程序状态寄存器 只有在异 ...

  5. 022 ARM寄存器详解

    R13:堆栈指针寄存器 SP R14:链接寄存器 LR R15:程序计数器 PC指针 CPSR:当前程序状态寄存器 SPSR:备份程序状态寄存器

  6. [MFC美化] SkinSharp使用详解2-SkinH.h函数介绍

    SkinSharp功能强大,该皮肤库支持完全多种颜色改变等. 下面是静态链接库时的SkinH.h头文件: /*在Stdafx.h文件中加入如下语句 #include "SkinH.h&quo ...

  7. 大脸猫讲逆向之ARM汇编中PC寄存器详解

    i春秋作家:v4ever 近日,在研究一些开源native层hook方案的实现方式,并据此对ARM汇编层中容易出问题的一些地方做了整理,以便后来人能有从中有所收获并应用于现实问题中.当然,文中许多介绍 ...

  8. Part2_lesson3---ARM寄存器详解

    进入到ARM Architecture Reference Manual这个文档里面的A2.3 Registers R13在程序中通常用于充当SP堆栈指针的!! R14在程序当中通常用于充当LR(链接 ...

  9. ARM协处理器CP15寄存器详解【转】

    本文转载i自;https://blog.csdn.net/gameit/article/details/13169405 用于系统存储管理的协处理器CP15   MCR{cond}     copro ...

随机推荐

  1. 使用nmonchart把.nmon文件转换成html

    转载:https://blog.csdn.net/zd470015321/article/details/68923280 我的环境 :centos6.6 下载地址 nmon: http://nmon ...

  2. (剑指Offer)面试题11:数值的整数次方

    题目: 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 思路: 看题目似乎很简单,循环相乘不就行了吗?不是的. 需要考虑几个问题: 1. ...

  3. 关于angularjs中路由页面强制更新的问题

    有这么一个问题,在页面内路由页面跳转时,第一次跳入路由页面时是正常的,但是第二次会记住第一次时的状态,有时候并不想这样,想强制更新这个路由页面. 有一种方式就是使用 ui-sref-opts功能,我试 ...

  4. 【找规律】HDU 4662——MU Puzzle

    来源:点击打开链接 这个题目的来源是人工智能领域MU猜想.比赛的时候也参考了相关资料,可是最后差一点没有把规律推出来. 注意到以下几个性质.第一,MI怎么变换M永远只能在第一位.第二,因为变换时只能在 ...

  5. python 网络请求类库 requests 使用

    python 网络请求类库 requests 使用 requests是 为python封装的强大 REST 操作类库 githubhttps://github.com/kennethreitz/req ...

  6. webpack 引入jquery和第三方jquery插件

    1.引入jquery jQuery 直接在 html 中引入,然后在 webpack 中把它配置为全局即可. index.html: <!DOCTYPE html> <html> ...

  7. postgres时间转换函数

    函数 返回类型 描述 例子 to_char(timestamp, text) text 把时间戳转换成字串 to_char(current_timestamp, 'HH12:MI:SS') to_ch ...

  8. Linux下的编译器(转)

    转自:http://ju.outofmemory.cn/entry/2051 简单的说,编译器就是一个可执行程序,它专门用于将程序员易于编写的高级语言 (如 C 语言) 翻译为机器可以识别的低级语言. ...

  9. XMPP协议实现即时通讯底层书写 (二)-- IOS XMPPFramework Demo+分析

    我希望,This is a new day! 在看代码之前,我认为你还是应该先整理一下心情,来听我说几句: 首先,我希望你是在早上边看这篇blog,然后一边開始动手操作,假设你仅仅是看blog而不去自 ...

  10. IOS+openCV在Xcode的入门开发(转)

    看这篇文章之前先看看这个地址:OpenCV iOS开发(一)——安装 昨天折腾了一天,终于搞定了openCV+IOS在Xcode下的环境并且实现一个基于霍夫算法的圆形识别程序.废话不多说,下面就是具体 ...