全套电子课件:单片机应用技术(C语言)_第1页
全套电子课件:单片机应用技术(C语言)_第2页
全套电子课件:单片机应用技术(C语言)_第3页
全套电子课件:单片机应用技术(C语言)_第4页
全套电子课件:单片机应用技术(C语言)_第5页
已阅读5页,还剩457页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 冰箱 全自动洗衣机 楼宇防盗设备 智能电饭煲 电子琴玩具 大屏幕呼叫系统 数控铣床 数控车床汽车 血压计 呼吸机心电监护仪任务1 认识单片机任务2 了解单片机的硬件结构任务3 单片机最小系统设计任务1 认识单片机1了解单片机的基本概念及发展史。2掌握AT89S51单片机的封装及引脚定义。3了解AT89S51单片机的主要功能特性。在利用单片机实现预定的设计目标前,首先需要对单片机有一个基本的了解。本任务的目的就是使读者对单片机形成一定的感性认识,学会识别不同封装形式单片机的引脚编号,并掌握各个引脚功能的定义。一、单片机的概念单片机是采用超大规模集成电路技术把具有数据处理能力的中央处理器(CPU

2、)、随机存储器(RAM)、只读存储器(ROM)、I/O接口电路、中断系统及定时/计数器等主要计算机部件集成到一块芯片上,使其具有计算机的基本功能,称为单片微型计算机(Single Chip Micro Computer,SCMC),简称单片机。二、单片机的发展史第一阶段(19761979)单片机的探索阶段Intel公司MCS-48为代表 第二阶段(19791982)单片机的完善阶段Intel公司MCS-51为代表 第三阶段(19821990)16位单片机推出阶段Intel公司MCS-96为代表 第四阶段(1990至今)微控制器全面发展阶段 Microchip PIC Motorola 为代表

3、MC68HC三、单片机的封装形式及引脚定义PDIP封装形式的AT89S51单片机的引脚描述引脚定义引脚编号功能描述VCC40电源引脚,接+5V电源GND20接地引脚,接+5V电源地XTAL1和XTAL219和18时钟引脚,外接时钟电路RST9复位引脚,用于单片机复位P0.0P0.7(P0口)39321.作为8位双向I/O口使用2.在访问外部存储器或外部接口电路时,分时用作低8位地址线和数据总线P1.0P1.7(P1口)181.作为8位准双向I/O口使用2.用于ISP编程下载(P1.5、P1.6、P1.7)(续表)引脚定义引脚编号功能描述P2.0P2.7(P2口)21181.作为8位准双向I/O

4、口使用2.在访问外部存储器或外部接口电路时,分时用作高8位地址线P3.0P3.7(P3口)10171.作为8位准双向I/O口使用2.具有第二功能(详见课题五中具体应用) /Vpp31外部/内部程序存储器使能端29外部程序存储器读选通信号端ALE/ 30地址锁存允许信号端四、AT89S51的功能特性兼容MCS-51系列产品。4KB Flash存储器,支持 在线编程,可反复擦写 1 000次。 128B片内RAM。 工作电压4.55.5 V。 全静态时钟033 MHz。 32个双向I/O口线。 2个16位定时/计数器。 5个中断源,2个中断优 先级。 1个全双工UART串行口。看门狗定时器。低功耗

5、空闲和省电模式。生产厂家类别型号举例图 片ATMEL公司AT89系列AT89C2051(DIP封装)AT89S52(DIP封装)AT90系列(AVR单片机)ATmega48(QFP封装)查找资料,了解常见的其他类型单片机。生产厂家类别型号举例图 片STC公司STC单片机STC89C52RC(DIP封装)MicroChip公司PIC单片机PIC16F877A(DIP封装)PHILIPS公司51LPC系列LPC2148FBD64(LCC封装)生产厂家类别型号举例图 片TI公司MSP430系列MSP430F1612(QFP封装)TMS370系列TMS370C722FNT(LCC封装)Motorola

6、公司MC68HC908系列MC68HC908SR12CB(DIP封装)单击此处返回目录任务2 了解单片机的硬件结构 1了解AT89S51单片机的内部结构。2了解AT89S51单片机I/O端口的结构特点。3掌握AT89S51单片机I/O端口的使用方法。设计单片机应用系统,不仅要进行程序的设计,还要进行硬件电路的设计。因此,设计时要求设计者对单片机的硬件结构要有一定的了解。本任务就是要在了解单片机内部结构的基础上,掌握单片机I/O端口与外围电路的合理设计方法。一、单片机内部结构单片机各组成部分说明组成部分说 明中央处理器(CPU) 单片机的核心部件,是8位数据宽度的处理器,能处理8位二进制数据或代

7、码,CPU负责控制、指挥和调度整个单元系统协调地工作,完成运算和控制输入输出功能等操作数据存储器(RAM) 内部有256B的RAM,其中包含128B用户数据存储单元(地址为00H7FH)和128B专用寄存器单元(地址为80HFFH)程序存储器(ROM) 内部有4KB掩膜ROM,用于存放用户程序,原始数据或表格定时/计数器(T0、T1) 含有两个16位的定时/计数器(T0、T1),以实现定时或计数功能组成部分说 明并行输入输出(I/O)口 共有4组8位并行I/O口(P0、 P1、P2和P3),用于单片机与外围设备之间的数据传输全双工串行口 内置一个全双工串行通信口,用于与其他设备间的串行数据传送

