单片机的C语言分析

2024-10-08

单片机的C语言分析(共8篇)

单片机的C语言分析 篇1

0引言

目前,虽让采用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语言,单片机,教学

高职C语言与单片机融合教学初探 篇2

关键词: 高职教育 C语言 单片机 融合教学 智能车

引言

随着电子技术的飞速发展,采用C语言开发的单片机控制类产品占据了大量市场。单片机产品的设计、生产、调试和维修岗位需要大量高职人才。因此,C语言课程和单片机应用课程成为应用电子、电气自动化、计算机控制技术等工科专业的主干课程。这些课程的实践性要求较高,对高职学生有一定难度。因此,开展高职院校C语言和单片机课程的教学改革成为高职教学研究的热点。根据高职学生的特点和岗位需求开展教学工作,对学生更快地适应工作岗位有重要的现实意义。笔者结合多年C语言和单片机的教学经验,对高职的C语言和单片机的融合教学进行探讨。

1.传统教学的不足

1.1知识遗忘率高。

国内高职院校电子电气类专业的单片机教学大多选用汇编语言或者C语言开发单片机应用系统。以51单片机为主流的汇编语言,指令数量多,不方便记忆。因此,越来越多的高职院校转向C语言开发工具的单片机教学。根据传统的高职教学方案,C语言课程和单片机课程开设在不同学期,C语言是单片机的先修课程。为了构建相对完整的知识体系,学生在学习完C语言之后才开始学习单片机,时间相隔长达半年之久。这种做法导致知识遗忘率较高,迫使一些教师把复习C语言作为单片机课程的教学内容之一,以此强化教学效果。由于总学时有限,单片机本体的教学内容相对减少,导致学生对单片机学得不深、学得不透。

1.2内容枯燥,实践少。

在C语言的机房教学过程中,主要的输入输出设备是键盤和屏幕,以简单计算为主的教学内容相对枯燥,表现形式单一。学生很容易把C语言单纯理解为计算机专业课,与所学的电子电气专业无关。这种对C语言主要功能的认识误区,会降低学习兴趣,削弱单片机开发的语言基础。C教学实践表明:电类专业的高职学生很难深入理解指针和数组的应用,对C语言的嵌入式开发功能理解不透,导致先修课程基础不牢固。进入单片机学习阶段以后,薄弱的C语言基础将会妨碍单片机的教学效果。同时,单片机特有的寄存器C定义和特殊位指令还需要补充学习。

传统的单片机教学以理论教学为主,按照“硬件封装—寄存器功能—软件流程—外围接口”的顺序,强调和追求完整的单片机理论体系结构。由于缺乏合适的实践载体,因此大量专业术语的枯燥讲解使学生上课时昏昏沉沉,似懂非懂。过多的理论灌输使很多学生放弃了单片机课程的学习。这种“重理论、轻实践”的教学模式培养出的学生,很难快速适应今后的单片机工作岗位。

1.3理实脱节,创新少。

传统的单片机课程大多数采用实验箱进行实践教学[1],完成验证性的实验。这种实践模式跟单片机的实际产品有很大差异,教学效果不理想。不少“95后”的学生功利心强,为了早点完成实验,过度追求实验结果,忽略了单片机硬件电路装调、软件调试测试方面的能力提高。当全部课程结束的时候,很多同学对单片机产品开发、装调的全过程不了解,对单片机仿真器的仿真方法(尤其是硬件仿真)掌握不到位。这种教学过程理实脱节的现象,抑制了学生创新能力的发挥。

2.融合教学的设计

针对上述问题,我们探索把C语言和单片机的知识有效融合,推进教学改革,开展项目教学,采用“教、学、做”一体化的融合教学,强化教学效果,更好地体现高职高专的教学特色和教学理念。

教学改革方案的总体思路是:以具有吸引力的项目载体为主线,把C语言和单片机课程融合,开设“C语言与单片机”课程。在高职教学过程中,采用“教、学、做”一体化授课,提高学生动手实践能力。以够用为原则,适当精简C语言的教学内容,降低教学深度。适度增加单片机应用的自主创新环节,鼓励学生思考,提高应用创新能力。

