51单片机怎么入门

51单片机怎么入门,第1张

1、建议你买个开发板,200块的配置都非常全了,硬件有个直观认识

2、网上有视频教程《十天学会单片机》、《力天手把手教你单片机》等一些可以让你快速入门,看视频做笔记,边练习,进步很快。手头应该有些比较全面的单片机的书,方便查阅。

3、如果没有开发板,只有用proteus仿真软件,我推荐《单片机C语言程序设计实训100例——基于8051+Proteus仿真》这本书

请看郭天祥大师的《怎样学习单片机》

很多单片机初学者问我的第一句话就是怎样才能学好单片机?对于这个问题我今天就我自己是如何开始学单片机、如何开始上手、如何开始熟练这个过程给大家讲讲。先说说单片机,我们现在用的比较多的是8051单片机,它的资料比较多,用的人也较多,市场也很大,51单片机内部结构比较简单,非常适合初学者学习,建议初学者将51单片机做为入门级芯片。单片机属于硬件,我强烈不推荐大家使用单片机仿真软件来学习单片机,也可以肯定的告诉大家,使用仿真软件是学不会单片机的,硬件只有把它摆在你的面前,亲自 *** 作它,才会有深刻的体会,才能学明白它。单片机这门课是一科非常重视动手实践的科目,不能总是看书,但是也不能完全不看书,我们需要从书中大概了解一下单片机的各个功能寄存器,如果看的多了反而容易搞乱,尤其是现在市场上大多数讲单片机的书一开始就讲解较复杂的内存、地址、存储器什么的,更让初学者感到不知所云、难以入门。简单的说,当我们使用单片机时,实际上就是用我们自己编写的软件去控制单片机的各个功能寄存器,再简单些,就是控制单片机哪些引脚的电平什么时候输出高,什么时候输出低。由这些高低变化的电平来控制外围电路,实现我们需要的各个功能。

关于看书,大家只需大概了解单片机各引脚的功能,了解下寄存器。第一次、第二次你可能看不明白,但这不要紧,因为还缺少实际的感观认识。所以我总是说,学单片机看书看两三天就够了,而我们要把更多的时间放到实践中去,这才是最关键的,在实践的过程有不懂之处再查书,这样记忆才深刻。关于实践有两种方法你可以选择,方法一、你自己花钱买一块单片机的学习板,不要求那种价格上千块功能太太全的,对于初学者来说你买功能太全的板子,上面有很多东西你这辈子都用不着,我建议有流水灯、数码管、独立键盘、矩阵键盘、AD 和DA、液晶、蜂鸣器、IIC总线、有USB扩展也最好,这些就差不多了。如果说我上面提到的这些功能你能熟练应用,那可以说对于单片机本身的 *** 作你已经入门了,剩下的就是自己练习设计外围电路,不断的积累经验。只要过了第一关,后面的路就好走多了,万事开头难,大家都听过。方法二、你身边如果有单片机方面的高手,向他求助,让他帮你搭个简单的最小系统板。对于高手来说,做个单片机的最小系统板可能只需要几分钟的时间,而对于初学者可就难多了,因为只有对硬件彻底了解了,你才能熟练的驾驭它。而如果你身边没有这样的高手,又找不到可以帮助你的人,那我劝你还是选择方法一,毕竟自己有一块学习板要方便的多,以后做单片机类的小实验时经常都能用得上,省时又省事。

有了单片机学习板之后你就要多练习,最好是自己有台电脑,少看**,少打游戏,把学习板和电脑连好,打开调试软件坐在电脑前,先学会怎么用调试软件,然后从最简单的流水灯实验做起,等你能让那八个流水灯按照你的意愿随意流动时你已经入门了,你会发现单片机是多么迷人的东西啊,太好玩了,这不是在学习知识,而是在玩,比起跑跑卡丁车,比起魔兽世界,要好玩的多的多。当你编写的程序按你的意愿实现时,你比做任何事都开心,你会上瘾的,真的,做电子设计的人真的会上瘾。然后让数码管亮起来,这两项会了后,你已经不能自拔了。就是要这样练习,在写程序的时候你肯定会遇到很多问题,而这时你再去翻书找,或是问别人,或是上网搜索。当得到解答后你会记住一辈子的,知识必须应用于现实生活中,解决实际问题,这样才能发挥它的作用,你自己好好想想,上了这么多年大学,天天上课,你在课堂上学到了什么?是不是为了期末考试而忙碌呢?考完得了90分,哈哈哈好高兴啊,过一个假期,甚至过一个周末,然后忘的一干二净,是不是?你学到什么了?我认为这样的生活没有意义。但是我告诉你单片机一旦学会,永远不会忘了。