8、,该串行口既可以用作异步通信收发器,也可以当同步移位器使用中断系统 共含有5个中断源(2个外部中断、2个定时/计数器中断和1个串行中断),并具有2级的优先级别选择时钟电路 需外接晶振和微调电容构成振荡电路,产生单片机运行的脉冲时序(续表)二、单片机的I/O端口 AT89S51单片机有4个并行的I/O端口,即P0、P1、P2和P3口。每个端口均由8个引脚(即8位)构成,包括一个锁存器、一个输出驱动器和一个输入缓冲器。 P0口为双向8位三态I/O口,作为通用I/O口时,每一位能以吸收电流的方式驱动8个TTL负载。当用于外接存储器或者扩展I/O接口时,作为数据总线(D0D7)和地址总线(A0A7)的

9、低8位(分时复用,通过ALE信号区分)。CPU可对其按字节方式或位方式进行操作。1P0口 P0口为漏极开路输出端口,即漏极没有电阻接至电源。作为I/O口输出时,输出低电平为“0”,但输出高电平为高阻态(并非+5V,相当于悬空状态),也就是说P0口不能真正地输出高电平,因此在使用时需外接上拉电阻,由电源通过这个上拉电阻给负载提供电流,如右图所示。P0口作为通用I/O口时,要外接上拉电阻才能输出高电平,上拉电阻的阻值由外部负载电流决定;当作为地址/数据总线时,无需外接上拉电阻,此时不能再作通用I/O口使用。P1口为8位准双向I/O口。使用时与P0口相似,但其内部具有提升电路,由于输入不能锁存,必须

10、先输出1才能正确读出端口电平,故称为准双向口。作为通用I/O口使用时可以直接驱动4个TTL负载。 2P1口 P1.5:MOSI端(用于ISP编程,主出从入数据端)。 P1.6:MOSO端(用于ISP编程,主入从出数据端)。 P1.7:SCK端(用于ISP编程,串行时钟输入端)。同时P1口的部分引脚还具有第二功能: P2口为8位准双向I/O口。当用作通用并行I/O口时,其操作方式与P0、P1口类似,每一位可驱动4个TTL负载。当用于外接存储器或者扩展I/O接口时,P2口作为扩展的高8位地址(A8A15)总线口,与P0口共同构成16位地址总线(A0A15)。 3P2口引脚符号名称功能P3.0RXD

11、串行数据接收P3.1TXD串行数据发送P3.2外部中断0输入P3.3外部中断1输入P3.4T0定时器0的外部输入P3.5T1定时器1的外部输入P3.6外部数据存储器写信号P3.7外部数据存储器读信号 P3口为8位准双向口,其结构和操作方式等与P2口类似。同时P3口还可按位复用为第二功能,具体见下表。 4P3口三、单片机I/O口的读写操作 P0口作为输出口使用单片机最小系统P2口作为输入口使用 单片机的4个I/O口在使用时,当某一端口既作输入又作输出使用,且要进行输出转输入操作时,需先将该端口写“1”然后再读。 例 P1口在输出转输入操作时的软件编程方法。 汇编:MOV P1,#23H C51:

12、P1 = 0 x23; / P1口作输出口使用 MOV P1,#0FFH P1 = 0 xff; / 先将P1口置“FF” MOV A,P1 ACC = P1; / P1口由输出转输入口若端口只作输入口使用,则读数时不必再向端口先写“1”。 已知P0口内部位结构图如下图所示,试查找相关资料分析为何当P0口输出高电平时需外接上拉电阻。单击此处返回目录任务3 单片机最小系统设计1了解单片机最小系统各部分的组成及功能。 2掌握单片机最小系统的设计与制作方法。 单片机是一种微控制器,而任何微控制器正常工作最基本的条件是要有正确的电源、时钟和复位电路(即最小系统),三者缺一不可。因此,在所有的单片机应用

13、电路中,单片机必须满足以上三个条件才能正常运行工作。本任务就是要认识单片机最小系统的组成及各部分的作用,并最终完成单片机最小系统的设计与制作,这是每一位设计者必须掌握的最基本的硬件电路设计知识。一、电源电路 单片机的工作电压 单片机要想工作,首先要有为整个系统提供电源的供电模块。电源模块的稳定可靠是系统平稳运行的前提和基础。 51系列单片机工作电源的电压一般为+4.5+5.5 V,典型值为+5V,即将单片机的VCC脚接+5V电源,GND脚接地。 二、时钟电路 单片机的“心脏”即单片机内部的高增益反向放大器通过XTAL1、XTAL2引脚外接作为反馈元件的片外晶体振荡器(呈感性)与电容组成的并联谐

14、振回路构成一个自激振荡器,向内部的时钟电路提供振荡时钟。1内部时钟方式外部时钟方式常用于多片51单片机同时工作,以便于同步。它是将外部振荡脉冲信号通过CMOS门电路输入至XTAL1脚,XTAL2脚悬空,如下图所示。时钟电路异常也会引起单片机CPU不工作,可通过测量ALE脚是否有六分频信号输出来判断振荡电路是否起振。2外部时钟方式3时序51系列单片机的一个机器周期由12个振荡周期组成,分为6个状态,分别称为S1、S2、S3、S4、S5、S6,每个状态都包含P1和P2两相。振荡周期、状态周期、机器周期和指令周期的关系如下:例AT89S51外接晶振频率为12 MHz,则4个时间周期的具体值为:解:振

