文档库 最新最全的文档下载
当前位置:文档库 › 51单片机入门教程

51单片机入门教程

51单片机入门教程
51单片机入门教程

51单片机入门教程

请允许我假设你已经掌握基本的模拟与数字电路知识、基本的计算机理论知识(比如知道二进制是怎么回事,R A M和R O M是什么东西)与操作知识(比如会装载与使用应用软件)、明白C语言的基本规则与语句。同时,我默认你有一本经典51教材(哪个版本都可以)、一本51单片机应用教材(内容为给出硬件电路和源程序的单片机开发实例)、一块51单片机实验板(含一条串口线)、一块具有I S P(在系统编程)功能的单片机、某个版本的K E I L软件、某个版本的I S P 烧写软件、一台性能一般的P C电脑。

如果不具备上述任何一项,请不要继续阅读本教程,收起你的书本,回家吧,你无法学会单片机。知识方面的欠缺请自己尽快弥补。教材与应用书籍可以借阅,但是我建议各买一本,因为它们属于工具书,需要随时翻看,版本我就不推荐了,各种版本内容基本都一样,这个投资需要数十元。实验板可以使用我提供的这一款,硬件功底好的也可以自制,成本在100元以内,网上有很多这方面的资料,且基本配置都大同小异。具有I S P功能的51单片机我推荐使用飞利浦系列,本实验板就是针对P89C51R D2系列(价格40元左右)设计的(周立功单片机公司全面代理飞利浦单片机,可以联系邮购)。其他I S P功能的单片机也行,如华邦的W78E系列,A V R 哈佛结构(不是51内核)高速系列,不过我都没有使用过。具有I S P功能的单片机虽然比A T89C51之类(10元左右)贵很多,但是配置很强(仅R O M容量就有64K,是A T89C51的16倍),而且相对于数百元的编程器或者仿真器来说,性价比还是很高的,有利于降低硬件投资给初学者造成的门槛。K E I L软件网上随处都可以下载到(搜索K E I L下载即可),当然尽量使用高版本的。I S P 编程软件周立功单片机的网站可以下载,名称为Z L G I S P,飞利浦的W I N I S P也可以。不算P C电脑的话,200元的投资足够开始学习51单片机了(实验板+串口线+单片机+教材)。

O K,这是一份面向对单片机一无所知的初学者的入门教程。单片机技术就如同一张窗户纸,这份肤浅的教程就是来戳穿它的,呵呵。就如同你来到一个陌生的城市,我送你一张地图——不是我水平高,是我比你来得早,就这么点优势,呵呵。它的作用仅仅是帮助你在茫然的情况下顺利上手,至于上手之后的进展,就全靠你自己的辛勤钻研了。你要明白,没有任何路标能够代替你走完脚下的路。显然,我不想你们再像我一样在入门上花费过多宝贵时间。你们当然会感谢我,这是可以理解的,因为我也曾感谢过在我入门的时候给过我帮助的朋友。

好了,我们开始学习单片机的旅程。

第一章:单片机开发的基本流程

不是所有人都学过地理,但是几乎每个人都能找到回家的路,学习单片机也是如此。我们先不要看什么教材,我们直接进入开发过程的介绍与学习,争取在最短的时间内获得最多的感性认识。千万不要像学英语那样学单片机,就像背了十年单词却没见着一回老外——看一年教材也没见过单片机什么样的话,那就不可能学会了。

针对我们前言中的软硬件,基本开发流程是这样的:

1、在P C电脑上安装并启动K E I L软件,建立一个单片机工程项目,调整设置,使项目输出时生成H E X格式(I N T E R L公司规定的一种二进制格式)烧写文件。具体操作详见第二章。

2、新建程序文件,将其加入项目。用汇编或者C51语言编写一个程序,编译,纠错,再编译,再纠错,直到错误全部消失,编译成功,系统会自动生成H E X格式文件,保存在项目所在的文件

夹里。

3、在实验板断电的情况下(如果带电容易击穿P C机串口),用串口线连接单片机与P C机串口。接通实验板电源,选择I S P编程(红色发光管亮),复位,进入编程状态。启动I S P编程软件

Z L G I S P,选择需要擦除的F L A S H块(初学编程代码不会很大,擦除第一块B L O C K8K足够)。点击设置选项,V E C T O R为F C不要改动,S T A T U S改为00,点击写入。然后点击读出,确认V E C T O R确实为F C,而S T A T U S确实为00,如果不是,重新写入,然后退出I S P状态,则设置完成。也就是说每次退出I S P功能之前,必须确认向量为F C,否则下次将无法进入I S P状态,就好比你把钥匙放在屋子里却从外边锁上了门一样。因为V E C T O R和S T A T U S是同时被改写的,所以改写S T A T U S 的时候V E C T O R可能发生误码或丢失等错误,一旦发生这种情况,只能使用支持P89C51R D2的并行编程器将V E C T O R的入口地址F C重新烧入,等于破门而入拿钥匙,比较麻烦了。注意,这一步非常关键,S T A T U S不为00程序将不能正常运行程序,原理下文再做介绍。打开编译好的H E X格式烧写文件。点击编程选项,不必做任何选择,等待编程自动结束。

4、切换到运行状态(绿色发光管亮),按下复位键。此时程序开始运行,实验板的器件会有相应的反应。至此一次完整的单片机开发流程成功结束。

第二章:K E I L软件使用方法

如何安装与启动K E I L软件我就不说了,这个软件的功能有三个:编辑程序源代码,编译源程序为目标文件(目标文件就是翻译过来的机器码),软件仿真运行结果。作为初学者,你要明白编辑和编译的区别——就像你要明白秘书和翻译的区别一样。

启动软件以后,点击P R O J E C T(工程),在下拉菜单中选择N E W(新建),在对话框中设置项目文件的保存位置,具体位置随你便了。给该工程项目命名,随你便,但是要把扩展名设为.U V2,比如可以命名为L E D.U V2,保存。此时弹出单片机设备选择对话框,针对我们的实验板请选择A T M E L公司的A T89C51或者P H I L I P S公司的8X C51R D2,点击确定。

点击F I L E(文件)中的N E W,此时会出现一个文本界面,点击F I L E中的S A V E(保存),在对话框中设置保存路径(最好与刚才的工程文件在一个文件夹中)。给该源程序文件命名,扩展名要根据你使用的编程语言确定,如果使用汇编语言,就命名为.A S M,如果使用C51语言,就命名为.C。对于没有学过C51的初学者来说,应使用.A S M,比如L E D.A S M,保存。

在左面的工程窗口里用右键点击T A R G E T1,选择O P T I O N S F O R T A R G E T‘T A R G E T 1’ ,在对话框中选择O U T P U T选项,在C R E A T H E X F I L E选项前打勾,点击确定,这样编译之后,在工程项目所在的文件夹中就能够生成H E X格式的烧写文件了。

点击T A R G E T1前面的加号,用右键点击S O U R S E G R O U P1,选择

A D D F I L E S T O G R O U P‘S O U R S E G R O U P1’ ,将刚才新建的源程序文件加入。此时

S O U R S E G R O U P1之前也有加号了,点击会看到你新建的文件。

双击进入你建立的文件,现在可以编写你的第一个程序了。

第三章:你的第一个单片机程序

源程序如下:

O R G00H

M O V P0,#55H

L O O P:S J M P L O O P

E N D

什么?这么简单?!是不是在搞笑?!没错,虽然简单,但这就是一个完整的单片机程序。具体语句我先不作解释,你要先把这个程序在实验板上跑起来才行。点击编译按钮(项目窗口上面那三个蛋糕一样的按钮中间或者右边那个),也可以选择P R O J E C T选项中的

B U I L D T A R G E T选项,编译就自动开始。如果有错误或者警告,下面的编译输出栏将会显示,如果你编译过C语言的程序,就会比较熟悉,所以要求你具有一定的C语言基础。如果没有错误和警告,系统将显示代码量,D A T A表示占用内部R A M空间的大小,X D A T A表示占用外部R A M空间的大小,

C O

D E表示占用片内R O M空间的大小。P89C51R D2H B P本身有1K内部数据存储器R A M,64K 内部程序存储器R O M,本实验板没有扩展外部R A M,所以暂时不能做有关外部R A M存储的实验。至于你使用A T89C51+编程器的话,资源就比较少了,只有128B(1字节=8位)R A M和4K大小的R O M,不过对于初学者,足够使用了。

好的,对于你这样一个一点成就感都没有的初学者来说,激动人心的时候就要到了:我们要把这个程序固化到单片机的R O M里了。连接好串口线,写入S T A T U S为00(切记!写一次就行了,频繁擦写有可能导致向量丢失,那麻烦就大了),擦除,固化,复位——哈,程序运行了吗?8个L E D发光管隔一个亮一个吗?如果是的话,恭喜你啊!你已经成为一名单片机的开发人员啦!呵呵,虽然这个程序没有什么实用价值,你也不明白语句的意义,但是它给你带来了成就感和自信心,这才是作为初学者最最需要的,有了信心与兴趣,一切都不再成为负担和难题。

是不是开始跃跃欲试了?好的,我们继续讲下去。

第四章:程序解释与软件仿真功能的介绍

现在我们回过头来解释这个程序。

O R G是一个伪指令。不懂?呵呵,正常,当初我也不懂。伪指令就是一条没有真正操作的指令,说白了就是什么活也不干,耍耍嘴皮子而已。O R G是个定位伪指令,告诉系统程序从00地址开始执行,至于执行什么,怎么执行,它不管。就像一次扫雪任务,一个领导来了,指着脚下说:从这里开始扫。至于具体怎么扫,那是你的事情,呵呵。还有几条伪指令,去看教材。

M O V P0,#55H是这个程序的核心指令,工作全部都是它做的。参照教材,它的意思是将十六进制数55输出给寄存器P0,而P0口的状态由8个L E D显示。我知道你会对这个十六进制数字感到糊涂,因为我们长了10手指头。这里的55不是十进制转换来的,它实际是二进制数字的一种压缩写法,写成二进制就是01010101,这样P0口接的8个L E D就会隔一个亮一个。55屁股后面的H表示它是十六进制数,如果去掉H就表示55是十进制数了。十进制数55转换为十六进制数是37,二进制数是00110111,就不是01010101了,不信可以试试看,去掉55后

面的H。为了明确输出状态,你可以将55H写成01010101B,这个B表示是二进制数,显示结果一样,我写输出一般都使用二进制写法。你必须明白十进制、二进制、十六进制之间的转换方法,各种计算机书里都有的。以后你就不要用十进制思考了,二进制是一种重要思维方式,你务必熟悉。具体计算你不要动手,那很傻哦——P C机的附件里不是有个很好的计算器吗?可以非常方便的转换多种数制,编程的时候同时打开就行了。