另外我再说说关于用汇编语言还是C语言编程的问题。很多同学大一、二就开设了C语言的课,我也上过,我知道那时上课老师讲的就是几乘几、几加几、求个阶乘、画个星星、编个月亮什么的。学完了有什么用?虽然考试我考了90分,可我心里比谁都明白,C语言到底是什么?它有什么用?到底它能做什么我一无所知。我们不能过多的评价当今的高校教育,但我们必须得为自己负责任。让你用C语言编单片机的程序你是不是就傻了?单片机编程用C语言或汇编语言都可以,但是我建议用C语言比较好,如果原来有C语言的基础那学起来会更好,如果没有,也可以边学单片机边学C语言,C语言很简单,只是一门工具而已,我劝大家最好学好学精它,将来肯定用得着,要不然以后也得学,你一点汇编都不会根本无所谓,但你一点C语言都不会那你将来会吃苦头。给大家推荐一本书,作者谭浩强,书名<程序设计>>,清华大学出版社,大家在学习本书的同时再参考上面提到的这本书更有利C语言学习。也根本没必要再从头把<程序设计>>学一边,就算再学一边也许结果还是和你现在一样,最好的办法就是用到哪里学哪里。汇编写程序代码效率高,但相对难度较大,而且很繁琐,尤其是遇到算法方面的问题时,根本是麻烦的不得了,现在单片机的主频在不断的提高,我们完全不需要那么高效率的代码,因为有高频率的时钟,单片机的ROM也在不断的提高,足够装得下你用C语言写的任何代码,C语言的资料又多又好找,将来可移植性非常好,所以我劝大家用C语言。

总结上面,只要你有信心,做事能坚持到底,有不成功绝不放弃的强烈意志,那学个单片机对你来说就是件非常容易的事。建议步骤:

1 、看书大概了解一下单片机结构,大概了解就行。不用都看懂,又不让你出书。

2 、用学习板练习编写程序,学单片机主要就是练编程序,遇到不会的再问人或查书。

3 、自己网上找些小电路类的资料练习设计外围电路。焊好后自己调试,熟悉过程。

4 、自己完全设计具有个人风格的电路、产品 … 你已经是高手了。

看你学什么单片机了,51的单品机书籍还真是不少,开发板买一个其实就够用了

不过要是想学扎实了,还是得搞一本带基本8051编程结构的书好好看看,以了解51的编程结构和51的汇编为主要目的

如果学其他单片机就要分类进行了,但是大体思路应该还是不变的,了解一个单片机的编程结构应该是能用好一个单片机基础,不过这个一般可以通过阅读datasheet和看一些例程就比较快上手

如果要学编程的话,也是分几个阶段的:

1、单片机的编程,其实主要是针对嵌入式应用的一些编程特点来的,只需要多看些开发板提供的一些编程例程多少就有些了解;

2、掌握编程技巧,这个就需要经常写点程序来解决实际的问题(可以给自己设定目标,或者上网上看看别人都做过什么,有样学样,应该会快点);

3、系统的为一个项目做设计,需要考虑的就是整体程序设计的问题,未来需求变动以及将来软件发展的潜力,这个要根据工程实际和实际经验来搞,我还没到这个境界,呵呵

单片机你在网上搜一下吧

如果想入门 最好去图书馆借点书看,比较难理解 祝好运了!!

我给你提供以下资料 是百度上找的。

概述

单片机是指一个集成在一块芯片上的完整计算机系统。尽管它的大部分功能集成在一块小芯片上,但是它具有一个完整计算机所需要的大部分部件:CPU、内存、内部和外部总线系统,目前大部分还会具有外存。同时集成诸如通讯接口、定时器,实时时钟等外围设备。而现在最强大的单片机系统甚至可以将声音、图像、网络、复杂的输入输出系统集成在一块芯片上。

目录[隐藏]

单片机介绍

单片机的应用领域

学习应用六大重要部分

单片机学习

常用单片机芯片简介

从无线电世界到单片机世界

单片机攻击技术

单片机侵入型攻击的一般过程

单片机也被称为微控制器(Microcontroller),是因为它最早被用在工业控制领域。单片机由芯片内仅有CPU的专用处理器发展而来。最早的设计理念是通过将大量外围设备和CPU集成在一个芯片中,使计算机系统更小,更容易集成进复杂的而对体积要求严格的控制设备当中。INTEL的Z80是最早按照这种思想设计出的处理器,从此以后,单片机和专用处理器的发展便分道扬镳。

早期的单片机都是8位或4位的。其中最成功的是INTEL的8031,因为简单可靠而性能不错获得了很大的好评。此后在8031上发展出了MCS51系列单片机系统。基于这一系统的单片机系统直到现在还在广泛使用。随着工业控制领域要求的提高,开始出现了16位单片机,但因为性价比不理想并未得到很广泛的应用。90年代后随着消费电子产品大发展,单片机技术得到了巨大的提高。随着INTEL i960系列特别是后来的ARM系列的广泛应用,32位单片机迅速取代16位单片机的高端地位,并且进入主流市场。而传统的8位单片机的性能也得到了飞速提高,处理能力比起80年代提高了数百倍。目前,高端的32位单片机主频已经超过300MHz,性能直追90年代中期的专用处理器,而普通的型号出厂价格跌落至1美元,最高端的型号也只有10美元。当代单片机系统已经不再只在裸机环境下开发和使用,大量专用的嵌入式 *** 作系统被广泛应用在全系列的单片机上。而在作为掌上电脑和手机核心处理的高端单片机甚至可以直接使用专用的Windows和Linux *** 作系统。

单片机比专用处理器更适合应用于嵌入式系统,因此它得到了最多的应用。事实上单片机是世界上数量最多的计算机。现代人类生活中所用的几乎每件电子和机械产品中都会集成有单片机。手机、电话、计算器、家用电器、电子玩具、掌上电脑以及鼠标等电脑配件中都配有1-2部单片机。而个人电脑中也会有为数不少的单片机在工作。汽车上一般配备40多部单片机,复杂的工业控制系统上甚至可能有数百台单片机在同时工作!单片机的数量不仅远超过PC机和其他计算的综合,甚至比人类的数量还要多。