2.1项目载体。

合适的项目载体有利于实现高职项目化教学[2],促进学生技能的培养。选择“贴近生活”、“通俗易懂”的项目载体,是提高学生学习兴趣的有效手段。在本教学方案设计中,我们选用的项目载体是:单片机智能车。智能车属于机电一体化的作品,体积小,重量轻,实施难度适合高职高专的教学水平。项目载体的主要功能是采用AT89S52单片机控制车轮伺服电机,实现智能车的运动控制。在光电传感器的配合下,单片机控制小车进行循迹运动。在超声传感器的支持下,单片机控制小车实现“避障”功能。

2.2具体方案。

“C语言与单片机”融合课程总计60学时,其中实践30学时,理实比为1:1。教学全过程以单片机智能车为核心,以学生为主体,教师起引导作用。学生通过智能车的制作与调试提高动手实践能力,通过思考和提问激发创新思维。整体教学方案可以分成六个模块,简述如下:

(1)课程导入和智能车综述

在这个教学模块中,教师首先讲授单片机的典型应用、历史沿革、主流分支和前沿技术,使学生了解课程的教学目标和对应工作岗位,浅显了解单片机产品。其次,教师演示装调好的智能车实物,学生能正确理解智能车的主要功能,提高学习兴趣。实践环节安排的内容是单片机智能车的结构件安装。在教师的指导下,学生根据产品套件说明书的要求,使用螺丝刀完成车架、车轮、电机、电沲盒等结构件的安装和调试。在装调完毕以后,教师补充讲解智能车应用场合和综述,学生对项目载体有了更加清晰的认识。

(2)控制板的硬件设计与装调

首先,学生完成智能车单片机控制电路板的安装、焊接和硬件调试。其次,教师讲解单片机最小系统(包含:单片机、时钟电路、复位电路)的电路结构和工作原理。学生在明确单片机IO接口使用方法之后,简单了解车轮伺服电机的驱动电路工作原理。通过“讲练结合”的教学方法,学生得到了单片机产品的硬件设计、安装、调试的全过程体验,掌握了电路组成和原理,提高了单片机硬件装调的实践能力。

(3)简单运动的开发调试

本教学模块主要完成智能小车C51的IO接口控制,实现伺服车轮的前进功能。教师在简要介绍51单片机系统的软硬件开发环境之后,把教学重点转入C语言。通过LED亮灯的样例程序,完成C语言的概述导入。在本模块教学中,主要涉及的C51知识点有:数据类型、运算符与表达式;C51特殊功能寄存器的C定义;51的位类型与位运算;顺序结构程序设计。在操作方面,学生须掌握KEILμVision软件开发平台的使用方法,包括代码编辑、编译、下载和仿真调试。

(4)复杂运动的开发调试

本教学模块的主要功能是:通过C51控制小车的伺服车轮,完成后退、转圈、加减速、转向等复杂运动功能。在这一阶段,学生可以通过项目载体的调试,结合51单片机的特点,完成C语言中选择结构程序、循环结构程序的学习。在此基础上,教师引导学生尝试进行程序优化,教会学生数组的使用、函数的调用技巧。

(5)人机接口模块的开发调试

在智能小车的单片机控制板上,增加数码显示和触须接口,可以完成小车运动计时和触碰避障功能。在教学过程中,通过“先做后讲”的方式提高學习兴趣能够取得更加理想的教学效果。学生通过实践环节观察单片机人机接口的电路结构,通过C51编程与调试直接体验“软件去抖动”、“LED字形码编程”等应用技巧。

(6)避障模块的开发调试

