单片机 C 语言程序设计
实验指导书
(必修)
电子与信息工程学院
储茂祥 巩荣芬 主编
单片机 C 语言程序设计实验指导书
前 言
单片机体积小,重量轻,具有很强的灵活性,而且价格不高,越来越得到广泛的应
用。而 C 语言是一种编译型设计语言。它兼顾了多种高级语言的特点,并具备汇编语言
的功能。用 C 语言来编写目标系统软件,会大大缩短开发周期,且明显的增加软件的可
读性,便于改进和扩充,以研制出规模更大、性能更完备的系统。用 C 语言进行 8051
单片机程序设计是单片机开发与应用的必然趋势。单片机的程序设计应该以 C 语言为
主,以汇编语言为辅。而且采用 C 语言也不必对单片机和硬件接口的结构有很深入的了
解,编译器可以自动完成变量的存储单元的分配,编程者就可以专注于应用软件部分的
设计,大大加快软件的开发速度。采用 C 语言可以很容易地进行单片机的程序移植工作,
有利于产品中单片机的重新选型。为此,特开设了单片机的 C 语言应用程序设计这门选
修课。
课程的内容主要包括了单片机 C 语言编程的基本语法和思想,单片机内部资源的 C
编程,单片机常见外部扩展资源的 C 编程等。基于本课程的特点,结合高等院校要求,
为了不断提高大学生的实验研究能力、分析编程能力、总结归纳能力和解决实际问题的
能力,特意编写了本实验指导书,以指导如何利用现有的实验设备进行单片机内外资源
的 C 编程以及简单系统的开发等。它不仅包括了一系列的验证性实验,而且还包括了综
合性和设计性实验。实验的开设有利于培养学生分析问题和解决问题的能力,以及使抽
象的概念和理论形象化、具体化,对增强学习的兴趣有极大的好处,做好本课程的实验,
是学好本课程的重要教学辅助环节。
总之,不论是验证性实验还是综合性实验都会加深学生对基本知识的理解和渗透,
提高他们的动手操作能力,以更好的适应时代发展的需要。本实验要求同学在做实验之
前要很好的完成预习任务和调试程序的编写;在完成每个实验后,要认真书写实验报告,
对实验程序的正确性进行分析,并写出调试心得和体会。
―1-
单片机 C 语言程序设计实验指导书
目 录
前 言 ...................................................................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 机
三、实验内容
本实验的原理图如下图所示。
该实验利用单片机 C 语言编程,实现单片机数据口由 74LS244 读取八个开关的状态,
并将此状态由单片机数据口输出,经过 74LS273 锁存并驱动发光二极管显示。其中
74LS244 的输入端口接开关 K1—K8,74LS273 的输出端口接发光二极管。74LS244 的片
选 CS244 接 CS1,表明 74LS244 对于单片机而言的外部地址为 0CFA8H,74LS273 的片选
CS273 接 CS2,表明 74LS273 对于单片机而言的外部地址为 0CFB0H。
四、实验原理
1、I/O 接口
MCS-51 系列单片机共有 4 个 I/O 口,分别是 P0、P1、P2、P3,此四个接口都可以
单独的做输入或输出使用。实际应用中,P0 口用于输出外部数据存储器的低 8 位,并分
时复用作为与外部连接的数据总线口;P2 口用于输出高 8 位地址;P3 口常操作于定义
的第二功能;P1 口一般为留给用户使用的基本 I/O 口。
―3-
单片机 C 语言程序设计实验指导书
在单片机 C 语言中,对于端口(位)的使用可以使用 sbit 来定义,如:
sbit P10=P1^0//定义变量 P10 指向 P1 端口的第 0 位
在程序中就可以使用 P10 变量来访问 P1 口的第 0 位。对于 P0 口、P2 口,一般在
访问外部数据空间时使用,在单片机 C 语言中的使用方法可以看下例:
#include <reg51.h>
#include <absacc.h>
#define INPORT XBYTE[0XCFA8]//定义变量 INPORT 指向外部空间 0XCFA8
#define OUTPORT XBYTE[0XCFB0]// 定义变量 OUTPORT 指向外部空间 0XCFB0
void main(void)
{
OUTPORT=INPORT;
……
}
该例实现了将外部空间 0xCFA8 的数据转存入外部空间 0xCFB0 的功能,注意的是,
在单片机 C 语言中,对于外部空间的使用,需要用 XBYTE 关键字来定义,而且程序要包
含 absacc.h 这一函数库。
本实验利用单片机的外部扩展空间,实现由单片机数据总线口读取固定地址的外部
空间状态,同时将状态数据由单片机数据总线口输出到另一外部空间显示。本实验中扩
展的芯片可理解为单片机对应地址的外部空间,对应芯片的外部地址由片选信号确定,
对于本实验原理图,74LS244 的片选 CS244 接 CS1,表明 74LS244 对于单片机而言的外
部地址为 0CFA8H,74LS273 的片选 CS273 接 CS2,表明 74LS273 对于单片机而言的外部
地址为 0CFB0H。因此,可利用 P0 口、P2 口实现外部存储空间的访问,方法如上面的例
子。如果单片机外扩芯片过多,则 MCS-51 总线口的负载过重,74LS244 是一个扩展输入
口,同时也是一个单向驱动器,它可以减轻总线口的负担。
本实验程序为减少总线口读写的频繁程度,需要增加一段延时程序,延时时间约为
0.01 秒,不会影响显示的稳定。单片机 C 语言中延时的方法可以采用:for 循环、定时
器定时。
2、仿真调试
单片机 C 语言的实验将以 EL-MUT-III 型单片机实验箱为硬件调试平台,以EL型教
―4-