




已阅读5页,还剩30页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第三章 单片机程序设计,3-1 程序设计简介 3-2 顺序程序的设计 3-3 分支程序的设计 3-4 循环程序的设计 3-5 常用子程序介绍 3-6 查表程序的设计,项目引入,1.项目描述 将09这十个数循环送P1口七段LED上显示 。 2.硬件电路与工作原理 让学生根据任务分析硬件要求,画出具体电路,并在实验开发板上接线 3.程序设计(给出控制程序),8051,START: ORG 0100H MAIN: MOV R0,#00H MOV DPTR,#TABLE DISP: MOV A,R0 MOVC A,A+ADPTR MOV P1,A ACALL DELAY INC R0 CJNE R0,#0AH,DISP AJMP MAIN,DELAY: MOV R1,#0FFH LOOP0: MOV R2,#0FFH LOOP1: DJNZ R2,LOOP1 DJNZ R1,LOOP0 RET TABLE:DB 0C0H,0F9H, DB 0A4H,0B0H DB 99H, 92H DB 82H, 0F8H DB 80H, 90H END,LED显示电路控制程序,单片机汇编语言程序设计的基本步骤如下: (1) 题意分析。熟悉并了解汇编语言指令的基本格式和主要特点,明确被控对象对软件的要求,设计出算法等。 (2) 画出程序流程图。编写较复杂的程序,画出程序流程图是十分必要的。程序流程图也称为程序框图,是根据控制流程设计的,它可以使程序清晰,结构合理,便于调试。 (3) 分配内存工作区及有关端口地址。分配内存工作区,要根据程序区、数据区、暂存区、堆栈区等预计所占空间大小,对片内外存储区进行合理分配并确定每个区域的首地址,便于编程使用。,3-1 程序设计简介,(4) 编制汇编源程序。 (5) 仿真、调试程序。 (6) 固化程序。 程序编写做到:占用存储空间少;运行时间短; 程序的编制、调试及排错所需时间短;结构清晰,易读、易于移植。,按结构化程序设计思想,任何复杂程序都可由 顺序结构、 分支结构、 循环结构等构成。,简单程序也就是顺序程序,它是最简单、最基本的程序结构,其特点是按指令的排列顺序一条条地执行,直到全部指令执行完毕为止。不管多么复杂的程序,总是由若干顺序程序段所组成的。本节通过实例介绍简单程序的设计方法。 例3.1 4字节(双字)加法。将内部RAM 30H开始的4个单元中存放的4字节十六进制数和内部RAM 40H单元开始的4个单元中存放的4字节十六进制数相加,结果存放到40H开始的单元中。,3-2 简单顺序程序的设计,(1) 题意分析。 题目的要求如图3.1所示。,图3.1 例3.1题意分析示意图,ORG 0000H LJMP MAIN MAIN: ORG 0080H MOV A,30H ADD A,40H MOV 40H,A ;最低字节加法并送结果 MOV A,31H ADDC A,41H MOV 41H,A ;第二字节加法并送结果,(2) 汇编语言源程序。 按照双字节加法的思路,实现4字节加法的源程序如下:,MOV A,32H ADDC A,42H MOV 42H,A ;第三字节加法并送结果 MOV A,33H ADDC A,43H MOV 43H,A ;第四字节加法并送结果,进位 SJMP $ ; 位在CY中 END,例3.2、设在外RAM的60H单元存有1个字节代码,要求将其分解成两个4位字段,高4位存入原单元的低4位,其低4位存入61H单元的低4位,且要求这两个单元的高4位均为0,试编制完整程序。,ORG 0000H LJMP MAIN ORG 0030H MAIN:MOV R0,#30H MOV R1,#40H MOV R7,#08H LOOP:MOV A,R0 MOV R1,A INC R0 INC R1 DJNZ R7,LOOP SJMP $,解: 核心指令 ANL ORG 1000H MODE:MOV R0,#60H MOVX A,R0 MOV B,A ANL A,#0F0H SWAP A MOVX R0,A MOV A,B ANL A,#0FH INC R0 MOVX R0,A SJMP $ END,一、分支结构与分支程序设计 结构:根据不同的条件,进行相应的处理。 通常用条件转移指令形成简单分支结构。 如: 判(A) = Z 或 NZ ,转移 判(CY)= 1 或 0 ,转移 判(bit)=1 或 0 ,转移 CJNE 比较不相等转移,3-3 分支程序的设计,例3.3、设a存放在累加器A中,b存放在寄存器B中,要求按下式 计算Y值,并将结果Y存于累加器A 中,试编写程序。 a-b (a0) Y = a+b (a 0),解:本题关键是判a是正数,还是负数;由ACC.7便知。 ORG 1000H BR: JB ACC.7,MINUS CLR C SUBB A,B SJMP DONE MINUS: ADD A,B DONE: SJMP END,分支程序实例 1两分支程序设计 例3.4 两个无符号数比较(两分支)。内部RAM的20H单元和30H单元各存放了一个8位无符号数,请比较这两个数的大小,比较结果显示在实验板上: 若(20H)(30H),则P1.0管脚连接的LED发光; 若(20H)(30H),则P1.1管脚连接的LED发光。 如何让LED发光?给该引脚送低电平即可。,(1) 题意分析。 本例是典型的分支程序,根据两个无符号数的比较结果(判断条件),程序可以选择两个流向之中的某一个,分别点亮相应的LED。 比较两个无符号数常用的方法是将两个数相减,然后判断有否借位CY。若CY=0,无借位,则XY;若CY=1,有借位,则XY。程序的流程图如图3.2所示。,图3.2 两数比较流程图,(2) 汇编语言源程序。 X DATA 20H ;数据地址赋值伪指令DATA Y DATA 30H ORG 0080H MOV A, X ;(X) A CLR C ;CY=0 SUBB A,Y ;带借位减法,A- (Y)-CYA JC L1 ;CY=1,转移到 L1 CLR P1.0 ;CY=0,(20H)(30H),点亮P1.0连接的LED SJMP FINISH ;直接跳转到结束等待 L1:CLR P1.1 ;(20H)(30H),点亮P1.1连接的LED FINISH: SJMP $,例3.5:内部RAM30H和31H中分别存有2个8位无符号数,编程找出其中的大数存入内部32H单元中。 ORG 0040H MOV A, 30H CLR C SUBB A,31H JC L1 ;CY=1,转移到 L1 ADD A,31H MOV 32H,A SJMP FINISH ;直接跳转到结束等待 L1:MOV A,31H MOV 32H,A FINISH: SJMP $,(3) 执行结果。 执行该程序之前,利用单片机开发系统先往内部RAM的20H和30H单元存放两个无符号数(可以任意设定),执行后观察点亮的LED是否和存放的数据大小相一致。 可以通过伟福仿真软件看到程序执行的结果。必须注意:要有初始值。,循环结构不但使程序简练,而且大大节省存储空间。 循环程序包含四部分: 、初始化部分 (循环计数器、地址指针初始化) 、循环处理部分(主体,需要重复执行的部分) 、循环控制部分(修改地址指针、修改变量、检测 循环结束条件) 、循环结束部分(对结果分析、处理,存放结果),3-4 循环程序的设计,先处理,后判断:,先判断,后处理:,循环有:单循环、多重循环。 循环次数已知,可用计数器控制循环次数; 循环次数未知,按问题条件控制循环是否结束。,1、单循环程序 (1)循环次数是已知的程序 例3.6、已知片内RAM的40H单元开始依次存放10个8位无符号二进制数,要求找出其中的最大数存入3FH单元中,试编程。 解:先将第一个数和第二个数比较,大者送入累加器A中,然后拿累加器中A的数与第三个数比较,依次比较下去。最后累加器A中剩下的是最大数。 比较大小用减法指令,注意恢复累加器A中的原来的大数。,START:MOV R2,#09H ;循环计数初值(循环次数已知) MOV R0,#40H ;地址指针初值 MOV A,R0 ;取数 LOOP:INC R0;调整地址指针 CLR C SUBB A,R0 JC NEXT1 ;CY1(后者大)转NEXT1 ADD A,R0;恢复A中的原来大数 SJMP NEXT2 NEXT1: MOV A,R0;大数送给A NEXT2: DJNZ R2,LOOP;控制循环次数 MOV 3FH,A SJMP $,P101页延时程序例子,延时50毫秒的子程序。 DEL:MOV R7,#200 DEL1:MOV R6,#123 NOP DEL2:DJNZ R6,DEL2;2001232us 49.2ms DJNZ R7,DEL1 RET,DEALY:MOV R7,#20 DEL3: MOV R6,#123 DEL2:MOV R5,#200 NOP DEL1:DJNZ R5,DEL1 DJNZ R6,DEL2 DJNZ R7,DEL3 RET,约为延时1秒子程序,START: MOV R2,#08H ;设置循环次数 MOV A,#0FEH ;从P1.0P1.7使LED逐 ;个亮过去 NEXT: MOV P1,A ;点亮LED LCALL DEALY RL A DJNZ R2,NEXT ;次数减1,不为零,继续 ;点亮下一个LED SJMP START DEALY:MOV R7,#20H,P1口循环点亮发光二极管程序,3-5 常用子程序介绍,步骤: 1、确定子程序名称,即入口标号。 2、确定子程序的输入/输出参数。 3、确定所用的寄存器和存储单元,以便现场保护。断点保护由指令自动完成。 4、确定子程序的算法,编写源程序。,例3.7:多字节BCD数加法。 子程序: ADDB: PUSH PSW PUSH ACC CLR C LOOP: MOV A, R0 ADDC A, R1 DA A MOV R0, A INC R0 INC R1 DJNZ R2, LOOP POP ACC POP PSW RET,4字节BCD数相加主程序: MOV R0, #20H MOV R1, #30H MOV R2, #04H LCALL ADDB,3-6 查表程序,1、查表用指令 MOVC A, A+DPTR MOVC A, A+PC,例3.8:用查表发求(09)的平方 MOV DPTR, #TAB M
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 四川省金堂中学2026届化学高一第一学期期中监测模拟试题含解析
- 医学信息技术在教育中的应用效果研究
- 糖尿病肾病一体化治疗
- 住房政策对城市空间结构的影响分析
- 虚拟桌面技术介绍
- 清洁生产审核汇报
- 十几减四退位减法竖式讲解
- 血管刺激性药物临床应用与管理
- 宁夏回族自治区银川市兴庆区宁一中2026届化学高三上期末经典试题含解析
- 2026届江苏如皋市江安镇中心初中高二化学第一学期期中学业水平测试试题含解析
- 人工智能训练师理论知识考试题库(浓缩500题)
- 乳制品配送服务质量保障方案
- 高血压防治指南解读课件
- 二手房买卖交易合同协议书
- 非营利组织战略管理机制的构建-以上海市青少年发展基金会为例的中期报告
- 脑梗死后遗症护理查房
- 北师大版初中数学八年级下册说课稿
- 档案整理及数字化服务方案
- 领导干部任前谈话记录表
- 助产士门诊临床实践专家共识的构建
- 中国特色社会主义思想概论 课件 第四章 坚持以人民为中心
评论
0/150
提交评论