避障模块装调是智能小车项目载体的综合教学环节。在C语言应用部分,侧重指针、结构体编程和开发。在单片机方面,须掌握“中断”的概念及其应用方法、串行接口的调试与编程。避障模块采用了红外反射传感器,融合了传感器应用[3]、模拟信号调理等方面知识。因此,开发调试智能小车的避障模块,能加深学生对单片机产品总体框架的理解,培养他们的单片机综合应用能力和开发能力。教学实践表明:部分优秀学生在这一阶段能优化和创新避障算法程序,提升小车的智能化水平,学生的产品创新意识得到进一步强化。

以上六个模块的教学方案以智能小车装调为核心,包含了传统C语言课程和单片机课程的主要知识点。智能小车体积小,重量轻,易于携带,便于各种教学方法的灵活运用[4]。比如:我们把课堂教学与课外教学紧密结合,组织“城院巧匠杯智能小车”竞赛,激发学生学习热情,丰富课余生活,提高学生的单片机综合应用能力和创新能力。“C语言与单片机”融合课程采用模块计分的评价考核方式,前五个模块各占总分的15%,第六模块占25%。在考核方案中,重视学生的过程体验,把团队协作、职业素养作为评价的重要组成部分,提高学生综合职业素质。

结语

高职传统的C语言课程和单片机课程分开教学,知识遗忘率高,教学效率低,融合度差,理实不能有效结合,不利于创新型人才的培养。针对上述不足,本文探讨了以单片机智能车为项目载体的C语言与单片机融合教学设计,给出了六模块教学的具体方案。教学实践表明:采用“教、学、做”一体化融合两门课程的教学改革方案,方便运用各种教学方法,学以致用,有效激发高职学生的学习热情,有助于创新能力和职业素质的培养,达到良好的教学效果。

参考文献:

[1]冯惠秋,吕宁.《单片机基础及应用》课程实践模式探索[J].职业教育研究,2013(6):123-124.

[2]焦玉全,朱燕祥.单片机原理及应用课程项目化教学探索[J].读与写(教育教学刊),2013(7):29-30.

[3]李潇雯.智能小车设计中传感器的应用[J].太原大学教育学院学报,2015(2):96-99.

单片机的C语言分析 篇3

随着微电子技术的不断发展和广泛应用, 计算机编程语言也越来越丰富, 因而学生也被要求具有应对各种语言的学习应用能力, 在掌握好C语言后, 对于其它语言的学习则游刃有余。基于单片机进行应用系统开发, C语言作为一种高级的编程语言, 无论是现在进行嵌入式系统开发的相关企业, 还是当前的全国电子设计大赛等学生竞赛中, 都越来越受到大家的关注, 并将其作为一个主要语言开发工具。故本文提出的基于单片机的C语言教学方法, 对结合单片机进行符合实际工程需求的硬件和软件开发的爱好者或学习者有很重要的意义。

二、教学对象

本学期本人所教授的主要课程之一是《C语言程序设计》, 所面向的教学对象是大一新生, 大多数同学由于在高中阶段很少接触电脑, 对于语言的学习更是陌生, 而且数学功底比较薄弱, 同时, 加上学习过程中大多数学生往往缺乏积极性和主动性, 遇到困难不能刻苦钻研, 往往选择放弃。因此, 针对学生的基础情况, 教学讲授的进度不能太快, 教学的内容不能讲的太过深奥, 而且教学方法要灵活多变, 结合实际事物进行简单比喻来讲解, 只有这样才能较为形象地教好C语言这门课。

三、C语言的应用地位

C语言是一门使用最广泛的程序开发工具编程语言, 是极具发展前景的计算机高级语言。其作为一种结构化的程序设计语言, 具有相当强的结构性、可移植性和功能性。通过采用C语言进行编程开发可以使众多开发者专心研究所设计程序要实现的功能及相关实现算法, 从而有效减少开发和软件调试的时间。C程序设计具有良好的程序结构, 对于模块化的程序设计非常适合, 故通常会采用从上至下, 追求逐步求精的结构化程序设计方法, 来将所要实现的功能模块化, 不同的功能通过不同的模块去完成。这样易于进行调试工作和方便快捷地管理好大型项目, 从而最大限度地减少重复劳动。

