1、单片机原理及接口技术全册单片机原理及接口技术全册 配套最完整精品课件配套最完整精品课件 第第1 1章章 单片机的基本硬件结构单片机的基本硬件结构 单片机原理与接口技术单片机原理与接口技术 第第1 1章章 单片机的基本硬件结构单片机的基本硬件结构 1.1 单片机的发展历史单片机的发展历史 单片机的发展历史可以分成四个阶段。 第一个阶段是1971年到1974年。 第二个阶段是1974年到1978年。 第三个阶段是1978年到1982年。 第四个阶段是1982年到现在。 第第1 1章章 单片机的基本硬件结构单片机的基本硬件结构 第一个阶段第一个阶段 1971年11月美国Intel公司首先设计成 集成
2、度为2000只晶体管的4位的微处理器 Intel40004,并且配有随机存储器RAM, 只读存储器ROM和移位寄存器等芯片,构 成第一台MCS-4微型计算机。 第第1 1章章 单片机的基本硬件结构单片机的基本硬件结构 第一个阶段第一个阶段 1972年4月Intel公司又研制了功能齐全 的8位微处理器Intel80000,这种微处理 器虽然还算不上单片机,但从此拉开了 研制单片机的序幕。 第第1 1章章 单片机的基本硬件结构单片机的基本硬件结构 第二个阶段第二个阶段 这是单片机研制的初级阶段,以Intel公 司的MCS-48为代表,这种单片机内集成 有8位CPU、并行I/O、8位定时器/计数 器
3、,寻址空间为4KB,这时单片机技术 进入了现场应用的阶段。 第第1 1章章 单片机的基本硬件结构单片机的基本硬件结构 第三个阶段第三个阶段 这是单片机推广运用的阶段,也是高性能 单片机研制阶段。在这一阶段出现的单片 机普遍带有串行口,有多级中断的处理系 统、16位定时器/计数器,片内RAM、 ROM容量加大,且寻址范围可达64KB, 有的片内还带有A/D转换器接口。 第第1 1章章 单片机的基本硬件结构单片机的基本硬件结构 第四个阶段第四个阶段 在这个阶段中,8位单片机已经得到了广泛 的应用,16位单片机也已经进入到实际应 用的阶段。一方面出现的各种类型的单片 机,另一方面EDA技术和ARM技
4、术也在不 断地完善。尽管如此,单片机技术仍然是 EDA技术和ARM技术基础。 第第1 1章章 单片机的基本硬件结构单片机的基本硬件结构 1.2 MCS-51单片机的主要功能单片机的主要功能 单片机(single chip microcomputer),也 称为微控制器,是在一硅片上集成了各种 部件的微型计算机,这些部件包括中央处 理器CPU、随机存储器RAM、只读存储器 ROM、输入/输出I/O接口电路、定时器/计 数器和串行通信接口电路。 第第1 1章章 单片机的基本硬件结构单片机的基本硬件结构 1.2 MCS-51单片机的主要功能单片机的主要功能 MCS-51单片机有三种类型的基本产品80
5、51、 8031和8751。这3个产品只是片内程序存 储器的制造工艺不同。8051的片内程序存 储器ROM为掩膜型的,在制造芯片时就已 经将程序固化到程序存储器中去了,因此 这种单片机具有某种专用的功能。 第第1 1章章 单片机的基本硬件结构单片机的基本硬件结构 1.2 MCS-51单片机的主要功能单片机的主要功能 MCS-51单片机具备一个完整的计算机所具 有的基本组成部分。一个计算机应该由三 部分组成。CPU、存储器和I/O接口。 第第1 1章章 单片机的基本硬件结构单片机的基本硬件结构 8051CPU的功能的功能 1、一个8位的CPU。 2、具有布尔代数的运算能力。 3、32条双向可被独
6、立寻址的I/O。 4、片内有128字节的数据存储器。 第第1 1章章 单片机的基本硬件结构单片机的基本硬件结构 8051CPU的功能的功能 5、内部有两组16位的定时/计数器。 6、具有全双工的传输信号。 7、5个中断源,两层优先级的中断结构。 8、外部程序存储器可扩充到64K。 第第1 1章章 单片机的基本硬件结构单片机的基本硬件结构 1.3 MCS-51单片机的内部结构分析单片机的内部结构分析 8051单片机包含中央处理器、程序存储器 ROM、数据存储器RAM、定时器/计数器、 并行接口、串行接口和中断系统等几个单 元,以及数据总线、地址总线和控制总线 三个总线。 第第1 1章章 单片机的
7、基本硬件结构单片机的基本硬件结构 MCS-51单片机的基本结构图单片机的基本结构图 第第1 1章章 单片机的基本硬件结构单片机的基本硬件结构 8051系列单片机的组成系列单片机的组成 1、一个8位的中央处理器CPU 2、片内数据数据存储器RAM 3、片内程序存储器 4、四个8位并行输入输出接口 第第1 1章章 单片机的基本硬件结构单片机的基本硬件结构 8051系列单片机的组成系列单片机的组成 5、两个定时器/计数器 6、MCS-51系列的单片机设有5个中断源 7、一个全双工的串行通信接口 8、片内振荡器和时钟产生电路 第第1 1章章 单片机的基本硬件结构单片机的基本硬件结构 8位的中央处理器位
8、的中央处理器CPU 这是单片机的核心部件,它的数据总线一 次能处理8位二进制数,CPU的作用是控制、 指挥和协调整个单元系统的协调工作,完 成运算和控制输入输出数据的操作。 第第1 1章章 单片机的基本硬件结构单片机的基本硬件结构 片内数据数据存储器片内数据数据存储器RAM 8051内部有128个8位的用户数据存储 单元,还有128个专用寄存器,它们是统 一编址的,专用寄存器只能用于存放控制 指令数据,用户只能访问,而不能用于存 放用户数据,所以,用户使用的RAM只有 128个,可存放读写的数据,运算的中间 结果或用户定义的字型表。 第第1 1章章 单片机的基本硬件结构单片机的基本硬件结构 片
9、内程序存储器片内程序存储器 片内程序存储器有ROM(掩膜型)、 EPROM(红外线擦除式)和EEPROM (电擦除式)等常用形式。 主要是用来存放程序的,也可以用来 存放一些原始数据或表格。但要注意8031 和8032单片机内部没有程序存储器。 第第1 1章章 单片机的基本硬件结构单片机的基本硬件结构 四个四个8位并行输入输出接口位并行输入输出接口 四个8位并行输入输出接口(I/O) P0P3,每个口既可以用于输入数据,也 可以用于输出数据。 第第1 1章章 单片机的基本硬件结构单片机的基本硬件结构 两个定时器两个定时器/计数器计数器 两个定时器/计数器,既可以用于定时 器,也可以用于计数器。
10、用于定时器时对 单片机内部脉冲计数,用于计数器时对外 部事件进行计数。一般情况下,当计数器 计满时,通过计算机的中断系统实现对现 场设备的控制。 第第1 1章章 单片机的基本硬件结构单片机的基本硬件结构 MCS-51系列单片机的中断源系列单片机的中断源 MCS-51系列的单片机设有5个中断源, 其中两个用于外部中断,两个用于定时器/ 计数器的中断,还有一个是串行口的中断。 这是一个比较完善的中断系统,拥有两级 优先级的选择,可以用来满足于不同设备 的控制要求。 第第1 1章章 单片机的基本硬件结构单片机的基本硬件结构 全双工的串行通信接口全双工的串行通信接口 一个全双工的UART(串行通信接口
11、), 这是一个通用异步接收发送器,可以实现 单片机与单片机之间的串行通信。这个串 行口既可以用做异步通信收发器,也可以 用做同步移位寄存器。 第第1 1章章 单片机的基本硬件结构单片机的基本硬件结构 片内振荡器和时钟产生电路片内振荡器和时钟产生电路 片内振荡器和时钟产生电路,所用的 石英晶体振荡器最高频率为12MHZ,用 于产生整个单片机运行的脉冲时序,但是 要注意8051单片机需要外接振荡电容。 第第1 1章章 单片机的基本硬件结构单片机的基本硬件结构 总结总结 1、 单片机的发展历史 2 、单片机的基本硬件结构 3、 MCS-51单片机的内部结构分析 第第1 1章章 单片机的基本硬件结构单
12、片机的基本硬件结构 第第1 1章结束章结束 单片机原理与接口技术单片机原理与接口技术 第第2 2章章 C C程序的设计程序的设计 C 语言是一种结构化语言。所谓结构化 语言就是不允许交叉程序的存在。结构 化语言的基本元素是模块,在C语言中 也称为函数。它是程序的一部分,只有 一个出口和一个入口,不允许中途插入, 也不允许以模块的其它路径退出。结构 化编程语言在没有恢复堆栈和其它相关 的寄存器之前,不应随便跳入或跳出一 个模块。 第第2 2章章 C C程序的设计程序的设计 2.1 C语言程序的基本结构语言程序的基本结构 2.1.1 C语言的程序结构 C语言程序的基本结构可以分成三部分, 即:主程
13、序、函数和头文件。 第第2 2章章 C C程序的设计程序的设计 1主程序主程序 C语言的主程序是C语言开始执行的程序, 是不可缺少的部分,它是用main为函数 命名的。 第第2 2章章 C C程序的设计程序的设计 例例2-1: 如图2-1所示的电路,试写出一段程序, 运行后,使P1口上连接的8个LED发光 二极管全亮。如图2-1所示的电路,试写 出一段程序,运行后,使P1口上连接的 8个LED发光二极管全亮。 第第2 2章章 C C程序的设计程序的设计 应用程序:应用程序: main() char a; a=0; P1=a; 第第2 2章章 C C程序的设计程序的设计 程序分析:程序分析: 在
14、主程序中,首先定义一个字符型变量 char a,再给变量a赋值为0,最后从P1口 输出变量a的值0,P1口为低电平,LED上 有电流通过,所以8个LED发光二极管都亮。 第第2 2章章 C C程序的设计程序的设计 将变量的数值从将变量的数值从P1口输出口输出 第第2 2章章 C C程序的设计程序的设计 函数函数 函数也称子程序,一个程序只有一 个主程序,而函数可以有多个。除了保 留字,各种名称均可为函数命名,可以 有返回值。 第第2 2章章 C C程序的设计程序的设计 例例2-2: 下面函数可以用来判断从主程序传递 来的参数是否大于0。 第第2 2章章 C C程序的设计程序的设计 char l
15、oge (char i) if (i0) return 1; else return 0; 第第2 2章章 C C程序的设计程序的设计 程序分析:程序分析: 在括号中的char i ,说明调用函数 时需要传送一个参数,数据类型为字符 型的。程序最前面的char 说明函数结束 时,要返回一个参数,数据类型也是字 符型的。 第第2 2章章 C C程序的设计程序的设计 头文件头文件 头文件是以x.h文件名存储的,主要 是用来定义各硬件的I/O地址、常数,也 可以是函数的声明,主程序使用include 指令将它加载。对于单片机的编程来说, 头文件的定义是非常重要的。 第第2 2章章 C C程序的设计程
16、序的设计 例例2-3: 下面的程序是根据P0口的工作状态决定 P1口输出高电平还是低电平。 第第2 2章章 C C程序的设计程序的设计 #include #include main( ) if (P00) P1=0 x00; else P1=0 xff; 第第2 2章章 C C程序的设计程序的设计 2.1.2 顺序结构顺序结构 顺序结构是一种简单的编程结构。 在这种结构中,程序由低地址向高地址 顺序执行指令。如图 2-2 所示,程序先 执行 指令1操作,再执行指令2 操作, 两者是顺序执行的关系。 第第2 2章章 C C程序的设计程序的设计 顺序结构流程图顺序结构流程图 第第2 2章章 C C
17、程序的设计程序的设计 例例2-4: 编写一个程序,将两个变量的数据相 “与”后,通过P1口输出。 第第2 2章章 C C程序的设计程序的设计 main( ) char a,b,c; a=240; b=15 c=a P1=c; 第第2 2章章 C C程序的设计程序的设计 程序分析:程序分析: 程序中定义了三个变量,a、b和c, 再a赋值为240,是二进制的11110000B, 给b赋值为15,是二进制的00001111B, 执行语句c=a两数相“与”后, c=00000000B,通过P1口输出P1=0 x00。 第第2 2章章 C C程序的设计程序的设计 2.2选择结构选择结构 计算机的基本特性
18、之一是具有重复执 行一系列指令的能力;而计算机的另一 个基本特性是具有选择能力。可以想象, 如果计算机不具备这种选择能力,它在 执行各种条件语句时,就不能按照人们 的意志,完成人们交给计算机的任务。 图2 -3 是选择结构流程图。 第第2 2章章 C C程序的设计程序的设计 选择结构流程图选择结构流程图 第第2 2章章 C C程序的设计程序的设计 例例2-5: 如图2-4所示的电路,试写出一段程序, 如果开关k闭合,P1口上的8个LED发光二 极管全亮,如果开关k断开,P1口上的8个 LED发光二极管全灭。 第第2 2章章 C C程序的设计程序的设计 main( ) char a; while
19、(1) a=P3; a=a if (a = = 00) P1=0 x00; else P1=0 xff; 第第2 2章章 C C程序的设计程序的设计 用开关控制用开关控制8个个LED发光二极管发光二极管 第第2 2章章 C C程序的设计程序的设计 2.2.1 选择语句选择语句 if C 语言的一个基本判定语句(条件选择语 句)是 if 语句。 它的基本结构是: if (表达式) 语句 ; 在这种结构中,如果括号中的表达式 成立(为真),则程序执行花括号中的语 句;否则程序将跳过花括号中的语句部分, 执行下面其他语句。 第第2 2章章 C C程序的设计程序的设计 C 语言提供了三种形式的语言提供
20、了三种形式的 if 语句语句 形式一: if (表达式) 语句 例:if(P3!=0)P1=0 x20; 第第2 2章章 C C程序的设计程序的设计 形式二:形式二: if (表达式) 语句例l ; else 语句 2 ; 例:if(P3!=0) P1=0 xff; else P1=0 x00; 第第2 2章章 C C程序的设计程序的设计 形式三形式三 if (表达式 l ) 语句 1 ; else if (表达式 2 ) 语句 2 ; else if (表达式 3 ) 语句 3 ; else if (表达式 m ) 语句 n ; else 语句 m ; 第第2 2章章 C C程序的设计程序的
21、设计 例例2-6: 如图2-4所示的电路,下面的程序是根 据P3口的工作状态决定P1口输出的数据。 第第2 2章章 C C程序的设计程序的设计 用开关控制用开关控制LED发光二极管发光二极管 程序程序 main() if(P3= =0) P1=0 x00; else if (P3= =0 x01) P1=0 x01; else if (P3= =0 x02) P1=0 x02; else if (P3= =0 x04) P1=0 x04; else P1=0 x00; 第第2 2章章 C C程序的设计程序的设计 用开关控制用开关控制8个个LED发光二极管发光二极管 第第2 2章章 C C程序的
22、设计程序的设计 if 语句的嵌套的基本形式语句的嵌套的基本形式 第第2 2章章 C C程序的设计程序的设计 例例2-7: 下面的程序是比较a、b和d三个变量的 大小,确定变量c的值。 可以用花括号将不对称的 if 括起来, 以确定它们之间的相应关系。 第第2 2章章 C C程序的设计程序的设计 main( ) char a=10,b=1,c,d=2; if (ab) if(ad) c=1; else c=0; 第第2 2章章 C C程序的设计程序的设计 例例2-8: 下面的程序是比较a、b和d三个变量的 大小,确定变量c的值。 如果 if 语句中花括号内只有一条语句, 则花括号可以省略 第第2
23、 2章章 C C程序的设计程序的设计 main( ) char a=10,b=1,c,d=2; if (ab) if(ad) c=1; else c=0; 第第2 2章章 C C程序的设计程序的设计 如果花括号内语句不只一句,则此时花括号如果花括号内语句不只一句,则此时花括号 不能省,必须使用花括号并将它们括起来。不能省,必须使用花括号并将它们括起来。 if (ab) if(ad) c=1; else c=0; 第第2 2章章 C C程序的设计程序的设计 222串行多分支结构及其流程图串行多分支结构及其流程图 在串行多分支结构中,以单选择结构 中的某一分支方向作为串行多分支方向继 续进行选择结
24、构的操作;一般来说,以条 件为真作为串行方向。若条件为假,则执 行另外的操作。最终程序在若干种选择之 中选出一种操作来执行,并从一个共用的 出口退出。 第第2 2章章 C C程序的设计程序的设计 串行多分支结构流程图串行多分支结构流程图 第第2 2章章 C C程序的设计程序的设计 例例2-9: 如图2-6所示的电路,当开关k0闭合时, 发光二极管LED0亮,开关k1闭合时,发光 二极管LED1亮,以此类推,开关k7闭合时, 发光二极管LED7亮。其它情况下,8个发 光二极管全灭。任一时刻只能有一个发光 二极管亮。 第第2 2章章 C C程序的设计程序的设计 用用8个开关控制个开关控制8个发光二
25、极管个发光二极管 第第2 2章章 C C程序的设计程序的设计 main ( ) while(1) if (P1= =0 x01) P3=0 x01; else if (P1= =0 x02) P3=0 x02; else if (P1= =0 x04) P3=0 x04; else if (P1= =0 x08) P3=0 x08; else if (P1= =0 x10) P3=0 x10; else if (P1= =0 x20) P3=0 x20; else if (P1= =0 x40) P3=0 x40; else if (P1= =0 x80) P3=0 x80; else P3=
26、0 x00; 第第2 2章章 C C程序的设计程序的设计 223 并行多分支结构及其流程图并行多分支结构及其流程图 在实际应用中,常常会遇到多分支选 择问题。例如以一个变量的值作为判断条 件,将此变量的值域分成几段,每一段对 应着一种选择或操作。这样当变量的值处 在某一个段中时,程序就会在它所面临的 几种选择中选择相应的操作。这显然是一 个典型的并行多分支选择问题。 第第2 2章章 C C程序的设计程序的设计 虽然可以用前面已掌握的 if 语句来解 决这个问题,但由于一个 if 语句只有两个 分支可供选择,因此必须用嵌套的 if 语句 结构来处理。如果分支较多,则嵌套的 if 语句层数多,程序
27、冗长,从而导致可读性 降低。为此, C 语言提供了一个 switch 语句,用于直接处理并行多分支选择问题。 第第2 2章章 C C程序的设计程序的设计 switch 语句的一般形式如下:语句的一般形式如下: switch (表达式) Case常量表达式1: 语句 l ; break ; Case 常量表达式2: : 语句 2 ; break ; . . . case 常量表达式 n : 语句 n ; break default : 语句 n + l 第第2 2章章 C C程序的设计程序的设计 例例2-10: 下面的程序是根据P0口的工作状态确定 P1口输出。 第第2 2章章 C C程序的设计
28、程序的设计 main() char k; k=P0; switch(k) case 1: P1=0 x01; break; case 2: P1=0 x02; break; case 3: P1=0 x03; break; delfault: break; 第第2 2章章 C C程序的设计程序的设计 并行多分支结构流程图并行多分支结构流程图 第第2 2章章 C C程序的设计程序的设计 例例2-11: 如图2-8所示的电路,当开关k0闭合时, 发光二极管LED0亮,开关k1闭合时,发光 二极管LED1亮,以此类推,开关k7闭合时, 发光二极管LED7亮。其它情况下,8个发 光二极管全灭。任一时刻
29、只能有一个发光 二极管亮。要求用switch - case 语句完成 同样的操作。 第第2 2章章 C C程序的设计程序的设计 并行多分支结构流程图并行多分支结构流程图 第第2 2章章 C C程序的设计程序的设计 main ( ) unsigned char k; while(1) k=P1 switch(k) case 0 xfe: P3=0 x01; break; case 0 xfd: P3=0 x02; break; case 0 xfb: P3=0 x04; break; case 0 xf7: P3=0 x08; break; case 0 xef: P3=0 x10; break
30、; case 0 xdf: P3=0 x20; break; case 0 xbf: P3=0 x40; break; case 0 x7f: P3=0 x80; break; default : P0=0; break; 第第2 2章章 C C程序的设计程序的设计 2.3循环结构及其流程图循环结构及其流程图 所有的分支结构都使程序流程一直向 前执行,而使用循环结有构则可使分支流 程重复地进行。循环结构又分成“当” (while )型循环结构和“直到, ( do while )型循环结构两种。 第第2 2章章 C C程序的设计程序的设计 “当当”( while )型循环结构及其流程型循环结构及
31、其流程 图图 如图 2-9 所示,在( while )型循环结 构中,当判断条件 P 成立(为真)时, 反复执行操作 A ,直到 P 条件不成立 (为假)时,才停止循环。 while 循环语句的语法流程图如图 2-9 所示。 第第2 2章章 C C程序的设计程序的设计 “while ”型循环结构流程图型循环结构流程图 第第2 2章章 C C程序的设计程序的设计 do while 循环的语句循环的语句 第第2 2章章 C C程序的设计程序的设计 while 循环结构的特点循环结构的特点 while 循环结构的最大特点在于,其 循环条件测试处于循环体的开头。要想执 行重复操作,首先必须进行循环条件
32、测试, 若条件不成立,则循环体内的重复操作一 次也不能执行。 第第2 2章章 C C程序的设计程序的设计 例例2-12: 如图2-11所示的电路,当开关k闭合 时,P20为低电平,发光二极管 LED0LED3亮,开关k断开时,P20为 高电平,发光二极管LED4LED7亮。 第第2 2章章 C C程序的设计程序的设计 用用P20控制控制P1口的输出状态口的输出状态 第第2 2章章 C C程序的设计程序的设计 main ( ) while(1) while (P2 P1=0 x0f; 第第2 2章章 C C程序的设计程序的设计 “=”号与号与“= =”号的区别号的区别 注意“=”号与“= =”号
33、的区别。“=” 是赋值运算符;而“= =”是测试相等运算 符,只是对该符号两边的表达式进行测试 和比较,而不进行赋值。 第第2 2章章 C C程序的设计程序的设计 例例2-13: 编写一段程序从P1口输出数据0-255。 第第2 2章章 C C程序的设计程序的设计 main() char a; while(1) for (a=0 ;a= =255 ; a+) P1=a; for (b=0 ;b 5 时, while 循环体结束。若无此 种语句,别循环将无休止地继续下去 第第2 2章章 C C程序的设计程序的设计 例例2-15 : 试用“while ”型循环结构编写一段延时程序。 第第2 2章章
34、 C C程序的设计程序的设计 main ( ) unsigned int a; a=50000; while(a0) a-; 第第2 2章章 C C程序的设计程序的设计 “直到直到”(do while)型循环结构)型循环结构 第第2 2章章 C C程序的设计程序的设计 (do while)型循环结构)型循环结构 在这种结构中,先执行操作A,再判断 条件P。若P成立(为真),则再执行操作 A,此时反复执行操作 A ,直到P为假为止。 第第2 2章章 C C程序的设计程序的设计 do while 的程序流程图的程序流程图 第第2 2章章 C C程序的设计程序的设计 说明说明 在while 循环语句
35、中,执行循环体之前 要先检测循环结束的条件。如果条件不成 立,则该循环不会被执行。 第第2 2章章 C C程序的设计程序的设计 说明说明 do while 循环语句把 while 循环语句作 了移位,即把循环条件测试的位置从起始 处移至循环的结尾处。该语句大多用于执 行至少一次以上循环的情况。 第第2 2章章 C C程序的设计程序的设计 do while 循环语句的执行过程循环语句的执行过程 首先执行循环体语句,然后执行圆括号 中的表达式。如果表达式的结果为真(1) , 则循环继续,并再一次执行循环语句。只 有当表达式的结果为假 ( 0 )时,循环才 会终止,并以正常方式执行程序后面的语 句。
36、 第第2 2章章 C C程序的设计程序的设计 例例2-16: 试用“while ”型循环结构编写一段程 序,计算1+2+3+10。 第第2 2章章 C C程序的设计程序的设计 main ( ) int sum = 0, a=0; do sum+=a; a+; while(a=10); 第第2 2章章 C C程序的设计程序的设计 例例2-17 : 如图所示的电路,试用“while ”型循环 结构编写一段程序,当P30闭合时,P1口 的8个发光二极管LED0LED7闪烁,当P30 断开时,P1口的8个发光二极管 LED0LED7全灭。 第第2 2章章 C C程序的设计程序的设计 用用P30控制控制
37、P1口的发光二极管闪烁口的发光二极管闪烁 第第2 2章章 C C程序的设计程序的设计 main ( ) unsigned int a; for ( ; ; ) do P1=0 xff; for (a=0;a50000;a+); x=P3; while(x P1=0 x00; for (a=0;a0) 第第2 2章章 C C程序的设计程序的设计 “dowhile ”与与“while ”语句的区语句的区 别别 “dowhile ”语句与“while ”语句的区 别是,在“dowhile ”型循环结构中,先 执行一次循环体,再判断是否满足循环条 件。而在“while ”型循环结构中,先判断 是否满足
38、循环条件,再执行一次循环体。 第第2 2章章 C C程序的设计程序的设计 233 (for)型循环结构及其流程图型循环结构及其流程图 第第2 2章章 C C程序的设计程序的设计 for 循环语句循环语句 for 循环语句是循环语句中最为灵活 也是最为复杂的一种。它不仅可以用于循 环次数已经确定的情况,而且可以用于循 环次数不确定但已经给出循环条件的情况。 它既可以包含一个索引计数变量,也可以 包含任何一种表达式。除了被重复的循环 指令体外,表达式模块由三个部分组成。 第第2 2章章 C C程序的设计程序的设计 表达式模块由三个部分组成表达式模块由三个部分组成 第一部分是初始化表达式。对 C 语
39、言 而言,任何表达式在开始执行时都应该做 一次初始化。 第二部分是对结束循环进行侧试。对 C 语言而言,可以是任何一种测试,一旦测 试为假,就会结束循环。 第三部分是尺度增量。 第第2 2章章 C C程序的设计程序的设计 for 循环语句的一般形式循环语句的一般形式 for 循环语句的一般形式为 for (表达式 1 ;表达式 2 ;表达式 3 ) 语句; *循环体* / 第第2 2章章 C C程序的设计程序的设计 for 循环的语句执行过程循环的语句执行过程 先对表达式 1 赋初值,进行初始化。 判断表达式 2 是否满足给定的循环条件, 若满足循环条件,则执行循环体内语句, 然后执行第 步;
40、若不满足循环条件,则 结束循环,转到第 步。 若表达式 2 为真,则在执行指定的循环语 句后,求解表达式 3 。 回到第 步继续执行。 退出 for 循环,执行下面一条语句。 第第2 2章章 C C程序的设计程序的设计 例例2-19 : 试用“for”型循环结构编写一段程序, 计算1+2+3+10。 第第2 2章章 C C程序的设计程序的设计 应用程序应用程序 main() int a,sum; sum=0; for (a=0; a=10; a+) sum+=a; 第第2 2章章 C C程序的设计程序的设计 例例2-20: 电路如图2-14所示,试用“for”型循环 结构编写一段程序,从P1口
41、输出数据, 依次点亮LED0LED7,程序运行时只有 一个发光二极管亮。 第第2 2章章 C C程序的设计程序的设计 图图2-14 从从P1口输出数据口输出数据 第第2 2章章 C C程序的设计程序的设计 对对 for 循环语句的几种特例进行说明循环语句的几种特例进行说明 for 语句中的小括号内的三个表达式全部 为空。 例2-21:在实际运用中,有时需要单片机 不间断地对现场进行监测与控制,试用 for 循环语句编写一段程序,得到一个无 限的循环体。 第第2 2章章 C C程序的设计程序的设计 for (;) /*循环体循环体*/ 程序分析: 在小括号内只有两个分号,无表达式。 这意味着没有
42、设初值,无判断条件,循环 变量为增值。这将导致一个无限循环。一 般在编制 8051 单片机监控程序需要无限循 环时,就采用这种形式的 for 循环语句 第第2 2章章 C C程序的设计程序的设计 表达式表达式 1 缺省缺省 for 语句三个表达式中,有一个或两个 缺省。 表达式 1 缺省。 例2-22:由于变量a的值在循环体外已经 确定,要求 a在现有值的基础上进行累加, 在循环体内可以省略变量的初值。 第第2 2章章 C C程序的设计程序的设计 应用程序应用程序 main( ) char a=0, sum=0; for (; a=100; a+) sum=sum+a; 第第2 2章章 C C
43、程序的设计程序的设计 程序分析:程序分析: 在语句for (; a0) sum=sum+a else break; 第第2 2章章 C C程序的设计程序的设计 程序分析:程序分析: 在for (a=1; ; a+)语句中省去了表达 式 2,即不判断循环条件,认为表达式始 终为真。循环将无休止地进行下去。它相 当于: 第第2 2章章 C C程序的设计程序的设计 a=1; while(1) sum=sum+a; a+; 第第2 2章章 C C程序的设计程序的设计 表达式表达式 1 , 3 省略。省略。 例2-24:前面的例子已经讲过如果变量 的初值在进入循环体之前已经存在,可以 省略表达式1。有时
44、程序的循环体中已经有 了变量的增值语句,也可以省略表达式3, 这时只要有表达式2就可以了。下面的程序 就能完成这一功能。 第第2 2章章 C C程序的设计程序的设计 main() char a=0,sum=0; for (; a=100 ; ) sum=sum+a; a+; 第第2 2章章 C C程序的设计程序的设计 程序分析:程序分析: 在for (;a=100 ;)语句中不但省去了表 达式1,还省略了表达式3,即只判断循环 条件,只要表达式2的条件满足。就退出 循环体。它相当于: 第第2 2章章 C C程序的设计程序的设计 while (a100) sum=sum+a; a+; 第第2 2
45、章章 C C程序的设计程序的设计 没有循环体的没有循环体的 for 语句。语句。 例2-25:有些延时程序,并不需要在循 环体内做任何事情,只是为了消耗计算机 的时间,这时就可以省略循环体。下面的 程序就能完成这一功能。 第第2 2章章 C C程序的设计程序的设计 应用程序应用程序 main( ) int m=2000; for (t=0;tm;t+); 第第2 2章章 C C程序的设计程序的设计 循环语句的用途循环语句的用途 循环的基本用途之一是用嵌套循环产 生时间延迟,执行指令消磨时间。这种延 时方式是依靠一定数量的时钟周期来定时 的,所以延时依赖于晶振的振荡频率。 第第2 2章章 C C
46、程序的设计程序的设计 时钟周期数时钟周期数 8051单片机的数据手册中列出了每 一条机器指令所需要的时钟周期数,使 用 12MHz的晶振,12个振荡周期的指令 花费1s,而24个振荡周期指令花费2s。 第第2 2章章 C C程序的设计程序的设计 分支指令所用的时间分支指令所用的时间 所有3字节指令每条指令用2s,所有 分支指令每条指令用2s;所有12 字节 逻辑和算术指令,每条指令用1s,而寄 存器到寄存器传送用2s 。 第第2 2章章 C C程序的设计程序的设计 使用中断使用中断 有些指令要花费4s。当需要执行其他 操作时,用软件编程的方法来获得延时的 效率是很低的。软件延时使控制器在延时
47、循环时接收不到其它的输入,解决这个问 题的方法是使用中断。 第第2 2章章 C C程序的设计程序的设计 例例2-26: 下面是延时1ms的程序。如给这个 程序传递一个50的数值,则可以产生 约 50000s即50ms的延时。 第第2 2章章 C C程序的设计程序的设计 延时函数延时函数 void msec( unsigned int x) unsigned char j; while(x-) for (j=0; j125;j+) ; 第第2 2章章 C C程序的设计程序的设计 主程序主程序 main( ) msec(50) 第第2 2章章 C C程序的设计程序的设计 程序分析:程序分析: 这个
48、程序可以用整型值产生较长的延 时。根据汇编代码进行的分析表明,用j 进行的内部循环大约延时8s,程序编写 得近似正确,但并不精确。不同的编译器 会产生不同的延时,因此 j 的上限值 125 应根据实验进行补偿调整。 第第2 2章章 C C程序的设计程序的设计 构成循环结构的常见语句构成循环结构的常见语句 构成循环结构的常见语句主要有: while , do while 和 for 等。 可以证明,由以上基本结构组成的程序,能 够处理任何复杂的问题。换句话说,任何 复杂的程序都是由以上三种基本结构组成 的。 第第2 2章结束章结束 单片机原理与接口技术单片机原理与接口技术 第第3章章 第第3 3
49、章章 C51 C51 函数函数 在高级语言中,函数和另外两个名词 “子程序”、“过程”用来描述同样的 事情;在Cx51中,使用“函数”这个术 语。它们都含有以同样的方法重复地去 做某件事的意思。 第第3 3章章 C51 C51 函数函数 主程序主程序maln( ) 主程序maln( )可以根据需要用来调用函数。 当函数执行完毕时,就发出返回(return) 指令,而主程序main( )用后面的指令来 恢复主程序流的执行。同一个函数可以在 不同的地方被调用,并且函数可以重复使 用。 第第3 3章章 C51 C51 函数函数 函数函数 所谓函数,就是将一些语句集合起来, 完成一个特定的功能。函数也
50、相当于其 它编程语言中的子程序。C语言中将函 数分为主函数和其它函数。 第第3 3章章 C51 C51 函数函数 函数调用的一般规则函数调用的一般规则 所有的函数在定义时都是相互独立的, 一个函数中不能再定义其他函数,即函 数不能嵌套定义,但可以互相调用。函 数调用的一般规则是:主函数可以调用 其它普通函数;普通函数之间也可以互 相调用,但普通函数不能调用主函数。 第第3 3章章 C51 C51 函数函数 3.1 函数的分类函数的分类 从 C 语言程序的结构上划分, C 语 言函数分为主函数和普通函数两种。从 用户使用的角度划分,又可分为两类: 一类是标准库函数,另一类是用户自定 义函数。 第