- 帖子
- 120
- 主题
- 79
- 精华
- 0
- 积分
- 60
- 在线时间
- 5 小时
- 注册时间
- 2010-10-13
|
单片机初学者要更容易理解和掌握一些常用指令,就要多做实验,编一些小程序在实验板上看效果,而流水灯是最方便看见效果的,学编程一般是先多看别人的程序从中学习一些编程的技巧和方法。是从模仿开始的,但要领会后变为己用才行,希望初学者能从下面程序中学到有用的东东。
看上面原理图是由八只LED发光管,接在89C51的P1口上,从原理图可知只有P1口为低电平(接地)时,发光管才会亮。所以只要循环控制P1口的各个引脚的电平高低变化就可使LED 循环点亮。
网友只要把下面的源程序编译后烧如提供的实验板即可看见效果。
ORG 0000H
LJMP START
ORG 0030H
START:
MOV SP,#6FH;养成习惯将堆栈先保护起来
MOV A,#80H;转换为二进制为10000000
LOOP:
MOV P1,A ;将A中的值送入P1口
RR A;右移
LCALL DELAY;凋延时程序
LJMP LOOP ;返回继续循环
delay: ;延时程序,改变R7的初值看效果如何??
mov r7,#255
d1: mov r6,#255
d2: nop
nop
nop
nop
djnz r6,d2
djnz r7,d1
ret
END
上面的程序如您不好理解可以看下面的:
ORG 0000H
START:MOV P1,#01111111B;第八脚的LED点亮
LCALL DELAY;延时1秒
MOV P1,#10111111B;第7脚的LED点亮
LCALL DELAY;延时1秒
MOV P1,#11011111B;第6脚的LED点亮 (以下省略)
LCALL DELAY
MOV P1,#11101111B
LCALL DELAY
MOV P1,#11110111B
LCALL DELAY
MOV P1,#11111011B
LCALL DELAY
MOV P1,#11111101B
LCALL DELAY
MOV P1,#11111110B
LCALL DELAY
MOV P1,#11111111B;完成第一次循环点亮,延时约0.25秒
AJMP START;反复循环
;延时子程序,12M晶振延时约250毫秒
DELAY:
MOV R4,#2
L3: MOV R2 ,#250
L1: MOV R3 ,#250
L2: DJNZ R3 ,L2
DJNZ R2 ,L1
DJNZ R4 ,L3
RET
END
以上两种的亮暗不同的,前种是暗流动,下面的是亮流动;您可以烧写到实验板看效果。。。。。。 |
|