×
嵌入式开发 > 详情

单片机循环灯点亮实验

发布时间:2020-06-29 发布时间:
|

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

二:实验目的:了解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。

五:实验心得

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



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
五大标准轻松搞定4K超高清电视选购