15、荡周期 1/12s状态周期 2振荡周期 1/6s机器周期 6状态周期 1s指令周期 (14)机器周期 1 4s三、复位电路单片机恢复初始状态值1硬件复位上电复位电路 上电与按键均有效的复位电路 2软件复位即看门狗复位,AT89S51内部自带看门狗定时器,由一个14位定时器及WDTRST(Watch Dog Time RST)寄存器构成。利用软件控制看门狗定时器,当系统进入死循环(程序跑飞)时,看门狗定时器自动复位,让系统恢复正常运作状态。一、画出单片机最小系统电路原理图步骤说明示范图片1材料准备参照元器件清单表二、备料三、硬件电路焊接及调试过程 步骤说明示范图片2硬件焊接注:单片机的 /VPP

16、端接电源,选内部存储器电路板元件布局图电路板背面 / Vpp端GNDVCC(+5V)步骤说明示范图片3通电调试最小系统运行图单击此处返回目录任务1 Proteus ISIS 7.5软件的使用任务2 Keil C51 Vision3软件的使用 任务1 Proteus ISIS 7.5软件的使用 1熟悉Proteus ISIS 7.5仿真软件的集成工作环境。2掌握Proteus ISIS 7.5仿真软件的基本使用方法。 通过绘制、编辑跑马灯控制电路原理图,熟悉Proteus ISIS 7.5仿真软件工作环境,并完成软件系统和硬件系统的连接调试。一、进入Proteus ISIS的方法方法1:双击桌面

17、上的ISIS 7 Professional图标“ ”。方法2:单击“开始”“程序”“Proteus 7 Professional” “ISIS 7 Professional”命令 。二、工作界面一、新建设计文件1打开Proteus ISIS 工作界面,单击 “文件” “新建设计”命令,弹出模板选择窗口,选择好模板后单击“确定”按钮。 模板选择窗口2单击“文件”“保存设计”命令,在弹出的保存窗口中设置好保存路径和文件名,最后单击“保存”按钮,则完成新建设计文件的保存。保存窗口在“ ”按钮中单击“P”按钮进入元器件选择窗口。二、添加元器件添加元器件主要有两种方法:1在关键字文本框中直接输入所需元件

18、名称,则会在元件列表区出现与关键字相匹配的元件列表。选中所需元件,单击“确定”按钮或直接双击,便可将器件添加到ISIS的对象选择器窗口中。2在元件类别列表中选择元件所属类,然后在元件子类别列表中选择所属子类,再从元件列表区选择出所需元件。三、元件的放置、移动、旋转、删除和属性设置1放置在对象选择器中单击选中要放置的元件,然后将光标移动到原理图的编辑区,在任意位置单击鼠标左键,即可出现一个随光标浮动的元器件原理图符号,移动光标到适当位置再单击鼠标左键即可完成该元器件的放置。2移动在原理图编辑窗口中,左击选中需要移动的元件(默认选中时为红色),再按住鼠标左键拖动元件至适当位置,释放鼠标左键,并左击

19、空白处撤销选中状态,即可完成元件的移动。3旋转放置元件前,在对象选择器窗口先选中要旋转的元件,再根据需要单击“ ”方位控制按钮,即可更改元件的放置方向。4删除方法1:右键双击该元件;方法2:先左击选中该元件,再按下“Delete”键删除。5属性设置用鼠标左键双击要编辑的元件,可弹出编辑元件窗口对元件相关属性进行设置。元件的放置、移动、旋转、删除和属性设置操作均可通过右击该元件,弹出如图所示的快捷菜单来操作完成。四、放置电源、地单击“ ”图标,选中“POWER” 行,将鼠标移到原理图编辑窗口的适当位置再单击,便可引入“电源”。选中“GROUND”,便可引入“地”。五、元器件的连线1两个对象之间的

20、连线 引脚间直接连线任意角度的连线设定路径连线 2总线与分支线的画法 (1)单击总线按钮“ ”。总线与分支线之间的连接(2)在合适位置单击鼠标左键放置总线起点,双击鼠标左键放置总线终点。(3)将光标移近对象引脚末端,单击引出分支线,使其终点移近总线并与总线中心相连,同时按住“Ctrl”键,即可画出与总线相连的分支线。 在元件的连线过程中,如果下一次的连线路径与上一次的连线相同,则可在下一个要连元件的引脚上左双击,这样就会形成一条和上一条路径相同的连线。 当电路中多根数据线、地址线、控制线并行时建议使用总线设计。3添加网络标号在Proteus仿真时,系统会默认网络标号相同的引脚是连接在一起的。六

21、、电气检测单击菜单“工具”“电器规则检查”命令进行电气检测。七、仿真运行1双击电路原理图中的AT89C51单片机,在弹出的属性编辑窗口中载入“跑马灯.hex”文件。在仿真运行中,各元件引脚会呈现不同的颜色。例如红点代表输出高电平,蓝点代表低电平,灰点代表高阻状态,黄点表示短路。可以根据引脚的颜色来区分此时引脚输出的状态。2单击仿真运行“ ”按钮开始仿真。单击此处返回目录任务2 Keil C51 Vision3软件的使用1熟悉Keil Vision3的集成开发环境。2掌握Keil Vision3的基本使用方法。3掌握烧录器的使用方法。 在Keil Vision3环境下创建一个C项目,完成程序的输

