AT89C51单片机P0P1P2P3端口按顺序点亮32盏灯的编程

AT89C51单片机P0P1P2P3端口按顺序点亮32盏灯的编程,第1张

#include<reg51.h>

void delay(int a)

{

int i

while(a--)for(i=0i<120i++)

}

main()

{

int i

P0=0xff

P1=0xff

P2=0xff

P3=0xff

    for(i=0i<8i++){P0=P0<<1delay(100)}

    for(i=0i<8i++){P1=P1<<1delay(100)}

    for(i=0i<8i++){P2=P2<<1delay(100)}

    for(i=0i<8i++){P3=P3<<1delay(100)}

while(1)

}

MOV R5,#16

MOV R6,#40H

LONG:

MOV R4,#1516个数比较15次

MOV A,30H将30H里面的内容复给A

MOV R0,#31H让其从31H开始自加到3FH

L:

SUBB A,@R031H里面的内容和30H里面的内容进行相减比较求C

JC XU如果C=0则表示A里面的内容大于@R0里面的内容否则小于跳转XU

INC R0R0加1到下一单元地址

DJNZ R4,L15次比较没有结束跳转到L继续执行

AJMP LL如果15次循环完毕则求出最大值,然后再循环求出次大值

XU:

MOV A,R0放比较数的地址送A,以清零方便为第二次比较

MOV R1,A方便清零

MOV A,@R0最大值送A

INC R0

AJMP LL

LL:

MOV @R1,#00H最大值地址清零,然后再比较15次求次大值

MOV R6,A最大值送40H

INC R6

DJNZ R5,LONG判断是否全部从大到小排完

AJMP TT

TT:

END

这个问题比较复杂!就正常而言,是在执行LJMP

MAIN

跳转到MAIN主程序上。如果没有发生跳转命令就会顺序执行

LJMP

INT0、LJMP

INT1。程序执行过程中先要跳转到MAIN程序中,如果MAIN程序中有根据条件来跳过程序或是终止程序是就不会执行下面的程序。如果没有发生上面情况,程序回顺序执行MAIN、INT0、INT1.......你的程序正常情况是跳转执行MAIN程序,然后跳到ORG003H

INT0,执行INT0程序,接下来就是执行ORG013H

INT1,并跳转到INT1


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11264758.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-14
下一篇 2023-05-14

发表评论

登录后才能评论

评论列表(0条)

保存