四、单片机的应用教学现状

单片机的学习是我院电子类专业需要掌握的一门实践性非常强的专业课程, 我院学生通过对其的实践性学习后, 能够独立参加全国电子设计大赛, 并能较好地完成比赛项目。为使我院的单片机教学效果更好, 学生对该门课程掌握的更加牢靠, 故需要对单片机的教学进行大胆改革, 通过在C语言的课程教学上, 结合单片机以及相关的硬件设计知识进行讲解。从我院电子专业开设C程序设计课程以来, 通过学生所反映的情况是该门课程比较难学习, 而且不知道他们在学完C语言后到底有什么用, 能够应用到哪些地方, 更不知道将自己的所学应用于单片机的开发中能不能实现目标。故根据以往教师的教学经验, 并结合学生反映的情况考虑, 本人觉得有必要作出这样的改进, 在C语言的课程上, 通过结合单片机及相关硬件设计知识来讲解C语言, 并从以下几方面引起重视。

五、《C语言程序设计》的课堂教学

1. 教学设计前的思考。

《C语言程序设计》不仅是电子类专业理工科学生的一门计算机公共必修课程, 而且C语言也是作为计算机等级考试 (二级) 的考试内容之一。C语言对于大部分刚进入大学的学生来说, 也是一门比较难的计算机语言课程。要做好这门课程的教学设计, 首先要对学生的具体情况有一定程度的了解。该课程通常的教学法是语法格式的讲解、语法要点的逐步讲解和通过例题对语法的应用讲解。这种机械的教学灌输思想枯燥无味, 会使学生失去对该门课程的学习兴趣, 所以, 本人认为应该先要求学生课前对本堂课所要讲解的知识进行预习, 并能识记有关知识点, 将不理解之处画上记号, 待课堂老师讲解时再认真听并理解所教授内容, 这样通过教师为主导、学生为主体的方式学习, 教师通过精讲相关的硬件设计实例, 通过硬件设计所要实现的功能引出相关软件设计, 进而将软件设计时所涉及到的相关C知识进行讲解, 然后通过另一简单例子让学生自己去通过分析来巩固知识点。

2. 结合多媒体的讲解, 强化实验及实践能力。

因为教师授课的主要对象是大学一年级新生, 所以需要教师采用通俗易懂, 并结合简单例子进行相关讲解, 这样能够使学生容易理解和消化。教学过程中, 采用多媒体, 通过编程演示加深学生对运用的语法理解和深刻记忆。并把理论知识和硬软件的设计内容进行整合讲解, 让每个学生独立完成实际应用实验题。

3. 减少和消除学生对程序设计语言的排斥和畏惧感。

本人在教学中会引导学生多读程序, 在读的过程中领悟和提高。对于软件生存周期的设计、编码、调试、运行这几个阶段, 本人可以通过C语言设计实例来体现, 以培养学生编程中的工程思想。讲授课程时以提出问题、解决问题、深入拓展问题、再解决问题, 对问题进行评价和优化设计的螺旋式滚动教学的方法, 收到了不错的教学效果。

教学过程中, 对于数组、指针等重要的知识点, 则需要制作更生动的课件, 提高学生的学习兴趣和主动性。例如, 在讲解数组的冒泡法排序时, 本人让7位同学分别拿着一个数据牌站到讲台, 进行现场模拟气泡排序过程, 通过第一次排序找到了该组中的最大值, 经过第二次排序找到了次大值, 通过现场的模拟以及班上同学的参与, 使课堂更加丰富有趣, 并且所有同学都能掌握气泡排序的过程。由于在教学中引入的现场模拟, 使同学们更容易理解这些抽象的内容, 更重要的是碰到类似的问题他们会触类旁通, 从而慢慢培养出编程的兴趣。

六、实践培训操作