[编辑本段]单片机介绍

单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。概括的讲:一块芯片就成了一台计算机。它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。同时,学习使用单片机是了解计算机原理与结构的最佳选择。

单片机内部也用和电脑功能类似的模块,比如CPU,内存,并行总线,还有和硬盘作用相同的存储器件,不同的是它的这些部件性能都相对我们的家用电脑弱很多,不过价钱也是低的,一般不超过10元即可用它来做一些控制电器一类不是很复杂的工作足矣了。我们现在用的全自动滚筒洗衣机、排烟罩、VCD等等的家电里面都可以看到它的身影!它主要是作为控制部分的核心部件。

它是一种在线式实时控制计算机,在线式就是现场控制,需要的是有较强的抗干扰能力,较低的成本,这也是和离线式计算机的(比如家用PC)的主要区别。

单片机是靠程序的,并且可以修改。通过不同的程序实现不同的功能,尤其是特殊的独特的一些功能,这是别的器件需要费很大力气才能做到的,有些则是花大力气也很难做到的。一个不是很复杂的功能要是用美国50年代开发的74系列,或者60年代的CD4000系列这些纯硬件来搞定的话,电路一定是一块大PCB板!但是如果要是用美国70年代成功投放市场的系列单片机,结果就会有天壤之别!只因为单片机的通过你编写的程序可以实现高智能,高效率,以及高可靠性!

由于单片机对成本是敏感的,所以目前占统治地位的软件还是最低级汇编语言,它是除了二进制机器码以上最低级的语言了,既然这么低级为什么还要用呢?很多高级的语言已经达到了可视化编程的水平为什么不用呢?原因很简单,就是单片机没有家用计算机那样的CPU,也没有像硬盘那样的海量存储设备。一个可视化高级语言编写的小程序里面即使只有一个按钮,也会达到几十K的尺寸!对于家用PC的硬盘来讲没什么,可是对于单片机来讲是不能接受的。 单片机在硬件资源方面的利用率必须很高才行,所以汇编虽然原始却还是在大量使用。一样的道理,如果把巨型计算机上的 *** 作系统和应用软件拿到家用PC上来运行,家用PC的也是承受不了的。

可以说,二十世纪跨越了三个“电”的时代,即电气时代、电子时代和现已进入的电脑时代。不过,这种电脑,通常是指个人计算机,简称PC机。它由主机、键盘、显示器等组成。还有一类计算机,大多数人却不怎么熟悉。这种计算机就是把智能赋予各种机械的单片机(亦称微控制器)。顾名思义,这种计算机的最小系统只用了一片集成电路,即可进行简单运算和控制。因为它体积小,通常都藏在被控机械的“肚子”里。它在整个装置中,起着有如人类头脑的作用,它出了毛病,整个装置就瘫痪了。现在,这种单片机的使用领域已十分广泛,如智能仪表、实时工控、通讯设备、导航系统、家用电器等。各种产品一旦用上了单片机,就能起到使产品升级换代的功效,常在产品名称前冠以形容词——“智能型”,如智能型洗衣机等。现在有些工厂的技术人员或其它业余电子开发者搞出来的某些产品,不是电路太复杂,就是功能太简单且极易被仿制。究其原因,可能就卡在产品未使用单片机或其它可编程逻辑器件上。

单片机历史

单片机诞生于20世纪70年代末,经历了SCM、MCU、SoC三大阶段。

1SCM即单片微型计算机(Single Chip Microcomputer)阶段,主要是寻求最佳的单片形态嵌入式系统的最佳体系结构。“创新模式”获得成功,奠定了SCM与通用计算机完全不同的发展道路。在开创嵌入式系统独立发展道路上,Intel公司功不可没。

2MCU即微控制器(Micro Controller Unit)阶段,主要的技术发展方向是:不断扩展满足嵌入式应用时,对象系统要求的各种外围电路与接口电路,突显其对象的智能化控制能力。它所涉及的领域都与对象系统相关,因此,发展MCU的重任不可避免地落在电气、电子技术厂家。从这一角度来看,Intel逐渐淡出MCU的发展也有其客观因素。在发展MCU方面,最著名的厂家当数Philips公司。

Philips公司以其在嵌入式应用方面的巨大优势,将MCS-51从单片微型计算机迅速发展到微控制器。因此,当我们回顾嵌入式系统发展道路时,不要忘记Intel和Philips的历史功绩。

3单片机是嵌入式系统的独立发展之路,向MCU阶段发展的重要因素,就是寻求应用系统在芯片上的最大化解决;因此,专用单片机的发展自然形成了SoC化趋势。随着微电子技术、IC设计、EDA工具的发展,基于SoC的单片机应用系统设计会有较大的发展。因此,对单片机的理解可以从单片微型计算机、单片微控制器延伸到单片应用系统。

[编辑本段]单片机的应用领域

目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。导d的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能IC卡,民用豪华轿车的安全保障系统,录像机、摄像机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。更不用说自动控制领域的机器人、智能仪表、医疗器械了。因此,单片机的学习、开发与应用将造就一批计算机应用与智能化控制的科学家、工程师。

单片机广泛应用于仪器仪表、家用电器、医用设备、航空航天、专用设备的智能化管理及过程控制等领域,大致可分如下几个范畴:

