单片机循环灯点亮实验
一:实验名称:循环灯点亮
二:实验目的:了解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。
五:实验心得
现在特别喜欢汇编语言,汇编不仅不区分大小写,而且不限制中间空字符。通过本实验发现有些事情并不像别人说的那么难,只要是有一定得计算机知识,学习单片机很容易的。
- 在应用可编程测控网络设计(03-15)
- 基于AT89C51单片机的微型可编程控制器(04-23)
- 基于AT89C51单片机的量程自切换频率计(01-25)
- 基于AT89C51单片机的十进制计算器系统设计(06-29)
- 基于单片机的智能计步器设计(09-20)
- 可编程逻辑器件与单片机在双控制器中的设计(06-04)