现在来解释那个很有趣味的软件仿真,你不用烧写芯片就可以看到运行结果,神奇吧!我当初都不知道有这么好的软件,为了改变一个简单的程序会白白烧片十几次,简直是傻瓜。现在我使你避免成为傻瓜,你是不是应该感谢我呢?呵呵。编译成功后点击D E B U G(调试或者叫除错,因为B U G是错误的意思)选项里的S T A R T S T O P D E B U G S E S S I O N,工具栏里也有这个快捷图标(有个带红色B字母的放大镜)。点击P E R I P H E R A L(外设)选项,选择需要察看的部分,这里我们选择P0口。点击左上角文件下面的R E T复位,然后点击R E T右面的带下箭头的小方块来运行程序,这时可以看到P0口状态变为01010101,表明运行成功。想要退出运行中的程序,点击那个圆形的红色叉。要回到编辑界面请再次点击D E B U G的快捷图标。

现在有个问题,那个L O O P:S J M P L O O P是干嘛的?这是一个死循环,指令反复跳转到本身,相信你能够看懂。你会觉得它没有什么用,你感觉很对,它的确没有什么实际的作用。那么好,让我们把它删除——编译照样通过,没有任何错误和警告,而且就算你现在把它烧写到芯片里,它也能正确运行,那为什么还要加上?你不服?好,那我们进入刚才的调试界面,运行程序,不好!系统提示出错N O‘E X E C U T E/R E D A’ P E R M I S S I O N!什么原因?问题出来了吧?因为你删除了这个循环,程序就跑飞了!跑飞了是什么意思?比如你让一只小狗在广场上随便跑,你怎么知道它会跑到哪里去?这就是跑飞,结果是你丢失了这条小狗,当然你可以重新买一只,这就是复位了,哈哈。如果你让一只小狗在院子里跑,它就不会丢失啦。循环的意义就在这里,让程序掉到这个循环里,你和系统就能把它控制住。你还是不以为然吗?这是一个简单程序,也许问题不大,但是当程序复杂之后,跑飞了是件很麻烦很可怕的事情,会出现莫名其妙的错误,而且你也无法使用软件仿真功能了。要是你还不服气,那就尝试每次编程都让程序跑飞一次,如此之后你就有感觉了,我曾经被这个简单问题困扰了数周之多,现在我提示你,你要当回事。

E N D也是个伪指令,是个编译结束标志,编译器编译到E N D的时候就结束编译了,不再编译E N D以下的程序。

这就是软件仿真的基本过程,后面我还会介绍到仿真的其他功能。建议你每次编写程序以后都要先进行软件仿真,反复修改,反复调试,直到需要完成的功能完全仿真成功再将程序烧写到芯片,这样能够提高开发效率,延长单片机使用寿命。

第五章:关于编程器、仿真器与I S P

我建议你使用具有I S P功能的单片机完全是考虑到初学者的资金问题,因为很多人一听说学习要花钱就会放弃学习。世界上没有免费的知识,更没有免费的技能,投资是非常必要的,但是成本越低就越容易上手,所以我推荐具有I S P功能的单片机,但这并非说编程器与仿真器已经没用,这一点你们要明白。

首先说说编程器,它是干什么用的呢?程序编辑好后,并且通过编译生成了H E X格式的二进制烧写文件,就要用编程器把它烧写到单片机里面。我最初入门的时候就是使用A T89C51+

编程器的开发模式,过了半年多才在发现具有I S P功能的单片机,白花了那么多银子。编程器本身很贵的,最好的上千,好一点的数百元,最便宜的简易型的也要上百元,是个不小的投资,很多人之所以对单片机望而却步,正是在这个投资上出现了犹豫。另外编程器使用起来也比较麻烦,每一次编程都要把芯片从实验板上拔下来,烧写好了再插回去,很容易弄坏插座和管脚,为此配置零插拔力插座的话,又要花一只单片机的钱了(十多元一只)。而且如果去现场工作的话,拎着个编程器多麻烦!设备复杂的话插拔芯片也很困难,一旦弄坏了管脚或者印刷板,设备就完蛋了。但是编程器在开发产品中具有重要作用,因为产品的目标板(相当于完成指定功能的实验板)一般没有空间额外加挂串口电平转换部分的器件,所以要通过编程器编程。而且开发产品如果使用一般的51芯片,成本也会大幅度下降。对于那些不用改动程序的产品比较有利。当然如果产量非常大的话,就选择掩膜(就是把程序直接做到芯片里)生产了,编程器也不用了,成本非常低。

仿真器在高校教学、实验与复杂产品开发中可以使用。使用编程器和I S P的开发方法叫做“崩溃——烧写”模式,如果程序运行结果错误,只能改动程序后擦除芯片重新烧写,为了调试一个程序连续烧写芯片数十次是很正常的事情,但是这样不但麻烦,还会缩短芯片使用寿命,而且无法观察程序运行中的状态。仿真器正是针对这一问题,它无需烧写,通过它可以直接观察运行结果,而且可以单步运行,能够最直接的找到问题所在,所以高级产品的开发都要用到。不过初学者一般买不起仿真器,也没必要买,K E I L本身就有软件仿真功能,可以大大减少烧写次数。只要不涉及到外部扩展接口,在K E I L上仿真运行成功的程序,绝大部分烧写以后都能正常运行,下文将有说明。

I S P的意思是在系统编程,但是我不喜欢这个说法,刚入门谁能理解?我的解释就是单片机本身自带编程功能,就像把一台编程器集成到单片机上,这就很容易理解了。它本身有一个出厂时候就固化好的编程程序,放在B O O T R O M里,不可修改。这个B O O T R O M不占用系统本身的R O M空间,具体放在哪里我们不必关心,V E C T O R(向量)设置为F C(针对P89C51R D2系列)就是B O O T R O M的入口的地址,不得改动。顺便解释一下,B O O T不是靴子的意思哦,是启动的意思。向量的意思我理解就是一个地址,线性代数中不是有N维向量的概念吗?其实就是一串数字,你记住是地址就行了,不要去想什么向量。对于P89C51R D2来说,P S E N脚(29脚)接地(低电平)是进入I S P功能的硬件激活条件,所以编程的时候要按下选择开关到编程端。编程结束后使P S E N脚恢复高电平,复位之后即可启动程序,但是此时S T A T U S(状态字)必须为00,它的意思就是程序从00地址开始启动,因为编程操作是把程序烧写到00地址开始的空间里,如果不从00启动,程序就发生错误了。有关I S P的详细资料可以从网上下载。不懂什么叫高低电平?不准确的说,低电平就是0V,高电平就是电源电压5V,低电平相当于逻辑里的0,高电平相当于逻辑里的1,数字电路教材里一定有描述,我就不说了。

我觉得开发器材的选择是这样的:当你是初学者的时候,用一块具有I S P功能的单片机学习足够;当你能够独立设计目标板进行小产品开发时,可以考虑购置编程器;当你成为专业单片机技术人员乃至嵌入式系统工程师的时候,仿真器对于高级产品的开发是必须的了。

第六章:51单片机实验板原理与功能简介

现在市面上单片机实验板种类繁多,有的非常简陋,有的相对高级,价格与外围器件扩展的程度正相关。我设计的这一款实验板个人认为不算简陋但也称不上高级,和网上的各种普及型实验板都差不多,市售价格在100元左右,非常适合初学者使用。能够把这款实验板的所有功

能都开发出来的话,你的单片机开发水平就相当可以了。由于电路原理非常简单,电路原理图与P C B图我将免费公布,以利于广大初学者自制,需要者请联系向我索要。你也可以参考我板子的硬件结构,根据自己的要求自行设计。

请参照你手里的51教材中列出的单片机管脚,我将详细说明本实验板的硬件结构。

1、P0口通过74L S244(单方向8位总线驱动器)驱动8位L E D发光二极管。可以实现广告灯、跑马灯、交通灯等相关实验。

2、P0同时通过74L S244驱动4位L E D数码管的段选,与8位L E D切换通过一只开关完成。位选由P2口前4位通过4只N P N三极管驱动完成。可以实现时间显示、秒表与计数显示等与数码管有关的实验。

3、P1.5通过一只P N P三极管驱动一只自震荡的蜂鸣器。自震荡的意思是加上一定直流电压,蜂鸣器即可发出一定频率的声音。如果想改变频率,可以使用P W M(脉宽调制,就是改变脉冲占空比)方式通过音频调制驱动。如果想实现音乐编程,更换为一般的蜂鸣器(就是音乐贺卡里的压电片)即可。可以完成与音乐发生有关的实验,也可作为报警信号输出。

4、P1.6与P1.7脚连接I I C器件,板载一只8脚D I P插座,可选A T24C02,它是一只256B的E E P R O M (电可擦写存储器)。可以实现电子密码锁等需要保存数据的实验,通过实验也可以对I I C技术有个基本的了解与掌握。

5、P3.2——P3.5是51的4个中断的外部输入端,这四个管脚连接4只按键开关到地,按下按键将该管脚接地。选择P3工作于第一功能,则按键开关工作于查询方式。如果选择第二功能,就工作于中断方式。可以完成按键和中断的相关实验。此处解释一下查询与中断,如果你在睡午觉,为了防止迟到,你每隔5分钟就睁眼看一下闹钟(假设你能够准时醒来),这就是查询方式,使用闹钟叫你就是中断方式了。它们的区别很显然,选择查询方式C P U就不能干别的工作了(就像你无法连续的睡觉),选择中断的话C P U可以去做其他工作,直到中断来临,C P U再去做中断要求的工作。

6、P3.0与P3.1是单片机的串口接收与发送数据线,它们通过M A X232转换为R S-232(一种串口通讯协议)标准电平,以便与P C机的串口通讯。因为51单片机与P C机的串口电平标准不同,所以用M A X232进行一个电平转换工作,仅此而已,你不需要准确的知道R S-232的协议标准。这就如同英制与公制的转换,对于你来说1M的长度对一个英国人来说就是3.28英尺。这个串口可以实现单片机与P C或者其他具备R S-232接口的单片机的通讯实验,更为重要的是,I S P编程就是通过这个串口将程序从P C机下载到单片机的R O M里面的。对于具有I S P功能的单片机,必须有这个电平转换部分(最小系统组成部分之一),否则无法进行编程。

7、其他没有使用的管脚可以作为系统扩展使用。P0口外接上拉电阻。同时引出全部I O口线、

A L E口线以及5V电源线和地线,便于扩展。晶振使用12M,选择12个时钟周期方式,机器周期为1U S,选择6个时钟周期方式,机器周期为0.5U S,这是飞利浦单片机的特殊功能。在Z L G I S P 软件编程时,点击设置,在6C L O C K前打勾即可选择6个时钟周期方式。这个方式比12个时钟周期方式速度提高不少,但是对于精确延时程序将有影响,而且大多51教材都是针对12个时钟周期所写,所以不推荐初学者使用。

