单片机C语言程序设计.pdf
《单片机C语言程序设计.pdf》由会员分享,可在线阅读,更多相关《单片机C语言程序设计.pdf(25页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 单片机单片机 C 语言程序设计语言程序设计 实验指导书实验指导书(必修)(必修)电子与信息工程学院 储茂祥 巩荣芬 主编 单片机 C 语言程序设计实验指导书 前 言 单片机体积小,重量轻,具有很强的灵活性,而且价格不高,越来越得到广泛的应用。而 C 语言是一种编译型设计语言。它兼顾了多种高级语言的特点,并具备汇编语言的功能。用 C 语言来编写目标系统软件,会大大缩短开发周期,且明显的增加软件的可读性,便于改进和扩充,以研制出规模更大、性能更完备的系统。用 C 语言进行 8051单片机程序设计是单片机开发与应用的必然趋势。单片机的程序设计应该以 C 语言为主,以汇编语言为辅。而且采用 C 语言
2、也不必对单片机和硬件接口的结构有很深入的了解,编译器可以自动完成变量的存储单元的分配,编程者就可以专注于应用软件部分的设计,大大加快软件的开发速度。采用 C 语言可以很容易地进行单片机的程序移植工作,有利于产品中单片机的重新选型。为此,特开设了单片机的 C 语言应用程序设计这门选修课。课程的内容主要包括了单片机 C 语言编程的基本语法和思想,单片机内部资源的 C编程,单片机常见外部扩展资源的 C 编程等。基于本课程的特点,结合高等院校要求,为了不断提高大学生的实验研究能力、分析编程能力、总结归纳能力和解决实际问题的能力,特意编写了本实验指导书,以指导如何利用现有的实验设备进行单片机内外资源的
3、C 编程以及简单系统的开发等。它不仅包括了一系列的验证性实验,而且还包括了综合性和设计性实验。实验的开设有利于培养学生分析问题和解决问题的能力,以及使抽象的概念和理论形象化、具体化,对增强学习的兴趣有极大的好处,做好本课程的实验,是学好本课程的重要教学辅助环节。总之,不论是验证性实验还是综合性实验都会加深学生对基本知识的理解和渗透,提高他们的动手操作能力,以更好的适应时代发展的需要。本实验要求同学在做实验之前要很好的完成预习任务和调试程序的编写;在完成每个实验后,要认真书写实验报告,对实验程序的正确性进行分析,并写出调试心得和体会。1 单片机 C 语言程序设计实验指导书 目 录 目 录 前 言
4、.1 目 录.2 实验一 I/O口扩展实验.3 实验二 定时器及外部中断实验.8 实验三 8255 扩展八段数码管实验.12 实验四 8253 多路定时/计数器实验.15 实验五 8279 键盘显示扩展实验(综合性).18 实验六 点对点异步串口通信实验(设计性).21 参考文献.24 2 单片机 C 语言程序设计实验指导书 实验一 I/O 口扩展实验 一、实验目的 一、实验目的 1、学习在单片机系统中扩展简单 I/O 口的方法。2、学习 C51 语言数据输入,输出程序的编程方法。二、实验设备 二、实验设备 EL-MUT-III 型单片机实验箱、8051CPU 模块、PC 机 三、实验内容 三
5、、实验内容 本实验的原理图如下图所示。该实验利用单片机 C 语言编程,实现单片机数据口由 74LS244 读取八个开关的状态,并将此状态由单片机数据口输出,经过 74LS273 锁存并驱动发光二极管显示。其中74LS244 的输入端口接开关 K1K8,74LS273 的输出端口接发光二极管。74LS244 的片选 CS244 接 CS1,表明 74LS244 对于单片机而言的外部地址为 0CFA8H,74LS273 的片选CS273 接 CS2,表明 74LS273 对于单片机而言的外部地址为 0CFB0H。四、实验原理 四、实验原理 1、I/O 接口 1、I/O 接口 MCS-51 系列单片
6、机共有 4 个 I/O 口,分别是 P0、P1、P2、P3,此四个接口都可以单独的做输入或输出使用。实际应用中,P0 口用于输出外部数据存储器的低 8 位,并分时复用作为与外部连接的数据总线口;P2 口用于输出高 8 位地址;P3 口常操作于定义的第二功能;P1 口一般为留给用户使用的基本 I/O 口。3 单片机 C 语言程序设计实验指导书 在单片机 C 语言中,对于端口(位)的使用可以使用 sbit 来定义,如:sbit P10=P10/定义变量 P10 指向 P1 端口的第 0 位 在程序中就可以使用 P10 变量来访问 P1 口的第 0 位。对于 P0 口、P2 口,一般在访问外部数据空
7、间时使用,在单片机 C 语言中的使用方法可以看下例:#include#include#define INPORT XBYTE0XCFA8/定义变量 INPORT 指向外部空间 0XCFA8#define OUTPORT XBYTE0XCFB0/定义变量 OUTPORT 指向外部空间 0XCFB0 void main(void)OUTPORT=INPORT;该例实现了将外部空间 0 xCFA8 的数据转存入外部空间 0 xCFB0 的功能,注意的是,在单片机 C 语言中,对于外部空间的使用,需要用 XBYTE 关键字来定义,而且程序要包含 absacc.h 这一函数库。本实验利用单片机的外部扩展
8、空间,实现由单片机数据总线口读取固定地址的外部空间状态,同时将状态数据由单片机数据总线口输出到另一外部空间显示。本实验中扩展的芯片可理解为单片机对应地址的外部空间,对应芯片的外部地址由片选信号确定,对于本实验原理图,74LS244 的片选 CS244 接 CS1,表明 74LS244 对于单片机而言的外部地址为 0CFA8H,74LS273 的片选 CS273 接 CS2,表明 74LS273 对于单片机而言的外部地址为 0CFB0H。因此,可利用 P0 口、P2 口实现外部存储空间的访问,方法如上面的例子。如果单片机外扩芯片过多,则 MCS-51 总线口的负载过重,74LS244 是一个扩展
9、输入口,同时也是一个单向驱动器,它可以减轻总线口的负担。本实验程序为减少总线口读写的频繁程度,需要增加一段延时程序,延时时间约为0.01 秒,不会影响显示的稳定。单片机 C 语言中延时的方法可以采用:for 循环、定时器定时。2、仿真调试 2、仿真调试 单片机 C 语言的实验将以 EL-MUT-III 型单片机实验箱为硬件调试平台,以 EL 型教4 单片机 C 语言程序设计实验指导书 学实验环境软件为调试工具,实现本课程所有实验的仿真、调试任务。首先打开实验台的电源,打开 PC 机进入桌面。然后点击桌面快捷图标 MCS51MCS51,以默认的通信方式点击确定。在点击确定确定按钮的同时,立即打开
10、实验台左上方的 POWER SWITCHPOWER SWITCH 开关,此时,调试软件能够正确地进入调试环境,如图 1 所示。图 1 新建 C51 文件 如图 1 所示点击:文件新建C51 文件文件新建C51 文件,建立新 C51 文件,即可进入编辑环境,编辑 C51 语言代码,如图 2 所示。图 2 编辑源代码 编辑完成代码后,可点击:文件保存文件保存,并选择保存路径和设定文件名,就可实现文件的保存。注意的是,文件保存的路径不可太深,且不要有中文目录,文件名也不要太长,可参照下例:D:workex1.c 源代码编辑完成后,进行编译、链接调试,如图 3 所示。只要依次点击:编译、链接编译、链接
11、按钮即可,也可以直接点击编译链接编译链接按钮。编译、链接按钮都有快捷键方式,可以使用快捷键,实现同样的功能。5 单片机 C 语言程序设计实验指导书 图 3 编译、链接 在编译、链接的过程中,会弹出对话框,可观察源代码中是否有错,如果有错,可修改源代码,重新编译、链接,直至正确为止。上面的过程实际上是软件调试的过程,接下来要进行硬件调试。首先在断电的情况下将实验箱对应电路连线,组成需要的硬件电路,然后按上面步骤做好软件调试,正确无误后,开始进行硬件调试。如图 4 所示,点击调试调试按钮,实现程序的编译、链接代码HEX 文件下载到实验箱单片机的程序区。图 4 调试 程序下载完成后,进行硬件调试,实
12、现程序对应的功能。如图 5 所示,对应一系列的按钮,完成各种调试功能,一般情况下如果程序完全正确无误后,可直接点击运行运行按钮,此时,程序以全速的方式运行,我们就可以观察实验箱的实验现象。实验中,我们还要注意的是,如果硬件调试有问题,经过修改程序需要重新硬件调试的时候,可以使用如下方法实现快速的重新调试:如图 4 点击单片机复位单片机复位按钮,弹出确定确定提示框,根据提示按一下实验箱左下方的 RESETRESET 按钮,并立刻点击确定确定按钮,如果6 单片机 C 语言程序设计实验指导书 实验箱上的六个数码管显示 C_C_,表明复位且通信良好,此时就可重新进行硬件调试了,如果显示 P_ P_,表
13、示复位或者通信存在问题,需要重新操作。图 5 运行 五、实验步骤 五、实验步骤 1、74LS244 的 IN0IN7 接开关的 K1K8,片选信号 CS244 接 CS1。2、74LS273 的 O0O7 接发光二极管的 L1L8,片选信号 CS273 接 CS2。3、按实验内容编写程序(注:以 for 循环的方式实现定时)。4、仿真调试(参照实验原理),拨动开关 K1K8,观察发光二极管状态的变化。六、实验报告要求 六、实验报告要求 1、写出实验目的、实验设备、实验内容,分析实验原理,总结实验步骤。2、画出流程图,并写出实验仿真调试后正确的程序。3、对实验思考题加以分析,按照要求做出回答,并
14、作实验总结。七、实验思考题 七、实验思考题 1、编写程序,用定时器中断来做延时实现任意拨动开关 K1K8,都能够由发光二极管显示出来。2、实验总结(实验调试过程中的问题和调试体会)。预习任务:预习任务:1、查阅 74LS244 和 74LS273 芯片资料。2、按照实验内容,画出流程图,编写程序,采用软件延时(for 循环)实现任意拨动开关 K1K8,都能够由发光二极管显示出来。7 单片机 C 语言程序设计实验指导书 实验二 定时器及外部中断实验 有急救车的交通灯控制实验有急救车的交通灯控制实验 一、实验目的 一、实验目的 1、熟练在单片机系统中扩展简单 I/O 接口的方法。2、熟练 C51
15、语言数据输出程序的设计方法。3、学习模拟交通灯控制的 C51 实现方法。4、学习外部中断技术及定时器中断的 C51 基本使用方法。5、学习中断处理程序 C51 编程方法。二、实验设备 二、实验设备 EL-MUT-III 型单片机实验箱、8051CPU 模块、PC 机 三、实验内容 三、实验内容 本实验的原理图如下:1扩展实验箱上的 74LS273 作为输出口,控制八个发光二极管亮灭,模拟交通灯管理。2.在上述实验内容的基础上增加允许急救车优先通过的要求。具体要求为:当有急救车到达时,东西和南北方向上的红灯亮,以便让急救车通过,假定急救车通过路口的时间为 10 秒,急救车通过后,交通灯恢复中断前
16、的状态。本实8 单片机 C 语言程序设计实验指导书 验以单脉冲为中断申请,表示有急救车通过。四、实验原理 四、实验原理 1、实验方案 1、实验方案 本实验的设计可以有两种设计方案:方案一:用十二个发光二极管分别表示南面路口的绿灯、黄灯、红灯,东面路口的绿灯、黄灯、红灯,北面路口的绿灯、黄灯、红灯,西面路口的绿灯、黄灯、红灯。方案二:虽然实际交通灯的数量是十二个,但是因为南北路口的两个红灯、绿灯以及黄灯的亮灭 规律相同,其它路口的灯也满足同样的规律,所以用六个发光二极管也能模拟交通灯。由原理图可定义如下:LED1、LED2、LED3 南北方向的绿灯、黄灯、红灯 LED4、LED5、LED6 东西
17、方向的绿灯、黄灯、红灯 要完成本实验,首先必须了解交通路灯的亮灭规律,本实验的亮灭规律如下:1、初始态是两个方向路口的红灯全亮。2、东西路口的绿灯亮,南北路口的红灯亮,东西方向通车。3、延时一段时间后,东西路口绿灯灭,黄灯开始闪烁。4、闪烁若干次后,东西路口红灯亮,同时南北路口绿灯亮,南北方向开始通车。5、延时一段时间后,南北路口的绿灯灭,黄灯开始闪烁。闪烁若干次后,再切换到东西路口方向,如此反复下去。本实验以单脉冲为中断申请,表示有急救车通过。特别注意的是中断现场的保护。要求用软件或者定时器来完成延时。2、实验说明 2、实验说明 本实验 74LS273 芯片对于单片机而言,为外扩的外部资源,
18、其对应的地址由片选信号 CS273 控制,本实验 74LS273 的片选 CS273 接片选信号 CSO,则 74LS273 项对于单片机的外部空间抵制为 0 xCFB0,C51 语言定义如下:#define OUTPORT XBYTE0 xCFB0 因此交通灯(发光二极管)的显示数据可以赋给 OUTPORT 变量,实现结果的输出。本实验中还要注意的是,交通灯的每一种状态的显示,都需要延时一段时间再切换到另一种状态,从而实现每一种状态的稳定显示。其 C51 语言的实现方法如下:OUTPORT=x;/显示交通灯某一状态数据 x 9 单片机 C 语言程序设计实验指导书 Delay(1);/延时 1
19、ms OUTPORT=y;/显示交通灯另一状态数据 y Delay(1);/延时 1ms 实验中涉及到急救车通过,要求使用外部中断的方式实现。在本实验中我们可以利用单片机的外部中断 INT0 实现。也就是说,急救车通过时,首先利用 INT0 外部中断给单片机发脉冲,告知单片机,急救车要求通过,然后单片机接收到脉冲,并做出判断并使东西和南北方向上的红灯亮,同时延时 10 秒,10 秒后表明急救车已经通过,此时单片机恢复原状态。利用 C51 语言可定义外部中断如下:void Rescure_bus()interrupt 0 EA=0;/关闭中断,即不允许其它中断 OUTPORT=0 x11;/0
20、x11 为东西和南北方向上红灯亮的状态数据 Delay(10000);/延时 10s EA=1;/开启中断 在调用外部中断 0 时,一定要注意的是中断现场的保护,要就是说,中断完成后,一定能够恢复中断前的状态,那么在中断程序中使用的变量、外部端口、内部资源,如果在中断前正在使用,那么在中断开始前一定要保护,中断后一定要恢复。同时,注意的是由于在实验中使用到单片机资源外部中断 0,需要对对应的特殊寄存器作一定的配置。首先需要定义特殊寄存器变量:sfr IE=0 xA8;sbit EA=IE7;sbit EX0=IE0;当然,这些特殊寄存器的定义实际上在 reg51.h 库中定义了,因此在 C51
21、 编程时,只要包含上 reg51.h 即可,如下所示:#include 本实验需要使用到这些特殊寄存器,就是在程序初始化时需要对这些寄存器赋初10 单片机 C 语言程序设计实验指导书 值,才可保证对应的 INT0 中断正常工作。本实验赋初值如下:IT0=1;EX0=1;EA=1;本实验可以根据实际实验箱的配置来选择以上方案中的任意一种。本实验按照方案二来设计,选用实验箱上八个发光二极管中的六个,即红、黄、绿各两个。例如将 L1(红)、L2(绿)、L3(黄)作为东西方向的指示灯,将 L5(红)、L6(绿)、L7(黄)作为南北方向的指示灯,同学们还可以用别的设计方法。各发光二极管的阳极通过保护电阻
22、接到+5V 的电源上,阴极接到输入端上,因此使其点亮应使相应输入端为低电平低电平。五、实验步骤 五、实验步骤 1、将 74LS273 的输出 O0O7 接发光二极管 L1L8,74LS273 的片选 CS273 接片选信号 CSO,此时 74LS273 的片选地址为 CFA0H。2、脉冲输入端_接 8051CPU 模块上的 INT0,用来表示救护车的急救信号。3、按实验内容以及方案二编写程序。4、仿真调试,观察 LED 显示情况是否与实验内容相符。六、实验报告要求 六、实验报告要求 1、写出实验目的、实验设备、实验内容,分析实验原理,总结实验步骤。2、画出流程图,并写出实验仿真调试后正确的程序
23、。3、对实验思考题加以分析,按照要求做出回答,并作实验总结。七、实验思考题 七、实验思考题 1、本实验作了哪些中断现场保护,并解释其保护的过程?2、实验总结(实验调试过程中的问题和调试体会)。预习任务:预习任务:1、按照指导书提供的方案画出程序实现的流程框图。2、编写实验程序来模拟有急救车的交通灯控制。3、用软件延时或者定时器延时来完成延时函数的书写。11 单片机 C 语言程序设计实验指导书 实验三 8255 扩展八段数码管实验 一、实验目的 一、实验目的 1、学习 8255 芯片的结构及编程方法。2、掌握八段数码管的使用方法,及动态显示的编程方法。二、实验设备 二、实验设备 EL-MUT-I
24、II 型单片机实验箱、8051CPU 模块、PC 机 三、实验内容 三、实验内容 实验的原理图如下所示:本实验通过单片机控制 8255 芯片,利用 8255 的 PA 口输出数码管的段码,PB 口输出数码管的位码。编写 C51 程序实现六个数码管以固定时间间隔交替动态显示“012345”和“ABCDEF”。四、实验原理 四、实验原理 8255 芯片是单片机通用的并行接口扩展芯片,可扩展 PA、PB、PC 三个 8 位并行口。对于单片机而言,如果外接 8255 芯片,那么 8255 所对应的外部空间地址不再是固定为一个值了。本实验 8255 的片选信号接 CS0,则表明 8255 相对于单片机的
25、外部地址范围是 0 xCFA0-0 xCFA7,此时 8255 的 PA 口、PB 口、PC 口、控制字寄存器对应于单片机的外部地址为:0 xCFA0、0 xCFA1、0 xCFA2、0 xCFA3,其对应 C51 定义可如下例:#define PA XBYTE0 xCFA0#define PB XBYTE0 xCFA1#define PC XBYTE0 xCFA2#define PCTL XBYTE0 xCFA3 对于八段数码管,显示数据时需要同时送入段码和位码,位码就是选择哪一个数码12 单片机 C 语言程序设计实验指导书 管接收段码数据,段码就是需要显示的字符的编码。在 C51 中段码可
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 语言程序设计
限制150内