单片机原理及应用第6_第1页
单片机原理及应用第6_第2页
单片机原理及应用第6_第3页
单片机原理及应用第6_第4页
单片机原理及应用第6_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

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

文档简介

1、单片机原理及应用单片机原理及应用6.1 6.1 汇编语言汇编语言 6.2 6.2 基本程序结构设计基本程序结构设计6.3 6.3 子程序设计子程序设计6.4 6.4 实用程序举例实用程序举例小结小结第第6 6章章 汇编语言程序设计汇编语言程序设计 单片机原理及应用单片机原理及应用u 汇编语言程序基本结构汇编语言程序基本结构u 程序设计步骤程序设计步骤u 子程序设计子程序设计u 循环结构、分支结构程序设计循环结构、分支结构程序设计u 子程序设计子程序设计单片机原理及应用单片机原理及应用单片机原理及应用单片机原理及应用单片机原理及应用单片机原理及应用 按照程序编写的顺序依次执行,编写这类程序按照程

2、序编写的顺序依次执行,编写这类程序主要应注意正确地选择指令,提高程序的执行效主要应注意正确地选择指令,提高程序的执行效率。率。6.2.1 顺序结构程序设计顺序结构程序设计 例例6.2 拆字程序。将拆字程序。将30H的内容的内容拆开拆开,高位送高位送31H低位低位,低位送低位送32H低位。低位。分析:利用分析:利用逻辑与逻辑与指指令实现内容的屏蔽。令实现内容的屏蔽。程序流程如图所示。程序流程如图所示。单片机原理及应用单片机原理及应用解:解:编程清单如下:编程清单如下:ORG 4000HCWORD:MOV A,30HSWAP AANL A,#0FHMOV 31H,A; 将将(30H)高位存入高位存

3、入(31H)MOV A,30HANL A,#0FHMOV 32H,A; 将将(30H)低位存入低位存入(32H)END单片机原理及应用单片机原理及应用 分支程序的主要特点是程序的流向有两个分支程序的主要特点是程序的流向有两个或两个以上的出口,根据指定的条件进行选或两个以上的出口,根据指定的条件进行选择确定。编程的关键是如何确定供判断或选择确定。编程的关键是如何确定供判断或选择的条件以及选择合理的分支指令。择的条件以及选择合理的分支指令。 分支结构程序可根据程序要求无条件或有分支结构程序可根据程序要求无条件或有条件地改变程序执行的顺序,选择程序流向。条件地改变程序执行的顺序,选择程序流向。 分支

4、程序的设计要点如下:分支程序的设计要点如下:(1)先建立可供条件转移指令测试的条件。)先建立可供条件转移指令测试的条件。 (2)选用合适的条件转移指令。)选用合适的条件转移指令。(3)在转移的目的地址处)在转移的目的地址处设定标号设定标号。单片机原理及应用单片机原理及应用单片机原理及应用单片机原理及应用YesNo单片机原理及应用单片机原理及应用 ORG 0000H Cjne R3,#15,NEQ sjmp L1 ;=15NEQ: jnC L1 ;15 sjmp L2 ;0?N(30H)+1 30HY(31H)+1 31HN修改地址指针修改地址指针处理完处理完?NY结束结束单片机原理及应用单片机

5、原理及应用 ORG 1000H ORG 1000H CLR A CLR A MOV 30H MOV 30H,A A MOV 31H MOV 31H,A A MOV 32H MOV 32H,A A MOV DPTR MOV DPTR,#2000H #2000H ;设置片外设置片外RAMRAM地址地址 MOV R2MOV R2,#64H #64H ;设置循环次数设置循环次数LOOPLOOP:MOVX AMOVX A,DPTR DPTR ;从片外从片外RAMRAM取数取数 JZ ZERO JZ ZERO ;是零吗?是,转是零吗?是,转ZEROZERO JNB ACC.7, PLUS JNB ACC.

6、7, PLUS ;为正数吗?是,转为正数吗?是,转PLUSPLUS单片机原理及应用单片机原理及应用 INC 31H INC 31H ;为负数,;为负数,31H31H单元加单元加1 1 SJMP ENTER SJMP ENTER ZEROZERO:INC 32H INC 32H ;所读数为;所读数为0 0,32H32H单元加单元加1 1 SJMP ENTER SJMP ENTERPLUSPLUS:INC 30H INC 30H ;所读数为正数,;所读数为正数,30H30H单元加单元加1 1ENTER:INC DPTR ENTER:INC DPTR ;修改片外;修改片外RAMRAM地址地址 DJN

