第四章 MCS-51单片机汇编语言程序设计_第1页
第四章 MCS-51单片机汇编语言程序设计_第2页
第四章 MCS-51单片机汇编语言程序设计_第3页
第四章 MCS-51单片机汇编语言程序设计_第4页
第四章 MCS-51单片机汇编语言程序设计_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

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

文档简介

1、4-1 伪指令伪指令4-2 汇编语言程序的编辑与汇编汇编语言程序的编辑与汇编4-3 汇编语言程序设计汇编语言程序设计教学目的:教学目的:本章主要学习伪指令,源程序的编辑与汇编,汇编语言的程序本章主要学习伪指令,源程序的编辑与汇编,汇编语言的程序设计举例。通过本章的学习,要掌握伪指令的含义及其使用方法,学会应用设计举例。通过本章的学习,要掌握伪指令的含义及其使用方法,学会应用基础指令语句编写具有分支、循环、子程序等的汇编语言程序,掌握应用基础指令语句编写具有分支、循环、子程序等的汇编语言程序,掌握应用WAVE软件编写、编译程序的方法,学会应用软件编写、编译程序的方法,学会应用WAVE软件进行程序

2、仿真与检查。软件进行程序仿真与检查。第四章第四章 MCS-51MCS-51单片机语言程序设计单片机语言程序设计4-1 伪指令伪指令一、伪指令一、伪指令 在单片机编程中,有一些指令,如指定目标程序或数据存放的地址、给一些在单片机编程中,有一些指令,如指定目标程序或数据存放的地址、给一些指定的标号赋值、表示源程序结束等指令,并不产生目标程序(机器码),仅仅指定的标号赋值、表示源程序结束等指令,并不产生目标程序(机器码),仅仅产生供汇编用的某些命令,用来对汇编过程进行某种控制或操作,这类指令称为产生供汇编用的某些命令,用来对汇编过程进行某种控制或操作,这类指令称为伪指令。伪指令。MCS-51MCS-

3、51的伪指令主要有:的伪指令主要有: ORG END EQU BIT DB DW DS 等等4-1 伪指令伪指令ORG 定义起始地址伪指令定义起始地址伪指令格式:格式:ORG addr16功能:规定程序块或数据存放的起始地址。功能:规定程序块或数据存放的起始地址。Addr16Addr16表示一个表示一个1616位的程序存储器的空位的程序存储器的空间地址,一般为一个确定的地址,也可以是预先定义的标号。间地址,一般为一个确定的地址,也可以是预先定义的标号。例:例: ORG 000H AJMP MAIN ORG 0030HMAIN: MOV A,30H 注意:注意: 在一个汇编语言源程序的开始,一般

4、都要设置在一个汇编语言源程序的开始,一般都要设置一条一条org伪指令来指定该程序在程序存储器中存放伪指令来指定该程序在程序存储器中存放的起始地址,如果省略,程序从的起始地址,如果省略,程序从0000H开始存放;开始存放; 在一个程序中,可以有多个在一个程序中,可以有多个org,为不同的程,为不同的程序段指明存放位置,但必须从小到大,且存储空序段指明存放位置,但必须从小到大,且存储空间不能重叠。间不能重叠。END 定义汇编结束伪指令定义汇编结束伪指令格式:格式:END功能:表示汇编结束,在此之后的源程序将不被编译。功能:表示汇编结束,在此之后的源程序将不被编译。例:例: ORG 000H AJM

5、P MAIN ORG 0030HMAIN: MOV A,30H END 4-1 伪指令伪指令EQU 标号赋值伪指令标号赋值伪指令例:例: BLK EQU 1000H GREEN EQU 30H ORG 000H AJMP MAIN ORG 0030HMAIN: MOV A,GREEN END 4-1 伪指令伪指令格式:格式:标号标号 EQU 表达式表达式功能:将表达式的值赋给本语句中的标号,又称为等值指令,可替代单字节、双字节。功能:将表达式的值赋给本语句中的标号,又称为等值指令,可替代单字节、双字节。注意:注意:在被赋值后该标号将不能再被赋值。在被赋值后该标号将不能再被赋值。BIT 位地址赋

