㈠ 学会51单片机能做什么工作
例如,工业控制领域方面,仪器仪表方面,汽车行业,通讯方面,航海航空。
㈡ 单片机一体化教学中的几点感悟
是一位教授单片机的老师提的问?你有什么感悟呢?分享出来或许同学们也能受益。
㈢ 学好单片机未来前景如何
前景一般,吃不饱也饿不死,找工作不难,好工作很难。
㈣ 做单片机开发 ,有前途吗请过来人指教!
本人还未毕业的小白,实习生而已~
弱弱的认为,单片机还是有前途,起码非常容易创业,当然,也非常容易出屌丝:
我觉得有以下要点要注意:
1、单片机,是越小越有前途,不是越大越有前途(最好十几个引脚的那种---》专用芯片(比如usb芯片))......像stm32那种,有点不伦不类的,当然工作自然不难找,但是.........就沦为楼上所提到的单片机+单片机的情况了。
2、熟悉协议,常用的协议 spi i2c这些不算(当然要懂),我说的是,起码两门以上大型协议:比如can总线协议,usb协议,或者网络协议,解明支持协议所需要的库函数的每一行(将硬件与软件相互投影)
3、熟悉多门业务,电源也好,触摸屏也好,把他们的原理弄的熟悉无比。最好工业啊,产品啊,这些相关东西起码要比较熟悉,毕竟,嵌入式是弄产品的。
4、了解操作系统,我说的是,为你弄的设备,写驱动程序(win 和 linux这两种是必须的),当然,如有现成的代码,你也可以不用写,但是起码你要看的懂。。。。毕竟你要指导别人移植,使用的。
5、熟悉上位机的面向对象编程,单片机也是软件工程师,多学学这些也是好的。。。。而且,你很有可能参与到上位机支持应用软件的编写当中。
6、当然,还有一些必要条件,比如良好的计算机基础(如编译原理,操作系统原理,微机原理之类),不是课本那些古老的东西,要结合你的环境,深入理解。
7、多认识些人,人--------》指的是有效的人
很多人,表面上认识人很多,实际上。。。。。。。
要认识,有特点的人!不解释,但这点很重要。。。。
也不多啦,就上面七点~
祝你好运!
本来,弄这行就是修罗之道。害怕的话去考研,考公务员~~~~~~
心血来潮来回答问题。。。。。。
再次强调!!本人是小白。
㈤ 电子信息工程专业有必要学习单片机吗请给理由
需要
单片机作为 微机的一种具体体现,绝对算得上是 电子信息工程专业的专业能力课程,所以必须学习。
电子信息工程专业主干学科:电子科学与技术、信息与通信工程、计算机科学与技术。
主要课程:电路理论系列课程、计算机技术系列课程、信息理论与编码、信号与系统、数字信号处理、电磁场理论、自动控制原理、感测技术等。
主要实践性教学环节:包括课程实验、计算机上机训练、课程设计、生产实习、毕业设计等。一般要求实践教学环节不少于30周。
单片机学习方法:
基础理论知识包括模拟电路、数字电路和C语言知识。模拟电路和数字电路属于抽象学科,要把它学好还得费点精神。在你学习单片机之前,觉得模拟电路和数字电路基础不好的话,不要急着学习单片机,应该先回顾所学过的模拟电路和数字电路知识,为学习单片机加强基础。否则,你的单片机学习之路不仅会很艰难和漫长,还可能半途而废。笔者始终认为,扎实的电子技术基础是学好单片机的关键,直接影响单片机学习入门的快慢。有些同学觉得单片机很难,越学越复杂,最后学不下去了。有的同学看书时似乎明白了,可是动起手来却一塌糊涂,究其原因就是电子技术基础没有打好,首先被表面知识给困惑了。
单片机属于数字电路,其概念、术语、硬件结构和原理都源自数字电路,如果数字电路基础扎实,对复杂的单片机硬件结构和原理就能容易理解,就能轻松地迈开学习的第一步,自信心也会树立起来。相反,基础不好,这个看不懂那个也弄不明白,越学问题越多,越学越没有信心。如果你觉得单片机很难,那就应该先放下单片机教材,去重温数字电路,搞清楚触发器、寄存器、门电路、COMS电路、时序逻辑和时序图、进制转换等理论知识。理解了这些知识之后再去看看单片机的结构和原理,我想你会大彻大悟,信心倍增。
模拟电路是电子技术最基础的学科,它让你知道什么是电阻、电容、电感、二极管、三极管、场效应管、放大器等等以及它们的工作原理和在电路中的作用,这是学习电子技术必须掌握的基础知识。一般是先学习模拟电路再去学习数字电路。扎实的模拟电路基础不仅让你容易看懂别人设计的电路,而且让你的设计的电路更可靠,提高产品质量。
单片机的学习离不开编程,在所有的程序设计中C语言运用的最为广泛。C语言知识并不难,没有任何编程基础的人都可以学,在我看来,初中生、高中生、中专生、大学生都能学会。当然,数学基础好、逻辑思维好的人学起来相对轻松一些。C语言需要掌握的知识就那么3个条件判断语句、3个循环语句、3个跳转语句和1个开关语句。别小看这10个语句,用他们组合形成的逻辑要多复杂有多复杂。学习时要一条语句一条语句的学,学一条活用一条,全部学过用过这些关键语句后,相信你的C基础建立了。
当基础打好以后,你会感觉到单片机不再难学了,而且越学越起劲。当单片机乖乖的依照你的逻辑思维和算法去执行指令,实现预期控制效果的时候,成就感会让你信心十足、夜以续日、废寝忘食的投入到单片机的世界里。可以这么说,扎实的电子技术基础和C语言基础能增强学习单片机信心,较快掌握单片机技术。
实验实践
这是真正学习单片机的过程,既让人兴奋又让人疲惫,既让人无奈又让人不服,既让人孤独又让人充实,既让人气愤又让人欣慰,既有失落感又有成就感。其中的酸甜苦辣只有学过的人深有体会。思想上要有刻苦学习的决心,硬件上要有一套完整的学习开发工具,软件上要注重理论和实践相结合。
1.有刻苦学习的决心
首先,明确学习目的。先认真回答两个问题:我学单片机来做什么?需要多长时间把它学会?这是你学单片机的动力。没有动力,我想你坚持不了多久。其次,端正学习心态。单片机学习过程是枯燥乏味、孤独寂寞的过程。要知道,学习知识没有捷径,只有循序渐进,脚踏实地,一步一个脚印,才能学到真功夫。再次,要多动脑勤动手。单片机的学习具有很强的实践性,是一门很注重实际动手操作的技术学科。不动手实践你是学不会单片机的。最后,虚心交流。在单片机学习过程中每个人都会遇到无数不能解决的问题,需要你向有经验的过来人虚心求教,否则,一味的自己埋头摸索会走许多弯路,浪费很多时间。
2.有一套完整的学习开发工具
学习单片机是需要成本的。必须有一台电脑、一块单片机开发板(如果开发板不能直接下载程序代码的话还得需要一个编程器)、一套视频教程、一本单片机教材和一本C语言教材。电脑是用来编写和编译程序,并将程序代码下载到单片机上;开发板用来运行单片机程序,验证实际效果;视频教程就是手把手教你单片机开发环境的使用、单片机编程和调试。对于单片机初学者来说,视频教程必须看,要不然,哪怕把教材看了几遍,还是不知道如何下手,尤其是院校里的单片机教材,学了之后,面对真正的单片机时可能还是束手无策;单片机教材和C语言教材是理论学习资料,备忘备查。不要为了节约成本不用开发板而光用Proteus软件仿真调试,这和纸上谈兵没什么区别。
3. 要注重理论和实践相结合
单片机C语言编程理论知识并不深奥,光看书不动手也能明白。但在实际编程的时候就没那么简单了。一个程序的形成不仅需要有C语言知识,更多需要融入你个人的编程思路和算法。编程思路和算法决定一个程序的优劣,是单片机编程的大问题,只有在实际动手编写的时候才会有深切的感悟。一个程序能否按照你的意愿正常运行就要看你的思路和算法是否正确、合理。如果程序不正常则要反复调试(检查、修改思路和算法),直到成功。这个过程耗时、费脑、疲精神,意志不坚强者往往被绊倒在这里半途而废。
学习编写程序应该按照以下过程学习,效果会更好。看到例程题目先试着构思自己的编程思路,然后再看教材或视频教程里的代码,研究人家的编程思路,注意与自己思路的差异;接下来就照搬人家的思路亲自动手编写这个程序,领会其中每一条语句的作用;对有疑问的地方试着按照自己的思路修改程序,比较程序运行效果,领会其中的奥妙。每一个例程都坚持按照这个过程学习,你很快会找到编程的感觉,取其精华去其糟粕,久而久之会形成你独特的编程思想。当然,刚开始,看别人的程序源代码就像看天书一样,只要硬着头皮看,看到不懂的关键字和语句就翻书查阅、对照。只要能坚持下来,学习收获会事半功倍。在实践过程中不仅要学会别人的例程,还要在别人的程序上改进和拓展,让程序产生更强大的功能。同时,还要懂得通过查阅芯片数据手册(DATASHEET)里有关芯片命令和数据的读写时序来核对别人例程的可靠性,如果你觉得例程不可靠就把它修改过来,成为是你自己的程序。不仅如此,自己应该经常找些项目来做,以巩固所学的知识和积累更多的经验。
硬件设计
当编写自己的程序信手拈来、阅读别人的程序能够发现问题的时候,说明你的单片机编程水平相当不错了。接下来就应该研究硬件了。硬件设计包括电路原理设计和PCB板设计。学习做硬件要比学习做软件麻烦,成本更高,周期更长。但是,学习单片机的最终目的是做产品开发----软件和硬件相结合形成完整的控制系统。所以,做硬件也是学习单片机技术的一个必学内容。
电路原理设计涉及到各种芯片的应用,而这些芯片外围电路的设计、典型应用电路和与单片机的连接等在芯片数据手册(DATASHEET)都能找到答案,前提是要看得懂全英文的数据手册。否则,照搬别人的设计永远落在别人的后面,你做的产品就没有创意。电子技术领域的第一手资料(DATASHEET)都是英文,从第一手资料里你所获得的知识可能是在教科书、网络文档和课外读物等所没有的知识。虽然有些资料也都是在DATASHEET的基础上撰写的,但内容不全面,甚至存在翻译上的遗漏和错误。当然,阅读DATASHEET需要具备一定的英文阅读能力,这也是阻碍单片机学习者晋级的绊脚石。良好的英文阅读能力能让你在单片机技术知识的海洋里自由遨游。
做PCB板就比较简单了。只要懂得使用Protel软件或 AltiumDesigner软件就没问题了。但要想做的板子布局美观、布线合理还得费一番功夫了。
娴熟的单片机C语言编程、会使用Protel软件或 AltiumDesigner软件设计PCB板和具备一定的英文阅读能力,你就是一个遇强则强的单片机高手了。[2]
抗干扰设计
在提高硬件系统抗干扰能力的同时,软件抗干扰以其设计灵活、节省硬件资源、可靠性好越来越受到重视。下面以MCS-51单片机系统为例,对微机系统软件抗干扰方法进行研究。
抗干扰
在工程实践中,软件抗干扰研究的内容主要是:一、消除模拟输入信号的噪声(如数字滤波技术);二、程序运行混乱时使程序重入正轨的方法。本文针对后者提出了几种有效的软件抗干扰方法。
㈥ 前辈学51单片机的感悟是怎么样的
对单片机的理解可以是对计算机整体的认识,包括软件硬件,等你接触到嵌入式,你就会思考,计算机的设计,架构,执行,原理
㈦ 自学单片机有好处和必要吗
其实你们专业课就有单片机,但如果你觉得很无聊,想学点这些来充实自己,对你以后的学习来说也是有意义的。
首先,你要明确一点,单片机是自动控制领域一个比较重要的控制芯片,它是用来控制系统电路的运行的。有的时候没它不行,但它也不是单单只做单片机。所以电子技术你要知道,比如设计模拟电路,数字电路。在程序方面,虽然很多人都喜欢用C编写程序,但汇编指令也是学单片机必须要掌握的,因为有的时候,涉及最底层的芯片操作时候,C语言不一定能完全胜任。不要怕麻烦,不要觉得汇编指令枯燥就不管它。
接下来说说怎么学,先问问你的学长你们学校开什么厂家的单片机的教程,一般中国的大学单片机课程都是教51系列单片机,但也有教其他单片机的。还有就是问问你们的老师有没有组织什么兴趣组或参加电子比赛的。你可以先混进去跟老师和学长们学习。就算是旁观也比你闷着头自己学容易上手。
然后买本单片机教材,先把原理看一下,然后自己买个对应的单片机学习板(要跟你学的单片机种类相同哦),自己把书本上的程序都写一次,烧写进单片机里看看结果如何。然后把书本后的上机操作习题都写出程序烧进单片机试试。
如果你们学校有参加电子比赛的,而老师也乐意让你跟着学长后面学的,那是最好不过的,因为学校有资源,不用自己额外花钱。
有什么成果!首先是能在你上单片机课之前就了解了这门课,如果学得快这时候你能根据自己的理解来尝试做一个小小的自控系统了。以前我的学弟就是,还没开课,就能跟我做数据采集系统了。他们那届上完单片机课之后(大三上学期),他的毕业设计都做完了,并且把作品拿去参赛。这成为了他就业的资本了,因为要做电子方面的研发工作,一般都要求有经验。应届毕业生没工作经验怎么办,参加过比赛的学生一般比啥都没作过的更有机会,参加过比赛作过东西出来的就是经验。
㈧ 学单片机的前途有前途吗,未来的工作会是什么样子的
哎呀,并不是我想吓唬你的哇!我大四刚刚毕业,在富士康,CNSBG事业群,测试技术委员会,也是个研发部门。天天对着电脑,看的都要脑残了,一个月累死累活不超过4.5K。单片机门槛低,提升虽然快,后期完全不给力,单会编程完全不行,工资不会超过10K的。你要是单片机+FPGA,那你就是个嵌入式高手,单片机+电源,那你就是个电源工程师,单片机+电路板,就是板级高手,只要是你是单片机+实用的什么东西,都可以。单片机加单片机,真是一坨屎。每日以泪洗面啊。
这么说吧单片机只是一个工具,用来实现你先要的功能,就想是一把刻刀,有什么价值,完全看你刻的什么东西,你对你刻的东西有多深的体会。对你的专业有多深的感悟。否者你只能是IT农民工,别人把想法给你,你就刻吧,给你点工钱。累死累活。
楼上说的年薪十万,的确有,和我一个办公室的,我老板,师14,一个月公司发80K当零花钱,年终再发1M以上,不过别人高手也不是高在单片机编程比你厉害,而是因为有专业上深刻的理解。到那水平了,就只走过来,说我要这功能,跟另一个人说我要这功能,最后所有的功能综合起来就是一个巨大的模块了,拿出去卖几十万上百万很轻松的。
㈨ 学习MCS-51(具体以89C51为例)系列单片机的体会
http://www.38xian.com/index.aspx?menuid=4&type=articleinfo&lanmuid=19&infoid=685&language=cn
http://www.38xian.com/index.aspx?menuid=4&type=articleinfo&lanmuid=19&infoid=686&language=cn
又来看了一下,修改一下吧,加点文字
C语言学习总结
搞嵌入式的,大都用C语言写代码,本人从事单片机开发,也写了不少的代码,一直习惯用 if 、switch打天下,在定义数据结构的时候也只用到 字符型、整型、数组,位;很少用结构体,共用体,枚举,因为咱C语言学得不好,和它们不熟,总感觉它们不那么好招呼,重要的是自已觉得没必要用上它们。随着越来越多的积累,咱写代码的风格也在不断的发生变化,从以前的喜欢将所有的函数及数据的定义写在一个文件里到逐渐的将函数按功能模块化、从以前的习惯直接在程序里写常数到慢慢的开始用上宏来代替,咱编程的风格也逐渐开始正规化,编程水平也逐步提升,当然这些成绩都源于咱不断的学习,学习匠人的编程规范、学习herald的感悟设计、还有网上写得非常出色的代码以及STM32的固件函数库,在咱的不断领悟和思考下,总结了几点关于C语言的用法,与大家共同分享。
一、 学习匠人的头文件包含巧妙用法
当一个头文件被多个C文件包含,且该头文件中定义了这些C文件的公共变量,则在编译的时候会出现重复定义,导致编译通不过,通常我们会采用如下两种做法来解决上述问题。
(为了让问题表述得更清楚,我们假设两个C文件C1,C2,C3,一个头文件H1,C1,C2,C3有两个公共变量V1和V2)
1、 在C1文件中定义变量V1和V2,在C2和C3文件中对V1,V2用extern声明;
2、 在C1文件中定义变量V1和V2,在H1中对V1,V2用extern声明,然后在C2和C3文件中包含H1;
很显然,以上两种方法都要对V1和V2书写至少两次,一次定义,一次外部声明,且不是在同一文件下,这样不利于管理和修改,有没有一种方法可以让这些公用的变量放在一个文件里,且只要书写一次呢?
偶在二姨那里无意中看到匠人的发帖,就是关于该问题的讨论,现在我转发一下,与大家同共分享。首先我们将要用到的公共变量全部书写到com.h文件中,每一个变量在定义前加一个符号EXT_,当该头文件被main.c函数包含时,定义EXT_为空,表示com.h中的变量在main.c中被定义,当被其它文件包含时,定义EXT_为extern,表示外部声明,如:
Com.h文件:
//避免重复定义
#ifdef root
#define EXT_
#else
#define EXT_ extern
#endif
//全局变量
EXT_ u8 variable1; //该变量在三个C文件中都要用到
Main.c
#define root //在包含com.h前定义root
#include "com.h"
二、 用结构体的方式来定义总线或外设地址
当一个整体包含不同类型的多个成员时,通常用结构体来定义结构体变量,这样内存会将这些变量按照递增的方式分配到相邻的地址(不对齐的地方会有填充),按“结构体名.成员名”的方式访问结构体内的成员,这是访问结构体变量的方式;但是还有一种指向结构体变量的指针,它可以将某个地址转换成该结构体类型的指针,比如寄存器的定义:
(以下是摘自STM32固件函数库,关于GPIO的定义)
typedef struct
{
vu32 CRL; //0
vu32 CRH; //偏移量4
vu32 IDR; //偏移量8
vu32 ODR;
vu32 BSRR;
vu32 BRR;
vu32 LCKR;
} GPIO_TypeDef;
#define GPIOA_BASE ((u32)0x40010800) //GPIOA的基地址为0x40010800
#define GPIOA (GPIO_TypeDef *) GPIOA_BASE; //强制类型转换为GPIO_TypeDef类型的指针
这样在操作GPIOA的寄存器时只要这样写就可以了
读: X="GPIOA-">CRL; 写:GPIOA->CRL=X;
或 读: X=(*GPIOA).CRL; 写:(*GPIOA).CRL =X;
当然,要达到上述目的也可以采用如下方式
#define GPIOA_ CRL 0x40010800
#define GPIOA_ CRH 0x40010804
#define GPIOA_ IDR 0x40010808
#define GPIOA_ ODR 0x4001080C
#define GPIOA_ BSSR 0x40010810
#define GPIOA_ LCKR 0x40010814
很明显,第一种书写方式更加正规化,且当定义多个GPIO时,只要将其它GPIO的基地址强制转换为该结构类型的指针即可。
再来看看一个定义外部总线的例子
typedef struct
{
vu8 CH375_DATA;
vu8 CH375_CMD; //偏移量1
} CH375_TypeDef;
#define CH375 ((CH375_TypeDef *) 0x6c000000)
CH375-> CH375_DATA=data; //往0x6c000000地址处写数据
CH375-> CH375_CMD=cmd; //往0x6c000001地址处写命令
怎么样,是不是方便多了。重要的是代码的观赏和可读性提高了。
三、 用枚举数据类型来定义特定的状态
在实际问题中,有些变量的取值被限定在一个有限的范围内。例如,一个函数在操作过程中会返回几个特定的状态:操作成功,操作失败,忙,等等。如果我们直接在函数里用0,1和2来表示这三种状态,有时偶尔会出现数值与实际状态对不上号的情况,造成置状态和判断状态错误,那么我们可以在程序里用宏或者枚举来事先定义好这些状态。
如:用宏定义:
#define Sucess 0
#define Failure 1
#define Busy 2
用枚举
typedef enum { Sucess = 0, Failure , Busy } FlagStatus;
四、 用共用体类型定义共享内存空间
共用体类型定义的数据是将多个成员共享同一内存空间,该空间的大小为最大成员的大小,其用法与结构体完全相同,但值得注意的是不能同时引用多个成员,在某一时刻只能使用其中之一成员。
在程序中如果全局变量比较多,包含几个结构和数组,如果这些全部定义的话势必会占大量的内存,有可能还会导致单片机内存不够,如果能让几个不同时用到的数组和结构变量共享一段内存,则能省出很多的内存空间。
比如以下输入输出若不同时进行,则可以共享同一段内存空间
union {
struct {
unsigned char Flag;
unsigned char Type;
unsigned char State;
unsigned long DataLen;
unsigned char Buffer[64];
}DataOut;
struct {
unsigned char Flag;
unsigned char Type;
unsigned char State;
unsigned long DataLen;
unsigned char Buffer[64];
} DataIn;
} BOC;
C语言博大精深,丰富多彩,用得好能很好的发挥它的作用,同时学习好的编程方法养成良好的编程习惯对于一名设计人员来说也是极其的重要,以上四点都是本人自身积累和学习的一些总结,希望能够与大家一起共同交流,共同学习和提高。
个人珍藏的好文章,贴出来分享