7、Z R2DJNZ R2,LOOP LOOP ;数据未处理完,重复;数据未处理完,重复 SJMP $SJMP $ END END单片机原理及应用单片机原理及应用单片机原理及应用单片机原理及应用DELAYDELAY:MOV R6MOV R6,#64H #64H 1 1I1I1: MOV R7MOV R7,#0FFH#0FFH1 1I2I2: DJNZ R7DJNZ R7,I2I22 2 DJNZ R6 DJNZ R6,I1I12 2 RET RET2 2延时时间计算:延时时间计算:振荡频率为振荡频率为f=12MHz,一个机器周期包含一个机器周期包含12个时钟周期,因此一个机器周围为个时钟周期,因此

8、一个机器周围为(1/12M)*12=1ust=(11+1100+2100255+2100+21)M=51.3 ms【例例4】延时程序(设晶振的频率为延时程序(设晶振的频率为12MHz)。)。试计算延时程序的执行时间。试计算延时程序的执行时间。 源程序源程序指令周期指令周期(M) (M) 指令执行次数指令执行次数1 11001001001002552551001001 1单片机原理及应用单片机原理及应用1子程序概念子程序概念 所谓调用子程序,暂时中断主程序的执行,所谓调用子程序,暂时中断主程序的执行,而转到子程序的入口地址去执行子程序。而转到子程序的入口地址去执行子程序。 调用子程序应注意:调用

9、子程序应注意:(1)子程序占用的存储单元和寄存器。)子程序占用的存储单元和寄存器。 (2)参数的传递。)参数的传递。(3)子程序经过调用后得到的数据来完成程)子程序经过调用后得到的数据来完成程序之间的参数传递。序之间的参数传递。 (4)嵌套调用如图所示。)嵌套调用如图所示。单片机原理及应用单片机原理及应用RETLCALL SUB子程序的调用与返回子程序的调用与返回 单片机原理及应用单片机原理及应用LCALL ARETRETLCALL B子程序的嵌套调用与返回子程序的嵌套调用与返回单片机原理及应用单片机原理及应用单片机原理及应用单片机原理及应用SP SP 5FH5FH61H61H40H10HPC

10、LPCH63H63H单片机原理及应用单片机原理及应用【例例4.8】 编制编制c=a2+b2的程序。设的程序。设a和和b均为小于均为小于10的的整数,整数,a、b、c放在内部放在内部RAM的的XA、XB、XC三个三个单元。单元。分析:将子程序设计成求平方的通用子程序。分析:将子程序设计成求平方的通用子程序。ORG 2000HXA DATA 40HXB DATA 41HXC DATA 42H MOV A,XA ;入口参数;入口参数a送送A ACALL SQR ;求求a2 MOV XC,A ;a2送送XC MOV A,XB ;入口参数;入口参数b送送A ACALL SQR ;求求b2 ADD A,X

11、C ;a2+b2送送A MOV XC,A ;保存结果保存结果 SJMP $SQR:MOV B,A MUL AB RET END单片机原理及应用单片机原理及应用 查表程序实现查表算法。查表程序实现查表算法。 该方法把事先计算或实验数据按一定顺序编成表格,存该方法把事先计算或实验数据按一定顺序编成表格,存于程序存储器内,然后根据输入参数值,从表中取得结果。于程序存储器内,然后根据输入参数值,从表中取得结果。 查表指令:查表指令:(1) MOVC A , A+DPTR查表前数据表格表头地址存入查表前数据表格表头地址存入DPTR,要查得的数在表中相对表头地址的偏移量送入累加器要查得的数在表中相对表头地

12、址的偏移量送入累加器A,最后最后MOVC A ,A+DPTR完成查表完成查表,可在可在64KB内查表内查表因为因为DPTR可以人为修改。可以人为修改。查表程序设计查表程序设计单片机原理及应用单片机原理及应用(2)MOVC A , A+PC分为三步:分为三步:1)用传送指令把所查数据的项数送入累加器)用传送指令把所查数据的项数送入累加器A;2)使用)使用ADD A ,#data指令对累加器指令对累加器A进行修正,进行修正,data值由下式确定:值由下式确定: PC当前值当前值+data=数据表头地址数据表头地址实际上实际上datadata值等于查表指令和数据表格之间的字节数;值等于查表指令和数据

