MCS-51单片机的应用程序设计.ppt

上传人:小飞机 文档编号:6512347 上传时间:2023-11-08 格式:PPT 页数:20 大小:348.82KB
返回 下载 相关 举报
MCS-51单片机的应用程序设计.ppt_第1页
第1页 / 共20页
MCS-51单片机的应用程序设计.ppt_第2页
第2页 / 共20页
MCS-51单片机的应用程序设计.ppt_第3页
第3页 / 共20页
MCS-51单片机的应用程序设计.ppt_第4页
第4页 / 共20页
MCS-51单片机的应用程序设计.ppt_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《MCS-51单片机的应用程序设计.ppt》由会员分享,可在线阅读,更多相关《MCS-51单片机的应用程序设计.ppt(20页珍藏版)》请在三一办公上搜索。

1、,图 4-1 基本程序结构,原理展示,MCS-51单片机的应用程序设计,41 运算程序,一、多字节数加法,1多字节无符号数加法,CLR CMOV R0,#40H;指向加数最低位MOV R1,#5OH;指向另一加数最低位MOV R2,#04H;字节数作计数初值LOOP1:MOV A,R0;取被加数ADDC A,R1;两数相加,带进位MOV R0,AINC R0;修改地址INC R1DJNZ R2,LOOPl;未加完转LOOP1JNC LOOP2;无进位转LOOP2MOV R0,#01HLOOP2:DEC R0RET,2多字节有符号数加法,MOV A,R0;复制保存地址指针MOV R2,AMOV

2、A,RMOV R7,ACLR CLOOP1:MOV A,R0ADDC A,R1;相加 MOV R0,AINC R0INC R1;地址指针加1DJNZ R7,LOOP1JB OV,ERR;若溢出,转溢出处理DEC R0MOV A,R0JNB E7H,LOOP2SETB 07H;和值为负,置位标志LOOP2:MOV A,R2;恢复地址指针MOV R0,ARETERR:;溢出处理RET,SDADD:CLR 07H;标志位清零,图 4-3 多字节有符号数加法程序流程图,二、多字节数减法,MOV R0,#40H;指向被减数最低位MOV R1,#5OH;指向减数最低位MOV R2,#04H;字节数CLR

3、CLOOP1:MOV A,R0SUBB A,R1;完成一个字节的减法运算MOV R0,AINC R0INC R1DJNZ R2,LOOP1RET,三、多字节十进制数(BCD码)加法,图 4-4 BCD码多字节加法程序流程图,BCDADD:MOV 20H,R0 MOV 23H,R CLR C LOOP0:MOV A,R0;取被加数 ADDC A,R1;两数相加 DA A;十进制调整 MOV R0,A INC R0;指针加1 INC R1 DJNZ R,LOOP0;作完加法否 MOV R2.#23H JNC RETURN;有无进位,MOV R0,#01H INC RRETURN:MOV R0,#2

4、0H RET,四、多字节数乘法,ZHENFA:MOV A,R0 MOV B,R1 MUL AB;(R1)*(R0)MOV R,A;积的低位送到R MOV R4,B;积的高位送到R4 MOV A,R0 MOV B,R2 MUL AB;(R2)*(R0)ADD A,R4;(R1)*(R0)的高位加(R2)*(R0)的低位 MOV R4,A;结果送R4,进位在CY中 MOV A,B ADDC A,#OOH;(R2)*(R0)的高位加低位来的进位 MOV R,A;结果送R RET,五、多字节数除法,DV:MOV R7,#08H;设计数初值DVl:CLR C MOV A,R RLC A MOV R,A

5、MOV A,R6 RLC A;将(R6)、(R)左移一位 MOV 07H,C;将移出的一位送07H位保存 CLR C,图 4-5 除法程序流程图,SUBB A,R2;余数(高位)减除数 JB O7H,GOU;若标志位为1,说明够减,JNC GOU;无借位也说明够减 ADD A,R2;否则,恢复余数 AJMP DV2 GOU:INC R;商上1 DV2:MOV R6,A;保存余数(高位)DJNZ R7,DVl RET,一、数据的拼拆,42 数据的拼拆和转换,例4-7 设在30H和31H单元中各有一个8位数据:(30H)=x7x6xx4xx2x1x0(3lH)=y7y6yy4yy2y1y0现在要从

