历史上的今天
返回首页

历史上的今天

今天是:2024年12月20日(星期五)

正在发生

2019年12月20日 | 51单片机头文件reg51.h学习心得

2019-12-20 来源:51hei


1)“文件包含”处理概念 


所谓“文件包含”是指在一个文件内将另外一个文件的内容全部包含进来。因为被包含的文件中的一些定义和命令使用的频率很高,几乎每个程序中都可能要用到,为了提高编程效率,减少编程人员的重得劳动,将这些定义和命令单独组成一个文件,如reg51.h,然后用#include包含进来就可以了,这个就相当于工业上的标准零件,拿来直接用就可以了。


2)寄存器地址及位地址声明的原因


其实相当于为这些内存地址取个名字。reg51.h里面主要是一些特殊功能寄存器的地址声明,对可以位寻址的,还包括一些位地址的声明,如果如sfr P1=0x80; sfr IE=0xA8;sbit EA=0xAF等。


注意这里出现了一个使用很频繁的sfr和sbit。


sfr 表示特殊功能寄存器的意思,它并非标准C 语言的关键字,而是Keil为能直接访问80C51中的SFR 而提供了一个新的关键词,其用法是:sfr  特殊功能寄存器名=地址值


(注意对于头文件里“特殊功能寄存器名”,用户实际上也可以修改 的,如P1=0x80,也可改为A1=0x80,但sfr和地址值则不能更改,否者会编译出错。)   


sbit表示位的意思,它也是非标准C 语言的关键字,编写程序时如需操作寄存器的某一位(可位寻址的寄存器才能用)时,需定义一个位变量,此时就要要到sbit,如sbit deng=P1^0,sbit EA = 0xAF;


需要注意的是,位定义时有些特殊,用法有三种: 


第一种方法:sbit 位变量名=寄存器位地址值 


第二种方法:sbit 位变量名=SFR名称^寄存器位值(0-7)


第三种方法:sbit 位变量名=SFR地址值^寄存器位值


“名称^变量位地址值”中“^”,它是由keil软件的规定的 ,不能写成其它的,只能这样能才编译通过。  以上是对寄存器地址和位地址的定义和声明作了解释,大家需要牢牢记住:只有对寄存器及相关位进行声明地址后,我们才能对其进行赋相关的值,keil软件才能编译通过。


即:只有对寄存器及相关位进行声明地址后,我们才能对其进行赋相关的值,keil软件才能编译通过。


3)REG51.H头文件原文及解释


下面的这些相当于给各寄存器起个别名,不过这个别名为了易于识别,对应的都是相应功能的寄存器名称,例如sfr P0 = 0x80; //P0口,指的是用P0代替0x80。对P0的操作即是对0x80地址的操作。其中0x80是P0的地址。


* 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; //


sfr IE = 0xA8; //好东西,中断控制

sfr IP = 0xB8; //中断优先级控制,没有设计过要求时间严格的系统,所以至今没有用过

sfr SCON = 0x98; //串口控制寄存器

sfr SBUF = 0x99; //串口缓冲寄存器


下面的这些可以用位操作,某寄存器某一位的位地址有可能和另一个寄存器的直接地址重合,但在使用时对位地址操作的指令与对直接地址的操作是不同的,所以不会混淆。


51单片机内部共有21个SFR,每个SFR占1个字节,多数字节单元中的每一位又有专用的“位名称”。这21个SFR又按是否可以位寻址分为两大部分,ACC、IE、P1等11个可以位寻址,SP、TMOD等不可以位寻址。


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; //接收完成中断标志


经过上面的操作,相应的名字即与相应的地址联系了起来。使用该定义的名字即是对该内存的操作。(sfr P0 = 0x80; //P0口,该IO口对应地址0x80是硬件设计好的,把数据放入此处即可输出该数据。)


4)可位寻址区(特对低128字节作了一个介绍)

   

从表中可以看到, “位地址4EH”,是在“字节地址29H”中,是第6位。


对位寻址区可以按照“位地址”来对某一个位单独进行操作,也可以按照“字节地址”进行操作,即同时对八个位地址的内容进行操作。MCS-51系列单片机具有一套专用的“位操作”指令(又称为布尔指令),可对这些位地址进行“与”、“或”、“非”等操作。这是该系列单片机的特色之一。


一般的8051芯片实际内部RAM只有128B从0x00-0x7F,而从0x80-0xFF则是SFR是CPU工作寄存器和各种外设寄存器都在此的区域。(也即是内存与外设统一编址,外设占用内存的地址)

推荐阅读

史海拾趣

Carlisle Interconnect Technologies公司的发展小趣事

Carlisle Interconnect Technologies(当时名为Tensolite)的创业之路始于1940年,在纽约Tarrytown的一个小工厂里。公司创始人凭借对微型绝缘电线和电缆的深刻理解和前瞻视野,开创了绝缘电线电缆的新纪元。Tensolite这个名称,象征着产品的高拉伸强度和紧凑轻巧的特性,这种创新的设计理念很快在市场上赢得了口碑。公司的第一根绝缘线产品成功应用于电加热,为第二次世界大战期间的空军飞行员提供了温暖的手套和飞行服,这一成就不仅彰显了公司的技术实力,也为后续发展奠定了坚实的基础。

Dymec公司的发展小趣事