22、入、项目的编译和调试以及程序的仿真及下载,熟悉Keil Vision3的集成开发环境。一、启动Keil Vision3的方法1双击桌面上的Keil Vision3图标“ ”。2单击“开始”“程序”“Keil Vision3”命令。菜单栏常用工具栏工程文件管理窗口程序编辑区信息窗口二、工作界面 文件工具栏的具体功能描述符号命令符号命令符号命令新建文件右缩进一个制表符返回到之前位置打开文件左缩进一个制表符向前到新位置保存文件在当前行设置书签切换浏览器窗口保存全部文件移光标到下一个书签打印当前文档剪切移光标到前一个书签调试状态切换按钮复制清除所有书签切换工程窗口粘贴在多个文件中查找切换输出窗口撤销查

23、找与替换插入/删除断点重做增加查找删除所有断点设置/关闭断点关闭所有断点创建工具栏的具体功能描述 调试工具栏的具体功能描述 一、创建C项目单击 “Project” “New Project”命令设好路径,单击“保存”在“Data base”区展开Atmel系列单片机,从中选择“AT89C51”,并单击“确定”即完成创建二、新建源程序文件单击 “File”“New”命令或单击“ ”按钮设好路径,单击“保存”程序输入完毕单击 “File” “Save”命令当源程序为C语言程序时,后缀“.C”必须手工输入,这样才能让Keil C51采用对应的C语言方式来编译源程序。若为汇编语言,后缀名为“.ASM”

24、即可。保存成功后,源程序将会以不同颜色显示出来。三、编译文件1 将文件加载到工程文件管理窗口右击“Target 1”下拉菜单中的 “Source Group 1”选择所需文件,单击“Add”,将文件加载到工程文件管理窗口2 编译文件右击“Target 1” “Options for Target Target 1”命令,或直接单击“ ”图标。单击创建工具栏中的编译按钮“ ”,开始编译当前源程序。晶振频率设置勾选创建HEX 文件单击“确定”按钮四、Proteus软件仿真五、程序的烧录EP3.0 程序烧录器用串口数据线将烧录机与计算机的COM口连接好,然后将要烧录的单片机放入编程器IC锁紧座并锁紧

25、。运行程序烧录软件“Easy 51Pro.exe”进行程序的烧录:1检测芯片ID,根据烧录单片机的类型选择具体型号。2单击“(自动)擦除器件”命令,将要烧录的单片机中之前的程序擦除。3单击“(自动)装入文件”命令,添加通过编译后的“*.HEX”或“*.BIN” 文件。4单击“写器件”命令,将所选“*.HEX”或“*.BIN”文件写入单片机。5单击“(自动)效验数据”,检验数据是否出错,当提示“效验成功,数据正确”时,说明此次烧录成功。6取下单片机,插入电路板,观察实际运行情况。烧录完成后状态信息单击此处返回目录任务1 C51程序结构及内部单元赋值操作任务2 C51运算符的应用任务3 选择语句的

26、应用任务4 循环语句的应用任务5 指针的定义及引用任务1 C51程序结构及内部单元赋值操作 1了解C51程序的基本结构。2掌握C51语言的数据类型 。3利用绝对地址方式访问片内RAM存储单元 。在单片机内部,运行时的程序及数据均存放在存储器中,运行过程中对内存单元的数据操作较为频繁。本任务主要练习如何手动修改单片机内部RAM单元的内容。如对单片机内部RAM存储空间地址为0 x30的单元进行赋值运算操作。一、C51程序基本结构/*点亮单片机P1.0口发光二极管.C*/#include /包含头文件sbit LED=P10; /位定义单片机 /的P1.0口void main( ) /主函数 LED

27、=0; / 点亮P1.0口LED预处理命令main( ) 语句1; / 语句注释 语句2; 1预处理命令 主要包括文件包含(include)、宏定义(define)和条件编译(ifndef)。程序中的“#include ”代码表示在该程序中调用了AT89系列单片机的头文件。常用的还有“#include ”、“#include ”。这个文件中定义了AT89系列单片机内部的特殊功能寄存器(SFR)的所有端口。文件的调用一般位于程序的开头,常见的调用表示方法有两种:(1)#include (2)#include “AT89X51.h”2main主函数一个C程序中有且只有一个main主函数,它是函数的

28、入口。main函数可以调用其他的功能函数,但其他功能函数不能调用main函数。函数后面一定要有一对大括号“ ”,程序就写在大括号里面。main前面的“void”表示“空”,即当main函数执行完后,不返回任何值,编程时可省略不写。main后面的“()”中没有写任何参数,表示了main函数和其他函数间没有任何的参数传递。但后面的“()”必须有,不能省略。 3语句语句是构造函数的主体部分,C程序中的语句大致分为两类:一类为说明语句,用来描述数据,决定内存的分配;另一类为执行语句,用来描述对数据进行的动作,决定内存的内容。 C51程序没有行号,书写格式自由,一行内可以书写多条语句,一条语句也可分写在