6、30H单元中取出低5位,并从31H单元中取出低3位完成拼装,拼装结果送40H单元保存,并且规定:(40H)=y2y1y0 x4xx2x1x0解:利用逻辑指令ANL、ORL来完成数据的拼拆,程序清单如下:MOV 4OH,3OH;将x7x0传送到40H单元ANL 4OH,#000111llB;将高3位屏蔽掉MOV A,31H;将y7y0传送到累加器中SWAP A;将A的内容左移4次RL A;y2y0移到高3位ANL A,#111000OOB;将低5位屏蔽掉ORL 4OH,A;完成拼装任务,二、数据的转换,1ASCII码与二进制数的互相转换,例4-10 编程实现十六进制数表示的ASC1I代码转换成4

7、位二进制数(1位十六进制数)。解:对于这种转换,只要注意到下述关系便不难编写出转换程序:“字符0”“字符9”的ASCII码值为“30H”“39H”,它们与30H之差恰好为“00H”“09H”,结果均0AH。“字符A”“字符F”的ASCII码值为“41H”“46H”,它们各自减去37H后恰好为“0AH”“0FH”,结果0AH。根据这个关系可以编出转换程序如下,程序以R1作为入口和出口。ASCHIN:MOV A,R1;取操作数CLR C;清进位标志位CSUBB A,#30H;ASCII码减去30H,实现0-9的转换MOV R1,A;暂存结果SUBB A,#0AH;结果是否9?JC LOOP;若9则

8、转换正确XCH A,R1SUBB A,#07H;若9则减37HMOV R1,ALOOP:RET,2BCD码与二进制数的转换,图 4-6 BCD码(十进制)转换成二进制数程序流程图,程序清单如下:MAIN:MOV A,R MOV R2,A;给子程序入口参数 ACALL BCDBIN;调用子程序 MOV B,#64H MUL AB MOV R6,A XCH A,B MOV R,A MOV A,R4 MOV R2,A ACALL BCDBIN;调用子程序 ADD A,R6 MOV R4,A MOV A,R ADDC A,#00H MOV R,A RET子程序如下:BCDBIN:MOV A,R2 AN

9、L A,#0F0H;取高位BCD码,屏蔽低4位 SWAP A MOV B,#0AH MUL AB MOV R,A MOV A,R2 ANL A,#0FH ADD A,R3;加低位BCD码 MOV R2,A RET,43 查表程序,使用MOVC A,A+DPTR指令来查表,程序清单如下:MOV DPTR,#BS;子程序入口地址表首址 RL A;键码值乘以,MOV R2,A;暂存 MOVC A,A+DPTR;取得入口地址低位 PUSH A;进栈暂存 INC A MOVC A,A+DPTR;取得入口地址高位 MOV DPH,A POP DPL CLR A JMP A+DPTR;转向键处理子程序BS:

10、DB RK0L;处理子程序入口地址表 DB RK0H DB RK1L DB RK1H DB RK2L DB RK2H,44 散转程序,一、采用转移指令表的散转程序,例4-17 编出要求根据R的内容转向各个操作程序的程序。即当(R)=0,转向OPRO(R)=1,转向OPRl(R)=n,转向OPRn解:程序清单如下:MOV A,RRL A;分支序号值乘2MOV DPTR,#BRTABL;转移指令表首址JMP A+DPTR;转向形成的散转地址BRTABL:AJMP OPR0;转移指令表AJMP OPR1AJMP OPRn,二、采用地址偏移量表的散转程序,例4-19 编出能按R的内容转向5个操作程序的

11、程序。其对应关系如下:OPRD0:操作程序0OPRD1:操作程序1OPRD2:操作程序2OPRD3:操作程序3OPRD4:操作程序4解:程序清单如下:MOV A,R MOV DPTR,#TAB3;指向地址偏移量表首址 MOVC A,A+DPTR;散转点入口地址在A中 JMP A+DPTR;转向相应的操作程序入口TAB3:DB OPRDO-TAB3;地址偏移量表 DB OPRDl-TAB3,DB OPRD2-TAB3 DB OPRD3-TAB3 DB OPRD4-TAB3,三、采用转向地址表的散转程序,例4-20 编程:要求根据R的内容转向相应的操作程序中去。设备操作程序的转向地址分别为OPRD

