单片机C语言教学(共12篇)
单片机C语言教学 篇1
1时间安排
由于我校将最后一年改成了综合实训,要求学生必须在两年内学完所有理论课,所以专业课必须早些开。有些学校将《单片机C语言》开在了大一第一学期,笔者认为不妥。因为《单片机C语言》 是一门专业课,它综合了多种知识,所以要想学好这门课,必须具备一些相关的基础知识。首先需要掌握计算机的基础硬件知识。比如其内部的主要部、器件,例如CPU、存储器、输入 输出设备; 比如一些基础概念:位,字节,字,各进制之间的转换,ASC Ⅱ码, 补码等等;其次还要掌握基本的数字电路和模拟电路的知识。因为在单片机控制系统中,会有复位电路、时钟电路等各种电路。虽然是比较简单的电路,但没有最基本的电路概念,学习起来会比较吃力;最后还需要具备计算机的操作能力。这门课需要学生具备编程能力,上机编程调试是常态,如果学生连最基本的键盘操作,输入法的切换,WORD软件的使用都不会,如何做到熟练使用编程软件, 如何能有效的进行编程和调试。综上所述,开这门课之前,最好让学生学过《计算机基础》、《模拟电路》、《数字电路》这些基础知识,等学生有了这些理论基础以及一定的上机体验之后,再学习这门课程就会事半功倍,更有效率。因此,这门课开在大一的第二学期或者大二的第一学期最为合适。
2教学内容
现在关于单片机C语言方面的教材也比较多,大致可以分为3类。一类侧重于理论介绍,按照传统的方式,先介绍单片机的各个硬件,然后是扩展,最后才介绍一两个应用系统。这类教材虽然内容详细,全面,但是没有单片机控制系统的整体概念,各个章节显得独立,知识零散。对于大专生而言,此类书中的理论知识显得偏多,偏难,很难让学生在短短的一学期内有效掌握。一类侧重于编程语言介绍。更多的介绍用语言编程的技巧,详细的介绍相关的函数,关键字等的使用,而忽视了单片机这个应用平台。最后一类则是能较好的结合单片机和C51语言,并以典型的单片机应用系统为例进行介绍,让学生一开始就形成整体的系统概念,而不是一个个割裂的知识点。笔者认为最后一类是比较适合大专学生的。
因为是大一的学生,教学的内容不能太多,太难,而应该选取有代表性的一些应用系统来讲解。笔者认为以下三部分是必讲的: 首先是单片机的硬件基础,包括单片机内部主要部件,外部引脚, 存储器的空间分配,单片机最小系统。其次是c51语言的基础, 包括数据类型(整型、字符型、浮点型、位型、sfr型、数组、指针),运算符,流程控制,函数。最后是典型系统介绍,既包括整体的硬件电路介绍,也包括对应的程序介绍。比如流水灯,中断, 万年历,数码管显示器,LED点阵显示屏,键盘接口设计等。当然, 前两部分可以融合到最后的具体控制系统中介绍。总之,教学内容应该是难度适中,且侧重于实用。
3教学方法
从上面的教学内容可见,因为是一个个的系统介绍,所以采用项目法教学较好。首先介绍一个项目的相关理论知识,然后再在实验室做实验加以巩固。理论知识方面,也本着实用原则,尽量结合实际,做到详细透彻。比如讲到单片机的外部引脚时,可以拿实物来介绍一下单片机芯片上的缺口以及标记,说明引脚排列的顺序, 以便学生能在实物上迅速找到各个引脚。再比如讲流水灯时,电路中限流电阻的作用,阻值的大小如何计算,单片机的控制端应该接LED灯的阴极,还是阳极,相关程序中的P1为何是大写,而不能是小写,诸如此类的问题,虽然简单,但很实用,能很好的帮助学生做出实际的产品。
实验方面,传统实验箱的缺点日益突出,成本高,硬件不能随意改动,且容易出现故障。最糟的是看不到具体的电路连线图, 对于学生掌握相关的硬件电路毫无用处。所以采用仿真软件来做实验越来越受到青睐。主要是采用keil和proteus这两款软件。keil软件主要是对相关程序进行编译调试,介绍这个软件时,应充分介绍运行后的各个状态,如PSW,运行时间,SP等等,同时也要充分掌握存储器窗口(memory window),变量观察窗口,外围器件等的含义及使用方法,因为这些窗口能很好的帮助学生实时了解单片机内部的运行状况,加深学生对单片机知识的理解。proteus软件实现了从原理图设计、代码调试到单片机与外围电路的协同仿真,一键切换到PCB设计,实现了从概念到产品的完整设计。其处理器模型支持8051,PIC,AVR,ARM,MSP430等多种型号。 其元器件资源丰富,且在不断的开发出新的元器件。所以使用该软件辅助教学可以极大地提高学生的学习兴趣和创新能力。
4教学效果
教学实践证明,尽早的开设这门课,有助于学生提高专业兴趣, 开阔视野,提高动手能力。但是当学生的基础比较弱的时候,要特别注意教学内容的把握,过于深奥的理论可以不讲,而多讲实用且典型的案例。重要的不是做到面面俱到,讲解所有相关知识,而是领学生进入单片机控制系统的大门,掌握学习这门课程的方法。
单片机C语言教学 篇2
起先接触单片机,单片机的程序是用汇编语言编写的。汇编语言是面向机器的低级语言,保持了机器语言的优点,具有直接和简捷的特点,目标代码简短,占用内存少,执行速度快,是高效的程序设计语言。但对于一些复杂的程序,汇编语言就显的繁琐,并且效率不高。而C语言简洁紧凑、灵活方便,数据类型丰富。C语言的最大的优点在于它的可移植性好。因此C语言对单片机的一些复杂程序就体现出它的优势。单片机是一块在集成电路芯片上集成了一台有一定规模的微型计算机。单片机的应用到处可见,应用领域广泛,主要应用在智能仪表、实时控制、通信、家电等方面。因此学习单片机是非常必要的。
在用汇编语言编写MCS–51单片机程序必须要考虑其存储器结构,尤其必须考虑其片内数据存储器与特殊功能寄存器的使用以及按实际地址处理端口数据。
用C语言编写的MCS–51单片机应用程序,则不用像汇编语言那样须具体组织、分配存储器资源和处理端口数据,但在C语言编程中,对数据类型与变量的定义,必须要与单片机的存储结构相关联,否则编译器不能正确地映射定位。
C语言编写单片机应用程序时,需根据单片机存储结构及内部资源定义相应的数据类型和变量,而标准的C语言程序不需要考虑这些问题。
C51包含的数据类型、变量存储模式、输入输出处理、函数等方面与标准的C语言有一定的区别。其它的语法规则、程序结构及程序设计方法等与标准的C语言程序设计相同。C51的语法规定、程序结构及程序设计方法都与标准的C语言程序设计相同,但C51程序与标准的C程序在以下几个方面不一样:
(1)C51中定义的库函数和标准C语言定义的库函数不同。标准的C语言定义的库函数是按通用微型计算机来定义的,而C51中的库函数是按MCS-51单片机相应情况来定义的。
(2)C51中的数据类型与标准C的数据类型也有一定的区别,在C51中还增加了几种针对MCS-51单片机特有的数据类型。
(3)C51变量的存储模式与标准C中变量的存储模式不一样,C51中变量的存储模式是与MCS-51单片机的存储器紧密相关。
(1)C51与标准C的输入输出处理不一样,C51中的输入输出是通过MCS-51串行口来完成的,输入输出指令执行前必须要对串行口进行初始化。
(5)C51与标准C在函数使用方面也有一定的区别,C51中有专门的中断函数。
学习单片机技术的关键,也就是学习编程,学习编程先要学习指令系统。掌握指令的准确含义、运用条件以及与相关硬件资源的关系;了解硬件资源,诸如内存、中断、计数器、计时器和I/O,以及外部资源等。
其实现在很多人用C语言编程,汇编似乎很落伍了,但是,它还是较机器语言外最直接的描述语言,但是汇编能清楚的反应单片机是怎么样工作的。学习编程的初级阶段,可以从读懂一小段程序开始,由简到繁,由浅入深,逐步到读懂一个较短的完整程序。借鉴现有程序,为一个新的目的修改程序,逐步熟练了就可以运筹资源架构程序。
程序就要会分析程序。程序与文章一样,也有段落,一段程序应该有个明确的目的,分析程序要有段落和架构的概念。不管程序有多长,将它分成若干个段落,简化成架构框图,程序的结构和目的就清晰可见了,也有助于编写程序。
编写程序,往往一气呵成,这时就不太会注意添加注释,其实注释很重要,有助于日后的修改,以及程序的可读性。
单片机C语言教学 篇3
另一方面,作为计算机基础教育课程的通用“C语言程序设计”,由于缺乏专业针对性且没有后续课程支撑,使得学生对课程的掌握程度较差。相比汇编语言,C语言具有丰富的库函数,可以实现复杂的控制算法,编译效率高。它采用的结构化程序设计,可读性、可移植性和可维护性较好,在目前的单片机开发中已得到较为广泛的应用,并且在许多高校的单片机教学中也逐步采取了C语言作为编程语言。因此,研究和探索在高职单片机课程中引入C语言的教学改革成为大势所趋。
一、教学设计基础
整个教学设计是紧紧围绕实现单片机应用开发能力的专业培养目标,为提高学生应用C语言进行单片机开发的工程实践能力。其前导课程为通用的C语言程序设计和单片机基础课程。在单片机基础课程里,应掌握单片机的硬件结构、最小应用系统、中断与定时、系统扩展等知识点,读懂并能理解例程所涉及的简单汇编指令。
对C51知识点的选取,考虑到其自身特殊性及与通用C语言不同,应重点选择与单片机应用紧密相关的内容,以体现适度、够用的原则。对不常使用的知识点,比如多维数组、指向指针的指针、链表等则不再涉及。确定的主要知识点有:数据(类型、定义等)与运算(包括位运算)、数组、函数、指针、模块化程序设计在51单片机程序设计中的应用等。
二、基于工作过程的教学模式设计
所谓工作过程是指在行业企业中为完成一件工作任务并获得工作成果而进行的一个完整的工作程序。长期以来,高职院校电子类专业的单片机课程常常采用理论加实践的教学模式,尽管学生获得了必要的专业知识和操作技能,但他们在面对实际工程问题时却不懂得从哪里下手、如何开展工作。实践证明,有效的职业学习只能通过实际工作来实现,即“做中学”。这就是目前我国职业教育课程改革中广泛推行的工学结合课程模式。它的主要教学形式,就是让学生亲自经历结构完整的工作过程,并完成一些在所学专业(职业)中最具典型意义的综合性的工作任务。
因此,按照工作过程系统化的思路对单片机C语言课程进行设计,就是以工作过程为主线,以工作任务为中心,按照工作过程的需要来选择、整合相关C51的理论知识与实践技能,通过教学模式的改革、教学方案的设计与实施,使得学生职业技能不断得到提升。
(一)递进式学习情境的设计
基于工作过程的C51教学模式的开展是以合理的学习情境的设计为基础的。
学习情境是基于工作任务和行动过程的背景下,将所要学习的知识与技能以及所应达到的目标要求,进行教学论和方法论的转化后所构成的小型主题学习单元。因此,每个学习情境的设计都应选择具有单片机C语言典型应用意义的工作任务为载体,根据所需的职业能力要求不同设计不同难度等级的学习情境,并体现由浅入深、由简单到复杂、由局部到系统的递进式提升。
表1是学习情境设计表,表中共设置了3个学习情境、8个工作任务。每一个任务都是在前一任务完成的基础上进行了难度的叠加和深度、广度的拓展。
(二)基于行动导向的教学过程设计
教学过程的设计应体现以行动为导向的原则,按照一般工作过程“资讯、决策、计划、实施、检查、评价”的六个步骤来设计教学过程。 下面以学习情境3中的工作任务“直流电机恒速控制系统实现”为例来设计这一环节的教学过程,设计结果如表2所示。
三、建立科学的评价体系
科学、合理的评价对引导学生改变学习方式、提高学习兴趣、改善学习的主观能动性具有积极的意义。评价是对学生的职业能力以及职业素养的综合评价,是依据对每个学习情境完成情况的评价结果再按一定比例构成的。对每个学习情境的评价,需要既重视对最终结果的评价,更应注重对实践能力的检验,以及对工作态度、团队协作及表达能力的检验。评价采取以教师评价为主的方式。通过目前的教学尝试来看,自我评价方式的效果并不理想,这是今后应考虑的问题。
[参考文献]
[1] 赵志群.对工作过程的认识[J].职教论坛,2008,(14):3.
[2] 邵长友.高职应用电子专业“C语言程序设计”课程改革设想[J].计算机教育,2008,(4):103-105.
[3] 姜世芬.高职电子类专业《C语言程序设计》课程改革探究[J].科技创新导报,2009,(17):110-112.
[4] 周国运.单片机C语言教学探索[J].计算机教育,2009,(22):63-65.
[5] 姜大源.当代德国职业教育主流教学思想研究[M].北京:清华大学出版社,2007.
[6] 熊春如,彭小娟,刘世安.项目驱动在高职单片机C语言教学中的实践[J].职教论坛,2010,(32):32-36.
基于C语言的单片机教学利弊分析 篇4
目前,虽让采用C语言进行单片机应用开发已是主流,但基于C语言的单片机教学还未完全被老师们所接受,多数教师还是习惯采用汇编语言完成单片机教学。这一现状产生的主要原因 :直接采用C语言进行单片机教学似乎又存在某些明显的障碍,虽然意识到汇编语言单片机教学不能满足学生职业能力培养的需求。其结果是 :单片机教学时,老师用汇编语言讲得十分精彩,学生学习起来比较困难,进行单片机应用开发实践时能力欠缺,相应的职业能力培养不成功。突破这一教学困局,我们必须在单片机教学中使用C语言,为了找到能够满足学生相关职业能力培养需求的基于C语言的单片机教学最佳途径,需要细致分析采用汇编和C语言在单片机教学中利弊得失。
1 汇编语言单片机教学的利弊分析
1.1 汇编语言单片机教学的特点
汇编语言是一种用文字助记符号来表示机器指令的符号语言,最接近机器码,优点是占用资源少,缺点是与CPU硬件有关移植性差。基于汇编语言的固有特点和多年汇编语言单片机教学经验,总结汇编语言单片机教学有以下特点 :不同种类的单片机会有自己的汇编指令集,在单片机的教学中采用汇编语言十分自然,且能通过汇编语言单片机教学把单片机工作原理讲解清楚 ;汇编语言是一种低级语言,使得单片机教学中稍复杂的应用编程十分困难 ;汇编编程模块化程序设计欠缺,且源码可移植性不好,源码利用率低,能够利用的教学资源缺少,不便于学生积蓄编程资源和能力。
1.2 汇编语言单片机教学的优势与不足
鉴于上述汇编语言单片机教学的特点,从单片机工作原理理解、单片机资源应用编程技能掌握、职业能力培养和激发学生学习意愿这四个方面,分析归纳其主要优势和不足 :(1)学生可较好理解掌握单片机的工作原理,教学中教师很容易把较难的单片机工作原理(如数据存取、总线时序和程序指令执行过程等)与汇编语言结合起来讲解,有利于学生对单片机工作原理的深入学习 ;(2)不足以培养学生单片机资源应用编程能力,单片机有大量的资源如定时器、串口、中断等,而这些单片机资源的应用开发所需汇编语言程序设计难度较大,学生实际很难熟练掌握,且汇编语言程序不便移植和模块化程序设计欠缺,不能提供学生积蓄编程资源和能力的有效途径 ;(3)无法较好培养学生相关职业能力,汇编语言单片机教学与主流的C语言单片机开发不一致 ;(4)激发学生学习意愿不足,教学中需要把大量精力用于汇编指令的学习和汇编编程方法的学习,不能集中精力于单片机工作原理与应用方法的学习,导致学生感觉单片机很难学,丧失学习信心和兴趣,汇编语言程序设计难度较大也会让学生缺失学习成就感。
2 C 语言单片机教学的利弊分析
2.1 C 语言单片机教学的特点
C语言是高级语言,且位运算能力极强,完全能够取代汇编语言完成对单片机的一切应用编程。鉴于C语言固有的特点和多年C语言单片机教学经验,总结C语言单片机教学有以下特点 :C语言编程硬件依赖程度低,编程时无需关心单片机内部工作细节,使单片机应用编程变得十分简单 ;C语言还有功能强大的运算符和结构化的语句,使得单片机复杂的应用程序设计不再困难 ;C语言程序设计易于模块化,学生可多人合作完成一个单片机应用程序开发 ;C语言可移植性好,能够利用的C语言源码资源十分丰富,提供学生积蓄编程资源和能力的有效途径。
2.2 C 语言单片机教学的优势与不足
鉴于上述C语言单片机教学的特点,从单片机工作原理理解、单片机资源应用编程技能掌握、职业能力培养和激发学生学习意愿这四个方面,分析归纳其主要优势和不足 :(1)不利于学生掌握单片机的工作原理,C语言单片机程序设计无需关心单片机的工作细节,即使不清楚单片机的工作原理也能较好完成单片机资源的应用编程,所以C语言的单片机教学无法把C语言与单片机工作原理结合起来,这不利于学生通过编程加深对单片机工作原理的理解掌握 ;(2)能充分培养学生单片机资源的应用编程能力,C语言功能强大的运算符和结构化语句,使对单片机资源如定时器、串口、中断的复杂应用程序设计不再困难,且C语言较好的移植性,提供学生积蓄编程资源和能力的有效途径 ;(3)满足学生相关职业能力培养的需求,C语言单片机教学与主流的C语言单片机开发接轨,C语言程序设计易于模块化设计,学生可团队合作完成一个任务,培养团队合作能力 ;(4)较好激发学生的学习意愿,C语言是很多专业的必修基础课程,单片机教学中不用把太多精力用于C语言的学习,能集中精力于单片机资源的应用编程,且C语言单片机资源应用编程不再困难,所以极大减轻学生的学习压力,学习信心和兴趣会增加很多,C源码资源十分丰富且可团队合作完成一个任务,有助增加学生学习的成就感。
3 综合分析与结论
基于C语言的单片机教学利弊得失如何,如何把C语言单片机教学做得更好,这是我们追寻的目标。汇总上述分析结果,如下表 :
由上表综合分析单片机教学采用汇编语言和C语言的利弊得失,不难得出结论 :基于汇编语言的单片机教学,非常有利于让学生理解掌握单片机的工作原理,但不能很好教会学生应用单片机的能力,不符合培养学生相关职业能力的需求,激发学生学习意愿不足 ;基于C语言的单片机教学,不利于学生理解掌握单片机的工作原理,但能充分教会学生应用单片机,符合学生职业能力的培养,还能较好激发学生学习意愿。
作为高职学校的单片机教学,其重点是教会学生如何应用单片机,以满足职业能力培养的需求,故此采用C语言单片机教学是唯一的选择,且基于C语言的单片机教学实施过程中应扬长避短把重心放在单片机资源的应用编程能力的培养上,这才是单片机教学的最佳途径。
摘要:采用汇编语言的传统单片机教学,越来越不能适应学生职业能力培养的需要;而采用C语言的单片机教学,其优势和不足又都相对突出。鉴于上述问题,本文对基于C语言的单片机教学的利弊作全面细致的分析,寻求C语言单片机教学的最佳途径,以此为从事单片机教学的同行提供参考。
C语言对单片机编程的学习心得 篇5
1.首先要明确一点,你是爱好单片机编程的,通过写出各种各样的程序,你可以从中得到快乐和成就感,这一点非常重要,如果你是因为学好单片机可以走上更好的工作岗位得到更好的报酬,那也可以,必竞有个动力所以可以驱使你好好的学。
2.要具备能吃苦的精神,学习单片机初期是十分枯燥无味的(在你能写出自已的程序前这一段时间),你会被状态控制字、中断地址、中断优先级等等问题所困惑,可能有些问题要好多天,查了很多资料,想的头疼后你才能彻底想明白。没有吃苦的精神是不行的。所以这一点也很重要。
3.要具备一些数字电路和模拟电路知识,这些虽然看起来和单片机关系不大,实际上哪个单片机没有外围电路,没有这些知识你学会单片机编程后,能力也会被大大的限制。
4.虽然现在工作中用单片机编程都用的C语言编程,因为C语言有代码编写程序速度快,逻辑比较清晰,可维护性强。但是汇编语言对初学者来说也十分重要,这有助于你了解单片机内部运行机制,对单片机的执行过程更加了解。听朋友这么说过,当一个工程师做单片机程序从汇编转到C时,他的水平就提高了,但当他从C又转回汇编时那么他就成精了。
5.要边学边练习,光看书还是不行的,要把你在学习过程中的编程思路在单片机上跑起来,你才会更能找到编写单片机程序的感觉。如果不把自已的编程思路在单片机上运行起来,那么后面你就不知道自已的想法是对是错,感觉无法继续下去。如果经济条件允许一块开发板还是必须的,理论和动手相经结合,你的单片机水平会提高的很快。
6.多想多练,做一些实际的项目,你可以根据你现有的开发板硬件条件,做出一些你感觉比较有意思的项目,实际动手做过项目和看过别人的项目还是有差别的。自已做过项目以后在工作或求职中就没有那么被动,也会有信心一点。
祝个位学习单片机的朋友早日提高!以上是个人见解有不同意见请提出来供广大单片机爱好参考。
高职院校C语言教学探讨 篇6
关键词:C语言;教学改革;教学方法
一、引 言
《C语言程序设计》是计算机专业的必修课和其他理工科学生的重要基础课程,由于覆盖面广、应用广泛,对于学生的基本编程素质的培养有较大的影响而备受重视。如何更好地完成教学目标,让学生真正掌握C语言,深入了解其精髓,值得每个C语言教学工作者不断探索。
当前,在高职高专院校,《C语言程序设计》课程一般都设置在一年级,学生从高中的基础教育转向学习全新的编程性的语言,学习难度比较大。主要有以下几个原因:一是学生的英文底子普遍薄弱,而C语言英文运行环境,对于运行过程和提示错误根本看不懂,导致上机调试困难重重;再加上对程序主观上认识过难,无形中挫伤了学习的积极性。二是学生的数学基础也比较差,一些编程算法都需要数学思想来支撑。诸多原因造成了C语言教学效果不佳,而对其掌握的程度如何,直接影响到后继相关课程的学习和掌握,甚至是整个专业的后继发展。
笔者根据多年的程序设计课程的教学实践,对《C语言程序设计》课程从教学内容、教学手段、教学方法等方面行了一些改革,并取得较好的教学效果。
二、教学改革措施
1.精简内容,培养兴趣
C语言语法繁多,学生初步接触容易有惧难情绪,因此第一堂课的教学显得尤为重要,它是能否激起学生学习热情的关键因素。一般建议在第一堂课介绍一些应用C语言的小项目,比如嵌入式开发驱动程序的编写、学生注册信息系统的管理。向学生演示运行一些信息管理系统及遥控电风扇运转的一些代码,让学生了解这门语言的一些基本功能,激发他们的学习兴趣。同时用每年获得大赛的学生的事迹激励他们,讲讲学好这门课的方式方法,帮助他们树立学好这门课的信心。
2.案例引导,项目驱动
以谭浩强主编的教材《C程序设计为例》为例,教学内容主要包括C语言语法基础、程序控制结构、数据类型、数组、指针、函数、文件以及它们的应用等。教材在内容组织上,虽然依逻辑思维方式进行了归类,但难点还是较为集中,跨度大;概念讲得多,分析少。再加上高职高专院校的学生,有相当一部分入校时,分数低,数学基础较差,逻辑思维能力不是很强,如果按照书本章节一步步讲下来,学生会产生畏难情绪,学习兴趣开始降低,以往一些学生在第三章节数据类型及表达式还没有完全上完心底就已经开始放弃这门课了。所以在上这门课的时候,建议采用“案例引导、项目驱动”[1],把课程学习内容联系真实环境,提出各种问题并形成主题任务,进行任务驱动式教学;将学生置于发现问题、提出问题、思考问题、探究问提、解决问题的动态过程中学习。比如第二次授课,就可以提出做一个管理信息系统,先和学生进行基本的功能分析,然后逐步地以实现每一个功能将各个章节的知识点融入进去讲解,以任务驱动教学[2],让学生真正了解语法为编程服务,而不是单纯的死记硬背一些语法知识。
3.建立良好的网络资源平台,促进师生互动
教学中涉及到的很多知识较抽象和难于理解,因此需要学生课下对课程的重点难点进行进一步消化和理解。因此,应该采用行之有效的办法来帮助学生解决在自主学习中可能遇到的一些问题,比如学生需要进行自主学习的一些教学资源,需要一个进行问题探讨交流的空间,以及教师需要及时地掌握学生自主学习的情况等等。为此,需要建立关于这门课程的学习网站,分别设置课程学习模块、在线练习及在线测试、学习资源建设、参考文献资料、教学论坛等。笔者在完成一个院级项目的过程中建立了一个关于C语言的重点课程建设网站:重难点动画演示课程中涉及的比较难理解的算法以及知识;常见问题解答以章为单位,由课程老师共同建设,不断的加以充实,逐年积累;利用留言板功能建立课程的论坛,教师可以根据自己的教学内容在其中创建话题(发帖),学生也可以在上面对自己的疑问发帖,针对这些话题学生被允许在课题后面发表自己的看法并与教师或其他同学交流,这一功能消除了传统教学中教师只能当面答疑的时空限制,学生能在讨论板上提出自己的问题,而教师可以对具有代表性的问题做出统一解答,避免重复解答,从而提高了教学效率及学习的主动性,同时教师可通过总结学生提出的问题对教学内容做出适时调整。
4.重视上机实践,注重综合考核。
C语言是一门实践性很强的学科,除课堂上的理论讲解外,实验教学也是至关重要的。由于学生是第一次接触程序设计,许多概念都是很抽象的,因此,要求在课程内容的安排上循序渐进,由浅入深,逐步引导。实践课除了需要携带教材以外,另外还需要与之相配套的实验指导书和实验报告册,对于实验指导书可以选择与课本相配套的,教师也可以根据自己的教学需要和学生的实际情况编写合适的实验指导书。对于这门课程学习结果如何,不是一张试卷就能给出答复。我们追求的不是学生懂了多少语法,而是能做出什么,所以对于这门课程,对学生学习成绩的评定,建议采用综合考核法,将平时的实践成绩与期末卷面成绩进行综合,得出本课程综合考评分。这样才能更加客观地反映学生的学习情况,同时也能更好地促进学生平时的学习。
三、结 语
C语言的教学需要不断探讨,我们应在教学过程中不断模索,化繁为简,多钻研教材教法,使学生将所学知识转化为实际工作的能力,提高学生的实际工作水平、综合素质和就业竞争能力,为企业提供适用型的人才。
参考文献:
[1] 邓云洲.案例教学在教学基本要素上与传统教学的区别.教育发展研究,2001,(12).
单片机C语言教学 篇7
1实训的设计目的
学习P1端口的使用方法和延时子程序的编写和使用,并且掌握七段数码管显示数字的原理。
2设计要求
单片机P1端口连接七段数码管段数据口,编写程序,使这位七段数码管按固定的时间循环显示0~9的数字。
3设计分析
单只共阴数码管连接在P1端口,当P1端口相应引脚为1时,对应数码管段点亮。程序中预设了数字0~9的段码,0~9的段码按固定时间间隔循环发送到P1端口,产生数字循环显示效果。
4硬件设计
用Proteus仿真时,先进行硬件电路的设计,所以先在Proteus中进行电路设计,打开ISIS 7 Professional窗口。选择所需要的元器件,放置好元件,布好线。左键双击各元件,设置相应元件参数,完成电路图的设计,如图1所示。
5软件设计
在Proteus软件中,既可以使用汇编语言,也可以C语言,所以,我在教学中使用两种编程语言进行编程,并且控制设计的软件进行数码管的显示功能。在教学过程中,先讲解学生熟悉的汇编语言,熟悉整个设计的思路过程。数码显示在之前的教学中已经讲解过,所以在Keil C51中输入如下程序。并将其转换为十六进制HEX文件 ------ 数码管显示数字 .hex文件。
5.1汇编源程序
ORG 0000H
START: MOV P1,#3FH ; 显示“0”
LCALL DELAY
MOV P1,#06H ; 显示“1”
LCALL DELAY
MOV P1,#5BH ; 显示“2”
LCALL DELAY
MOV P1,#4FH ; 显示“3”
LCALL DELAY
MOV P1,#66H ; 显示“4”
LCALL DELAY
MOV P1,#6DH ; 显示“5”
LCALL DELAY
MOV P1,#7DH ; 显示“6”
LCALL DELAY
MOV P1,#07H ; 显示“7”
LCALL DELAY
MOV P1,#7FH ; 显示“8”
LCALL DELAY
MOV P1,#67H ; 显示“9”
LCALL DELAY
LJMP START
DELAY: ; 延时子程序
MOV R4,#10
D1: MOV R5,#200
D2: MOV R6,#126
D3: DJNZ R6,D3
DJNZ R5,D2
DJNZ R4,D1
RET
END
5.2 C语言源程序
在讲解C语言之前,先复习C语言程序设计的基本知识,在此基础上,再进行程序的编写,具体程序清单如下 :
#include
#include
#define uchar unsigned char
#define uint unsigned int
//0~9的数码管段码,最后一个为关闭。
Ucharcode DSY_CODE[]={0x C0,0x F9,0x A4,0x B0,0x99,0x92,0x82,0x F8,0x80,0x90,0xff};
void Delay MS(uint x)
{
uchar t;
while(x--)
{
for(t=0;t<200;t++);
}
}
void main()
{
uchar i=0;
P1=0x00 ;
while(1)
{
P1=~DSY_CODE[i];
i=(i+1)%10;
Delay MS(180) ;
}
}
6调试与仿真
在Keil c51中输入如 下程序。并转换为十六进制HEX文件 ------ 数码管显示数字 .hex文件,过程如下 :打开菜单Project中的“Options for Target’Target’”,如图2所示,在Output选项中选中Create HEX File.
在Proteus中进行调 试,打开ISIS 7 Professional窗口,打开设计好的硬件电路图,左键双击AT89C51单片机,在弹出的对话框中进行设置,如图3所示。“Program File”项中,必须选择在Keil中生成的十六进制HEX文件 ------ 数码管显 示数字 .hex。
然后执行“Debug”菜单中的“Start/Restart Debuging”开始调试并仿真,仿真结果如图4所示。
7总结
单片机C语言教学 篇8
C语言具有灵活的语法、丰富的运算符、模块化和结构化的编程手段,程序可读性好,可以直接对硬件进行操作,能够实现汇编语言的大部分功能,生成目标代码质量高、程序执行效率高。用C语言编写的程序可移植性好,基本上不作修改就能用于各种型号的计算机和各种操作系统。C语言已成为当今单片机与嵌入式系统软件开发的主流语言。
1 问题的提出背景
传统的电子专业《C语言程序设计》课程教学主要以“通用PC机”作为教学平台(使用VC编译环境)进行课程教学,几乎完全屏蔽了计算机系统硬件,过多地要求对C语言语法、数据运算算法的学习,与电子专业相关课程《单片机与嵌入式系统》出现了一些脱节,导致学生没有明确的学习目标,不清楚学习C语言究竟用来干什么。
基于现实,笔者在电子专业《C语言程序设计》中,根据专业特点和人才培养目标,灵活引入单片机项目教学法。在使用“通用PC机”教学平台的同时,增加“单片机”教学平台(使用keil编译环境),通过直观的现象,激发学生的学习兴趣,提高课程学习的针对性,收到了良好的教学效果。
2 引入单片机项目驱动教学法
根据电子专业特点及人才培养目标要求,在《C语言程序设计》课程教学中,灵活引入单片机项目驱动教学法,适当改变传统的教学内容顺序,突出单片机与嵌入式系统软件设计所需要的C语言基础和编程思想,降低C语言输入输出函数格式语法和数据运算算法要求。充分利用直观、循序渐进、启发引导、理论联系实际、巩固性等教学原则,激发学生学习C语言的兴趣,培养了学生的创新能力。其平台框架如图一所示。
2.1 项目一:单片机控制LED灯闪烁
单片机控制LED灯闪烁,是学习单片机的入门实验。例如,利用51单片机P2.0引脚控制LED灯闪烁,且可以控制闪烁快慢。参考程序如下:
项目虽然简单,但在此项目驱动下,可通过直观的实验现象,激发学生的学习兴趣,从中学习基本的C语言知识点:(1)C语言认知:C语言程序结构特点;(2)常量、变量(全局、局部),数据类型(整型、字符型、位型),赋值运算符、关系运算符及其表达式;(3)函数概念、函数声明、函数调用、参数传递;(4)三种预处理指令:包含、宏定义、条件编译;(5)顺序结构、循环结构程序设计方法(for语句、while语句)。并且通过此项目,可以引导学生注重C语言编程规范化。
2.2 项目二:单片机模拟开关灯
51单片机读取开关状态,控制LED灯的亮灭。不同的开关控制对应的LED灯。比如开关S1控制LED1灯,开关S2控制LED2灯,开关S3控制LED3灯,开关S4控制LED4灯。
通过此项目,学习“选择结构程序设计”方法,即if语句、switch语句的使用。并且可以引导学生想象手机、食堂刷卡机、银行取款机按键程序需用选择程序结构设计,从而激发学生的探索精神。
2.3 项目三:单片机控制流水灯
在项目1的基础上,利用51单片机的P2口8个引脚控制8个LED组成的流水灯。对P2口进行编码,实现不同的流水灯效果。比如将编码0x7f、0xbf、0xdf、0xef、0xf7、0xfb、0xfd、0xfe依次赋给P2口,便可实现轮流点亮每个灯。在此思路基础上,引导学生学习“一维数组、存储类型”等C语言知识,利用一维数组存放编码,然后通过“循环结构”依次取出数组元素赋给P2口,实现同样的流水灯效果。并且可以启发学生通过改变编码来实现不同的流水灯效果,培养学生的创新能力。
在此项目中,还可以引入单片机与嵌入式系统软件设计中常用的“位运算符”实现流水灯的效果,这样就突出了C语言中“位运算符”的地位和应用。
2.4 项目四:数码管动态显示
结合电子专业特点,介绍数码管电路组成原理,在项目3的基础上,学习实现单片机控制1位数码管的显示;然后,实现单片机控制多位数码管,借助延时函数,使多位数码管轮流显示数据;最后,引导学生通过调整延时函数的参数以缩减延缓的时间,直至多位数码管同时显示数据,这就是所谓的“数码管动态显示技术”。实践证明,通过这种教学思路,大大激发学生的学习兴趣,让学生通过C语言编程直观、轻松地理解“数码管动态显示”原理,深刻体会C语言的魅力。
利用单片机数码管显示平台,可以学习简单的数据排序算法、指针等C语言知识点。
2.5 项目五:单片机控制点阵显示
结合电子专业特点,介绍点阵显示组成原理,很自然地引入C语言中的“二维数组”知识,通过循环嵌套结构程序实现点阵显示。同时说明单片机与嵌入式系统设计中经常用到的液晶显示,同样用到“二维数组”知识。这样,学生就明确了“二维数组”的应用场合,提高了学习针对性及兴趣。
2.6 项目六:单片机中断系统简单应用
类比日常生活,简单介绍51单片机的中断系统,引入“中断服务函数”概念,讲解主函数、中断服务函数的流程,从而拓展函数的概念,这在传统《C语言程序设计》课程教学中是没有的,但“中断服务函数”在单片机与嵌入式系统软件设计中是常用的。
2.7 项目七:单片机网络通信
通过引入该项目,使学生了解结构体、链表在单片机与嵌入式系统软件设计中的应用,然后通过PC机平台VC编译环境学习简单的结构体、链表知识。
3 结束语
本文针对传统的电子专业《C语言程序设计》课程教学存在的问题,提出灵活引入单片机项目驱动教学法和适当的教学原则,采用“通用PC机”和“单片机”两套教学平台,改变以往C语言课程的相对独立性,激发学生学习兴趣,调动了学生学习积极性,提高了学生的动手实践能力和创新能力,实现了课程“学以致用”的教学目标。
参考文献
[1]邢海霞,张洪斌《.计算机接口编程技术》教学改革的实施研究[J].科技广场,2010,(03):213-214.
[2]谭浩强.C程序设计(第三版)[M].北京:清华大学出版社,2005.
单片机C语言教学 篇9
C语言提供了30多个运算符, 范围很大, 应用广。除了控制语句和输入、输出之外, 几乎所有的基本操作, 都是按照运算符来进行处理的, 可见其在C语言中的重要性。
1.C语言运算符的作用与分类
C语言的运算符可以灵活地与运算对象组合成运算表达式。按其在表达式中的作用, 运算符可分成基本运算符和其他运算符。基本运算符有8类, 即算术运算符、关系运算符、逻辑运算符、自增运算符、自减运算符、字位运算符、赋值运算符、条件运算符、逗号运算符等。而其他运算符有指针运算符和杂项运算符等。每类运算符又包含了多种运算符。
2.基本运算符
⑴算术运算符及自增、自减运算符
表4列出了加、减、乘、除、取模5种算术运算符, 以及自增、自减运算符的操作说明。其中, 除法运算符又分两种情况, 一是整除, 即两个整数相除, 所得商舍尾数, 仅取整数部分, 如5/10等于0;二是实除, 即两个实数相除, 所得商也是实数, 如5.0/10等于0.5。
自增运算符++和自减运算符--, 是C语言中最具特色的单目 (一个量) 运算符, 其操作对象必须是整型变量, 而不能为常量或表达式, 其功能分别是使变量增1或减1。自增运算符++和自减运算符--有前缀运算符和后缀运算符两种应用方式, 两者产生的效果有些不同:前缀运算符, 如++i或--i, 在使用i之前, 先使i的值+1或-1;后缀运算符i++或i--, 在使用i之后, 才使i的值加1或减1。
例如, y的原值等5, 则:
语句X=++y, 表示y先加1再运算, 得y=y+1=6, x=y=6;
语句X=y++, 表示y先运算再加1, 得x=y=5, y=y+1=6。
在《电子制作》2009年第10期, 《PIC单片机C语言程序 (1) 》的延时函数中, 我们已用过后缀运算符i++, 大家可以从中体会其用法。
⑵逻辑运算符
逻辑运算符是基本运算符中的一种。逻辑运算符有:与“&&”、或“‖”、非“!”等3三种。
逻辑运算符&&、‖为双目 (两个量) 运算符, !为单目运算符。它们要求的操作对象是非0的整型值和整型0表示的逻辑量。其运算规则如下:
1) 若两个操作对象都为非0整型值 (真) , 则相与的结果为1 (真) , 否则为0 (假) ;
2) 若两个操作对象都为整型值0 (假) , 则相或结果为0 (假) , 否则为1 (真) ;
3) 若操作对象为非0整型值 (真) , 求非的结果为0 (假) , 否则为1 (真) 。
这里补充一点, 算术运算符中的加、减和乘, 与大家熟悉的算术运算规则完全相同, 而除运算符应按上述规范使用。
C语言的运算符内容较多, 限于篇幅, 这里仅概况地加以介绍, 希望读者在学习时, 根据PIC单片机书籍, 深入学习C语言的运算符, 并通过编写C语言程序, 掌握每个运算符的意义和使用规则。
3.可预置起始时刻的时钟程序
⑴硬件电路
利用《电子制作》2010年第1期《PIC单片机C语言程序 (4) 》一文中的4位LED数码管显示电路 (图3) , 可以制成24小时或12小时循环显示的时钟电路, 且该时钟可以由人工预置起始时刻, 即电路插上电源后, 可根据当时的实时时刻, 如手机或电视屏上显示的时刻, 进行人工校时, 之后即可作时钟用;若不进行人工预置 (校时) , 该电路就自动从00.00开始, 以分为单位起始计时, 此时, 该电路可作人工守侯定时器。该时钟电路不显示秒, 而是以分钟开始的显示。
该电路仍采用PIC16F84A芯片, 当写入本文下面给出的程序后, 即可作24小时时钟用。其使用方法如下:
插上电源, LED数码管显示00.00, 按下图3中的K1键, 数码管全灭, 松开K1键, 再按下K1键, 数码管从0 (分位) 开始计数, 到达指定的分钟显示时, 放开K1键, 又按K1键, 时位显示, 到达指定的时显示时, 放开K1, 时钟即按人工预置起始时刻工作, 操作十分简单。
注意:如果预置时间的时位是从00开始而仅有分钟的有效值时, 当预置分钟指定值后, 仍要再按下K1键, 使时位从00递增又回到00, 时钟即可工作, 否则时钟电路不会工作。
⑵24小时的时钟C程序
根据图3编写的24小时时钟电路的功能, 可绘出相关流程图 (限于篇幅, 这里从略, 若需要, 可根据《PIC单片机C语言程序 (4) 》一文的图5, 0~9999的计数流程图, 加上下面的C程序中的注释, 扩展绘出) , 再由流程图编写出24小时的时钟C程序。该程序命名为pic0.5.c, 其清单如下:
说明:1) 上述C程序, 经picc编译器编译, 生成目标码.hex, 即可用编程器将.hex程序烧写到pic16F84A芯片中, 再用《PIC单片机C语言程序 (4) 》一文中图3电路即可制成24小时的时钟。该时钟与标准时间相比, 仅慢1秒/周。略增、减本程序中的d值, 可再校时。
2) 初学者仔细查看程序中的注释, 即可理解本C程序的编写原理。
单片机C语言教学 篇10
在2010年第2期《PIC单片机C语言程序 (5) 》一文中, 我们介绍了可预置起始时刻的时钟的硬件电路并给出了C语言程序。下面要介绍的可预置起始时刻的倒计时程序, 是作为日常生活中对某事件的定时之用:只要某事件由人工设置的计时时间到, 倒计时电路便会发出报警声。倒计时的特点是, 计时一旦达到预定值, 其值就归零。利用归零条件, 即可实现任意倒计时达到时的报警功能, 提示人们定时已到。
本倒计时器可在0~99分钟内任意设置计时值。例如在厨房中, 蒸大米饭 (8两米) , 定时33分钟, 烧开水 (一壶) 为20分钟, 煮胡罗卜 (红色) 为30分钟等, 只要设定时间一到, 倒计时器即报警, 使用十分方便。当然, 上述倒计时值, 均是事先用普通时钟确定每个事件所要花费的时间, 列出相应定时标准, 才能用倒记时器进行定时。
(1) 硬件电路
图6是0~99分钟可预置的倒计时电路。PIC16F84A单片机 (4) 脚为手动复位端, 外接R1、D0、C6、K0 (微动开关) 组成复位电路; (3) 脚RA4外接上电阻R2和倒计时人工预置开关K1;⒄脚RAO外接R0、V3和蜂鸣器, 组成倒计时值达到 (归零) 时的自动报警信号。电路中的两位LED数码管和V1、V2组成0~99分钟可预置LED数码显示电路, 其电路原理与2009年第12期《PIC单片机C语言程序 (3) 》一文中图3的起始两位计数电路相似。
(2) 程序流程图
图7、图8、图9分别为0~99分钟可预置的倒计时程序的主程序、显示函数和键值扫描程序流程图。通过流程图, 读者可以加深对于倒计时程序设计原理和对2010年第2期《PIC单片机C语言程序 (5) 》一文中可预置时钟电路程序的理解。
(3) 倒计时的C程序
根据图7~图9编写的的倒计时C程序 (命名为pic06.c) 清单如下:
浅探《C语言程序设计》教学 篇11
关键词:C语言;项目化教学;教学方法
中图分类号:TP312.1-4 文献标识码:A 文章编号:1674-7712 (2014) 18-0000-01
《C语言程序设计》作为计算机专业的基础课,在整个课程体系中占有重要地位。在C语言教学过程中,教师的教学方法和学生的理解接受能力的差异,对教学效果都会产生直接的影响。总结多年来的教学经验和教学体会,结合学生在学习程序设计类课程的思维规律和模式,把一些经验和方法总结出来,希望能对C语言教学有所帮助。
一、现行教学和学习中存在的问题
现行教学中理论课与实践课相对分离,不能相互促进。理论课中往往只注重对教材知识的分析和灌输,而在实践课程中,老师很难监控到每个学生,了解他们是否都在认真编写、调试程序。这就造成理论课没有起到为实践课打基础的作用,实践课也没有起到巩固、应用理论课的作用。《C语言程序设计》是一个逻辑性很强的课程。学生在面对具体的程序设计时遇到的问题与教材中的内容相距甚远,这使大多数同学感到无从下手。这其中的原因可以分成两类:一方面目前高校使用的大多数教材中,结构都基本相同。在每一章介绍完了概念之后,提供一些例题解释相关概念的使用方法,并在章节结束后针对本章中出现的内容提供一些练习题。考试也主要是测试学生对于教材内容的掌握程度,而与实际应用相距较大。这种考试实际上主要是测试学生对书本中的基本知识的掌握程度,而忽略了对学生解决实际问题的能力的培养。另一方面为了应付考试,学生更多注意的是教材中的典型例题与老师指定的重点内容,对于程序的系统概念没有真正理解,特别是没有程序整体设计的概念。这样做的结果就是学生在学习时一切围绕老师讲课的内容,特别是老师讲授的例题。学生在学习的过程中,没有注意如何综合运用相关内容来解决具体问题,导致学生在学完程序设计课程进入应用阶段时,面对具体的专业设计要求无从下手。
二、提高教学效果的方法和途径
(一)明确课程目标。本课程的目标主要是提高学生解决实际问题的能力,适应社会需求。对C语言程序设计课程的教学而言,强调实践性是在教学中特别重要的问题。老师的教学不应仅仅是传授知识,应该以培养学生的实际应用能力为主。C语言的内容繁多,在有限的课时内不可能也不必要面面俱到,所以必须突出重点,突出实用性,关键在于教会学生正确运用C语言编写程序,一些细节、具体规则和进一步的知识可以让学生在今后的应用中来不断学习和掌握。教师应始终坚持以应用为中心,以算法为基础,以培养学生的实践能力为核心,突出技术实用性和再学习能力的培养。
(二)进行教学改革。1.教学内容改革。高职学校学生的培养就是要直接面对社会需求,招之即能用。因此,程序设计课程要以社会对编程能力的需求和技术发展为依据,调整教学大纲和教学内容,以适应技术岗位能力要求,设计课程体系。在课程设置与建设中,要充分体现教学内容在训练和提高学生实践能力方面的要求,强化学生的实际开发和应用能力。总结本人多年的教学经验,结合其他老师成功的教学方法,采用项目化教学方法可以达到很好的效果。这个项目应具有以下几个特点:(1)实用性。本项目就是一个具体的实际需求,是解决现实性中一个实际问题而设计,这样也能提高学生的兴趣和热情;(2)完整性。本项目的程序设计是系统的、完整的,要能全面运用整个课程学习的知识,案例的设计贯穿整个课程的学习,随着课程的学习不断完善。
2.改变教学思想和方法。培养学生对C语言的兴趣及正确的思维模式。《C语言程序设计》注重由设计算法到书写程序并进行调试的整个过程,显得抽象、复杂,这也是大多数学生抱怨程序设计太难、太深奥、不好学的主要原因。在教学过程中,先介绍项目的整个程序设计框架,目的是使学生先对程序有个初步的印象,再结合教材,简单介绍该例子中用到的语句,让学生对该语言的学习有一个大概的了解,避免学生对学习语言望而生畏。整个教学过程中应该把“解题思路、方法和步骤”当作授课的重点,从而让学生明白如何分析、解决实际问题,逐渐培养学生进行程序设计的正确思维模式。计算机语言程序设计中算法是其灵魂,是教学重点,也是教学难点,而语言只是表示形式。没有正确的算法,计算机将解决不了任何问题。对于C语言所涉及到的算法,应进行部分精讲多练。通过案例分析,重点讲解程序设计的思想和方法,辅以語言知识的介绍,将课程内容分为若干个主题,以项目程序设计为贯穿各主题的主线。每个主题的教学过程由“要点讲解”、“练习/上机实践”和“疑难解答”三个阶段组成,然后提出项目中的问题,以学生独立完成为主,教师只提供必要的辅导,培养学生探索问题和解决问题的能力,更有利于创新能力的培养。整个课程教学围绕一个工程项目进行,通过逐步拓展的实训项目和设计,将每一阶段的学习进行小结性的贯穿与能力提高。将C的知识点都溶化到项目的程序编写中。
3.改革课程考核方式。(1)平时上机训练时给学生留一些编程习题,每次根据学生编写情况进行测评并占据期末总成绩30%;(2)期末前,要求学生完成本课程项目的整体设计,考核学生综合解决问题的能力,占据期末总成绩30%;(3)期末进行理论考试,占期末总成绩的40%。
(三)展示学生作品,激发学生的学习欲望。计算机软件课程具有多样性、复杂性和求异性特点,我们要针对每个学生任务完成的情况,让同学们展示自己的学生成果,及时肯定学生的成绩,这样会有利于激发学生的学习热情,保持学生的学习兴趣,对学生的后续学习将产生强大的动力和自信心。
(四)培养学生的自学能力和创造性。学生学习计算机语言的最终目的是编写满足实际需求的程序,所以在教学中教授的不仅仅是具体语言的语法知识,更重要的是通过这门语言学习,培养学生遇到实际问题自己分析问题、解决问题的能力。我们可以通过给学生布置作业的形式让同学们自学,老师既要要求学生独立思考、自主学习,又要鼓励学生间进行协作学习。教师可以分配一些比较复杂的问题,由几个学生组成一个小组合作解决,这样同学们可以互相探讨学习方法,协作解决一些遇到的问题。通过解决问题,锻炼学生综合应用知识的能力、培养其创造性和合作精神。
参考文献:
单片机C语言教学 篇12
4.C程序pic07.c的SIM软件仿真调试
在《PIC单片机C语言程序设计 (8) 》和《PIC单片机C语言程序设计 (9) 》中, 我们已对C程序pic07.c进行了编辑和编译, 现在需要查看该程序能否达到预期的设计目标, 即能否完成pic07.c的0~99秒增量计时LED数码显示功能 (脉冲发生器) , 因此需要调试程序。
调试程序, 可以使用MPLAB ICD2在线调试器、MPLAB ICE2000硬件仿真器等开发工具。对于初学C语言程序, 又没有上述硬件仿真调试器的读者, 最好选用MPLAB SIM软件模拟仿真器进行程序的调试。
模拟仿真调试是检查程序是否正确, 能否实现预期功能的有效手段。有了它, 可以实现程序的“单步运行”、“单步越过”、设置“断点”、用软件跑表直接测试延时函数的准确计时等等, 对初学C语言编程者特别有用。
PTC单片机的C语言程序, 是由函数、表达式和各种运算符组成的。初学C语言程序时, 很难清楚看出程序是如何运行的, 而利用程序的模拟仿真, 则可直观看到程序运行的整个过程。
⑴模拟仿真的主要命令及功能
PIC单片机C语言程序的SIM软件的模拟仿真, 是在MPLAB IDE集成开发环境 (C语言) 中进行的。操作时, 只需利用MPLAB IDE中的有关菜单, 如Debugger (调试) 、Select Tool等命令项, 即可完成模拟仿真操作。为了方便读者查看程序或操作, 特将模拟仿真时常用的主要命令和功能汇集起来, 如表5所示。
⑵设置软件仿真调试状态窗口
前面已经讲到, 对程序进行软件仿真的先决条件, 是在MPLAB IDE环境下将所编辑的源程序编译成功后, 才能对源程序进行仿真调试。对pic07.c的源程序, 我们已成功地进行了编辑和编译, 所以现在可以直接进行软件仿真了。也就是说, 只需设置软件仿真调试状态的窗口, 便可进行调试。下面介绍具体方法。
在PC机显示桌面上, 双击MPLAB IED V7.40快捷图标, 打开MPLAB IDE的操作界面。用鼠标选择 (点击) MPLAB IDE中的Debugger (调试) (下拉) Select Tool (选择工具) (下拉) MPLAB SIM (模拟) 菜单项, 即可把项目设置成模拟仿真调试状态, 然后利用“项目树窗口” (参见《PIC单片机C语言程序设计 (9) 》图37) , 用鼠标双击pic07.c (源程序) , 即可打开pic07.c的源程序, 如图43所示。
此外, 也可采用先在MPLAB IDE窗口中, 通过相关操作把编译成功的C程序摆在MPLAB IDE窗口中, 再用鼠标选择Dedngger→Selec Tool……的方法, 把项目设置成仿真调试状态。经过上述操作后, 会在MPLAB IDE的界面工具栏上自动生成模拟调试Debug的快捷图标。该图标从左到右的功能依次为:Run、Halt、Animate、Step Into、Step over、Stepout和Reset, 共7个命令 (如图44所示) 。在进行上述操作时, 如果在工具栏上未自动生成图44所示的快捷图标, 可用鼠标点击MPLAB IDE中的菜单“Tools”, 然后在其下拉菜单中选择 (点击) “2MPLAB Macros”, 弹出图45所示的快捷图标, 此时, 只需用鼠标点击该图的三角形按钮, 在其下拉菜单中点击“Debug”命令, 同样可在MLAB IDE的工具栏上生成如图44所示的模拟调试快捷图标。完成上述操作后, 我们就可以进入程序的模拟调试运行阶段了。
说明:图43工具栏上的模拟调试快捷图标的功能, 与MPLAB IDE中的Debugger下拉菜单中的命令Run、Animate、Step Into、Step over、Step out和Reset等完全等效, 只是其操作没有图43中的快捷图标直观、方便罢了。
⑶Animate动画运行
初学C语言程序进行模拟仿真运行调试时, 直接使用图43工具栏中的快捷图标, 最为直观方便。
我们首先选择该图标中的“Animate”动画运行命令, 以直观pic07.c程序的整个运行过程。用鼠标点击Animate (参见图44中的标注) , 图43中主程序main的左边会出现一个红色箭头, 不断沿着程序的代码移动, 即表示程序正沿着main () 以下的赋值和循环语句→TRISB=0x00;→Whie (RA4) →While (1) 中display (x) →Void display (unsigned int x) …→While (d>0) →[PORTA=Ox1F;→PORTB=SEG[unit bit];…d--;]运行。程序运行时, 要在方括中运行100次 (因为d=100) , 方可跳出循环到程序末尾的X++; (X值从0+1代表LED显示的个位值从0增量到1) →if (x==99) 判断X值是否为99, 如果未达到该值, 返回display (x) →Void display (unsigned int x) …如此运行。这就是Animate命令模拟运行的功能, 即可以完全看到pic07.c程序的运行过程。
在前述的pic07.c程序沿While (a>o) 循环语句运行时, 应循环运行100次才跳出循环到X++;代码处, 程序在该循环语句运行中的耗时约33分钟。显然, 这么长的运行时间, 调试起程序来实在太费时了。所以, 单纯使用该命令, 仅适用于初学C语言时学习调试。若能在使用该命令时配合其他调试命令, 则可大大降低程序的运行时间。
⑷Step Into、step over和Step out命令配合运行调试
前面讲到, 用Animate (动画运行) 命令, 观察pic07.c程序运行, 会感到运行速度较快, 看不清楚程序经过的路径。这里介绍用工具栏快捷图标 (见图43) 中的命令Step Into、Step over和Step out, 对程序进行模拟调试的方法, 其功能见表5。
为了灵活使用上述命令, 大家还应了解C程序的不同代码在运行时所用的时间 (耗时) , 才能正确选择各种命令。为此, 笔者将模拟运行时, pic07.c中的各种赋值语句、延时函数delay (200) 、显示函数 (display) 等, 运行的时间分别进行了实测, 见表6, 以供读者选用图43中的三条调试命令Step Into、Step over和Step out时参考。
下面具体介绍使用Step Into、Step over和Step out命令对pic07.c进行调试的操作方法。
1) 设定程序调试的起点
在图43中 (假设模拟调试准备已操作完成) , 用鼠标点击Animate命令, 再以最快速度用鼠标点击Halt (停机) , 此时在主函数Void main () 以下的某条赋值语句 (如TRISA=0x10;) 的左边会出现一红色箭头, 这是模拟调试的起始运行点, 如图46所示。
2) Step Into单步运行
利用Step Into命令, 可以清楚看到pic07.c程序从主程序开始一步一步地运行。操作时, 用鼠标点击图44中快捷图标Step Into (参见图44的指示) , 每点击一次该图标, 程序运行一条代码, 可参照表6一步一步进行。当Step Into进入调用显示函数的函数体中时, Step Into还能工作, 直到unit bit=X%10时, 因该赋值语句需耗时323μs, 该单步运行因每步走时太短, 它会随鼠标点击step Into时, 在该语句原地踏步, 无法前进, 此时应换用另外的命令。
3) Step out或Step over单步运行
点击图43中的快捷图标Step out (或Step over) , 点第一次, 程序越过unit bit=X%10, 点第二次越过ten bit=X/10%10;然后再用鼠标点击Step Into (单步) , 直到dalay (200) ; (延时函数) , 由于该延时约5ms, Stap Into无法快速运行, 此时可改用Step over命令, 用鼠标点击之, 程序即可从delay (200) ;到达赋值语句RA3=1;。
4) step Into单步运行
从RA3=1;开始的三条代码的运行时间较短, 仍可用单步运行命令运行。即点击step Into三次, 直到程序运行delay (200) 为止。然后换用step over命令, 点击step over, 即可到RA2=1;, 再点击step Into两次, 运行到d--;至此, while (d>0) 循环语句执行了一次循环。再点击step Into, 红色光标回到while (d>0) , 其d=100变成d=99, 由于此时while中的d值仍>0, 程序将继续在该语句中运行。如果按上述方法继续运行该程序, 则必须重复100次 (因d=100) 才能跳出该循环语句, 显然太费时。
5) 设置断点和使用Run全速运行
为解决上述问题, 可用全速运行命令Run进行调试。由于点击一次Run命令, 程序的运行时间在2s (秒) 以上, 为了控制程序运行, 应先在需要观察程序运行情况的语句处设置断点, 这是调试程序时经常使用的方法。设置断点的作用, 是使程序运行到所设置的断点时自动停止。此后, 还可根据实际需要选用其他命令进行调试。设置断点的方法如下:双击需要设置断点所在行代码的最左端, 在该行会出现断点标志——红色“B”, 如图47中设置了两个断点。断点设置好后, 点击Run命令, 程序会立刻运行到图47中的第一个断点处, 这时再用鼠标一步一步点击step Into命令, 程序会从pic07.c的x++→if (x==99) →dispay (x) →新的循环又开始 (LED数码管从00, 变到01) , 如图48所示。
【单片机C语言教学】推荐阅读:
学习单片机c语言还是语言06-01
单片机的C语言分析10-08
单片机c语言学习心得08-19
单片机c语言试题库10-18
单片机c语言学习总结01-14
51单片机控制交通灯原理图及C语言程序01-07
单片机汇编语言教学论文01-29
单片机c语言实训报告07-23
单片机理论教学09-24
单片机实习教学12-17