89C51单片机汇编程序题

89C51单片机汇编程序题,第1张

MOV 20H,R0 ;R0、R1要作为指针,所以内容直接转存到20H、21H

MOV 21H,R1

MOV A,PSW ;RS1,RS0的值代表了当前寄存器组中R0的绝对地址

ANL A,#18H ;取当前寄存器组的绝对地址

ADD A,#2H ;指针指向R2,R0、R1已经处理过了

MOV R0,A ;把当前寄存器组R2的地址送R0,设置指向寄存器的指针

MOV R1,#22H ;设置目标地址指针指向22H

M1: MOV A,@R0 ;22H以后依据题意使用循环,寄存器的内容送A

MOV @R1,A ;A的内容送目标地址

INC R0

INC R1

CJNE R1,#28H,M1 ;R1等于28,所有数据传送完

SJMP $

由于RS1、RS0设计在PSW4和PSW3,因此屏蔽了别的标志位以后,剩下的值就是选中的工作寄存器组的R0的绝对地址。有了绝对地址,就可以使用间接寻址编出循环程序传送数据。

你最好上机模拟运行一下这段程序,仔细调试,就能看懂了。

第一次按下,LED亮,抬起后再次按下,LED灭,依次循环?

;约定低有效

ORG 0000H

LJMP MAIN

ORG 000BH

LJMP T0ISR

ORG 0030H

MAIN:

MOV SP,#5FH

MOV TMOD,#01H

MOV TH0,#HIGH(65536-50000)

MOV TL0,#LOW(65536-50000)

SETB ET0

SETB EA

MOV 20H,#0

LOOP:

MOV A,P2

JB ACC0,LP1

JB 00H,LP01

CLR P10

SETB 00H

SJMP LOOP

LP01:

SETB P10

CLR 00H

SJMP LOOP

LP1:

JB ACC1,LP2

JB 01H,LP11

CLR P11

SETB 01H

SJMP LOOP

LP11:

SETB P11

CLR 01H

SJMP LOOP

LP2:

JB ACC2,LP3

JB 02H,LP21

CLR P12

SETB 02H

SJMP LOOP

LP21:

SETB P12

CLR 02H

SJMP LOOP

LP3:

JB ACC3,LP3

JB 03H,LP31

CLR P13

SETB 03H

SJMP LOOP

LP31:

SETB P13

CLR 03H

SJMP LOOP

LP4:

JB ACC4,LP3

JB 04H,LP41

CLR P14

SETB 04H

SJMP LOOP

LP41:

SETB P14

CLR 04H

SJMP LOOP

LP5:

JB ACC5,LP3

JB 05H,LP51

CLR P15

SETB 05H

SJMP LOOP

LP51:

SETB P15

CLR 05H

SJMP LOOP

LP6:

JB ACC6,LP3

JB 06H,LP61

MOV R2,#0

SETB TR0

SETB 06H

SJMP LOOP

LP61:

SETB P16

CLR 06H

CLR TR0

SJMP LOOP

LP7:

JB ACC7,LOOP

JB 07H,LP71

MOV R2,#0

SETB TR0

SETB 07H

LJMP LOOP

LP71:

SETB P17

CLR TR0

CLR 07H

LJMP LOOP

T0ISR:

CLR TR0

MOV TH0,#HIGH(65536-50000)

MOV TL0,#LOW(65536-50000)

SETB TR0

INC R2

MOV A,R2

CJNE A,#20,T01

T01:

JC T0E

MOV R2,#0

JNB 06H,T02

CPL P16

SJMP T0E

T02: JNB 07H,T0E

CPL P17

T0E:

RETI

END

uchar

code

display_P0[]={

0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F,//P0口由低位高位依次亮灯(前一位的灯灭)

0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,//P0口灯全灭

0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,,//P0口灯全灭

0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE,0xFF,//P0口由高位向低位依次亮灯(前一位的灯灭),最后全灭

0xFE,0xFC,0xF8,0xF0,0xE0,0xC0,0x80,0x00,//P0口由低位向高位依次亮灯(前一位的灯b不灭)

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

//P0口灯全亮

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//P0口灯全亮

0x00,0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,

//P0口灯由高位向低位依次灭(前一位不亮),最后仅剩最低位亮灯。

0xFC,0xF9,0xF3,0xE7,0xCF,0x9F,0x3F,0x7F,//P0口以两个亮灯为单位,由低位向高位逐位移动,最后移至最高位,仅剩最高位亮灯。

0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,

//P0口全灭

0xE7,0xDB,0xBD,0x7E,0xBD,0xDB,0xE7,0xFF,//P0口中间两位亮灯,然后两个亮灯分别向两端移动,当分别移至最高位和最低位时,再按原方法返回,返回至起始状态后全灭。

0xE7,0xC3,0x81,0x00,0x81,0xC3,0xE7,0xFF,//P0口中间两位亮灯,然后两个亮灯分别向两端扩散,当分别扩散至次高位和次低位时,再按原方法恢复,返回至起始状态后全灭。

0xAA,0x55,0x18,0xFF,0xF0,0x0F,0x00,0xFF,//差位两灭,先是最高位亮,然后最高位灭;再变成中间两位灭,其余的全亮;全灭→低四位亮→高四位亮→全灭。

0xFF,0x00,0x00,0xFF,0xFF

};//全灭→全亮→全亮→全灭→全灭

uchar

code

display_P2[]={

//P2口可参照P0口流水灯情况。基本相同。

0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,

0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F,

0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE,

0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,

0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,

0xFE,0xFC,0xF8,0xF0,0xE0,0xC0,0x80,0x00,

//

0x00,0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,

0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,

//

0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,

0xFC,0xF9,0xF3,0xE7,0xCF,0x9F,0x3F,0xFF,

//

0xE7,0xDB,0xBD,0x7E,0xBD,0xDB,0xE7,0xFF,

0xE7,0xC3,0x81,0x00,0x81,0xC3,0xE7,0xFF,

0xAA,0x55,0x18,0xFF,0xF0,0x0F,0x00,0xFF,

0xFF,0x00,0x00,0xFF,0xFF

};

以上就是关于89C51单片机汇编程序题全部的内容,包括:89C51单片机汇编程序题、急求程序,89C51汇编语言写8个按键控制8个LED、高分:89C51单片机流水灯程序求步骤详解,看懂了就给分等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址:https://54852.com/zz/9324895.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存