MCS-51单片机的(SFR)特殊功能寄存器详细解析
特殊功能寄存器
![特殊功能寄存器](https://img.taocdn.com/s3/m/05048a0abb68a98271fefafc.png)
特殊功能寄存器(SFR)也称为专用寄存器,特殊功能寄存器反映了MCS-51单片机的运行状态。
很多功能也通过特殊功能寄存器来定义和控制程序的执行。
MCS-51有21个特殊功能寄存器,它们被离散地分布在内部RAM的80H—FFH地址中,这些寄存的功能已作了专门的规定,用户不能修改其结构。
表2是特殊功能寄存器分布一览表,我们对其主要的寄存器作一些简单的介绍。
表2 特殊功能寄存器标识符号地址寄存器名称ACC 0E0H 累加器B 0F0H B寄存器PSW 0D0H 程序状态字SP 81H 堆栈指针DPTR 82H、83H 数据指针(16位)含DPL和DPHIE 0A8H 中断允许控制寄存器IP 0B8H 中断优先控制寄存器P0 80H I/O口0寄存器P1 90H I/O口1寄存器P2 0A0H I/O口2寄存器P3 0B0H I/O口3寄存器PCON 87H 电源控制及波特率选择寄存器SCON 98H 串行口控制寄存器SBUF 99H 串行数据缓冲寄存器TCON 88H 定时控制寄存器TMOD 89H 定时器方式选择寄存器TL0 8AH 定时器0低8位TH0 8CH 定时器0高8位TL1 8BH 定时器1低8位TH1 8DH 定时器1高8位程序计数器PC(program Counter)程序计数器在物理上是独立的,它不属于特殊内部数据存储器块中。
PC是一个16位的计数器,用于存放一条要执行的指令地址,寻址范围为64kB,PC有自动加1功能,即完成了一条指令的执行后,其内容自动加1。
PC本身并没有地址,因而不可寻址,用户无法对它进行读写,但是可以通过转移、调用、返回等指令改变其内容,以控制程序按我们的要求去执行。
累加器ACC(Accumulator)累加器A是一个最常用的专用寄存器,大部分单操作指令的一个操作数取自累加器,很多双操作数指令中的一个操作数也取自累加器。
加、减、乘、除法运算的指令,运算结果都存放于累加器A或AB累加器对中。
C51单片机引脚功能与特殊功能寄存器详解
![C51单片机引脚功能与特殊功能寄存器详解](https://img.taocdn.com/s3/m/3eb753f6f12d2af90342e647.png)
80C51单片机引脚图及引脚功能介绍首先我们来介绍一下单片机的引脚图及引脚功能 介绍单片机的40个引脚大致可分为 4类:电源、时钟、控制和 I/O 弓|脚。
1. 电源:⑴VCC -芯片电源,接+5V; ⑵VSS -接地端;2. 时钟:XTAL1、XTAL2 -晶体振荡电路反相输入端和输出端。
3. 控制线:控制线共有4根,⑴ALE/PROG 地址锁存允许 /片内EPRO 陶程脉冲 ① ALE 功能:用来锁存 P0 口送出的低8位地址② PROG 功能:片内有 EPROM 勺芯片,在EPRO 嘲程期间,此引脚输入编程脉冲。
fl. 0 — Fl. 1 — P1 2 — P1.3 — FL 4 — FL5 — FL6 —FL7 — EST/Vm — RXD/F3. 0 — TXD/F3, 1 — IFT0/F3. 2 — IKTT/F3. 3 —T0/F3. 4 — T1/F3 5 — 阀F3. S — 而 P3 T —XTAL1 —JITALE —焰一 —Vm —FO.O —F0 1一F0 7—P0.3 —F0.4 —F。
S—F0 6 —FO T —EA/VfT —AU/PBDG —FSEN —F2T—F2 6—F2 S一E2 4 —F2.3—P22—F2 1 —F2 0Vce — ViS ____ XT AMXTAL2EST/Vn^EA/V IF +*FSEM^— ALE/P ROG +—二二二二r i — L口F51口 口口 扣P2F3地址数催总皴 地址德鳗双噬口 fTHTTH 克习(如下图所示 ),引脚的具体功能将在下面详细⑵PSEN:夕卜RO皿选通信号。
⑶RST/VPD:复位/备用电源。
①RST (Reset)功能:复位信号输入端。
②VPD功能:在Vcc掉电情况下,接备用电源。
⑷EA/Vpp:内外RO曜择/片内EPRO陶程电源。
①EA功能:内外ROM先择端。
②Vpp功能:片内有EPROM勺芯片,在EPRO惭程期间,施加编程电源Vpp。
MCS-51单片机的存储结构
![MCS-51单片机的存储结构](https://img.taocdn.com/s3/m/9cc7466f48d7c1c708a145a8.png)
MCS-51单片机存储器结构MCS-51的存储器可分为四类:程序存储器一个微处理器能够聪明地执行某种任务,除了它们强大的硬件外,还需要它们运行的软件,其实微处理器并不聪明,它们只是完全按照人们预先编写的程序而执行之。
那么设计人员编写的程序就存放在微处理器的程序存储器中,俗称只读程序存储器(ROM)。
程序相当于给微处理器处理问题的一系列命令。
其实程序和数据一样,都是由机器码组成的代码串。
只是程序代码则存放于程序存储器中。
MCS-51具有64kB程序存储器寻址空间,它是用于存放用户程序、数据和表格等信息。
对于内部无ROM的8031单片机,它的程序存储器必须外接,空间地址为64kB,此时单片机的端必须接地。
强制CPU从外部程序存储器读取程序。
对于内部有ROM的8051等单片机,正常运行时,则需接高电平,使CPU先从内部的程序存储中读取程序,当PC值超过内部ROM的容量时,才会转向外部的程序存储器读取程序。
8051片内有4kB的程序存储单元,其地址为0000H—0FFFH,单片机启动复位后,程序计数器的内容为0000H,所以系统将从0000H 单元开始执行程序。
但在程序存储中有些特殊的单元,这在使用中应加以注意:其中一组特殊是0000H—0002H单元,系统复位后,PC为0000H,单片机从0000H单元开始执行程序,如果程序不是从0000H单元开始,则应在这三个单元中存放一条无条件转移指令,让CPU直接去执行用户指定的程序。
另一组特殊单元是0003H—002AH,这40个单元各有用途,它们被均匀地分为五段,它们的定义如下:0003H—000AH 外部中断0中断地址区。
000BH—0012H 定时/计数器0中断地址区。
0013H—001AH 外部中断1中断地址区。
001BH—0022H 定时/计数器1中断地址区。
0023H—002AH 串行中断地址区。
可见以上的40个单元是专门用于存放中断处理程序的地址单元,中断响应后,按中断的类型,自动转到各自的中断区去执行程序。
MCS-51单片机特殊寄存器功能说明概要
![MCS-51单片机特殊寄存器功能说明概要](https://img.taocdn.com/s3/m/3fb4bcdec8d376eeaeaa31a1.png)
MCS51单片机SFR特殊寄存器MCS51单片机SFR特殊寄存器功能说明程序壮态字PSW(Program Status Word)(可以位寻址)若P=1,表示累加器A中的个数为奇数。
若P=0,累加器A中的个数为偶数。
2.OV益出标志位若OV=1,表示运算时有益出产生。
否则OV=03.RS1 RS0寄存器选择位用户自行设置。
5.AC辅助进位位若AC=1,表示在加减法运算时,低4位A3有进位或借位。
否则CY=06.CY进位标志位若CY=1,表示在加减法运算时,最高位A7有进位或借位。
否则CY=0电源控制器&波特率(不可以位寻址)若IDL=1,进入空闲模式。
(硬件或重新上电可复位)。
若IDL=0,正常方式2.PD为停止运行控制位若PD=1,进入停止模式。
(硬件或外部中断可复位)。
若PD=0,正常方式3.GF0 CF1为通用标志位用户可通过指改变它的壮态。
4.SMOD为波特率倍率控制位若SMOD=1,则串行口的波特率为16位若SMOD=0, 则串行口的波特率为32位定时器/计数器模式寄存器TMOD(不可以位寻址)若使C/T=0,为内部定时器模式。
(由TH和TL做定时器)若使C/T=1,为外部计数器模式。
(从T0/P3.4口或从T1/P3.5口输入计数脉冲)(前一次检测为高电平,后一次检测为低电平时,才会使计数器加1。
由于二次的检测需要24个时钟脉冲,通常T0,或T1输入线上的计数脉冲频率总是<100KHZ)3.GATE为定时器/计数器控制位当GATE=1时,TR控制位置位1时,而且只有在INT0或(INT1)为高时,才可以打开定时器/计数器工作。
(与INT0或INT1有关)(当GATE=1时,则INT0或INT1作为辅助控制线,不再用作中断请求输入线。
GATE的这种控制作用可使定时器/计数器用来测量脉冲的宽度)当GATE=0时,定时器/计数器工作与INT0或INT1无关。
定时器初值的计算:TC=M-T X/T P 左公式可转换为TC=M-T X*fosc/ 12(12T)或6(6T)或1(1T)TC为实际定时时间初值M为模值 (M=8或M=13,或M=16)Fosc为时钟频率T X为定时器需要的定时时间T P为机器周期时钟周期 T CLK=1/Fosc (如:STC的开发板的Fosc是11.0592MHZ)T CLK =1/11.0592MHZT CLK≈0.09042us机器周期TP=12*T CLK或(6*T CLK)或(1*T CLK) 左公式转换为:≈12*0.09042us TP= 12/Fosc(12T CLK)或6/Fosc(6T CLK) 或1/Fosc (1T CLK)≈1.08507us1.IT0为外部中断INT0的中断触发标志位若使IT0=1,INT0为负边沿触发。
第2章MCS--51系列单片机的结构及原理
![第2章MCS--51系列单片机的结构及原理](https://img.taocdn.com/s3/m/8d48d05e376baf1ffc4fadef.png)
(4)工作寄存器组选择位RS1、RS0(PSW.4,
PSW.3): RS1、RS0与工作寄存器组的对应关系
如下:
RS1 RS0 工作寄存器组 片内RAM地址
00
第0组
00H~07H
01
第1组
指令执行后,A=D1H最高位无进位,故C=0;低半字节有进位,AC=1; OV=0 1=1,发生溢出;A中1的个数为偶数,故P=0。
CPU时序
一.振荡器
CPU执行指令的一系列动作是在时序电路的控制下一拍一拍进行的。 其节拍信号由振荡器产生,MCS--51系列单片机的内部有一个高增益的反 相放大器。外接晶体后可构成自激振荡器产生节拍信号,接法见图2-1, 也可使用片外振荡器,采用不同工艺制造的单片机芯片接法不同:
RST/VPO:双功能引脚,在单片机工作期间, 当此引脚上出现连接2个机器周期的高电平时可 实现复位操作,详见2.4节。
在Vcc掉电期间,若该引脚接备用电源 (+5v),可向片内RAM供电,以保存片内RAM中 的信息。
2.2 MCS—51系列单片机的微处理器与CPU时序
运算器由算逻运算单元ALU、累加器A、B寄存器、暂存器1、 暂存器2、及程序状态字PSW构成。程序状态字PSW是1个8位 的专用寄存器,用于存放程序运行中的各种状态信息,可 进行位寻址,
P
图2—3 程序状态字各位的含义
(1)进位标志C(PSW.7);很多算术逻辑运算指令执行 后都会影响进位标志C。例如加减运算,若运算结果有进 位或借位,则C=1,若无,则C=0。可用专门的指令或硬件 将C置位或清零,在进行位操作时,C又起着位累加器的作 用,类似于累加器A。
MCS-51单片机的特殊功能寄存器
![MCS-51单片机的特殊功能寄存器](https://img.taocdn.com/s3/m/44e5d525ccbff121dd368341.png)
MCS-51单片机的特殊功能寄存器从图中我们可以看出,在51单片机内部有一个CPU用来运算、控制,有四个并行I/O口,分别是P0、P1、P2、P3,有ROM,用来存放程序,有RAM,用来存放中间结果,此外还有定时/计数器,串行I/O口,中断系统,以及一个内部的时钟电路。
在一个51单片机的内部包含了这么多的东西。
对图进行进一步的分析,我们已知,对并行I/O口的读写只要将数据送入到相应I/O 口的锁存器就可以了,那么对于定时/计数器,串行I/O口等怎么用呢?在单片机中有一些独立的存储单元是用来控制这些器件的,被称之为特殊功能寄存器(SFR)。
事实上,我们已接触过P1这个特殊功能寄存器了,还有哪些呢?看下表下面,我们介绍一下几个常用的SFR。
1、ACC---是累加器,通常用A表示。
这是个什么东西,可不能从名字上理解,它是一个寄存器,而不是一个做加法的东西,为什么给它这么一个名字呢?或许是因为在运算器做运算时其中一个数一定是在ACC中的缘故吧。
它的名字特殊,身份也特殊,稍后在中篇中我们将学到指令,可以发现,所有的运算类指令都离不开它。
自身带有全零标志Z,若A=0则Z=1;若A≠0则z=0。
该标志常用作程序分枝转移的判断条件。
2、B--一个寄存器。
在做乘、除法时放乘数或除数,不做乘除法时,随你怎么用。
3指针寄存器(1)程序计数器PC指明即将执行的下一条指令的地址,16位,寻址64KB范围,复位时PC = 0000H(2)堆栈指针SP指明栈顶元素的地址,8位,可软件设置初值,复位时SP = 07H(3)数据指针DPTR@R0、@R1、@DPTR;指明访问的数据存储器的单元地址,16位,寻址范围64KB。
DPTR = DPH + DPL。
可以用它来访问外部数据存储器中的任一单元,如果不用,也可以作为通用寄存器来用,由我们自已决定如何使用。
分成DPL(低8位)和DPH(高8位)两个寄存器。
用来存放16位地址值,以便用间接寻址或变址寻址的方式对片外数据RAM或程序存储器作64K字节范围内的数据操作4、PSW-----程序状态字。
特殊功能寄存器
![特殊功能寄存器](https://img.taocdn.com/s3/m/eaab8d501711cc7931b716e3.png)
89C52 256字节 89C51 128字节
80H 7FH
80H
普通RAM区
30H 2FH 20H 1FH 00H
只能直接寻址
位寻址区 工作寄存器区
既可间接寻址,又可直接寻址
14
程序存储器
FFFFH 外部 ROM
1000H 0FFFH 内部 ROM 0000H (EA=1) 0FFFH 外部 ROM (EA=0) 0000H
寄存器名称 I/O口3寄存器 电源控制及波特率选择寄存器 串行口控制寄存器 串行数据缓冲寄存器 定时控制寄存器 定时器方式选择寄存器 定时器0低8位 定时器0高8位 定时器1低8位 定时器1高8位
27
与端口相关的(7个) P0、P1、P2、P3:
四个并行输入/输出口的寄存器。它里面的内容对应着管 脚的输出。
使用时,通常在这些入口地址处存放一条绝对跳转 指令,使程序跳转到用户安排的中断程序起始地址,或 者从0000H起始地址跳转到用户设计的初始程序上。
16
org
0000h
jmp
main
(跳过中断入口地址区)
org
main: mov
0100h
p1,#55h
mov
Loop: djnz cpl mov jmp end
21
堆栈区由特殊功能寄存器堆栈指针SP管理 堆栈区可以安排在 RAM区任意位置,一般不安排 在工作寄存器区和可按位寻址的RAM区,通常放 在RAM区的靠后的位置。
从堆栈取出数据时:取出的数据是 最近放进去的一个数据,也就是当 前栈顶的数据。然后SP再自动减1, 仍指着栈顶……
52子系列才有 的RAM区 80H 7FH 数据 出栈
SCON (Serial Control Register) SBUF (Serial Date Buffer) PCON (Power Control Register)
51单片机特殊功能寄存器(SFR)SBUF使用方法
![51单片机特殊功能寄存器(SFR)SBUF使用方法](https://img.taocdn.com/s3/m/c5e1aba168dc5022aaea998fcc22bcd126ff427d.png)
51单⽚机特殊功能寄存器(SFR)SBUF使⽤⽅法 串⾏⼝中有两个缓冲寄存器SBUF,⼀个是发送寄存器,⼀个是接收寄存器,在物理结构上是完全独⽴的。
它们都是字节寻址的寄存器,字节地址均为99H。
这个重叠的地址靠读/写指令区分:串⾏发送时,CPU向SBUF写⼊数据,此时99H表⽰发送SBUF;串⾏接收时,CPU从SBUF读出数据,此时99H表⽰接收SBUF。
单⽚机串⼝ #include <reg52.h>#include <absacc.h> #define unit unsigned int #define uchar unsigned char uchar date; uchar recFlag;//接收数据标识,0 未接收数据 1 接收数据 void init_serial(); void send(); void receive(); main() { init_serial(); IE=0; //屏蔽中断 while(1) { receive(); send();} } void init_serial() //初始化串⼝ { TMOD=0x20; //定时器T1使⽤⼯作⽅式2 TH1=250; //设置初值 TH0=250; TR1=1; //开始计时 PCON=0x80; //SMOD=1; SCON=0x50; //⼯作⽅式1,波特率9600bit/s,允许接收 TI=1; } void send() { if(TI==1) //检测输出是否READY { if(recFlag==1) //是否接收过数据 { SBUF=date; //发送数据 recFlag=0; TI=0; } } } void receive() { if(RI==1) //检测是否有数据接收 { date=SBUF; //接收数据 recFlag=1; //设置接收标识符 RI=0; } }。
8051单片机特殊功能存储器SFR基础详解
![8051单片机特殊功能存储器SFR基础详解](https://img.taocdn.com/s3/m/9526c611482fb4daa58d4bab.png)
8051 单片机特殊功能存储器SFR 基础详解
8051 单片机共有21 个专用寄存器,现把其中部分寄存器简单介绍如
下:
程序计数器(PCProgram Counter)。
在实训中,我们已经知道PC 是一个16 位的计数器,它的作用是控制程序的执行顺序。
其内容为将要执行指令的地址,寻址范围达64 KB。
PC 有自动加1 功能,从而实现程序的顺序执行。
PC 没有地址,是不可寻址的,因此用户无法对它进行读写,但可以通过转移、
调用、返回等指令改变其内容,以实现程序的转移。
因地址不在SFR(专用寄
存器)之内,一般不计作专用寄存器。
累加器(ACCAccumulator)。
累加器为8 位寄存器,是最常用的专用寄存
器,功能较多,地位重要。
它既可用于存放操作数,也可用来存放运算的中
间结果。
MCS-51 单片机中大部分单操作数指令的操作数就取自累加器,许
多双操作数指令中的一个操作数也取自累加器。
B 寄存器。
B 寄存器是一个8 位寄存器,主要用于乘除运算。
乘法运算
时,B 存乘数。
乘法操作后,乘积的高8 位存于B 中,除法运算时,B 存除数。
除法操作后,余数存于B 中。
此外,B 寄存器也可作为一般数据寄存器
使用。
程序状态字(PSWProgram Status Word)。
程序状态字是一个8 位寄存器,用于存放程序运行中的各种状态信息。
其中有些位的状态是根据程序执行结。
MCS-51单片机的(SFR)特殊功能寄存器
![MCS-51单片机的(SFR)特殊功能寄存器](https://img.taocdn.com/s3/m/c2a71c19a76e58fafab00363.png)
MCS-51单片机的特殊功能寄存器从图中我们可以看出,在51单片机内部有一个CPU用来运算、控制,有四个并行I/O口,分别是P0、P1、P2、P3,有ROM,用来存放程序,有RAM,用来存放中间结果,此外还有定时/计数器,串行I/O口,中断系统,以及一个内部的时钟电路。
在一个51单片机的内部包含了这么多的东西。
对图进行进一步的分析,我们已知,对并行I/O口的读写只要将数据送入到相应I/O 口的锁存器就可以了,那么对于定时/计数器,串行I/O口等怎么用呢?在单片机中有一些独立的存储单元是用来控制这些器件的,被称之为特殊功能寄存器(SFR)。
事实上,我们已接触过P1这个特殊功能寄存器了,还有哪些呢?看下表下面,我们介绍一下几个常用的SFR。
1、ACC---是累加器,通常用A表示。
这是个什么东西,可不能从名字上理解,它是一个寄存器,而不是一个做加法的东西,为什么给它这么一个名字呢?或许是因为在运算器做运算时其中一个数一定是在ACC中的缘故吧。
它的名字特殊,身份也特殊,稍后在中篇中我们将学到指令,可以发现,所有的运算类指令都离不开它。
自身带有全零标志Z,若A=0则Z=1;若A≠0则z=0。
该标志常用作程序分枝转移的判断条件。
2、B--一个寄存器。
在做乘、除法时放乘数或除数,不做乘除法时,随你怎么用。
3指针寄存器(1)程序计数器PC指明即将执行的下一条指令的地址,16位,寻址64KB范围,复位时PC = 0000H(2)堆栈指针SP指明栈顶元素的地址,8位,可软件设置初值,复位时SP = 07H(3)数据指针DPTR@R0、@R1、@DPTR;指明访问的数据存储器的单元地址,16位,寻址范围64KB。
DPTR = DPH + DPL。
可以用它来访问外部数据存储器中的任一单元,如果不用,也可以作为通用寄存器来用,由我们自已决定如何使用。
分成DPL(低8位)和DPH(高8位)两个寄存器。
用来存放16位地址值,以便用间接寻址或变址寻址的方式对片外数据RAM或程序存储器作64K字节范围内的数据操作4、PSW-----程序状态字。
51单片机特殊功能寄存器SFR介绍
![51单片机特殊功能寄存器SFR介绍](https://img.taocdn.com/s3/m/d6aef3a66529647d272852d4.png)
51单片机特殊功能寄存器(SFR)介绍 1、21个寄存器介绍51系列单片机内部主要有四大功能模块,分别是I/O口模块、中断模块、定时器模块和串口通信模块(串行I/O口),如其结构和功能如下图:图1 51单片机结构和功能图51单片机掌握的好坏,其实就是能否正确操作这四个功能模块,而其操作的实质则又是能否对每个模块所对应寄存器的正确操纵。
所以下面重点介绍一下51系列单片机内部的特殊功能寄存器(简称SFR,以下说明以此代替)。
(关于什么叫特殊功能寄存器,这里先不作介绍,不懂的请查阅51单片机相关资料。
)51单片机内部共有21个SFR,其布局如图2,从图中可以看出,每个SFR占1个字节,多数字节单元中的每一位又有专用的“位名称”。
这21个SFR又按是否可以位寻址分为两大部分,ACC、IE、P1等11个可以位寻址,SP、TMOD等不可以位寻址。
图2 51单片机SFR布局图2、位寻址解释下面以P1、IE寄存器(可位寻)和TMOD(不可位发)为例解释一下位寻址。
能位寻址是指能够对它的每一位都可以进行位操作,如图3,如P1口接8个灯,灯阳极接正极,阴极接单片机的P1口的8个脚。
现在要让接P1口第1个引脚的灯亮,程序中可以写P1=0xfe,也可以先定义deng1=P1^0,即P1口的第1位,至于为什么写P1^0,是因为KEIL软件规定的,然后deng1=0。
也就是P1=0xfe和deng1=0都是可以点亮第一个灯,后者deng1=0属于位操作,前者P1=0xfe 属于总线操作,也就是8个引脚一起操作。
图3 8位灯接线图下面再以IE寄存器为例进行位操作的解释。
IE寄存器为中断允许寄存器,如各位的作用如图4.其中第7位EA是51单片机5个中断的总开关,如要进入任何一个中断时,需先把EA打开,因为可以进行位操作,此时程序有两种写法:1)IE=0x80(假如其它位为0,即1000 0000),也可以直接写EA=1,后者EA=1即属于位操作。
51单片机存储器结构介绍
![51单片机存储器结构介绍](https://img.taocdn.com/s3/m/788318310722192e4536f6ae.png)
MCS-51单片机存储器结构从用户的角度上,8051单片机有三个存储空间:1、片内外统一编址的64K的程序存储器地址空间(MOVC)2、256B的片内数据存储器的地址空间(MOV)3、以及64K片外数据存储器的地址空间(MOVX)在访问三个不同的逻辑空间时,应采用不同形式的指令,以产生不同的存储器空间的选通信号。
【程序内存ROM】寻址范围:0000H ~ FFFFH 容量64KBEA = 1,寻址内部ROM;EA = 0,寻址外部ROM地址长度:16位作用:存放程序及程序运行时所需的常数。
七个具有特殊含义的单元是:0000H ——系统复位,PC指向此处;0003H ——外部中断0入口000BH —— T0溢出中断入口0013H ——外中断1入口001BH —— T1溢出中断入口0023H ——串口中断入口002BH —— T2溢出中断入口【内部数据存储器RAM】物理上分为两大区:00H ~ 7FH(低128单元用户RAM 和高128单元SFR区)作用:作数据缓冲器用。
一个微处理器能够聪明地执行某种任务,除了它们强大的硬件外,还需要它们运行的软件,其实微处理器并不聪明,它们只是完全按照人们预先编写的程序而执行之。
那么设计人员编写的程序就存放在微处理器的程序存储器中,俗称只读程序存储器(ROM)。
程序相当于给微处理器处理问题的一系列命令。
其实程序和数据一样,都是由机器码组成的代码串。
只是程序代码则存放于程序存储器中。
MCS-51具有64kB程序存储器寻址空间,它是用于存放用户程序、数据和表格等信息。
(对于内部无ROM的8031单片机,它的程序存储器必须外接,空间地址为64kB,此时单片机的EA端必须接地。
强制CPU从外部程序存储器读取程序。
)对于内部有ROM的8051等单片机,正常运行时,则需接高电平,使CPU先从内部的程序存储中读取程序,当PC 值超过内部ROM的容量时,才会转向外部的程序存储器读取程序。
MCS-51单片机的内部存储器
![MCS-51单片机的内部存储器](https://img.taocdn.com/s3/m/f567f994ddccda38366baf3c.png)
③ F0(PSW.5)——用户标志位。这是一个由用户自定义的标 志位,用户根据需要用软件方法置位或复位。例如用它来控 制程序的转向。
4. 堆栈类型
向上生长型和向下生长型。MCS-51的堆栈是向上生长的。
5. 堆栈使用方法
① 调用子程序或中断时,返回地址(断点)自动进栈。程序返回时, 断点再自动弹回PC。
② 使用专用的堆栈操作指令,进行进出栈操作。保护现场(PUSH); 恢复现场(POP)。
1.4 内部程序存储器
MCS-51单片机的程序计数器PC为16位,因此可以寻址的 地址空间为64KB。8051和8751单片机内部有4KB字节 ROM/EPROM程序存储器(0000H~0FFFH),1000H~FFFFH是外 部扩展程序存储器地址空间。而8052单片机内部有8KB ROM程 序存储器,同样可以扩展到64KB。在64KB程序存储器中,有6 个地址单元具有特殊功能。
3. 堆栈指示器
堆栈共有两种操作:进栈和出栈。
但不论是数据进栈还是出栈,都是对堆栈的栈顶单元进行的, 即对堆栈栈顶单元的写和读操作。为了指示栈顶地址,所以 要设置堆栈指示器SP。SP的内容就是堆栈栈顶的存储单元地 址。
MCS-51单片机由于堆栈设在内部RAM上,因此SP是一个8位 寄存器。实际上SP就是专用寄存器的一员。系统复位后,SP 的内容为07H,但由于堆栈最好在内部RAM的30H~7FH单元中 开辟,所以在程序设计时,应注意把SP值初始化为30H。SP的 内容一旦确定,栈顶的位置就确定了。
特殊功能寄存器(SFR)
![特殊功能寄存器(SFR)](https://img.taocdn.com/s3/m/ada5311d53ea551810a6f524ccbff121dd36c59f.png)
特殊功能寄存器(SFR)
Special Functional Register
51单⽚机提供128字节的特殊功能寄存器(SFR)寻址区,地址为80H~FFH。
51单⽚机中,除了程序计数器PC和4组通⽤寄存器组之外,其他所有的寄存器均为SFR,并位于⽚内特殊寄存器区。
这个区域
可位寻址、字节寻址或字寻址,⽤以控制定时器、计数器、串⼝、IO及其他部件。
特殊功能寄存器可由以下⼏种关键字说明。
1.SFR 声明可字节寻址的特殊功能寄存器,⽐如sfr PO=0x80;表⽰PO⼝地址为80h。
注意:“ sfr”后⾯必须跟⼀个特殊寄存器名;“=”后⾯的地址必须是常数,不允许带有运算符的表达式,这个常数值的范围必须在特殊功能寄存器地址范围内,位于
Ox8OH到0xFFH之间。
2.sfr16 许多新的51派⽣系列单⽚机⽤两个连续地址的SFR来指定16位值,例如8052⽤地址Oxcc和OxCD表⽰定时器/计数器2的低和⾼字节,如sfr16 T2=0XCC;表⽰T2地址的低地址T2L=0xCC,⾼地址T2H=0xCD,sfr16声明和sfr声明须遵循相同的原则、任何符号名都可⽤在sfr的声明中。
声明中名字后⾯不是赋值语句.⽽是⼀个SFR地址,其⾼字节必须位于低字节之后.这种声明适⽤于所有新的SFR,但不能⽤于定时/计数器O和计数器1。
3. sbit 声明可位寻址的特殊功能寄存器和别的可位寻址的⽬标。
“=”号后将绝对地址赋给变量名,3种变量声明形式如下:
sbit CY=PSW^7
sbit CY=0xD0^7
sbit CY=0XD7。
MCS51单片机的特殊寄存器
![MCS51单片机的特殊寄存器](https://img.taocdn.com/s3/m/d6f4877fd1f34693daef3eea.png)
MCS-51单片机的特殊寄存器寄存器列表(21个)3、PSW寄存器4、IP寄存器5、P3接口寄存器8、SCON串口控制寄存器97H 96H 95H 94H 93H 92H 91H 90H P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.010、TCON寄存器11、P0接口寄存器 87H 86H 85H 84H 83H 82H 81H 80H P0.7P0.6P0.5P0.4P0.3P0.2P0.1P0.012、TMOD 寄存器GATE C/T M 10M GATE C/T 1M 0M 控 制 T 1控 制 T 089H和T 类同01M 0M 00011011方 式方式0方式1方式2方式301定时器模式计数器模式01与INT 无关00与INT 有关13、PCON寄存器⏹SMOD:波特率倍增位。
当SMOD=1时,波特率加倍;当SMOD=0时,波特率不加倍。
⏹GF1、GF0:两个通用标志位,用户使用。
⏹当将PD置1的指令执行后,80C51进入掉电方式,此时片内振荡器停止工作,仅片内RAM内容被保持,SFR内容也被破坏。
掉电方式下Vcc可降到2V,耗电仅50μA。
退出掉电方式唯一方法是硬件复位。
应当保证进入掉电方式前Vcc不降下来,在通过硬件复位退出掉电方式之前应当先保证Vcc恢复到正常值。
⏹当将IDL位置1指令执行后,80C51进入节电方式。
这时供给CPU的时钟信号被切断,但时钟信号仍送给片内RAM、定时器、中断系统和串口,同时CPU状态被保存,即堆栈指针、程序计数器PC、程序状态字PSW、累加器ACC及通用寄存器的内容。
节电方式下Vcc仍为5V,但耗电从24mA降到3.7mA。
退出掉电方式有两种,一种是任一中断被激活,一种是硬件复位,前者较为常用。
8051单片机21个特殊功能寄存器和指令汇总
![8051单片机21个特殊功能寄存器和指令汇总](https://img.taocdn.com/s3/m/5c5b1bbf915f804d2a16c134.png)
MCS-51单片机21个特殊功能寄存器(52系列是26个)不连续地分布在128个字节的SF R存储空间中,地址空间为80H-FFH,在这片SF R空间中,包含有128个位地址空间,地址也是80H-FFH,但只有83个有效位地址,可对11个特殊功能寄存器的某些位作位寻址操作(这里介绍一个技巧:其地址能被8整除的都可以位寻址)。
在51单片机内部有一个CPU用来运算、控制,有四个并行I/O口,分别是P0、P1、P2、P3,有R OM,用来存放程序,有R AM,用来存放中间结果,此外还有定时/计数器,串行I/O口,中断系统,以及一个内部的时钟电路。
在单片机中有一些独立的存储单元是用来控制这些器件的,被称之为特殊功能寄存器(SF R)。
这样的特殊功能寄存器51单片机共有21个并且都是可寻址的列表如下(其中带*号的为52系列所增加的特殊功能寄存器):分别说明如下:1、ACC---是累加器,通常用A表示这是个什么东西,可不能从名字上理解,它是一个寄存器,而不是一个做加法的东西,为什么给它这么一个名字呢?或许是因为在运算器做运算时其中一个数一定是在ACC中的缘故吧。
它的名字特殊,身份也特殊,稍后在中篇中我们将学到指令,可以发现,所有的运算类指令都离不开它。
自身带有全零标志Z,若A=0则Z=1;若A≠0则z=0。
该标志常用作程序分枝转移的判断条件。
2、B--一个寄存器在做乘、除法时放乘数或除数,不做乘除法时,随你怎么用。
3、PSW-----程序状态字。
这是一个很重要的东西,里面放了CPU工作时的很多状态,借此,我们可以了解CPU的当前状态,并作出相应的处理。
它的各位功能请看下表:下面我们逐一介绍各位的用途CY:进位标志。
8051中的运算器是一种8位的运算器,我们知道,8位运算器只能表示到0-255,如果做加法的话,两数相加可能会超过255,这样最高位就会丢失,造成运算的错误,怎么办?最高位就进到这里来。
这样就没事了。
第2章 MCS-51系列单片机的结构及原理
![第2章 MCS-51系列单片机的结构及原理](https://img.taocdn.com/s3/m/c2a0548884868762caaed5df.png)
2.3 引脚功能——封装形式
40P6-PDIP
单 片 机 技 术
2.3 引脚功能——引脚含义
P1. 0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 RST RXD/ P3. 0 TXD/ P3.1 INT0/ P3.2 INT1/ P3.3 T0/ P3.4 T1/ P3.5 WR/ P3.6 RD/ P3.7 XTAL2 XTAL1 VSS 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 24 22 21 VCC P0. 0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7 EA ALE PSEN P2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2. 0
2mcs51系列单片机的内部总体结构88微处理器运算部件b数据存储器ramp0口p2口程序存储器特殊功特殊功能寄存器sfrromepromvccvss图21mcs51单片机的基本结构控制部件p1口p3口串行口定时计数器中断系统88xtal1xtal2psenaleeareset端口0驱动器端口2驱动器ram地址锁存器ram1288端口0锁存器端口2锁存器rom4k8b寄存器程序地址寄存器缓冲器寄存器vcc5vvss堆栈指针spacctmp2tmp1p00p07p20p27图22mcs51片内总体结构框图rstpc1寄存器pcdptr指针p10p17psw端口3锁存器端口1锁存器端口1驱动器端口3驱动器scontl0tmodth1iepconth0sbuftxrx中断串行口和定时器逻辑tcontl1iposcp30p37alepsenxtal2xtal1alu指令寄存器定时与控制指令译码器返回本节2
21个特殊功能寄存器
![21个特殊功能寄存器](https://img.taocdn.com/s3/m/bb42243167ec102de2bd8927.png)
21个特殊功能寄存器(52系列是26个)不连续地分布在128个字节的SFR存储空间中,地址空间为80H-FFH,在这片SFR空间中,包含有128个位地址空间,地址也是80H-FFH,但只有83个有效位地址,可对11个特殊功能寄存器的某些位作位寻址操作(这里介绍一个技巧:其地址能被8整除的都可以位寻址)。
在51单片机内部有一个CPU用来运算、控制,有四个并行I/O口,分别是P0、P1、P2、P3,有ROM,用来存放程序,有RAM,用来存放中间结果,此外还有定时/计数器,串行I/O口,中断系统,以及一个内部的时钟电路。
在单片机中有一些独立的存储单元是用来控制这些器件的,被称之为特殊功能寄存器(SFR)。
这样的特殊功能寄存器51单片机共有21个并且都是可寻址的列表如下(其中带*号的为52系列所增加的特殊功能寄存器):分别说明如下:1、ACC---是累加器,通常用A表示这是个什么东西,可不能从名字上理解,它是一个寄存器,而不是一个做加法的东西,为什么给它这么一个名字呢?或许是因为在运算器做运算时其中一个数一定是在ACC中的缘故吧。
它的名字特殊,身份也特殊,稍后在中篇中我们将学到指令,可以发现,所有的运算类指令都离不开它。
自身带有全零标志Z,若A=0则Z=1;若A≠0则z=0。
该标志常用作程序分枝转移的判断条件。
2、B--一个寄存器在做乘、除法时放乘数或除数,不做乘除法时,随你怎么用。
3、PSW-----程序状态字。
这是一个很重要的东西,里面放了CPU工作时的很多状态,借此,我们可以了解CPU的当前状态,并作出相应的处理。
它的各位功能请看下表:下面我们逐一介绍各位的用途CY:进位标志。
8051中的运算器是一种8位的运算器,我们知道,8位运算器只能表示到0-255,如果做加法的话,两数相加可能会超过255,这样最高位就会丢失,造成运算的错误,怎么办?最高位就进到这里来。
这样就没事了。
有进、借位,CY=1;无进、借位,CY=0 例:78H+97H(01111000+10010111)AC:辅助进、借位(高半字节与低半字节间的进、借位)。
SFR详解
![SFR详解](https://img.taocdn.com/s3/m/b7a50e236c175f0e7cd1375f.png)
SFR 详解
SFR 是Special FuncTIon Register(特殊功能寄存器)的缩写。
SFR 特殊功能寄存器区: 8051 把CPU 中的专用寄存器、并行端口锁存器、串行口与定时器/计数器内的控制寄存器集中安排到一个区域,离散地分
布在地址从80H 到FFH 范围内,这个区域称为特殊功能寄存器区SFR。
SFR 是80C51 单片机中各功能部件对应的寄存器,用于存放相应功能
部件的控制命令,状态或数据。
它是80C51 单片机中最具有特殊的部分,现
在所有80C51 系列功能的增加和扩展几乎都是通过增加特殊功能寄存器SFR
来达到目的的。
对于80C51 系列中的80C51,共定义了26 个特殊功能寄存器。
在
80C52 中,除了80C51 的26 个特殊功能寄存器,还增加了5 个,共计31
个。
2.SFR 是法国电信和网络运行商,由沃达丰掌握32%的股权,2008 年
收购法国网络运行商NEUF,现在主要经营电信和网络业务
3.SFR (spaTIal frequency response)中文解释是"空间频率响应",一般是利于边沿去检测图像的清晰程度.
4.专用寄存器包括:1)程序计数器(PC-Program Counter)2)累加器A (ACC-Accumulator)3)B 寄存器4)程序状态寄存器(PSW-Program Status Word)等。
C51单片机21个特殊功能寄存器
![C51单片机21个特殊功能寄存器](https://img.taocdn.com/s3/m/cd5b3600bceb19e8b9f6ba16.png)
21个特殊功能寄存器(52系列是26个)不连续地分布在128个字节的SFR存储空间中,地址空间为80H-FFH,在这片SFR空间中,包含有128个位地址空间,地址也是80H-FFH,但只有83个有效位地址,可对11个特殊功能寄存器的某些位作位寻址操作(这里介绍一个技巧:其地址能被8整除的都可以位寻址)。
在51单片机内部有一个CPU用来运算、控制,有四个并行I/O口,分别是P0、P1、P2、P3,有ROM,用来存放程序,有RAM,用来存放中间结果,此外还有定时/计数器,串行I/O口,中断系统,以及一个内部的时钟电路。
在单片机中有一些独立的存储单元是用来控制这些器件的,被称之为特殊功能寄存器(SFR)。
这样的特殊功能寄存器51单片机共有21个并且都是可寻址的列表如下(其中带*号的为52系列所增加的特殊功能寄存器):分别说明如下:1、ACC---是累加器,通常用A表示这是个什么东西,可不能从名字上理解,它是一个寄存器,而不是一个做加法的东西,为什么给它这么一个名字呢?或许是因为在运算器做运算时其中一个数一定是在ACC中的缘故吧。
它的名字特殊,身份也特殊,稍后在中篇中我们将学到指令,可以发现,所有的运算类指令都离不开它。
自身带有全零标志Z,若A=0则Z=1;若A ≠0则z=0。
该标志常用作程序分枝转移的判断条件。
2、B--一个寄存器在做乘、除法时放乘数或除数,不做乘除法时,随你怎么用。
3、PSW-----程序状态字。
这是一个很重要的东西,里面放了CPU工作时的很多状态,借此,我们可以了解CPU的当前状态,并作出相应的处理。
它的各位功能请看下表:下面我们逐一介绍各位的用途CY:进位标志。
8051中的运算器是一种8位的运算器,我们知道,8位运算器只能表示到0-255,如果做加法的话,两数相加可能会超过255,这样最高位就会丢失,造成运算的错误,怎么办?最高位就进到这里来。
这样就没事了。
有进、借位,CY=1;无进、借位,CY=0例:78H+97H(01111000+10010111)AC:辅助进、借位(高半字节与低半字节间的进、借位)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MCS-51单片机的特殊功能寄存器从图中我们可以看出,在51单片机内部有一个CPU用来运算、控制,有四个并行I/O口,分别是P0、P1、P2、P3,有ROM,用来存放程序,有RAM,用来存放中间结果,此外还有定时/计数器,串行I/O口,中断系统,以及一个内部的时钟电路。
在一个51单片机的内部包含了这么多的东西。
对图进行进一步的分析,我们已知,对并行I/O口的读写只要将数据送入到相应I/O 口的锁存器就可以了,那么对于定时/计数器,串行I/O口等怎么用呢?在单片机中有一些独立的存储单元是用来控制这些器件的,被称之为特殊功能寄存器(SFR)。
事实上,我们已接触过P1这个特殊功能寄存器了,还有哪些呢?看下表下面,我们介绍一下几个常用的SFR。
1、ACC---是累加器,通常用A表示。
这是个什么东西,可不能从名字上理解,它是一个寄存器,而不是一个做加法的东西,为什么给它这么一个名字呢?或许是因为在运算器做运算时其中一个数一定是在ACC中的缘故吧。
它的名字特殊,身份也特殊,稍后在中篇中我们将学到指令,可以发现,所有的运算类指令都离不开它。
自身带有全零标志Z,若A=0则Z=1;若A≠0则z=0。
该标志常用作程序分枝转移的判断条件。
2、B--一个寄存器。
在做乘、除法时放乘数或除数,不做乘除法时,随你怎么用。
3指针寄存器(1)程序计数器PC指明即将执行的下一条指令的地址,16位,寻址64KB范围,复位时PC = 0000H(2)堆栈指针SP指明栈顶元素的地址,8位,可软件设置初值,复位时SP = 07H(3)数据指针DPTR@R0、@R1、@DPTR;指明访问的数据存储器的单元地址,16位,寻址范围64KB。
DPTR = DPH + DPL。
可以用它来访问外部数据存储器中的任一单元,如果不用,也可以作为通用寄存器来用,由我们自已决定如何使用。
分成DPL(低8位)和DPH(高8位)两个寄存器。
用来存放16位地址值,以便用间接寻址或变址寻址的方式对片外数据RAM或程序存储器作64K字节范围内的数据操作4、PSW-----程序状态字。
这是一个很重要的东西,里面放了CPU工作时的很多状态,借此,我们可以了解CPU 的当前状态,并作出相应的处理。
它的各位功能请看下表:CY:进位标志。
8051中的运算器是一种8位的运算器,我们知道,8位运算器只能表示到0-255,如果做加法的话,两数相加可能会超过255,这样最高位就会丢失,造成运算的错误,怎么办?最高位就进到这里来。
这样就没事了。
有进、借位,CY=1;无进、借位,CY=0例:78H+97H(01111000+10010111)AC:辅助进、借位(高半字节与低半字节间的进、借位)。
例:57H+3AH(01010111+00111010)下面我们逐一介绍各位的用途F0:用户标志位,由用户(编程人员)决定什么时候用,什么时候不用。
RS1、RS0:工作寄存器组选择位。
这个我们已知了。
0V:溢出标志位。
运算结果按补码运算理解。
有溢出,OV=1;无溢出,OV=0。
什么是溢出我们后面的章节会讲到。
P:奇偶校验位:它用来表示ALU运算结果中二进制数位“1”的个数的奇偶性。
若为奇数,则P=1,否则为0。
运算结果有奇数个1,P=1;运算结果有偶数个1,P=0。
例:某运算结果是78H(01111000),显然1的个数为偶数,所以P=0。
5、P0、P1、P2、P3------这个我们已经知道,是四个并行输入/输出口的寄存器。
它里面的内容对应着管脚的输出。
定时/计数器(1)定时器方式寄存器:TMOD(2)定时器控制寄存器:TCON(3)计数寄存器:TH0、TL0;TH1、TL1。
可用于设定计数初值。
8052/8032增设专用寄存器(1)定时器2控制寄存器T2CON;控制、设置工作方式。
(2)计数寄存器:TH2、TL2(3)定时器2捕获/重装载寄存器:RCAP2H、RCAP2L存放自动重装载到TH2、TL2的数据寄存器地址88H,位寻址8FH~88H。
位地8F8E8D8C8B8A8988址TF1TR1TF0TR0IE1IT1IE0IT0位符号TF0(TF1)——计数溢出标志位,当计数器计数溢出时,该位置1。
TR0(TR1)——定时器运行控制位当TR0(TR1)=0 停止定时器/计数器工作当TR0(TR1)=1 启动定时器/计数器工作IE0(IE1)——外中断请求标志位当CPU采样到P3.2(P3.3)出现有效中断请求时,此位由硬件置1。
在中断响应完成后转向中断服务时,再由硬件自动清0。
IT0(IT1)——外中断请求信号方式控制位当IT0(IT1)=1 脉冲方式(后沿负跳有效)当IT0(IT1)=0 电平方式(低电平有效)此位由软件置1或清0。
TF0(TF1)——计数溢出标志位当计数器产生计数溢出时,此位由硬件置1。
当转向中断服务时,再有硬件自动清0。
计数溢出的标志位的使用有两种情况:采用中断方式时,作中断请求标志位来使用;采用查询方式时,作查询状态位来使用。
TMOD:工作方式控制寄存器当=0时,以运行TR0(或TR1)启动或禁止定时器、计数器当=1时,以TR0*/INT0(或TR1*/INT1)启动或禁止定时器、计数器GATE=0 以TR0(TR1)启动定时器GATE=1 以INT0(INT1)启动定时器C/T=0 定时/计数工作方式选择位M1M0——工作方式选择位T2MOD:工作方式控制寄存器寄存器地址0C9H,不可位寻址------T2OE DCENT2OE:定时器2输出允许位,当=1时,P1.0/T2引脚输出连续脉冲信号DCEN:当=1时,T2配置成向上向下计数器SCON:串行口控制寄存器寄存器地址98H,位寻址9FH~98H。
位地址9F9E9D9C9B9A9998位符号SM0SM1SM2REN TB8RB8TI RISM0、SM1:串行口工作方式选择位两个选择位对应于四种状态,所以串行口能以四种方式工作,(UART ---异步通讯口)见表2-9。
SM2:多机通信控制位➢Mode 0时,SM2=0;➢Mode 1时,若SM2=1,且收到有效的停止位,则RI=1(产生RI中断),否则RI=0;➢Mode 2或Mode 3时,若SM2=1,且收到第九位为1,则RI=1(产生RI中断),若第九位为0,则RI=0;REN:允许/禁止串行口接收的控制位REN=1时,允许接收,REN=0时,禁止接收TB8:在方式2和方式3中,是被发送的第9位数据,可根据需要由软件置1或清零,也可以作为奇偶校验位,在方式1中是停止位。
RB8:在方式2和方式3中,是被接收的第9位数据(来自第TB8位);在方式1中,RB8收到的是停止位,在方式0中不用。
TI——串行口发送中断请求标志位当发送完一帧串行数据后,由硬件置1;在转向中断服务程序后,用软件清0。
RI——串行口接收中断请求标志位当接收完一帧串行数据后,由硬件置1;在转向中断服务程序后,用软件清0。
在C51单片机编程中,头文件INTRINS.H的函数使用起来,就会让你像在用编时一样简便.内部函数描述_crol_ 字符循环左移_cror_ 字符循环右移_irol_ 整数循环左移_iror_ 整数循环右移_lrol_ 长整数循环左移_lror_ 长整数循环右移_nop_ 空操作8051 NOP 指令_testbit_ 测试并清零位8051 JBC 指令函数名:_crol_,_irol_,_lrol_原型:unsigned char _crol_(unsigned char val,unsigned char n);unsigned int _irol_(unsigned int val,unsigned char n);unsigned int _lrol_(unsigned int val,unsigned char n);举例:_crol_,_cror_:将char型变量循环向左(右)移动指定位数后返回_testbit_:相当于JBC bitvar测试该位变量并跳转同时清除。
_chkfloat_:测试并返回源点数状态。
就是汇编中的子函数。
_crol_,_cror_:如国二进制数为01010101 那么_crol_(1) 左移1位后将高位补低位。
结果10101010。
功能:_crol_,_irol_,_lrol_以位形式将val 左移n 位,该函数与8051“RLA”指令相关,上面几个函数不同于参数类型。
例:#include <intrins.h>main(){unsigned int y;C-5 1 程序设计37y=0x00ff;y=_irol_(y,4);}函数名:_cror_,_iror_,_lror_原型:unsigned char _cror_(unsigned char val,unsigned char n);unsigned int _iror_(unsigned int val,unsigned char n);unsigned int _lror_(unsigned int val,unsigned char n);功能:_cror_,_iror_,_lror_以位形式将val 右移n 位,该函数与8051“RRA”指令相关,上面几个函数不同于参数类型。
例:#include <intrins.h>main(){unsigned int y;y=0x0ff00;y=_iror_(y,4);}函数名:_nop_原型:void _nop_(void);功能:_nop_产生一个NOP 指令,该函数可用作C 程序的时间比较。
C51 编译器在_nop_函数工作期间不产生函数调用,即在程序中直接执行了NOP 指令。
例:P()=1;_nop_();P()=0;函数名:_testbit_原型:bit _testbit_(bit x);功能:_testbit_产生一个JBC 指令,该函数测试一个位,当置位时返回1,否则返回0。
如果该位置为1,则将该位复位为0。
8051 的JBC 指令即用作此目的。
_testbit_只能用于可直接寻址的位;在表达式中使用是不允许的。
在C51单片机编程中,头文件INTRINS.H的函数使用起来,就会让你像在用汇编时一样简便.内部函数描述_crol_ 字符循环左移_cror_ 字符循环右移_irol_ 整数循环左移_iror_ 整数循环右移_lrol_ 长整数循环左移_lror_ 长整数循环右移_nop_ 空操作8051 NOP 指令_testbit_ 测试并清零位8051 JBC 指令函数名:_crol_,_irol_,_lrol_原型:unsigned char _crol_(unsigned char val,unsigned char n); unsigned int _irol_(unsigned int val,unsigned char n);unsigned int _lrol_(unsigned int val,unsigned char n);举例:_crol_,_cror_:将char型变量循环向左(右)移动指定位数后返回_testbit_:相当于JBC bitvar测试该位变量并跳转同时清除。