1在智能仪器仪表上的应用

单片机具有体积小、功耗低、控制功能强、扩展灵活、微型化和使用方便等优点,广泛应用于仪器仪表中,结合不同类型的传感器,可实现诸如电压、功率、频率、湿度、温度、流量、速度、厚度、角度、长度、硬度、元素、压力等物理量的测量。采用单片机控制使得仪器仪表数字化、智能化、微型化,且功能比起采用电子或数字电路更加强大。例如精密的测量设备(功率计,示波器,各种分析仪)。

2在工业控制中的应用

用单片机可以构成形式多样的控制系统、数据采集系统。例如工厂流水线的智能化管理,电梯智能化控制、各种报警系统,与计算机联网构成二级控制系统等。

3在家用电器中的应用

可以这样说,现在的家用电器基本上都采用了单片机控制,从电饭褒、洗衣机、电冰箱、空调机、彩电、其他音响视频器材、再到电子秤量设备,五花八门,无所不在。

4在计算机网络和通信领域中的应用

现代的单片机普遍具备通信接口,可以很方便地与计算机进行数据通信,为在计算机网络和通信设备间的应用提供了极好的物质条件,现在的通信设备基本上都实现了单片机智能控制,从手机,电话机、小型程控交换机、楼宇自动通信呼叫系统、列车无线通信、再到日常工作中随处可见的移动电话,集群移动通信,无线电对讲机等。

5单片机在医用设备领域中的应用

单片机在医用设备中的用途亦相当广泛,例如医用呼吸机,各种分析仪,监护仪,超声诊断设备及病床呼叫系统等等。

6在各种大型电器中的模块化应用

某些专用单片机设计用于实现特定功能,从而在各种电路中进行模块化应用,而不要求使用人员了解其内部结构。如音乐集成单片机,看似简单的功能,微缩在纯电子芯片中(有别于磁带机的原理),就需要复杂的类似于计算机的原理。如:音乐信号以数字的形式存于存储器中(类似于ROM),由微控制器读出,转化为模拟音乐电信号(类似于声卡)。

在大型电路中,这种模块化应用极大地缩小了体积,简化了电路,降低了损坏、错误率,也方便于更换。

7单片机在汽车设备领域中的应用

单片机在汽车电子中的应用非常广泛,例如汽车中的发动机控制器,基于CAN总线的汽车发动机智能电子控制器,GPS导航系统,abs防抱死系统,制动系统等等。

此外,单片机在工商,金融,科研、教育,国防航空航天等领域都有着十分广泛的用途。

[编辑本段]学习应用六大重要部分

单片机学习应用的六大重要部分

一、总线:我们知道,一个电路总是由元器件通过电线连接而成的,在模拟电路中,连线并不成为一个问题,因为各器件间一般是串行关系,各器件之间的连线并不很多,但计算机电路却不一样,它是以微处理器为核心,各器件都要与微处理器相连,各器件之间的工作必须相互协调,所以需要的连线就很多了,如果仍如同模拟电路一样,在各微处理器和各器件间单独连线,则线的数量将多得惊人,所以在微处理机中引入了总线的概念,各个器件共同享用连线,所有器件的8根数据线全部接到8根公用的线上,即相当于各个器件并联起来,但仅这样还不行,如果有两个器件同时送出数据,一个为0,一个为1,那么,接收方接收到的究竟是什么呢?这种情况是不允许的,所以要通过控制线进行控制,使器件分时工作,任何时候只能有一个器件发送数据(可以有多个器件同时接收)。器件的数据线也就被称为数据总线,器件所有的控制线被称为控制总线。在单片机内部或者外部存储器及其它器件中有存储单元,这些存储单元要被分配地址,才能使用,分配地址当然也是以电信号的形式给出的,由于存储单元比较多,所以,用于地址分配的线也较多,这些线被称为地址总线。

二、数据、地址、指令:之所以将这三者放在一起,是因为这三者的本质都是一样的——数字,或者说都是一串‘0’和‘1’组成的序列。换言之,地址、指令也都是数据。指令:由单片机芯片的设计者规定的一种数字,它与我们常用的指令助记符有着严格的一一对应关系,不可以由单片机的开发者更改。地址:是寻找单片机内部、外部的存储单元、输入输出口的依据,内部单元的地址值已由芯片设计者规定好,不可更改,外部的单元可以由单片机开发者自行决定,但有一些地址单元是一定要有的(详见程序的执行过程)。数据:这是由微处理机处理的对象,在各种不同的应用电路中各不相同,一般而言,被处理的数据可能有这么几种情况:

1•地址(如MOV DPTR,1000H),即地址1000H送入DPTR。