上机实验是学习程序设计语言的重要环节, 自己编写的程序上机调试运行中, 可能有很多想不到的错误, 通过改正这些错误, 可逐步提高自己对C语言语法的理解力。在课程的教学中, 会进行阶段性的实训项目, 将每一阶段的学习进行小结性的贯穿和提高。将相关的知识点融入到程序的编写中, 从而巩固知识点并将琐碎的知识点做一个整合。暑假期间, 对于电子爱好的学生进行集中培训, 然后按照全国电子设计大赛的要求给大家几个题目做, 这几个题目涵盖非常广的知识点, 大家如果想编出程序就必须要找到课本的相应知识点进行复习, 从而编出程序, 学生普遍反映通过集中培训课的锻炼, 他们的编程能力有了很大的提高, 很多以前不懂的内容通过自己钻研也懂了, 通过自己的努力以后也体会到了编出程序的喜悦感, 可以说收到不错的成效。

七、结束语

C语言的教学重点是培养学生分析与解决问题的能力, 这种能力的培养与学生的刻苦学习分不开, 因此, 在本人的课堂中会一再强调C语言不是看会的, 也不是听会的, 而是亲自动手实践练会的。基于单片机的C语言开发和设计, 极大地促进了单片机在生产、生活各个领域的应用, 提高了程序开发效率。因而, C语言学习效果的好坏, 对今后单片机课程的学习具有深远的影响。

摘要:《C语言程序设计》课程是电子类专业的一门基础必修课, 也是电子和电气类学生应该学习的第一门计算机语言。该课程的学习主要是为结合单片机的应用开发服务的。如何让一名《C语言程序设计》的初学者能够较好地理解并掌握设计中的基本思想和精髓, 并且在掌握程序设计方法的同时结合单片机进行硬件和软件设计的应用开发是讲授这门课的重点所在, 故本文结合单片机, 以单片机系统为开发平台, 探讨了《C语言程序设计》的教学方法, 为学生以后能基于单片机进行硬件和软件的学习开发打下坚实的基础。

关键词:C语言程序设计,教学方法,单片机

参考文献

[1]向艳.C程序设计课程教学体系和模式探讨[J].计算机教育, 2010, (3) :112-114.

[2]谭浩强.C语言程序设计教程 (第三版) [M].北京:清华大学出版社, 2013.

[3]冯运仿.《C语言程序设计》课程教学模式的研究与实践.福建电脑, 2012, (1) .

[4]董蕴宝, 潘旭军.浅谈C语言在单片机中的程序设计[10].科技信息, 2009, (13) :59-67.

C语言开发单片机实例 篇4

1 C语言简介

在信息社会, 电脑可以帮助人们完成各种各样的工作, 但是由于语言不通 (电脑只能识别二进制的机器语言) , 就必须有人在中间起到翻译的作用, 这个人可以会各种机器能理解的语言 (如VC、VF、JA-VA) 等, 本文中用C语言与机器交流。

2 系统分析

2.1 现象分析

第一个灯亮:延长一段时间;第二个灯亮:延长一段时间;第三个灯亮:延长一段时间;……………….第n个灯亮, 延长一段时间。

2.2 电路分析

由图2可以看出, 要让LED0灯亮, 只要p1.0端口置低电平0, 根据二极管的单向导电性, 有电流通过, LED0灯亮。其余的灯亮也是同样的道理。若一组是八个灯, 则初始状态是第一个灯亮, 其余灯灭, p1.7~p1.1端口置1, p1.0端口置0, 用十六进制表示为P1^0=0或P1=0xfe。P1端口电平变化8个状态:11111110~11111101~11111011~11110111~11101111~11011111~10111111~01111111~11111110……依次循环。实现这个功能要用到移位函数。

2.3 程序设计

逻辑过程:点亮第一个灯, 延长500ms:p1^0=0;delays (500) ;

点亮第二个灯, 延长500ms:p1^1=0;delays (500) ;

点亮第三个灯, 延长500ms:p1^2=0;delay (500) ;

用C语言实现的关键语句:

设初值:p1=0xfe

移位:aa=_crol_ (aa, 1) ;

延时:for (i=xms;i>0;i--)

