第四章 单片机流程控制
- 格式:doc
- 大小:52.50 KB
- 文档页数:13
单片机顺序控制课程设计一、课程目标知识目标:1. 学生能理解单片机的基本原理和功能,掌握顺序控制的基本概念。
2. 学生能掌握单片机编程中的顺序控制指令,并应用于实际电路中。
3. 学生能解释并分析单片机顺序控制在实际应用中的工作原理。
技能目标:1. 学生能运用所学知识,设计并编写简单的单片机顺序控制程序。
2. 学生能对设计的顺序控制系统进行调试和故障排查,提高解决问题的能力。
3. 学生能通过实际操作,提升动手实践能力和团队协作能力。
情感态度价值观目标:1. 学生能培养对单片机及编程的兴趣,激发学习的积极性和主动性。
2. 学生在学习过程中,养成严谨、细心的态度,提高自我管理和约束能力。
3. 学生通过团队协作,培养沟通、交流和合作意识,增强集体荣誉感。
课程性质:本课程为实践性较强的课程,结合理论知识与实际操作,培养学生动手实践能力和创新能力。
学生特点:学生具备一定的单片机基础知识,具有较强的学习兴趣和动手欲望,希望通过实际操作提高自己的技能。
教学要求:教师需采用任务驱动法、案例教学法等教学方法,引导学生主动探究、积极实践,注重培养学生的创新意识和实际操作能力。
同时,关注学生的个体差异,因材施教,使每位学生都能在课程中取得进步。
通过分解课程目标为具体的学习成果,便于教学设计和评估的实施。
二、教学内容1. 单片机基础回顾:主要包括单片机的组成、工作原理和功能特点,重点复习单片机的内部结构及寄存器的作用。
2. 顺序控制原理:介绍顺序控制的概念、分类及其在单片机系统中的应用,分析顺序控制程序的编写方法。
3. 编程指令学习:学习单片机顺序控制相关指令,如跳转、循环等,并掌握其在编程中的应用。
4. 实践操作:设计简单的顺序控制程序,如流水灯、温度控制器等,让学生动手实践,提高编程和调试能力。
5. 故障分析与排查:分析在实际操作中可能出现的故障,教授学生如何进行排查和解决。
6. 案例分析与讨论:引入实际应用案例,让学生分组讨论,分析顺序控制在案例中的作用和实现方法。
单片机控制系统的开发流程一、引言单片机控制系统是一种应用广泛的嵌入式系统,具有体积小、功耗低、成本低等优点。
开发单片机控制系统需要经过一系列的步骤和流程。
本文将详细介绍单片机控制系统的开发流程。
二、需求分析在开发单片机控制系统之前,我们首先需要明确系统的需求。
需求分析是整个开发流程的关键步骤,它包括对系统功能、性能、接口、可靠性等方面进行详细的分析和定义。
在需求分析阶段,我们需要与用户充分沟通,确保对系统需求的准确理解。
三、系统设计在需求分析的基础上,我们进行系统设计。
系统设计是将需求分解为模块和功能的过程。
在单片机控制系统的设计中,需要确定硬件平台、选择合适的单片机型号、设计电路原理图、选择合适的外设等。
同时,还需进行软件设计,包括编写程序流程图、确定算法等。
四、硬件开发硬件开发是指根据设计要求,进行电路板的布线和焊接工作。
在硬件开发阶段,我们需要绘制电路板布线图,选择合适的元器件,并进行电路板的制作。
在制作过程中需要注意电路板的布线规范和焊接质量,确保电路的稳定性和可靠性。
五、软件开发软件开发是单片机控制系统开发的重要环节,它包括编写程序、调试、测试和优化等步骤。
在软件开发中,我们可以使用编程语言如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 语句。
单片机课程设计单片机实现的顺序控制在现代电子技术领域中,单片机的应用越来越广泛。
顺序控制作为一种常见的控制方式,在工业生产、自动化设备等方面发挥着重要作用。
本次单片机课程设计旨在通过单片机实现顺序控制,深入理解单片机的工作原理和编程方法。
一、单片机简介单片机是一种集成了 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 口电平发生变化。
第四章 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)。