2•方式字或控制字(如MOV TMOD,#3),3即是控制字。

3•常数(如MOV TH0,#10H)10H即定时常数。

4•实际输出值(如P1口接彩灯,要灯全亮,则执行指令:MOV P1,#0FFH,要灯全暗,则执行指令:MOV P1,#00H)这里0FFH和00H都是实际输出值。又如用于LED的字形码,也是实际输出的值。

理解了地址、指令的本质,就不难理解程序运行过程中为什么会跑飞,会把数据当成指令来执行了。

三、P0口、P2口和P3的第二功能用法:初学时往往对P0口、P2口和P3口的第二功能用法迷惑不解,认为第二功能和原功能之间要有一个切换的过程,或者说要有一条指令,事实上,各端口的第二功能完全是自动的,不需要用指令来转换。如P36、P37分别是WR、RD信号,当微片理机外接RAM或有外部I/O口时,它们被用作第二功能,不能作为通用I/O口使用,只要一微处理机一执行到MOVX指令,就会有相应的信号从P36或P37送出,不需要事先用指令说明。事实上‘不能作为通用I/O口使用’也并不是‘不能’而是(使用者)‘不会’将其作为通用I/O口使用。你完全可以在指令中按排一条SETB P37的指令,并且当单片机执行到这条指令时,也会使P37变为高电平,但使用者不会这么去做,因为这通常会导致系统的崩溃。

四、程序的执行过程: 单片机在通电复位后8051内的程序计数器(PC)中的值为‘0000’,所以程序总是从‘0000’单元开始执行,也就是说:在系统的ROM中一定要存在‘0000’这个单元,并且在‘0000’单元中存放的一定是一条指令。

五、堆栈: 堆栈是一个区域,是用来存放数据的,这个区域本身没有任何特殊之处,就是内部RAM的一部份,特殊的是它存放和取用数据的方式,即所谓的‘先进后出,后进先出’,并且堆栈有特殊的数据传输指令,即‘PUSH’和‘POP’,有一个特殊的专为其服务的单元,即堆栈指针SP,每当执一次PUSH指令时,SP就(在原来值的基础上)自动加1,每当执行一次POP指令,SP就(在原来值的基础上)自动减1。由于SP中的值可以用指令加以改变,所以只要在程序开始阶段更改了SP的值,就可以把堆栈设置在规定的内存单元中,如在程序开始时,用一条MOV SP,#5FH指令,就时把堆栈设置在从内存单元60H开始的单元中。一般程序的开头总有这么一条设置堆栈指针的指令,因为开机时,SP的初始值为07H,这样就使堆栈从08H单元开始往后,而08H到1FH这个区域正是8031的第二、三、四工作寄存器区,经常要被使用,这会造成数据的混乱。不同作者编写程序时,初始化堆栈指令也不完全相同,这是作者的习惯问题。当设置好堆栈区后,并不意味着该区域成为一种专用内存,它还是可以象普通内存区域一样使用,只是一般情况下编程者不会把它当成普通内存用了。

六、单片机的开发过程: 这里所说的开发过程并不是一般书中所说的从任务分析开始,我们假设已设计并制作好硬件,下面就是编写软件的工作。在编写软件之前,首先要确定一些常数、地址,事实上这些常数、地址在设计阶段已被直接或间接地确定下来了。如当某器件的连线设计好后,其地址也就被确定了,当器件的功能被确定下来后,其控制字也就被确定了。然后用文本编辑器(如EDIT、CCED等)编写软件,编写好后,用编译器对源程序文件编译,查错,直到没有语法错误,除了极简单的程序外,一般应用仿真机对软件进行调试,直到程序运行正确为止。运行正确后,就可以写片(将程序固化在EPROM中)。在源程序被编译后,生成了扩展名为HEX的目标文件,一般编程器能够识别这种格式的文件,只要将此文件调入即可写片。在此,为使大家对整个过程有个认识,举一例说明:

单片机试验板ORG 0000H

LJMP START

ORG 040H

START:

MOV SP,#5FH ;设堆栈

LOOP:

NOP

LJMP LOOP ;循环

END ;结束

[编辑本段]单片机学习

目前,很多人对汇编语言并不认可。可以说,掌握用C语言单片机编程很重要,可以大大提高开发的效率。不过初学者可以不了解单片机的汇编语言,但一定要了解单片机具体性能和特点,不然在单片机领域是比较致命的。如果不考虑单片机硬件资源,在KEIL中用C胡乱编程,结果只能是出了问题无法解决!可以肯定的说,最好的C语言单片机工程师都是从汇编走出来的编程者因为单片机的C语言虽然是高级语言,但是它不同于台式机个人电脑上的VC++什么的单片机的硬件资源不是非常强大,不同于我们用VC、VB等高级语言在台式PC上写程序毕竟台式电脑的硬件非常强大,所以才可以不考虑硬件资源的问题。还有就是在单片机编程中C语言虽然编程方便,便于人们阅读,但是在执行效率上是要比汇编语言低10%到20%,所以用什么语言编写程序是要看具体用在什么场合下。总是来说做单片机编程要灵活使用汇编语言与C语言,让单片机的强大功能以最高是效率展示给用户。

以8051单片机为例讲解单片机的引脚及相关功能;

《单片机引脚图》

40个引脚按引脚功能大致可分为4个种类:电源、时钟、控制和I/O引脚。

⒈ 电源:

⑴ VCC - 芯片电源,接+5V;

⑵ VSS - 接地端;

注:用万用表测试单片机引脚电压一般为0v或者5v,这是标准的TTL电平。但有时候在单片机程序正在工作时候测试结果并不是这个值而是介于0v-5v之间,其实这是万用表的响应速度没这么快而已,在某一个瞬间单片机引脚电压仍保持在0v或者5v。

⒉ 时钟:XTAL1、XTAL2 - 晶体振荡电路反相输入端和输出端。

⒊ 控制线:控制线共有4根,

⑴ ALE/PROG:地址锁存允许/片内EPROM编程脉冲

① ALE功能:用来锁存P0口送出的低8位地址

② PROG功能:片内有EPROM的芯片,在EPROM编程期间,此引脚输入编程脉冲。

⑵ PSEN:外ROM读选通信号。

⑶ RST/VPD:复位/备用电源。

① RST(Reset)功能:复位信号输入端。

② VPD功能:在Vcc掉电情况下,接备用电源。

⑷ EA/Vpp:内外ROM选择/片内EPROM编程电源。

① EA功能:内外ROM选择端。

② Vpp功能:片内有EPROM的芯片,在EPROM编程期间,施加编程电源Vpp。

⒋ I/O线

80C51共有4个8位并行I/O端口:P0、P1、P2、P3口,共32个引脚。

P3口还具有第二功能,用于特殊信号输入输出和控制信号(属控制总线)

5 P3口第二功能

P30 RXD 串行输入口

P31 TXD 串行输出口

P32 INT0 外部中断0(低电平有效)

P33 INT1 外部中断1(低电平有效)

P34 T0 定时计数器0

P35 T1 定时计数器1

P36 WR 外部数据存储器写选通(低电平有效)

P37 RD 外部数据存储器读选通(低电平有效)

[编辑本段]常用单片机芯片简介

STC单片机

STC公司的单片机主要是基于8051内核,是新一代增强型单片机,指令代码完全兼容传统8051,速度快8~12倍,带ADC,4路PWM,双串口,有全球唯一ID号,加密性好,抗干扰强

PIC单片机:

是MICROCHIP公司的产品,其突出的特点是体积小,功耗低,精简指令集,抗干扰性好,可靠性高,有较强的模拟接口,代码保密性好,大部分芯片有其兼容的FLASH程序存储器的芯片

EMC单片机:

是台湾义隆公司的产品,有很大一部分与PIC 8位单片机兼容,且相兼容产品的资源相对比PIC的多,价格便宜,有很多系列可选,但抗干扰较差

ATMEL单片机(51单片机):

ATMEl公司的8位单片机有AT89、AT90两个系列,AT89系列是8位Flash单片机,与8051系列单片机相兼容,静态时钟模式;AT90系列单片机是增强RISC结构、全静态工作方式、内载在线可编程Flash的单片机,也叫AVR单片机

PHLIPIS 51PLC系列单片机(51单片机):

PHILIPS公司的单片机是基于80C51内核的单片机,嵌入了掉电检测、模拟以及片内RC振荡器等功能,这使51LPC在高集成度、低成本、低功耗的应用设计中可以满足多方面的性能要求

HOLTEK单片机:

台湾盛扬半导体的单片机,价格便宜,种类较多,但抗干扰较差,适用于消费类产品

TI公司单片机(51单片机):

德州仪器提供了TMS370和MSP430两大系列通用单片机TMS370系列单片机是8位CMOS单片机,具有多种存储模式、多种外围接口模式,适用于复杂的实时控制场合;MSP430系列单片机是一种超低功耗、功能集成度较高的16位低功耗单片机,特别适用于要求功耗低的场合

松翰单片机(SONIX):

是台湾松翰公司的单片,大多为8位机,有一部分与PIC 8位单片机兼容,价格便宜,系统时钟分频可选项较多,有PMW ADC 内振 内部杂讯滤波。缺点RAM空间过小,抗干扰较好。

[编辑本段]从无线电世界到单片机世界

现代计算机技术的产业革命,将世界经济从资本经济带入到知识经济时代。在电子世界领域,从20世纪中的无线电时代也进入到21世纪以计算机技术为中心的智能化现代电子系统时代。现代电子系统的基本核心是嵌入式计算机系统(简称嵌入式系统),而单片机是最典型、最广泛、最普及的嵌入式系统。

如果对您有帮助,请记得采纳为满意答案,谢谢!祝您生活愉快!

#include <reg52h>

#include <intrinsh>

#define uchar unsigned char

#define uint unsigned int

sbit LCD_RS = P2^0;

sbit LCD_RW = P2^1;

sbit LCD_EN = P2^2;

#define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};

uchar data RXDdata[ ] = {0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,

0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20 };

uchar temp,buf,m,count;

bit playflag=0;

uchar code cdis1[ ] = {" SERILA TRANFER "};

uchar code cdis2[ ] = {" "};

/

延时子程序

/

char code SST516[3] _at_ 0x003b;

void delay1(uint ms)

{

uchar k;

while(ms--)

{

for(k = 0; k < 120; k++);

}

}

//

/ /

/检查LCD忙状态 /

/lcd_busy为1时,忙,等待。lcd-busy为0时,闲,可写指令与数据。 /

/ /

//

bit lcd_busy()

{

bit result;

LCD_RS = 0;

LCD_RW = 1;

LCD_EN = 1;

delayNOP();

result = (bit)(P0&0x80);

LCD_EN = 0;

return(result);

}

//

/ /

/写指令数据到LCD /

/RS=L,RW=L,E=高脉冲,D0-D7=指令码。 /

/ /

//

void lcd_wcmd(uchar cmd)

{

while(lcd_busy());

LCD_RS = 0;

LCD_RW = 0;

LCD_EN = 0;

_nop_();

_nop_();

P0 = cmd;

delayNOP();

LCD_EN = 1;

delayNOP();

LCD_EN = 0;

}

//

/ /

/写显示数据到LCD /

/RS=H,RW=L,E=高脉冲,D0-D7=数据。 /

/ /

//

void lcd_wdat(uchar dat)

{

while(lcd_busy());

LCD_RS = 1;

LCD_RW = 0;

LCD_EN = 0;

P0 = dat;

delayNOP();

LCD_EN = 1;

delayNOP();

LCD_EN = 0;

}

//

/ /

/ LCD初始化设定 /

/ /

//

void lcd_init()

{

delay1(15);

lcd_wcmd(0x01); //清除LCD的显示内容

lcd_wcmd(0x38); //162显示,57点阵,8位数据

delay1(5);

lcd_wcmd(0x38);

delay1(5);

lcd_wcmd(0x38);

delay1(5);

lcd_wcmd(0x0c); //开显示,显示光标,光标闪烁

delay1(5);

lcd_wcmd(0x01); //清除LCD的显示内容

delay1(5);

}

//

/ /

/ 设定显示位置 /

/ /

//

void lcd_pos(uchar pos)

{

lcd_wcmd(pos | 0x80); //数据指针=80+地址变量

}

/

发送数据函数

/

void senddata(uchar dat)

{

SBUF =dat;

while(!TI);

TI = 0;

}

/

串行中断服务函数

/

void serial() interrupt 4

{

ES = 0; //关闭串行中断

RI = 0; //清除串行接受标志位

buf = SBUF; //从串口缓冲区取得数据

playflag=1;

switch(buf)

{

case 0x31: senddata('X');break; //接受到1,发送字符'W'给计算机

case 0x32: senddata('L');break; //接受到2,发送字符'I'给计算机

case 0x33: senddata('1');break; //接受到3,发送字符'L'给计算机

case 0x34: senddata('0');break; //接受到4,发送字符'L'给计算机

case 0x35: senddata('0');break; //接受到5,发送字符'A'给计算机

case 0x36: senddata('0');break; //接受到5,发送字符'R'给计算机

default: senddata(buf);break; //接受到其它数据,将其发送给计算机

}

if(buf!=0x0D)

{

if(buf!=0x0A)

{

temp =buf;

if(count<16)

{

RXDdata[count]=temp;

count++;

}

}

}

ES = 1; //允许串口中断

}

/

数据显示函数

/

void play()

{

if(playflag)

{

lcd_pos(0x40); //设置位置为第二行

for(m=0;m<16;m++)

lcd_wdat(cdis2[m]); //清LCD1602第二行

for(m=0;m<16;m++)

{

lcd_pos(0x40+m); //设置显示位置为第二行

lcd_wdat(RXDdata[m]); //显示字符

}

playflag=0;

count=0x00;

for(m=0;m<16;m++)

RXDdata[m]=0x20; //清显存单元

}

}

/

主函数

/

void main(void)

{

P0 = 0xff;

P2 = 0xff;

SCON=0x50; //设定串口工作方式

PCON=0x00; //波特率不倍增

TMOD=0x20; //定时器1工作于8位自动重载模式, 用于产生波特率

EA=1;

ES = 1; //允许串口中断

TL1=0xf3;

TH1=0xf3; //波特率2400

TR1=1;

lcd_init();

lcd_pos(0x00); //设置显示位置为第一行

for(m=0;m<16;m++)

lcd_wdat(cdis1[m]); //显示字符

lcd_pos(0x40); //设置显示位置为第二行

for(m=0;m<16;m++)

lcd_wdat(cdis2[m]); //显示字符

while(1)

{

play();

}

}

这个串口通信程序在我的开发版上已经全部验证通过,你可以根据实际,攸 改里面某些参数,满足你自己的需要就行。

比如你你点亮小灯,这部分你只可在相应位置添加代码即可。单片机都是51的。

其中1602的显示程序是用来验证是否通信成功,这部分你可作为参考。这部分你大可用小灯显示程序来替代。

如果:如果从工程师和研究生的专业方向来看,电子信息专业的方向大概有:

1)数字电子线路方向。从事单片机(8位的8051系列、32位的ARM系列等等)、FPGA(CPLD)、数字逻辑电路、微机接口(串口、并口、USB、PCI)的开发,更高的要求会写驱动程序、会写底层应用程序。单片机主要用C语言和汇编语言开发,复杂的要涉及到实时嵌入式 *** 作系统(ucLinux,VxWorks,uC-OS,WindowsCE等等)的开发、移植。大部分搞电子技术的人都是从事这一方向,主要用于工业控制、监控等方面。

2)通信方向。一个分支是工程设计、施工、调试(基站、机房等)。另一分支是开发,路由器、交换机、软件等,要懂7号信令,各种通信相关协议,开发平台从ARM、DSP到Linux、Unix。

3)多媒体方向。各种音频、视频编码、解码,mpeg2、mpeg4、h264、h263,开发平台主要是ARM、DSP、windows。