依次点亮灯:while (1)

de laym s (500) ;

3 功能实现

1) 开发资源。硬件:TX-1C开发板、STC89C52RC。软件:C语言、Keil、STC。2) 步骤。a.C语言写源程序, 在VC环境下运行无误后, 以pao.c格式保存。b.Keil软件打开pao.c, 运行无误后生成aq.hex文件。如图3。c.用STC将aq.hex文件拷贝到开了板TX-1C的STC89C52RC芯片上。如图4。d.接上开发板电源, 会看到八个灯依次点亮, 现出流水灯的效果。3) 实验注意问题。源程序要包括reg51.h头文件, 因为开发板的信息包含在头文件中, 否则编译不能通过。Kei输出要选择.hex格式, 否则无法用STC写入芯片。STC将程序写进芯片时, 芯片电源开/断时间要把握好。

4 结语

随着电子产品应用广泛, 社会化需求越来越高, 将C语言编程应用于电子设备, 让其完成智能化控制, 以减轻人们的负担, 提高生产效益是社会发展的趋势。通过实验, 证明该方法简单易行, 实验效果明显, 具有通用性。

摘要:C语言是一种高级语言, 用其控制硬件编程, 逻辑性强, 语言简单, 不需要用户了解更多的硬件知识。本文用一个实例来说明如何用C语言实现硬件编程的过程与步骤。

单片机的C语言分析 篇5

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语言分析 篇6

在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语言分析 篇7

3.pic07.C源程序的编译

在《PIC单片机C语言程序 (8) 》一文中, 我们已在MPLAB IDE7.40集成开发环境中编辑了pic07.C源程序 (0~99秒脉冲发生器) 。对于PIC单片机来说, 所有的C语言源程序, 都要在进行编译并生成目标码.hex文件后, 方能烧写到PIC单片机中运行, 即每编辑一个C程序都要进行一次编译, 所以对C程序 (pic0.7c) 的编译操作是十分重要的。下面详细介绍用PICC编译器对pic07.C源程序进行编译并生成目标码.hex文件的全过程。

(1) 编辑源程序

根据《PIC单片机C语言程序 (8) 》一文介绍的方法, 在MPLAB IDE7.40运行界面中编辑源程序pic07.C, 并存盘, 如图29所示。

(2) 建立项目project

点击图29中菜单栏的项目project, 在其下拉菜单中点击“project wizard” (项目向导) 命令, 即可生成图30所示的Welcome! (欢迎) 界面。该界面的项目向导可帮助你配置一个新项目。

(3) 选择器件

点击图30中的“下一步”, 弹出“Step One:Select a device” (第一步:选择器件) 对话框, 如图31 (a) 所示。如果对话框中的器件 (Device) 不是PIC16F84A, 可点击该对话框中的三角形下拉按钮, 并在下拉菜单中选择器件 (这里是PIC16F84A) , 完成器件选择, 如图31 (b) 所示。

(4) 选择需要的语言工具

点击图31 (a) 中的“下一步”, 弹出“StepTwo:Select a language toolsuite” (第二步:选择语言工具) 对话框, 如图32所示。对于C语言程序的编译工具, 只需满足“Active Toolsuite:Hl-TECH PICCToolsuite” (PICC工具) 的标识字母要求, 如图32所示。如果不符合, 则点击该标识字母右边的三角形按钮, 并在弹出的下拉菜单中选择“HI-TECHPICC Toolsuite”即可。

(5) 命名项目名

点击图32中的“下一步”, 弹出“step T h r e e:N a m e y o u r project” (第三步:添加项目名) 对话框。分别在该对话框的“Project Name” (项目名) 栏输入“pic07”, 在“ProjectDirectory” (项目路径) 栏输入“e:pic07”, 如图33所示。

(6) 增加节点 (Add)

点击图33中的“下一步”, 然后在生成的如图34所示的界面中点击“确定”, 得到类似图35的对话框 (这里未列出) 。用鼠标拉动其左边滑块, 找到pic07.C文件名并点击之, 再点击命令Add (增加节点) , 就完成了第四步step Four添加C程序。

