中职单片机应用技术课程学习技巧探究
2019-10-30马花萍
马花萍
[摘 要] 单片机应用技术课程是电子与信息技术、机电、电气自动化职业院校学生的一门主修课,也是培养智能化电子产品设计技术人员的一门基础课,为进一步学习嵌入式系统奠定基础。单片机具备体积小、成本低、功耗小、功能强、可靠性高等特点,广泛应用于工业测控、医疗设备、智能仪器仪表、家电、通信、交通国防等各个领域,可以说“想得到就用得上”。
[关 键 词] 单片机;程序;思路;代码
[中图分类号] G712 [文献标志码] A [文章编号] 2096-0603(2019)23-0008-02
什么是单片机呢?简单地说,单片机就是一个小的计算机系统,同时也是一种集成电路芯片,是典型的嵌入式微控制器。如何能够掌握单片机应用技术,具备应用单片机知识解决实际问题的能力呢?针对这一状况,作为工作在教学一线的专业课教师,对单片机应用技术课程进行了“基于工作过程的”项目化教学,让单片机学习不再抽象、不再枯燥。本文提出了一些单片机学习技巧,为大家学好单片机提供建议。
一、好的开始是成功的一半,树立信心,勇敢地迈出第一步
刚开始学习单片机的时候,要树立信心,采用项目学习法,要一步一个脚印,一个一个项目来。单片机学习的一般流程是:①电路设计;②连接电路;③程序设计与调试;④编译程序并烧写芯片。可以从一个简单的单片机任务入手,了解整个流程。例如,我们用开关来控制LED发光二极管的亮灭。当开关闭合时,发光二极管亮;开关断开时,二极管灭。根据题意,画出电路图,并进行电路连接。接下来,创建一个工程,然后编写程序并进行调试。
(一)创建工程
(1)新建工程文件:单击菜单【Project】—【New Project…】在弹出的“Create New Project”对话框中,选择保存路径,并在“文件名”的输入框中输入工程的名字(如led),不需要扩展名。单击“保存”按钮,便会弹出第二个对话框,要求选择CPU型号,选好后单击确认。(2)工程的设置:在“Target1(目标)”上单击鼠标右键,接着单击“Options for Target‘Target1”选项,即出现工程设置对话框。主要设置对话框中的“Output”页面,选中其中的“Create HEX File”用于生成可执行的代码文件。
(二)新建源程序文件
(1)建立并保存源文件:单击菜单【File】—【New…】可在项目窗口的右侧打开一个新的文本编辑窗口。单击菜单【File】—【Save】在弹出的对话框“文件名”的输入框中输入文件名,同时必须输入正确的扩展名(C语言源程序以.c为扩展名),单击保存。(2)添加源文件到工程中:在源程序组上单击右键,弹出快捷菜单,接着单击“Add Files to Group ‘Source Group1”选项,在弹出的对话框中选中“led.c”。
(三)编写程序
暂时不管程序为什么这样写,先在程序输入窗口里输入程序,然后保存。
(四)在keil中调试程序,烧写芯片
(1)程序编译:选择菜单【Project】 —【Build target】对当前工程进行连接,产生目标代码。(2)使用串行口ISP下载线下载程序。这时给系统上电,如果通信正常,则可完成将程序写入单片机的程序存储器。
在单片机的学习过程中,不管遇到多么复杂的任务,新建工程、新建源文件、程序编译、调试、仿真、烧写等操作都是一样的,从最简单的任务入手,让它先运行起来,熟练掌握一整套系列的流程。
二、先参考别人的程序代码,掌握其中的思路,先学用到的知识点,没有用到的暂时放到一边
从单片机的学习流程中,我们知道单片机的学习重点在于电路和编程方法,刚开始,可以直接把别人的程序代码拿过来用,学习其中的程序思路,思考都用到了哪些知识点。单片机的学习是注重理论和实践结合的,学习初期光看书不去动手,是学不会的。厚厚的一本书,如果不分主次通篇去看,看着看着头就晕了,也许你学了后面的,前面的内容估计也快忘光了。所以,最好结合实际任务,把程序中用到的知识点,认真学习一下,暂时用不到的内容,就先跳过去,不必非要把书从第一页看起。比如,流水灯程序:
#include
int main(void) { unsigned int i; P2=0xfe; while(1)
{ for(i=0;i<30000;i++);P2=_crol_(P2,1); } }
流水灯程序和开关控制二极管的亮灭程序比较,都用到了单片机的头文件,程序中都有主函数,内部都嵌套了死循环函数。在流水灯程序中又多了内部函数头文件,定义了无符号整型变量,引入了for循环的延时函數。在后面提到的秒闪电路的制作,用到了定时器中断,那时我们才去学习定时器的内容。把整本书化整为零,等用到了再去学习,这样学习的内容既扎实又牢固。
三、无论多简单的程序,都要写一遍,不能光看,一定要开动脑筋,采用多种方法,优化并实现自己的程序效果
刚开始的时候,对内容不了解,可以先抄写老师和教材中的程序,看看每一句代码有什么功能,可达到什么目的,运行后有什么结果。比如,单片机驱动点亮发光二极管程序,这个程序我们可以用位操作法,在程序中直接对某位引脚进行赋值。
#include
main() {d1=0;d2=1;P1_2=0;while(1);}
此程序实现了发光二极管的d1,d3亮,d2不亮。除了头文件,程序中用两种方法定义引脚的名称,第一种是通过名称P1定义引脚名,第二种是通过已有名称定义新名称,一定要区分清楚,程序看明白后一定要自己重新寫一遍,写过之后,你会发现,原来看明白别人的程序很容易,但自己写的时候却一句也写不出来,并且还会丢三落四出现很多问题。当自己能顺利写出程序代码时,说明自己真的懂了。学习需要有举一反三的过程,才会有提高。点亮发光二极管的程序,还可以用字节操作法。字节操作,就是用一个字节数据同时设置I/O口8个引脚的状态。用这种方法时,要先分析P1口每位的值,然后写出十六进制数。程序如下:#include
同样实现点亮d1,d3,关闭d2,字节操作,代码少,效率高,程序运行的速度快,充分优化了程序功能。
四、相同的任务,不同的人有不同的代码写法,主要是找到硬件电路的制作和程序设计的思路,着重培养解决问题的能力
如何写出一个程序来控制器件,按你想要的结果去运作,这个就是解题的思路。要写程序,就要先找到解决问题的思路,思路有了,方法就会有许多种。对同一个项目任务,用不同方法来实现同一功能,这是一个练习和提高的过程。用单片机一位I/O口去控制发光二极管的闪亮。LED的工作过程是:点亮→延时→熄灭→延时→点亮→延时……如此循环,实现了闪烁的效果。它的硬件电路很简单,我们以亚龙YL-236型单片机控制功能实训考核试验台为界面连接电路。程序设计起来也不难,通过流程图对程序进行设计,是在点亮发光二极管程序的基础上实现延时。
方法一:#include
void main() {unsigned int i;While(1)
{led=0;for(i=0;i,50000;i++); led=1;for(i=0;i,50000;i++);}
这个问题,算是解决了,能不能换种写法实现同一功能。
方法二:#include
void delay(void) {unsigned int i=50000;while(i--);}
void main() { while(1) {led=0; delay(); led=1;delay();} }
方法一实现二极管闪亮,运用了for循环延时,方法二采用了delay自定义延时函数,都是延时50000us。延时时间一样长,利用我们学到的知识,还可以考虑如果发光二极管“亮/灭”的时间不一样长,而且有多种变化怎么来写程序?写程序的过程也是一个创造的过程。
五、对于一个新项目,要学会对任务进行分析,不要急于去寻找别人的代码,学会掌握程序的设计与调试
当你接到一个新的项目时,先自己构思一下整个过程,例如秒闪电路的制作。这个项目的难点在于程序设计思路,有了思路,编写程序就容易多了。分析任务:所谓秒闪电路,即1秒定时闪烁的电路。就是让一个LED每1秒固定闪烁一次,实际上就是让LED亮500ms,灭500ms,然后再循环。涉及时间的问题,首先就要考虑用定时器来做。如果定时时间较长,则要尽量使定时器中断时间间隔大些,减少中断次数,提高程序的效率。通过前面的知识我们知道,定时器0工作在方式1下最大定时只有65.536ms,经过分析,如果我们采用定时器0,利用工作方式1,通常将定时器设为50ms的时间间隔,即每50ms中断一次,然后通过一个变量记录中断次数,每中断一次,让这个变量加1,当这个变量等于10,说明已经中断10次,正好就是500ms,实现1秒定时闪烁。设计思路有了,程序编写就简单了。
对任务进行分析,事先规划好程序的流程图,程序代码写出来易如反掌,但是问题又来了,不少学生把程序代码写好了,然后一运行,不是自己想要的结果,有的时候甚至结果出不来,头就晕了,然后就跑去问老师“为什么我的程序不能正常运行”就等老师来给自己分析。这是一种很不好的习惯,应该自己学会发现问题和学会如何解决问题。在解决问题的过程中,通过程序的排错,你会学到很多平时听课、看书学不到的东西。纠错的过程就是学习的过程,并且比用其他的方法都学得多、记得深。通过编译程序,排查出简单的语法错误,对生成的目标文件进行调试运行,单步执行与全速执行相结合,实现自己的程序功能。
参考文献:
[1]金杰.MCS-51单片机C语言程序设计与实践[M].北京:电子工业出版社,2017.
[2]老盛林,吴慧芳.单片机应用技术[M].北京:北京理工大学出版社,2018.
[3]苏珊,高如新.单片机原理与应用[M].成都:电子科技大学出版社,2016.
编辑 张 慧