微机原理之结构化程序设计.ppt

上传人:鲁** 文档编号:576609490 上传时间:2024-08-20 格式:PPT 页数:23 大小:529.50KB
返回 下载 相关 举报
微机原理之结构化程序设计.ppt_第1页
第1页 / 共23页
微机原理之结构化程序设计.ppt_第2页
第2页 / 共23页
微机原理之结构化程序设计.ppt_第3页
第3页 / 共23页
微机原理之结构化程序设计.ppt_第4页
第4页 / 共23页
微机原理之结构化程序设计.ppt_第5页
第5页 / 共23页
点击查看更多>>
资源描述

《微机原理之结构化程序设计.ppt》由会员分享,可在线阅读,更多相关《微机原理之结构化程序设计.ppt(23页珍藏版)》请在金锄头文库上搜索。

1、结构化程序设计Principles:按照软件工程的观点,一个程序如果只包括顺序结构、分支结构和循环结构,那么其逻辑错误只限于某一结构内,不至于影响整个程序。这样,错误便于检查和改正。此外,我们还要看看子程序的实现及查表的处理方法。它们通常用在较为复杂的场合。汇编语言程序的基本结构一、顺序结构顺序结构是指程序按指令顺序逐条执行的一种结构。也是程序结构中最简单的一种结构。 二、分支结构 指程序中具有转移指令,可根据转移条件(一般为0、Cy、OV)决定是转移还是继续执行下一条指令。请看P55例3-8几种分支结构程序的框图P55例3-8找出A和R1中的大数送R1流程图正减负溢出ACC.7=1OV=1O

2、V=1A-R1-AyesnoR2(原A)-R1R1不变R1不变yesyesnonoR2(原A)-R1负减正未溢出负减正溢出正减负未溢出比较条件 差的符号 两数相减后标志状态X为正数,Y为正数 XY X-Y为正 OV=0 XY X-Y为正 OV=0 XY X-Y为正 OV=0 XY X-Y为负 OV=1 XY X为负数且Y为正数,X不可能大于Y XY X-Y为正 OV=1XYX-Y为负OV=0带符号数相减的所有可能情况比较带符号数相减的所有可能情况比较 带带符符号号数数求求最最大值大值例3-8组单字节带符号数据存放在以2042H为首地址的连续单元中,数据长度存放在2041H单元,找出的最大值存于

3、2040H单元。带符号数求最大值与最小值的程序带符号数求最大值与最小值的程序0100 ORG 0100H0100 90204l MOV DPTR,#2041H0103 EO MOVX A,DPTR0104 FF MOV R7,A0105 7900 MOV R1,#80H;开始R1存最小值-1280107 A3 LOOP: INC DPTR0108 E0 MOVX A,DPIR0109 FA MOV R2,A010A C3 CLR C010B 99 SUBB A,R1010C 20E705 JB ACC.7,MINUS010F 20D209 PLUS:JBOV,SMA0112 8005 SJMP

4、 BIG带符号数求最大值与最小值的程序带符号数求最大值与最小值的程序( (续续) )0114 20D202 MINUS:JB OV,BIG0117 8002 SJMP SMA0119 EA BIG:MOV A,R2011A F9 MOV R1,A011B DFEA SMA:DJNZ R7,LOOP011D 902040 MOV DPTR,#2040H0120 E9 MOV A,R10121 F0 MOVX DPTR,A0122 80FE SJMP $ END三、循环结构 循环结构由四个环节组成。1.初初始始化化部部分分:对循环体中参加操作的有关参数、地址等赋以初始值,并指定循环结束条件。2.循

5、循环环体体部部分分:指每次循环都需要重复执行的程序段。3.修修改改初初始始值值:每次循环结束都要对初始值进行修改,特别是判断结束条件的参数,每经一次循环后都要作相应的修改,以便决定是否结束循环。4.结结束束判判断断部部分分:检查结束条件是否满足,若条件满足停止循环,否则返回继续执行循环体。 循环结构框图 图中每执行一次循环体后,都要检查结束条件是否满足,若条件满足停止循环,否则返回继续执行循环体。右边两图区别是先检查循环是否结束后修改初值,还是先修改初值后检查循环是否结束。 循环结构程序举例循环结构程序举例例3-4 编制一延时子程序,使执行这一段程序延时2s。 0100 7D64 MOV R5

6、,#64H 0102 7E64 LOOP1: MOVR6,#64H 0104,7F62 LOOP2: MOV R7,#62H 0106 DFFE LOOP3: DJNZ R7,LOOP3 0108 DEFA DJNZR6,LOOP2 010A DDF6 DJNZ R5,LOOPl 010C 22 RET 晶振频率为12MHz时,1机器周期=12*1/12微秒= 1微秒,以上程序执行的时间近似为100*100*98*2微秒2秒,如要准确计算还需考虑执行对R5、R6、R7的赋值指令所需的时间、RET返回指令的时间等等,但误差不易控制。返回本章首页四、子程序四、子程序 例3-6 将30H中的数转换为