8、单片机非常害怕电源极性颠倒,所以电源插口后边安装了一只全桥作为“防呆开关”(原理简单而巧妙,请自行研究),无论电源极性如何都可以直接输入,但是输入电压不得低于8.5V,也不可太高,否则稳压块L M7805功耗过大容易发热。可以使用市售收音机直流电源,推荐使用9V。至于复位开关,编程选择开关,电源稳压部分就不再赘述了。

以上简介了实验板的硬件结构,实验请参见下文设计。

第七章:51单片机常见问题解答

关于51单片机的硬件,你手里任何一本教材都写得很清楚,我没有必要重新C O P Y一份,但是我很少看到能够不费力气就看得懂的51教材。对于初学者来说,一堆术语加上一堆严密得让人头痛的逻辑推导不啻为一种灾难,有时候明明很简单的原理非要被描述得艰涩异常。科学的精神在于把复杂的东西表述得简单,但是我们很多教材编写者却反其道而行之,完全违背了真正的科学精神,实在是面目可憎,行而不远。这也是我花费时间撰写本教材的原因之一。下面就针对几个被教材解释得一塌糊涂的常见问题做一下通俗的解释。

1、处理能力的概念。51单片机属于8位机,8位是个什么意思呢?就是C P U处理的数据是8位的。位数的高低体现了C P U处理能力的强弱。4位的处理器已经基本淘汰了,8位的处理器占据了低端单片机的大部分市场,32位处理器是现在兴起的嵌入式系统的主流配置,我们常用的电脑大多都是32位,64位的处理器也有,但是市场份额比较少,价格也较高。所以我们学习的51单片机属于比较低级的单片机,会逐渐被新兴的嵌入式处理器所淘汰,但是51单片机成本低,学习资源最丰富,上手容易,对于初学者来说是很理想的用于学习的单片机。

2、存储器问题。51单片机有两类存储器,一类是程序存储器R O M,它断电以后数据不丢失,但是必须用编程器擦除和写入程序;另一类是数据存储器R A M,它断电以后数据会丢失,但是可以用程序改写内容。以A T89C51为例,因为它有16条地址线(P0和P2),所以它可以访问64K 存储器空间(2的16次方是65535),它的R O M和R A M都是分内外的,外部存储器都需要扩展,扩展方法参见教材。但是R O M和R A M的内外执行方式不同,R O M的内外切换要用E A脚(31脚)的电平选择,而R A M的切换可以直接用不同指令M O V和M O V X分开同时访问。例如A T89C51有4K 内部R O M,64K外部R O M,如果E A=1,则从内部R O M开始执行,当超出4K之后,跳转到片外4K 以上的空间运行;如果E A=0,则完全在外部R O M中运行,内部R O M不再起作用。什么意思呢?就是要么运行内部4K R O M要么运行外部4K R O M,内外R O M的前4K不能同时运行,必须用E A切换。所以一般在没有外部R O M的情况下,E A必须接电源正极,否则程序不能运行。我曾经因为E A悬空造成程序无法运行,苦苦思索一周才找到原因,期间因为盲目测试导致3块A T89C51损坏,教训十分惨痛,望后来者吸取教训。R A M就不同了,A T89C51有128B内部R A M,可以扩展64K外部R A M,这两个部分的R A M可以同时被访问,注意选择不同指令即可,访问内部用M O V,访问外部

(可编程R O M),还有M A S K R O M、用M O V X,外部R A M扩展方法参见教材。R O M的种类除了常见的P R O M

F L A S H R O M和E E P R O M等种类。M A S K R O M是掩模存储器,掩模的意思就是工厂把程序直接做在芯片上了,适于不需要反复修改的大批量产品生产,成本非常低,但是用户不能更改程序,8051里就是这种R O M。我最初接触单片机的时候,去电子市场买8051,结果商家真的卖给我了一块,回家一看,里面全都是程序,根本无法修改,现在回想起来,自己简直是个傻瓜,哪有买掩模

R O M的单片机做学习和开发的?!商家也不告诉我已经烧好的程序可以干什么,害的我只能拿它当8031使了!这个教训真是好笑,希望大家一定要搞明白R O M的种类区分。P R O M有O T P(一次性编程)和允许反复擦写(用紫外线照射擦除)两种,87C51系列就是O T P的R O M;就现在的形

势看,R O M有普及F L A S H之势,那些用紫外线擦除的垃圾看来是要被淘汰了。F L A S H R O M可以电擦写,但必须整块擦除,写入速度快,擦写次数在1000到10万次之间(视不同类型芯片而定),事实上89C51系列的R O M就是F L A S H R O M,U盘内的R O M也是,一种N A N D F L A S H现在广泛用于嵌入式系统中,它的存储容量大,成本低,可以实现固态硬盘的功能;E E P R O M是电可擦写存储器,它是按位擦写的,可以擦写10万次以上,但擦写速度较F L A S H R O M要慢,A T24C02就是E E P R O M,我们用的很多智能I C卡也是。R A M的种类有静态S R A M,动态D R A M和S D R A M之分。S R A M只要写入一次,有电数据就可以保持,单片机里就是S R A M,但是它的缺点就是太贵,所以单片机里的R A M都很小。D R A M一次写入数据之后只能保持一瞬间,必须不断重写,叫做刷新,这个过程还需要相应的逻辑电路支持,很麻烦但是很便宜。S D R A M叫做具有静态特性的动态R A M,它把逻辑刷新电路和D R A M做到了一起,它的工作方式本质是动态的,但是从外部看相当于一个S R A M,这样就不但具有静态特性而且价格便宜,我们电脑里的内存条都是S D R A M。我自己的理解是这样的,就像爬山比赛,能力强的人呢,爬上去就不会滑下来。但是能力不行的人站不住,只好滑下来再爬上去,反复这样,频率高了给人的感觉就好像他在山上一样。呵呵,反正能力强的东西总是更贵一些的。

3、I O口问题。P0口是集电极开路,所以我的实验板上给它加了上拉电阻。上拉电阻的作用就是在基本没有电流输出的情况下将管脚电位拉到5V,这样对于外部来说是逻辑1,如果没有这个电阻,管脚电位就是0。为什么?假如三极管关闭的情况下C-E间电阻为100M,如果上拉电阻为10K,则分压的结果是几乎接近5V,这就是上拉的原理。I O口的驱动能力有限,A T89C51也就不到20M A(8051连这些都没有),可以直接驱动L E D(电流流入方式),但是驱动别的大电流外部设备必须加驱动电路,否则会烧毁I O口,务必注意。迄今为止,我一共烧毁了7块A T89C51,损失了一把银子之后我终于找到了原因:一个是电源问题,电源电压超过5V或者极性颠倒都会导致芯片烧毁;另一个问题就是我在单片机供电的情况下测量P0.0脚(39脚)电位时表笔不小心连通了电源正极(40脚),而此时刚好P0.0内部M O S管开通(也就是输出0),结果直接烧毁了输出M O S管。因为P0口是数据线,结果导致编程时数据无法写入。这个教训最惨痛了,务必牢记。单片机的一种绝对保密技术就是利用了这种方法,编程之后烧毁一只闲置的数据或地址管脚的输出管,造成数据无法读出,达到绝对保密的目的。还有一点需要注意,如果要读入管脚的状态,必须先向该管脚写1,然后再读该管脚方能得到正确输入。使用P3的第二功能之前,也要先向P3口写1,目的都是让I O口输出管关闭。I O口详细构造请阅读51教材相关部分。

4、有关寻址方式。相关教材中的寻址部分纯粹是找别扭,我都可以用51开发产品了,可是我现在重读这部分教材依然一头雾水,无法理解。不理解很好,说明你大脑正常,不用去管教材所说的寻址方式到底是什么意思,你学会如何使用就行了。其实就是对数字操作(所谓立即寻址)、对寄存器操作(所谓寄存器寻址)、对地址操作(所谓直接寻址)、对指针操作(有专用指针也有寄存器作为指针)和对位操作5种情况。寻址方式就是告诉你一个操作什么东西的问题,没有什么高深的。如果还是不明白就不要看这部分内容了,直接学习指令进行编程,当你编程很熟练之后,你会发现,其实它那些怪里怪气的寻址方式命名是很可笑的。

5、对中断概念的理解。我最开始看了一个使用中断的程序之后,想了好几个晚上也没有理解什么叫中断。这个程序的注释竟然说中断服务程序是这个程序的核心部分,我当时就茫然了——那主函数是什么?垃圾吗?在我的认识里,主函数才应该是一个程序的核心。忘了过了多少日子,我终于明白了中断的含义。假如你设置一只闹钟6点叫你,如果你6点准时爬起来看闹钟是不是叫你的话,那就不叫闹钟了,你成了闹钟的闹钟了。初学者很容易不明白为什么主函数里并没有跳转到中断服务函数的指令,怎么中断服务程序就自己自动执行了呢?没错,中断不需要什么指

令来启动,它会自己启动,就像定时炸弹到点就会自动爆炸一样。什么时候启动由定时器、计数器或者外部中断决定,这是一个前台运行过程(谁表演谁就是前台嘛),你在后台看不到,后台是个设置中断的过程,决定什么情况下中断会叫你。比如你在车站等你女朋友,你无法准确知道她什么时候来,所以后台函数是个循环——你来回踱步,焦急的等待。当你女朋友出现的时候,她要求你停止踱步,和她去商店买衣服——这是中断服务函数。如果你女朋友还没来,你就自己跑到商店里了,那就不叫中断了。如果她来了你还在踱步——很不幸,系统不是跑飞就是崩溃了,呵呵。有关中断的具体操作与设置方法,请仔细阅读51教材相关部分。中断是单片机一个的难点,也是一个有特色之处,没有中断的话单片机就失去了全部的灵活性与实时性,变成一块用于顺序控制的数字电路了。