6、值伪指令位地址赋值伪指令例:例: RED BIT 20H.3 ORG 000H AJMP MAIN ORG 0030HMAIN: MOV P1.6, RED END 4-1 伪指令伪指令格式:格式:标号标号 BIT 表达式表达式功能:将表达式的值赋给本语句中的标号,以替代位。功能:将表达式的值赋给本语句中的标号,以替代位。注意:注意:在被赋值后该标号将不能再被赋值。在被赋值后该标号将不能再被赋值。DB 定义字节伪指令定义字节伪指令例:例: ORG 000H AJMP MAIN ORG 0030HMAIN: MOV DPTR,#TAB MOVC A,A+DPTR TAB: DB 0C0H,0F9

7、H,0A4H,99H DB 86H, 73H,89H DB “hello world!” END 4-1 伪指令伪指令格式:格式:标号标号 DB 字节表字节表功能:从标号指定的地址单元开始,在程序存储器中定义字节数据。功能:从标号指定的地址单元开始,在程序存储器中定义字节数据。DW 定义字伪指令定义字伪指令例:例: ORG 000H AJMP MAIN ORG 0030HMAIN: TAB: DW 0C045H,0F9H,0A324H,99H END 4-1 伪指令伪指令格式:格式:标号标号: DW 字表字表功能:从标号指定的地址单元开始,在程序存储器中存储字数据。功能:从标号指定的地址单元开

8、始,在程序存储器中存储字数据。DS 预存存储区伪指令预存存储区伪指令例:例: ORG 3000HMAIN: TIMER: DS 10H END 4-1 伪指令伪指令格式:格式:标号标号: DS 表达式表达式功能:从标号指定的地址单元开始,定义一个存储区,以被源程序使用。存储区内预留的功能:从标号指定的地址单元开始,定义一个存储区,以被源程序使用。存储区内预留的单元数由表达式的值决定。单元数由表达式的值决定。应用软件:应用软件:WAVE , Keil CWAVE应用初步(请看实际操作)应用初步(请看实际操作)4-2 汇编语言程序的编辑与汇编汇编语言程序的编辑与汇编程序的四种执行方式:程序的四种执

9、行方式:l顺序程序顺序程序l分支程序分支程序l循环程序循环程序l子程序子程序4-3 汇编语言程序设计汇编语言程序设计分析问题确定算法画框图编写程序调试开始开始一般处理一般处理判断判断编程技巧:编程技巧:l划分好功能模块,按模块编程划分好功能模块,按模块编程l写好注释,便于理解和事后分析写好注释,便于理解和事后分析l对于内部存储器的应用要合理分配对于内部存储器的应用要合理分配l子程序的堆栈保护和数据接口要设置好子程序的堆栈保护和数据接口要设置好4-3 汇编语言程序设计汇编语言程序设计编程举例:编程举例:4-3 汇编语言程序设计汇编语言程序设计例例4-1(P60)(顺序程序)(顺序程序) 设设20

10、H单元中有一个单元中有一个8位的数据,将其低位的数据,将其低4位送到位送到21H内,并按相反的顺序拼内,并按相反的顺序拼装,高装,高4位清零,即原位清零,即原(20H)=D7D6D5D4D3D2D1D0至至(21H)=0000D0D1D2D3。(WAVE编程操作编程操作)编程举例:编程举例:4-3 汇编语言程序设计汇编语言程序设计例例4-2(P60)(分支程序)(分支程序) 求求16位二进制数的补码。设位二进制数的补码。设16位二进制数的原码放在位二进制数的原码放在R1,R0中,中,(低(低8位在位在R0中),求得的补码放置在中),求得的补码放置在R3、R2中。中。(补码的概念:正数是本身,负

11、数各数值位取反后加补码的概念:正数是本身,负数各数值位取反后加1得到。)得到。)(WAVE编程操作编程操作)编程举例:编程举例:4-3 汇编语言程序设计汇编语言程序设计例例4-3(P61)(分支程序)(分支程序) 比较两个无符号数的大小,两个比较两个无符号数的大小,两个8位数分别存放在位数分别存放在DATA1、DATA2单元,要求将大数放置在单元,要求将大数放置在DATA3单元(三单元连续)。单元(三单元连续)。(WAVE编程操作编程操作)编程举例:编程举例:4-3 汇编语言程序设计汇编语言程序设计例例4-4(P61)(循环程序)(循环程序) 计算通用延时程序的延时时间。计算通用延时程序的延时

