单片机实验--跑马灯
ORG0000H;这个汇编程序实现的是跑马灯实验
JMPSTART
ORG0200H
DELAY:MOVR1,#50;延时程序,延时0.5秒
DELAY0:MOVR2,#99
DELAY1:MOVR3,#49
DJNZR3,$
DJNZR2,DELAY1
DJNZR1,DELAY0
RET
ZX:MOVA,#0FEH;正序点亮流水灯
L1:MOVP0,A
RLA
CALLDELAY
MOVP2,#0FFH;把P2口写1,
SETBC;置C为1
MOVC,P2.1;如果P2.1按下,则C的值为0,
JNCJ2;C的值为0的时候跳到主程序的J2这个段
MOVC,P2.2;读P2.2的值,赋给C
JNCJ3;C为0的时候跳到主程序中J3这个段
JMPL1;跳到ZX这里,死循环实现灯的流动
NX:MOVA,#7FH;逆序点亮流水灯
L2:MOVP0,A
RRA
CALLDELAY
MOVP2,#0FFH
SETBC
MOVC,P2.0
JNCJ1
MOVC,P2.3
JNCJ3
JMPL2
XM:MOVA,#0FFH;熄灭流水灯
L3:MOVP0,A
MOVP2,#0FFH
SETBC
MOVC,P2.0
JNCJ1
MOVC,P2.1
JNCJ2
JMPL3
START:;主程序段,也是程序开始的地方
MOVP2,#0FFH;将P2口写1
MOVP0,#0FFH;将P1口写1
SETBC;将C的值置1
J1:MOVC,P2.0;读P2.0的数据,赋给C
JNCZX;如果C的值为0跳转到流水灯正序循环这个段
J2:MOVC,P2.1;读P2.1的数据,赋给C
JNCNX;如果C的值为0,跳转到流水灯逆序循环这个段
J3:MOVC,P2.2;读P2.2的数据,赋给C
JNCXM;如果C的值为0,跳转到流水灯熄灭这个段
JMPSTART
END
2.C语言源代码如下:
#include//C语言我们都比较熟悉,就不做过多的注释
#include
#defineuintunsignedint
#defineucharunsignedchar
sbitk1=P2^0;
sbitk2=P2^1;
sbitk3=P2^2;
uchars1,s2,s3;
voiddelay(uintt);
voidf1();
voidf2();
voidf3();
voidmain()
{
uchark=0xfe;
while(1)
{
if(k1==0)f1();
if(k2==0)f2();
if(k3==0)f3();
}
}
voidf1()//正序点亮流水灯
{
uinti=0,k=0xfe;
while(1)
{
P0=k;
delay(100);
k=_crol_(k,1);
if(k2==0)break;
if(k3==0)break;
}
}
voidf2()//倒序点亮流水灯
{
uintk=0x7f;
while(1)
{
P0=k;
delay(100);
k=_cror_(k,1);
if(k1==0)break;
if(k3==0)break;
}
}
voidf3()//熄灭流水灯
{
while(1)
{
P0=0xff;
if(k1==0)break;
if(k2==0)break;
}
}
voiddelay(uintt)
{uinti,j;
for(i=t;i>0;i--)
for(j=114;j>0;j--);
}
单片机实验跑马 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)