单片机原理及应用课件:第4章 单片机应用系统编程基础1_第1页
单片机原理及应用课件:第4章 单片机应用系统编程基础1_第2页
单片机原理及应用课件:第4章 单片机应用系统编程基础1_第3页
单片机原理及应用课件:第4章 单片机应用系统编程基础1_第4页
单片机原理及应用课件:第4章 单片机应用系统编程基础1_第5页
已阅读5页,还剩102页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第4章单片机应用系统编程基础内容:从源程序到可执行代码机器码-汇编语言-高级语言MCS-51汇编语言指令分析汇编语言程序组成与结构从C语言过渡到C51程序设计举例4.1从源程序到可执行代码1.CPU的工作方式计算机工作时,CPU总是周而复始地做取指——解释指令——下达命令这一项工作。在每个指令周期中,CPU先取指令代码,再对指令进行解析,产生决策,由系统完成指令的功能。指令代码是什么?它是怎样形成的?又是如何放入单片机系统中的?2.计算机“智慧”的来源 计算机(单片机)系统能完成一项具体的、复杂的工作,说明它有思维的能力。它的“智慧”是从哪来的呢?答案是人赋予它的。3.计算机的加工原料计算机的加工原料是数据且只有数据。4.2机器码-汇编语言-到高级语言

计算机的CPU只能识别的二进制代码。计算机发明之初,程序是由编程者直接输入机器码使计算机工作的。 机器码是计算机最底层的可执行的代码。由于难于理解、编程工作量大,而效率极低,直接输入机器码的方法只适于专业计算机软件人员,不利于计算机的发展和普及。4.3MCS-51汇编语言指令分析请特别注意:

51机共有111条指令,按其占用空间大小分:单字节指令(指令码代码为1个字节)49条,双字节指令45条,三字节指令17条。 按指令执行速度分:单周期指令(指令执行的时间为1个机器周期)64条,双周期指令45条,4周期指令2条(乘、除)。在12M时钟条件下,指令执行时间分别为1、2、4微秒。4.3.1MCS-51汇编语言格式MCS-51系列单片机汇编语言格式如下:[标号]:<操作码助记符>[第一操作数],[第二操作数];注释例如: RET ;无第一操作数

CLP A ;有第一操作数

MOV A,75H;有第1及第2操作数4.3.2MCS-51指令中的符号说明

4.3.3MCS-51的寻址方式所谓寻址方式,就是CPU寻找操作数的方式。51机有以下几种寻址方式:1.立即寻址:操作数直接包含在指令中。符号“#”表示其后的数据为立即数。如:MOV A,#40H ;将8位二进制数40H赋予AMOV DPTR,#1000 ;将1000赋予数据指针DPTR2.直接寻址:可访问SFR、内部RAM、位。如:MOV TH0,A ANL 70H,#48H ;直接寻址,也属于立即寻址MOV C,bit3.寄存器寻址:对象为R0~R7、A、B、DPTR等。如MOV A,R3MUL AB4.寄存器间接寻址:可访问片内、外RAM。如:MOV @Ri,A ;i=0,1只有R0、R1可作间址寄存器5.变址寻址:由偏移量寄存器A和基址寄存器DPTR或PC的“和”作为地址的寻址方式。如:MOVC A,@A+DPTR ;MOVC专对ROM操作MOVC A,@A+PCJMP @A+DPTR6.相对寻址:以PC的内容为加上指令中的偏移量作为转移地址的寻址方式,地址转移范围为:-128~127如:DJNZ R7,rel7.位寻址:对片内20H~2FH及SFR可位寻址单元的操作。如:MOV C,20H ;片内位操作指令4.3.4MCS-51指令概述按指令功能,可将MCS-51的指令分为以下5类:数据传送与互换类。算术运算类。逻辑运算类。控制转移类。位操作类。1.数据传送与互换类指令数据传送与互换类指令列于表4-2中。第4章补充作业:(1)描述MOVA,Rn和MOV@Ri,A两条指令的功能。(2)作图示意用RLCA指令,将3字节长度的正整数左移一位的过程,进而再将这个数再左移一位,预测其结果。由此得到结论:一个正整数左移一位数值变化的规律及保证正确的条件是什么?(3)写出实现片将内30H中的内容求反的程序段。(4)写出基于CJNE指令实现判断两个正整数数量关系(大于、等于、小于)的程序段。(5)说明定位汇编主程序0000H的道理及方法。又为什么主程序的第一条指令通常都是跳转指令?数据传送指令包括:(1)内部RAM与SFR之间的数据传送,这类指令用“MOV”作为指令助记符。(2)外部RAM与A之间的数据传送,这类指令用“MOVX”作为指令助记符。(3)程序存储器单元的内容读入A中的指令,用“MOVC”作为指令的助记符。(4)堆栈操作类指令。(5)数据交换类指令。数据传送与交换类指令有如下特点:(1)数据传送类指令的数据流是单向的。第2操作数总是要传送到第1操作数的。所以,第1操作数既是目的数,又是操作数。指令执行后不改变第2操作数的内容。在表5-4第3列中的箭头方向,表示数据流的方向。(2)交换类指令数据传送是双向的。影响第1、2操作数。(3)数据传送指令不是在所有寄存器和存储器单元间都能直接实现的。即某两个单元间的数据传送,是需要匹配的。(4)数据传送与交换类指令的寻址方式,包括立即直接、间接、寄存器和变址寻址5种方式,因此数据交换方式多,使用方便。(5)表4-4第4列为指令执行的机器周期数和代码的字节数,对精益求精者来说,使用哪条指令更好还是有推敲余地的。(6)对片内RAM的间址寄存器是R0和R1,而R2~R7不可以!外部存储器间的数据交换,可通过R0和R1、DPTR和PC实现,而且对它们的操作只有间接寻址一种方式。R0和R1的间址范围为0~FFH,只有两种指令形式:MOVX A,@Ri MOVX @Ri,A 从时间、空间效率上讲,完全可用以下两条指令实现:MOVX A,@DPTR MOVX @DPTR,A

