第四章 单片机流程控制
MCS51单片机第4章
功能:将赋值项n的值赋予字符名称x。程序中凡出现该字符名 称x就等同于该赋值项n,其值在整个程序中有效。赋值项n可 以是常数、地址、标号或表达式。在使用时,必须先赋值后使 用。
“字符名称”与“标号”的区别是“字符名称”后无冒 号,而“标号”后面有冒号。
(4)定义字节伪指令DB 格式:[标号:] DB x1, x2,„, xn
(4)循环体是循环程序中重复执行的部分,应仔细推敲,合理安 排,应从改进算法、选择合适的指令入手对其进行优化,以达到 缩短程序执行时间的目的。
查表程序设计
查表:根据存放在ROM中数据表格的项数来查找 与它对应的表中值。
适用场合:主要应用于数码显示、打印字符的转 换、数据转换等场合。
查表程序设计 1. 采用 MOVC A, @A+DPTR 指令查表程序的设计方法
(1)建立相应的函数(设自变量为X)。 (2)计算出这个表中所有的函数值Y。将这群函数值按顺 序存放在起始(基)地址为TABLE的程序存储器中。 (3)将表格首地址TABLE送入DPTR,X送入A,采用查表指 令MOVC A, @A+DPTR完成查表,就可以得到与X相对应的Y 值于累加器A中。
解:每次求和的过程相同, 可以用循环程序实现。16 个二进制无符号数求和, 循环程序的循环次数应为1 6次(存放在R2中),它们 的和放在R4, R5中(R4存 高8位,R5存低8位)。程 序流程图如右图所示。
程序如下:
START: ORG 1000H MOV R0, #30H MOV R2, #10H MOV R4, #00H MOV R5, #00H MOV A, R5 ADD A, @R0 MOV R5, A CLR A ADDC A, R4 MOV R4, A INC R0 DJNZ R2, LOOP SJMP $ END
单片机顺序控制课程设计
单片机顺序控制课程设计一、课程目标知识目标:1. 学生能理解单片机的基本原理和功能,掌握顺序控制的基本概念。
2. 学生能掌握单片机编程中的顺序控制指令,并应用于实际电路中。
3. 学生能解释并分析单片机顺序控制在实际应用中的工作原理。
技能目标:1. 学生能运用所学知识,设计并编写简单的单片机顺序控制程序。
2. 学生能对设计的顺序控制系统进行调试和故障排查,提高解决问题的能力。
3. 学生能通过实际操作,提升动手实践能力和团队协作能力。
情感态度价值观目标:1. 学生能培养对单片机及编程的兴趣,激发学习的积极性和主动性。
2. 学生在学习过程中,养成严谨、细心的态度,提高自我管理和约束能力。
3. 学生通过团队协作,培养沟通、交流和合作意识,增强集体荣誉感。
课程性质:本课程为实践性较强的课程,结合理论知识与实际操作,培养学生动手实践能力和创新能力。
学生特点:学生具备一定的单片机基础知识,具有较强的学习兴趣和动手欲望,希望通过实际操作提高自己的技能。
教学要求:教师需采用任务驱动法、案例教学法等教学方法,引导学生主动探究、积极实践,注重培养学生的创新意识和实际操作能力。
同时,关注学生的个体差异,因材施教,使每位学生都能在课程中取得进步。
通过分解课程目标为具体的学习成果,便于教学设计和评估的实施。
二、教学内容1. 单片机基础回顾:主要包括单片机的组成、工作原理和功能特点,重点复习单片机的内部结构及寄存器的作用。
2. 顺序控制原理:介绍顺序控制的概念、分类及其在单片机系统中的应用,分析顺序控制程序的编写方法。
3. 编程指令学习:学习单片机顺序控制相关指令,如跳转、循环等,并掌握其在编程中的应用。
4. 实践操作:设计简单的顺序控制程序,如流水灯、温度控制器等,让学生动手实践,提高编程和调试能力。
5. 故障分析与排查:分析在实际操作中可能出现的故障,教授学生如何进行排查和解决。
6. 案例分析与讨论:引入实际应用案例,让学生分组讨论,分析顺序控制在案例中的作用和实现方法。
单片机控制系统的开发流程
单片机控制系统的开发流程一、引言单片机控制系统是一种应用广泛的嵌入式系统,具有体积小、功耗低、成本低等优点。
开发单片机控制系统需要经过一系列的步骤和流程。
本文将详细介绍单片机控制系统的开发流程。
二、需求分析在开发单片机控制系统之前,我们首先需要明确系统的需求。
需求分析是整个开发流程的关键步骤,它包括对系统功能、性能、接口、可靠性等方面进行详细的分析和定义。
在需求分析阶段,我们需要与用户充分沟通,确保对系统需求的准确理解。
三、系统设计在需求分析的基础上,我们进行系统设计。
系统设计是将需求分解为模块和功能的过程。
在单片机控制系统的设计中,需要确定硬件平台、选择合适的单片机型号、设计电路原理图、选择合适的外设等。
同时,还需进行软件设计,包括编写程序流程图、确定算法等。
四、硬件开发硬件开发是指根据设计要求,进行电路板的布线和焊接工作。
在硬件开发阶段,我们需要绘制电路板布线图,选择合适的元器件,并进行电路板的制作。
在制作过程中需要注意电路板的布线规范和焊接质量,确保电路的稳定性和可靠性。
五、软件开发软件开发是单片机控制系统开发的重要环节,它包括编写程序、调试、测试和优化等步骤。
在软件开发中,我们可以使用编程语言如C语言、汇编语言等来编写程序。
程序的编写需要根据系统设计的要求,实现相应的功能。
在编写过程中,需要进行调试和测试,确保程序的正确性和稳定性。
同时,还需要进行性能优化,提高系统的运行效率。
六、系统集成系统集成是将硬件和软件组合在一起,形成完整的单片机控制系统的过程。
在系统集成中,我们需要将编写好的程序下载到单片机中,与硬件平台进行连接,进行功能测试和调试。
在测试过程中,需要验证系统的功能是否符合需求,是否稳定可靠。
七、系统调试和优化在系统集成之后,我们需要进行系统的调试和优化。
在调试过程中,需要排除硬件和软件方面的问题,确保系统的正常运行。
同时,还可以对系统进行优化,提高系统的性能和可靠性。
八、系统验收和发布在系统调试和优化完成后,我们进行系统的验收。
4 第四章 C51流程控制语句精品资料
else if (score>=70) printf(“Your result is an C\n”);
else if (score>=60) printf(“Your result is an D\n”);
{ 局部变量定义; 语句1; 语句2;
} 复合语句在执行时,其中的各条单语句按顺序依次执行,整个复 合语句在语法上等价于一条单语句,因此在C51中可以将复合语句视为 一条单语句。通常复合语句出现在函数中,实际上,函数的执行部分 (即函数体)就是一个复合语句;复合语句中的单语句一般是可执行 语句,此外还可以是变量的定义语句(说明变量的数据类型)。在复 合语句内部语句所定义的变量,称为该复合语句中的局部变量,它仅 在当前这个复合语句中有效。利用复合语句将多条单语句组合在—起, 以及在复合语句中进行局部变量定义是C51语言的一个重要特征。
(4)case语句和default语句的出现次序对执行过程没有影响。 (5)每个case语句后面可以有“break”,也可以没有。有break语句, 执行到break则退出switch结构,若没有,则会顺次执行后面的语句,直 到遇到break或结束。 (6)每一个case语句后面可以带一个语句,也可以带多个语句,还可 以不带。语句可以用花括号括起,也可以不括。
TH1=0xF3;
TR1=1; for (i=1;i<=100;i++) s=s+i; //累加1~100之和在s中 printf(“1+2+3……+100=%d\n”,s);
成立 语句A
条件P
不成 立 语句B
第4章 MCS-51单片机汇编语言程序设计
程序清单:
送转移地址序号
A,R3 ;取序号 A ;序号乘2 DPTR, #JTAB ;32个子程序 首地址送DPTR JMP @A+DPTR ;根据序号转移 JTAB: AJMP ROUT00 ;32个子程序首地址 AJMP ROUT01 … MP: MOV RL MOV AJMP ROUT31
第 四 章 MCS-51 单 片 机 汇 编 语 言 程 序 设 计
【例4-1】
双字节二进制数求补。
程序说明:对R3(高8位)、R2(低8位)中的二进制定 点数取反加1即可得到其补码。
开始
程序清单:
BINPL:MOV A,R2 CPL A ADD A,#01H MOV R2,A MOV A,R3 CPL A ADDC A,#00H MOV R3,A RET ;低位字节取反 ;加1 ;低位字节补码送R2 ;高位字节取反 ;加进位 ;高位字节补码送R3
散转生成正确偏移号
置换指令地址表首址
转入R3指示的程序
AJMP
……
AJMP
第 四 章 MCS-51 单 片 机 汇 编 语 言 程 序 设 计
3.循环程序
包括:循环初始化、循环处理、循环控制
开始 置初值 循环体 循环结束? Y 循环修改 N 循环体 循环结束? N Y 结束 循环修改 结束 开始 置初值
;调用查表子程序 ; 暂存R1中 ;调查表子程序 ;平方和存A中 ;等待
取第一个数→A 调查表子程序 结果存入R1 取下一个数→A 调查表子程序 两数平方相加 存结果
子程序清单:
SQR: INC A ;加RET占的一个字节 MOVC A,@A+PC ;查平方表 RET TAB: DB 0,1,4,9,16 DB 25,36,49,64,81 END
第四章 流程控制 单片机C
第四章 Cx51的流程控制C语言是结构化编程语言,结构化语句有若干模块组成,每个模块中包含着若干个基本结构,每个基本结果中可以又若干调语句。
归纳起来,C语言又三种基本结构:1)顺序结构;2)选择结构;3)循环结构。
一、选择控制语句C51 的选择语句主要有if 语句和switch/case 语句。
1、 if 语句1)基本结构if(表达式) {语句}表达式为真执行花括号中的语句,否则跳过花括号中的语句。
如果没有花括号,执行紧随其后的一句。
2)C51 提供三种形式的if 语句:① if(表达式){语句;}② if(表达式){语句1;} else {语句2;}③ if(表达式1){语句1;}else if(表达式2){语句2;}else if(表达式3){语句3;}此外,如果一个if 语句中又含有一个或多个if 语句,则称为if 语句嵌套。
在if 语句嵌套中应注意if 与else 的对应关系,else 总是与它前面最近的一个if 语句相对应。
例1:某浮点数的范围在0.000~9999 之间,试编写一个函数返回浮点数的小数点位置。
根据小数点的位置,即可在实际的单片机系统中显示出小数。
解:此题的基本思路是根据浮点数的4 种取值范围给出4 种不同的返回值,可以约定当定浮点数的大小在0.000~9.999、10.00~99.99、100.0~999.9、1000~9999 之间时,分别返回0、1、2 和3。
参考程序如下:int ftochar(float valp){int dotno=0;if(valp<10.0) dotno=0;else if((valp>=10.0)&&(valp<100.0)) dotno=1;else if((valp>=100.0)&&(valp<1000.0))dotno=2;else if(valp>=1000.0) dotno=3;return dotno;}//代码长度298也可以这样编:int ftochar(float valp) {int dotno=0;if(valp>=10.0) dotno=1; if(valp>=100.0) dotno=2; if(valp>=1000.0) dotno=3; return dotno;}//代码长度227自己体会编程技巧(IF语句选择,if2)例2:if(P1_1!=0) {P1_1=0;}//中断取反等例3:if(P1&0xf0)!=0xf0) {……}//检查P1高4位中是否有02、 switch/case 语句switch/case 是C51 的多分支选择语句,它的一般形式如下:switch(表达式){case 常量表达式1:语句1; break;case 常量表达式2:语句2; break;⋯⋯case 常量表达式n:语句n; break;default :语句n+1;}switch 括号中的表达式的值与某一case 后面的常量表达式的值相同时,就执行它后面的语句(可以是复合语句),遇到break 语句则退出switch 语句。
第四章 程序流程控制
第四章 程序流程控制 支持两层块循环 一层循环(外循环):BRC0, RSA0, REA0; 二层循环(内循环): BRC1, RSA1, REA1,BRS1;
内循环完成后跳到外循环执行。如果再次进入内循环, 则不需要初始化BRC1,块重复备份寄存器(BRS1) 自动保存内循环块的重复次数。 任何一个块循环内都可以嵌套单指令重复。所以 C55x可以支持三层指令循环。
IVPH: 主机中断向量指针,16位,指向指向256字节的中断向量表 (包括向量:IV16~ IV23)这些中断向量供DSP和主机共 享使用。 INTM: 在状态寄存器ST1_55中的INTM,中断模式位,INTM=1, 禁止所有可屏蔽中断。
5509DSP中的中断
DSP的硬件复位:使这两个指针都指向FFFFh,即指向 0xFFFF00的地址,软件复位对这两个指针没有影响。 一般在程序初始化时设定中断矢量指针的值,防止取非法指令 代码,在修改中断矢量指针(IVPD,IVPH)前应当确定:
什么是中断
5509DSP中的中断
(1)由硬件或软件信号产生的,它使DSP暂停当前程 序转而去执行中断服务程序(ISR),从而可以实时的 进行事件处理。 (2) TMS320C5509支持32个ISR,有的即可以用软 件触发也可以由硬件触发,有的只能由软件触发。 软件中断:由程序指令产生,如:INTR、TRAP、 RESET 硬件中断:由设备的信号产生,可以是外部引脚信 号(外部中断),也可以是片内外设信号(内部中断)。
IFR0和IER0寄存器
第四章 程序流程控制
二、指令重复 指令重复:指重复执行一定次数的一条或者一段指令。包括无条 件单指令重复,有条件单指令重复,块重复三种形式。 1、无条件单指令重复:
单片机 第四章 80C51单片机汇编语言程序设计
(1)绝对调用指令:ACALL addr11 (2)长调用指令:LCALL addr16
(后续)
4.2.4 子程序设计
3.注意设置堆栈指针和现场保护 4.最后一条指令必须是RET指令 5.子程序可以嵌套,即子程序可以调用子程序
(接上)
6.在子程序调用时,还要注意参数传递的问题
子程序的基本结构
MAIN: ┇ ;MAIN为主程序或调用程序标号 ┇ LCALL SUB ;调用子程序 ┇ SUB:PUSH PSW PUSH ACC ;现场保护 ;
过程B
是 出口 (c) 循环结构
出口 (b) 分支结构
4.2.1
顺序程序结构
是汇编语言程序的最简单也是最基本的程序结 构。程序执行时一条接一条地按顺序执行指令, 无分支、循环以及调用子程序。 ORG 0000H LJMP MAIN ORG 0030H MAIN: MOV A , #30H ADD A , #58H MOV 30H , A SJMP $
二、定时程序 (2)多重循环定时程序(单片机频率为6MHz) 例 MOV R5,#TIME1 LOOP2: MOV R4,#TIME2 ;单周期指令 LOOP1: NOP ;单周期指令 NOP DJNZ R4,LOOP1 ;双周期指令 DJNZ R5,LOOP2 ;双周期指令 RET 公式: 循环体时间=(TIME2*4+2+1)*TIME1*2µs 总时间=循环体时间+4µs
机器编辑->交叉汇编->串行传送
(过程图见教材92页)
单片机的开发过程
设计硬件 软件编程 软件仿真调试 源代码烧入单片机 插入单片机脱机工作 模数电路/单片机硬件 MCS51汇编语言/C
计算机/MEDWIN环境
第4章 流程控制.ppt
4.1 C++语言的语句和程序结构
C++语句
?
控制语句
if () ~ else ~, switch
for () ~
while () ~ do ~ while() continue,break goto return
if (x>y) z=x;
else z=y;
函数调用 由一次函数调用加
语句
一个分号构成一个 语句。
4.2 选择结构语句
c) if … else if语句
if(表达式1) 语句1;
else if(表达式2) 语句2; else if(表达式3) 语句3; else 语句4;
注意缩排:语句相对于 上一个语句退后若干个 字符位置的书写方法。
缩排的目的就是为了使 源程序的层次清晰明了, 增加源程序的可读性。
输入a,b,c
是三角形吗?
Y
N
p (a+b+c)/2
输出“非
ssqrt(p*(p-a)*(p- 三角形!”
b)*(p-c))
输出s
3 4 5 s= 6
3 4 8 Not a triangle!
4.2 选择结构语句
2. 条件运算符
格式:<表达式1>?<表达式2>:<表达式3> 功能:先求出表达式1的值,若其值不等于0时, 则求出表达式2的值,否则求出表达式3的值。所以作 为运算的结果,或为表达式2,或为表达式3 例: a>=b?a:b; 等同于条件语句:
4.2 选择结构语句
#include <iostream.h> void main() { int c,s;
单片机课程设计单片机实现的顺序控制
单片机课程设计单片机实现的顺序控制在现代电子技术领域中,单片机的应用越来越广泛。
顺序控制作为一种常见的控制方式,在工业生产、自动化设备等方面发挥着重要作用。
本次单片机课程设计旨在通过单片机实现顺序控制,深入理解单片机的工作原理和编程方法。
一、单片机简介单片机是一种集成了 CPU、存储器、输入输出接口等功能于一体的微型计算机系统。
它具有体积小、功耗低、性能可靠等优点,广泛应用于各种智能化控制领域。
常见的单片机有 51 系列、STM32 系列等。
在本次课程设计中,我们选用了 51 系列单片机作为控制核心。
51 单片机采用哈佛结构,拥有丰富的指令集和较高的处理速度,能够满足我们对顺序控制的需求。
二、顺序控制的概念顺序控制是指按照预先设定的顺序,依次执行一系列操作或控制动作。
在工业生产中,例如流水线作业、自动化装配等过程,都需要采用顺序控制来确保生产的高效和稳定。
顺序控制通常可以通过逻辑电路、可编程控制器(PLC)或单片机等实现。
与逻辑电路相比,单片机具有编程灵活、功能强大的优势;与 PLC 相比,单片机成本更低,更适合小型控制系统。
三、系统设计要求本次课程设计的顺序控制系统需要实现以下功能:1、控制一组 LED 灯按照特定的顺序点亮和熄灭。
2、每个 LED 灯的点亮和熄灭时间可以通过编程设定。
3、系统具有手动和自动两种工作模式,手动模式下可以通过按键单独控制每个 LED 灯的状态,自动模式下按照预设的顺序自动运行。
四、硬件设计1、单片机最小系统包括单片机芯片、晶振电路和复位电路。
晶振电路为单片机提供时钟信号,复位电路用于系统初始化。
2、 LED 显示电路使用多个 LED 灯作为显示元件,通过单片机的 I/O 口进行控制。
为了保护单片机的 I/O 口,通常需要在 LED 灯与 I/O 口之间串联限流电阻。
3、按键输入电路设置手动模式下的按键,用于单独控制 LED 灯的状态。
按键通过上拉电阻连接到单片机的 I/O 口,当按键按下时,对应的 I/O 口电平发生变化。
第四章 C51语法简介
表4-4 Keil C51编译器所能识别的存储器类型 编译器所能识别的存储器类型
存贮类 型 data 长度(byte) 长度 1 值域范围 0~255 ~ 与存贮空间的对应关系 直接寻址的片内数据存储器( 字节), 直接寻址的片内数据存储器(128字节), 字节 访问速度最快 可位寻址的片内RAM(20H~2FH,共16字 , 可位寻址的片内 字 节), , 允许位与字节混合访问 1 1 2 2 0~255 0~255 0~65535 0~65535 间接访问的片内RAM(256字节), ( 字节), 间接访问的片内 字节 允许访问全部片内地址 分页寻址的片外RAM(256字节 , ( 字节), 分页寻址的片外 字节 用MOVX @Ri指令访问 指令访问 片外RAM(64K字节 , 字节), 片外 字节 用MOVX @DPTR指令访问 指令访问 ROM(64K字节), ( 字节), 字节 用MOVC @A+DPTR指令访问 指令访问
bdata
idata pdata xdata code
存储器模式SMALL、COMPACT或LARGE来规定默认存储器类型, 确定变量的存储器空间
中直接对51单片机的 第四节 C51中直接对 单片机的 中直接对 单片机的SFR 的定义
sfr 特殊功能寄存器名 = 地址常数; 地址常数; 例如: 定义I/O口 其地址为 其地址为0x80 例如: sfr P0 = 0x80 ;//定义 口P0,其地址为 定义
关键字bit和 第七节 关键字 和sbit区别 区别 单片机外扩I/O的访问 第八节 51单片机外扩 的访问 单片机外扩 第九节 函数的递归调用与再入函数 第十节 中断服务函数与寄存器组定义 第十一节 C51的运算符和表达式 的运算符和表达式 第十二节 C51流程控制语句 流程控制语句 第十三节 C51的指针类型 的指针类型
教学课件:第四章-C51流程控制语句
用于控制程序的执行流程,使其跳 转到指定的代码位置。C51中的跳 转语句包括break语句、continue 语句和return语句。
03
条件语句
if语句
条件判断的关键字
if语句是C51中用于条件判断的关键字,它允许程序根据某个条件的结果来决定 是否执行一段代码。if语句通常以if关键字开始,后面跟着一对圆括号,用于包含 条件表达式,最后是一个代码块,只有在条件表达式的结果为真时才会执行。
三元运算符
一行内的条件表达式
VS
三元运算符是C51中用于在一行内编 写条件表达式的一种简写方式。它的 语法格式为“条件 ? 表达式1 : 表达 式2”,其中条件是一个布尔表达式, 如果条件为真,则整个表达式的值为 表达式1的值,否则为表达式2的值。 这种运算符可以用于简化if-else语句 的写法,使代码更加简洁明了。
04
循环语句
while循环
条件判断在先,执行循环体在后
while循环首先判断给定的条件是否为真,如果为真,则执行循环体内的语句;执行完毕后再次判断 条件,如此往复,直到条件不再满足为止。
do-while循环
执行循环体在先,条件判断在后
do-while循环先执行一次循环体内的语句,然后再判断给定 的条件是否为真,如果为真,则再次执行循环体内的语句; 如此往复,直到条件不再满足为止。
教学课件:第四章-C51流 程控制语句
• 引言 • C51流程控制语句概述 • 条件语句 • 循环语句 • 跳转语句 • 综合实例
01
引言
课程介绍
01
本章是C51单片机编程的重要章 节,主要介绍C51单片机的流程 控制语句。
02
通过学习本章,学生将掌握如何 使用C51单片机的流程控制语句 来实现程序的逻辑控制。
第4章单片机汇编语言程序设计
Y A=0? N A>0? N A←-1 Y N A←X
Y
A=0? N R1←-1
A←1
A>0? Y R1←1 存数
存数
2012-6-5 电气与自动化学院 18
第四章汇编语言程序设计
§2 MCS-51单片机汇编语言设计 2、分支程序设计
程序:
ORG 2000H VAR DATA 40H FUN DATA 41H START:MOV A,VAR JZ SAVE JNB ACC.7,ZHENG MOV A,#0FFH SJMP SAVE ZHENG:MOV A,#01H SAVE: MOV FUN,A SJMP $ END
第四章汇编语言程序设计 第四章汇编语言程序设计 本章重点: §4.1 汇编语言程序设计基础
4.1.3 伪指令
§4.2 MCS-51汇编语言程序设计
4.2.1 顺序结构程序设计 4.2.2分支结构程序设计 4.2.3循环结构程序设计 4.2.4查表程序设计 4.2.5 子程序设计
§习题分析及解答
第四章汇编语言程序设计 4.1.3 伪指令
2012-6-5 电气与自动化学院 9
第四章汇编语言程序设计
§2 MCS-51单片机汇编语言设计 1、顺序结构程序设计
2012-6-5
例4-3:将两个三字节无符号数相加,其中一个加数在内部RAM的 32H、31H和30H单元;另一个加数在内部RAM的35H、34H和33H单 元,要求相加后的和存入32H、31H和30H单元,进位存入位寻址区 的20H单元中 程序: ORG 2000H CLR C MOV @R0,A MOV R0,#32H MOV R1,#35H DEC R0 MOV A,@R0 DEC R1 ADD A,@R1 MOV A,@R0 MOV @R0,A ADDC A,@R1 DEC R0 MOV @R0,A DEC R1 MOV A,@R0 MOV 20H,C ADDC A,@R1 SJMP $ END
单片机控制工作流程
单片机控制工作流程下载温馨提示:该文档是我店铺精心编制而成,希望大家下载以后,能够帮助大家解决实际的问题。
文档下载后可定制随意修改,请根据实际需要进行相应的调整和使用,谢谢!并且,本店铺为大家提供各种各样类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,如想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by theeditor. I hope that after you download them,they can help yousolve practical problems. The document can be customized andmodified after downloading,please adjust and use it according toactual needs, thank you!In addition, our shop provides you with various types ofpractical materials,such as educational essays, diaryappreciation,sentence excerpts,ancient poems,classic articles,topic composition,work summary,word parsing,copy excerpts,other materials and so on,want to know different data formats andwriting methods,please pay attention!1. 系统初始化:单片机上电后,进行系统初始化操作。
这包括设置时钟、初始化端口、配置中断等。
8-9单片机技术基础第四章.
DS 定义存储空间命令
格式:DS 表达式 功能:在汇编时,从指定地址开始保留DS之后表达式
的值所规定的存储单元以备后用。
例如:
ORG 1000H DS 08H DB 30H,8AH 汇编后,从1000H保留8个单元,然后从1008H按DB命 令给内存赋值,即(1008H)=30H (1009H)=8AH
例: 三字节无符号数相加,其中被加数在内部RAM的50H、 51H和52H单元中;加数在内部RAM的53H、54H和55H单 元中;要求把相加之和存放在50H、51H和52H单元中,进 位存放在位寻址区的00H 位中。
50H 51H 52H
53H 54H 55H
高字节
低字节 + 高字节
低字节 R1→ 55H
54H
00H 50H 51H 52H CY
53H R0→ 52H
51H
50H
20H
内部RAM
低字节 中字节
2019/8/19
南京航空航天大学金城学院
17
4.2.1 源程序编辑
在微型计算机上,借助编辑软件,编 写或修改汇编语言源程序。如行编辑 或屏幕编辑软件。
2019/8/19
南京航空航天大学金城学院
18
4.2.2 源程序的汇编
汇编:将汇编语言源程序转换为机器码表 示的目标程序的过程。对单片机有: 一、手工汇编 二、机器汇编 三、反汇编
ORG 2000H START:MOV A,#64H
┇ 规定了START的地址是2000H,又规定了汇编后的第一条
指令码从2000H开始存放。
END 汇编结束指令
格式:END 功能:通知汇编程序结束汇编。在END之
后所有的汇编指令均不予以处理。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第四章 Cx51的流程控制C语言是结构化编程语言,结构化语句有若干模块组成,每个模块中包含着若干个基本结构,每个基本结果中可以又若干调语句。
归纳起来,C语言又三种基本结构:1)顺序结构;2)选择结构;3)循环结构。
一、选择控制语句C51 的选择语句主要有if 语句和switch/case 语句。
1、 if 语句1)基本结构 if(表达式) {语句}表达式为真执行花括号中的语句,否则跳过花括号中的语句。
如果没有花括号,执行紧随其后的一句。
2)C51 提供三种形式的if 语句:① if(表达式){语句;}② if(表达式){语句1;} else {语句2;}③ if(表达式1){语句1;}else if(表达式2){语句2;}else if(表达式3){语句3;}此外,如果一个if 语句中又含有一个或多个if 语句,则称为if 语句嵌套。
在if 语句嵌套中应注意if 与else 的对应关系,else 总是与它前面最近的一个if 语句相对应。
例1:某浮点数的范围在0.000~9999 之间,试编写一个函数返回浮点数的小数点位置。
根据小数点的位置,即可在实际的单片机系统中显示出小数。
解:此题的基本思路是根据浮点数的4 种取值范围给出4 种不同的返回值,可以约定当定浮点数的大小在0.000~9.999、10.00~99.99、100.0~999.9、1000~9999 之间时,分别返回0、1、2 和3。
参考程序如下:int ftochar(float valp){int dotno=0;if(valp<10.0) dotno=0;else if((valp>=10.0)&&(valp<100.0)) dotno=1;else if((valp>=100.0)&&(valp<1000.0)) dotno=2;else if(valp>=1000.0) dotno=3;return dotno;}//代码长度298也可以这样编:int ftochar(float valp){int dotno=0;if(valp>=10.0) dotno=1;if(valp>=100.0) dotno=2;if(valp>=1000.0) dotno=3;return dotno;}//代码长度227自己体会例2:if(P1_1!=0) {P1_1=0;}例3:if(P1&0xf0)!=0xf0) {……}//检查P1高4位中是否有0 2、 switch/case 语句switch/case 是C51 的多分支选择语句,它的一般形式如下:switch(表达式){case 常量表达式1:语句1; break;case 常量表达式2:语句2; break;⋯⋯case 常量表达式n:语句n; break;default :语句n+1;}switch 括号中的表达式的值与某一case 后面的常量表达式的值相同时,就执行它后面的语句(可以是复合语句),遇到break 语句则退出switch 语句。
若所有的case 中的常量表达式的值都没有与表达式的值相匹配时,就执行default 后面的语句。
每一个case 的常量表达式必须是互不相同的,否则将出现混乱局面。
各个case 和default 出现的次序,不影响程序的执行结果。
如果在case 语句中遗忘了break 语句,则程序执行了本行之后,不会按规定退出switch语句,而是将执行后续的case 语句。
例1、 AT89C51 单片机的P1.0 和P1.1 引脚接有两只按键,其4 种逻辑组合分别点亮由P2.0~P2.3 控制的4 只LED(高电平点亮),试编程实现此功能。
解:参考程序如下#include <at89x51.h>void main(){data unsigned char a;do{a=P1;a=a&0x03; //,读低2位P2=P2&0xf0;//P2低4位置0,关LED switch (a){Case 0:P2=P2|0x01;break;Case 1:P2=P2|0x02;break;Case 2:P2=P2|0x04;break;Case 3:P2=P2|0x08;}}while(1);//注意while(1)}二、循环语句循环程序主要有“当型”循环和“直到型”循环两种,C51 对此提供了4 种实现方法。
1、基于 if 和goto 构成的循环采用if 和goto 可以构成“当型”循环程序,其格式如下:loop:if(表达式){语句;goto loop;}loop 是语句标号,或称为标识符,原则上任何一条语句都可以有标号,标号和语句用“:”号分开。
采用if 和goto 也可以构成“直到型”循环程序,其格式如下:loop:{语句;if(表达式)goto loop;}goto 语句为无条件转向语句,它的一般形式是:goto 语句标号;按照软件工程的有关思想,在程序设计中应避免使用或尽量少使用goto,以提高程序的可读性。
有时候使用goto语句非常方便,2、基于while 语句构成的循环while 语句只能用来实现“当型”循环,其一般格式如下:while(表达式){语句;//可以是复合语句}while 语句首先计算表达式的值;若其值为非0,则执行内嵌语句,若其值为0,则退出while 循环。
例1:串行通信时,每发送1帧,需要等待发送完,经常用下面语句:while(TI==0);//注意后面的“;”TI=0;例2、对于仪器,开电源后一直工作,可以用下面的语句:while(1) { 程序}3、基于do-while 语句构成的循环do-while 语句只能用来实现“直到型”循环,其一般格式是:do{语句;//可以是复合语句} while (表达式);do-while 语句的特点是先执行内嵌的语句;再计算表达式,如果表达式的值为非0,则继续执行内嵌的语句,直到表达式的值为0 时结束循环。
例1:实型数组sample 存有10 个采样值,编写一个函数返回其平均值(即平均值滤波程序)。
解:参考程序如下:float avg(float *sample){float sum=0;char no=0;do{sum += sample[no];no++;} while(no<10);return (sum/10);}4、基于for 语句构成的循环for 语句的一般形式为:for (表达式1;表达式2;表达式3){语句;}它的执行过程是:首先求解初始化表达式1;其次求解表达式2,判断是否满足循环条件,若其值非0,则执行内嵌语句,如无花括号,执行紧随其后的一句语句;否则退出循环;最后求解尺度增量表达式3,并回到第2 步。
在for 语句中,可以没有表达式1、表达式2 或表达式3,若三个表达式都没有,则相当于一个死循环。
如果其后紧跟一个“;”,则为空循环,常用于延时;例1、求自然数1~100 的累加和,并用printf( )函数通过单片机的串口显示在终端上。
(12MHz晶振)解:参考程序如下:#include<at89x52.h>#include<stdio.h>main( ){int sum=0;int n;SCON = 0x50; /* 如用Keil C 进行模拟调试或使用printf( ),必须初始化SCON*/TMOD = TMOD|0x20; // 定时器T1 工作在方式2,用作波特率控制TH1 = 0xe6; // 9600bps 对应T1 的时间常数为0xe6TL1 =0xe6;TR1 = 1; // 启动T1TI = 1; //启动发送,以发送第一个字符for (n=1;n<=100;n++){sum=sum+n;printf("%d ",sum);}}(求和输出)例2:for(;;){语句}//无限循环语句,直到关机例3:for(t=0;t<sum;t++);//在程序中延时(for循环)例4:延时子程序及延时时间计算(延时程序)#include<at89x51.h>#include<intrins.h>void relay(unsigned int x){unsigned char j;while(x--){for(j=0;j<199;j++)_nop_();}}main(){unsigned int x=10;relay(x);}C:0x0000 02001A LJMP C:001A3: void relay(unsigned int x)4: {5: unsigned char j;6: while(x--)查延时时间:将晶振频率设置的和实际使用频率相同,用执行到光标处,从进入延时前,记下register中sec的时间t1,然后运行到延时结束,记下时间t2,延时时间t=t2-t1 (演示)该方法叫软件延时,最大的缺点是延时时占用了CPU,不能执行其他程序,因此不适合做时钟,时钟要用定时器。
编程例:while(1){ if(P0_4==0){for(i=0;i<200;i++);//防键盘抖动while(P0_4==0);celiang();//调测量函数,}if(P2_2==0){for(i=0;i<200;i++);if(P2_2==0)xiaoyan();//调用传感器校验……………} }C:0x0003 EF MOV A,R7 (1)C:0x0004 1F DEC R7 (1)C:0x0005 AA06 MOV R2,0x06 (2)C:0x0007 7001 JNZ C:000A (2)C:0x0009 1E DEC R6 (1)C:0x000A 4A ORL A,R2 (1)。