4)电源。电源属于模拟电路,包括线性电源、开关电源、变压器等。电源是任何电路中必不可少的部分。

5)射频、微波电路。也就是无线电电子线路。包括天线、微波固态电路等等,属于高频模拟电路。是各种通信系统的核心部分之一。

6)信号处理。这里包括图像处理、模式识别。这需要些数学知识,主要是矩阵代数、概率和随即过程、傅立叶分析。从如同乱麻的一群信号中取出我们感兴趣的成分是很吸引人的事情,有点人工智能的意思。如雷达信号的合成、图像的各种变换、CT扫描,车牌、人脸、指纹识别等等。

7)微电子方向。集成电路的设计和制造分成前端和后端,前端侧重功能设计,FPGA(CPLD)开发也可以算作前端设计,后端侧重于物理版图的实现。

8)还有很多方向,比如音响电路、电力电子线路、汽车飞机等的控制电路和协议。。。

物理专业从事电子技术的人,一般都偏向应用物理较多的方向,这样更能发挥自己的专长。比如模拟电路、射频电路、电源乃至集成电路设计。

总之,您要是有一定物理基础,又爱动手,应该考虑这些比较难的方向。它们虽然入门不易,但是都是非常专业的东东,5年以上经验的基本都月入1万以上(安捷伦在北京招的射频工程师月入4000美元),而且这些专业对外行人来说都是天书,做这些行业是越老越吃香。

