单片微机原理第三章BB单片微机指令系统及程序设计课件_第1页
单片微机原理第三章BB单片微机指令系统及程序设计课件_第2页
单片微机原理第三章BB单片微机指令系统及程序设计课件_第3页
单片微机原理第三章BB单片微机指令系统及程序设计课件_第4页
单片微机原理第三章BB单片微机指令系统及程序设计课件_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

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

文档简介

3.3程序设计方法汇编语言程序设计步骤:

要想使计算机完成某一具体的工作任务,必须按序执行一条条指令。这种按工作要求编排指令序列的过程称程序设计。使用汇编语言作为程序设计语言的编程步骤与高级语言编程步骤类似,但又有差异。3.3程序设计方法其程序设计步骤大致可分为以下几步:(1)熟悉与分析工作任务;明确其要求和要达到的工作目的、技术指标等;(2)确定解决问题的计算方法和工作步骤;(3)画工作流程图(其图形的符号规定均同于高级语言流程图);(4)分配内存工作单元,确定程序与数据区存放地址;(5)按流程图编写源程序;(6)上机调试、修改及最后确定源程序;在进行程序设计时,必须根据实际问题和所使用的计算机的特点来确定算法,然后按照尽可能使程序简短和缩短运行时间两个原则编写程序。编程技巧需经大量实践后慢慢地加以提高。3.3程序设计方法3.3.1顺序结构程序设计顺序结构是最简单的一种程序结构,编程很容易,它具有两个显著特点:①程序中无转移、调转等指令;②程序执行时按编写顺序,程序流向不变。

例编写计算32E6H+0EACH的程序,把最后结果存入片外50H、51H单元,51H存结果高8位,50H存低8位。分析:根据题目,显然是一个简单的加法程序,采用顺序结构即可。程序框图如图3—1所示。程序

ORG4000HCLRCMOVA,#0E6H;被加数低8位送AADDA,#0ACH;两数低8位相加MOVR0,#50H;低位和的地址送AMOVX@R0,A;低位相加和送片外50HMOVA,#32H;被加数高8位送AADDCA,#0EH;高位和与进位位之和送AMOVR0,#51H;高位和地址送R0MOVX@R0,A;高8位和及进位位之和送片外51HEND

从程序框图及程序看出,本程序无任何判断转移指令,程序逐条按顺序执行即可,故属于顺序结构程序。3.3.2分支结构程序设计

分支结构程序特点:

①根据要求利用转移指令,改变程序流向;②设计难点是如何正确使用供条件转移指令使用的条件。

转移指令有三种:无条件转移、条件转移和散转一、条件/无条件转移程序设计例编写按下述函数式求y值的程序,变量x在30H单元,结果存入31H单元中。x+1x>0y=0x=0-1x<0

分析:该题目共三个分支,转移条件是x与0比较的结果,按x>0、x=0、x<0分别转入三个分支程序。该题目程序框图如图3—4所示。图3-4条件转移分支程序框图

开始X→A存结果A=A+1A=-1结束A=0?A>0?YYNNLP1LP0LP2二、散转程序设计散转程序的特点是利用散转指令实现向各分支程序的转移。JMP@A+DPTR散转指令的操作是把16位数据指针DPTR的内容与累加器A中的8位无符号数相加,形成地址,装入程序计数器PC,此即散转的目的地址。其操作结果不影响A和DPTR。散转程序的设计可采用下面两种方法:1、数据指针DPTR固定,根据累加器A的内容,程序转入相应的分支程序中去;2、累加器A清零,根据数据指针DPTR的值,决定程序转向目的地址。DPTR的值可用查表或其它方法获得。

二、散转程序设计

按散转程序的结构又可分为四种方法:

①转移指令表法;②地址偏移量表法;②转向地址表法;④查表与RET指令结合散转法。1.转移指令表法转移指令表法是把散转地址用无条件转移指令AJMP或LJMP组成一个表,然后由散转指令根据需要转向表中相应指令,则可无条件跳转到某分支程序入口地址。例1

编写程序,根据R7的状态分别转向八个功能键处理程序。设R7中为键号依次为0、1、2、3、4、5、6、7,分别转向SB0、SB1、SB2、SB3、SB4、SB5、SB6、SB7八个键功能处理程序。两点说明:

①因为本例是由AJMP指令构成表,该指令为2字节,故A中修正值R7×2,若改为LJMP表(3字节指令)则A中修正值为R7×3。⑦R7中存放散转的标志值,其最大值为255,所以一个8位寄存器最多控制256个散转点,若散转点多于256,可使用双字节存放标志值,如用R6存高位、R7存低位。2.地址偏移量表法地址偏移量表是用各散转分支程序入口地址和表首地址之差组成一个表,然后利用查表指令和散转指令相结合找到分支入口地址。

例2用地址偏移量表法设计上例程序。程序ORG2000HMOVA,R7;键号送AMOVDPTR,#TAB;表首地址→DPTRMOVCA,@A十DPTR;查表内容送AJMP@A十DPTRTAB:DBSB0-TABDBSB1-TAB;地址偏移量表┊┊DBSB7-TABSB0:0号键处理程序SB1:1号键处理程序

┊┊SB7:7号键处理程序特点:表中内容是两个地址之差。如SB0-TAB是0号键处理程序入口地址SB0和表首地址TAB之差。程序中巧妙利用MOVCA,@A+DPTRJMP@A+DPTR

两条指令配合,查找散转入口SB0~SB7。设R7=0,则A+DPTR=TAB查表MOVCA,@A+DPTR;(A+DPTR)→A表示把表TAB的第一个字节内容送A,查表指令执行后