12、时间。Delay: MOV R7, #250DEL1: MOV R6, #200 DJNZ R6,$ DJNZ R7,DEL1 RET单周期指令,执行单周期指令,执行1次次单周期指令,执行单周期指令,执行250次次双周期指令,执行双周期指令,执行250200次次双周期指令,执行双周期指令,执行250次次双周期指令,执行双周期指令,执行1次次编程举例:编程举例:4-3 汇编语言程序设计汇编语言程序设计例例4-5(P62)(循环程序)(循环程序) 数据极值查找。内部数据极值查找。内部RAM 20H单元开始存放有单元开始存放有8个数,找出最大数,个数,找出最大数,并放置在并放置在2BH单元内。单元内

13、。 MOV R0, 20H MOV R7,#08 MOV A, R0 DEC R7 LOOP: INC R0 MOV 2AH,R0 CJNE A,R0,CHKCHK: JNC LOOP1 MOV A,R0LOOP1: DJNZ R7,LOOP MOV 2BH,A END分析: 将第一个设为最大数,以后的与其比较,若大,将后一个数与其交换,若不大,继续比较下一个,直到结束,然后将该数送往2BH内。通过A寄存器应用CJNE指令来进行比较。Wave操作操作编程举例:编程举例:4-3 汇编语言程序设计汇编语言程序设计例例4-6(P62)(循环程序)(循环程序) 数据排序。数据排序。8个数据存放在以个数

14、据存放在以20H为为首的首的8个字节中,编程升序排序。个字节中,编程升序排序。分析: 设R7为比较次数计数器,初始值为07H。F0为排序过程中是否有数据交换的状态标志位,为1表示交换过。BeginR0=20H;R7=07H;F0=0取前一个数;取后一个数前数前数 后数后数前数送后数单元后数送前数单元F0=1R7-1=0F0=1ENDYNYNNY4-3 汇编语言程序设计汇编语言程序设计编程举例编程举例 例例4-6(P62):SORT: MOV R0,#20H MOV R7,#07 CLR F0LOOP: MOV A,R0 MOV 2BH,A INC R0 MOV 2AH,R0 CLR C SUB

15、B A,R0 JC NEXT MOV R0,2BH DEC R0 MOV R0,2AH INC R0 SETB F0NEXT: DJNZ R7,LOOP JB F0,SORT ENDWave操作操作编程举例:编程举例:4-3 汇编语言程序设计汇编语言程序设计查表程序查表程序 查表程序在测控系统中具有重要的应用,主要应用于实现非线性修查表程序在测控系统中具有重要的应用,主要应用于实现非线性修正,非线性函数转换以及代码转换等。正,非线性函数转换以及代码转换等。 MCS51有:有: 及及两条两条 指令适用于在指令适用于在64KB ROM范围内查找数据,范围内查找数据,这是一条变址寻址语句,程序把首地

16、址赋给这是一条变址寻址语句,程序把首地址赋给DPTR,然后根据,然后根据A的数值改的数值改变地址,然后把新地址内的数据送入变地址,然后把新地址内的数据送入A内;内; 指令用于指令用于“本地查找本地查找”,此处,此处PC为当前语句的地为当前语句的地址值,然后根据址值,然后根据A内的数据变址,因内的数据变址,因A内数据最大为内数据最大为255,因而其查找的数因而其查找的数据应在本句后据应在本句后255个字节内。个字节内。编程举例:编程举例:4-3 汇编语言程序设计汇编语言程序设计例例4-7(P63)(查表程序)(查表程序) 有有44按键,键扫描后把被按键的键值码放在按键,键扫描后把被按键的键值码放

17、在A中,假定处理子程中,假定处理子程序在序在ROM 64KB范围内分布,要求以查表方法转向对应的处理子程序。范围内分布,要求以查表方法转向对应的处理子程序。 键码与处理子程序的入口地址的对应关系为:键码与处理子程序的入口地址的对应关系为: 编程举例编程举例例例4-7(P63)(查表程序)(查表程序) :4-3 汇编语言程序设计汇编语言程序设计 RK0H EQU 23H RK0L EQU 00H RK1H EQU 25H RK1L EQU 30H RK2H EQU 30H RK2L EQU 50H MOV DPTR, #BS RL A MOV R2,A MOVC A,A+DPTR PUSH AC