29、多行上,但为了区分程序中不同结构层次的语句,通常要求在同一结构层次上的语句,在行中缩进相同的字数。并且每条语句最后必须以一个分号“ ;”结尾,因为分号是语句的必要组成部分。4注释在C51程序中,为了增加程序的可读性,通常使用 “ / ”或一对“ /*/ ”对程序中的某些地方作必要注释。前者只能注释一行内容,后者则可以注释多行内容。注释只是为了方便用户编写和阅读程序,其自身在编译时不参与编译。同时还经常利用 “ / ” 或 “ /*/ ” 屏蔽程序中的某些语句来调试程序。二、标识符与关键字1标识符指用来表示源程序中自定义对象名称的符号,可以是常量、变量、数组、结构、语句标号以及函数等。在C51中

30、,标识符只能由字母(az,AZ)、数字(09)和下划线“_”组成,并且第一个字符必须是字母或者下划线。 在C51程序中,标识符区分大小写,如“max”和“MAX”表示两个完全不同的标识符。用户自定义的标识符不能与系统保留的关键字重复。关键字是C51编译器保留的一些特殊标识符,具有特定的含义和用法。单片机C51程序语言继承了ANSI C标准定义的关键字共32个,如auto、double、int、break、else、switch、case等。2关键字sfr P0=0 x80; /*定义地址为“0 x80”的特殊功能寄存器命名为“P0”。对P0口的操作也就是对地址为“0 x80”的特殊功能寄存器操

31、作*/sbit LED=P20; /*位定义LED为单片机的P2.0端口,对LED操作也即对P2.0端口操作*/同时结合单片机硬件的特点扩充了一些关键字,如sfr、sbit。三、常量与变量在程序运行过程中,数值不能被改变的量称为常量,可以为字符、十进制数或十六进制数;数值能被改变的量称为变量。例已知符号常量“PI”,它的值为3.1415926,求任意圆的周长和面积。 #define PI 3.1415926 /*宏定义符号常量PI=3.141596*/ main( ) float r, c, s; / 定义三个实型变量分别为r、c、s c = 2*PI*r; / 圆的周长公式 s = PI*r

32、*r; / 圆的面积公式 四、Keil C51支持的数据类型类型符号基本数据长度 / bit取值范围字符型无unsigned char80255有signed char8-128+127整型无unsigned int16065535unsigned long3204294967295有signed int16-32768+32767signed long32-2147483648+2147483647(续表)类型符号基本数据长度 / bit取值范围实型有float32 1.176E-38 3.40E+38指针型无*824存储空间065535位类型无bit10或1sbit10或1特殊功能寄存器型

33、无sfr80255sfr1616065535一、程序设计C51数据的存储类型与51单片机实际存储空间的对应关系:存储类型长度/bit描 述data8直接寻址的片内RAM低128B,访问速度快bdata1片内RAM的可位寻址区(20H2FH),允许字节和位混合访问idata8间接寻址访问的片内RAM,允许访问全部片内RAMpdata8用Ri间接访问的片外RAM的低256Bxdata16用DPTR间接访问的片外RAM,允许访问全部64k片外RAMcode16程序存储器ROM 64k空间在C51编译器中提供了一组宏定义对51单片机的code、data、pdata和xdata空间进行绝对寻址。并且规定

34、只能以无符号数方式访问,定义了8个宏,其函数原型如下:#define CBYTE(unsigned char volatile*)0 x50000L)#define DBYTE(unsigned char volatile*)0 x40000L)#define PBYTE(unsigned char volatile*)0 x30000L)#define XBYTE(unsigned char volatile*)0 x20000L)#define CWORD(unsigned int volatile*)0 x50000L)#define DWORD(unsigned int volatil

35、e*)0 x40000L)#define PWORD(unsigned int volatile*)0 x30000L)#define XWORD(unsigned int volatile*)0 x20000L)上述函数原型放在absacc.h文件中,使用时只需用预处理命令将其包含到源程序的文件中,即#include 。如对单片机片内RAM的0 x30单元进行操作,可使用DBYTE以字节形式对data区寻址,即0 x30的绝对地址为DBYTE0 x30。接下来向单片机内存单元的赋值操作,可借助Keil C51编译器所支持的无符号字符变量进行操作。 unsigned char data30 =

36、 0 x15; / 将十六进制数15赋值给无 /符号字符变量data30 DBYTE0 x30 = data30; / 将data30中的值(0 x15)传送到 /片内RAM的30H单元根据上述任务分析编写完整的程序:二、编写程序并录入三、调试运行编译无误后单击调试按钮,将自动弹出“debug”工具栏和存储器观察窗口。通过在存储器观察窗口地址栏内输入“字母:数字”即可显示相应单元值。其中字母代表的意义如下表所示。数字代表所要查看相应单元中的地址,可以为十进制数也可以为十六进制数。字母对应的存储器空间字母对应的存储器空间C代码存储空间I间接寻址的片内存储空间D直接寻址的片内存储空间X扩展的外部

37、RAM 空间在地址栏后的文本框内输入“D:0 x30”,然后单击运行“ ”按钮,则程序进入运行状态,再单击停止“ ”按钮,程序执行结束,即可观察到地址为0 x30开始的片内RAM新的单元值,如下图所示。 单击此处返回目录任务2 C51运算符的应用 1了解C51的运算符、表达式及其规则。 2掌握每一种算术运算符对数据操作的具体功能。 3能够完成计算梯形面积程序的设计与调试。 51系列单片机为单芯片微控制器(简称MCU),内部有具有数据运算处理能力的CPU。本任务主要利用C51中的算术运算符,计算下图所示梯形的面积(已知梯形的上底长为a,下底长为b,高是h),并通过串行窗口输出显示出来。一、算术运