一般情况下,对外部RAM操作用DPTR作为数据指针。R0和R1只有在外部数据指针不够用,且这些数据位于第一页(0~FFH)时,才使用它们。注:DPTR不能作为片内RAM的数据指针。(7)数据传送指令不影响PSW内容,只是当数据送入A时才影响奇偶标志位P。【例4-1】设51机片内RAM中30H单元的内容为40H,而40H单元的内容为50H。P1口作为输入口,数据为0CAH,下列指令顺序执行时,相关单元的内容为何值?

MOV R0,#30H ;(R0)=30H,立即寻址

MOV A,@R0 ;(A)=40H,间接寻址,P=1。

MOV R1,0E0H ;(R1)=40H,E0是A的地址

MOV B,@R1 ;(B)=50H,间接寻址

MOV @R1,P1 ;(40H)=0CAH,间接寻址

MOV P2,P1 ;(P2)=0CAH(P2为输出)解:答案见注释。

【例4-3】设(R0)=20H,(A)=4EH,片内RAM(20H)=85H。下列指令顺序执行,所涉及的单元(寄存器和存储器)的内容如何变化?XCHA,@R0 ;执行后(A)=85H,(20H)=4EH,(R0)不变XCHDA,@R0 ;执行后(A)=8EH,(20H)=45H,(R0)不变SWAPA ;执行后(A)=E8H,(20H)、(R0)不变解:答案见注释。2.算术运算类指令算术运算指令是对寄存器及存储器单元进行“+”、“-”、“×”、“÷”这四种基本运算的指令。表4-3为MCS-51的算术运算类指令集。

1.加法指令的特点:

(1)目的操作数均是累加器A。寄存器、直接、寄存器间接、立即等四种寻址方式,结果在A中;(2)影响进位标志Cy、OV、Ac及P。(3)溢出标志OV为1的条件是: 执行加法运算后,符号位(b7),出错或但结果不正确时,OV=1。④带进位加法指令(ADDC)中的累加器A除了加源操作数外,还需要加上进位标志Cy。2)减法指令 特点:结果在A中。寻址方式同加法影响标志位:

Cy:为1,表示被减数小于减数,产生借位;

OV:对带符号数OV为1,结果不正确。

Ac:如果b3位向b4位借位,则为1;反之为0。

P:累加器A中“1”的个数为奇数时,P为1。 只有带借位的减法指令,因此,用减法指令前,往往需通过“CLRC”指令,将进位标志Cy清零。【例4-3】试分析:在下列程序段指令顺序执行后,PSW中各标志位的状态。

