;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语言或汇编编写完整程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)