{电子公司企业管理}单片机原理与应用胡辉电子讲义4917第4章

上传人:卓****库 文档编号:141152148 上传时间:2020-08-04 格式:PPTX 页数:62 大小:203.01KB
返回 下载 相关 举报
{电子公司企业管理}单片机原理与应用胡辉电子讲义4917第4章_第1页
第1页 / 共62页
{电子公司企业管理}单片机原理与应用胡辉电子讲义4917第4章_第2页
第2页 / 共62页
{电子公司企业管理}单片机原理与应用胡辉电子讲义4917第4章_第3页
第3页 / 共62页
{电子公司企业管理}单片机原理与应用胡辉电子讲义4917第4章_第4页
第4页 / 共62页
{电子公司企业管理}单片机原理与应用胡辉电子讲义4917第4章_第5页
第5页 / 共62页
点击查看更多>>
资源描述

《{电子公司企业管理}单片机原理与应用胡辉电子讲义4917第4章》由会员分享,可在线阅读,更多相关《{电子公司企业管理}单片机原理与应用胡辉电子讲义4917第4章(62页珍藏版)》请在金锄头文库上搜索。

1、第章 程序设计,虽然单片机的每条指令能使计算机完成一种特定的操作。但要完成某一特定的任务还需要将这些指令按工作要求有序组合为一段完整的程序。程序实际上是一系列计算机指令的有序集合。我们把利用计算机的指令系统来合理地编写出解决某个问题的程序的过程,称之为程序设计。,4.1 简单汇编语言程序设计,编制程序的步骤,1.任务分析(硬件、软件系统分析) 2.确定算法和工作步骤; 3.程序总体设计和流程图绘制,关于流程图符号: 开始、结束-圆角矩形 工作任务-矩形 判断分支-菱形 程序流向- 程序连接-,开始,结束,4. 分配内存,确定程序与数据区存放地址; 5. 编写源程序; 6. 调试、修改,最终确定

2、程序。,方法技巧,1. 模块化设计(按功能分:显示、打印、输入、发送等) 2. 尽量采用循环及子程序结构(节省内存),汇编语言的规范,汇编语言源程序由以下两种指令构成 汇编语句(指令语句) 伪指令(指示性语句) 汇编语句的格式: 标号:操作码操作数;注释 数据表示形式: 二进制(B)、十六进制(H)、十进制(D或省略)、ASCII码(以单引号标识),3.伪指令:控制汇编用的特殊指令,这些指令不属 于指令系统,不产生机器代码。,4.1.1 分支程序,分支程序可根据要求无条件或条件地改变程序执行流向。编写分支程序主要在于正确使用转移指令。分支程序有:单分支结构、双分支结构、多分支结构(散转),分支

3、程序,分支程序可根据要求无条件或条件地改变程序执行流向。编写分支程序主要在于正确使用转移指令。分支程序有:单分支结构、双分支结构、多分支结构(散转),1比较数的大小,入口条件:两个带符号数分别存在内部RAM 30H和31H单元中,试比较它们的大小,将较大的数存入32H单元中。,XY为正: OV0,则XY OV=1,则XY XY为负: OV0,则XY OV1,则XY,ORG0100H MOVA,30H;取初值 CLRC SUBBA,31H;XY JZDZ1;X=Y? JC EBB JBOV,EB1;XY0, OV=1,XY AJMPDZ1;XY0, OV=0,XY EBB:JBOV,DZ1;XY

4、0, OV=1,XY EB1:MOVA,31H;XY AJMPJS0 DZ1:MOVA,30H;XY JS0:MOV32H,A END,例:设变量x以补码形式存放在片内RAM 30H单元中,变量y与x的关系是:,编程根据x的值求y值并放回原单元。,2函数运算,ORG 0000H START:MOV A,30H JZ NEXT ;x=0,转移 ANL A,#80H ;保留符号位 JZ ED ;x0,转移 MOV A,#05H ;x0,不转移 ADD A,30H MOV 30H,A SJMP ED NEXT:MOV 30H,#20H ED:SJMP $,START:MOV DPTR,#TAB MO

