⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 新建 文本文档.txt

📁 本程序是一个简单的流水灯程序,对初学者来说是很容易掌握的,特别是对C51的初学者!
💻 TXT
📖 第 1 页 / 共 2 页
字号:

单片机自学教材之用单片机做流水灯(一)

第一节

    第一步:制作硬件电路

  流水灯电原理图如下图,图中用一片AT89C2051单片机及少量外围元件组成。
    图中,R1~R8为LED1~8的限流电阻;R9、C3为单片机的简易上电复位电路;C1、C2、T1组成单片机的时钟电路;

  工作原理:在上电后由于C3、R9的作用,使单片机的RST复位脚电平先高后低,从而达到复位;之后,在C1、C2、T1以及单片机内部时钟电路的作用下,单片机依程序将P1.0~P1.7引脚拉低或抬高;拉低的引脚对应的LED点亮,抬高的引脚对应的LED熄灭。


印版图:




     电路制作时,AT89C2051的位置应安装20脚的IC座,以便使单片机可以从电路板中拿下去烧写程序。电路中的元件无太苛刻的要求,若LED为高亮度的,R1~R8可加大到1k;C3漏电不要太大;否则会造成单片机无法复位。

    下一步的准备:

    1、下载汇编编译器 ASM51 ,这里先以DOS下的ASM51为例,因为它编译汇编程序时不产生辅助代码,所以较适合初学理解其产生的代码。

    2、准备一片AT89C2051或AT89C1051;一般电子商场即可购到,当然,如果有旧片只要是好的也行。

    3、准备一台可以烧写AT89C2051和 1051的编程器;

    4、电脑一台;噢对啦!你现在正使用的这台就行。

   第二步:软件的编写

    现在,我们假设单片机可以听懂我们的汉语,那么想让LED1点亮,就说“P1.0变低”;(单片机在上电初始后,其各端口输出为高电平)LED1就点亮啦!想让LED1灭,LED2亮,就说“P1.0升高,P1.1变低”;LED1就熄灭LED2随后既点亮!

    若用汉语编写的流水灯程序应该是:

程序部分     ;解释部分用“;”分号与程序部分隔开
开始:        ;“开始:”为标号
      P1.0低
      P1.0高
      P1.1低
      P1.1高
      P1.2低
      P1.2高
      P1.3低
      P1.3高
      P1.4低
      P1.4高
      P1.5低
      P1.5高
      P1.6低
      P1.6高
      P1.7低
      P1.7高
      返回到开始   ;返回到“开始:”处继续循环
结束            ;说明程序到此结束

  这样,LED1~LED8便会不停的流动点亮熄灭,从而产生流水效果。

    然而单片机听不懂汉语,只能接受二进制的“10......”代码,但要用二进制代码编写流水灯程序,其意思与上述的“汉语程序”基本相同,只是“汉语”改为二进制代码罢啦。

    为了让单片机工作,只能将程序写为二进制代码交给其执行;早期单片机开发人员就是使用人工编写的二进制代码交给单片机去工作的。

    今天,我们不必用烦人的二进制去编写程序,完全可以将我们容易理解的“程序语言”通过“翻译”软件“翻译”成单片机所需的二进制代码,然后交给单片机去执行。这里的“程序语言”目前主要有汇编和C两种;“翻译”软件有好多种,一般依所使用的“程序语言”不同而不同,汇编语言用“宏汇编”,如上面让你下载的ASM51,C语言用FC或KC(以后会学到,现在你不必关心)。在这里我们所说的“翻译”软件,行话叫编译器,将“程序语言”通过编译器产生单片机的二进制代码的过程叫编译。

  现在让我们将上面的“汉语”语言程序改写为汇编语言程序:

“汉语”语言 汇编语言 
开始: star: 
P1.0低 clr p1.0 
P1.0高 setb p1.0 
P1.1低 clr p1.1 
P1.1高 setb p1.1 
P1.2低 clr p1.2 
P1.2高 setb p1.2 
P1.3低 clr p1.3 
P1.3高 setb p1.3 
P1.4低 clr p1.4 
P1.4高 setb p1.4 
P1.5低 clr p1.5 
P1.5高 setb p1.5 
P1.6低 clr p1.6 
P1.6高 setb p1.6 
P1.7低 clr p1.7 
P1.7高 setb p1.7 
返回到开始 ljmp star 
结束 end       

    这里用到了四条汇编指令:clr、 setb、 ljmp 、end;