6、编程语言问题。你可以用汇编编程,也可以用C51语言编程。它们各有各的强项和弱点,选择哪种语言要根据你的基础和具体任务确定。有个老兄这样说:汇编挺好啊,不过你用着用着就想用C51了;C51嘛,也挺好啊,不过你用着用着就想用汇编了。呵呵,真的是这样。我个人的理解是:汇编好写不好看,C语言好看不好写。去看别人一段没有注释的汇编语言是一件很困难的事情,看不懂并不说明你编程水平差。这种情况下先不要看别人的例程,根据你自己的思路编写即可,到了关键部分或是遇到障碍再看看例程,效果很好。别人写的C语言比较好理解,因为C语言本质上就是各种各样的函数调来调去的过程,看懂了函数,程序基本就明白了。下面说说汇编和C各自的特点:汇编是个事必躬亲的战术语言,要干什么就直接干什么,什么事情都要直接操作硬件,所以累啊——系统倒不累,你累啊,呵呵,累死你换来的好处就是代码比较小,而且工作准确,操作决不会马马虎虎。C语言就不同了,是个战略语言,只抓大局,一堆基层工作全给I N C L U D E了,够狠,要干什么不好好干,非要拐弯抹角——比如重新运行不让用跳转(封杀G O T O语句),非要设计一个巧妙的循环,汇编就没这么不老实。这次你不累了,但是如果智商不够就惨了,一句都写不下去,不像汇编——就算我笨,能编多少时多少,编一点是一点。当甩手掌柜自然不错,但是缺点也很明显:一来代码要大不少,系统资源一下就被搞紧张了;二来涉及到对硬件的具体操作就它就没招了,还得求人家汇编,呵呵。所以汇编和C你都要掌握,大局由C定,几处需要准确处理硬件的工作交给汇编,属于瞎子背瘸子的组合,呵呵。两手抓,两手都要硬,互相渗透,结合使用,这就是学习单片机语言的基本原则。说了一顿,和具体编程一点关系都没有,但是原则你要把握。汇编语言我就不说了,教材都会详细说明指令的意义和使用方法,下面我说一下C51。C语言的具体结构和编写方法你明白了吗?没明白赶紧看书。C51与通用C语言的区别我理解主要有两点:一是中断函数的声明与使用,二是如何在单片机里进行位操作,我的理解就这一点点,当然这与我水平比较菜有很大关系。那么C语言如何能够认识那些单片机的寄存器呢?难道每写一个程序都先要铺天盖地的定义一番?!这个我们不怕也不用管,

K E I L里有自带的包含文件来解决这个问题。你在K E I L里写C51程序的话,上来先写一个

#I N C L U D E,这一堆问题就解决了,下面你可以直接写P0=0X00,或者S C O N=0X00之类,反正C语言可以认识,还能正确编译,怎么样?战略语言确实不得了,脏活全让这个文件做了。当然想舒服就得付出资源的代价,C代码肯定比汇编大,不信你编写一个同样的汇编程序试试看。想学习C51的话,可以找一本教材,但是如果你基本明白C了,买教材就有点浪费了,因为大多数C51教材都花上很大篇幅讲C的规则,什么数据类型,什么控制语句,简直是浪费白纸,所以你借一本教材看看C51和通用C不同的地方就可以了,买一本实在不值得。借不到也可以到网络上搜索一下,有更通俗的教材,这里推荐明浩写的那个基于K E I L软件的C51教材,虽然只有几课内容,很简单,但是非常容易理解,也很实用,同时还说明了K E I L的使用方法。

常见问题就谈这么多,都是一些概括性的介绍,具体问题你要自己去解决。

第八章:实验设计

你一定很着急知道学习多长时间才具有开发产品的能力,这个过程很快,一般连续学习半年以上(注意不是三天打鱼两天晒网)即可开发简单的产品。你必须严格进行一系列实验,通过实现单片机的所有功能达到提高开发能力的目的。下面列出我自己认为需要完成的实验的名称以及实验项目的说明。

实验1:跑马灯左右循环移动的应用

实验项目:

1、学习I O口的控制技巧,掌握各种数制的转换方法。

2、第一次用取机器周期倍数的延时方法实现移动速度的设定。

3、第二次使用定时器中断的方法实现移动速度的设定。

4、第三次使用D P T R取表的方式实现移动顺序的设定。

实验2:中断的应用

实验项目:

1、第一次用多种模式实现两个定时器中断的功能,可以用L E D闪烁显示,也可以让蜂鸣器发声。

2、第二次设定四个中断同时存在,两个外部中断,两个计数器中断,由四个按键作为外部输入。四个按键设定两个优先级,完成五种任务(包括后台的任务和四个中断服务程序的任务)。

实验3:布尔代数(一位机)应用

实验项目:

类似可编程逻辑控制器的使用,选择多个复杂的逻辑关系,使用指令中的逻辑语句完成相关的逻辑功能,使单片机成为一块可以完成复杂逻辑的数字电路。这个实验主要用于工业配线以及顺序生产过程。

实验4:串口应用

实验项目:

1、U A R T通过74L S164和74L S166实现串行扩展I O口输入输出功能。

2、两个单片机做全双工通讯实验。

3、单片机与P C机之间进行全双工通讯实验。

4、一个单片机与两个以上单片机做全双工主机从机通讯实验。

实验5:单片机音乐编程应用

实验项目:

1、该实验可以用延时的方法也可以用定时器中断的方法实现,主要学习了如何通过对频率和节拍编码表的读取进行音乐编程。

2、在此基础上,可以学习如何使用单片机产生双音频拨号音,完成单片机自动拨号实验。

实验6:直流电机与步进电机控制应用

实验项目:

1、了解直流电机驱动部分硬件原理。掌握单片机控制直流电机正反转的方法,能够使用P W M(脉宽调制)方式改变直流电机转速。

2、了解步进电机驱动部分硬件原理。掌握用脉冲分配的方法驱动步进电机正反转,并且可以通过改变脉冲分配频率来改变步进电机转速。

实验7:键盘与显示器应用

实验项目:

1、独立按键识别操作方法,B C D码转盘的使用方法。

2、扫描式按键操作方法(结合中断操作)。

3、串口扩展I O口的键盘操作方法。

4、静态L E D显示操作方法。

5、动态扫描L E D显示操作方法。

6、结合时钟芯片(需要扩展),设计一个电子表。

7、结合4*4键盘,设计一个计算器。

8、结合E E P R O M,设计一个防掉电电子密码锁。

9、结合步进电机,设计一个可设定和显示速度的步进电机控制板。

实验8:其他显示器件应用

实验项目:

1、点矩阵L E D显示器应用。使用4块8*8矩阵L E D作为大屏幕,滚动显示中文字幕。

2、使用L C D显示字符与图形,掌握L C D驱动方法。

实验9:A D/D A转换应用

实验项目:

1、使用A D C0809和一种温度探头,结合L E D显示制作一只数字温度计。如果温度探头成本过高,可以制作一只数字电压表。

2、使用双积分型A/D转换电路I C L7135制作数字电压表。

3、使用D A C0832制作一个多种波形的数控信号发生器。

4、使用A D C0809和D A C0832,外扩R A M(可使用32K的62256)制作简易数字录音机(录音时间为数秒钟)。

实验10:外部传感器输入与数据采集应用

实验项目:

1、利用光敏三极管采集光电信号。

2、利用红外线对管构成主动式红外线光电信号采集。

3、利用热释电红外线传感器,结合驱动电路,构成被动式红外线光电信号采集。

4、利用驻极体话筒或压电陶瓷片,结合音频锁相环技术(L M567),制作超声波距离探测器,使用L E D显示距离。

5、利用霍尔元件,制作伺服电机转速控制器,由键盘设定转速,L E D显示。

6、利用压力传感器制作电子秤,键盘输入,L E D显示。

实验11:单片机外围扩展I C应用

实验项目:

1、8155原理与应用。

2、8255原理与应用。

3、8279原理与应用。

4、利用时钟芯片D S12887制作智能电子表。

5、利用I S D1420或者A P R9600制作公共汽车报站器、汉语报时钟或会说话的万用表。

实验12:I I C技术应用

实验项目:

1、电可擦写存储器A T24C02读写实验。

2、P C F8583驱动实验,可制作电子表。

3、8位并行输入输出芯片P C F8574实验。

4、数模转换芯片P C F8591实验。

I I C技术可以节省单片机端口,有利于设计小型化和制作低成本化,但是实时性有所下降。以前的实验均可由相关I I C器件完成。

实验13:操作系统U C O S_I I在单片机上的移植

实验项目:

要求单片机R O M最少要8K,一般要14K以上,外部扩展R A M最少要4K。完成在单片机上运行多个任务的操作系统的移植

如果你已经成功做完以上所列的所有实验,不要谦虚了,请删除本教材,并收下我这个徒弟,可以说在51单片机开发方面你已经走在我们这些菜鸟前面了。对于初学者,当然不必因此而泄气,能够在每个方面都实现一个基本实验就相当不错了,就算自己无法编出程序,把网上编好的程序拿来跑一跑也很不错,起码说明我们具有“移植”的能力,呵呵。别小看这个能力,复杂产品的开发基本都是这样,试问谁能为了一个产品自己开发操作系统?要是能编出来还卖产品干吗?直接卖操作系统就发财了,呵呵!所以初学者要量力而行,上述所列只不过给大家指出个学习方向,基本就这么多了,从简单的开始,一步一步做下去。当然还有一些比较高难的,比如单片机上网,单片机控制蓝牙模块、G S M模块、G P R S模块乃至G P S全球定位系统模块等等,这些暂时不是我们的学习内容,等你成为高手以后再研究吧。

后记

单片机的入门教材暂且写到这里,如果以后有新的体会再继续补充。每一个初学硬件技术的人都要明白,世界上的器件是无穷无尽的,有数以万计的技术可能你还没来得及接触就被淘汰掉了,所以不要揪住一堆知识不放,或者幻想掌握所有器件的使用方法。培养一种思维方式是最重要的——有方法没有知识随时可以学,有知识没方法的话,知识最终也会被忘掉。我们现在

学习51,如果我们在学习过程中培养出了解决方法的思维方式,一旦客观需要我们使用A V R,很短的时间我们就可以搞定,哪怕我们对A V R一无所知。

没有万能的知识,只有万能的思维与能力。但愿每一个立志投身硬件工作的年轻人都能够拥有这种认识,为民族工业的发展与中华民族的伟大复兴做出真正的贡献!

51单片机新手入门实例详解

51单片机新手入门实例详解 1.硬件和软件准备 ●实验系统:EL89C单片机学习开发系统一套 ●电脑:具有标准串口的台式机或笔记本电脑,如果没有串口也可购 买一条USB转串口线代替 ●工具软件:Keil uVision2(用于编写和编译源程序、仿真调试); 光盘上非安装烧写软件,路径 \单片机EL89C\EL89C光盘\STC52单片机下载程序\stc-isp-v4.79-not-setup\STC_ISP_V483.exe (EL89C的编程控制烧写软件) 2.源程序编写和编译 EL89C的8个发光二极管负极通过限流电阻接入单片机的P1.0~P1.7端口,下面的范例程序可以使这8个发光二极管轮流点亮,形成流水灯效果。 我们使用的开发工具是Keil C51,是目前世界上最优秀、最强大的51单片机应用平台之一,它集编辑、编译、仿真调试于一体,支持汇编、C语言以及混合编程。同时具备功能强大的软件仿真和硬件仿真功能。 下面以一个简单的流水灯程序为例子来介绍Keil C51的使用方法: 2.1首先在硬盘上建立一个文件夹,命名为ledtest(当然可以是其他名字), 为方便程序的编写和调试,我们将调试过程中产生的文件都将放在这个目录中。 2.2启动Keil软件,点击菜单project,选择new project,然后选择你要保 存的路径,输入工程文件的名字,我们现在保存到刚才建立的ledtest目录中,工程文件命名为ledtest,然后点击保存。 2.3这时会弹出下面的对话框Select Device for Target,要求你为刚才的项 目选择一个CPU。我们选择Atmel的AT89C52,如图所示,选择AT89C52之后,右边一栏是对这个单片机的基本的说明,然后点击确定。