MOV A,#10101101B ;把ADH送A中,P=1,PSW的其它位均为0ADD A,#10011101B ;(A)=ADH+9DH=4AH,P、OV、AC、CY均为1ADDC A,#00H ;(A)=4BH,P=0SUBB A,#4CH ;(A)=FFH,AC、CY为1ADD A,#01H ;(A)=00H,CY为1

解:第1条指令执行后,(A)=ADH中,由于ADH中共有5个“1”,因此,奇偶标志位P为“1”,PSW中其它状态位不变。ADH=173(无符号数)或-83(有符号数:补码);9DH=157(无符号数)或-99(有符号数)。第2条指令执行的计算式如图4-2(a)所示。

作为无符号数,两数之和为14AH,即330,正确。但结果超出FFH,进位的“1”自然丢失,寄存器A的内容为4AH。进位值在CY中。 作为有符号数,两数之和应为-182。结果是4AH或14AH都不对,此时,OV=1,说明“和”超出了值域,结果不正确。 因此,做有符号数运算时,用OV作为溢出的判据是必要的。

第4条是减法指令。执行前只有P=1,被减数:4BH=75(有符号数与无符号数同值,即正数的补码等于原码);减数:4CH=76。 作为有符号数,结果为-1,正确。 作为无符号数,只看A的内容,结果是不正确的。但考虑到借位,即256+75-76=255,结果依然正确。其计算式如图4-2(b)所示。注:有关有符号数的概念本书只做介绍,而运算的重点将放在无符号整数上。

3)加1、减1指令 助记符为INC、DEC类指令,其功能是使指令中的操数,加1和减1。它们的特点是不影响标志位,只有操作数为A时,才影响奇偶标志位P。所以加1、减1指令主要用于循环程序结构中的数据指针的变化方向。例如: INC R0 ;或INC R1

INC DPTR

当操作数为FFH时,再加1,操作数将回到00H,而当操作数为00H时,再减1,操作数将回到FFH。这一特点可形成8位循环控制计数。注意:DECDPTR非法4)乘法和除法指令 只有MULAB一条。功能如下:

A × B = B A

被乘数

乘数 积高8位 低8位 运行时间为4个机器周期。 该指令影响标志位:当结果大于255时,OV为1,反之为0。

Cy总为0;AC保持不变;P随A中“1”的个数而变化。除法指令只有DIVAB一条。

A ÷ B = A B

被除数

除数 商余数运行时间为4个机器周期。影响标志位:除数为0,执行后,结果将不确定,且OV为1。Cy总为0。AC保持不变;奇偶标志P位随累加器A中“1”的个数变化而变化。5)十进制加法调正指令 计算机是以二进制计数的。但人们早已习惯十进制计数方式。典型的例子是计算器。那么计算机系统如何实现十进制运算呢?十进制调整指令只有助记符为DAA这一条。其用法见例4-16。4.5.4逻辑操作类指令

51提供了丰富的逻辑运算指令,包括逻辑非、与、或、异或以及循环移位操作等。如表4-4所示。 特点:不影响PSW中的标志位。只有在A参与的带进位Cy循环移位时,才影响Cy和奇偶标志P。1)逻辑运算类指令的特点 (1)不影响程序标志位。只有在A参与的带Cy的循环移位时,才影响Cy和P。 (2)所有逻辑运算均按位进行,例如当A=10100101B,与立即数01011010B相与,即执行指令:ANLA,#01011010B后,指令执行后累加器A为0。 (3)“与”、“或”、“异或”指令的寻址方式相同,指令的条数一样多。

【例4-4】在程序中将P1口的b4、b2位清零,而其它位的内容不变,可用什么指令?解:预将变量中某些指定位清零,用它与立即数相与的方法最容易想到,该立即数除那些“指定位”外,全为1。 本题用指令:ANL P1,#11101011B来实现。【例4-5】在程序中将P1口的b4、b2位置位,而其它位的内容不变,可用什么指令? 解:将立即数中“指定位”设为1,再与目标相或(ORLP1,#00010100B)即可实现。 异或指令的逻辑关系这样记忆:相同为“0”,相异为“1”。【例4-6】在程序中检测A与SBUF的内容是否相等,可采用什么算法? 解:判断2个寄存器的内容是否相等,用“异或”逻辑非常方便,对本例,指令XRLA,SBUF效率极高。 指令执行后,若(A)=0,则两个寄存器内容相等,否则就不等。判断(A)是否为0的指令,后面就会学到。2)循环移位类指令循环移位类指令均以A为操作数,此类指令使用频繁,可参与数学运算、逻辑运算、循环计数、I/O操作等多种过程。这类指令又分带CY循环移位,即(A)连同CY一起作开放循环;及不带CY的循环,即(A)内封闭循环。 移位又分左右两个方向,见表4-4指令功能描述中箭头方向。