A=SB0-TAB,由于DPTR=TAB,再执行

JMP@A+DPTR

后,表示

A+DPTR→PC即SB0-TAB+TAB→PC

即SB0→PC所以执行查表和散转指令后PC=SB0,程序按PC指针的方向自动转向0号键处理程序入口SB0。INCA;A+1→A,修正值加1MOVCA,@A+DPTR;查表中低8位地址→AMOVDPL,A;低8位地址→DPLMOVDPH,R3;高8位地址→DPHCLRA;清A准备下面用JMP@A+DPTR;因为A=0所以DPTR→PCTAB:DWSB0DWSB1;转向地址表┋┋DWSB7SB0:0号键处理程序SB1:1号键处理程序┋┋SB7:7号键处理程序SJMP$END说明:SB0~SB7是16位地址,表中用DW定义一个字即两个字节,故查表分高8位和低8位两次查表。设R7=0,第一次查到SB0的高位字节送DPH,第2次查表查到SB0的低位字节送DPL,执行散转指令JMP@A+DPTR后;由于A=0,故DPTR→PC即把SB0→PC,在PC指引下程序转向0号键处理程序入口地址SB0,依次类推。4.利用RET指令实现散转利用在执行RET指令时,自动弹出堆栈地址到PC的功能,实现散转。

例4利用RET指令仍设计例1的键功能程序。程序ORG2000HMOVSP,#30HMOVDPTR,#TABMOVA,R7ADDA,R7JNCLPINCDPH

3.3.3循环结构程序设计

循环结构程序是把需要多次重复的程序段,利用转移指令多次转向该程序段。循环程序的主要特点:①大大缩短程序,减少占用程序空间;②程序结构优化,清晰易读;③可以实现多重循环控制,但循环不能交叉,不能从外循环跳入内循环;④循环程序主要由循环常数、循环体和循环控制三部分组成。例设计一个延时1s的程序,晶振6MHz。

分析:设计的关键是循环体。本例选择1ms的延时程序为循环体,第二层循环达到10ms,第三层循环延时到1s。程序框图如图3—5所示。图3-5循环结构延时程序框图

开始10→R01ms延时R0-1→R0结束R0=0?YN

程序ORG4000HMOVR0,#100;送延时1s的常数LP2:MOVR1,#10;送延时10ms的常数LP1:MOVR2,#X;送延时1ms的常数(内循环)LP0:NOPNOP;内循环体DJNZR2,LP0DJNZR1,LP1DJNZR0,LP2;循环控制END

3.3.4查表程序设计一、查表法概念查表法就是把事先计算出的结果或测得的数据按一定顺序组成表格,再利用查表程序查出所需结果。查表程序结构的特点:①所需函数计算结果或测量所得数据按一定规律制成表格;②数据表一般放在程序区;③用查表指令实现查表。数据表的格式大致分两种:一种有序表即表中数据按一定顺序排列,如按大小关系或按变量对应顺序等排列;另一种为无序表即表中数据是任意的,无规则排列。二、有序表的查表程序设计有序表因表格按一定顺序排列,查表方便,称为简单查表。查表方法MOVCA,@A+DPTRMOVCA,@A+PC以DPTR为基址(远程查表)以PC为基址(近程查表)程序2ORG4000HMOVA,R0;16进制数→AADDA,#02H;修正A值MOVCA,@A+PC;查表结果→AMOVR1,A;保存结果送R1RETTAB:DB30H,31H,32H;有序表DB33H,34H,35H;表中数据与0~9顺序DB36H,38H,39H;对应END程序3ORG4000HMOVA,R0

;16进制数→AMOVDPTR,#TAB;表首地址→DPTRMOVCA,@A+DPTR;(A+DPTR)→A查表结果MOVR1,A;保存结果TAB:DB30H,31H,32HDB33H,34H,35HDB36H,38H,39HEND

3.3.5子程序结构设计子程序是具有某种功能的独立程序段。它与主程序是调用与被调用的关系。

设计子程序时要注意的以下几个问题:①每个子程序都要有一个名称(入口地址代号);

②注意设堆栈指针,调用子程序时要把断点压入堆栈,子程序返回时再把断点弹出送入程序指针PC;

③注意保护现场和恢复现场,调用子程序前,要把A累加器和工作寄存器中的重要结果先保存起来(保护现场),当子程序即将返回时再将这些内容取出送到原来位置(恢复现场);④子程序可以嵌套,即主程序可以调用子程序,子程序又可调用另外的子程序,通常情况下可允许嵌套8层。子程序的结构主程序……LCALL子程序名……子程序名…RETEND调用子程序的概念所谓调用子程序,暂时断开主程序的执行,而转到子程序的入口地址去执行子程序。调用子程序应注意:(1)子程序占用的存储单元和寄存器。(2)参数的传递。(3)子程序经过调用后得到的数据来完成程序之间的参数传递。

(4)嵌套调用与递归调用。RETLCALLSUB

子程序的调用与返回LCALLARETRETLCALLB

子程序的嵌套、调用与返回例

编制使P1口灯闪烁的程序,每个灯闪10次移位一次。LED与P1口接口电路所图示。

分析:74LS240为反相驱动器,P1口为高电平时,发光二极管的灯点亮。

主程序ORG4000HMOVA,#01H;送初值LP:LCALLFLASH;调闪烁子程序RLA;A左移,下一个灯亮SJMPLP;返回LP,再调闪烁子程序闪烁子程序ORG5000HFLASH:MOVR0,#10;闪烁次数LP0:MOVP1,A;灯亮LCALLDELAY;调延时子程序,灯亮时间MOVP1,#00H;灯全暗

温馨提示

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

评论

0/150

提交评论