第14章MCS51程序设计及实用子程序.ppt
《第14章MCS51程序设计及实用子程序.ppt》由会员分享,可在线阅读,更多相关《第14章MCS51程序设计及实用子程序.ppt(47页珍藏版)》请在三一办公上搜索。
1、第十四章 MCS-51程序设计及实用子程序,14.1 查表程序设计14.2 数据极值查找和数据排序14.3 散转程序设计14.4 循环程序设计14.5 定点数运算程序设计14.6 数据的拆拼14.7 码制转换,14.1 查表程序设计,查表程序是一种常用的非数值运算程序,应用广泛。方法:该方法把事先计算的结果或实验数据按一定顺序编成表格,存于程序存储器内,然后根据输入参数值,从表中取得结果。用途:复杂代码转换显示数据补偿:传感器补偿复杂函数计算:Y=SIN(X)特点:具有程序简单、执行速度快、精度高等优点,而这正是单片机在测控场合或智能化仪表中所需要的。,一、以DPTR为基地址的查表程序,MOV
2、CA,A+DPTR操作步骤:初始化DPTR:将表格的首地址放入DPTR中,作为基地址。初始化A:A中应该放所要查询的数据在表格中的顺序号。执行结果:在执行该指令后,A中存放的是在表格中查到的数据。,注意事项,在查询表格时,若所要查询的数据是双字节的,则在初始化A中的数应为顺序号的2倍,且应执行两次本指令。对于单字节表格而言,表项的个数应不大于256个,若大于256时,则应适当修改DPTR的值。表格的存放位置。表格可以设在64K程存的任何位置。,二、以PC为基地址的查表指令,MOVC A,A+PC,操作步骤:,用传送指令把所查数据在表格中顺序号送入累加器A;使用ADD A,#data指令对累加器
3、A进行修正,data值由下式确定:data=数据表格首地址PC当前值 实际上data值等于查表指令和数据表格之间的字节数;执行指令完成查表,结果存放在A中。,注意事项,对于双字节表格,其处理方法与以DPTR为基地址的情况相同。对于单字节表格而言,其项数应不大于256。对于双字节表格而言,其项数应不大于128。,三、两种方式的比较,PC仅能对所谓本地表格操作,即表格项数不得大于256,且偏移量可能随程序的变化而变化,计算较为麻烦,其优点是少用寄存器。DPTR使用起来非常灵活,表项数不受限制,且表格可以放在64K的任意地方。,规则表 X的值为:0,1,2,3,n Y的值为:y0,y1,y2,y3,
4、yn y0,y1,。yn的字节长度一样,这种表格比较简单,可由y值按顺序构成表格。查表方法:MOVCA,A+PCMOVCA,A+DPTR,四、表格形式,例:设有一个巡回检测报警装置,需对16路输入值进行比较,当每一路输入值等于或超过该路的报警值时,实现报警。设Xi为路数,查表时Xi按0,1,2,15(i=15)取数,表中报警值是2字节数,依Xi顺序列成表格放在TAB中。进入查表程序前,路数Xi放在R2中,其输入值存于(R1R0)当中,查表结果放在(R4R3)中。若需报警,将P1.0口置1,否则清0。报警值的单元地址=表格首地址+(Xi*2),查表程序清单(方法1),TB1:MOV A,R2AD
5、D A,R2;A路数Xi*2MOV R4,A;保存ADD A,#06H;MOVC A,A+PC;1XCH A,R4;1ADD A,#03H;2MOVC A,A+PC;1 MOV R3,A;1RET;1TAB1:DW05F0H,0E89H,0A695H,1EAAH DW0D9BH,7F93H,0373H,26D7HDW2710H,9E3FH,1A66H,22E3HDW1174H,16EFH,33E4H,6CA0H,查表程序清单(方法2),ORG1000HTB1:MOV DPTR,#TAB1;DPTR表格首地址MOVA,R2ADDA,R2;A路数Xi*2MOV R4,AMOVCA,A+DPTR;取
6、出高字节XCH R4,A;R4 高字节 INC DPTRMOVCA,A+DPTR;取出低字节 MOVR3,A;R3 低字节CLRCMOVA,R0;当前输入值与报警值比较SUBBA,R3;低字节相减MOVA,R1SUBBA,R4;高字节相减JNCLOOP;(C)=0,转移,报警CLRP1.0RET,查表程序清单(方法2)续,LOOP:SETBP1.0RETORG2000HTAB1:DW05F0H,0E89H,0A695H,1EAAHDW0D9BH,7F93H,0373H,26D7HDW2710H,9E3FH,1A66H,22E3HDW1174H,16EFH,33E4H,6CA0H,14.2 数据
7、极值查找和数据排序,定义:数据极值查找就是在指定的数据区中找出最大值或最小值。方法:比较交换法。,数据极值查找,例:从内存BLOCK单元开始有一个无符号数的数据块,块长度为LEN,试找出数据块中最大值,并存入MAX单元。,ORG 2000HLEN DATA 20HMAX DATA 22HMOV MAX,#00H;MAX单元清零MOV R0,#BLOCK;数据块首地址送R0LOOP:MOV A,R0CJNE A,MAX,NEXT1;比较NEXT1:JC NEXT;若(A)(MAX),交换NEXT:INC R0DJNZ LEN,LOOP;若未完,转LOOPSJMP$END,数据排序,例:编写无符号
8、数排序程序。假设在片内RAM中,起始地址为40H的10个单元中存放有10个无符号数。试进行升序排序。,定义:数据排序是将指定数据区中的数据按升序或降序排列。方法:冒泡排序法,解:R7:比较次数计数器,初始值为09H位地址00H:数据互换的标志位 若(00H)=0,无互换发生,排序完毕。(00H)=1,有互换发生。,程序流程图,14.3 散转(多分支)程序设计,散转程序是一种多分支选择程序。它根据某种输入或运算结果,分别转向各个处理程序。在MCS-51单片机中,散转指令为JMP A+DPTR,它按照程序运行时决定的地址执行间接转移指令。,操作步骤:(1)将转移表首地址送入DPTR作为基地址。(2
9、)将条件标志单元内容装入A中作为变址,在装入前,还应根据转移表项内容作相应变化。(3)实现程序转移。,根据转移表的不同可以分为三种散转程序:,一、使用转移指令表的散转程序,1.应用场合 根据标志单元的内容是0,1,n,分别转向处理程序0,处理程序1,处理程序n。2.实现方法用直接转移指令(AJMP或LJMP指令)组成一个转移表,然后把标志单元的内容读入累加器A,转移表首地址放入DPTR中,再利用指令JMP A+DPTR实现散转。散转点超过256时,对DPTR进行修正。,例:要求根据寄存器R7的内容转向各个处理程序。,即(R7)=0,转向PRG0 即(R7)=1,转向PRG1 即(R7)=2,转
10、向PRG2 即(R7)=n,转向PRGn,程序清单,JUMP1:MOV DPTR,#JPTAB1 MOV A,R7 ADD A,R7;A(R7)*2 JNC NADD;判断是否有进位 INC DPH;有进位则加到高字节地址NADD:JMP A+DPTRJPTAB1:AJMP PRG0 AJMP PRG1 AJMP PRGn,注意事项,(1)在上例中,由于AJMP指令的指令长度为2个字节,因而在散转时采用自加的方法使变址实现乘2;若改用LJMP指令,由于其指令长度为3字节,因而应使变址乘3来修正。当修正产生进位时,要将进位加到DPH中。(2)由于使用了AJMP指令,PRG0、PRG1、等处理程序
11、的入口与相应的AJMP指令必须在同一个2K范围内。(3)由于R7是单字节,因而散转点不能大于256个。为了克服此局限性,可通过修改DPTR的办法来增加散转点。,二、使用地址偏移量表的散转程序,1.应用场合 转向的程序均在同一页(256字节),即转移表的大小与各个处理程序的总长度必须小于256字节。2.实现方法利用指令JMP A+DPTR与伪指令DB汇编时的计算功能实现散转。本方法的关键在于建立一个转向地址偏移量表(各处理程序首地址与表格首地址之间偏移量)。,例:要求按R7的内容转向5个处理程序。,JUMP3:MOVA,R7MOVDPTR,#TAB3MOVC A,A+DPTRJMPA+DPTRT
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 14 MCS51 程序设计 实用 子程序
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-6617146.html