51单片机C语言编程基础与实例

基础知识:51单片机编程基础 单片机的外部结构: 1. DIP40双列直插; 2. P0,P1,P2,P3四个8位准双向I/O引脚;(作为I/O输入时,要先输出高电平) 3. 电源VCC(PIN40)和地线GND(PIN20); 4. 高电平复位RESET(PIN9);(10uF电容接VCC与RESET,即可实现上电复位) 5. 内置振荡电路,外部只要接晶体至X1(PIN18)和X0(PIN19);(频率为主频的12倍) 6. 程序配置EA(PIN31)接高电平VCC;(运行单片机内部ROM中的程序) 7. P3支持第二功能:RXD、TXD、INT0、INT1、T0、T1 单片机内部I/O部件:(所为学习单片机,实际上就是编程控制以下I/O部件,完成指定任务) 1. 四个8位通用I/O端口,对应引脚P0、P1、P2和P3; 2. 两个16位定时计数器;(TMOD,TCON,TL0,TH0,TL1,TH1) 3. 一个串行通信接口;(SCON,SBUF) 4. 一个中断控制器;(IE,IP) 针对AT89C52单片机,头文件AT89x52.h给出了SFR特殊功能寄存器所有端口的定义。 C语言编程基础: 1. 十六进制表示字节0x5a:二进制为01011010B;0x6E为01101110。 2. 如果将一个16位二进数赋给一个8位的字节变量,则自动截断为低8位,而丢掉高8位。 3. ++var表示对变量var先增一;var—表示对变量后减一。 4. x |= 0x0f;表示为 x = x | 0x0f; 5. TMOD = ( TMOD & 0xf0 ) | 0x05;表示给变量TMOD的低四位赋值0x5,而不改变TMOD的高四位。 6. While( 1 ); 表示无限执行该语句,即死循环。语句后的分号表示空循环体,也就是{;} 在某引脚输出高电平的编程方法:(比如P1.3(PIN4)引脚) 代码

51单片机教程

原作:平凡的单片机

1、何谓单片机一台能够工作的计算机要有这样几个部份构成:CPU(进行运算、控制)、RAM(数据存储)、ROM(程序存储)、输入/输出设备(例如:串行口、并行输出口等)。在个人计算机上这些部份被分成若干块芯片,安装一个称之为主板的印刷线路板上。而在单片机中,这些部份,全部被做到一块集成电路芯片中了,所以就称为单片(单芯片)机,而且有一些单片机中除了上述部份外,还集成了其它部份如A/D,D/A等。 天!PC中的CPU一块就要卖几千块钱,这么多东西做在一起,还不得买个天价!再说这块芯片也得非常大了。不,价格并不高,从几元人民币到几十元人民币,体积也不大,一般用40脚封装,当然功能多一些单片机也有引脚比较多的,如68引脚,功能少的只有10多个或20多个引脚,有的甚至只8只引脚。为什么会这样呢?功能有强弱,打个比方,市场上面有的组合音响一套才卖几百块钱,可是有的一台功放机就要卖好几千。另外这种芯片的生产量很大,技术也很成熟,51系列的单片机已经做了十几年,所以价格就低了。既然如此,单片机的功能肯定不强,干吗要学它呢?话不能这样说,实际工作中并不是任何需要计算机的场合都要求计算机有很高的性能,一个控制电冰箱温度的计算机难道要用PIII?应用的关键是看是否够用,是否有很好的性能价格比。所以8051出来十多年,依然没有被淘汰,还在不断的发展中。 2、MCS51单片机和8051、8031、89C51等的关系我们平常老是讲8051,又有什么8031,现在又有89C51,它们之间究竟是什么关系? MCS51是指由美国INTEL公司(对了,就是大名鼎鼎的INTEL)生产的一系列单片机的总称,这一系列单片机包括了好些品种,如8031,8051,8751,8032,8052,8752等,其中8051是最早最典型的产品,该系列其它单片机都是在8051的基础上进行功能的增、减、改变而来的,所以人们习惯于用8051来称呼MCS51系列单片机,而8031是前些年在我国最流行的单片机,所以很多场合会看到8031的名称。INTEL 公司将MCS51的核心技术授权给了很多其它公司,所以有很多公司在做以8051为核心的单片机,当然,功能或多或少有些改变,以满足不同的需求,其中89C51就是这几年在我国非常流行的单片机,它是由美国ATMEL 公司开发生产的。以后我们将用89C51来完成一系列的实验。 一、单片机的外部结构 拿到一块芯片,想要使用它,首先必须要知道怎样连线,我们用的一块称之为89C51的芯片,下面我们就看一下如何给它连线。1、电源:这当然是必不可少的了。单片机使用的是5V电源,其中正极接40引脚,负极(地)接20引脚。2、振蒎电路:单片机是一种时序电路,必须提供脉冲信号才能正常工作,在单片机内部已集成了振荡器,使用晶体振荡器,接18、19脚。只要买来晶振,电容,连上就可以了,按图1接上即可。3、复位引脚:按图1中画法连好,至于复位是何含义及为何需要复要复位,在单片机功能中介绍。4、EA引脚:EA引脚接到正电源端。至此,一个单片机就接好,通上电,单片机就开始工作了。 我们的第一个任务是要用单片机点亮一只发光二极管LED,显然,这个LED必须要和单片机的某个引脚相连,否则单片机就没法控制它了,那么和哪个引脚相连呢?单片机上除了刚才用掉的5个引脚,还有35个,我们将这个LED和1脚相连。(见图1,其中R1是限流电阻) 按照这个图的接法,当1脚是高电平时,LED不亮,只有1脚是低电平时,LED才发亮。因此要1脚我们要能够控制,也就是说,我们要能够让1引脚按要求变为高或低电平。即然我们要控制1脚,就得给它起个名字,总不能就叫它一脚吧?叫它什么名字呢?设计51芯片的INTEL公司已经起好了,就叫它P1.0,这是规定,不可以由我们来更改。

单片机C语言编程实例

单片机C语言编程实例 前言 INTEL公司的MCS-51单片机是目前在我国应用得最广泛的单片机之一.随着 单片机应用技术的不断发展,许多公司纷纷以51单片机为内核,开发出与其兼容的 多种芯片,从而扩充和扩展了其品种和应用领域。 C语言已成为当前举世公认的高效简洁而又贴近硬件的编程语言之—。将C语言向单片机上的移植,始于20世纪80年代的中后期。经过十几年的努力,C语言终于成为专业化单片机上的实用高级语言。用C语言编写的8051单片机的软件,可以大大缩短开发周期,且明显地增加软件的可读性,便于改进和扩充,从而研制出规模更大、性能更完善的系统。因此,不管是对于新进入这一领域的开发者来说,还是对于有多年单片机开发经验的人来说,学习单片机的C语言编程技术都是十分必要的。. C语言是具有结构化.模块化编译的通用计算机语言,是国际上应用最广.最多的计算语言之一。C51是在通用C语言的基础上开发出的专门用于51系列单片机编程的C语言.与汇编语言相比,C51在功能上.结构上以及可读性.可移植性.可维护性等方面都有非常明显的优势。目前 最先进、功能最强大、国内用户最多的C51编译器是Keil Soft ware公司推出的KeilC51。第 一章单片机C语言入门 1.1建立您的第一个C项目 使用C语言肯定要使用到C编译器,以便把写好的C程序编译为机器码, 这样单片机才能执行编写好的程序。KEIL uVISION2是众多单片机应用开发软 件中优秀的软件之一,它支持众多不同公司的MCS51架构的芯片,它集编辑, 编译,仿真等于一体,同时还支持PLM、汇编和C语言的程序设计,它的界面 和常用的微软VC++的界面相似,界面友好,易学易用,在调试程序,软件仿真 方面也有很强大的功能。因此很多开发51应用的工程师或普通的单片机爱好者,都对它十分喜欢。 以上简单介绍了KEIL51软件,要使用KEIL51软件,必需先要安装它。KEIL51是一个商业的软件,对于我们这些普通爱好者可以到KEIL中国代理周 立功公司的网站上下载一份能编译2K的DEMO版软件,基本可以满足一般的个

51单片机C语言入门教程详细解说

单片机c语言入门 相信很多爱好电子的朋友,对单片机这个词应该都不会陌生了吧。不过有些朋友可能只听说他叫单片机,他的全称是什么也许并不太清楚, 更不用说他的英文全称和简称了。单片机是一块在集成电路芯片上集成了一台有一定规模的微型计算机。简称为:单片微型计算机或单片机 (Single Chip Computer)。单片机的应用到处可见,应用领域广泛,主要应用在智能仪表、实时控制、通信、家电等方面。不过这一切都没 什么关系,因为我(当然也包括任何人)都是从不知道转变成知道的,再转变成精通的。现在我只想把我学习单片机的经历,详细地讲叙给大 家听听,可能有些大虾会笑话我,想:那么简单的东西还在这里卖弄。但是你错了,我只是把我个人学习的经历讲述一遍而已,仅仅对那些想 学习单片机,但又找不到好方法或者途径的朋友,提供一个帮助,使他们在学习过程中,尽量少走些弯路而已! 首先,你必须有学习单片机的热情,不是说今天去图书馆看了一个下午关于单片机的书,而明天玩上半天,后天就不知道那个本书在讲什 么东西了。还是先说说我吧,我从大二的第一个学期期末的时候才开始接触单片机,但在这之前,正如上面所说的:我知道有种芯片叫单片机, 但是具体长成什么样子,却一点也不知道!看到这里很多朋友一定会忍不住发笑。嘿嘿,你可千万别笑,有些大四毕业的人也同样不知道单片 机长成什么样子呢!而我对单片机的痴迷更是常人所不能想象的地步,大二的期末考试,我全放弃了复习,每当室友拿着书在埋头复习的时候, 我却捧着自己从图书馆借的单片机书在那看,虽然有很多不懂,但是我还是坚持了下来,当时我就想过,为了单片机值不值得我这样去付出, 或许这也是在一些三流学校的好处吧,考试挂科后,明年开学交上几十元一门的补考费,应该大部分都能过了。于是,我横下一条心,坚持看 我的单片机书和资料。 当你明白了单片机是这么一回事的时候,显而易见的问题出来了:我要选择那种语言为单片机编写程序呢?这个问题,困扰了我好久。具 体选择C51还是A51呢?汇编在我们大二之前并没有开过课,虽然看着人家的讲解,很容易明白单片机的每一时刻的具体工作情况,但是一合上 书或者资料,自己却什么也不知道了,根本不用说自己写程序了。于是,我最终还是决定学C51,毕竟C51和我们课上讲的C语言,有些类似, 编程的思想可以说是相通的。而且C51还有更大的优点就是编写大程序时的优越性更不言而喻,当然在那时,我并没有想的那么深远,C51的特 点,还是在后来的实践过程中,渐渐体会到的!朋友如果你选择了C51,那么请继续往下看,如果你选择了A51,那么你可以不要看了!因为下面讲 的全是C方面的,完全在浪费你的时间! 呵呵^_^ 第二,既然你想学好单片机,你必须得舍得花钱,如果不买些芯片回来自己动手焊焊拆拆的(但是在后期会介绍给大家一个很好用的硬件 仿真软件,并不需要你用实验板和仿真器了,直接在你的PC上完成,但是软件毕竟是软件,从某个特定的意义上来说是并不能代替硬件的),即使