5、V A,R7 ADD A,R7 ;R72A MOV R3,A ;暂存R3 MOVC A,A+DPTR ;取高位地址 XCH A ,R3 INC A MOVC A,A+DPTR ;取低位地址 MOV DPL,A MOV DPH,R3 ;转移地址送入DPTR CLR A JMP A+DPTR TAB: DW P0 DW P1 DW PN,例:根据R7的内容,转至对应的分支程序。设R7的内容为0N,对应的处理程序地址分别为P0P7,4.3.3 循环程序,循环程序一般由: 初始化部分 循环体部分-处理部分、修改部分、控制部分 结束部分 其结构一般有两种: 先进入处理部分,再控制循环 至少执行一次循环体

6、 先控制循环,再进入处理部分 循环体是否执行,取决于判断结果。,开始,设置循环初值,循环处理,循环修改,结束处理,结束,循环结束?,N,Y,Y,N,循环控制的一般方法: 循环次数已知 利用循环次数控制 循环次数未知 利用关键字控制 利用“逻辑尺” 根据“逻辑尺”的内容,进行控制。,例:统计数据块的长度,入口条件:内部RAM 30H开始的存储区有若干个数据,最后一个数据为字符FFH,结果存入40H单元。 ORG 0100H MAIN:MOV R1,#30H;R1作为地址指针 CLRA;累加器A作为计数器 LOOP:CJNER1,#0FFH,NEXT;与数据FF比较,不等转移 SJMPJSH1;找

7、到结束符号,结束循环 NEXT:INC A;计数器加1 INCR1;指针加l SJMP L00P;循环 JSHl:INCA ;再加入l个字符 MOV40H,A;存结果 END,4.1.3 延时程序,10.1s延时程序(晶振为12M) ORG 0100H MOV R2,#200 LOOP: MOVR3,#250 DJNZR3,$ DJNZR2,LOOP RET 由于采用12M晶振,机器周期为1s,DJNZ的指令周期为2,整个程序的执行时间为25020021s100000s0.1s,21s延时程序(晶振为12M),ORG0100H MOVR1,#10 LOOP1:MOVR2,#200 LOOP:M

8、OV R3,#250 DJNZR3,$ DJNZR2,LOOP DJNZR1,LOOP1 RET,例: 50ms延时子程序。设晶振频率为12MHz,则机器周期为1us。,DEL: MOV R7,#200 ;1MC DEL1:MOV R6,#123 ;1MC NOP ;1MC DJNZ R6,$ ;2MC DJNZ R7,DEL1 ;2MC RET ;2MC,延时时间:t=1+200(1+1+2*123)+2+2 50000us=50ms,4.2 MCS-51常用子程序,4.2.1 代码转换类程序设计 4.2.2 查表程序设计 4.2.3 定点数运算子程序 4.2.4 浮点数运算子程序,子程序问

9、题,子程序设计时注意事项: 1. 给子程序赋一个名字。实际为入口地址代号。 2. 要能正确传递参数: 入口条件:子程序中要处理的数据如何给予。 出口条件:子程序处理结果如何存放。 (寄存器、存储器、堆栈方式) 3. 保护与恢复现场: 保护现场:压栈指令PUSH 恢复现场:弹出指令POP 4. 子程序可以嵌套,4.2.1 代码转换类程序设计,1单字节十六进制数转换成双字节ASCII码,表4-1 十六进制数与ASCII码之间的关系,入口条件:待转换的单字节十六进制数在寄存器R2中。 出口:高四位的ASCII码在A中,低四位的ASCII码在B中。,ORG0100H MOVA,R2 MOVB,A ;暂

10、存待转换的单字节十六进制数 LCALLMS1 ;转换低四位 XCHA,B;存放低四位的ASCII码 SWAPA ;准备转换高四位 LCALLMS1 ;转换高四位 SJMP$ MS1:ANLA,#0FH;将累加器的低四位转换成 ASCII 码 ADDA,#90H DA A ADDCA,#40H DA A RET,将多位十六进制数转换成ASCII码,设R0指向十六进制数低位, R2存放字节数,转换后R1指向ASCII码高位。,HTASC: MOV A,R0 ;取十六进制数 ANL A,#0FH ;取低四位 ADD A,#15 ;偏移修正 MOVC A,A+PC ;查表得ASCII码 MOV R1,

