1 / 52
文档名称:

51资料.doc

格式:doc   页数:52页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

51资料.doc

上传人:ffy51856fy 2015/10/5 文件大小:0 KB

下载得到文件列表

51资料.doc

相关文档

文档介绍

文档介绍:单片机教程
[教程] [单片机教程]第一课:点亮一盏灯
第一课点亮一盏灯任务:把实验板上的任一盏灯点亮。目的:入门第一课,了解单片机基本工作原理,对指令控制硬件有初步认识。今天我们开始51单片机学****的第一课,以后还会陆续学****其它内容,今天我们先从最简单的学起,为了能更直观地了解到指令对硬件的控制,我们会采用汇编语言进行讲解,以使初学者更容易理解,建议大家在看过课程后,都实际自己在实验板进行操作。这里,我们先假定大家已经清楚KEIL的建立工程项目和进行程序编译的方法,如果有不明白的,可以下载KEIL使用教程,这里就不重复讲述如何使用KEIL。另外,我们也先假定大家已经清楚如何将编译生成的HEX文件烧录到STC芯片里。如果有不懂的,可以看看wan1jing版主写的教程。. 这里讲课不按传统教科书方式进行,而是按实际需要,用到才学。所以一些基础的知识,以后会逐步在课程里讲述。本人水平有限,讲述过程中如有错误,欢迎批评指正。好里,言归正传,开始了。。。首先,我们看看实验板的电路图。
下载( KB)
2008-6-5 17:40
由图中可以看出,单片机的P0口8个IO每个均接有一只LED发光管及串有一只电阻到电源正极,而我们的目的就是要把LED点亮,显而易见,只需要把我们的P0口相对应的IO口写成低电平,LED就可以通电工作。在51单片机里,上电后,芯片复位后其所有引脚均是高电平,因此,正常状态下,通电后,LED是不发光的,因此,我们需要用一个指令,使这个引脚变为低电平,(知识点:数字电路里,只存在二种状态,0和1,一般用高电平表示1,低电平表示0。) 我们在KEIL里建一个项目,写入如下的语句:
下载( KB)
2008-6-5 17:28
好了,编译,生成HEX文件,烧进我们的实验,怎么样,灯亮了吧。这里起作用的就是 CLR ,,相对应的语句是SETB ,
它的作用刚好相反,,同理,我们可以很容易知道,如果要控制其它端口,。 ORG语句在汇编里作用只是用来告诉编译器,定位到某个地址放置跟着的代码。因为上电复位了,单片机总是从地址0000H开始执行的,所以,在开始地址,我们放上一跳转指令AJMP ,它是无条件跳转到指定的地址,为什么要跳转到100H?这个留在讲中断时再讲。关于AJMP $,是指跳转到本行,也即是单片机执行到这里,会不停地在本行循环,不会再往下执行,一般放程序后面,使单片机执行到这里就停在这里。好了,到这里,大家都应该明白怎么把一盏灯点亮了吧。看似神秘的单片机就是这么简单,它的引脚,要么是高电平,要么低电平(P0口有点特殊,这个留待以后再讲)。我们要做的,只不过是编个程序,控制引脚在适当的时候按我们的意愿去输出高电平或者低电平。。仅此而已。。。本课到这里结束,留个作业,大家尝试一下,把其它的灯也点亮。
第二课闪动的灯任务:使把实验板上的任一盏灯闪动起来。目的:学****延时程序,对MCU执行时间有个初步概念。今天,我们来学****第二课——闪动的灯。上一课,我们已经把实验板上的灯点亮了,同时学****了CLR、SETB语句,同时,我们知道了,只要把端口电平写为低或高,即可使该端口上的LED亮或者灭。今天,我们就要让这个灯闪起来。我们在KEIL里建一个项目,写入如下的语句:
下载( KB)
2008-6-9 10:41
图1 然后我们编译,烧进实验板,怎么样?灯闪了没有?没有!连亮都没有亮过!为什么呢?这是因为,单片机的执行速度是非常快的,每条指令执行时间需1-4个机器周期不等,而每个机器周期包含12个时钟周期,在12M晶振下,每个时钟周期是1/12000000,所以每个机器周期只有12/12000000=1us。SETB、CLR指令均是1个机器周期,在1微秒时间内 LED变化,人眼当然是看不到的。所以,我们要给它加上延时,让它亮了之后,延时一段时间再灭,这样,就能看到变化了。
下载( KB)
2008-6-9 10:41
图2 我们来说说标号,程序里START,DELAY这些红色的字,汇编语言中采用符号地址(即标号)是便于查看、修改,尤其是便于指令转移地址的表示。书写标号时,规定第一字符必须是字母或半角下划线“_”,它后面可以跟英文和数字字符、制符表等,并可任意组合,以冒号(:)结束。再有标号不能用操作码助记符和寄存器的代号表示。标号可单独占一行或写在指令前。我们加上延时子程序,然后用ACALL指令来调用,我们注意到,在DELAY子程序后,我们加了RET指令,这个RET执行完之后,返回到调用语句指令之后继续执行。每个被调用的子程序,必须在程序末加