12、0,OPRDl,OPRDn。解:程序清单如下:MOV DPTR,#BRTABL;指向转向地址表 MOV A,R ADD A,R;(A)(R)*2 JNC NAND;INC DPH;(R)*2的进位加到DPHNAND:MOV R,A;暂存变址值 MOVC A,A+DPTR;取转向地址高8位 XCH A,R INC A MOVC A,A+DPTR;取转向地址低8位 MOV DPL,A;转向地址在DPTR中 MOV DPH,R,CLR A JMP A+DPTR;转向相应的操作程序BRTABL:DW OPRDO;转向地址表 DW OPRD1 DW OPRDn,四、采用“RET”指令的散转程序,例4-2

13、1 编出能根据R的内容转向各个操作程序的程序。设该操作程序的转向地址分别为OPRD0,OPRDl,OPRDn。解:程序清单如下:MOV DPTR,#TAB3;指向转移地址表 MOV A,R ADD A,R JNC NAND INC DPHNAND:MOV R,A MOVC A,A+DPTR;取转向地址高8位 XCH A,R INC A MOVC A,A+DPTR;取转向地址低8位 PUSH A;转向地址入栈 MOV A,R PUSH A RET;转向操作程序TAB3:DW OPRD0;转向地址表 DW OPRDl DW OPRDn,45 I/O端口控制程序,例4-22 试编出能模拟图4-9中电

14、路的程序。,ORG 0200H D BIT 00H E BIT 01H G BIT 02HLOOP1:ORL P1,#08H;准备P1.3输入LOOP2:MOV C,P1.3;检测K3状态 JC LOOP2;若未准备好(K3断),则LOOP2 ORL P1,#03H;若准备好,则准备输入P1.0和P1.1状态 MOV C,P1.0;输入K0状态 MOV D,C;送入D,MOV C,P1.1;输入K1状态 MOV E,C;送入E ANL C,D;DE送C MOV G,C;送入G MOV C,E ORL C,D;DE送C ANL C,/G;(DE)(DE)MOV P1.2,C;输出结果 SJMP

15、LOOP1;准备下次模拟 END,46 子程序调用时的参数传递方法,一、通过寄存器或片内RAM传递参数,例4-23 利用通过寄存器或片内RAM传递参数这种方法编出调用SUBRT子程序的主程序。解:应该是:MAIN:MOV R0,#30H;传送RAM数据区的起始地址 MOV R7,#0AH;传送RAM数据区的长度 ACALL SUBRT;调用清零子程序 SJMP$;结束 SUBRT:MOV A,#00H;清零子程序LOOP:MOV R0,A INC R0 DJNZ R7,LOOP RET,二、通过堆栈传递参数,例4-25 在HEX单元存有两个十六进制数,试编程分别把它们转换成ASCII码存入AS

16、C和ASC+1单元。解:本题子程序采用查表方法完成一个十六进制数的ASCII码转换,主程序完成入口参数的传递和子程序的两次调用,以满足题目要求。程序清单为:ORG 1200HPUSH HEX;入口参数压栈ACALL HASC;求低位十六进制数的ASCII码POP ASC;出口参数存入ASCMOV A,HEX;十六进制数送ASWAP A;高位十六进制数送低4位PUSH ACC;入口参数压栈ACALL HASC;求高位十六进制数的ASCII码POP ASC+1;出口参数送ASC+1SJMP$;原地踏步,结束HASC:DEC SPDEC SP;入口参数地址送SPPOP ACC;入口参数送AANL A

17、,#0FH;取出入口参数低4位ADD A,#07H;地址调整MOVC A,A+PC;查相应ASCII码PUSH ACC;出口参数压栈INC SPINC SP;SP指向断点地址高8位RET;返回主程序ASCTABL:DB 0,1,2,3,4,5,6,7DB 8,9,A,B,C,D,E,FEND,三、利用指针寄存器传递参数,例4-26 编出能实现打印THIS IS AN EXAMPLE的程序。解:将要打印的字符及代码不是放在调用指令之前,而是紧跟在调用指令之后。主程序:MAIN:ACALL PRINT;调用打印子程序 DBTHIS IS AN EXAMPLE;要打印的字符及代码 DB OAH,ODH,OOHNEXT:子程序:PRINT:POP DPH;把调用指令下面字节的地址弹出,作为数据指针 POP DPLPPPl:MOV A,#OOH MOVC A,A+DPTR;取出欲打印的字符 INC DPTR JZ PPPEND;判断是否为结束字符PPP2:;打印程序 SJMP PPPl;未完,继续打印PPPEND:JMP A+DPTR;指向主程序NEXT处,取代返回指令,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号