11、A ;保存 INC R1 MOV A,R0 ;取十六进制数高四位 SWAP A ; ANL A,#0F0H ADD A,#06H ;偏移修正 MOVC A,A+PC ;查表 MOV R1,A ;保存 INC R0 ;指向下一单元 INC R1 DJNZ R2,HTASC RET ASCTAB:DB 30H,31H,32H,33H,34H,35H,36H,37H DB 38H,39H,41H,42H,43H,44H,45H,46H,2.ASCII码转换成十六进制数,入口条件:待转换的 ASCII 码在R2中。 出口:转换后的十六进制数在R3中。 ORG 0100H MOV A,R2 SUBB A

12、,#30H CLR C JNB ACC.4,M1 SUBB A,#7 M1:MOV R3,A SJMP $ END,3.十六进制整数转换成单字节码整数,入口条件:待转换的单字节十六进制整数在R2中。 出口:转换后的码整数(十位和个位)在R5中,百位在R3中。 MOVA,R2 HBCD:MOVB,#100;分离出百位,存放在 R3中 DIVAB MOVR3,A MOVA,#10;余数继续分离十位和个位 XCHA,B DIVAB SWAPA ORLA,B ;将十位和个位拼装成码 MOVR5,A SJMP$ END,4双字节十六进制整数转换成双字节码整数,入口条件:待转换的双字节十六进制整数在R6、

13、R7中。出口:转换后的三字节码整数在R3、R4、R5中。 ORG0100HHB2:CLRA;码初始化 MOVR3,A MOVR4,A MOVR5,A MOV R2,#10H;转换双字节十六进制整数HB3:MOVA,R7 ;从高端移出待转换数的一位到 CY 中 RLCA MOV R7,A MOVA,R6 RLCA,MOVR6,A MOVA,R5;码带进位自身相加,相当于乘 ADDCA,R5 DAA ;十进制调整 MOVR5,A MOVA,R4 ADDC A,R4 DAA MOVR4,A MOVA,R3 ADDCA,R3 MOVR3,A;双字节十六进制数的万位数不超过,不用调整 DJNZR2,HB

14、3;判断16位处理完? SJMP$ END,5双字节码整数转换成双字节十六进制整数,入口条件:待转换的双字节码整数在R2、R3中。 出口:转换后的双字节十六进制整数仍在R2、R3中。 ORG 0100H BH2:MOV A,R3;将低字节转换成十六进制 LCALL BCD1 MOV R3,A MOV A,R2;将高字节转换成十六进制 LCALL BCD1 MOV B,#100;扩大一百倍 MUL AB ADD A,R3;和低字节按十六进制相加 MOV R3,A CLR A,ADDCA,B MOV R2,A SJMP $ BCD1:MOVB,#10H;分离十位和个位 DIV AB MOV R4,

15、B;暂存个位 MOV B,#10;将十位转换成十六进制 MUL AB ADDA,R4;十六进制加上个位 RET END,4.2.2 查表程序设计,MOVCA,A+DPTR MOVCA,A+PC 1查表求ASCII码 入口条件:R0低四位有一个十六进制数(0F)。 出口:将查表找出的相应ASCII码并送回R0中。,ORG0100H MOVA,R0 ANLA,#0FH;屏蔽高4位 ADDA,#03H;查表指令PC值与表格PC值相差3字节 MOVCA,A+PC;查表 MOVR0,A;存结果 SJMP$ ASCTAB:DB0,1,2,3,4,5,6,7 DB8,9,A,B,C,D,E,F,4.2.3 定点数运算子程序,1多字节码加法 入口条件:字节数在R7中,被加数在30H起始单元中,加数在40H起始单元中。 出口:和在30H起始单元中,最高位进位在CY中。 ORG 0100H MOV R7,#03H MOV R0,#30H MOV R1,#40H MOV A,R7 ;取字节数至 R2 中 MOV R2,A ADD A,R0;初始化数据指针,MOVR0,A MOV

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

最新文档


当前位置:首页 > 商业/管理/HR > 企业文档

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