但是,这些专业需要您最好读一下该专业的研究生。如果想找工作容易,就去学学单片机、ARM、FPGA,这种工作很多,几年经验的人收入在6000元以上。如果不畏惧编程、不怕数学和算法,信号处理、DSP也是很好的选择,能够承担项目的人收入在8千~1万/月左右。

熟练:你熟悉网络的话,可以做企事业单位的网管、网络维护、建网站等工作。舒舒服服的。

1)你能熟练使用C++编程,熟悉 *** 作系统,你可以成为专职程序员,熟悉底层软件你还可以成为系统工程师。是比较受累的活儿,但工资不低呀!

2)你能熟练使用JAVA,可以处理面向对象的企业型的应用开发,公司企业WEB页面设计、INTERNET可视化软件开发及动画等,Web服务器手机上的JAVA游戏开发等等。很时髦的工作,工作时的心情很重要,哈哈!

3)你若熟悉linux,完全可以在linux世界里自由竞争,你只需要一台电脑,连上internet以及一个好的头脑就足够了。你的linux战友们将会根据你的意见,你的代码和你的其他贡献来判断你的能力,不愁找不到工作,工作会来找你拉!

4)你能熟练使用protel,可以找排线路板方面的工作,如设计PC机板卡等等。循规蹈矩,安安静静,与世无争,但不能干一辈子吧?

