专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

单片机循环灯点亮实验

作者:佚名   来源:本站原创   点击数:  更新时间:2009年09月22日   【字体:

一:实验名称:循环灯点亮

二:实验目的:了解p1口 输出,了解移位操作要通过累加器ACC来实现,掌握89C51的汇编指令。

三:实验原理:

   1.八个循环灯是由发光二极管组成的阵列,发光二极管采用共阳极连接(这样可以提高二极管的亮度)。

   2.每个二极管外接一个电阻和一个非门,这样把p1口输出的高电平转换成了低电平,二极管正常导电,并发光点亮。

   3.每个二极管对应赋一时点亮,但是p1口输出的电平值,只能对应二极管阵列的一个确定的状态,不能实现循环点亮。所以要先把值赋给寄存器ACC,通过ACC实现移位操作,实现不同的二极管对应赋一,这样确定的二极管实现高电平点亮,其余的为低电平。

    4.计时实现了循环赋一,人的视觉还是感受不到灯在循环,因为CPU晶振的频率为6MHZ,一个震荡周期T=1/6M,则一个机器周期为T'=12/6M=2us。这极其短暂的时间远远不到人眼所能分辨的范围,所以要通过延时来实现效果的观察。对89C51来说,延时可以通过硬件、软件实现。本实验通过软件延时,即通过汇编指令的循环来实现。

实验程序如下:

org 0H
LJMP start
org   4100H
start:
MOV A, #1
loop:MOV P1, A
DD2:MOV R0, 10
MOV R1,   #200
DD1:MOV R2, #126
DJNZ   R2, $
DJNZ R1, DD1
DJNZ   R0, DD2
RL A
JMP loop
end

从第七行到第十一行为循环语句,下面对汇编语言进行解释:

org 4100H                 起始地址为4100H
RLA                             R逻辑移位(左移)
JMP                             无条件跳转
DJNZ   R2, $               DJNZ先减1在判断是否等于零,若等于零则停止,若不等于零则跳转到$

  $指令本身所在地址

本实验的循环周期为8s,即每隔一秒交替点亮下一个发光二极管。

 

本实验有关的计算:     

  10(1*T'+200*T'+200*126*2T+200*2T)  =10*0.1s =1s

四:本实验单片机硬件知识

   1.89C51上电复位后,程序计数器的内容为0000H,所以CPU总是从0000H开始执行程序,但是0000H~0002H用作89C51上电复位后引导程序的存放单元。所以要加跳转指令。

   2.89C51上电复位后,RS1=RS0=0,CPU自动选择第0组为当前寄存器组。片内RAM地址00H~07H。

五:实验心得

 现在特别喜欢汇编语言,汇编不仅不区分大小写,而且不限制中间空字符。通过本实验发现有些事情并不像别人说的那么难,只要是有一定得计算机知识,学习单片机很容易的。
 

关闭窗口