单片机的C语言分析
2013-01-28刘苗生
俞 萍 刘苗生
1.广东培正学院,广东 广州 510830
2. 华南农业大学珠江学院信息工程系,广州从化 510900
当前全国理工科普通高等学校电类各专业, 计算机类有关专业, 机械类有关专业都开设有“单片机原理及应用”或“单片机原理及接口技术”的课程。而且几乎都是以51单片机某一种机型为授课对象,用汇编语言作为编程语言, 两者相辅相成。 许多学校及教师都在探索提高该课程教学效果的方法[1]。本文就是作者探索提高该课程教学效果的总结。
1 为什么要用C语言
1.1 汇编语言的优势及不足
众所周知,汇编语言是面向机器的语言, 它一刻也离不开具体的机器, 所以不同的机器, 汇编语言也不同。
汇编语言是与计算机的机器语言一一对应的,因此,用汇编语言编写的程序效率高, 占用储存空间小, 运行速度快, 这是汇编语言程序的优势所在。
然而祸为福所倚,正因为汇编语言与计算机的硬件密不可分,不同的机器就有不同的汇编语言,因此汇编语言难学、难编、难读、难懂、难移植,这五难是公认的, 几乎所有的单片机教材中都有相应的论述[2]。既是所有用汇编语言从事过单片机的开发与应用的工程技术人员的共同感受;也是所有用汇编语言从事过单片机教学的各级各类教师的共同感受。这就是汇编语言的不足。
1.2 C语言的优势与不足
C语言是一种结构化语言,它层次清晰,按模块化组织程序,易于调试和维护。C语言的表现能力和处理能力极强。它不仅具有丰富的运算符和数据类型,便于实现各类复杂的数据结构,它还可以直接访问内存的物理地址,进行位(bit)一级的操作。由于C语言实现了对硬件的编程操作,因此C语言集高级语言和底层级语言功能于一体,既可用于系统软件的开发,也适合于应用软件的开发。此外,C语言还具有效率高、可移植性强等特点,因此C语言广泛地移植到了各类各型计算机上,从而形成了多种版本的C语言,单片机的C语言就是这多种版本之一,它是应用于51单片机的一种C程序开发语言. 现在几乎所有的单片机、微处理器、微控制器开发平台都支持用C语言进行程序设计。使C语 成为当代最优秀的程序设计语言之一,获得了极为广泛的应用。
C语言进入51单片机后, 它的优势得到了充分的展示, 它不象汇编语言那样要熟练掌握指令系统, 也不要象汇编语言那样要对程序的起始地址、主程序的起始地址、中断服务子程序起始地址、保护现场、恢复现场、保存断点、返回断点、堆栈指针、进堆栈、出堆栈、子程序中的入口参数、出口参数、参数的传递、四组工作寄存器的内在联系等难度很大的知识点要有非常透彻的了解; 它只要求对单片机的片内结构有个大致的了解;它易学、易懂、上手快;它功能强大,移植性强;它集高级语言和底层语言于一身;它的各种各样的数据(信息)既可以以变量的形式出现于各个函数中,也可以以地址的形式访问单片机的片内、片外的各种数据存储器及程序存储器的任何单元。可以说,汇编语言能做到的事情,C语言不但能做到, 而且能轻而易举的实现之。因此它获得了越来越广泛的应用。正因为C语言有如此明显的优越性, 原来使用汇编语言的工程技术人员也纷纷抛弃汇编语言而跨入用C语言开发单片机的行列中。 这就是我们为什么要用C语言对单片机进行教学的原因。
C语言相对汇编语言而言, 同样功能的程序所需内存相对较多, 执行速度相对较慢, 这就是C语言的不足。
2 单片机的C语言教学法
2.1 单片机的发展使汇编语言的优势失去光泽
C51系列单片机在各行各业获得了广泛应用这已经是不争的事实,继最初的基本型8031/8051/8751和增强型8032/8052/8752后, 相继又推出 了AT89C51/89C52/89S52/89C55和 S T C 8 9 C 5 1/S T C 8 9 C 5 2/STC89S51/STC89S52/STC89C55,目 前 的STC12C5A60S2系 列单片机, 它的应用程序空间有8K/16K/20K/32K/40K/48K/52K/60K字节; 它的工作频率范围为0-35MHZ, 由于它的机器周期是单时钟周期, 即一个时钟周期就是一个机器周期(光这一点就使单片机的运行速度提高12倍), 所以0-35MHZ的工作频率相当普通的8051的0-420MHZ的工作频率, 这两大优势使C51相对于汇编语言而言的代码运行效率低和代码长的缺陷得到了很好的弥补, 也使得用汇编语言编写的程序效率高、占用储存空间小、运行速度快这一汇编语言的优点失去了光泽, 使这一优点变得没有什么实际意义了。相反它的难编、难读、难懂、难移植的缺点没有丝毫改变。为C51成为单片机开发与应用的主流程序设计语言奠定了基础。
2.2 C语言教学法的实践
对单片机实施C语言教学法时, 将C语言程序中不需要的汇编语言的指令系统、伪指令、汇编语言程序设计都删去不讲,讲述单片机的硬件知识时也以C语言编程需要为出发点, 与C51编程无关的硬件知识不再讲授。
理论课的具体做法是:第1章单片机慨述(花两学时讲授单片机的发展历史及发展趋势,单片机的应用,MCS-51系列,ATMEL系列,STC系列单片机简介);第2章STC89C51单片机的硬件结构, 重点讲授存储器的分布及结构、四个 行I/O 口 (P0、P1、P2、P3)、40个 片 脚 及 功能;第3章讲授单片机的C51基础知识,由于开设单片机课程之前, 学生已经学习完C语言程序设计, 这一章重点介绍C51与标准C的不同之处, 复习C语言程序的基本结构与相关语句(if语句、swith/case语句、while语句、for语句)的用法。笫4章介绍Keil C51软件的安装、项目的建立、C51程序的编辑、编译、下载及执行(做一个实验解决)和C51的库函数。第5-第7章介绍89C51的内部资源,包括STC89C51的中断系统,定时器/计数器,串行囗及它们的C51编程技术。第8-第11章介绍STC89C51单片机与I/O接口、独立键盘、矩阵键盘、LED显示器、LCD显示器、A/D、D/A及I2C的C51编程及应用技术, 第5章及以后各章介绍硬件知识时着重讲授51单片机中21个特殊功能寄存器中的15个(P0、P1、P2、P3、IE、IP、TCON、SCON、TMOD、TH0、TL0、TH1、TL1、PCON、SBUF)的 功能及用法,如何实现I/O控制、外中断控制、定时中断控制、计数中断控制、LED静态显示、LED动态显示、独立键盘检测、行列式键盘检测、LCD1602显示字符、LCD12864(或LCD12232)显示汉字、A/D转换及显示、D/A转换及显示、I2C电路在线存储数据等各种实用的编程技术及理论基础知识。
2.3 与C语言教学法配套的实验
单片机的教学不管 用哪种教学方法,实践动手能力的培养是非常重要的一环,与单片机C语法教学法配套的实验开发板不但功能强、性能好、而且价格便宜(150元/套左右),可以开出I/O控制(流水灯)、外中断控制、定时中断控制、计数中断控制、LED静态显示、LED动态显示、独立键盘检测、行列式键盘检测、LCD1602显示字符、LCD12864(或LCD12232)显示汉字、A/D转换及显示、D/A转换及显示、I2C电路在线存储数据、单片机控制继电器、单片机控制报警器、单片机控制步进电机、单片机与单片机的串行通信、单片机与PC机的串行通信等20多个实验,学生爱不释手,许多家庭经济条件许可的学生干脆自己买一台,有空闲时就动手,这种开发实验板激发起学生浓厚的兴趣,大大提高了学生的积极性,为单片机的C语言教学法提供了理想的实验手段和支撑。
2.4 与C语言教学法配套的课程设计
开设单片机原理及应用课程的多数专业都有一个与该课程配套的课程设计。与单片机的C语言教学法配套的课程设计有实时时钟的设计与实现和数据 集系统的设计与实现,下面我们把实时时钟的设计与实现的功能及具体做法介绍如下。
要求实现的具体功能:
1)时间显示在LCD1602液品上, 按秒实现更新;
2)能够利用按键随时调节时钟的时、分、秒, 按键可设计三个有效键, 分别为功能选择键、数值 大键、数值 小键;
3)每次有键按下时,蜂鸣器都以短“滴”声报警;
4)利用AT24C02实现断电自动保护显示数据的功能, 当下次上电时接着上次断电前的时间数据继续运行;
5)在LCD1602的第一行显示年、月、日和星期, 第二行显示时、分、秒;具体做法:第一步先用Proteus仿真实现之, 第二步在万能板上焊接调试成功。其结果是70%以上的同学能做出来, 达到良好或优良,30%的同学为中等和及格。
3 单片机的C语言教学法效果
笔者于2011年上半年及下半年针对民办独立学院的计算机科学与技术专业0801班、网络工程专业0801班、电子信息工程专业0901班三个班的教学实践证明,不管是单片机的内部结构、内部资源还是理论与实践结合在一起的单片机控制流水灯、单片机的外中断控制报警器、控制继电器、LED静态显示、LED动态显示、定时中断实现实时时钟的显示、串行通讯、独立键盘的检测与显示、行列式键盘的检测与显示、LCD1602显示字符及左移右移、LCD12864显示汉字及左移右移、DAC0832数模转换及显示、ADC0809系列的模数转换及显示、E2PROMAT24C02与单片机的通讯等的教学都非常顺利,与汇编语言教学法相比真有 半功倍之效。学生学起来轻松,兴趣盎然,劲头十足;教师教起来也是轻松愉快,信心十足。本文中的有关课程设计的内容难度也不小,先用Proteus仿真, 然后各自在万能板上焊接单片机的最小系统配以LCD1602、AT24C02及报警器,70%的同学可以达到良好及以上。有人说你要是用单片机做出一个电子钟,那你基本上已经掌握单片机的80%了,这句话有道理,电子钟对编程的综合性要求还是相当高的【3】。从这句话也可以看出单片机C语言教学法的效果。
[1]唐存皮,陈小琴,金红.提高单片机教学效果的实验教法方法探讨[J]. 电气电子教学学报.2006(3):108-109.
[2]刘剑,刘奇.51单片机开发与应用基础教程(C语言版)[M].北京:中国电力出版社,2012.
[3]郭天祥.新概念51单片机C语言教程-入门、提高、开发、拓展全攻略[M].北京:电子工业出版社,2010.