38、算符运算符意 义示 例(设x=5,y=3)加法运算z=x+y; / z=8减法运算z=x-y; / z=2*乘法运算z=x*y; / z=15/除法运算z=x/y; / z=1模运算(取余运算)z=x%y; / z=2 在运算过程中,当只用作加1和减1运算时,可以采用自增和自减运算符:运算符意 义示 例(设x的初值为2)x+先使用x的值,再让x加1y=x+; / y=2,x=3+x先让x加1,再使用x的值y=+x; / y=3,x=3x-先使用x的值,再让x减1y=x- ; / y=2,x=1-x先让x减1,再使用x的值y=-x; / y=1,x=1二、关系运算符运算符意 义示 例(设a=5,

39、b=6)小于a大于ab; / 返回值 0=小于等于(不大于)a=大于等于(不小于)a=b; / 返回值 0!=不等于a!=b; / 返回值 1= =等于a= =b; / 返回值 0三、逻辑运算符运算符意义示 例(设a=5,b=6)&逻辑与 a&b; / 返回值 1|逻辑或 a | b; / 返回值 1!逻辑非!a 或 !b; / 返回值 0关系运算符和逻辑运算符通常用来判别某个条件是否满足,其运算结果只有“0”和“1”两种值。即当所指定的条件满足时结果为“1”,否则为“0”。四、位运算符运算符意义示 例 (设a = 0 x25,b = 0 x46)&按位与c = a&b;/c=0 x04|按位

40、或c = a | b;/c=0 x67按位取反c= a; /c=0 xda运算符意义示 例 (设a = 0 x25,b = 0 x46) 按位异或c = a b;/c=0 x63 左移(各位同时左移若干位,高位舍弃,低位补零)c = a 右移(各位同时右移若干位,低位舍弃,高位补零)c = a2;/c=0 x94(续表)逻辑与是判断“&”两侧的表达式是否都为真,都为真则此逻辑与表达式值为真;按位与是将“&”两侧的数用二进制展开,每一位都求与运算(有0出0,全1出1),最后得到的二进制数即为结果。逻辑与结果只讲真和假,而按位与得出的仍然是一个二进制数。五、复合赋值运算符运算符意 义示 例+=左边

41、的变量或数组元素加上右边表达式的值b+=a 相当于b=b+a=左边的变量或数组元素减去右边表达式的值b=a 相当于b=ba*=左边的变量或数组元素乘以右边表达式的值b*=a 相当于b=b*a/=左边的变量或数组元素除以右边表达式的值b/=a 相当于b=b/a%=左边的变量或数组元素模右边表达式的值b%=a 相当于b=b%a(续表)运算符意 义示 例=左移操作,再赋值b=a 相当于b=b=右移操作,再赋值b=a 相当于b=ba&=按位与操作,再赋值b &=a 相当于 b = b & a| =按位或操作,再赋值b | = a 相当于 b = b | a =按位异或操作,再赋值b = a 相当于b

42、= b a六、条件运算符一般形式如下: 逻辑表达式?表达式1:表达式2例当a=10,b=12时,求a、b中最大值。 其条件表达式: max = ( ab ) ? a : b一、程序设计梯形面积的计算主要分为三步:a+b;(a+b)h;(a+b)h2。根据C51中提供的算术运算符,则梯形的面积表达式为:S=(a+b)* h / 2 为了保证梯形面积计算结果的准确,程序中应定义梯形上底长a、下底长b、高h和梯形面积值S均为浮点型变量。 二、编写程序并录入根据上述任务分析编写完整的程序: 三、调试运行 1载入源文件,编译无误后单击调试按钮,自动弹出“debug”工具栏和存储器观察窗口。为了查看程序的

43、运行结果,单击“ ”按钮,弹出“serial #1”的串行窗口。 2单击运行按钮“ ”,按提示输入相应的值再分别按下回车键,则在串行窗口中即可显示出单片机计算后的梯形面积值。运行中可进行多次数据输入并计算,如图所示。 单击此处返回目录任务3 选择语句的应用 1了解C51程序中选择结构的构建。2了解if、switch/case语句的功能。 3能够完成学生成绩等级划分程序的设计与调试。 将某校学生成绩划分为A、B、C、D、E五个等级,见下表。同时,要求根据不同的分数打印出其相应等级。数据范围(成绩)等级100error90100A8089B7079C6069D100) grade=e; / 错误(

44、error) else if(score=90) grade=A; / 等级为 A else if(score=80) grade=B; / 等级为 B else if(score=70) grade=C; / 等级为 C else if(score=60) grade=D; / 等级为 D else grade=E; / 等级为 E 对于不同成绩的等级划分,借助于switch/case语句打印输出: switch(grade) case A: printf (学生的成绩等级为 Ann); break; case B: printf (学生的成绩等级为 Bnn); break; case C:

45、 printf (学生的成绩等级为 Cnn); break; case D: printf (学生的成绩等级为 Dnn); break; case E: printf (学生的成绩等级为 Enn); break; default: printf (Errorn); break; 二、编写程序并录入根据上述任务分析编写完整的程序: 三、调试运行 1载入源文件,编译无误后单击调试按钮,自动弹出“debug”工具栏和存储器观察窗口。为了查看程序的运行结果,单击“ ”按钮,弹出“serial #1”的串行窗口。 2单击运行按钮“ ”,按提示输入一名学生的成绩再按下回车键,则在串行窗口中即可显示出该学生