【例4-7】为防止数据溢出,先假设(A)≤3FH,现要对A进行乘4运算,试实现之。解:方法1,用移位指令实现,程序段如下:

RL A RL A 循环左移两次相当于乘4。“RLA”是不包括Cy的左移需要2×1个机器周期,2×1字节代码。而如用乘法指令实现,其程序段如下:

MOV B,#04H ;2字节1个机器周期指令

MUL AB ;1字节4个机器周期指令

3字节代码,5个机器周期,还要占用B。

推论:多字节数进行乘以/除以2n的运算,移位要依次按序到每一字节。乘2要从数据低位开始向高位依次作带Cy循环左移一次;除2要从数据高位开始向低位依次作带Cy循环右移一次。4.控制转移指令不包括布尔变量控制程序转移指令,MCS-51控制转移指令共17条,列于表4-7中。1.绝对调用指令:ACALLaddr11的(PC15~11)不变,说明这条指令只能在(addr10~0)这11位可变地址空间有效,即2K空间内绝对调用。2.解决方法 慎用ACALLaddr11、AJMPaddr11这类指令,而放心使用LCALLaddr16、LJMPaddr16这类指令,它们是长调用和长跳转指令,可在64K程序空间自由应用。间接长转移JMP@A+DPTR也是64K范围的。【例4-8】子程序及C语言程序的无参数传递和返回值的函数,名均为H_TO_ASC,在两种语言中如何调用它们? 解: 汇编语言:LCALL H_TO_ASC C语言:H_TO_ASC();

调用指令功能是调用子程序(相当于C程序中的函数)。 为了在子程序调用完成后,程序能回到调用点的下一条指令,单片机将返回地址压入堆栈,当子程序执行完成,单片机将堆栈的内容弹入PC,再次回到主程序中。 子程序还可以调用子程序,形成程序调用嵌套,程序的调用、嵌套、返回过程如图4-3所示。子程序的嵌套不受级数的限制只受堆栈空间的大小的影响。 CPU如何知道子程序返回呢?这就是子程序返回指令——RET。当程序执行到RET指令时,经CPU解释,将产生弹栈值到PC的操作,于是进程返回到上级程序中。因此,调用类指令必须与RET指令成对应用。这一原则对所有计算机都适用。 子程序中的RET可以有多个,这与C语言中的return可以有多个一样。 这就是说,子程序可以有多个用于选择的出口,但每次只能用一个。2)相对转移指令表4-5中从SJMPrel到RET前所有指令,均为相对转移指令,其特点是:集逻辑判断和跳转功能为一体的复合型指令,转移目的地由偏移量rel指出。偏移量rel的取值范围为-128~+127,这类指令的转移范围,不受页的限制,只受空间长度的限制。每条指令的具体功能如表4-5所示。对相对转移跨度大的程序结构,可用搭桥的方法使解决转移问题。具体说就是,将长跳转指令夹在指令和目标之间,起跳板的作用。见下面的程序段:JNZ ROAD1 ;(A)≠0则转移,否则顺序执行LJMP ROAD2ROAD1: …… ;……表示ROAD2分支的程序段LJMP COMOUT ;功能:转移和两段程序的隔离墙ROAD2:…… ;……表示ROAD1分支的程序段COMOUT:…… ;共同出口,继续执行

3)中断返回指令 表4-5中RETI为中断返回指令。它的功能与RET类似,只是RETI是用于中断服务程序中的。关于RETI将在中断部分加以应用和说明。

空操作指令NOP。与C程序中的单“;”相当。执行NOP指令时,CPU什么事也没有做,只消耗CPU的一个机器周期时间。NOP指令常用于延迟或等待程序部分中。5.位操作类指令 单片机在控制系统中常需进行线路通、断,继电器的吸合与释放等位逻辑操作。位操作指令将为这类操作提供更多的灵活性。