51单片机经典教程

单片机经典教程 目录
第一课 第二课 第三课 第四课 第五课 第六课 第七课 第八课 第九课 第十课 第十一课 第十二课 第十三课 第十四课 第十五课 第十六课 第十七课 第十八课 第十九课 第二十课 第二十一课 第二十二课 第二十三课 第二十四课 单片机的概述 单片机的硬件结构与开发过程 单片机的内部结构 一 半导体存储器 单片机的内部结构 二 工作寄存器 单片机的内部结构 三 时序与时钟 单片机的内部结构 四 并行口 单片机的内部结构 五 数据与地址 单片机的内部结构 六 特殊功能存储器 单片机的工作方式 单片机的寻址 单片机的指令 一 数据传递类指令 单片机的指令 二 数据传递类指令 单片机的指令 三 算术逻辑运算类指令 单片机的指令 四 控制转移类指令 单片机的指令 五 位及位操作指令 单片机的程序设计方法 单片机的定时 计数器 单片机的中断系统 单片机的定时/中断实验 一 单片机的定时/中断实验 二 键盘接口及编程方法 一 独立式按键 键盘接口及编程方法 二 矩阵式按键 单片机显示器接口及编程方法 数码管的静态扫描与编程方法 6 9 11 15 18 20 24 27 29 32 35 38 42 47 51 55 64 68 73 78 81 87 90 94
4

第一课 单片机的概述
因为我们的主要课程是单片机的应用 本来不想讲解单片机的历史与发展 这话说现状更确切 些 但为了兼顾大多数朋友 我还是简单的介绍一下这方面的相关知识 一 单片机的由来 单片机 专业名称—Micro Controller Unit(微控制器件) 它是由大名鼎鼎的 INTEL 公司发明的 最早的系列是 MCS-48 后来有了 MCS-51 我们经常说的 51 系列单片机就是 MCS-51 micro controller system 它是一种 8 位的单片机 8 位是什么意思 我们以后再讲 后来 INTEL 公司把它的核心技术转让给了世界上很多的小公司 不过 再小也有几个亿的销售/ 年哦 所以世界上就有许多公司生产 51 系列兼容单片机 比如飞利浦的 87LPC 系列 华邦的 W78 系列 达拉斯的 DS87 系列 现代的 GSM97 系列等等 目前在我国比较流行的就是美国 ATMEL 公司的 89C51 它是一种带 Flash ROM 的单片机 至于什么是 Flash ROM 我在这儿先不作介绍 等以后大家学到相 关的知识时自然就会明白 我们的讲座就是以该型号的单片机来作实验的 讲到这里 也许有的人会 问 我平时在各种书上看到全是讲解 8031 8051 等型号的单片机 它们又有什么不同呢 其实它们同 属于一个系列 只是 89C51 的单片机更新型一点(事实上,89C51 目前正在用 89S51 代替 我们的实验系 统采用就是 89S52 的 兼容 89C52) 这里随便说一下 目前国内的单片机教材都是以 8051 为蓝本的 尽管其内核也是 51 系列的 但毕竟 8051 的单片机已经属于淘汰产品 在市场上也很少见到了 所以由 此感叹 国内的高等教育是如此的跟不上时代的发展需要 这话可能会引起很多人的不满,所以大家别 说是我讲的哦 二 主要单片机的分类 接着上面的话题 再给大家介绍一下我们经常在各种刊物上看到的 AVR 系列和 PIC 系列单片机是 怎么回事 以便让大家对单片机的发展有一个较全面的认识 在没有学习单片机之前 这是一个令很多 初学者非常困惑的问题 这么多的单片机我该先学哪一种呢 AVR 系列单片机也是 ATMEL 公司生产的一种 8 位单片机 它采用的是一种叫 RISC 精简指令集单 片机 的结构 所以它的技术和 51 系列有所不同 开发设备也和 51 系列是不通用的 它的一条指令的 运行速度可以达到纳秒级 即每秒 1000000000 次 是 8 位单片机中的高端产品 由于它的出色性能 目前应用范围越来越广 大有取代 51 系列的趋势 所以学完了 51 系列的 看来必须学会 AVR 的才行 可叹知识爆炸 人生苦短 说完了 AVR 的 再来说说另一种--PIC 系列单片机 它是美国 MICROCHIP 公 司 唉 又是老美 叫微芯公司的生产的另一种 8 位单片机 它采用的也是 RISC 的指令集 它的指令 系统和开发工具与 51 系列更是不同 但由于它的低价格和出色性能 目前国内使用的人越来越多 国 内也有很多的公司在推广它 不过它的影响力远没有 51 系列的大 所以作为初学者 51 系列当然是首 选 以上几种只是比较多见的系列 其实世界上还有许多的公司生产各种各样的单片机 比如 MOTOROLA 的 MC68H 系列 老牌的单片机 TI 的 MSP430C 系列 极低功耗的单片机 德国的西门子 SIEMENS 等等 它们都有各自的结构体系 并不与 51 系列兼容 为了不搞大家的脑筋 这里就不介绍了 等大 家入了门以后自己去研究它吧 我们还是回来了解一下 51 系列单片机到底是个什么东西 它有那些部 分组成 请接着往下看 三 单片机的结构及组成 单片机到底是一种什么 DD 它究竟能做什么呢 其实它就是一种能进行数学和逻辑运算 根据不 同使用对象完成不同控制任务的面向控制而设计的集成电路 此话好象有点绕口 没关系 大家都应该 知道我们经常使用的电脑吧 在电脑上 我们可以用不同的软件在相同的硬件上实现不同的工作 比如 我们用 WORD 可以打字 用 PROTEL 可以设计图纸等等 单片机其实也是如此 同样的芯片可以根据我们 不同的要求做出截然不同的产品 只不过电脑是面向应用的 而单片机是面向控制的 比如控制一个指
6

c51单片机实例下载大全

单片机资料教程下载,省去找资料的麻烦,只供学习参考用,下载24内删掉,祝大家学习进步 单片机点阵学习资料 https://www.wendangku.net/doc/c18968169.html,/thread-1703-1-1.html 手把手教你学单片机--教程视频 https://www.wendangku.net/doc/c18968169.html,/thread-1688-1-1.html 力天把手教你学单片机视频教程 https://www.wendangku.net/doc/c18968169.html,/thread-1689-1-1.html 谱中单片机开发板例程 https://www.wendangku.net/doc/c18968169.html,/thread-1683-1-2.html 初学单片机的30,硬件简单对初学者有帮助 https://www.wendangku.net/doc/c18968169.html,/thread-1962-1-1.html 用单片机制作的MP3 https://www.wendangku.net/doc/c18968169.html,/thread-1701-1-2.html 51单片机应用开发大全所含100个范例代码及电路图 https://www.wendangku.net/doc/c18968169.html,/thread-1820-1-1.html 【含28个单片机实例流程图】 https://www.wendangku.net/doc/c18968169.html,/thread-1959-1-2.html 谱中单片机程序烧录工具STC https://www.wendangku.net/doc/c18968169.html,/thread-1682-1-2.html 《单片机技术》32讲

https://www.wendangku.net/doc/c18968169.html,/thread-1693-1-1.html 51单片机c语言100例教程 https://www.wendangku.net/doc/c18968169.html,/thread-1700-1-1.html 单片机超级精华包 https://www.wendangku.net/doc/c18968169.html,/thread-1687-1-1.html 新手学的多功能电子钟 https://www.wendangku.net/doc/c18968169.html,/thread-1679-1-1.html 十天学会单片机和c语言视频教程 https://www.wendangku.net/doc/c18968169.html,/thread-1692-1-1.html C语言函数库速查手册 https://www.wendangku.net/doc/c18968169.html,/thread-1696-1-1.html 历史上最全的KEIL中文学习资料 https://www.wendangku.net/doc/c18968169.html,/thread-1729-1-2.html 单片机c语言程序设计实训100例--基于AVR+PROTUES https://www.wendangku.net/doc/c18968169.html,/thread-1695-1-2.html (有电路图和程序) https://www.wendangku.net/doc/c18968169.html,/thread-1965-1-1.html 关于单片机抗干扰的资料 https://www.wendangku.net/doc/c18968169.html,/thread-1961-1-1.html 单片机矩阵扫描键盘程序 https://www.wendangku.net/doc/c18968169.html,/thread-1723-1-1.html 共享通过串口在线调试51单片机的专业版培训资料

51单片机基础知识试题题库(含答案)