随着业务的不断拓展,Dymec公司逐渐意识到品质对于品牌的重要性。公司决定加大对产品质量的投入,从原材料采购到生产流程,再到质量检测,每一个环节都严格把控。这种对品质的执着追求使得Dymec公司的产品在市场上获得了良好的口碑,公司也逐渐成为了电子连接器行业的知名品牌。

City_Technology公司的发展小趣事

1977年,伦敦大学内,四个富有远见的科学家怀揣着梦想,创立了City Technology公司。他们利用Wolfson研究所开发的电化学技术,着手研发新型氧气感应技术。这一创新技术的诞生,标志着City Technology在气体传感领域的初步尝试,并为其日后的腾飞奠定了坚实的基础。在接下来的几年里,公司不断突破技术瓶颈,其铁罐氧气传感器技术于1982年获得了英国皇后奖技术成就奖,这一荣誉不仅肯定了公司的技术实力,也为其在市场上赢得了良好的声誉。

静芯微电子(ElecSuper)公司的发展小趣事

静芯微电子深知产品质量对于企业的重要性,因此建立了完善的质量管理体系。公司从原材料采购、生产制造到产品检测等各个环节都实行严格的质量控制和管理,确保每一款产品都符合高标准的质量要求。同时,静芯微电子还引进了先进的检测设备和技术手段,对产品质量进行全面检测和评估。这些措施保证了静芯微电子产品的稳定性和可靠性,赢得了客户的信任和好评。

Condor公司的发展小趣事

作为一家有远见的企业,静芯微电子不仅关注自身的发展,还积极履行社会责任。公司积极参与环保公益活动和社会责任项目,致力于推动电子行业的可持续发展。同时,静芯微电子还注重员工的培训和发展,为员工提供良好的工作环境和晋升机会。这些举措不仅增强了企业的凝聚力和向心力,也为企业的长期发展奠定了坚实的基础。

ATP [ATP Electronics]公司的发展小趣事

为了适应全球市场的变化,ATP积极推进全球化战略。公司在美国硅谷设立总部,并在英国、台湾、中国大陆等地设立分公司,构建起了全球化的研发、生产和销售网络。这一战略布局不仅增强了ATP在全球市场的竞争力,也为公司带来了更多的合作机会和发展空间。

问答坊 | AI 解惑

12864C系列中文液晶显示模块使用说明书

C系列中文模块可以显示字母、数字符号、中文字型及图形,具有绘图及文字画面混合显示功能。提供 三种控制接口,分别是8位微处理器接口,4位微处理器接口及串行接口(OCMJ4X16A/B无串行接口)。所 有的功能,包含显示RAM,字型产生器,都包含在一 ...…

查看全部问答>

03月31日 【EEWORLD带你DIY】示波器方案讨论

报名页面:https://www.eeworld.com.cn/formguide/index.php?formid=90 (请在备注中注明自己所参与的部分) DIY示波器活动QQ群:16254999 在整体方案上参考上的示波器设计方案,采用STM32F103RBT6作为主控CPU,LPC2103作为辅助CPU,对于原有模拟 ...…

查看全部问答>

热电偶测温晶闸管调压不稳的问题

用热电偶测温,经单片机pid调节,触发固态继电器实现线性升温 但当电网电压变化时,升温曲线不稳定,很不线性 原因到底出在哪里呢,高次谐波?继电器?pid参数?还是其它因素,希望大家各抒己见,十分希望能得到各位的帮助,谢谢!…

查看全部问答>

未来无限好 智能家居前景浅析

智能家居开始流行于上世纪七十年代的美国,并且在欧洲有很大的应用。近几年来智能家居产品像普通商品一样被摆在超市里销售。进入二十一世纪,在新加坡、韩国、日本及我国香港、澳门等地也开始应用。什么是智能家居?    一、概念解析 ...…

查看全部问答>

mp3文件如何存入到nor flash中

给分虽然少,但已经是本人分数的多一半了,不好意思哈 现在具体说一下问题的内容: 核心是把mp3文件烧录到arm7板的片外nor flash中,如果没有操作系统,也没有文件系统的话,我应该怎么考虑呢?按照字节串口传输吗?我该如何把mp3文件转成字节的 ...…

查看全部问答>

如何实现内核空间一个函数在后台一直运行!

大家好! 现在正在做一个通过无线网络进行文件传输方面的项目,想让内核空间的接收函数在后台一直运行,然后数据到来时用netlink通过用户态接收,然后写入文件。 主要问题:如何实现内核空间一个函数在后台一直运行,而又不影响用户态的操作。 ...…

查看全部问答>

LED开关电源选用及使用注意事项

replyreload += \',\' + 775946;Timson,如果您要查看本帖隐藏内容请回复…

查看全部问答>

Spartan-6 LX9 Microboard不用XCF04怎么实现配置

Spartan-6 LX9 Microboard开发板中不用XCF04怎么实现配置的。   想知道原来装有XCFO4,怎样去掉。 好像只有TDO信号没连拉到JTAG。   [ 本帖最后由 sdjntl 于 2011-8-4 17:39 编辑 ]…

查看全部问答>

移相

请问下有谁知道移相的芯片,最好是带宽比较大的那种,能实现移相位的功能,想要对某一带宽 内的信号进行移相,希望得到大家的帮助,非常感谢!…

查看全部问答>

centos下使用ccs

有没有会在centos下使用ccs v6,给m4下载程序…

查看全部问答>