‘壹’ 球一份关于单片机或c语言的论文!2000字左右的
一·基于MSP430 单片机的电源监控管理系统(单片机论文)
引言
大功率直流开关电源由PFC 和DC-DC 变换器组成,为了提高可靠性,并能够对其进行脱机或远程监控管理,在开关电源模块内设置监控管理系统。该系统对电源故障类进行监控,对电源输出的电压电流进行自动设定和调节,通过串行通信接口,与远程中心监控站进行远程监控和管理,这一功能在通信系统基站供电系统中尤为重要。本文提出了一种基于MSP430单片机的电源监控管理系统的设计和实现。
1 系统结构和硬件电路设计
系统的整体设计结构如图1所示。本系统采用的核心芯片为TI公司推出16位系列单片机MSP430。MSP430具有集成度高,外围设备丰富,超低功耗等优点。单片集成了多通道12bit的A/D转换、片内精密比较器、多个具有PWM功能的定时器、片内USART、看门狗定时器、片内数控振荡器(DCO)、大量的I/O端口以及大容量的片内存储器,采用串行在线编程方法,单片可以满足绝大多数的应用需要。 MSP430的这种高集成度使应用人员不必在接口、外接I/O及存储器上花太多的精力,而可以方便的设计真正意义上的单片系统,在许多领域得到了广泛的应用。下面介绍该系统可以实现的功能和基于MSP430F149的电控系统的设计。
1.1 系统功能:
a.开机控制。上电后,单片机开始工作,按下电源键,点亮指示灯后,将电网220V接入PFC,开关电源启动工作,然后接于负载。
b.电压设定和调节。用单片机A/D口采集开关电源的输出电压值,并显示于液晶屏上,通过单片机控制数字电位计调节输出电压值,实现自动调节;或者通过键盘的左右键选出电压调节页面,用上下键进行手动调节;也可以通过通信接口实现远程调节。
c.电流调节。多台开关电源并联使用时,要求各台电源的负载电压相等。单片机A/D口采集转换成电压值的负载电流值,通过通信口得到各台电流值,取电流平均值,控制数字电位计调节输出电压,使输出负载电流达到平均值;或者通过键盘的左右键选出电流调节页面,用上下键进行手动调节。
d.故障报警。单片机通过光电耦合器检测到各项输入输出故障时,扬声器产生蜂鸣,相应的报警灯闪烁,并在液晶屏上显示故障类型及处理方法。
e.监测。单片机A/D口对电网电压,输出电压,输出电流进行采集测量,当出现超限时进行报警。
f.通信。包括单片机与各台开关电源间的通信和单片机与中心监控站的通信。
1.2 电压调节电路
电压调节电路由单片机、数字电位计X9313和可调分流基准芯片TL431组成,其电路原理图如图2所示。Xicor9313是固态非易失性电位器,可用作数字控制的微调电位器。TL431是TI生产的一个有良好的热稳定性能的三端可调分流基准源,它的输出电压用两个电阻就可以任意地设置到从VREF(2.5V)到36V范围内的任何值。工作时,单片机的一个IO控制INC计数输入脚,为其提供计数脉冲,此输入端为下降沿触发。另一个IO控制U/D升降输入端,当U/D为高电平时,X9313内部计数器进行加法计数,VW端的输出电压上升,由于VW接地,使VH端电压降低,而TL431的REF输出端电压为恒定的2.5V,从而使Vcc处输出电压升高;同理当U/D为低电平时,Vcc处输出电压降低,这样就实现了电压输出调节。
1.3 模拟数据采集
MSP430F149内嵌入一个高精度的,具有采样与保持功能的12位ADC转换模块,内部提供各种采样与保持时钟源。MSP430有8个外部输入通道可选, 最高采样速度可达200KHZ,并且还内置温度传感器,可以测量芯片内的温度,如果测量温度高于或低于预设的温度是,可以通过外接部件显示告警信息,同时具有6种可编程选择的内部参考电压。该转换模块为一些需要模拟量采集的场合提供了便利。我们选择的参考电压是0~2.5V,这样MSP430F149的AD分辨率就是2.5/4096 = 0.61V左右。由于输入的模拟电压量较高,不能直接与单片机的ADC采样端口相连,因此用串联一个滑动变阻器的方法进行了降压处理,成功解决了上述问题。
1.4 人机对话设计
系统的人机操作界面由液晶显示屏、指示灯和键盘组成。液晶选用的是基于T6963C 的液晶模块YM12864。键盘采用的是3×3 的阵列接法,系统采用了图形用户界面,操作简单易行,显示实用美观。工作时,液晶屏可以实时显示采集到的电网电压、输出电压、输出电流及各种报警信息,操作相应键盘可以进行显示页面的切换,对输出电压,输出电流进行自动、手动及远程控制调节。当有报警信息产生时,相应得指示灯会闪烁警示,同时与单片机连接的扬声器会产生报警蜂鸣声,以提醒操作人员做出相应的处理。
2 系统软件设计
430 支持汇编语言和C 语言两种语言编程,因此可以在一个工程文件中同时用两种语言,使用汇编语言,便于在调试时寻找逻辑和指令的联系及地址的定位正确与否。使用C 语言进行编程大大减少了工作量,编好后的程序可读性好,易于修改和维护。开发工具使用IARSystems 公司的IAR Embedded Workbench,它集成了编辑、编译、链接、下载与在线调试(Debug)等多种功能,使用方便,并具备高效的C 语言编译能力。
考虑到软件开发效率及可维护性,系统软件设计遵循模块化的编程思想,将系统功能划分为几个相对独立的功能模块。它们包括:液晶显示模块、AD 转换模块、按键监测响应模块、报警监测响应模块、电压电流调节模块、数据处理模块、通信模块。每个模块都要进行独立的测试,最后结合到一起。整个系统的软件流程图如图3 所示。
按键监测模块是其中的重要组成部分,它控制着AD转换的启动,显示页面的切换,及电压电流的自动调节,手动调节,远程调节的启动和切换。报警监测模块对开关电源的保护起着至关重要的作用,它实时的监测着开关电源是否出现故障,当发生输入电压过压,输入电压欠压,PFC故障时应切断总电源,当发生输出电压过压,输出电压欠压,模块过热,及IPM保护故障时应关断DC-DC变换器。
在对各模块进行整合时,要注意各中断之间的冲突。由于在MSP430 的中断优先级中,ADC12 采样转换中断优先级高于TIMERA 中断,因此当在响应TIMERA 中断的过程中会执行ADC12 采样转换中断,或者TIMERA 的中断响应被迫延迟,这样就会影响在TIMERA中断中执行的报警监测响应程序,不能达到对开关电源故障类的实时检测。在本系统中,利用按键控制ADC12 采样转换中断的启动和关闭,从而解决中断冲突。
3 结论
本文在基于MSP430F149电源监控管理系统的设计和实现的基础上对MSP430的系统设计做了讨论,提出并解决了在设计中出现的问题。本文作者的创新点:利用MSP430的系统结构简单,外围电路少,效率高的特点,设计实现了简洁直观、使用方便、操作全程汉字提示、监控能力强、运行稳定、安全可靠的电源监控管理系统,大大降低了成本,取得了相当可观的经济效益,满足实际需求。
二·C语言论文:
嵌入式以门槛高,入门难的方式拦截了无数的学者。然而单片机作为嵌入式的入门课,如何以一种正确的方法学习单片机将关系到是否能学习好嵌入式。
纵所周知,学习嵌入式先玩ptotel,再做单片机。Protel简单的来说就是一个做PCB板的纯英文的软件。学习ptotel前必需具备一定的电路基础和英语能力,电路基础我想大部分同学都是有的,而英语这一块却是许多人所头疼的。这对英语基础差的同学是一种打击,再者如果毅力不强,我想你是自学不下去的。毅力是学任何东西所必需的一种能力、素质,是一种遇挫折而不言败的决心。
不管学的是protel还是单片机,首先要找一个能够指导你的人。何谓指导,指导并不是说他要一步一步地教你去做,而是一个在关键时刻能够为你指出一条道路的人。
我认为学习嵌入式方法最重要,在学protel和单片机之前应该想办法了解关于学习它们的方法。比如说protel吧,许多人理科的学生都是以一种纯理解的角度去学的,画一个导线、元件问一下为什么要这样画,生成网络表也追根溯源地问个网络表的由来。其实许多东西只是懂用就行,理论的东西懂得再多不懂用也是枉然的。
所以学习protel有地方不懂你就问你的指导员,有许多的东西是规定死了的,不是你想半天一夜就可以为你而改变的。这不同于软件设计,软件设计在你的苦思之下也许可以找到另一种更好的方法。
单片机嘛,不得不承认中国没一本单片机好书。我学习单片机的时候看过的单片机书有七本,大多数都是不尽人意的。在这里我冒昧地说:中国人写书确实缺乏一点“读者至上”的原则。我所看过的单片机书我想有很多都是以他的角度去写的,没有几个人是站稳在读者的角度上写的。书上的章节注释极不清楚,许多重要的地方都是没有说明的,说句不好听的话,作者似乎以为读者的水平也像他一样高。而外国人的书呢,同样的书,同样的知识点,有同样的中国人的书的两三倍那么厚,这是为什么。这是因为外国人的书点点滴滴都是面向着读者的。注释、说明、总结应有尽有。所以,我在这里发表一个也许同胞会扔鸡蛋到我身上的观点,那就是:不管学什么,优先选择外文翻译书,或是纯英文书。得到一本好书对我们的影响极为巨大。这一部分我用一句话来总结就是:中国人的书适合教学,而外国人的书不仅适合教学还适合自学。
中国人的单片机书往往都是先介绍单片机的内部结构、中断,定时器,然后再到I/O口。一开始就让我们学习单片机内部结构,中断、定时器的内部结构和原理,把我们弄得一塌糊涂的时候再和我们讲例子,怎样去操作实验板。如果自学的话我想许多同学是学不下去的,干嘛要把非得把单片机的内部结构像解剖学一样弄个彻底才实践去应用它呢?即使你把单片机全解剖清楚了还是不会用你手中的这块实验板的。我觉得如果在学单片机之前没有学过汇编语言就直接用C语言学的话,即使学完了单片机,对单片机的内部结构和单片机的工作原理也是不清楚的。学了汇编之后再学单片机的话效果将会好得多,所以不要心急,有些东西是急不来的。
所以我认为学习单片机要在实践中学习,先实践再去了解它的结构和原理,如果你实在不能了解它的结构和原理那也无所谓的,只要你懂得用就可以了!(没学过汇编的只能这么说了)
我们可以先从 I/O口学习,看一些例子烧录些程序,再看一下现象,之后再尝试了解一下所要用到的单片机的内部结构,最后在这个现象的知识基础上,编一个自己想要的程序、现象出来。这样学习的话既不无聊,成就感也有了。为什么有些人可以把学习当一种快乐,而许多人在唉声叹气,我想有一部分是出自这个原因。
不同的实验板有不同的PCB图,所以I/O的操作也是有所不同的。不过操作的原理都是一样的,有些同学可能会抱怨教程里的实验板和自己手中的实验板不同,这是大可不必多虑的。I/O这一步在调试中看现象的理念很重要,比如改变一个语句会产生何种现象,为什么会产生,这些都是要在调试中掌握的。
中断的学习方法也是类似的,先实践发现有陌生的地方就去查看相应的寄存器,等实现了自己想要的现实再慢慢地解剖一下单片机的寄存器,这样学起来会更有意义,记得更牢。中断也没复杂的东西的,只不过学几个中断函数,优先级之类的。有一定C语言基础的同学在优先级这一块可以联系C语言中运算符的优先级,我相信有了C语言基础定义一两个中断函数也不是什么问题了的。
我学过的单片机的内容在我文档的实例之中,实例的数量不多,但这些都是直接点击单片机知识点的。随着我的学习渐渐地深入后我再把我实现过的东西写入实例之中吧。
希望对你有所帮助,祝成功!
‘贰’ C语言的用途,定位及特点(论文)
1.2 C 语言的特点
C 语言发展如此迅速, 而且成为最受欢迎的语言之一, 主要因为它具有强大的
功能。许多着名的系统软件, 如DBASE Ⅲ PLUS、DBASE Ⅳ 都是由C 语言编写的。
用C 语言加上一些汇编语言子程序, 就更能显示C 语言的优势了, 象PC- DOS 、
WORDSTAR等就是用这种方法编写的。归纳起来C 语言具有下列特点:
1. C是中级语言
它把高级语言的基本结构和语句与低级语言的实用性结合起来。C 语言可以象
汇编语言一样对位、字节和地址进行操作, 而这三者是计算机最基本的工作单元。
2. C是结构式语言
结构式语言的显着特点是代码及数据的分隔化, 即程序的各个部分除了必要的
信息交流外彼此独立。这种结构化方式可使程序层次清晰, 便于使用、维护以及调
试。C 语言是以函数形式提供给用户的, 这些函数可方便的调用, 并具有多种循
环、条件语句控制程序流向, 从而使程序完全结构化。
3. C语言功能齐全
C 语言具有各种各样的数据类型, 并引入了指针概念, 可使程序效率更高。另
外C 语言也具有强大的图形功能, 支持多种显示器和驱动器。而且计算功能、逻辑
判断功能也比较强大, 可以实现决策目的。
4. C语言适用范围大
C 语言还有一个突出的优点就是适合于多种操作系统, 如DOS、UNIX,也适用于
多种机型。
‘叁’ 计算机专业C与C++程序设计研究论文
计算机专业C与C++程序设计研究论文
摘要 :首先介绍了目前高校计算机学院C族语言相关程序设计课程的建设状况。然后从C族语言的相互衍生关系出发,提出了在高校计算机课程体系中去除C语言的基础课程,将其综合成一门C++程序设计课程来供学生学习,并对课程内容、参考教材和课时安排上给出了自己的建议。
关键词 :C语言;C++语言;程序设计
高校的C族语言教学总是按照先学C语言,再学C++的顺序进行,这种学习顺序随着C++标准的不断升级改革后变得越来越不适用。早期的C++属于多面性语言,即可以像C一样进行模块化的面向过程的编程设计,也可以像Java一样进行抽象的面向对象程序设计。那时的教学者考虑的是学生应当从较为便于理解的面向过程的编程思路入门学习C语言编程,然后在熟练了面向过程的编程方式后再从C语言延伸到C++,转而学习面向对象的程序设计。可是随着面向对象的程序设计在应用市场上占领了绝对的主导地位后,再让学生从面向过程着手就等于是浪费学习时间。加上C++和C两门语言的初级语法思想是完全一致的,开设两门课程浪费了学时,也耽误后续更重要的核心课程的学习。
1程序设计语言C与C++的比较
1.1C与C++的共性。一般简要的介绍是把C++当作C的加强版,这种认知当然是错误的,C++语言的设计者在设计之初为了保障自家语言会受到开发者的关注,所以兼容了的C的语法,这就自然使得C++可以使用C的编程方式进行程序设计,所以也导致了很多人对这两种语言的关系产生了错误的认知。同时由于C语言本身设定上的优越性,所以C++在进行自我定义的时候也沿用了C语言很多优良的性质。基础数据结构一致,C与C++的基础数据类型都是以变量和常量作为基本属性划分,类型上有字符型、整型、长整型、单精度浮点型和双精度浮点型,不过C++额外增设了布尔型。复合型数据结构上也都同时具有数组、多维数组、结构体、枚举类型和共同体,但是C++增设了字符串类型以替代C语言中的字符数组,功能上更加强大,也更加便捷。在语法方面,声明、赋值、循环、选择的结构和实现都是一致的,并且C++虽然提倡使用类和对象的概念去设计程序结构,可也同样支持函数体结构的程序设计结构。并且C语言中函数的赋值都是间接调用,在使用C语言函数时总是会在指针上出现各种纰漏,但是C++的函数体可以使用引用参数,这就使得C++的函数体比之C的更加好用。总的说来就是,C++标准下用户可以完全使用C语法进行编程而不会出现任何BUG,同时C++自身的优越设定和标准使得其设计能力比C要强大数倍,是目前市场上大型程序开发的首选语言。
1.2C与C++的不同。上一节介绍了C++和C的.基础语法上的区别,这些区别都是C++的作者在C的基础之上修订而来的结果,是为了让C++标准下得面向过程的程序设计比之单纯的C更加便捷方便。但是C++的诞生伊始,就是一门向上使用面对对象的程序设计思想的高级编程语言。它的封装性、继承性、多态性和对象唯一性才是C++成为强大高级语言的重要原因,这些特性都是C语言不可能拥有的。所以C能够实现的程序,C++能够实现并且实现的更为方便,C不能实现的程序,C++同样可以实现。
1.3C++的特色。承接上一节,C++和C之间最大的不同,也是C++自身最值得夸耀的特性,就是面向对象程序设计思想。这种思想使得C++语言设计出来的程序,变成了类和对象的有机结合,这种结合的代码比之面向过程的函数体架构的代码更加易读,共同开发起来容易上手,后续的维护者也不用费更多的脑筋去理解前人的代码含义。而类和对象的设计思路,使得开发者合作时相互之间的工作变的更为独立,双方之间只需要知道对方所写的类实现的功能和包含的数据就行。这种特性我们称之为良好的封装性,开发者之间不需要去知道对方的代码是如何实现,甚至在此之上还可以保证良好的代码健壮性。因为类的引入,更先进的作用域机制也被引入进来,类的书写者往往会将自己类中的数据进行严格的作用域限定,防止其他合作者擅自去修改和使用自己类中的数据。合作者想要知道类中的数据或者使用类中的数据,只能通过类的书写者定义的带有检查机制的方法才行。这样会使得很多人合作开发的大型项目的稳定性和安全性比之用C语言开发时再上一个台阶。同时类的概念中还有一个先进的设定就是继承性,并且由这个继承性还延伸出了接口的概念。有了可以继承的接口和类,那么开发者在对程序进行迭代的瀑布开发流程时,就可以很好的使用自己曾经开发的源代码,或者借用其他项目的源代码,因为只要学会科学的使用继承机制,就不仅仅是节约程序员的代码时间,也减少了程序员在回顾曾经代码时发生的错误和歧义。而与继承机制配合使用的是多态性,曾经C语言中定义的函数,其灵活度非常差,特定的函数只能满足特定程序定义的需求,想要重用曾经的源代码是几乎不可能的事情。我们刚才提到的继承机制使得C++开发者复用源代码成为了一种习惯,但是复用时不可避免的修改问题又摆到了台面上,多态机制顺应而生了。多态机制使得类不仅可以继承其他类,将父类的数据和方法都在本类体中自如的使用,同时还可以用本类中新的定义和代码去覆盖父类中的数据定义和方法。这就让程序员变的更加自由,想用父类的数据和方法时就去继承,但是不想全部使用时就加上多态机制去覆盖。这样代码之间的重复利用率变得十分客观,节约了大量的开发时间和开发成本。
2程序设计语言C与C++开设建议
C++课程的内容应当如下安排:第一部分,教授C++的基础语法,让学生可以编写出在DOS命令行下输入输出的程序,了解编程的基本概念和思想。并且这时应当同时进行C和C++的双向语法教学,为日后学生进入高年级后的方向选择打下基础。此部分使用半个学期最为适宜,并且此时并不灌输学生何为面向对象何为面向过程,而主在让学生使用基础语法进行最基本的编程探索。第二部分,在学生有了基础编程知识后,将数据结构的内容放入课程中去,用半学期的时间教授学生用C++实现的各类常见数据结构。并且结合实际开发项目中的代码作为阅读补充,让学生明白数据结构的知识对程序开发的意义,然后将简化后的小项目作为课堂的主要内容,用实际的代码让学生去理解那些枯燥的数学定理和概念。而且在实现数据结构的过程中,必然会面对一些更为高级的C++语法和概念。总的来说,用大一上的一个学期让学生对于基础编程有了良好的认知和深入,是十分值得和有效的。第三部分,在学生有了数据结构的基础和C++的基本语法掌握后,应当面对一些实际的开发项目和问题。当然实际的问题还是需要老师进行简化,其主要目的是让学生掌握C++的高级特性和实际软件开发的过程与思路,并且想学生传授基础的算法。这一部分较为困难,应当使用一个学期让学生慢慢的掌握和熟悉。第四部分,在学生算是对C++语言和数据结构与算法都有了基础的入门后,再进行课堂教学意义就不大了,应当再大二上学期开设一门课程设计实验课,让学生完成几个难度从小到大的项目,循序渐进的掌握基本的实际开发技巧和思维。
参考文献
[1]罗莉.计算机程序设计的多应用型开发与实现[J].产业与科技论坛,2015(14):54-55.
[2]邓薇,何锫,钱俊彦,等.深度优先的多基因表达式程序设计[J].模式识别与人工智能,2013(9):819-828.
[3]宛西原,汪霞.非计算机本科专业计算机程序设计课程的改革思考[J].计算机工程与科学,2014(z1):56-59.
;‘肆’ 为什么要学习c语言论文
C的主要设计是生成可移植代码,同时保持性能并最小化占用空间(CPU时间,内存使用,磁盘I / O等)。这对于操作系统,嵌入式系统或性能很重要的其他程序(“高级”接口会影响性能)非常有用。使用C,可以相对容易地保持对给定行真正做的事情的心理描述,因为大多数事情都是在代码中明确写出来的。C为低级应用程序提供了很大的代码库。它是UNIX的“本机”语言,使其具有灵活性和可移植性。它是一种稳定而成熟的语言,不太可能在很长一段时间内消失,并且已被移植到大多数(如果不是全部)平台。
一个有力的原因是内存分配。与大多数编程语言不同,C允许程序员直接写入内存。C中的关键结构(如结构,指针和数组)旨在以高效,与机器无关的方式构造和操作内存。特别是,C可以控制数据结构的内存布局。此外,动态内存分配在程序员的控制之下(这也意味着内存释放必须由程序员完成)。像Java和Perl 这样的语言使程序员不必管理内存分配和指针的大部分细节(内存泄漏除外)和一些其他形式的超额内存使用)。这很有用,因为在构建高级程序时处理内存分配是一个高度容易出错的过程。但是,在处理低级代码(例如控制设备的操作系统部分)时,C提供了统一,干净的界面。大多数其他语言都不存在这些功能。
虽然Perl,PHP,Python和Ruby可能功能强大,并且支持C中默认未提供的许多功能,但它们通常不是用自己的语言实现的。相反,大多数此类语言最初依赖于使用C(或其他高性能编程语言)编写,并且需要将它们的实现移植到新平台才能使用它们。
与所有编程语言一样,无论您是否想要选择C而不是其他高级语言都是一个意见问题,技术和业务要求都可以决定所需的语言。
‘伍’ 中职学校的C语言教学
中职学校的C语言教学
论文摘要:随着我国经济的不断发展,计算机专业毕业生有很广阔的就业市场,然而计算机行业人才济济,就业竞争激烈,中职学校的计算机专业学生就不能局限于一些常用的应用软件的学习,C语言的学习显得尤为重要。本文主要浅谈了中职学校的C语言教学体会。
论文关键词:中职学生;C语言;教学目标
为拓展中职学生的就业渠道,C语言课程的学习必不可少。C程序设计是计算机应用人员应掌握的基本功,是计算机软件开发的入门语言,主要培养学生算法设计的基本思想和程序设计的基本技能。下面我就谈一下几年来C语言教学的一些体会。
一、培养学习兴趣
兴趣是入门教育的关键.培养学习兴趣很重要。由于多数中职学生没有接触过计算机语言.因此需要培养他们的学习兴趣。针对中职学生基础不扎实及本课程枯燥深奥的特点。教师应采取多媒体教学,向学生展示一些趣味性的问题并演示实用性的程序,想方设法吸引学生。如给学生讲解“水仙花数、猴子吃桃、翻译密码、判断素数”等问题,并让学生用编程软件解决这些问题,同时运行C程序,使学生在亲身实践中体会到乐趣;另外,可以通过一些影片向学生介绍一些lT人士的经历和成功经验,增强学生学习C语言的信心和动力。
二、选择适合中职教育的教材与教学方式。合理设置教学目标
中职学生普遍基础知识不扎实。所以教材内容要强调基础性,语言表达力求通俗浅显易懂,以程序设计为主线,以编程应用为驱动,通过案例和问题引出知识重点,重点讲解程序设计的思想和方法,穿插讲解相关的语言知识,使教学效果既有深度又有广度,选择的教材尽量符合初学者的要求。
C语言最主要的教学方式除了教师上课就是让学生上机实践。这是很重要的`一个环节。教师讲得再好。学生感觉“能看懂”“能听懂”。却不动手实践,仍然掌握不了知识,更谈不上运用。在上机过程中,学生可以进一步理解和掌握课堂所讲知识,许多不清楚或不理解的问题通过上机操作可迎刃而解。在组织学生上机实践过程中。教师要适当地设计一些难度适中的作业,激发学生开动脑筋,让学生自己在有目的的情况下,去寻找解决的方法,让其真正当学习的主人,最大限度地激励学生的学习积极主动性。总之。我们应当十分重视动手编写程序和上机运行程序。
教学目标是学生学习的目的。教学目标的定位,要根据教学对象的特点而定。就中职学生而言,教学目标是提高分析问题、解决问题的能力。重点分析程序设计过程,形成程序设计过程理念。能够读程序。编写一些简单程序,培养学生良好的编程习惯,逐步提高学生编程能力。C语言的学习只是程序设计的开端,所以我们教师不要设置好高鹜远的教学目标。
三、分组教学,培养自学能力。注重培养团队合作精神
由于中职学生自主学习能力、自控能力没有大学生强,所以中职学生很容易失去上机兴趣,也就达不到上机实践的目的。为此,教师可适当转变上机实践的形式:以小组形式上机实践。上机前分配给每个学习小组不同的学习任务。组长负责分工.让本组学生利用课余时间去思考、查询收集资料,上机时各组分别完成相应任务。然后相互演示成果,分析优劣利弊,再互换任务,最后讨论编程体会,取长补短。在此过程中教师适当指导,主要过程可由学生自行解决,让学生在切磋的过程中自主学习并且培养团结合作的精神。
四、激励式教学。适当引入考核机制,启发学生求知欲
在教学中培养学生创造力需要用考核这个手段来激励、鼓舞学生,考核应从两个方面入手,可采用“问题式”“阶段式的办法。“问题式”就是根据学生课堂所学知识,在上机实践课时,让学生独立解决一个实际应用题、完成一个小游戏等。“阶段式”就是把一个阶段所学知识进行一次考核,但知识点不宜过多。有了考核机制.就能最大限度地激励学生的学习潜能。
五、课后及时反馈,逐步改进教学方案和方法
要想提升教学业务水平,提高教学效果,就必须听取多方面的建议与意见。首先要经常听听学生的心声。学生就是上帝。学生的需求就是我们的追求与目标。其次来自教研组和教学检查组。教研组和教学检查组的意见具有指导作用。最后是来自企业调研。为了防止知识陈旧过时.我们教师可以通过暑期去软件公司工作实践和调研.了解他们的需求,切合实际需要.重新修改教学方案,让学生能学以致用。
以上是本人在中职学校担任计算机C语言课程教学的一些体会,我会在以后的教学中细心观察,不断地去探索研究.不断丰富教学经验,为中职教育事业贡献一份力量。
论文相关查阅: 毕业论文范文 、 计算机毕业论文 、
‘陆’ 嵌入式c语言论文
嵌入式C语言位操作的移植与优化
单片机的应用越来越广泛,种类也越来越多。由于嵌入式C语言可读性强、移植性好,与汇编语言相比大大减轻了软件工程师的劳动强度,因而越来越多的单片机工程师开始使用C语言编程。但C语言的可移植性仅限于与硬件无关的子程序,而与具体硬件有关的子程序则无法移植。在单片机应用中,位操作(特别是对引脚的位操作)非常普遍,如EEPROM数据和IC卡数据的读写、字段式LCD显示等,很多带串口的集成电路都需要单片机用软件来做I/O口读写程序。如何让这些子程序既有很好的通用性,生成代码的效率又高,是很多软件工程师都在考虑的问题。这里介绍两种C语言位操作的移植方法。
1 用逻辑运算实现位操作
请看下面这个子程序:
INT8U Card102RdByte(void) {
INT8U Temp8U, n = 8;
do{ Temp8U <<= 1;
if( PIN_CARD_SDA_RD() ) Temp8U |= 0x01;
PIN_CARD_CLK_H();PIN_CARD_CLK_L();
}while(--n);
return Temp8U;
}
这是通过单片机引脚从88SC102卡中读一个字节的子程序。程序采用μC/OSII中的书写风格,即变量和函数采用“驼峰”写法,由define定义的常量和内联函数采用全部大写加下划线的写法。
此程序驱动一个引脚输出CARD_CLK高低信号,从另一个引脚一位一位读取CARD_SDA数据。
1.1 用于MSP430系列单片机
此程序应用到MSP430单片机上(本文用的是MSP430F413单片机),头文件中要有如下定义:
typedefunsigned charINT8U;
#include<msp430x41x.h>
#definePIN_CARD_SDA_RD()(P6IN & 0x01)
#definePIN_CARD_CLK_H()P6OUT |=0x04
#definePIN_CARD_CLK_L()P6OUT &= ~0x04
汇编结果如下:
In segment CODE, align 2, keep�with�next
__code unsigned char Card102RdByte(void)
Card102RdByte:
0000007E42MOV.B#0x8, R14
??Card102RdByte_0:
0000024C5CRLA.BR12
000004D2B33400BIT.B#0x1, &0x34
0000080128JNC??Card102RdByte_1
00000A5CD3BIS.B#0x1, R12
??Card102RdByte_1:
00000CE2D23500BIS.B#0x4, &0x35
000010E2C23500BIC.B#0x4, &0x35
0000147E53ADD.B#0xff, R14
0000164E93CMP.B#0x0, R14
000018F423 JNE??Card102RdByte_0
00001A3041RET
这与手工汇编编程的结果几乎一样,代码效率很高。
1.2 用于51系列单片机
在51系列单片机中应用此程序,头文件要加入以下定义:
#include"Reg932.h"//Philips LPC932单片机
sbitCradClk=P0^1;
sbitCardSDA=P0^0;
#definePIN_CARD_SDA_RD()CardSDA
#definePIN_CARD_CLK_H()CradClk=1
#definePIN_CARD_CLK_L()CradClk=0
原来的程序不作任何改动,汇编结果如下:
; FUNCTION Card102RdByte (BEGIN)
;-- Variable 'Temp8U' assigned to Register 'R7' --
;-- Variable 'n' assigned to Register 'R6' --
00007E08MOVR6,#08H
0002?C0007:
0002EFMOVA,R7
000325E0ADDA,ACC
0005FFMOVR7,A
0006308003JNBCardSDA,?C0008
0009430701ORLAR7,#01H
000C?C0008:
000CD281SETBCradClk
000EC281CLRCradClk
0010DEF0DJNZR6,?C0007
0012?C0009:
001222RET
; FUNCTION Card102RdByte (END)
由汇编结果可知,对位的直接清零和置位已达到最简,只是读位值不够理想。
1.3 用于196/296系列单片机
在80C196MC、80C296SA等单片机中,片上I/O口是可以窗口映射到低端地址的。采用这种方式,I/O口可以直接寻址,因而程序代码最短,执行速度也最快,但这样做C程序就无法移植了。若不用窗口技术,则片上I/O口是内存地址映射的,与普通内存地址一样操作。头文件中加入如下定义,即可利用原来的程序:
INT8UPOUT,PIN;
#pragmalocate(POUT=0x880)
#pragmalocate(PIN=0x881)//外扩I/O口地址定位
#definePIN_CARD_SDA_RD()(PIN & 0x01)
#definePIN_CARD_CLK_H()POUT |=0x04
#definePIN_CARD_CLK_L()POUT &= ~0x04
汇编后的代码是56字节,代码效率也很高。
采用逻辑运算实现位操作,C程序简单明了,移植性好,可读性更好。但96系列单片机无法利用JBC和JBS位操作指令,51系列单片机也无法利用JB和JNB等其特有的位操作指令来提高代码效率。用位段结构实现位操作可以弥补这个不足。
2 用位段结构实现位操作
把原来的程序改写如下:
INT8U Card102RdByte(void)①
{②
INT8U n = 8;③
#ifndef C51_ASM④
bdata ACCImg;⑤
#endif⑥
do{ ACC <<= 1;⑦
GET_CARD_SDA();⑧
PIN_CARD_CLK_H() ; PIN_CARD_CLK_L() ;⑨
}while(--n) ;⑩
return ACC ;
}
2.1 在51系列单片机中的应用
在C51中使用ACC是不必在每个子程序中定义的,所以要在文件的开头加上 #define C51_ASM。这样,第④、⑤、⑥句会被忽略。在头文件中加上以下定义:
sbitACC_0=ACC^0 ;
#defineGET_CARD_SDA()ACC_0 = CardSDA
其余定义如本文第一部分所述。结果第⑧句汇编变为“MOV C,CardSDA”和“MOV ACC_0,C”两句。句,函数要通过R7返回参数,程序已达到最简。
; FUNCTION Card102RdByte (BEGIN)
;-- Variable 'n' assigned to Register 'R7'--
00007F08MOVR7,#08H
0002?C0007:
000225E0ADDA,ACC
0004A281MOVC,CardSDA
000692E0MOVACC_0,C
0008D280SETBCardClk
000AC280CLRCardClk
000CDFF4DJNZR7,?C0007
000EFFMOVR7,A
000F?C0008:
000F22RET
; FUNCTION Card102RdByte (END)
还可以像196/296那样定义一个位段结构,使用JB指令,有兴趣的读者可以自己试一下。
2.2 在196/296系列单片机中的应用
在196/296中应用这段程序,要增加一个局部变量ACCImg的定义,就是前面程序中的第④、⑤、⑥三句。再在头文件中增加一个如下的位段结构定义:
typedef struct {unsigned Bit0:1;
unsigned Bit1:1;
unsigned Bit2:1;
unsigned Bit3:1;
unsigned Bit4:1;
unsigned Bit5:1;
unsigned Bit6:1;
unsigned Bit7:1;
}Divide_to_bit;
typedef union {INT8U Byte;
Divide_to_bit DivBit;
}bdata;
端口地址变量要定义成以下数据类型:
bdata PIN;
同时,在头文件中加上宏定义:
#defineACC ACCImg.Byte
#defineACC_0 ACCImg.DivBit.Bit0
#defineGET_CARD_SDA() if(PIN.DivBit.Bit0) ACC |=0x01;
这样ACCImg就定义成了一个低端寄存器,ACC是它的字节访问形式。源程序中的第⑧句读引脚,汇编的结果使用了JBC指令,整个程序比不用位段减少了字节,达到了优化代码的目的。
cseg
0000Card102RdByte:
; Statement3
0000B10800Rldbn,#8
; Statement7
0003 @ 0004 :
0003740101RaddbACCImg,ACCImg
; Statement8
0006B30181081CldbTmp0,PIN
000B 331C03jbcTmp0,3,@0005
000E 910101 RorbACCImg,#1
0011 @ 0005 :
; Statement9
0011 B30180081CldbTmp0,POUT
0016 91041CorbTmp0,#4
0019 C70180081CstbTmp0,POUT
001E 71FB1C andbTmp0,#0FBH
0021 C70180081C stbTmp0,POUT
; Statement10
00261500Rdecbn
0028980000RcmpbR0,n
002BD7D6bne @ 0004
; Statement11
002DB0011C RldbTmp0,ACCImg
00302000 br @ 0001
; Statement12
0032 @ 0001 :
0032F0ret
2.3 在MSP430系列单片机中的应用
MSP430系列单片机没有位操作指令,所以不必定义位段结构,直接把ACC定义成一个无符号8位数即可。头文件中是这样定义的:
#ifndef C51_ASM//此句使头文件也可以与C51的共用
typedef INT8U bdata ;
#define ACC ACCImg
#define GET_CARD_SDA() if(P6IN & 0x01) ACC |=0x01;
#endif
汇编的结果与用逻辑运算的方法进行位操作竟完全一样。
结语
对引脚的位操作有3种: 直接置位或清零,从端口输入数据和从端口输出数据。前两种上文已介绍过了。从端口输出数据的C程序如下:
do{
OUT_SIO_DA();
CLK_H();
ACC <<= 1;//移位可扩展时钟脉冲宽度
CLK_L();
}while
其中: 第一句OUT_SIO_DA(),51系列可定义成位操作SIO_SDA = ACC_7;196/296和430系列可如上文定义成一个if语句。
位段操作程序中采用了ACC这个名字作为一个局部变量。在C51中这刚好是主累加器,对于2401、IC卡等半双工器件的程序很实用,但当SPI总线输入/输出同时操作时,就没这么方便了。
用逻辑运算实现位操作不存在任何移植的障碍。μC/OS-II中的位操作就是全用逻辑运算实现的。位段定义可能存在不同编译器分配顺序不同的问题,但考虑到32位高速CPU不会用软件模拟这种串口的操作,这样的程序只会用在51、196/296、MSP430等无片内Cache的中低速单片机中,所以用位段操作引脚的方法仍有意义。具体是使用逻辑运算还是使用位段进行位操作,完全看个人喜好。本文程序采用的编译器是Keil C51 V7.03、IAR C430 V2.10A和 Tasking C96 V5.0。
‘柒’ c语言课程设计论文
谈及C语言,我想凡是学过它的朋友都有这样一种感觉,那就是“让我欢喜让我忧。”欢喜的是,C语言功能非常强大、应用广泛,一旦掌握了后,你就可以理直气壮地对他人说“我是电脑高手!”,而且以后若是再自学其他语言就显得轻而易举了。忧虑的是,C语言犹如“少林武功”一般博大精深,太难学了。其实就笔者认为C语言并非是“difficult(困难)”的,只要你能理清思路,掌握它的精髓,那么自学C语言是一件非常容易且又其乐无穷的事。今天本人就与大家一起谈谈如何学习C语言或者说学习C语言应从哪几方面着手。
了解一些基本知识
一.C语言的背景
就个人感触,无论学习哪门语言首先应该了解一下自己所学语言的背景,也可以说它的发展史。
C语言属于高级程序语言的一种,它的前身是“ALGOL”。其创始人是布朗·W·卡尼汉和丹尼斯·M·利奇。C语言问世时是带有很大的局限性,因为它只能用于UNIX系统上。然而随着科学技术的进步,计算机工业的发展,C语言逐渐脱离UNIX。1987年美国标准化协会制定了C语言的国际标准,简称“ANSI C”,从此以后它便成为一种广泛使用的程序语言。C语言的优点很多,主要的有如下四点:
1.兼备高级语言与低级语言的优点,属于一种中间语言。
2.它是一种结构化程序设计语言,非常适合结构化程序设计。
3.有较丰富的数据类型、运算符以及函数供以选用。
4.直接与内存打交道,使修改、编辑其他程序与文档变得轻松,简单。
二.二大语系二种不同的学习方法
其实高级程序语言分为两大语系。例如:C,C++(C语言的扩展),QBASIC,VB(BASIC的可视化),JAVAs cript,Js cript ,VBs cript,JAVA,ASP,FOXPRO,PERL等等。一路是以C为主的程序语言,例如:JAVAs cript,JAVA等,这类语言在函数的调用,程序语句的书写,循环的控制都极为相似。另一路是以BASIC为首的程序语言,例如:FOXPRO,VBs cript等,此类语言同样具有相似的函数调用,程序语句书写以及循环控制,但与C语系是不同的。因此若是您以前是从QBASIC起家的,那么在学习C语言前最好是先洗洗脑,千万不要把学习BASIC的方法以及思路用在C身上。
讲到这里,我想大家对C语言一定有了感性认识吧!下面让我们再升华一下,全方位亲密接触它。学习C语言必须从以下四点入手,也就是说,只要你能掌握这四点的内容,那么基本上就大功告成了。
亲密接触C语言
一.输入输出
C语言的输入输出是非常严格的,或许在其他程序语言中我们可以不关心这个问题,但在C语言中,我们必须要彻底了解它。由于篇幅有限,因此笔者不能详谈,有兴趣的朋友可以参考由着名程序语言教授谭浩强先生主编,由清华大学出版社出版的《C程序设计第二版》。不过这里笔者还是有几点要简单的谈一下。
1.二维浮点数数组的输入
二维浮点数数组的输入(即:通过键盘给二维浮点数数组赋值)在很多专业书中都没有详细讲过这个问题。在给二维浮点数数组赋值时一定要先声明一个变量,接着把数值赋予这个变量,最后把变量数值赋予二维浮点数数组赋值。
2.注意输出格式中“%”后的字符
C语言的输出说复杂不复杂,因为常用的都很简单。可说不复杂也未必,记得曾在一次等级考前辅导我们C语言的教授讲道:“如果C语言要考得很难的话,根本不用考什么指针,只要专考输出格式,我想百分之九十九的学生都不及格。”当时我们无不认同。从这则事例中可以看出C语言的输出格式之复杂程度。因此大家在学习它时千万要学会辨别输出格式中“%”后的字符,每个字符都有其意义,也都有其作用。
二.优先级
说道优先级,有很多朋友都不是很了解或说很模糊。为此笔者想先通过一个例子让各位有个概念。什么叫优先级?比方说,我们在公交车终点站排座队时总会遇到70岁以上的老人不需要排队就能上车的情景,这就是优先级的涵义。C程序在运行时也象排队坐车一样,首先照顾那些优先级高的运算符,若是优先级相同,那么就象遇到两位(或两位以上)70岁以上的老人那样,让他们依次上车。但是C语言中的优先级的运算并不是千篇一律的,只能说是在大多数情况下,有些运算符的优先级有其自己的特点,因此这点大家要注意。例如条件表达式:条件?结果1:结果2,这种表达式很多朋友都知道,它的作用与IF…ELSE…条件判断语句很雷同,它运算时的优先级就不是按照C语言的规则来完成的。所以说对于优先级各位编程爱好者一定灵活掌握,不要死记硬背。
三.指针
就个人认为,C语言中的指针是最有特色的,当然也是最难学的。指针说穿了,其实是变量的一种表现形式,只不过这种变量记载的不是数值而是地址。就象一个人可以用姓名来表示自己,也可以用身份证号码来表示自己一样。笔者涉足编程已经有三年多了,在这期间曾经收到过很多网友的电子邮件询问学习指针的方法。就本人感触,学习指针最好是先学些计算机硬件工作的原理,例如:直接寻址,间接寻址等,只有了解了这些内容以后,你再学指针就比较容易理会,毕竟C语言是一门介于机器语言与高级语言中间的语言,没有一些硬件工作知识是很难领悟它的真谛的。然而事事并非绝对,如果你没有这些知识也不要紧,只要清楚知道以下笔者总结的二点再加上多练习便可:
1.指针是地址变量:它的值有两种:其一是地址,其二是内容。不同的表达方式可以取不同的值,这有点象一个家庭地址在不同的场合标识的人物也不同。例如:父母亲在他们的单位所登记的家庭地址就代表他们自己,而你在学校中登记的同样的家庭地址就代表你自己。
2.指针是可以运算的,它的运算法则与变量是一致的。
另外,在编写一个程序时,除非万不得已,一般不要使用指针变量。因为指针是比较复杂的,用不好就“当机”。所以笔者建议各位对于指针只要能看懂就行,当然如果你是准备参加考试的就另当别论了。
四.函数
虽说很多程序语言都有函数这一内容,但笔者觉得C语言的函数是最有魅力的。如果你能完全掌握C语言的函数,那么学习C++就不成问题了(C++是一门建立在C语言上,但又不同于C语言的高级程序语言,它增添了很多函数。)。学习函数的方法是比较简单的,只有两个字“牢记”,即:牢记函数的功能,牢记函数的用途以及如何输入输出。有些朋友认为,程序语言中的函数没有多大用处,其实这并不正确,函数从本质上讲是一段通用程序,用它可以帮助我们节约很多编程的时间,一个聪明的编程者在编写程序前往往总是先找自己所编写的程序中有多少是可以用函数来代替的。笔者曾经作过一个比较字符串的实验,用C语言中的strcmp()函数只要一句话,而自己编写的话30句话都摆不平,可想而知函数是多么实用呀!