13、表格之间的字节数;3)用指令)用指令MOVC A , A+PC完成查表完成查表由于由于PC指针只能在指针只能在A中提供的偏移地址的范围内查表,中提供的偏移地址的范围内查表,故,查表范围在一页内。故,查表范围在一页内。单片机原理及应用单片机原理及应用PCPC3B3B(A)(A)补偿值补偿值= =表头地址表头地址-PC-PC当前值当前值单片机原理及应用单片机原理及应用1B1B2B2BPCPC当前值当前值3B3B单片机原理及应用单片机原理及应用例例6.9 用程序实现用程序实现c=a2 +b2,假设,假设a、b、c分别存放分别存放于于R2、R3、R4中。中。分析:通过调用子程序查平方表,结果在主程序分

14、析:通过调用子程序查平方表,结果在主程序中相加得到。中相加得到。解:解:编程清单如下:编程清单如下:MOV A,R2ACALL SQRMOV R0,AMOV A,R3ACALL SQRADD A,R0MOV R4,ASJMP $SQR:INC AMOVC A,A+PCRETTAB:DB 0,1,4,9,16DB 25,36,49,64,81END单片机原理及应用单片机原理及应用单片机原理及应用单片机原理及应用例例6.11 8位二进制数转换为位二进制数转换为BCD码。将累加器码。将累加器A中的二进中的二进制数制数0FFH内的任一数转换为内的任一数转换为BCD码码(0255)。6.4 6.4 实用

15、程序举例实用程序举例1、代码转换程序代码转换程序 解:解:编程清单如下:编程清单如下:BINBCD:MOV B,#100 DIVA,B ; A/B 商在商在A中,余数在中,余数在B中中PUSH ACC ;将商将商(百位数百位数)暂存在堆栈中暂存在堆栈中MOVA,#10XCHA,B ;余数交换到余数交换到A中中,B=10DIVA,B ; 商商(十位十位)在在A中,余数中,余数(个位个位)在在B中中SWAP A ;十位数移到高半字节十位数移到高半字节ADDA,B ;十位数和个位数组合在一起十位数和个位数组合在一起POPB ;百位数存放到百位数存放到B中中RET单片机原理及应用单片机原理及应用例例6

16、.14 4位二进制数转换为位二进制数转换为ASCII代码。代码。分析:小于分析:小于10的的4位二进制数加位二进制数加30H得到相应的得到相应的ASCII代码,大代码,大于等于于等于10的加的加37H。单片机原理及应用单片机原理及应用2、查表程序查表程序 在单片机应用系统中,应用程序时常要对数据进行复杂计算,在单片机应用系统中,应用程序时常要对数据进行复杂计算,而由于受汇编语言指令特点的限制,使得编程困难,程序冗长,而由于受汇编语言指令特点的限制,使得编程困难,程序冗长,运算速度慢,而且精度不易得到保证。在这种情况下,采用查运算速度慢,而且精度不易得到保证。在这种情况下,采用查表法往往使问题的

17、解决简单得多。表法往往使问题的解决简单得多。 在在MCS-51汇编语言中,有两条专门的查表指令:汇编语言中,有两条专门的查表指令: MOVC A,A+DPTR MOVC A,A+PC 其中,其中,DPTR为数据指针寄存器,一般用来存放表首地址。为数据指针寄存器,一般用来存放表首地址。 查表程序主要用于代码转换、代码显示、实时值查表计算查表程序主要用于代码转换、代码显示、实时值查表计算和按命令号实现程序转移等。和按命令号实现程序转移等。单片机原理及应用单片机原理及应用例例6.16 在程序中定义一个在程序中定义一个09的平方表,利用的平方表,利用查表指令找出累加器查表指令找出累加器A=05的平方值

18、。的平方值。分析:所谓表格是指在程序中定义一串有序的常数,如平分析:所谓表格是指在程序中定义一串有序的常数,如平方表、字型码表、键码表等。因为程序一般都是固化在程方表、字型码表、键码表等。因为程序一般都是固化在程序存储器中,因此可以说表格是预先定义在程序的数据区序存储器中,因此可以说表格是预先定义在程序的数据区中,然后和程序一起固化在中,然后和程序一起固化在ROM中的一串常数。查表程中的一串常数。查表程序的关键是表格的定义和如何实现查表。序的关键是表格的定义和如何实现查表。编程清单如下:编程清单如下:ORG 0050HMOV DPTR,#TABLE ;表首地址表首地址DPTRMOV A,#05 ;05AMOVC A,A+DPTR ;查表指令,查表指令,25ASJMP $ ;程序暂停程序暂停TABLE:DB 0,1,4,9,16,25,36,49,64,8

温馨提示

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

评论

0/150

提交评论