46、的成绩等级。运行中可进行多次成绩输入,如图所示。 单击此处返回目录任务4 循环语句的应用 1了解C51程序中循环结构的构建。 2掌握for、while等循环语句的功能。3掌握0100累加和的程序设计与调试方法。 在单片机的程序设计中,当一段程序需要反复执行时,通常采用循环体来构建,这样不仅可以优化程序,而且还可以提高程序的执行效率。本任务以完成Sum=0+1+2+3+ +99+100累加和的程序设计为例,学习使用“ for”和“ while ”语句来构建循环体的方法。一、for循环语句for(初始化表达式;条件表达式;增量表达式) 语句; /循环体 for循环语句的表达式间要用“;”隔开,循环

47、体即为for后面用“ ”括起来的语句,当循环语句只有一条时,“ ”可以省略,紧跟在for语句的结构表达式之后。for循环语句的执行过程如下:(1)初始化表达式。(2)求解条件表达式。如其值为“真”,则执行for循环体内的语句;如果为“假”则退出for循环,转到for循环体外语句去执行。(3)如条件表达式为“真”,在执行for循环体内的语句后,执行增量表达式,再转到上一步继续执行。(4)结束for循环,执行后面的语句。 for语句不仅可以用于循环已经确定的情况,而且可以用于循环次数不确定但已经给出循环条件的情况。下面为for语句应用的几个特例: 1)for( ;i=100;i+) sum+=i;

48、 / i不设初值,由外部 i 决定 2)for(i=1; ;i+) sum+=I; / 不设循环判断条件,默认将 /无条件循环执行下去 3)for(i=1; i=100;i+) ; / 没有循环体,用于实现延时 4)for( ; ; ) sum+=i; / 没有任何限制,无限循环二、while 循环语句while(表达式) 语句; /循环体 括号中的表达式为while循环能否继续的条件,而语句部分则是循环体。只要表达式为真,则重复执行循环体内的语句;否则,终止while循环,执行循环之外的下一行语句。 while语句应用的几个特例: 1)while ( 1 ) sum+=i; /表达式始终为真

49、,无限循 /环语句“sum+=i;” 2) while ( 1 ) ; /表达式始终为真,死循环当循环语句只有一条时,“ ”可以省略,紧跟在while语句的结构表达式后。一般在循环体中应该有让循环最终结束的语句,否则将造成死循环。三、dowhile循环语句do 语句; /循环体 while(表达式); do是C语言的关键字,必须和while联合使用。while(表达式)后的分号“;”不能少,它表示整个循环体的结束。在使用时由于是先执行循环体再判断,所以应注意循环次数的设置。dowhile 循环语句和 while 循环语句的最大区别是:先执行循环体一次,再判断表达式的值。若为真,则继续执行循环体

50、,否则退出循环。dowhile语句执行过程如下: (1)先执行循环体语句一次,然后判断表达式。(2)当表达式的值为非“0”时,返回到上一步重新执行循环体语句。(3)如此反复,直到表达式的值为“0”时循环结束。一、程序设计二、编写程序并录入根据上述任务分析编写的完整程序: 三、调试运行单击此处返回目录载入源文件,编译无误后单击调试按钮弹出“debug”工具栏,单击“ ”按钮,弹出“serial #1”的串行窗口。再单击运行按钮,即可查看串行窗口中输出的和的值: 任务5 指针的定义及引用 1了解数组、指针的定义。 2掌握指向数组的指针的引用。 3掌握利用数组的指针控制单片机I/O口的方法。 在C5

51、1中,指针是被广泛使用的一种特殊数据类型。通过指针可以间接地访问另一变量,方便地使用字符串,有效地使用数组,可使程序更加精炼、高效。本任务以用数组的指针控制单片机的I/O口为例,学习掌握指向数组的指针的引用方法,从而体会指针在C51中的重要意义。一、数组的定义与引用1一维数组 类型说明符 数组名常量 如 int a10;一维数组的赋值方法有以下几种:(1)在数组定义时赋值 例 int a10 = 0,1,2,3,4,5,6,7,8,9 ; 在a10中,10表示a数组中有10个元素,下标从0开始,依次是 a0=0,a1=1,a9=9,数组中的有效数据只有10个。(2)数组元素部分赋值例int b

52、10 = 0,1,2,3,4 ; 定义整型数组b,共包含10个元素,只对前5个元素作了定义,后5个元素值均为0。(3)全部数组元素都已赋值,可省去方括号中的下标例 int c = 0,1,2,3,4,5,6,7 ; 若被定义的数组长度(常量)与实际数组中的元素个数不相等,则数组长度不能省略。2字符数组用来存放字符型数据的数组称为字符数组。字符数组的赋值方法有以下几种: 例 char a5 = H, E, L, L, O ; 定义字符型数组a,它包含了a0 a4共5个字符元素。(1)在定义时进行初始化赋值(2)用字符串的形式对全体字符数组元素进行赋值 例 char str = Hello,wor

