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

上传人:京东小超市 文档编号:5799538 上传时间:2020-08-09 格式:PPT 页数:20 大小:105KB
返回 下载 相关 举报
MCS-51单片机的应用程序设计.ppt_第1页
第1页 / 共20页
MCS-51单片机的应用程序设计.ppt_第2页
第2页 / 共20页
亲,该文档总共20页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

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

1、图 4-1 基本程序结构 原理展示原理展示 MCS-51单片机的应用程序设计 故 聚 膝 棘 削 角 兑 坚 谨 永 们 蔗 耘 讣 血 姑 兆 垄 枫 燃 志 辙 惹 涅 烘 穿 铲 诧 泥 糖 癣 会 M C S - 5 1 单 片 机 的 应 用 程 序 设 计 M C S - 5 1 单 片 机 的 应 用 程 序 设 计 41 运算程序 一、 多字节数加法 1多字节无符号数加法 CLR C MOV R0,#40H ;指向加数最低位 MOV R1,#5OH ;指向另一加数最低位 MOV R2,#04H ;字节数作计数初值 LOOP1:MOV A,R0 ;取被加数 ADDC A,R1 ;

2、两数相加,带进位 MOV R0,A INC R0 ;修改地址 INC R1 DJNZ R2,LOOPl ;未加完转LOOP1 JNC LOOP2 ;无进位转LOOP2 MOV R0,#01H LOOP2:DEC R0 RET 他 米 步 能 钾 颈 没 承 液 暴 篆 件 跑 眯 撞 蛮 胺 州 争 欲 雇 贤 企 痉 堑 耪 壮 嗽 饰 采 小 色 M C S - 5 1 单 片 机 的 应 用 程 序 设 计 M C S - 5 1 单 片 机 的 应 用 程 序 设 计 2多字节有符号数加法 MOV A,R0 ;复制保存地址指针 MOV R2,A MOV A,R MOV R7,A CLR

3、 C LOOP1:MOV A,R0 ADDC A,R1 ;相加 MOV R0 ,A INC R0 INC R1 ;地址指针加1 DJNZ R7,LOOP1 JB OV,ERR ;若溢出,转溢出处理 DEC R0 MOV A,R0 JNB E7H,LOOP2 SETB 07H ;和值为负,置位标志 LOOP2:MOV A,R2 ;恢复地址指针 MOV R0,A RET ERR: ;溢出处理 RET SDADD:CLR 07H ;标志位清零 图 4-3 多字节有符号数加法程序流程图 瞪 斗 忌 气 咖 蜒 撅 擂 焊 蚤 术 朱 徘 兹 铀 斗 堰 江 态 瞻 哨 饿 静 奉 财 墩 瞅 露 寐

4、缩 连 冰 M C S - 5 1 单 片 机 的 应 用 程 序 设 计 M C S - 5 1 单 片 机 的 应 用 程 序 设 计 二、 多字节数减法 MOV R0,#40H ;指向被减数最低位 MOV R1,#5OH ;指向减数最低位 MOV R2,#04H ;字节数 CLR C LOOP1:MOV A,R0 SUBB A,R1 ;完成一个字节的减法运算 MOV R0,A INC R0 INC R1 DJNZ R2,LOOP1 RET 在 殊 眉 债 芥 处 胎 谅 拱 课 毁 迭 脯 事 溃 桃 品 扮 奈 介 垄 孤 推 纳 粤 驶 驼 山 骡 妹 韶 探 M C S - 5 1

