MCS-51单片机的(SFR)特殊功能寄存器详细解析
特殊功能寄存器

特殊功能寄存器(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单片机引脚功能与特殊功能寄存器详解

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单片机存储器结构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单片机特殊寄存器功能说明概要

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系列单片机的结构及原理

(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单片机的特殊功能寄存器从图中我们可以看出,在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-----程序状态字。
特殊功能寄存器

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使⽤⽅法 串⾏⼝中有两个缓冲寄存器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; } }。
- 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测试该位变量并跳转同时清除。