18、C MOV A,R2 INC A MOVC A,A+DPTR MOV DPH,A POP DPL CLR A JMP A+DPTRBS: DB RK0L DB RK0H DB RK1L DB RK1H DB RK2L DB RK2H 使用查表方法实现多分支程序转移使用查表方法实现多分支程序转移4-3 汇编语言程序设计汇编语言程序设计 该方法的内容是:在程序中建立一个差值表,并将各分支入口地址该方法的内容是:在程序中建立一个差值表,并将各分支入口地址与该表首地址的差值按序排列其中;差值首表送与该表首地址的差值按序排列其中;差值首表送DPTR,分支序号送,分支序号送A中,中,查表后就可通过转移指令

19、查表后就可通过转移指令 JMP A+DPTR 进入分支。进入分支。 假定有假定有4个分支程序,各分支程序段的功能依次为:从内部个分支程序,各分支程序段的功能依次为:从内部RAM取取数,从外部数,从外部RAM低低256字节字节范围取数,从范围取数,从外部外部RAM 4KB范围内取数和从范围内取数和从外部外部RAM 64KB范围取数。假设范围取数。假设R0中存放低中存放低8位地址,位地址,R1中存放高中存放高8位位地址,地址,R3中存放分支序列号值,中存放分支序列号值,BRTAB为差值表首地址,为差值表首地址,BR0-BRTABBR0-BRTAB为各分支入口地址与差值表首地址之间的差值。为各分支入

20、口地址与差值表首地址之间的差值。编程举例编程举例例例4-8(P64)(查表程序)(查表程序) :4-3 汇编语言程序设计汇编语言程序设计 MOV A,R3 MOV DPTR, # BRTAB MOVC A,A+DPTR JMP A+DPTRBRTAB:DB BR0-BRTAB DB BR1-BRTAB DB BR2-BRTAB DB BR3-BRTABBR0: MOV A,R0 SJMP BREBR1: MOVX A,R0 SJMP BREBR2: MOV A,R1 ANL A,#0FH ANL P2,#0F0H ORL P2,A MOVX A,R0 SJMP BREBR3: MOV DPL

21、R0 MOV DPH,R1 MOVX A,DPTRBRE: 4-3 汇编语言程序设计汇编语言程序设计 编程实现以下编程实现以下3个区域清个区域清“0”:20-22H,3个单元;个单元;30-34H,5个单元;个单元;40-45H6个单元。个单元。分析:分析: 设将首单元放入设将首单元放入R0内,单元个数放内,单元个数放入入R2内,可编写该部分的子程序。内,可编写该部分的子程序。ZREO: MOV R0,#00 INC R0 DJNZ R2,ZREO RET MOV R0,#20HMOV R2,#3ACALL ZREOMOV R0,#30H MOV R2,#5ACALL ZREOMOV R0,#

22、40HMOV R2,#6ACALL ZREO4-3 汇编语言程序设计汇编语言程序设计 多字节加法子程序。假定有两个多字节加法子程序。假定有两个4字节的十六进制数:字节的十六进制数:2F5BA7C3H和和14DF35B8H分别存分别存放在以放在以40H和和50H为起始字节的单元中(先存低位),求这两个和,将并和存放到起始地址为为起始字节的单元中(先存低位),求这两个和,将并和存放到起始地址为40H的单元中去。的单元中去。(设分别用设分别用R0和和R1作为数据指针,作为数据指针,R0指向第一个数,并兼作指向第一个数,并兼作“和和”的指针,的指针,R1指向另一个加数。字节数存放在指向另一个加数。字节数存放在R2中。)中。)JIA1: CLR CJIA2: MOV A,R1 ADDC A,R0 MOV R0,A INC R0 INC R1 DJNZ R2,JIA2 RET JIA: MOV R0,#40H MOV R1,#50H MOV R2,

温馨提示

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

评论

0/150

提交评论