用MCS-51单片机汇编语言实现下列的程序:

用MCS-51单片机汇编语言实现下列的程序:,第1张

;1--片内RAM30H字节单元的存储内容传送到片内RAM20H字节单元

MOV 20H,30H

;2--片内RAM30H字节单元的存储内容传送到片外RAM2000H字节单元

MOV A,30H

MOV DPH,#20H

MOV DPL,#00H

MOVX @DPTR,A

;3--片外ROM30H字节单元的存储内容传送到片内RAM30H字节单元

MOV DPH,#00H

MOV DPL,#30H

CLR A

MOVC A,@A+DPTR

MOV 30H,A

;4--片外ROM3000H字节单元的存储内容传送到片外RAM2000H字节单元

MOV DPH,#30H

MOV DPL,#00H

CLR A

MOVC A,@A+DPTR

MOV DPH,#20H

MOV DPL,#00H

MOVX @DPTR,A

;5--片外ROM3000H字节单元的存储内容传送到片外ROM2000H字节单元

;这道题目是错误的,ROM不可修改,所以无法将任何数据传送到ROM里

;所以,“内容传送到片外ROM2000H字节单元”是无法实现的。

ORG 0000H

;------------------------下面先准备6个数字

MOV 40H, #8AH

MOV 41H, #3BH

MOV 42H, #0B9H

MOV 43H, #47H

MOV 44H, #29H

MOV 45H, #0AFH

CALL SORT6 ;调用排序子程序

SJMP $ ;停止,此时可以观察排序结果

;-------------------------------------

SORT6: ;排序子程序

MOV R6, #5 ;6个数字,比较5次

S1:

MOV R0, #40H ;起始地址

MOV B, R6

MOV R7, B

CLR PSW5 ;交换标志清零

S2:

MOV B, @R0 ;取出前一个数

INC R0

MOV A, @R0 ;取出后一个数

CJNE A, B, S3 ;后-前

S3:

JNC N_JH ;够减就不用交换

MOV @R0, B ;交换存放

DEC R0

MOV @R0, A

INC R0

SETB PSW5 ;设立交换标志位

N_JH:

DJNZ R7, S2

JNB PSW5, S_END ;没有交换过,就结束

DJNZ R6, S1

S_END:

RET

;-------------------------------------

END

ORG 0000H

LJMP MAIN

ORG 0003H

LJMP EXT0

ORG 0030H

MAIN:

    SETB EX0

    SETB IT0

    SETB EA

    CLR P10

    SJMP $

EXT0:

    SETB P10

    JNB P32,$

    CLR P10

    RETI

    END

#include<reg51h>

#defineuint unsigned int

#defineuchar unsigned char

sbitspeaker = P2^7;

sbit key0 =P1^0;

sbit key1 =P1^1;

sbit key2 =P1^2;

sbit key3 =P1^3;

sbit key4 =P1^4;

sbit key5 =P1^5;

sbit key6 =P1^6;

sbit key7 =P1^7;

ucharled[8]={0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80};

voiddelay_1ms(uint t)

{

uchar m,n;

for(m=t;m>0;m--)

for(n=330;n>0;n--);

}

bitiskeyinput() //判断是否有按键闭合

{

if((P1 & 0xff) ==0xff ) //屏蔽高4位(列线),只检测低4位(行线)

return 0; //没有键闭合,返回0

else

return 1; //有键闭合,返回1

}

ucharkey_identify() //识别键号

{

uchar key;

if( key0==0 )key=0;

if(key1==0 )key=1;

if( key2==0 )key=2;

if( key3==0 )key=3;

if( key4==0 )key=4;

if( key5==0 )key=5;

if( key6==0 )key=6;

if( key7==0 )key=7;

return key; //输出键号

}

voidkeyprocess(uchar keynum)

{

uint i;

P0 = led[keynum];

i=500;

while(i--)

{

speaker = 0;

delay_1ms(10);

speaker = 1;

}

}

void main()

{

uchar keynum;

P0 = 0xFF;

while(1)

{

while (!iskeyinput() ); //如果没有键,则等待

delay_1ms(10); //去除键抖动

if(iskeyinput() ) //当前有按键,需要识别按键并且等待键盘松开

{

keynum= key_identify(); //识别键号

keyprocess(keynum);

while(1); //等待复位

}

}

}

按照图示,应该用P17向T1送入计数脉冲

送去4000个,即达到了1s

下列程序,在PROTEUS中仿真通过

;---------------------------------

ORG 0000H

JMP START

ORG 000BH

JMP T0_INT

ORG 001BH

JMP T1_INT

ORG 0030H

START:MOV SP,#60H

MOV TMOD,#52H ;T1计数方式1; T0定时方式2

MOV TH0, #(256-250) ;T0定时250us@12MHz

MOV TL0, #(256-250) ;

SETB TR0;

MOV TH1, #(65536-4000) / 256 ;T1计数4000

MOV TL1, #(65536-4000) MOD 256 ;即1s

SETB TR1;

SETB ET0;

SETB ET1;

SETB EA;

MOV R2, #3

WAIT: SJMP WAIT ;等待中断

;----------------------------------

T0_INT: ;T0方式2,不用重新送初始值

CLR P17 ;向T1送计数脉冲

NOP

SETB P17

RETI

;----------------------------------

T1_INT: ;每当收到4000个脉冲,即1s中断一次

MOV TL1, #(65536-4000) MOD 256 ;重新送入初始值

MOV TH1, #(65536-4000)/256 ;T1计数4000

CLR P10

DJNZ R2, T1_END

SETB P10

MOV R2, #3

T1_END:

RETI

;----------------------------------

END

以上就是关于用MCS-51单片机汇编语言实现下列的程序:全部的内容,包括:用MCS-51单片机汇编语言实现下列的程序:、求MCS51单片机冒泡法排序程序!高手进!、MCS-51单片机中断c语言或汇编编写完整程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/zz/10081695.html

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

发表评论

登录后才能评论

评论列表(0条)

保存