(pic07.C) 节点到项目的操作, 如图35所示。

(7) 完成建立项目

点击图35中的“下一步”, 弹出建立项目已经完成界面, 如图36所示。点击图36中的“完成”, 即可生成如图37所示的“项目树”窗口。

(8) 完成C程序的编译以生成目标码.hex

点击图29工具栏中左数第6个图标 (Build all) 命令, 或点击菜单栏中的“Project”并在其下拉菜单中点击“Build all”命令, 即可生成“output” (输出) 信息提示窗口, 如图38所示。其最下面一行“BUILD SUCCEEDED……”为编译成功提示。

到此, 对pic07.C源程序的编译全部完成, 并生成了目标码.hex。这时, 就可用PIC单片机的任何一种编程器调用.hex文件, 对单片机进行烧写了。

(9) 错误提示及修改

如果我们在MPLAB中编辑的源程序pic07.c有错误, 例如把pic07.c延时函数中的unsigned (关键字——无符号) 写成了umsigned, 如图39所示, 则经过上述编译操作后, 会得到一个编译程序失败提示文件 (BUILD FAILED) , 如图40所示。在该文件中会指出源程序pic07.c中的所有错误行及错误类型 (原因) , 即源文件中的行“Error”指示。我们只要点击该文件中的“Error”, 即可生成如图41所示的pic07.c源程序文件。在其左侧有一箭头指向pic07.c的对应错误行, 即“umsigned”。这时, 只需将umsigned改写成unsigned, 然后在MPLAB中存盘, 再如前述, 一步一步地编译, 即可完成程序编译, 生成.hex文件。

说明:本文给出的图形界面与实际界面相比, 仅是略去了其空白区域或取其主要部分 (版面受限) , 不会影响读者的学习操作过程。另外, 虽然不同版本的MPLAB IDE对C程序的编译过程稍有差别, 但只要熟练掌握了一种较高版本MPLAB IDE的操作方法, 其他版本MPLAB的使用便不成问题。

单片机的C语言分析 篇8

5.PIC单片机C语言程序SIM软件仿真技巧

在《PIC单片机C语言程序设计 (10) 》中, 我们以C语言程序pic07.C为例, 介绍了SIM软件仿真调试的基本手段和方法, 下面介绍SIM软件仿真的技巧, 包括用跑表直接测试C程序运行的耗时 (包括秒值) 、快速观察C程序的运行路径、显示C程序中的变量值和修改程序中的错误等等。

⑴用跑表测试程序的延时量和秒计时值

这里, 我们仍以pic07.C为例, 介绍利用MPLAB IDE提供的跑表 (又称停表—stop watch命令) , 测试C程序中所要求的各种计时值的操作步骤。该操作十分简单, 同时也是实际程序调试中经常要用到的。

pic07.C是一个0~99秒的脉冲发生器程序。其秒个位在LED显示 (电路见《PIC单片机C语言程序设计 (4) 》中的图3) 时, 从0到1、从1到2、……, 每隔1秒显示数字加1, 而秒值是由pic07.C程序显示函数中的d值 (d=100) 决定的。如果用MPLAB IDE提供的跑表测试该时间若未达到1秒的要求, 可直接改变d值 (增加或减少) , 来达到所规定的递增1秒的要求。

用跑表测试pic07.C程序中各代码功能的时间, 其操作方法如下:

1) 例行操作

按照《PIC单片机C语言程序设计 (9) 》一文介绍的方法, 在MPLAB IDE7.40集成开发环境中, 对源程序pic07.C进行编译, 只要编译成功 (此为进行软件仿真的必要和充分条件) , 便可进行下面的SIM软件仿真操作了。