第二章习题参考答案 一、填空题: 1、当MCS-51引脚ALE有效时,表示从P0口稳定地送出了低8位地址。 2、MCS-51的堆栈是软件填写堆栈指针临时在片内数据存储器内开辟的区域。 3、当使用8751且EA=1,程序存储器地址小于1000H 时,访问的是片内ROM。 4、MCS-51系统中,当PSEN信号有效时,表示CPU要从外部程序存储器读取信息。 5、MCS-51有4组工作寄存器,它们的地址范围是 00H~1FH 。 6、MCS-51片内20H~2FH范围内的数据存储器,既可以字节寻址又可以位寻址。 7、PSW中RS1 RS0=10时,R2的地址为 12H 。 8、PSW中RS1 RS0=11时,R2的地址为 1AH 。 9、单片机系统复位后,(PSW)=00H,因此片内RAM寄存区的当前寄存器是第 0 组,8个寄存器的单元地址为 00H ~ 07H 。 10、PC复位后为 0000H 。 11、一个机器周期= 12 个振荡周期= 6 个时钟周期。 12、PC的内容为将要执行的的指令地址。 13、在MCS-51单片机中,如果采用6MHz晶振,1个机器周期为 2us 。 14、内部RAM中,位地址为30H的位,该位所在字节的字节地址为 26H 。 15、若A中的内容为63H,那么,P标志位的值为 0 。 16、8051单片机复位后,R4所对应的存储单元的地址为 04H ,因上电时PSW= 00H 。这时当前的工作寄存器区是第 0 工作寄存器区。 17、使用8031芯片时,需将/EA引脚接低电平,因为其片内无程序存储器。 18、片内RAM低128个单元划分为哪3个主要部分:工作寄存器区、位寻址区 和用户RAM区。 19、通过堆栈操作实现子程序调用,首先就要把 PC 的内容入栈,以进行断点保护。调用返回时,再进行出栈保护,把保护的断点送回到 PC 。 20、MCS-51单片机程序存储器的寻址范围是由程序计数器PC的位数所决定的,因为MCS -51的PC是16位的,因此其寻址的范围为 64 KB。 21、MCS-51单片机片内RAM的寄存器共有 32 个单元,分为 4 组寄存器,每组 8 个单元,以R0~R7作为寄存器名称。 22、但单片机的型号为8031/8032时,其芯片引线EA一定要接低电平。 二、选择题: 1、当MCS-51复位时,下面说法正确的是( A )。 A、 PC=0000H B、 SP=00H C、 SBUF=00H D、 P0=00H 2、PSW=18H时,则当前工作寄存器是( D )。 A、 0组 B、 1组 C、 2组 D、 3组 3、MCS-51上电复位后,SP的内容应是( B )。 A、 00H B、 07H C、 60H D、 70H 4、当ALE信号有效时,表示( B )。 A、从ROM中读取数据 B、从P0口可靠地送出低8位地址 C、从P0口送出数据 D、从RAM中读取数据 5、MCS—51单片机的CPU主要的组成部分为( A )。 A、运算器、控制器 B、加法器、寄存器 C、运算器、加法器 D、运算器、译码器

51单片机C语言入门实例2

