资源预览内容
第1页 / 共20页
第2页 / 共20页
第3页 / 共20页
第4页 / 共20页
第5页 / 共20页
第6页 / 共20页
第7页 / 共20页
第8页 / 共20页
第9页 / 共20页
第10页 / 共20页
第11页 / 共20页
第12页 / 共20页
第13页 / 共20页
第14页 / 共20页
第15页 / 共20页
第16页 / 共20页
第17页 / 共20页
第18页 / 共20页
第19页 / 共20页
第20页 / 共20页
亲,该文档总共20页全部预览完了,如果喜欢就下载吧!
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,图 4-1 基本程序结构,原理展示,MCS-51单片机的应用程序设计,图 4-1 基本程序结构 原理展示 MCS-51单片,1,41 运算程序,一、多字节数加法,1,多字节无符号数加法,CLR C,MOV R,0,,#40H ;指向加数最低位,MOV R,1,,#5OH ;指向另一加数最低位,MOV R,2,,#04H ;字节数作计数初值,LOOP1:MOV A,R,0,;取被加数,ADDC A,R,1,;两数相加,带进位,MOV R,0,,A,INC R,0,;修改地址,INC R,1,DJNZ R,2,,LOOPl;未加完转LOOP1,JNC LOOP2 ;无进位转LOOP2,MOV R,0,,#01H,LOOP2:DEC R,0,RET,41 运算程序一、多字节数加法1多字节无符号数加法C,2,2多字节有符号数加法,MOV A,R,0,;复制保存地址指针,MOV R,2,,A,MOV A,R,MOV R,7,,A,CLR C,LOOP1:MOV A,R,0,ADDC A,R,1,;相加,MOV R,0,,A,INC R,0,INC R,1,;地址指针加1,DJNZ R,7,,LOOP1,JB OV,ERR ;若溢出,转溢出处理,DEC R,0,MOV A,R,0,JNB E7H,LOOP2,SETB 07H ;和值为负,置位标志,LOOP2:MOV A,R,2,;恢复地址指针,MOV R,0,,A,RET,ERR:;溢出处理,RET,SDADD:CLR 07H ;标志位清零,图,4-3,多字节有符号数加法程序流程图,2多字节有符号数加法 MOV A,R0 ;复制,3,二、多字节数减法,MOV R,0,,#40H ;指向被减数最低位,MOV R,1,,#5OH ;指向减数最低位,MOV R,2,,#04H ;字节数,CLR C,LOOP1:MOV A,R,0,SUBB A,R,1,;完成一个字节的减法运算,MOV R,0,,A,INC R,0,INC R,1,DJNZ R,2,,LOOP1,RET,二、多字节数减法 MOV R0,#40H ;指向被,4,三、多字节十进制数(BCD码)加法,图,4-4 BCD,码多字节加法程序流程图,BCDADD:MOV 20H,R,0,MOV 23H,R,CLR C,LOOP0:MOV A,R,0,;取被加数,ADDC A,R,1,;两数相加,DA A ;十进制调整,MOV R,0,,A,INC R,0,;指针加1,INC R,1,DJNZ R,,LOOP0;作完加法否,MOV R2.#23H,JNC RETURN ;有无进位,MOV R,0,,#01H,INC R,RETURN:MOV R,0,,#20H,RET,三、多字节十进制数(BCD码)加法 图 4-4 BCD码,5,四、多字节数乘法,ZHENFA:MOV A,R,0,MOV B,R,1,MUL AB ;(R,1,)*(R,0,),MOV R,,A ;积的低位送到R,MOV R,4,,B ;积的高位送到R,4,MOV A,R,0,MOV B,R,2,MUL AB ;(R,2,)*(R,0,),ADD A,R,4,;(R,1,)*(R,0,)的高位加(R,2,)*(R,0,)的低位,MOV R,4,,A ;结果送R,4,,进位在CY中,MOV A,B,ADDC A,#OOH;(R,2,)*(R,0,)的高位加低位来的进位,MOV R,,A ;结果送R,RET,四、多字节数乘法ZHENFA:MOV A,R0,6,五、多字节数除法,DV:MOV R,7,#08H ;设计数初值,DVl:CLR C,MOV A,R,RLC A,MOV R,,A,MOV A,R,6,RLC A ;将(R,6,)、(R,)左移一位,MOV 07H,C ;将移出的一位送07H位保存,CLR C,图,4-5,除法程序流程图,SUBB A,R,2,;余数(高位)减除数,JB O7H,GOU ;若标志位为1,说明够减,JNC GOU ;无借位也说明够减,ADD A,R,2,;否则,恢复余数,AJMP DV2,GOU:INC R,;商上1,DV2:MOV R,6,,A ;保存余数(高位),DJNZ R,7,,DVl,RET,五、多字节数除法DV:MOV R7,#08H,7,一、,数据的拼拆,42 数据的拼拆和转换,例4-7 设在30H和31H单元中各有一个8位数据:,(30H)=x,7,x,6,x,x,4,x,x,2,x,1,x,0,(3lH)=y,7,y,6,y,y,4,y,y,2,y,1,y,0,现在要从30H单元中取出低5位,并从31H单元中取出低3位完成拼装,,拼装结果送40H单元保存,并且规定:,(40H)=y,2,y,1,y,0,x,4,x,x,2,x,1,x,0,解:利用逻辑指令ANL、ORL来完成数据的拼拆,程序清单如下:,MOV 4OH,3OH ;将x,7,x,0,传送到40H单元,ANL 4OH,#000111llB;将高3位屏蔽掉,MOV A,31H ;将y,7,y,0,传送到累加器中,SWAP A ;将A的内容左移4次,RL A ;y,2,y,0,移到高3位,ANL A,#111000OOB ;将低5位屏蔽掉,ORL 4OH,A ;完成拼装任务,一、数据的拼拆42 数据的拼拆和转换例4-7 设在3,8,二、数据的转换,1ASCII码与二进制数的互相转换,例4-10 编程实现十六进制数表示的ASC1I代码转换成4位二进制数(1位十六进制数)。,解:对于这种转换,只要注意到下述关系便不难编写出转换程序:,“字符0”“字符9”的ASCII码值为“30H”“39H”,它们与30H之差恰好为“00H”“09H”,,结果均0AH。,“字符A”“字符F”的ASCII码值为“41H”“46H”,它们各自减去37H后恰好为“0AH”“0FH”,,结果0AH。,根据这个关系可以编出转换程序如下,程序以R,1,作为入口和出口。,ASCHIN:MOV A,R,1,;取操作数,CLR C ;清进位标志位C,SUBB A,#30H ;ASCII码减去30H,实现0-9的转换,MOV R,1,,A ;暂存结果,SUBB A,#0AH ;结果是否9?,JC LOOP ;若9则转换正确,XCH A,R,1,SUBB A,#07H ;若9则减37H,MOV R,1,,A,LOOP:RET,二、数据的转换 1ASCII码与二进制数的互相转换 例4,9,2BCD码与二进制数的转换,图,4-6 BCD,码(十进制)转换成二进制数程序流程图,2BCD码与二进制数的转换 图 4-6 BCD码(十进制,10,程序清单如下:,MAIN:MOV A,R,MOV R,2,,A ;给子程序入口参数,ACALL BCDBIN ;调用子程序,MOV B,#64H,MUL AB,MOV R,6,,A,XCH A,B,MOV R,,A,MOV A,R,4,MOV R,2,,A,ACALL BCDBIN ;调用子程序,ADD A,R,6,MOV R,4,,A,MOV A,R,ADDC A,#00H,MOV R,,A,RET,子程序如下:,BCDBIN:MOV A,R,2,ANL A,#0F0H ;取高位BCD码,屏蔽低4位,SWAP A,MOV B,#0AH,MUL AB,MOV R,,A,MOV A,R,2,ANL A,#0FH,ADD A,R,3,;加低位BCD码,MOV R,2,,A,RET,程序清单如下:,11,43 查表程序,使用MOVC A,A+DPTR指令来查表,程序清单如下:,MOV DPTR,#BS ;子程序入口地址表首址,RL A ;键码值乘以,MOV R,2,,A ;暂存,MOVC A,A+DPTR ;取得入口地址低位,PUSH A ;进栈暂存,INC A,MOVC A,A+DPTR ;取得入口地址高位,MOV DPH,A,POP DPL,CLR A,JMP A+DPTR ;转向键处理子程序,BS:DB RK,0,L ;处理子程序入口地址表,DB RK,0,H,DB RK,1,L,DB RK,1,H,DB RK,2,L,DB RK,2,H,43 查表程序 使用MOVC A,A+DPTR指令来查,12,44 散转程序,一、采用转移指令表的散转程序,例4-17 编出要求根据R,的内容转向各个操作程序的程序。即当,(R,)=0,转向OPRO,(R,)=1,转向OPRl,(R,)=n,转向OPRn,解:程序清单如下:,MOV A,R,RL A ;分支序号值乘2,MOV DPTR,#BRTABL;转移指令表首址,JMP A+DPTR ;转向形成的散转地址,BRTABL:AJMP OPR0 ;转移指令表,AJMP OPR1,AJMP OPRn,44 散转程序一、采用转移指令表的散转程序 例4-17,13,二、采用地址偏移量表的散转程序,例4-19 编出能按R,的内容转向5个操作程序的程序。其对应关系如下:,OPRD0:操作程序0,OPRD1:操作程序1,OPRD2:操作程序2,OPRD3:操作程序3,OPRD4:操作程序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-19 编出能按R的,14,三、采用转向地址表的散转程序,例4-20 编程:要求根据R,的内容转向相应的操作程序中去。设备操作程序的转向地址分别为OPRD0,,OPRDl,OPRDn。,解:程序清单如下:,MOV DPTR,#BRTABL ;指向转向地址表,MOV A,R,ADD A,R,;(A)(R,)*2,JNC NAND;,INC DPH ;(R,)*2的进位加到DPH,NAND: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,三、采用转向地址表的散转程序例4-20 编程:要求根据R,15,四、采用“RET”指令的散转程序,例4-21 编出能根据R,的内容转向各个操作程序的程序。设该操作程序的转向地址分别为OPRD0,,OPRDl,OPRDn。,解:程序清单如下:,MOV DPTR,#TAB3 ;指向转移地址表,MOV A,R,ADD A,R,JNC NAND,INC DPH,NAND: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,四、采用“RET”指令的散转程序 例4-21 编出能根据,16,45 I/O端口控制程序,例4-22 试编出能模拟图4-9中电路的程序,。,ORG 0200H,D BIT 00H,E BIT 01H,G BIT 02H,LOOP1:ORL P,1,,#08H ;准备P,1.3,输入,LOOP2:MOV C,P,1.3,;检测K3状态
点击显示更多内容>>

最新DOC

最新PPT

最新RAR

收藏 下载该资源
网站客服QQ:3392350380
装配图网版权所有
苏ICP备12009002号-6