53、d! ; 或者 char str = Hello,word! ; 字符串是以0作为结束标志,且并不显现出来。当定义了一个字符串数组后,系统会自动将结束标志0存入数组,因此,上面定义的字符串数组str最后一个元素不是!,而是0。二、指针指针就是一个变量,它包含着另一个变量的地址。C语言中提供了两个专门用于指针和地址的运算符,见下表: 运算符意义运算符意义* 取内容&取地址1指针的定义格式类型说明符 * 指针变量名例 unsigned int *p; /定义无符号整型指针,变量名为p2指针的初始化 指针在使用前必须要进行初始化,要使一个指针变量指向一个变量,可以使用取地址运算符“&”来完成。例 u

54、nsigned int m; /定义一个无符号整型变量m unsigned int *p; /定义无符号整型指针变量p p=&m; /&m表示m的地址,将m的地址存放在 / 指针变量p中(即指针p指向m) 指针在使用前要先定义指针变量类型。一个指针变量只能指向同一个类型的变量,不要将非指针类型的变量赋值给一个指针变量,如整型指针不能指向字符型变量,且指针变量中只能存放地址。一、程序设计本任务中为观察到单片机的I/O口(P1)上的高电平由低位到高位的有序变化,定义数组如下: unsigned char table8=0 x00,0 x01,0 x02,0 x04,0 x08,0 x10,0 x2

55、0,0 x40,0 x80; 要实现指针指向该数组,指针的初始化为: unsigned char *p; /定义无符号字符型指针变量puchar table8 = 0 x00,0 x01,0 x02,0 x04,0 x08,0 x10,0 x20,0 x40,0 x80; /定义一维数组table p=&table0 ; 或 p=table; /将数组table的首地址存放到指针变量p中 1载入源文件,当编译无误后单击调试按钮,将自动弹出“debug”工具栏,单击菜单栏中的“Peripherals”选项,弹出如图所示下拉菜单,在“I/O-Ports”选项中分别选中“Port0” “Port1”

56、“Port2”和“Port3”,将依次弹出单片机4个并行I/O口的观察窗口。二、编写程序并录入根据上述任务分析编写的完整程序: 三、调试运行2单击运行按钮,则此时可在4个I/O观察窗口中依次看到P0、P1、P2和P3口的数据及高低电平的变化(各标志位上打勾的代表该位为高电平),运行情况如下图所示。最后单击停止按钮,程序执行结束。 单击此处返回目录任务1 跑 马 灯任务2 花 样 灯 任务3 键控彩灯 任务4 数显抢答器任务5 简易数字秒表任务1 跑马灯 1了解跑马灯的工作过程及控制原理。 2掌握单片机I/O口控制外部负载的合理设计方法。 3掌握移位和延时程序的设计方法。4能够设计并制作跑马灯控

57、制系统。 本任务选用单片机P0口控制8只发光二极管(D1D8),使D1D8由低位到高位依次点亮,时间间隔为1s,如此往复循环,完成跑马灯控制系统的设计与制作。 一、函数1标准库函数即由C编译系统提供的库函数,在C编译系统中将一些独立的功能模块编写成公用函数,并将它们集中存放在系统的函数库中,供程序设计时使用。丰富的可直接调用的库函数是C51功能强大及其高效率的重要体现之一,多使用库函数可使程序代码简化,结构清晰,易于调试和维护。 2用户自定义函数即用户根据自己的需要而编写的函数。从函数定义的形式上可以划分为无参数函数、有参数函数和空函数。无参函数的一般形式为:函数类型 函数名(void) /用

58、“void”声明该函数为 /无参函数 局部变量定义; 函数体语句; 其中:函数类型定义了该函数返回值的类型。函数名后括号中的“void”,声明了该函数为无参函数,可以省略不写,但括号不能少。局部变量的定义就是对在本函数内部使用的变量进行定义,只在本函数内部有效。它与全局变量相对,全局变量则是定义在函数的外部,一般位于程序的顶部,它的有效范围为从定义开始的位置到源文件结束。 二、移位运算符C51中移位运算符主要包括左移(“”)两种。“”运算符的功能是:将一个二进制数的各位全部右移若干位,移动过程中,低位舍弃,高位补0。 例 将无符号字符型变量m中的数据左环移n(n8)位。 解: a = m (8

59、-n); /*将变量m右移(8-n)位后并赋给中间变量b m = a | b; /*将两个中间变量中的数据进行按位“或”运算再返还给变量m,则此时m中的数据即为左环移n位后的结果 */ 在C51中若要实现汇编移位指令中的环移功能,可以借助C编译系统中的“INTRINS.H”库函数,其中包含了字符循环左移(_crol_)和字符循环右移(_cror_)指令。三、延时程序采用for三重循环语句结构完成1s延时的函数: void delay1s(void) /定义一个延时为1s的无参函数供主函数调用 unsigned char i, j, k; /局部变量定义 /* 最外层循环共要循环10次,共计延时

60、约为100.1s =1s*/ for(k=10 ; m0 ; m-) /*次外层循环共要循环200次,共计延时约为2000.5ms=100ms=0.1s*/ for(j=200 ; j0 ; j-) /*内循环共要循环250次,共计延时约为2502s=500s=0.5ms*/ for(i=250 ; i0 ; i-) ; /*最内层的循环体为空,循环每次延时2s*/ 此延时函数的时间延时只是近似1s,而并非标准的1s时间,因此只能用于对延时时间要求不是很准确的场合,若要实现标准的1s延时,可利用以后学习的定时器功能来完成。 一、设计并绘制电路原理图单片机对LED控制的连接电路有两种方式,如下图

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论