5)你单片机熟,可以找单片机开发编程应用方面的工作。小企业,小产品多多,其中也自有一番乐趣。

6)你对DSP有一定基础的话,你可以在人工智能、模式识别、图像处理或者数据采集、神经网络等领域谋求一个职位。将来一准是公司的栋梁之材啊!

7)你若熟悉ARM,可以成为便携式通信产品、手持运算、多媒体和嵌入式解决方案等领域里的一名产品研发工程师。哈,一个新的IT精英诞生了!

8)你熟悉EDA,能熟练应用HDL语言,熟悉各种算法,如FIR、FFT、CPU等等,同时掌握最新FPGA/CPLD器件的应用,把研制的自主知识产权的模块用于ASIC。恭喜你,你马上可找到月薪上万的工作了。

什么?你什么也不会?这四年白上了!?那就去问问你们老师怎么教的你,回来再问问你自己是怎么学的!找工作的同时抓紧时间补课吧!专业是个好专业,适用面比较宽,和计算机、通信、电子都有交叉;但是这行偏电,因此动手能力很重要;另外,最好能是本科,现在专科找工作太难了!当然大虾除外~本专业对数学和英语要求不低,学起来比较郁闷,要拿高薪,英语是必需的;吃技术这碗饭,动手能力和数学是基本功。当然,也不要求你成为数学家,只要能看懂公式就可以了,比如微积分和概率统计公式,至少知道是在说些什么。而线性代数要求就高一些,因为任何书在讲一个算法时,最后都会把算法化为矩阵计算(这样就能编程实现了,而现代的电子工程相当一部分工作都是编程)。对于动手能力,低年级最好能焊接装配一些小电路,加强对模拟、数字、高频电路(这三门可是电子线路的核心)的感性认识;工具吗就找最便宜的吧!电烙铁、万用表是必需的,如果有钱可以买个二手示波器电路图吗,无线电杂志上经常刊登,无线电爱好者的入门书对实际 *** 作很有好处。其实电子信息工程专业最核心的课程是:单片机技术,EDA技术,DSP技术和嵌入式系统这四样,只要"精通"一样,就可以过上比较体面的生活喽!此外还有一些比较重要的课程,如电路CAD, *** 作系统等。dsp最有前途,但数学要好,5年经验薪水8千~万元!vc结合底层和复杂计算开发,有难度,5年经验薪水6千~万元,单片机一般在工控领域,5年经验薪水4~6千,我说的都是沿海大城市工资。另外,只会一样工资就很低,比如单片机,如果会上位机编程,等于掌握了整个系统的开发,工资就要多1~3千!基本上越难的东西,要的人越少,工资越高!越简单、普及的东西,要的人越多,工资就少。

但是如果你深入某个行业,掌握了该行业开发的整个业务流程;或者在其间结识了一些客户,手中有项目,我想年薪应该达到几十万以上吧,那时你可能就想自己开公司了!

以上就是关于51单片机怎么入门全部的内容,包括:51单片机怎么入门、想自学单片机买哪一本书好呢、C语言编写串口通信程序在裸机下运行等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/zz/9842284.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-02
下一篇2023-05-02

发表评论

登录后才能评论

评论列表(0条)

    保存