51机内部RAM128个位SFR128个位寻址,共256个位地址,都是位操作的对象。MCS-51位操作指令列于表4-6中。位操作类指令有如下特点:(1)位单元C相当于字节操作中的累加器。C就是PSW中的CY。位变量中内容的传送,通过:MOV C,bit和MOV bit,C这一对指令实现。(2)位操作中的立即寻址是由CLR bit和SETB bit这一对指令实现的。而立即寻址符“#”被字节指令占用,不能再为位操作指令使用。看下面的例子:MOV C,#11H 位空间不能放字节数据,正确的是MOVC,11H等SETB A SETB只能对位,不能对字节,应是SETBACC.0等【例4-9】地址为20H的位单元,位于哪个字节单元中?将其内容“置位”,应用那条指令实现?

解:第一问的答案可以通过查表3-4确定,也可以通过推算而得到。答案是24H字节单元的D0位。用下列指令将位地址20H单元内容“置位”的指令应为SETB20H。 位操作的对象是“位单元”或“位变量”中的内容。字节操作的对象是“字节单元”或“字节变量”中的内容。还有就是可位寻址单元都在51机片内。4.4汇编语言程序组成与结构有关程序的几个概念1.程序(Programs)是由人编写的、将指令按某种规则有机排列而成的、能完成某项有意义工作的特殊文件。2.算法(Algorithms)是程序的动作规则,它描述了解决问题所采取的方法和步骤。3.数据结构(DataStructure)是程序对对象(或数据)的描述,它描述了问题所涉及的对象以及对象之间的联系和组织方式。

1976年计算机科学家沃思,明确提出算法和数据结构是程序的两个要素:程序=算法+数据结构4.4.1汇编语言程序的组成部分一个完整的汇编语言程序由以下几个部分组成:1.主程序 主程序是单片机完成某项任务的主流程序。单片机在工作时,总进程总是沿主程序规定的方向运行,并在某些特定的环节上周而复始的运行。2.子程序汇编体系中的子程序与C语言中的函数相当。子程序是能够实现某个单一的、具有某种共性的、在整个程序中将反复应用的一个程序。使用子程序主要由以下两个原因:(1)节省代码空间(2)模块化结构设计的需要。3.中断服务程序 中断服务程序可以理解为一种特殊子程序。但它们是由“偶然事件”触发而被执行的,不象子程序那样,由程序主动调用。4.程序的定位和说明一个程序,除具有实在意义的指令外,有时还需要通知编译器工作方式的指令。如文件包含、程序代码的起始地址、表格数据的起始地址等说明性指令,这类工作是用伪指令来实现的。所谓伪指令,就是形如指令,但编译器并不将其编译成机器码的一类指令。表4-7为汇编体系中常用的一些伪指令。

