




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、【首页】课程名称趣味电子产品设计与制作授课专业班级课程编号课程类型必修课校级公共课();基础或专业基础课();实验课()选修课限选课();任选课(,)授课方式课堂讲授(,);实践课 (V)考核方式考试();考查(,)课程教学 总学时数32学分数2学时分配课堂讲授16学时; 实践课 16学时教材名称单片机的C语言应用程 序设计(第4版)作者马忠梅 等出版社及 出版时间北京航空 航天出版 社2007指aE参力书基于 Proteus的8051单 片机实例教程单片机C程序设计及应 用实例基于C语言编程 MCS-51单片机原理与应 用Protel99高级应用作者李学胡伟张培仁赵晶出版社及 出版时间电子工
2、业 出版社人民邮电 出版社2003清华大学 出版社2003人民邮电 出版社2000授课教师明显诚汪科职称工程师单位工程训练 中心授课时间注:表中()选项请打教案【理、工科】第一章 8051 单片机基础结构与内部资源一、教学目的和要求通过对单片机的基础特点、 内部结构、 外部硬件扩展、 指令系统和简单的程序介绍,让同学们对8051 单片机有个基础了解,同时由浅入深,进一步学习运用 8051 内部资源的 C 语言实现,包括中断、定时器/计数器以及串口等等。二、教学重点2.1 8051 的内部基础结构2.2 8051 的内部资源使用三、教学难点8051 单片机独特的内部结构3.2 8051 中断、定
3、时器/计数器和串行口的使用1.1 8051 的内部结构单片机是在一块硅片上集成了各种部件的微型计算机, 这些部件包括中央处理器CPU数据存储器RAM程序存贮器ROM定时器/计数器和多种IO接口电 路。8051是MCS-51系列单片机的一个产品。MCS-51系列单片机是Intel公司推 出的通用型单片机。它的基本型产品是8051、 8031 和 8751.这三个产品只是片内程序存储器的制造工艺不同。 8051 片内程序存储器为掩膜型,在制造芯片时已将应用程序固化进去了, 使它具有某种专用功能; 8031 片内无ROM, 使用时需外接ROM 8751片内ROhM EPROMS,固化的应用程序可以方
4、便的改写。8051单片机内部结构可划分为 CPU存贮器、并行口、用行口、定时器/计 数器、中断逻辑几部分。中央处理器核心单元,算术逻辑单元ALU (算术运算,逻辑运算),操作数存于累加器AC6E暂存器中。控制器执行程序指令过程,程序存贮器中取指令,进入指令寄存器IR ,指令译码器 ID 译码,微操作信号用于控制单片机各部分动作。时钟包括内部时钟和外部时钟。 内部时钟, 晶振和微调电容组成的并联谐振电路构成稳定自激振荡器。外部时钟,引入外部脉冲信号。基本时序周期, 微操作信号在时间上有严格的先后次序。 振荡周期是振荡源周期; 时钟周期是振荡周期的 2 倍; 机器周期包括6 个时钟周期; 而指令周
5、期指完成一条指令所占用的全部时间。指令部件包括程序计数器PG指令寄存器IR,指令译码器ID,数据指针DPTR 16位地址寄存器,寻址外部 RAM也可寻址外部ROW表格数据。8051 的存储器组织将程序存贮器和数据存贮器分开,并各自有寻址机构和寻址方式(哈佛型结构单片机) 。8051单片机物理上有4个存贮空间,片内 ROM片外ROM片内RAM片外 RAM可在片外扩展 RAMffi ROM各有64Kb的寻址范围。8051有256B数据存贮 器RAM 4KB程序存贮器 ROM 4KB的ROM片内RO防口片外RO泌用,地址为 0000H-0FFFH 1000H-FFFFhM址为片外ROM用。控制信号E
6、A=1时,先片内ROM(4KB,指令地址超过0FFFH自动转向片外ROM EA=Q只从片外ROW指令。 程序存储器ROM勺某些单元仅供系统使用,0000H-0002H所有执行程序的入口地 址,0003H-002AHt匀匀分为5段,5个中断服务程序的入口,用户不应进入上述 区域。RAMfc地址上和ROM1叠,8051通过不同信号选通 ROM RAM从外部ROM 取指令时用选通信号PSEN而从外部RAM实写数据采用RD?口 W砒通。8051内 部256B的RAM?节,00H-7FH,真正的RAMK; 80H-FFH专门用于特殊功能寄存 器(SFR。低128字节分三个区域(00H-7FH), 00H
7、-1FH四组工作寄存器,每组 占用8个RAM?节,记为R0-R7,某一时刻,CPUR能使用其中一组工作寄存器。 20H-2FH共16个字节,128位,除做一般RAM卖写外,还可对每一个字节的每一 位进行操作。30H-7FH, 80个字节,一般的用户RAMK域。8051单片机特殊功能 寄存器中包含有堆栈指针SR 8051单片机复位后,堆栈指针SP总是初始化到内 部RAM勺07H位置。8051堆栈属于向上生长型,数据压入堆栈,SP内容自动加1 作为本次进栈的地址指针,然后存信息。8051 并行接口P0-P3, P0 口采用总线复用技术,P2 口作地址的高 8 位, P1口只作IO 口,P0, P2
8、, P3有第二功能。8051的内部资源包括用行口,定时器/ 计数器,中断。 8051 的工作方式包括复位方式,程序执行方式,单步执行方式,低功耗操作方式,EPROMI程和校验方式。8051 的系统扩展主要包括外部程序存储器的扩展和数据存储器的扩展。8051 的寻址方式,指令中给出的地址寻找真实操作数地址的方式。 8051 包 括 7 种寻址方式,寄存器寻址。直接寻址、寄存器间接寻址、立即寻址、变址寻址、相对寻址和位寻址。 8051 指令系统包括数据传输指令、转移指令、算术运 算指令和逻辑运算指令等。1.2 8051 的内部资源一、中断8051 有 5 个中断源, 有两个中断优先级, 每个中断优
9、先级可以编程控制, 中 断允许受到CPUFF中断和中断源开中断的两级控制。5 个中断源包括:外部中断请求0、外部中断请求1、片内定时器/ 计数器 0溢出中断请求、片内定时器/ 计数器溢出中断请求1、片内串口发送/ 接收中断请求。为了了解每个中断源的是否产生了中断, 中断系统对应设置多个中断请求触发器实现记忆。这些触发器包括定时器/计数器控制寄存器TCON串口控制寄存 器SCON中断优先级寄存器IP,中断允许寄存器IE。中断响应, 8051 单片机的每个机器周期采样各中断源的中断请求标志位, 如 果没有下述阻止条件:1. CPUE在处理同级或更高级的中断;2. 现行机器周期不是所执行指令的最后一
10、个机器周期;3. 正在执行的是RETI 或是访问 IE 或 IP 的指令。将在下一个机器周期响应被激活了的最高级中断请求。CPUS中断响应后完成如下操作:1. 硬件清除相应的中断请求标志;2. 执行一条硬件子程序,保护断点,并转向中断服务程序入口;3. 结束中断时执行RETI 指令,恢复断点,返回主函数。同一优先级设置时,优先级由高至低的顺序是:INT0-T/C0-INT1-T/C1-Serial 。寄存器组切换,当一个特定的任务正在执行,可能有更紧急的任务需要CPU处理,在一个具有优先级的系统里,CPU是等待第一个任务完成,而是假定前一个任务已经完成, 立即处理新任务。 若程序流程立即转向新
11、任务, 新任务使用的各寄存器破坏了第一个任务使用的中间信息。 当第一个任务重新执行时, 寄存器的值可引起错误发生, 解决的方法每次发生任务变化时执行一些指令, 被称为上下文切换。高优先级的中断可以中断正在处理的低优先级程序,因而必须注意寄存器组。 最好给每个优先级程序分配不同的寄存器组。 因此, 中断服务函数的完整语法如下:返回值 函数名(参数) 模式 重入 interrupt n using n当调用中断函数时,SFR中的ACC B、DPH DPL PS隧栈。二、定时器/ 计数器(T/C)8051 系列单片机至少有两个16 位内部定时器/计数器, 8052有三个定时器/计数器,两个基本定时器
12、/计数器是T/C0和T/C1。它们既可以编程为定时器使 用,也可以编程为计数器使用。若做定时器用,计数内部晶振驱动时钟;若做计数器使用, 计数输入管脚的脉冲信号。 定时器实际上也是工作在计数方式下, 只 不过对固定脉冲计数,由计数值可计算出时间,有定时功能。T/C 作定时器用时, 对振荡源 12 分频的脉冲计数, 每个机器周期计数值加1,1/12fosc= 计数率,每2us 计数值加 1。T/C作计数器用时,计数脉冲来自外部脉冲输入管脚T0、T1,当T0/T1脚上出现负跳变时, 计数值加 1, 识别管脚上的负跳变需要2 个机器周期, 24 个振荡周期,可计数最高外部脉冲频率为 1/24fosc
13、 。高于此计数率,计数出错。与T/C有关的特殊功能寄存器包括计数寄存器TH和TL,控制寄存器TCON方式控制寄存器TMOD定时器/计数器2控制寄存器(T/C2)。定时器 / 计数器的工作方式如下:1. 方式0,为13位T/C,由TH提供高8位,TL提供低5位的计数器, 满计数值为2 13 ,但启动前可以预置计数初值;2. 方式 1, 方式 1 与方式 0 基本相同, 唯一区别在于计数寄存器的位数是16位,由TH和TL寄存器各提供8位,满计数值为216;3. 方式2,是 8 位可自动重装载的 T/C, 满计数值为 28 。4. 方式3,只适用于T/C0,当T/C0工作在方式3时,TH0和TL0成
14、为 两个独立的 8 位计数器。只有将T/C1 用作串口的波特率发生器时,T/C0才能工作在方式3,相当于增加了一个定时器。5. T/C2 的工作方式, T/C2 包含一个 16 位重装载方式,计数溢出后, 自动在瞬间重装载。 T/C2 还有捕获方式,它把瞬时计数值传到另外 的CPK读取的寄存器对。定时器/计数器的初始化,包括编程 TMOD置初值TH和TL,编辑TE,启动T/C。计数初值计算,定时器工作方式下: T/C 对机器周期脉冲进行计数,根据晶振频率算出机器周期,一个机器周期为 12/fosc 。那么自然可算出需要的计数初值。计数器工作方式下,由于计数器向上计数,所以可置负数。三、串行口8
15、051单片机片上有UART(通用异步接收/发送)用于串行通信,发送时数据 由TXD端送出,接收时数据由RXD®输入。有两个缓冲器SBUF 一个作发送缓 冲器, 另一个作接收缓冲器。 它是可编程的全双工的串行口。 短距离的机间通信 可使用UART勺TTL电平,使用驱动芯片可接成RS232G口通用微机进行通信。波 特率时钟必须从内部定时器1 或定时器 2 获得。与用行口有关的SFR包括串口控制寄存器 SCO恃口电源控制寄存器PCON用 行口的工作方式包括:1. 方式0,为移位寄存器输入/输出方式,串行数据通过RXD俞入输出, TXD则用于输出移位时钟脉冲;2. 方式1,是 10 位异步通
16、信方式, 1 位起始位(0) , 8 位数据位和1位停止位(1) ,其中的起始位和停止位是在发送时自动插入;3. 方式 2 和方式3,都是11 位异步接收/ 发送方式,不同在于波特率不同。串行口的初始化包括,定时器1 工作方式, T/C1 置初值, T/C1 启动,串行口控制SCON开CPU+断和源中断。第二章8051的C语言编程一、教学目的和要求要求学生通过本章学习,了解8051 的编程语言,掌握C51 的数据与运算、流程控制语句、构造数据类型、函数以及模块化程序设计。二、教学重点2.1 8051 编程语言和 C51 程序结构2.2 C51 的数据以及运算2.3 C51 的构造数据类型2.4
17、 函数的使用和模块化程序设计三、教学难点C51 的程序结构和相关的编写规则C51 数据与运算一、数据与数据类型数据, 具有一定格式的数字或数值叫做数据。 数据类型, 数据的不同格式叫做数据类型。数据结构,数据按一定的数据类型进行的排列、组合、架构称为数据类型。数据类型分为基本类型、 构造类型、 指针类型和空类型。 基本类型分为位型、字符型、整型、长整型、浮点型和精度浮点型。构造类型分为数组类型、结构体类型、共用体和枚举。二、C51运算符、表达式以及规则常量,在程序运行的过程中,其值不能改变的量。与变量一样,常量也有不 同的数据类型。变量,在程序运行过程中,其值可以改变的量。一变量主要由两部分组
18、成, 一是变量名,一是变量值。每一个变量都有一个变量名,在内存中占据一定的存 储空间,并在该内存单元存放该变量的值。在程序编制中使用大量不必要的变量类型, 会导致C编译器相应的增加所调用的 库函数的数量,以处理大量增加的变量类型。 最终会使程序变得过于庞大,运行 速度减慢,甚至会在连接时,出现因程序过大装不进代码区的情况。 通常使用的 数据变量包括位变量、字符变量、整型变量、长整型变量、浮点型变量。地址为00H-7FH的低128字节片内RAMK被戈U分为3个区域。通用寄存器区, 可位寻址区,用户RAMK。通用寄存器区被划分为4组寄存器,0组(00H-07H), 1 组(08H-0FH), 2
19、组(10H-17H), 3 组(18H-1FH);每组含 8 个通用寄存器 R0-R7, 共32个通用寄存器。寻址采用寄存器名寻址;字节地址寻址。当用寄存器名来寻址时,程序状态字中的PSWW勺RS1和RS0两位的值来决定 寄存器组。RS1 (PSW.4RS0 (PSW.33组1r 12组101组10r 10组00可位寻址区包括20H-2FH;用户RAMK 30H-7FH;编译器会通过将变量、常 量定义为不同的存贮类型,将它们定位在不同的存贮区中。data/bdata ,定义常量和变量时,编译器会将它们定义在片内 RAME,片内 RAME存放临时性传递变量或使用频率较高的变量。Code存贮数据类
20、型时,编译器将其定位在 ROM® EPRO附,这里存放指令 代码或其它非易变信息。如果定义数据和变量时缺省存贮类型标识符, 编译器会自动选择默认的存贮 类型,有SMALL COMPACT LARGE旨令限定。8051单片机片内有21个特殊功能寄存器(SFR,它们分散在片内RAME的高128 字节中,地址80H-0FFH Xt SFR的操作,只能用直接寻址方式。C51与标C不同之处之一在于引入关键字“ sfr ”Sfr SCON=0x98;Sfr16 T2=0xcc ;需经常单独访问SFR中的位时,使用关键字“ sbit ”。8051单片机芯片内带有4个8位的并行口,共32根I/O 口
21、线。每个口主要 由4部分组成:端口锁存器,即 SFR中的P0 口-P3 口;输入缓冲器;输出缓冲 器;引致芯片外的端口引脚。其中 P1-P3 口为准双向口,P0 口为双向3态口。8051单片机芯片引脚中没有专用的地址总线和数据总线,向外扩展存贮器 和接口时,由P2 口输出地址总线的高8位(A15-A8)。由P0 口输出地址总线的 低8位(A7-A0);同时对P0 口采用总线复用技术,P0 口又兼作8位双向数据数 据总线D7-DQ即由P0分时输出低8位地址或输入输出8位数据。在不做总线扩展时,P0口和P2 口可以作为普通的IO 口使用。除8051芯片上的4个I/O 口以外,还可以在片外扩展硬件I
22、/O 口。8051没有专用的 I/O 指令, 其口地址与数据存贮器地址是统一编址的, 即把一个口当作数据存贮器中的一个单元来看待。8051 的内部口是可以位寻址的,而大部分外部口是字节寻址的。在给口指定硬件扩展电路时, 可以在内部口中设置I/O 控制线和信号线, 而将外部口定义为字节宽度I/O 口, 这样在编程时可大大简化寻址, 并避免使用许多逻辑屏蔽位。在使用 C51 进行编程时, 8051 片内 I/O 口与片外扩展的 I/O 口可以统一在头文件中定义,也可在程序中定义。对于片外扩展I/O 口, 根据硬件译码地址, 将其视为片外数据存贮器的一个单元,使用“ #define ”语句进行定义。
23、位变量的 C51 定义的语法和语义。函数课包含类型为“ bit ”的参数,也可将其作为返回值。 位变量不能定义为一个指针, 不存在位数组, 在位定义中允许定义存贮类型,位变量都被放入一位段中。但存贮类型被限制为 data 或 idata 。可位寻址对象指可以字节或位寻址的对象,该对象应位于 8051 片内可位寻址的RAME。C51算术运算符包括+, - , X, /, %。乘除,求余运算符优先级大于加减。可以用强制类型转换运算符改变运算优先级。 C51 关系运算符包括<, >, <=, >=,=, ! =,前4 个优先级相同大于后 2 个。关系运算符低于算术运算符,高于
24、赋值运算符。C51逻辑运算符包括&& | ,!。C51位操作运算符,&和|。自增减运算 符+i , -i , i+ , i-。C51 流程控制语句一、C51程序的基本结构及流程图C51程序基本架构包括顺序结构,选择结构,循环结构。选择结构又包括申行多分支和并行多分支。顺序结构是一种基本的, 简单的编程结构。 这种结构中, 程序由低地址向高地址顺序执行指令代码。选择结构中,程序首先对一个条件语句进行测试。当条件为“真”时,执行一个方向上的程序流程。所有的分支结构都使程序流程一直向前执行而使用循环结构可使分支流程重复地执行。二、选择语句选择语句之一if 语句的三种形式:if
25、 (表达式) 语句 ;if (表达式) 语句 1else 语句 2 ;if (表达式 1) 语句 1else if( 表达式2)语句2else语句m;if 语句嵌套:if()if() 语句 1else 语句 2elseif()语句3else 语句4switch/case 语句switch()case常量表达式1: 语句1break ;case常量表达式2: 语句2break ;Default : 语句 nbreak ;三、循环语句作为构成循环结构的循环语句,一般是由循环体及循环终止条件两部分组成。 一组被重复执行的语句成为循环体, 能否继续执行下去取决于循环终止条件。实体循环语句包括以下三种,
26、 while 语句, do-while 语句, for 语句。while 语句的一般形式:while( 表达式 ) 语句 / 循环体 /do-while 语句的格式:do 执行语句 / 循环体 /While( 表达式 )for 循环语句的一般形式:for( 表达式1;表达式2;表达式3) 执行语句 C51 构造数据类型一、数组C 语言具有使用户能够定义一组有序数据项的能力。 这组有序的数据即数组。数组是一组具有固定数目和相同类型成分分量的有序集合。 其成分分量的类型为该数组的基本类型。 如整型变量的有序集合称为整型数组, 字符型变量的有序集合称为字符型数组。 这些整型或字符型变量是各自所属数组
27、的成分分量, 称为数组元素。一维数组的定义方式:类型说明符,数组名 整型表达式 例如 int idata a6= ;二维数组的定义方式: 类型说明符,数组名 常量表达式 1 常量表达式 2存取方式,顺序,按行存取,先存取第一行,依次下来。字符数组的存储两种方式:一种方式例如: char a10=B , E , I , , J , I , N , G , O ;另一种方式例如: char a10=“BEI JING” ; C 编译器会自动在字符末尾加上结束符 O ( NULL) ,因此,字符数组的元素数目一定要比字符多一个。二维字符数组,第一下标是字符串个数,第二个下标是每个字符串长度。如, u
28、charcode msg17= ;第二个下标个数必须指定。二、指针指针是C语言中的一个重要概念,也是C语言的重要特色之一。C语言区别于其他高级设计语言的主要特点就是它在处理指针时所表现出的能力和灵活性。使用指针可以有效地表示复杂的数据结构, 有效而方便的使用数组; 动态的分配存贮器,直接处理内存地址,在调用函数时还能输入或返回多于 1 个的变量值。使用指针可以使程序简洁、紧凑、高效。为了了解指针的基本概念, 必须了解数据在内存中是如何存贮和读取的。 一 且程序中定义了一个变量,C编译器在编译时就给这个变量在内存中分配相应的 内存空间。通常C语言系统对一个整型变量分配两个字节的内存空间单元,对一
29、个字符型变量分配一个字节内存单元,一个浮点型变量分配4 个字节内存单元。对于变量需要区分变量名和变量值的概念。 前者是一个数据的符号, 后者是一个数据的内容。对于内存单元区分两个概念,一个是内存单元地址,一个是内存单元内容。前者是内存对该单元的编号, 它表示着该单元在整个内存中的位置。 后者指在该内存单元中存放着的数据。 在变量和内存单元的对应关系中, 变量的变量名与内存单元的地址相对应,变量的变量值与内存单元的内容相对应。内存中变量名 a,b,c 是不存在的, 对于变量值的存取通过地址进行。 两种访问方式,直接访问和间接访问。直接访问找地址,取变量值。间接访问,找存放变量 a 的地址的内存单
30、元的地址。 取出变量 a 的地址, 然后从找到的 a 的地址中 再取数据变量值。对于指针弄清两个概念,变量的指针和指向变量的指针变量(指针变量) 。变量的指针就是变量的地址, 指向变量的指针变量, 一个变量专门用来存放另一 个变量的地址。指针变量的定义:类型识别符 * 指针变量名例如 int *ap; float *pointer指针变量的赋值, 指针变量的引用是通过取地址运算符&来实现。ap=&a;( ap为指针变量, a 为变量,&为取地址运算符)通过指针和指针变量来对内存进行间接访问,就需要用到指针运算符“ *” 。“ * ”在指针变量定义和指针运算所代表的含义不
31、同。当定义时, *ap 中的“ *”是指针变量类型说明符;当 x=*ap 时, “* ”是指针运算符。例如: int *ap, int a, ap=&a; *ap=a; &*ap=&a; *&a 与 a 等价。*ap+=a+。uchar data *xdata zz ,外部RAMM旨针指向内部 RAMft据。数组指针和指向数组的指针变量,数组的指针=数组的起始地址,指向数组的指针变量。例如: int a10;int *app; app=&a0;app=a( 数组名 a 可以代表数组 a10 的首地址 ) 。合起来定义: int *app=&a0;
32、int *app=a;当定义完后, app=&a0 ;通用指针引用数组元素: app=&a0 , 则 app+i=a+i 是数组元素 ai 的地址。* ( app+i )或 * ( a+i )是 app+i 或 a+i 所指向的数组元素,即 ai ;指针变量可带下标 appi=*(app+i) ; app+1 是指向数组首地址的下一个元 素。指针变量的运算: p+, p 指向下一个单元*p+=*( p+)*p+,*+p(*p)+,指向的元素值加1,而非指针变量加 1。指向多维数组的指针和指针变量:p-a34 , p=a, p+1=a+1; p+2=a+2;指向第几行首址。* (
33、p+1)+3=&a13 ,指向 a13 的地址;* (*(p+1)+3)=a13 ,表示 a13 的值;* (p+i)+j 相当于 &aij ,第 i 行第 j 列地址;* (*(p+i)+j) 相当于 aij;“基于存贮器的”指针和“一般”指针,两种类型“基于存贮器的” 指针以存贮器类型为参量, 存贮器类型定义即可放在定义的开头,也可直接放在定义的对象名之前。例如: char xdata *data pdxdata char xdata *pdx两者等价。一般指针(包含 3 个字节, 2 个字节偏移和 1 个字节存贮器类型) ;将常数值 0x41 写入地址为 0x8000 的
34、外部数据存贮器。#define XBYTE(char *)0x20000l)XBYTE0x8000=0x41三、结构C 语言的重要特点之一,是具有构造数据类型的能力,它可以在诸如字符,整型, 浮点型等简单数据类型的基础上, 按层次产生各种构造数据类型, 如数组、指针、 结构和共用体等。 前面已经讨论了数组和指针两种构造数据类型, 但是仅有这些是不够的, 有时还需将不同类型的数据组成一个有机的整体, 这些组合在一起的数据就是结构。C 语言中的结构,就是把多个不同类型的变量结合在一起形成的一个组合型变量,称为结构变量。这些不同类型的变量可以是基本类型、枚举类型、指针类型、 数组类型或其它结构类型的
35、变量。 这些构成一个结构的各个变量称为结构元素,它们定义规则与变量名相同。结构类型的一般形式为:struct 结构名结构成员说明;结构成员说明的格式为:类型标识符 成员名;例如: struct dateint month;int day;int year;定义一个结构的变量的方法有三种:1. 先定义结构的类型,再定义该结构的变量名struct dateint month;int day;int year;date date1,date2;/ 定义结构的变量名 /2. 在定义结构类型的同时定义该结构的变量struct dateint monthint day;int year;date1,dat
36、e2;3. 直接定义结构类型变量 struct int year;int month;int day;date1,date2, ,date n;结构类型变量的引用, 对于结构类型变量的引用遵守如下规则: 结构不能作为一个整体参加赋值、 存取和运算, 也不能整体的作为函数的参数, 或函数的返 回值。对结构所执行的操作,只能用&运算符取结构的地址,或对结构变量的成员分别加以引用。引用的方式:结构变量名 . 成员名;如果结构类型变量的成员本身又属于一个结构类型变量, 则要用若干个成员运算符“ . ” ,一级一级的找到最低一级成员,只有最低一级成员才能参加赋值、存取或运算。 “->” 和
37、“ . ”符号等同。结构数组的定义,当数组中的每个元素都具有相同的结构类型的结构变量,则称该数组为结构数组。结构数组与变量数组不同之处, 就在于结构数组的每一个元素, 都是具有同一个结构类型的结构变量,它们都具有同一个结构类型,都含有相同的成员项。例如: struct dateint month;int day;int year;struct date date110;指向结构类型数据的指针, 一个指向结构类型数据的指针, 就是该数据在内存中的首地址。 我们也可以设一个指针变量, 把它指向一个结构数组, 此时该指 针变量的值就是结构数组的起始地址。指向结构体变量的指针变量的一般形式为:stru
38、ct 结构类型名 * 指针变量名;或 struct 结构成员说明* 指针变量名;指向结构变量的指针变量的一个实际的应用例子就是对信息进行传输, 一个任务使用 “传送一条信息” 的方法与另一个任务进行通信。 这个传送操作包括传 送信息结构变量的指针变量,这个指针变量是向接收任务传递的信息或指针。指向结构数组的指针变量的一般形式:struct 结构数组名* 结构数组指针变量名;或: struct 结构成员说明* 结构数组指针变量名 ; 共用体和枚举在这不做重点讲解。函数一、函数的调用函数调用的一般形式为:函数名(实际参数列表) ;对于有参数函数, 若包含多个实际参数, 应将各参数之间用逗号分隔开。
39、 主 调用函数的数目与被调用函数的形式参数的数目应该相等。 实参和形参按照实际 顺序一一对应传递数据。如果调用的是无参数函数, 则实际参数表可以省略, 但函数名后面必须有一 对空括号。函数调用的方式有以下三种:1函数调用语句,即把被调用函数名作为主调用函数中的一个语句。此时并不要求被调用函数返回结构数值,只要求函数完成某种操作。2函数结果作为表达式的一个运算对象,此时被调用函数以一个运算对象的身份出现在一个表达式中,就要求被调用函数带有return 语句,以便返回一个明确的数值参加表达式的运算。4. 函数参数。即被调用函数作为另一个函数的实际参数。对被调用函数的说明:1. 被调用函数必须是已经
40、存在的函数(库函数或用户自定义函数)2. 如果函数中使用了库函数,或不在同一个文件中的另外自定义函数,则应该在程序的开头处用 #include 进行包含语句, 将所需要的函数信息包 含到程序中来。3. 如果程序中使用了自定义函数, 则该函数与调用函数同在一个文件里面,则应根据主调用函数和被调用函数在文件中的位置,决定是否对被调用函数作出说明。用函数指针变量调用函数,一个函数在编译时,C编译器会给它分配一个入口地址。 这个入口地址被称为函数的指针。 我们可用一个指针变量指向函数, 然 后通过该指针变量调用函数。例如: int (*p)( ); 函数指针变量定义int factorial(n)p=
41、factorial / 函数指针变量指向函数的入口地址/使用时直接用指针变量调用函数即可:C=factorial(j);C=(*p)(j);如果一个函数指针变量不对他进行赋值, 是不能固定指向某个函数的, 它是专门用来存放函数的入口地址的。 给函数指针变量赋值时, 只需给出函数名, 不必给出参数。二、数组、指针作为函数的参数当用数组名作为函数的参数时, 应该在调用函数和被调用函数中分别定义数组。 只有这样, 作为调用函数的实际参数数组全部元素, 才能顺利地传递到被调用函数的形式参数数组中。实参数组和形参数组的类型应该一致,否则导致结果出错。实参和形参的大小可以一致也可以不一致,形参数组不应大于
42、实参数组。用指向函数的指针变量作为函数的参数。 函数指针变量常用途之一就是把指针作为参数传递给其他函数。例如:主函数: main()sub(f1,f2);子函数: sub(x1,x2)int (*x1)( ), (*x2)( );a=(*x1)(i);b=(*x2)(i,j);形参被定义为指向函数的指针变量。用指向结构的指针变量作为函数的参数。 用指向结构变量的指针变量作为实际参数,将结构变量的地址传递给被调用函数的形式参数。例如: struct record;void show(p)struct record *pmain()struct record note;show (¬
43、e);第三章EDA软件、教学目的和要求通过本章节的讲解要求学生掌握电子产品设计研发所必备的软件。 具体包括KEIL编程编译调试软件、Proteus电路仿真设计软件、PROTEL99SE制电路板设计软件等。二、教学重点2.1 KEIL 编程编译调试软件学习2. 2 PROTEUS 电路仿真设计软件学习2.3 PROTEL99SE 印制电路板设计软件学习三、教学难点如何将KEIL与PROTEUS合搭建仿真平台KEIL uVision3 编程、编译、调试软件KEIL uVision3 是德国 KEIL Software 公司针对 51 系列单片机推出的基于32位windows环境,高效率的C语言开发
44、平台。它是一个功能强大的单片机集 成开发环境,主要包括:C51交叉编译器、A51宏汇编器、BL51连接/重定位器、 LIB51 库管理器、 OH51 Intel HEX 格式文件转换器、 RTX-51 实时操作系统以及单片机软件仿真器Dscope51。uV3将项目管理、源代码编辑、程序调试等集成到 了一个功能强大的windows32平台中。具C编译工具在产生代码的准确性和效率 方面达到了较高的水平,对C语言的编译支持几乎达到了完美的程度,当然它也同样支持 A51 宏汇编。uV3 内嵌多种灵活的控制选项,作为大项目的开发尤其理想。我们将通过上机实践来讲授KEIL 软件的使用,如何在编辑器模块里面
45、建立项目,编写、编译、调试应用程序,同时会结合PROTE脂真软件,搭建仿真平台, 再不接触到任何硬件的前提下完成电路原理图的仿真, 检验编写程序的效率 和可行性。基于8051的C语言编程的Proteus仿真软件一、Proteus概述Proteus是一款集单片机仿真和SPICE分析于一身的EDA©真软件,于1989 年由英国Labcenter Electronics Ltd研发成功。除具备和其他 EDAX具一样的 原理图设计、PCB自动生成及电路仿真的功能外,最大特点是 Proteus VSMK现 了混合模式的SPICE电路仿真,他将虚拟仪器、高级图标仿真、微处理器软仿真 器、 第三方
46、的编译器和调试器等有机结合起来, 实现了在硬件物理模型搭建成功 之前, 即可在计算机上完成原理图设计、 电路分析与仿真、 处理器代码调试及实 时仿真、系统测试、以及功能验证。二、KEIL与Proteus结合搭建仿真平台KEIL 本身带有调试、软件仿真,但并没有跟硬件结合起来,因此,即使软件调试运行的再好,也没办法跟验证是否适合于硬件,因此将KEIL软件与Proteus 仿真软件结合,搭建仿真平台,通过绘制硬件原理图,调用实际的仿真工具,通 过在 KEIL 中对程序的调试,直接就可以输出测试在硬件原理图中的运行效果, 观测输出结果的正确与否来判断我们编写的应用程序的可行性和硬件电路的可 行性,
47、做到完全未接触到物理硬件器件时就已经完成了仿真调试工作。 为后续搭 建硬件平台,测试硬件电路打下良好的基础。在调试过程中我们会讲解具体的仿真器件的使用,调试方法和步骤,让同学们做到有的放矢,轻松自如的学习、实践和操作这两款软件。PROTEL99SE制电路板设计软件印制电路板为硬件电路的实现搭建了一个良好的平台, 因此一款印制电路板设计的好坏直接关系到我们是否能实现硬件原理图的功能。 以下是整个印制电路板的设计流程。我们的任务就是让同学们一天时间学会PROTEL99SE业级的原理图绘制和印制板设计,做到游刃有余,轻松自如。第一课:元件库制作1. 创建相关工作目录;2. 下载安装软件;3. 制作
48、SCH 元件库;4. 制作 PCB 元件库。第二课:原理图和PCB®作1. 设计原理图的准备工作;2. 添加元件库;3. 页面设置,图纸设置;4. 设计原理图(层次原理图设计)5. 自动编号;6. DRg能;7. 全局更改功能添加封装;8. 输出原件清单;9. PCBS计准备工作;10. 规划版框;11. 设置安装孔;12. 导入网络表;13. 原理图交互布局;14. 布线规则设置;15. 自动布线;16. 手工布线;17. 布线推挤;18. 添加文字;19. PCB 铺铜;20. PCB DRC;第三课:相关经验介绍1. 如何把大的 IC 在 PROTEL99SE 中分开做;2.
49、如何在Protel99SE PCB 中新增加一个元件;3. 如何在PROTEL99SE PCB文件中快速提取封装;4. PROTEL 如何打开 ORCAD 原理图文件;5. AD8 如何使用 99SE 的库;6. 四层板和多层板的设计方法;7. PROTEL99SE 输出 CAM 的方法;8. 英文版 99SE 如何加汉字;9. PROTEL 另外一种铺铜的方法;10. PROTEL99SE 如何为没有网络的PCB 添加网络;11. 在PCB中加入图片;12. 如何在PCB中制作出方孔;13. AD6.9中如何使用PROTEL99SE的原件库;第四章 趣味电子产品设计与制作一、教学目的和要求要
50、求学生在掌握上述已有教学内容的基础上,实际动手设计制作2、3款小型电子产品。做到独立设计项目书编制、硬件器件选型、电路原理图绘制、印制 电路板设计制作、程序编制、软件仿真、搭载焊接硬件电路、调试实现其功能。二、教学重点2.1原理图的论证实现、硬件器件的选型2. 2运用设计软件进行原理图绘制、PCB印制板设计、电路仿真等 三、教学难点如何将整个设计项目从头到尾设计制作完成,培养具备整体项目设计思维和能力。实作电子产品1电子时钟软硬件设计1、电子时钟硬件电路设计任何电子产品设计都无外乎从硬件和软件两方面来考虑。两者相互之间是有机配合,当两者配合良好时就是产品设计成功时。硬件设计综合考虑的因素较多,
51、 按照项目设计研发的要求,应该首先根据市场需求初步设计电子时钟产品应该具 备的基础功能;其次完善项目设计书;再次考虑成本、效率、和可行性问题来对 硬件器件进行选型;然后设计硬件电路,通过绘制硬件电路图来实现;再未搭建 物理硬件之前进行硬件电路的仿真(需结合后续编写的控制程序共同完成);最后设计印制电路板作为硬件电路搭建的平台。 本次电子时钟产品设计的硬件电路 如图1所示。尸二二 HL F 二二 f*2! FA图1电子时钟硬件电路图L.nHXI: i NWId r i TTiI I WI7 imIf I M I' MGIrIr111T lr-ll;u,-«>T32、电子时
52、钟软件设计控制程序的编写无疑是对一个人综合逻辑思维能力的一次考验,需具备良好的数学逻辑思维能力,良好的程序语言编写基础,掌握一定的编写技巧。首先是 根据电子钟实现的功能和已经做了的硬件元器件选型进行项目任务书编制;其次根据任务书绘制程序流程框图;再次根据程序流程框图的定义进行 C应用程序的 编制;然后调试应用程序,并借助仿真软件一起联调,最后在无任何错误的情况 下搭载硬件电路,焊接元器件,烧写下载应用程序,调试实现其功能。电子时钟软件设计的程序流程框图如图 2所示。定时器0中断入口时间及日期运行处理按键处理返回主函数结果显示图2程序流程框图实作电子产品2数字温度计软硬件设计1、数字温度计硬件电
53、路设计用一片DS18B20构成测温系统,测量的温度精度达到0.1度,测量的温度的 范围在一20度到+50度之间,用4位数码管显示出来。具体的硬件电路图如 图3所示。4DS18B2OPidVCCPl.lMOPl JPCIPJ JP02PI 4P03Pl .5Pfi4Pl.d Pl:PC 5K6RSIA'PDPt' 7P3 .( RxDEA'VppPMlxALt PROGP: 2INI0PSENP3 3INT1P2.7Pi.4 10P2.6pr F门5P3.d WBP2.4巴RDP2JXFAI2P?2XFAL1P2.1GNDP2.01 TT TT u TT TF 1_ IT
54、 n=AT89s52图3数字温度计硬件电路图DS18B20 数字温度计是DALLAS公司生产的1Wire,即单总线器件,具有 线路简单,体积小的特点。因此用它来组成一个测温系统,具有线路简单,在一 根通信线,可以挂很多这样的数字温度计。DS18B20产品的特点(1)、只要求一个I/O 口即可实现通信。(2)、在DS18B20中的每个器件上都有独一无二的序列 号。(3)、实际应用中不需要外部任何元器件即可实现测温。(4)、测量温度范围 在一55°C到+125。C之间。(5)、数字温度计的分辨率用户可以从 9位到12位 选择。(6)、内部有温度上、下限告警设置。DS18B20详细弓唧功能描述1 GND地信号;2 DQ数据输入/输出引脚。开漏 单总线接口弓I脚。当被用着在寄生电源下,也可以向器件提供电源;3 VDD可选择的VDD引脚。当工作于寄生电源时,此引脚必须接地。DS18B20的使用方法。由于DS18B20采用的是1Wire总线协议方式,即在一根数据线实现数据的双 向传输,而对AT89S51单片机来说,我们必须采用软件的方法来模拟单总线的 协议时序来完成对DS18B20芯片的访问。由于DS18B20是在一根I/O线上读
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年特许金融分析师考试考试账户设置试题及答案
- 2024年特许金融分析师考试中的伦理问题探讨及试题及答案
- CFA备考常见问题解答试题及答案
- 减脂餐厅创业项目
- 投资策略的动态调整方法试题及答案
- 攻克考试难点的CFA试题及答案技巧
- 领导干部安全生产课件
- 预防网络金融诈骗
- 口腔专科护理操作流程
- 全球经济一体化的趋势与挑战试题及答案
- 2023年公文写作考试题库(含答案)
- 《化妆品技术》课件-乳化类底妆
- 山东省市烟台市牟平区2023-2024学年(五四学制)七年级下学期期中考试语文试题
- GB/T 20001.1-2024标准起草规则第1部分:术语
- DB11T 1197-2024 住宅全装修设计标准
- (正式版)SHT 3223-2024 石油化工给水排水泵站设计规范
- DB13T5614-2022 变配电室安全管理规范
- 中职《电子技术基础》测试考试复习题库(含答案)
- JTT329-2010 公路桥梁预应力钢绞线用锚具、夹具和连接器
- 办公设备投标方案(技术方案)
- 双凤镇英武水库规划方案
评论
0/150
提交评论