7、BCD码,并存于40H、41H(百位存于40H,十位和个位合并存于41H)。主程序:入口条件为待转换的十六进制数存R10100 ORG 0100H0100 A930 MOV R1,30H0102 122000 LCALL SUB0105 8A40 MOV 40H,R20107 8B41 MOV 41H,R30109 80FE SJMP $ END假定主程序调用子程序前,SP=07H,当主程序执行完LCALLSUB指令时,堆栈(位于内部RAM)中的内容如下08HSP09H05H01H子程序子程序SUB:入口为入口为R1,出口为转换所得出口为转换所得BCD码存码存R2、R32000 ORG 200

8、0H2000E9SUB:MOVA,R1;取十六进制数200175F064MOVB,#64H200484DIVAB;除以1002005FAMOVR2,A;商为百位数存R22006740AMOVA,#0AH2008C5F0XCHA,B;除100余数作为下一次的被除数200A84DIVAB;余数再除以10200BC4SWAP A200C45F0ORLA,B;十位个位合并200EFBMOVR3,A;十位个位合并存R3200F22RET当子程序执行完RET指令时,堆栈(位于内部RAM)中的内容如下SP07H08H09HPC=0105H05H01H五、查表查表 当某一变量x与函数y的关系无规律可循时,可以

9、将变量x作为序号,函数y值作为元素,列出一份序号与元素的关系表。然后利用查表法从序号求得元素。 1.序号小于序号小于256256的查表程序的查表程序例3-11 设在寄存器R1存了两个BCD码,将它们转换为共阴数码管的七段码,存入21H和22H。该程序在实验二中用到。 序号小于序号小于256256查表程序查表程序 TRAN: MOVDPTR,#TABLE ;取表头地址 MOVA, R1 ANLA, #0FH ;取BCD码低4位 MOVCA,A+DPTR ;换成七段码 MOV21H, A MOVA, R1 SWAPA ;转换高4位位置 ANLA, #0FH ;取BCD码高4位 MOVCA,A+DP

10、TR ;换成七段码 MOV22H,A RET TABLE: DB 06H,5BH,4FH,66H,6DH,7DH,7H,7FH,6FH 一一般般的的查查表表程程序序:求求R1中中的的数数的的平平方方,存存入入R1 TRAN: MOVDPTR,#TABLE ;取表头地址 MOVA, R1 MOVC A,A+DPTR ;换成平方 MOVR1, A RET TABLE: DB 0,1,4,9,16,25,36,49,64,81可见主要问题在于设计表格。当序号或表格内容较大,超出256时要另行处理。 2.序号大于序号大于256的查表程序的查表程序当元素总数大于256,要用DPTR直接加16位序号,才能

11、得到元素地址值。例3-13设有1000个元素的函数表,元素序号高8位存于20H,低8位存于21H,要求将求出的元素值存于30H。TRAN:MOVDPTR,#TABLE;取表头地址MOVA,21H;求元素位置低8位ADDA,DPLMOVDPL,AMOVA,20H;求元素位置高8位ADDCA,DPHMOVDPH,ACLRAMOVCA,A+DPTR;取出元素MOV30H,ARETTABLE:DB. 3.元素值占两个字节以上的查表程序元素值占两个字节以上的查表程序当元素占两个以上字节,应考虑每个序号的偏移量。例3-14设序号存20H,且小于128,元素占2个字节,表头为2001H,即元素0地址为200

12、1H、2002H,元素1地址为2003H、2004H,余类推。试根据序号求出元素值,并存于30H、31H。TRAN:MOVDPTR,#TABLEMOVA,20HRLA;序号乘2得序号与表头距离MOVR2,A;暂存于R2MOVC A,A+DPTRMOV30H,AMOVA,R2INCAMOVC A,A+DPTRMOV31H,ARETTABLE:DB4.变量变量x的数值不是等差序列的数值不是等差序列的查表程序的查表程序解决这类问题可以采用搜索的办法,即制作一张序号与元素即x-y依序排列表,表中在每个序号x的后面紧接着元素y。表的结构如下:TAB:x1y1x2y2.xnyn 给出序号x的数值后,用搜索

13、法查出它所在的地址,将查出的地址加1,就是元素所在的地址,然后从中取出y值。 六、散转程序六、散转程序 散转程序实际是一种并行分支程序,可根据某个输入值或运算结果,转到不同的分支处理。例3-15设程序中有四个功能子程序入口,分别为1000H、1200H、1400H、1600H。要求根据运行后21H的数值0、1、2、3转相应子程序。 ANYCHEN: MOV DPTR,#TABLE;取入口地址表头 MOV A, 21H;取输入值 RL A ADD A, 21H;输入值乘3 JMP A+DPTR TABLE: LJMP 1000H;TABLE+0 LJMP 1200H;TABLE+3 LJMP 1400H;TABLE+6 LJMP 1600H;TABLE+9 返回本章首页 Homework: 1.阅读3.3-3.4,重点弄懂所讲例题2.完成作业P68之8、10、15、183.预习第四章,6.1-6.3,重点6.34.查阅参考书,特别是关于动态扫描显示原理,有哪些做法。 References:1胡健 主编,单片机原理及接口技术M。机械工业出版社。2005年。P137-139.2唐俊杰等编,微型计算机原理及应用M。高等教育出版社。1992年。P208-210. 返回本章首页

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号