学习单片机的编程,需严格按照后缀名的规定分类,文件才能被编译系统识别。汇编源程序以asm为后缀,C51源程序以c为后缀,头文件以h为后缀。这是常用的三类源文件。源文件通过编译连接后,还会生成几种其它类型的文件,如.hex文件,它是十六进制格式的程序代码文件。4.4.3汇编语言程序结构与一般格式汇编语言程序由主程序、中断服务程序、子程序、数据表格及由伪指令集组成的程序包装部分等组成。事实上,汇编语言程序组成及结构与C语言程序是一样的,只是汇编程序要求更简单,更随意。学习时,要注意比较两者的异、同点。【例4-10】包含主程序、中断服务程序、子程序、数据表格及伪指令的汇编及C语言程序样式及对比与分析。以下是汇编语言示范程序,阅读时请特别注意注释部分的说明。SCL BIT P1.2 ;伪指令,定义SCL位变量ADDR0 DATA 30H ;定义ADDR0,等价于ADDR0 EQU 30HORG 0000H ;主程序的起始点。相当于C中的“{”

LJMP Main ;作一个跳转,用Main作主程序标号ORG 0003H ;外部中断0的服务程序入口地址LJMP INT0int ;INT0int为外部中断0服务程序地址标号

;------------------------------主程序----------------------------------ORG 0040H ;定位主程序代码首地址,如0040HMain: MOV SP,#5FH ;初始化堆栈指针SP,51设在5FH较为合适

SETB EX0 ;允许外部中断0中断

SETB EA ;中断开放AGAIN:MOV A,#02H ;预取表中第2号数码(序号从0开始)

LCALL GETDATA ;子程序调用

LJMP AGAIN ;周期工作TABLE1: ;数据表标号DB 5AH,5BH,5CH,5DH ;5CH相对于标号的偏移地址为2

;------------------------------------子程序结构-----------------------------------------GETDATA:

MOV DPTR,#TABLE1 ;指向数据表首地址TABLE1

MOVC A,@A+DPTR ;比MOVCA,@A+PC指令更常用

MOV ADDR0,A CPL SCL RET ;子程序返回

;----------------中断服务程序结构------------------INT0int: ;中断服务程序PUSH PSW ;INT0int是程序名必须有PUSH Acc ;保护有关寄存器…… ;中断程序实体POP AccPOP PSW ;恢复现场RETI ;中断—返回,必不可少END ;程序结束伪指令4.5从C语言过渡到C51

1.其实只要抓住以下2点,C51源文件编写就与标准C没有什么区别了:

(1)C51不仅要定义变量类型,还要定义变量所在存储器类型。

51机采用存储器独立编址,各类存储器地址有重合。因此,C51在定义变量类型时,还要指定变量的存储空间。

KeilC51编译器支持的存储器类型如表4-1所示。【例4-11】定义一个指向程序存储器、片外RAM、片内RAM的字符型指针变量。 解:C51指针变量定义的一般形式为: 数据类型[存储器类型1]*[存储器类型2]标识符。其中存储器类型都是可选项。例如unsignedcharcode*point_l;//定义一个指向程序存储(code)指针,point_l被安排在片内RAM中unsignedcharcode*xdatapoint_l;//point_l指定安排在片外RAM中unsignedcharxdata*point_x; //定义一个指向片外RAM的指针unsignedchardata*point_r; //定义一个指向片内RAM的指针code、xdata、data是存储类型,unsignedchar是数据类型。【例4-12】如何定义程序存储区的字符型数据表格? 解:单片机应用系统中,常将常数表格放在程序存储器区,其格式为:

unsignedcharcodeTable_CRC[256]={0,94,188,226,97,63,221,…}

//共256个数据

【例4-13】位变量的定义与使用方法。

bitend_of_ADconver=0;

//用end_of_Adconver作为标志,初值为0 end_of_Adconver=1; //位变量置1

可预见,编译系统一定将位变量安排在可位寻址的位单元(片内RAM中20H~2FH或PSW的F0或F1)中。用bdata型,可同时定义一个字节8个位变量,方法如下:staticbdataucharsclkdata; //bdata在片内20H~2FH空间sbitsclkdata0=sclkdata^0; //接着定义字节中的位变量名sbitstation_AB=sclkdata^1;sbitstation_X=sclkdata^2; //X、Y表示水平和垂直位置sbitstation_Y=sclkdata^3; sbitsclkdata4=sclkdata^4; sbitsclkdata5=sclkdata^5;sbitsclkdata6=sclkdata^6;sbitsclkdata7=sclkdata^7;2C51源程序中一般要包含描述51机资源的头文件51机资源头文件用以下格式定义P3口:SfrP3=0xb0; //等价于Sfr(P3,0xb0); P3口是多功能复用口,也是可位寻址的,每一位的定义如下:sbitP3_0 =0xb0; 对照

sbitRXD =0xB0;sbitP3_1 =0xb1; 对照

sbitTXD =0xB1;sbitP3_2 =0xb2; 对照

sbitINT0 =0xB2;sbitP3_3 =0xb3; 对照

sbitINT1 =0xB3;sbitP3_4 =0xb4; 对照

sbitT0 =0xB4;

值得注意的是:头文件的后缀名必须为h或H。但头文件名可以随意取,内容以能表明所适用的51机型为准。头文件中重要的部分是内容,即SFR的的地址。

SFR的名字,是使用者约定俗成的,无严格限制;但它们所在的地址的定义是严格的,否则会造成操作对象的混乱。此外,在一个H文件中,对同一个SFR可以有多个名字,但不能与其它SFR重名。 以下是一个头文件的例子。

/*BYTERegisters*/ sfr AUXR =0x8E; sfr AUXR1 =0xA2; sfr SADDR =0xA9; sfr IPH =0xB7; sfr SADEN =0xB9; sfr T2MOD =0xC9; sfr P0 =0x80; sfr P1 =0x90; sfr P2 =0xA0; sfr P3 =0xB0; sfr PSW =0xD0; sfr ACC =0xE0; sfr B =0xF0; sfr SP =0x81; sfr DPL =0x82; sfr DPH =0x83; sfr PCON =0x87; sfr TCON =0x88; sfr TMOD =0x89; sfr TL0 =0x8A; sfr TL1 =0x8B; sfr TH0 =0x8C; sfr TH1 =0x8D; sfr IE =0xA8; sfr IP =0xB8; sfr SCON =0x98; sfr SBUF =0x99;

/*8052Extensions*/ sfr T2CON =0xC8;第二节机器码-汇编语言-到高级语言

sfr RCAP2L =0xCA; sfr RCAP2H =0xCB; sfr TL2 =0xCC; sfr TH2 =0xCD;

/*BITRegisters*/ /*PSW*/ sbit CY =0xD7; sbit AC =0xD6; sbit F0 =0xD5; sbit RS1 =0xD4; sbit RS0 =0xD3; sbit OV =0xD2; sbit P =0xD0;

/*TCON*/ sbit TF1 =0x8F; sbit TR1 =0x8E; sbit TF0 =0x8D; sbit TR0 =0x8C; sbit IE1 =0x8B; sbit IT1 =0x8A; sbit IE0 =0x89; sbit IT0 =0x88;

/*IE*/ sbit EA =0xAF; sbit ES =0xAC; sbit ET1 =0xAB; sbit EX1 =0xAA; sbit ET0=0xA9; sbit EX0 =0xA8;

/*IP*/ sbit PS =0xBC; sbit PT1 =0xBB; sbit PX1 =0xBA; sbit PT0 =0xB9; sbit PX0 =0xB8;

/*P3*/ sbit RD =0xB7; sbit WR =0xB6; sbit T1 =0xB5; sbit T0 =0xB4; sbit INT1 =0xB3; sbit INT0 =0xB2; sbit TXD =0xB1; sbit RXD =0xB0;

/*SCON*/ sbit SM0 =0x9F; sbit SM1 =0x9E; sbit SM2 =0x9D; sbit REN =0x9C; sbit TB8 =0x9B; sbit RB8 =0x9A; sbit TI =0x99; sbit RI =0x98;

/*8052Extensions*/ /*IE*/ sbit ET2 =0xAD;

/*IP*/ sbit PT2 =0xBD;

/*P1*/ sbit T2EX =0x91; sbit T2 =0x90;

/*T2CON*/ sbit TF2 =0xCF; sbit T2IP =0xCE; sbit T2IE =0xCD; sbit T2RSE =0xCC; sbit BGEN =0xCB; sbit TR2 =0xCA; sbit C_T2 =0xC9; sbit CP_RL2 =0xC8;

/*BITRegisters*/ /*P1*/ sbit P1_0 =0x90; sbit P1_1 =0x91; sbit P1_2 =0x92; sbit P1_3 =0x93; sbit P1_4 =0x94; sbit P1_5 =0x95; sbit P1_6 =0x96; sbit P1_7 =0x97;

/*P2*/ sbit P2_0 =0xa0; sbit P2_1 =0xa1; sbit P2_2 =0xa2; sbit P2_3 =0xa3; sbit P2_4 =0xa4; sbit P2_5 =0xa5; sbit P2_6 =0xa6; sbit P2_7 =0xa7;

/*P3*/ sbit P3_0 =0xb0; sbit P3_1 =0xb1; sbit P3_2 =0xb2; sbit P3_3 =0xb3; sbit P3_4 =0xb4; sbit P3_5 =0xb5; sbit P3_6 =0xb6; sbit P3_7 =0xb7

/*P0*/ sbit P0_0 =0x80; sbit P0_1 =0x81; sbit P0_2 =0x82; sbit P0_3 =0x83; sbit P0_4 =0x84; sbit P0_5 =0x85; sbit P0_6 =0x86; sbit P0_7 =0x87;

/*downisSTCadditionalSFR*/ sfr P4 =0xe8; sbit P4_3 =P4^3; sbit P4_2 =P4^2; sbit P4_1 =P4^1; sbit P4_0 =P4^0; s

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论