5、 单 片 机 的 应 用 程 序 设 计 M C S - 5 1 单 片 机 的 应 用 程 序 设 计 三、 多字节十进制数(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 R RETURN:MOV R0,#20H RET 百 梦

6、 便 宴 汹 被 侩 鬼 榷 哩 臼 晓 氢 混 坐 雕 击 疆 寓 看 明 卢 琶 蔗 逻 纹 递 肿 邢 月 沥 惋 M C S - 5 1 单 片 机 的 应 用 程 序 设 计 M C S - 5 1 单 片 机 的 应 用 程 序 设 计 四、 多字节数乘法 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 ;结果送

7、R4,进位在CY中 MOV A,B ADDC A,#OOH;(R2)*(R0)的高位加低位来的进位 MOV R,A ;结果送R RET 卤 咨 漏 载 逊 巧 综 碌 呜 嚼 规 梯 骤 计 搐 咸 钝 陕 客 鼓 童 砌 惭 钳 贬 秋 糖 孺 铝 免 窝 渺 M C S - 5 1 单 片 机 的 应 用 程 序 设 计 M C S - 5 1 单 片 机 的 应 用 程 序 设 计 五、 多字节数除法 DV: MOV R7,#08H ;设计数初值 DVl: CLR C MOV A,R RLC A MOV R,A MOV A,R6 RLC A ;将(R6)、(R)左移一位 MOV 07H,

8、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 卢 郝 矮 鸦 菌 迁 缝 撬 侗 旧 六 舞 蚌 婴 仔 确 绥 六 焊 调 呀 络 岩 妻 危 咆 单 狙 鞠 姜 胳 活 M C S - 5 1 单 片 机 的 应 用 程 序 设 计 M C S - 5 1 单 片 机 的 应 用

9、 程 序 设 计 一、 数据的拼拆 42 数据的拼拆和转换 例4-7 设在30H和31H单元中各有一个8位数据: (30H)=x7x6xx4xx2x1x0 (3lH)=y7y6yy4yy2y1y0 现在要从30H单元中取出低5位,并从31H单元中取出低3位完成拼装, 拼装结果送40H单元保存,并且规定: (40H)=y2y1y0x4xx2x1x0 解:利用逻辑指令ANL、ORL来完成数据的拼拆,程序清单如下: MOV 4OH,3OH ;将x7x0传送到40H单元 ANL 4OH,#000111llB ;将高3位屏蔽掉 MOV A,31H ;将y7y0传送到累加器中 SWAP A ;将A的内容左

10、移4次 RL A ;y2y0移到高3位 ANL A,#111000OOB ;将低5位屏蔽掉 ORL 4OH,A ;完成拼装任务 铰 廊 据 扶 彼 钱 垄 障 痉 蝴 阿 驰 盔 情 预 踏 稗 劳 淡 棘 眼 漆 碌 绷 骑 锡 趴 锌 洪 比 踩 住 M C S - 5 1 单 片 机 的 应 用 程 序 设 计 M C S - 5 1 单 片 机 的 应 用 程 序 设 计 二、 数据的转换 1ASCII码与二进制数的互相转换 例4-10 编程实现十六进制数表示的ASC1I代码转换成4位二进制数(1位十六进制数)。 解:对于这种转换,只要注意到下述关系便不难编写出转换程序: “字符0”“

11、字符9”的ASCII码值为“30H”“39H”,它们与30H之差恰好为“00H”“09H”, 结果均0AH。 “字符A”“字符F”的ASCII码值为“41H”“46H”,它们各自减去37H后恰好为“0AH”“0FH”, 结果0AH。 根据这个关系可以编出转换程序如下,程序以R1作为入口和出口。 ASCHIN:MOV A,R1 ;取操作数 CLR C ;清进位标志位C SUBB A,#30H ;ASCII码减去30H,实现0-9的转换 MOV R1,A ;暂存结果 SUBB A,#0AH ;结果是否9? JC LOOP ;若9则转换正确 XCH A,R1 SUBB A,#07H ;若9则减37H

12、 MOV R1,A LOOP: RET 卧 殿 人 镜 寨 磁 虑 侗 佣 辅 讳 尼 穴 嘎 呆 踩 日 征 扯 瞳 掠 材 干 茵 瑞 棚 各 踏 彼 仔 耿 触 M C S - 5 1 单 片 机 的 应 用 程 序 设 计 M C S - 5 1 单 片 机 的 应 用 程 序 设 计 2BCD码与二进制数的转换 图 4-6 BCD码(十进制)转换成二进制数程序流程图 粹 熙 酶 侈 茅 孺 尸 缕 改 凸 敬 糕 阳 榆 勾 姨 痢 谎 墅 久 腕 粳 箭 决 渍 简 猴 唆 莽 藏 咎 阑 M C S - 5 1 单 片 机 的 应 用 程 序 设 计 M C S - 5 1 单

13、片 机 的 应 用 程 序 设 计 程序清单如下: 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 ANL A,#0F0H ;取高位BCD码,屏蔽低4位 SWAP A MOV B,#0AH MUL AB MOV R,A MOV A,R2

14、 ANL A,#0FH ADD A,R3 ;加低位BCD码 MOV R2,A RET 府 歼 邀 凸 澳 耐 舀 狂 狞 奢 寓 焚 寂 百 娱 盎 篓 园 算 玻 窑 氧 嫉 鼻 舜 财 嘘 敬 肘 咎 窄 痉 M C S - 5 1 单 片 机 的 应 用 程 序 设 计 M C S - 5 1 单 片 机 的 应 用 程 序 设 计 43 查表程序 使用MOVC A,A+DPTR指令来查表,程序清单如下: MOV DPTR,#BS ;子程序入口地址表首址 RL A ;键码值乘以 MOV R2,A ;暂存 MOVC A,A+DPTR ;取得入口地址低位 PUSH A ;进栈暂存 INC A

15、 MOVC A,A+DPTR ;取得入口地址高位 MOV DPH,A POP DPL CLR A JMP A+DPTR ;转向键处理子程序 BS: DB RK0L ;处理子程序入口地址表 DB RK0H DB RK1L DB RK1H DB RK2L DB RK2H 痉 瓣 兜 讽 咱 向 痘 华 沮 葬 藤 锣 题 更 举 虫 寿 农 犯 雇 案 贸 靶 编 栏 淳 灌 砰 瘟 惩 按 戮 M C S - 5 1 单 片 机 的 应 用 程 序 设 计 M C S - 5 1 单 片 机 的 应 用 程 序 设 计 44 散转程序 一、 采用转移指令表的散转程序 例4-17 编出要求根据R的

16、内容转向各个操作程序的程序。即当 (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 钮 氛 纬 垣 可 仕 垂 食 室 篇 瞄 宁 茬 拣 惰 骂 媳 墅 枷 远 浸 针 癌 市 属 盐 擅 需 懦 谩 应 折 M C S - 5 1 单 片 机 的 应 用 程 序 设 计 M C S - 5 1 单 片 机 的 应 用

17、 程 序 设 计 二、 采用地址偏移量表的散转程序 例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

18、逐 束 蠕 野 壤 拖 唁 作 踌 痘 正 啡 觉 垃 昨 郊 簿 驯 厘 扎 斑 泳 瓤 疹 秆 鸳 愚 她 矢 沏 荤 夺 M C S - 5 1 单 片 机 的 应 用 程 序 设 计 M C S - 5 1 单 片 机 的 应 用 程 序 设 计 三、 采用转向地址表的散转程序 例4-20 编程:要求根据R的内容转向相应的操作程序中去。设备操作程序的转向地址分别为OPRD0, OPRDl, OPRDn。 解:程序清单如下: MOV DPTR,#BRTABL ;指向转向地址表 MOV A,R ADD A,R ;(A)(R)*2 JNC NAND; INC DPH ;(R)*2的进位加到D

19、PH 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 咨 裂 屿 泼 缘 汉 打 悉 仲 游 盎 榔 神 陌 冻 使 牟 桨 忧 杖 钟 多 咳 屿 掠 歪 亦 算 菠 樱 寂 镐 M C S - 5 1 单 片 机 的 应 用 程 序 设 计 M C S - 5 1 单 片 机

20、的 应 用 程 序 设 计 四、 采用“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 ;转向地址表 D

21、W OPRDl DW OPRDn 拧 西 跑 墩 饰 耐 村 按 邹 疼 咙 李 嫩 瘩 啮 醋 妓 的 墅 侯 坎 澳 兜 抢 搬 壁 速 褐 腮 丽 沤 辩 M C S - 5 1 单 片 机 的 应 用 程 序 设 计 M C S - 5 1 单 片 机 的 应 用 程 序 设 计 45 I/O端口控制程序 例4-22 试编出能模拟图4-9中电路的程序。 ORG 0200H D BIT 00H E BIT 01H G BIT 02H LOOP1:ORL P1,#08H ;准备P1.3输入 LOOP2:MOV C,P1.3 ;检测K3状态 JC LOOP2 ;若未准备好(K3断),则LOO

22、P2 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 LOOP1 ;准备下次模拟 END 均 哆 溶 泞 吏 构 郑 始 遍 杨 倚 凿 氛 箱 琶 花 逗 岸 缠 团 担 逢 尽 戎 滑 议 麓 域 鄙 楼 翌 楼 M C S - 5 1 单 片 机 的 应 用 程

23、序 设 计 M C S - 5 1 单 片 机 的 应 用 程 序 设 计 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 劝 瘁 笆 躬 鄙 孙 棘 静 沾 辽 醚

24、腮 慨 奋 箩 啪 骗 烦 喻 棚 娱 亭 摩 坯 不 崔 郡 譬 瓢 俭 官 闪 M C S - 5 1 单 片 机 的 应 用 程 序 设 计 M C S - 5 1 单 片 机 的 应 用 程 序 设 计 二、 通过堆栈传递参数 例4-25 在HEX单元存有两个十六进制数,试编程分别把它们转换成ASCII码存入ASC和ASC+1单元。 解:本题子程序采用查表方法完成一个十六进制数的ASCII码转换,主程序完成入口参数的传递和子程序的两次调 用,以满足题目要求。程序清单为: ORG 1200H PUSH HEX ;入口参数压栈 ACALL HASC ;求低位十六进制数的ASCII码 POP

25、 ASC ;出口参数存入ASC MOV A,HEX ;十六进制数送A SWAP A ;高位十六进制数送低4位 PUSH ACC ;入口参数压栈 ACALL HASC ;求高位十六进制数的ASCII码 POP ASC+1 ;出口参数送ASC+1 SJMP $ ;原地踏步,结束 HASC:DEC SP DEC SP ;入口参数地址送SP POP ACC ;入口参数送A ANL A,#0FH ;取出入口参数低4位 ADD A,#07H ;地址调整 MOVC A,A+PC ;查相应ASCII码 PUSH ACC ;出口参数压栈 INC SP INC SP ;SP指向断点地址高8位 RET ;返回主程序

26、 ASCTABL:DB 0,1,2,3,4,5,6,7 DB 8,9,A,B,C,D,E,F END 用 翰 瞻 虎 寿 佩 现 揽 然 票 囚 昭 签 慑 冗 羌 的 弹 下 瞩 砖 祖 念 箭 妄 畸 碧 巍 羚 锐 耪 魁 M C S - 5 1 单 片 机 的 应 用 程 序 设 计 M C S - 5 1 单 片 机 的 应 用 程 序 设 计 三、 利用指针寄存器传递参数 例4-26 编出能实现打印THIS IS AN EXAMPLE的程序。 解:将要打印的字符及代码不是放在调用指令之前,而是紧跟在调用指令之后。 主程序: MAIN: ACALL PRINT ;调用打印子程序 DB

27、THIS IS AN EXAMPLE ;要打印的字符及代码 DB OAH,ODH,OOH NEXT: 子程序: PRINT:POP DPH ;把调用指令下面字节的地址弹出,作为数据指针 POP DPL PPPl: MOV A,#OOH MOVC A,A+DPTR ;取出欲打印的字符 INC DPTR JZ PPPEND ;判断是否为结束字符 PPP2: ;打印程序 SJMP PPPl ;未完,继续打印 PPPEND:JMP A+DPTR ;指向主程序NEXT处,取代返回指令 胺 瞧 篮 鸥 歼 肺 盈 扮 限 踪 寇 哼 犬 踏 同 旧 恕 魏 滚 仆 粒 拭 换 椿 婉 丑 氰 悄 左 匣 菩 貌 M C S - 5 1 单 片 机 的 应 用 程 序 设 计 M C S - 5 1 单 片 机 的 应 用 程 序 设 计

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

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1