13.动态数码显示技术 1.实验任务 如图4.13.1所示,P0端口接动态数码管的字形码笔段,P2端口接动态数码管的数位选择端,P1.7接一个开关,当开关接高电平时,显示“12345”字样;当开关接低电平时,显示“HELLO”字样。 2.电路原理图 图4.13.1 3.系统板上硬件连线 (1.把“单片机系统”区域中的P0.0/AD0-P0.7/AD7用8芯排线连接到“动态数码显示”区域中的a-h端口上;

(2.把“单片机系统”区域中的P2.0/A8-P2.7/A15用8芯排线连接到“动态数码显示”区域中的S1-S8端口上; (3.把“单片机系统”区域中的P1.7端口用导线连接到“独立式键盘”区域中的SP1端口上; 4.程序设计内容 (1.动态扫描方法 动态接口采用各数码管循环轮流显示的方法,当循环显示频率较高时,利用人眼的暂留特性,看不出闪烁显示现象,这种显示需要一个接口完成字形码的输出(字形选择),另一接口完成各数码管的轮流点亮(数位选择)。 (2.在进行数码显示的时候,要对显示单元开辟8个显示缓冲区,每个显示缓冲区装有显示的不同数据即可。 (3.对于显示的字形码数据我们采用查表方法来完成。 5.程序框图 图4.13.2

6.汇编源程序 ORG 00H START: JB P1.7,DIR1 MOV DPTR,#TABLE1 SJMP DIR DIR1: MOV DPTR,#TABLE2 DIR: MOV R0,#00H MOV R1,#01H NEXT: MOV A,R0 MOVC A,@A+DPTR MOV P0,A MOV A,R1 MOV P2,A LCALL DAY INC R0 RL A MOV R1,A CJNE R1,#0DFH,NEXT SJMP START DAY: MOV R6,#4 D1: MOV R7,#248 DJNZ R7,$ DJNZ R6,D1 RET TABLE1: DB 06H,5BH,4FH,66H,6DH TABLE2: DB 78H,79H,38H,38H,3FH END 7. C语言源程序 #include unsigned char code table1[]={0x06,0x5b,0x4f,0x66,0x6d}; unsigned char code table2[]={0x78,0x79,0x38,0x38,0x3f}; unsigned char i; unsigned char a,b; unsigned char temp; void main(void) { while(1) { temp=0xfe; for(i=0;i<5;i++) { if(P1_7==1)

51单片机及C语言入门教程

51单片机 及C语言入门教程 注:排成16开版式,是为了方便自已打印阅读。请不要用于非法用途。 2007.12.20

51单片机及C语言入门教程 第一课 建立您的第一个C项目 使用C语言肯定要使用到C编译器,以便把写好的C程序编译为机器码,这样单片机才能执行编写好的程序。KEIL uVISION2是众多单片机应用开发软件中优秀的软件之一,它支持众多不同公司的MCS51架构的芯片,它集编辑,编译,仿真等于一体,同时还支持,PLM,汇编和C语言的程序设计,它的界面和常用的微软VC++的界面相似,界面友好,易学易用,在调试程序,软件仿真方面也有很强大的功能。因此很多开发51应用的工程师或普通的单片机爱好者,都对它十分喜欢。 以上简单介绍了KEIL51软件,要使用KEIL51软件,必需先要安装它。KEIL51是一个商业的软件,对于我们这些普通爱好者可以到KEIL中国代理周立功公司的网站上下载一份能编译2K的DEMO版软件,基本可以满足一般的个人学习和小型应用的开发。(安装的方法和普通软件相当这里就不做介绍了) 安装好后,你是不是迫不及待的想建立自己的第一个C程序项目呢?下面就让我们一起来建立一个小程序项目吧。或许你手中还没有一块实验板,甚至没有一块单片机,不过没有关系我们可以通过KEIL软件仿真看到程序运行的结果。 首先当然是运行KEIL51软件。怎么打开?噢,天!那你要从头学电脑了。呵呵,开个玩笑,这个问题我想读者们也不会提的了:P。运行几秒后,出现如图1-1的屏幕。 图1-1启动时的屏幕

接着按下面的步骤建立您的第一个项目: (1)点击Project菜单,选择弹出的下拉式菜单中的New Project,如图1-2。接着弹出一个标准Windows文件对话窗口,如图1-3,这个东东想必大家是见了N次的了,用法技巧也不是这里要说的,以后的章节中出现类似情况将不再说明。在"文件名"中输入您的第一个C程序项目名称,这里我们用"test",这是笔者惯用的名称,大家不必照搬就是了,只要符合Windows文件规则的文件名都行。"保存"后的文件扩展名为uv2,这是KEIL uVision2项目文件扩展名,以后我们可以直接点击此文件以打开先前做的项目。 图1-2New Project菜单 图1-3文件窗口 (2)选择所要的单片机,这里我们选择常用的Ateml公司的AT89C51。此时屏幕如图1-4

云龙电子-51单片机视频教程简介

小王老师51单片机视频教程简介本视频教程是针对YL-51单片机开发板讲的配套DVD视频教程目录: 讲次内容细节 第一课如何学好单片机单片机能做什么,学习单片机需要什么,如何学好单片机技术。 第二课预备知识点亮一个发光管认识单片机由来及内部结构,单片机最小工作单元组成;单片机开发软件操作:KEIL软件开发环境认识、单片机烧录软件使用。 第三课预备知识 C51基础知识及流水灯设计简单延时程序、子程序调用、、流水灯同时蜂鸣器响、如何驱动蜂鸣器,及如何驱动继电器,集电极开路的概念及应用。 第四课数码管显示的原理,数码管的静态显示共阳、共阴数码管显示原理、带参数子程序设计。 第五课中断和定时器原理定时器工作方式介绍、重点讲述工作方式2、中断概念及中断函数写法、定时器中断应用 第六课数码管的动态显示原理及应用实现动态扫描概念及定时器、中断加深 第七课按键学习:独立按键和矩阵按键键盘检测、消抖、键盘编码、带返回值函数写法及应用 第八课数模转换(DA)工作原理及应用数字电压与模拟电压的关系、如何使用DAC0832的实成DA转换 第九课模数转换(AD)工作原理及应用模拟电压与数字电压的关系,如何使用ADC0804的实成AD转换 第十课1602液晶显示原理及实现最简单液晶工作原理、如何开始对一个没有任何概念的芯片开始单片机的操作 第十一课串口原理及应用串口通讯工作方式、重点讲述最常用的10位数据通讯、波特率概念及如何根据波特率计算定时器初值 第十二课IIC总线原理和模块化编程方法 IIC总线工作原理、目前非常通用的一种通信机制; 项目开发模块化编程方法。 第十三课红外通信原理及应用红外通信是目前应用最为广泛的通信和遥控手段。在本课程中以红外遥控为代表,具体讲解红外通信的具体过程。

51单片机C语言学习知识编程基础学习知识及其实例

基础知识:51单片机编程基础 第一节:单数码管按键显示 第二节:双数码管可调秒表 第三节:十字路口交通灯 第四节:数码管驱动 第五节:键盘驱动 第六节:低频频率计 第七节:电子表 第八节:串行口应用 基础知识:51单片机编程基础 单片机的外部结构: 1. DIP40双列直插; 2. P0,P1,P2,P3四个8位准双向I/O引脚;(作为I/O输入时,要先输出高电平) 3. 电源VCC(PIN40)和地线GND(PIN20); 4. 高电平复位RESET(PIN9);(10uF电容接VCC与RESET,即可实现上电复位) 5. 内置振荡电路,外部只要接晶体至X1(PIN18)和X0(PIN19);(频率为主频的12倍) 6. 程序配置EA(PIN31)接高电平VCC;(运行单片机内部ROM中的程序) 7. P3支持第二功能:RXD、TXD、INT0、INT1、T0、T1 单片机内部I/O部件:(所为学习单片机,实际上就是编程控制以下I/O部件,完成指定任务) 1. 四个8位通用I/O端口,对应引脚P0、P1、P2和P3; 2. 两个16位定时计数器;(TMOD,TCON,TL0,TH0,TL1,TH1) 3. 一个串行通信接口;(SCON,SBUF) 4. 一个中断控制器;(IE,IP) 针对AT89C52单片机,头文件AT89x52.h给出了SFR特殊功能寄存器所有端口的定义。 C语言编程基础: 1. 十六进制表示字节0x5a:二进制为01011010B;0x6E为01101110。 2. 如果将一个16位二进数赋给一个8位的字节变量,则自动截断为低8位,而丢掉高8位。 3. ++var表示对变量var先增一;var—表示对变量后减一。 4. x |= 0x0f;表示为x = x | 0x0f; 5. TMOD = ( TMOD & 0xf0 ) | 0x05;表示给变量TMOD的低四位赋值0x5,而不改变TMOD的高 四位。 6. While( 1 ); 表示无限执行该语句,即死循环。语句后的分号表示空循环体,也就是{;}

(1小时学会C语言51单片机)C语言入门教程

相信很多爱好电子的朋友,对单片机这个词应该都不会陌生了吧。不过有些朋友可能只听说他叫单片机,他的全称是什么也许并不太清楚, 更不用说他的英文全称和简称了。单片机是一块在集成电路芯片上集成了一台有一定规模的微型计算机。简称为:单片微型计算机或单片机 (Single Chip Computer)。单片机的应用到处可见,应用领域广泛,主要应用在智能仪表、实时控制、通信、家电等方面。不过这一切都没什么关系,因为我(当然也包括任何人)都是从不知道转变成知道的,再转变成精通的。现在我只想把我学习单片机的经历,详细地讲叙给大家听听,可能有些大虾会笑话我,想:那么简单的东西还在这里卖弄。但是你错了,我只是把我个人学习的经历讲述一遍而已,仅仅对那些想学习单片机,但又找不到好方法或者途径的朋友,提供一个帮助,使他们在学习过程中,尽量少走些弯路而已! 首先,你必须有学习单片机的热情,不是说今天去图书馆看了一个下午关于单片机的书,而明天玩上半天,后天就不知道那个本书在讲什 么东西了。还是先说说我吧,我从大二的第一个学期期末的时候才开始接触单片机,但在这之前,正如上面所说的:我知道有种芯片叫单片机, 但是具体长成什么样子,却一点也不知道!看到这里很多朋友一定会忍不住发笑。嘿嘿,你可千万别笑,有些大四毕业的人也同样不知道单片 机长成什么样子呢!而我对单片机的痴迷更是常人所不能想象的地步,大二的期末考试,我全放弃了复习,每当室友拿着书在埋头复习的时候,我却捧着自己从图书馆借的单片机书在那看,虽然有很多不懂,但是我还是坚持了下来,当时我就想过,为了单片机值不值得我这样去付出, 或许这也是在一些三流学校的好处吧,考试挂科后,明年开学交上几十元一门的补考费,应该大部分都能过了。于是,我横下一条心,坚持看 我的单片机书和资料。当你明白了单片机是这么一回事的时候,显而易见的问题出来了:我要选择那种语言为单片机编写程序呢?这个问题,困扰了我好久。具 体选择C51 还是A51 呢?汇编在我们大二之前并没有开过课,虽然看着人家的讲解,很容易明白单片机的每一时刻的具体工作情况,但是一合上书或者资料,自己却什么也不知道了,根本不用说自己写程序了。于是,我最终还是决定学 C51,毕竟C51和我们课上讲的C语言,有些类似,编程的思想可以说是相通的。而且C51 还有更大的优点就是编写大程序时的优越性更不言而喻,当然在那时,我并没有想的那么深远,C51 的特 点,还是在后来的实践过程中,渐渐体会到的!朋友如果你选择了C51,那么请继续往下看, 如果你选择了A51,那么你可以不要看了!因为下面讲的全是C方面的,完全在浪费你的时间!呵呵A_A 第二,既然你想学好单片机,你必须得舍得花钱,如果不买些芯片回来自己动手焊焊拆 拆的(但是在后期会介绍给大家一个很好用的硬件 仿真软件,并不需要你用实验板和仿真器了,直接在你的PC上完成,但是软件毕竟是软件,从某 个特定的意义上来说是并不能代替硬件的),即使 你每天捧着本书,把那本书翻烂,也永远学不会单片机的!刚接触单片机的朋友,看了资料,一定会对以下几个词见的比较多,但是具体的概 念还是比较模糊,现作如下说明: (1 )编程器编程器是用来烧单片机芯片的,是把HEX 或者BIN 文件烧到单片机ROM 里的,供单片机运行的。 (2)实验板实验板是专为初学者根据某些要求而特做的板,一般上面就有一个单片机的最小系统,使用者只需写好程序,烧好芯片,放 到上面加以验证的这么一个工具。有了实验板,对与初学者来说,省去了焊个最小系统的麻烦。但是对于电子开发人员来说,作用并不是很大

51单片机C语言入门实例

1.闪烁灯 1.实验任务 如图4.1.1所示:在P1.0端口上接一个发光二极管L1,使L1在不停地一亮一灭,一亮一灭的时间间隔为0.2秒。 2.电路原理图 图4.1.1 3.系统板上硬件连线 把“单片机系统”区域中的P1.0端口用导线连接到“八路发光二极管指示模块”区域中的L1端口上。 4.程序设计内容 (1).延时程序的设计方法 作为单片机的指令的执行的时间是很短,数量大微秒级,因此,我们要 求的闪烁时间间隔为0.2秒,相对于微秒来说,相差太大,所以我们在 执行某一指令时,插入延时程序,来达到我们的要求,但这样的延时程 序是如何设计呢?下面具体介绍其原理: 如图4.1.1所示的石英晶体为12MHz,因此,1个机器周期为1微秒

机器周期微秒 MOV R6,#20 2个 2 D1: MOV R7,#248 2个 2 2+2×248=498 20× DJNZ R7,$ 2个2×248(498 DJNZ R6,D1 2个2×20=40 10002 因此,上面的延时程序时间为10.002ms。 由以上可知,当R6=10、R7=248时,延时5ms,R6=20、R7=248时, 延时10ms,以此为基本的计时单位。如本实验要求0.2秒=200ms, 10ms×R5=200ms,则R5=20,延时子程序如下: DELAY: MOV R5,#20 D1: MOV R6,#20 D2: MOV R7,#248 DJNZ R7,$ DJNZ R6,D2 DJNZ R5,D1 RET (2).输出控制 如图1所示,当P1.0端口输出高电平,即P1.0=1时,根据发光二极管 的单向导电性可知,这时发光二极管L1熄灭;当P1.0端口输出低电平,即P1.0=0时,发光二极管L1亮;我们可以使用SETB P1.0指令使P1.0 端口输出高电平,使用CLR P1.0指令使P1.0端口输出低电平。 5.程序框图 如图4.1.2所示

51单片机教程

目录 上册
第一课 第二课 第三课 第四课 第五课 第六课 第七课 第八课 第九课 第十课 第十一课 第十二课 第十三课 第十四课 第十五课 第十六课 第十七课 第十八课 第十九课 第二十课 第二十一课 第二十二课 第二十三课 第二十四课 单片机的概述 单片机的硬件结构与开发过程 单片机的内部结构 一 半导体存储器 单片机的内部结构 二 工作寄存器 单片机的内部结构 三 时序与时钟 单片机的内部结构 四 并行口 单片机的内部结构 五 数据与地址 单片机的内部结构 六 特殊功能存储器 单片机的工作方式 单片机的寻址 单片机的指令 一 数据传递类指令 单片机的指令 二 数据传递类指令 单片机的指令 三 算术逻辑运算类指令 单片机的指令 四 控制转移类指令 单片机的指令 五 位及位操作指令 单片机的程序设计方法 单片机的定时 计数器 单片机的中断系统 单片机的定时/中断实验 一 单片机的定时/中断实验 二 键盘接口及编程方法 一 独立式按键 键盘接口及编程方法 二 矩阵式按键 单片机显示器接口及编程方法 数码管的静态扫描与编程方法 6 9 11 15 18 20 24 27 29 32 35 38 42 47 51 55 64 68 73 78 81 87 90 94
4

下册
第二十五课 第二十六课 第二十七课 第二十八课 第二十九课 第三十课 第三十一课 第三十二课 第三十三课 第三十四课 第三十五课 第三十六课 第三十七课 第三十八课 第三十八课 第三十九课 第四十课 第四十一课 第四十二课 第四十三课 第四十四课 第四十五课 第四十六课 第四十七课 第四十八课 程序存储器的扩展及编程方法 一 程序存储器的扩展及编程方法 二 数据存储器的扩展及编程方法 一 数据存储器的扩展及编程方法 二 I2C 总线原理及编程方法 串行接口的原理及编程方法 一 串行接口的原理及编程方法 二 多机通讯的原理及编程方法 一 多机通讯的原理及编程方法 二 定时/计数器的扩展及编程方法 中断的扩展及编程方法 D/A 转换的原理及编程方法 一 D/A 转换的原理及编程方法 二 A/D 转换的原理及编程方法 一 A/D 转换的原理及编程方法 二 看门狗原理和单片机的可靠性设计 键盘的扩展及编程方法 显示器的扩展及编程方法 单片机专用键显芯片的设计方法及编程原理 实时时钟的原理及编程方法 一 实时时钟的原理及编程方法 二 单片机汉字显示系统的原理 单片机汉字点阵屏的实验 液晶显示器的原理和编程方法 一 液晶显示器的原理和编程方法 二 2 6 8 12 16 20 25 28 32 36 41 45 50 54 58 62 66 70 75 79 83 86 91 94 96
5

51单片机C语言编程基础及实例

衿莆蚈蝿膈莆莈薂膄 基础知识:51单片机编程基础 第一节:单数码管按键显示 第二节:双数码管可调秒表XZylm。 第三节:十字路口交通灯 第四节:数码管驱动 第五节:键盘驱动ogyRz。 第六节:低频频率计 第七节:电子表 第八节:串行口应用ry9kW。 基础知识:51单片机编程基础 单片机得外部结构: 1. DIP40双列直插; 2. P0,P1,P2,P3四个8位准双向I/O引脚;(作为I/O输入时,要先输出高电平) 3. 电源VCC(PIN40)与地线GND(PIN20); 4. 高电平复位RESET(PIN9);(10uF电容接VCC与RESET,即可实现上电复位) 5. 内置振荡电路,外部只要接晶体至X1(PIN18)与X0(PIN19);(频率为主频得12倍) 6. 程序配置EA(PIN31)接高电平VCC;(运行单片机内部ROM中得程序) 7. P3支持第二功能:RXD、TXD、INT0、INT1、T0、T1 单片机内部I/O部件:(所为学习单片机,实际上就就是编程控制以下I/O部件,完成指定任务) 1. 四个8位通用I/O端口,对应引脚P0、P1、P2与P3; 2. 两个16位定时计数器;(TMOD,TCON,TL0,TH0,TL1,TH1) 3. 一个串行通信接口;(SCON,SBUF) 4. 一个中断控制器;(IE,IP) 针对AT89C52单片机,头文件AT89x52、h给出了SFR特殊功能寄存器所有端口得定义。C语言编程基础:

1. 十六进制表示字节0x5a:二进制为01011010B;0x6E为01101110。 2. 如果将一个16位二进数赋给一个8位得字节变量,则自动截断为低8位,而丢掉高8位。 3. ++var表示对变量var先增一;var—表示对变量后减一。 4. x |= 0x0f;表示为x = x | 0x0f; 5.TMOD = ( TMOD & 0xf0 ) | 0x05;表示给变量TMOD得低四位赋值0x5,而不改变TMOD得高四 位。tQCvI。 6. While( 1 ); 表示无限执行该语句,即死循环。语句后得分号表示空循环体,也就就是{;} 在某引脚输出方波编程方法:(比如P3、1引脚) 代码

相关文档
相关文档 最新文档