clr      是将其后面指定的位清为0;
setb   是将其后面指定的位置成1;
ljmp    是无条件跳转指令,意思是:跳转到指定的标号处继续运行。
end    是一条告诉编译器:程序到此结束的伪指令。伪指令只告诉编译器此程序到此有何要求或条件,它不参与和影响程序的执行。

  这里需要说明的是,按汇编语法要求,所编制的程序(下称源程序)之格式和书写要求必须依下列原则:
    1、源程序必须为纯文本格式文件,如用Windows“附件”中的“记事本”编写的文本文件;
    2、源程序的扩展名应是 *.ASM;
    3、一行只能写一条语句,以回车作为本句的结束,每一语句行长度应少于80个字符(即40个汉字)。
    4、每行的格式应为:

  标号: 命令 参数 ;注释
    即一行由四部份组成,各部份的顺序不能搞错,依实际要求可以缺省其中的一部份或几部份,甚至全部省去,即空白行。需要使用标号时标号后面必须有“:”(冒号),而命令语句和参数之间必须用空格分开,如果命令有多个参数,则参数与参数之间必须用“,”(逗号)分开,需要注释时注释前必须用“;”(分号),“;”后面的语句可以写任何字符,包括汉字用于解释前面的汇编语句,它将不参与汇编,不生成代码。由于汇编程序对我们还不直观,所以在编写源程序时,应当养成多写注释的习惯,这样有助于今后源程序的阅读和维护。
    标号是标志程序中某一行的符号名,编译后标号的数值就是标号所在行代码的地址。在宏汇编ASM51中标号的长度不受限制,但标号中不能包含‘:’或其它的一些特殊符号,也不能用汉字,可以用数字作标号,但必须用字母开头。当标号作参数用(如标号作转移地址),在命令后面出现时,必须舍去‘:’(如上面程序中的 LJMP STAR中的 STAR 是不能再有:)。
    每行只能有一个标号,一个标号只能用在一处,如果有两行用了同一个标号,则汇编时就会出错。由于标号的长度没有限制,可以用有意义的英文或汉语拼音来说明行,使源程序读起来更方便。
    源程序中的字母不区分大小写,也就是说 star 和 STAR 是一样的,请不要用大小写方式去区分不同的标号。 

    好拉!现在来看看前面我们编写的源程序该怎样处理,

为便于以后叙述,也便于你对源程序的学习与管理,请在C盘下建立一个McuCai目录,将下载的MASM51和你编写的程序均放到这里。下面均认为你已建立了这个目录。

   编写源程序:先将上面的汇编源程序在Windows的记事本中依原样输入,之后保存为 Test.asm。

  由于ASM51为汉化版,需要中文环境,在进入DOS模式后请在命令行键入 pdos95 回车    既进入中文环境;要退出中文环境,只要在命令行键入 quit 即可。

  编译:在命令行键入:  asm51   test.asm  回车
如果你编写的源程序有错误,编译时编译器会提示你那一句错啦;若想详细查看编译结果,可用“记事本”打开编译后产生的test.lst列表文件。我们最后需要的便是编译后产生的 test.hex 文件

  烧写:回到Windows;将编程器与电脑连接好并接通电源(这里以本站介绍的AT51编程器为例),启动编程器程序,在“器件”菜单中选择“AT89C2051”;从“文件”菜单中“打开HEX文件”打开C:\McuCai\Test.hex文件;在编程器上装入AT89C2051芯片,先擦除,后写入。好拉,到此我们已将第一个流水灯程序编写、编译、烧写进行完啦,再下来就是将烧写好的AT89C2051从编程器上取下,安装到前面制作的电路板中通电让LED1~LED8“流水”。

    说明:由于单片机的时钟高达12MHz,8个LED发光与熄灭的时间很短,实际实验结果凭我们的眼是看不到“流水”效果的!哪怎样才能让我们肉眼看到“流水”效果呢?请继续学习下节课

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -