单片机实验----跑马灯
实验效果:
- 8只LED灯轮流点亮,从左到右,再从右到左,不断循环。
知识点:
代码:
ORG 0000H ;主程序
MAIN: MOV A,#0FEH ;acc初始化,11111110B
LOOP: MOV P1,A ;将acc的数据传送到P1口
LCALL DELAY ;调用延迟子程序
RL A ;将acc中的数据左右一位
LJMP LOOP ;回到LOOP标记处,点亮下一盏灯
DELAY: MOV R1,#200 ;延时子程序
D1: MOV R2,#150
D2: DJNZ R2,D2
DJNZ R1,D1
RET ;返回主程序
END
我们知道控制P1口的数值可以使得LED灯亮或者灭。
那怎么改变P1口的数值呢?
我们可以通过RL指令。
原理:
我们将11111110B传给P1口,再用RL指令将11111110B左移,改变11111110B中0的位置,来达到改变P1口8位的数值,从而控制LED的亮灭。
-
RL指令
格式:RL A
功能:将acc中的数据循环左移一位,以形成新的数据
-
RL指令
格式:RR A
功能:同上,循环左右移
-
高128单元
如图:即80H~FFH
高128单元,称为特殊功能寄存器区,也称专用功能寄存器区。这个区包含22个专用寄存器。
这个区主要存放相应功能部件的控制命令、状态或数据。
特殊功能寄存器:
这些专用寄存器分为3类:
累加器A(或acc)
acc是一个8位寄存器,常用A表示。
acc是一个很重要的寄存器,运算的时候经常会用到。
一方面它可以做加法器,一方面也可以作为寄存器。
累加器的常用功能:
- 存放操作数和运算后的结果
- 内部与外部RAM数据传送的中转站
一般来说,A代表累加器,而ACC代表累加器的地址。
程序状态字(PSW)寄存器
PSW是一个8位寄存器,用于存放执行指令后的有关状态信息。
如图:
-
进位标志位CY或C(PSW.7)
标志加法与减法运算中的进位与借位状态。
加法中:若有进位则CY=1,否则为0。
减法中:若有借位则CY=1,否则为0。
它是最常用到的标志,通常在位传送、位与、位或等操作中使用。
-
辅助进位标志位AC(PSW.6)
用在加或减运算中,表示低四位有没有向高四位进位或借位。
若有则AC=1,否则为0。
-
寄存器选择位RS1和RS0(PSW.4和PSW.3)
用户可以通过改变他们的值,来选择当前工作寄存器区的组别。
如图:
数据指针(DPTR)
是一个16位的寄存器,本质是两个8位寄存器组合而成。
DPTR比较灵活:
- 作为16位寄存器使用,此时可以对64k的外部数据存储器和I/O地址进行寻址。
- 作为两个8位寄存器使用,此时DPH为DPTR的高字节,DPL为DPTR的低字节。
时间:2018年9月28日16:08:36
-END-