点击图37 (见《PIC单片机C语言程序设计 (9) 》) 中的pic07.C, 把该程序调到MPLAB IDE7.40的桌面上。再按照《PIC单片机C语言程序设计 (10) 》中介绍的方法, 在MPLAB IDE7.40的窗口上设置软件仿真调试状态窗口, 如图49所示。注意:接下来将使用图49中的7个模拟调试快捷图标 (Debug) 。

2) 调用stop Watch (跑表)

点击图49中的Debugger命令, 并在弹出的下拉菜单中点击setting, 即可生成图50所示的Simulator Settings界面。在该界面中, 频率为20MHz, 我们将其改成实际电路 (即《PIC单片机C语言程序设计 (4) 》中的图3) ) 所用的晶振频率4MHz, 然后点击图50中的“确定”, 回到图49所示界面。在该界面中点击“Debugger”命令, 并在弹出的下拉菜单中点击“Stop watch, 即可生成图51所示的对话框。

3) 定量测试

下面我们来验证程序运行时, 各代码运行的具体时间是否如《PIC单片机C语言程序设计 (10) 》中的表6所示。具体操作如下:

a.点击图49快捷图标中的命令Animate, 之后立即点击快捷图标中的Halt (停止) , 便会出现图52所示界面。其中, 主程序TRISA=0X10赋值语句左边有一个绿色箭头, 指向的是模拟调试时程序运行的起始语句;而语句X++; (自增量) 左边有一个断点标志, 即红色的“B” (若语句X++;左边无断点标志“B”, 可通过双击X++旁的位置, 来进行断点“B”的设置) 。接下来, 便可验证《PIC单片机C语言程序设计 (10) 》中表6列出的程序各语句的耗时量了, 其操作方法如下:

b.图52“Stop watch”界面右下角的程序频率为4 (MHz) , 说明设置频率是正确的。点击图52中的命令“Zero”清0, 使Zero右边的time为0 (说明:该行最右侧显示的是执行多条语句的累积时间, 此处可不管) , 随后点击MPLAB IDE菜单行中的模拟调试快捷图标Step Into (单步) , 使程序按照《PIC单片机C语言程序设计 (10) 》表6所列, 从绿色起始箭头所指语句TRIA=0X10;开始, 只运行一步就停下来, 此时, 图52中Zero右侧time旁显示该语句运行耗时数是2μs, 与表6所列数值完全相符, 而绿色起始箭头则指向了下一条语句“PORTB=0X40”;处。

接着运行语句“PORTB=0X40”;, 方法同语句“TRIA=0X10”;。即先点击Zero, 清0, 使Zero右边的time为0, 再点击Step Into (单步) , 执行语句“PORTB=0X40”;, 可以看到绿色起始箭头又指向了其下一条语句INTCON=0X00;, 此时, 图52中Zero右侧time旁边给出的该语句运行耗时数是3μs, 与表6所列数值完全相符。

用同样的方法, 依次执行表6所列的语句, 从而确认各语句运行的时间是否与表6所列数值相同。需要注意的是, 在点击Step Into (单步) 命令运行一条语句前, 必须先点击Zero, 对time清0一次 (即不观察累计时间) 。

此外, 运行位赋值定义语句unit_bit=X%10;ten_bit=X10%10;时, 应将点击Step into命令换成点击“Step over”命令, 其余操作不变, 程序又可快速单步运行。遇到delay (200) ;延时语句时, 也用“Step over”命令, 才能顺利验证表6中的耗时量。

4) LED显示增量时间的测定

类似上述方法, 当程序运行到display (x) ;语句处时, 先点击Zero (清time的0) , 然后点击MPLAB IDE模拟调试的快捷命令“Run” (全速运行) , 使程序从display (x) ;全速运行到预先设置的断点X++;处, 此时, 图52中time的显示值为1.036104S (秒) , 说明pic07.c程序中的d=100值大了一点。

此时, 我们可将程序中的d值改为99 (或98、97) , 然后在用前述增量时间测定方法对其进行运行时间测定, 来找到最准确的0~99递增为1秒的d值。

上一篇:体育旅游研究现状刍议下一篇:手术室麻醉科论文