小灯实验一(循环闪烁)
南京华岳电子制作
一. 实验的目的及功能说明。
在本实验中小灯能够不停的闪烁,闪烁间隔时间为500MS。
学生通过本实验
(1) 学习编程利用总线的方式来控制对外围接口的控制。
MOV A,#00H ;将小灯的状态送入累加器(0为点亮)
MOV P1,A ;根据小灯的地址送小灯的状态
(2) 学习通过使用软件编程能够达到延时效果。
延时时间的编程设计(设石英晶体为12MHZ,一个机器周期为1US):
机器周期
;====================================
;延时子程序
;出口参数:
;入口参数:
;====================================
DELAY: MOV R4,#20 ;[1]
D1: MOV R5,#248 ;[2]
DJNZ R5,$ ;[3]
DJNZ R4,D1 ;[4]
RET
从[2]到[3]共用机器周期为2+2*248=498机器周期。一个机器周期为1微秒,则为498微秒。
从[1]到[4]共用机器周期为20*(498+2)+2=10002 机器周期。一个机器周期为1 微秒,则为
10002微秒或约等于10毫秒。
二. 实验中的硬件电路图。
图 1
由硬件图1 可知对应的89S51 与LED 引脚的连线为
LED1-------------P1.0
LED2-------------P1.1
LED3-------------P1.2
LED4-------------P1.3
LED5-------------P1.4
LED6-------------P1.5
LED7-------------P1.6
LED8-------------P1.7
三. 51 汇编源程序。
ORG 000H ;程序首地址
JMP START ;跳到主程序
;===========INITIATE初始化===========
ORG 100H
START: MOV SP, #70H ;设置栈点
MOV P2,#0FFH
MOV P3,#0FFH
MOV P1,#0FFH
MOV P0,#0FFH
;======主程序======
LOOP: LCALL DELAY ;调用延时子程序
MOV A,#00H ;将点亮状态(00H)送累加器
MOV P1,A ;点亮小灯
LCALL DELAY ;调用延时子程序
MOV A, #0FFH ;将熄灭状态(0FFH)送累加器
MOV P1, A ;熄灭小灯
JMP LOOP ;跳到LOOP处循环操作
DELAY: MOV R5,#50 ;延时子程序(延时500MS)
D1: MOV R6,#20
D2: MOV R7,#248
DJNZ R7, $
DJNZ R6, D2
DJNZ R5, D1
RET ;子程序返回
END ;程序结束
|