版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1.5程序设计举例单片机汇编语言程序设计的基本步骤1.分析问题,明确被控对象对软件的要求2.确定算法3.设计程序流程图4.分配内存单元及有关端口地址5.编写汇编语言源程序6.调试程序7.固化程序主要的几种程序设计方法顺序程序:顺序程序是最简单、最基本的程序结构,其特点是按指令的排列顺序一条条地执行,直到全部指令执行完毕为止。分支程序:分支程序是通过转移指令对相应条件的判断实现改变程序的执行方向的设计方法。循环程序:在程序中需要反复的执行的程序段,为了避免在程序中多次的编写,可以通过利用条件转移或无条件转移指令来控制程序的执行。子程序:在编写程序时,经常有一些的程序会被频繁的使用。通常情况下,我们将这些程序段定义成子程序,使程序变的便于调试和阅读,同时也缩小了程序的长度。一、顺序程序设计将30H单元内的两位BCD码拆开并转换成ASCII码,存入31H、32H两个单元中。1、题意分析2、程序流程结束取数据低4位转换成ASCII码存ASCII码取数据高4位转换成ASCII码存ASCII码开始参考程序如下:
ORG 2000H MOV A,30H ;取值
ANL A,#0FH ;取低4位
ADD A,#30H ;转换成ASCII码
MOV 31H,A ;保存结果
MOV A,30H ;取值
SWAP A ;高4位与低4位互换
ANL A,#0FH ;取低4位(原来的高4位)
ADD A,#30H
;转换成ASCII码
MOV 32H,A
;保存结果
END二、分支程序设计分支程序有三种基本形式:单分支、双分支、多分支。单分支:双分支:条件成立?程序段下条指令NY程序段1条件成立?程序段2NY多分支:程序段2条件N=?程序段N-10N程序段1程序段N1N-1……分支程序的设计要点如下:(1)先建立可供条件转移指令测试的条件。(2)选用合适的条件转移指令。(3)在转移的目的地址处设定标号。双分支程序设计举例设X存在30H单元中,根据下式
X+2 X>0Y= 100 X=0∣X∣ X<0求出Y值,将Y值存入31H单元。1、题意分析:根据数据的符号位判别该数的正负,若最高位为0,再判别该数是否为0。2、程序流程 A为负数?Y取数,A←(30H)开始结束A=0?YNNA←|X|A←64HA←X+2存数,(31H)←A(30H)
参考程序如下:
ORG 1000H MOV A,30H ;取数
JB ACC.7,NEG;负数,转NEG JZ ZER0 ;为零,转ZER0 ADD A,#02H ;为正数,求X+2 AJMPSAVE ;转到SAVE,保存数据
ZER0:MOV A,#64H ;数据为零,Y=100 AJMPSAVE ;转到SAVE,保存数据
NEG: DEC A ;
CPL A ;求∣X∣ SAVE: MOV 31H,A ;保存数据
SJMP $ ;暂停
END多分支程序设计举例根据R0的值转向7个分支程序。R0<10,转向SUB0;R0<20,转向SUB1;
|R0<60,转向SUB5;R0>=60,转向SUB6;1、题意分析:利用JMP@A+DPTR指令直接给PC赋值,使程序实现转移。2、程序流程。K=?转SUB0转SUB1转SUB6K=0K=1……K=6开始参考程序如下:
ORG2000H MOVDPTR,#TAB;转移指令表首地址
MOVA,R0 ;取数
MOV B,#10 DIV AB ;A/10,商在A中
CLR C RLCA ;A←2A JMP@A+DPTR ;PC←A+DPTRTAB: AJMP SUB0 ;转移指令表
AJMPSUB1 AJMP SUB2 …… AJMPSUB5 AJMP SUB6 …… 三、循环程序设计☆循环程序一般包括如下四个部分:(1)初始化(2)循环体(3)循环控制(4)结束☆循环程序按结构形式,有单重循环与多重循环。☆在多重循环中,只允许外重循环嵌套内重循环。☆不允许循环相互交叉,也不允许从循环程序的外部跳入循环程序的内部(a)当型循环结构(b)直到型循环结构循环结束?循环体YN初始化修改循环参数结束部分开始结束循环结束?循环体Y初始化修改循环参数结束部分开始N结束有一数据块从片内RAM的30H单元开始存入,设数据块长度为10个单元。根据下式:
X+2X>0Y=100X=0求出Y值,并将Y值放回原处。∣X∣X<01、题意分析:设置一个计数器控制循环次数,每处理完一个数据,计数器减12、程序流程A=0?YYNNYNA为负数?取数,A←((R1))开始结束A←∣X∣A←64HA←X+2存数,((R1))←A(30H)设置地址指针R1、计数器R0初值R1←R1+1;R0←R0-1R0=0?参考源程序如下:
ORG 2000H MOV R0,#10 MOV R1,#30H START: MOV A,@R1 ;取数
JB ACC.7,NEG;若为负数,转NEG JZ ZER0 ;若为零,转ZER0 ADD A,#02H ;若为正数,求X+2 AJMP SAVE ;转到SAVE,保存数据
ZER0: MOV A,#64H ;数据为零,Y=100 AJMP SAVE ;转到SAVE,保存数据
NEG: DEC A CPL A ;求∣X∣ SAVE: MOV @R1,A ;保存数据
INC R1 ;地址指针指向下一个地址
DJNZ R0,START ;未处理完,继续处理
SJMP $ ;暂停
END单重循环延时例:假设单片机的fosc=12MHz,计算单片机执行下面程序消耗的时间。DELAY:MOVR5,#TIME;1机器周期MM:NOP;1机器周期
DJNZR5,MM;2机器周期
RET;2机器周期执行完以上4条语句,所花时间:T=(1+(1+2)×TIME+2)×1s推广计算式:T(机器周期数)=(循环体机器周期数)×循环次数+初始化机器周期数多重循环延时例:假设单片机的fosc=12MHz,计算单片机执行下面程序消耗的时间。DELAY2:MOVR3,#TIME1;1机器周期LOOP1:MOVR2,#TIME2;1机器周期LOOP2:NOP;1机器周期
DJNZR2,LOOP2;2机器周期
DJNZR3,LOOP1;2机器周期
RET;2机器周期执行完以上6条语句,所花时间:
T=(1+(1+(1+2)×TIME2+2)×TIME1+2)×1s四、子程序设计在编写子程序时,应注意以下几点:子程序的第一条指令地址为子程序的入口地址。主程序调用子程序利用指令LCALL、ACALL指令进行,返回使用RET。在子程序的内部有转移指令时,最好使用相对转移指令。在使用子程序时,要注意现场的保护,在退出时要恢复现场。2)子程序参数传递 在调用子程序时,经常要进行参数的传递,常用的方法有以下几种:利用工作寄存器或累加器进行传递。利用可间接寻址的寄存器进行传递。使用堆栈进行参数传递。有一数据块从片内RAM的30H单元开始存入,设数据块长度为10个单元。根据下式:
X+2X>0Y=100X=0求出Y值,并将Y值放回原处。∣X∣X<0题意分析:数据块中的十个数都需要进行符号判断并作相应处理,可把一部分工作交给子程序完成,主程序只负责读取数据、调用判断处理子程序、保存数据、循环控制工作。源程序如下:
ORG 0000H MOV R0,#10 MOV R1,#30H START: MOV A,@R1 ;取数
ACALL DISPOSE ;调用判断、处理子程序
SAVE: MOV @R1,A ;保存数据
INC R1 ;修改地址指针,指向下一个地址
DJNZ R0,START ;数据未处理完,继续处理
SJMP $ ;暂停
ORG 0200H DISPOSE: JB ACC.7,NEG ;若为负数,转NEG JZ ZER0 ;若为零,转ZER0 ADD A,#02H ;若为正数,求X+2 AJMP BACK ;转到SAVE,保存数据
ZER0: MOV A,#64H ;数据为零,Y=100 AJMP BACK ;转到SAVE,保存数据
NEG: DEC A CPL A ;求∣X∣ BACK: RET END五、查表程序设计程序使用的专用指令:
MOVCA,@A+PC
MOVCA,@A+DPTR一般情况下,常使用后者程序设计一般规则:先确定表格存放的位置在表格中填入相应的数据查表时先将表格的首地址给DPTR,再将要查表的数据送给A,最后用
MOVCA,@A+DPTR例:假如在内部RAM的30H单元中存放有一个BCD编码的十进制数,查出其共阴7段显示代码,并送到外部RAM的CFA0H单元中。题意分析:先建立一个相应的数值表格,定义在程序存储器中,利用输入的值进行查表。源程序如下:
……
MOVDPTR,#0050H
MOVA,30H
MOVCA,@A+DPTR
MOVDPTR,#0CFA0H
MOVX@DPTR,A
……
ORG0050H
DB3FH;0的7段共阴显示代码
DB06H;1的7段共阴显示代码
DB
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 手工泥巴制作课程设计
- 室外景观设计师的植物配置与环境打造
- 保健品行业话务员工作总结
- 2025年中考物理一轮复习之物态变化
- 超市行业客服工作总结周到服务增添购物乐趣
- 化妆护肤行业销售工作总结
- 餐饮服务员工作总结热情招待细心服务顾客
- 【八年级下册地理湘教版】专项02 港、澳、台的经济发展
- 2024年热闹的元宵节教案
- 2024年石家庄理工职业学院单招职业技能测试题库标准卷
- 美容院2024年度规划
- 装饰装修巡查记录表
- 2024高考物理一轮复习:观察电容器的充、放电现象(练习)(学生版+解析)
- 公司安全生产事故隐患内部报告奖励工作制度
- 2024年度内蒙古自治区国家电网招聘之电工类综合练习试卷A卷附答案
- 艾滋病预防知识讲座
- 零售服务质量提升
- 《4 平平安安回家来》 说课稿-2024-2025学年道德与法治一年级上册统编版
- 2024中考英语真题分类汇编-代词
- 第九版内科学配套课件-8-骨髓增生异常综合征(MDS)
- 新闻宣传报道先进单位(集体)申报材料
评论
0/150
提交评论