MCS51单片机课后作业解答资料讲解Word文档下载推荐.docx

上传人:b****5 文档编号:19974449 上传时间:2023-01-13 格式:DOCX 页数:26 大小:463.64KB
下载 相关 举报
MCS51单片机课后作业解答资料讲解Word文档下载推荐.docx_第1页
第1页 / 共26页
MCS51单片机课后作业解答资料讲解Word文档下载推荐.docx_第2页
第2页 / 共26页
MCS51单片机课后作业解答资料讲解Word文档下载推荐.docx_第3页
第3页 / 共26页
MCS51单片机课后作业解答资料讲解Word文档下载推荐.docx_第4页
第4页 / 共26页
MCS51单片机课后作业解答资料讲解Word文档下载推荐.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

MCS51单片机课后作业解答资料讲解Word文档下载推荐.docx

《MCS51单片机课后作业解答资料讲解Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《MCS51单片机课后作业解答资料讲解Word文档下载推荐.docx(26页珍藏版)》请在冰豆网上搜索。

MCS51单片机课后作业解答资料讲解Word文档下载推荐.docx

时钟周期——振荡脉冲2分频的信号

机器周期——完成一个基本操作需要的时间,是振荡周期/12=1T

指令周期——执行1条指令需要的时间1~4T

(11)单片机工作时在运行出错或进入死循环时,如何处理?

复位处理,在单片机的RESET加持续1段时间的高电平

(12)使单片机复位的方法有几种?

复位后单片机的初始状态如何?

分上电复位和手动复位。

复位后PC=0000HALE=0/PSEN=1

(13)开机复位后,单片机使用的是哪组工作寄存器?

它们的地址是什么?

如何改变当前工作寄存器组?

单片机使用的是第0组工作寄存器R0-R7,对应的地址为00H-07H,采用置位复位RS1、RS0,可以改变单片机使用的工作寄存器。

第3章MCS-51单片机的汇编语言指令系统

单片机的指令格式为:

操作码+操作数

[标号:

]操作码助记符[目的操作数][,源操作数][;

注释]

答:

MCS-51单片机有7种寻址方式:

立即寻址、直接寻址、寄存器寻址、寄存器间接寻址、变址寻址、相对寻址、位寻址。

立即寻址——操作数在指令中直接给出。

直接寻址——操作数存放的地址在指令中给出。

可寻址RAM128B和特殊功能寄存器

寄存器寻址——操作数在寄存器中。

可寻址4组寄存器共32个字节即00H—1FH

寄存器间接寻址——操作数的地址放在寄存器R0、R1、dptr中

@R0、R1可寻址256B@DPTR可寻址64KB

变址寻址——操作数的地址由变址寄存器A和基址寄存器DPTR、PC相加得到。

可寻址64KB的程序区

相对寻址——实现程序的相对转移,地址范围-128~+127

位寻址——按位寻址,操作数的地址为位地址。

可寻址RAM区128bit特殊功能区的128bit

对片内RAM可以用直接寻址和寄存器寻址方式。

对片外RAM可以用寄存器寻址方式-

在对片外RAM单元的寻址中用Ri间接寻址只能寻址当前页的256B,用dptr间接寻址可以直接寻址64KB的内存

(1)立即寻址

(2)直接寻址(3)寄存器间接寻址(4)寄存器寻址(5)MOVCA@A+DPTR

变址寻址(6)相对寻址(7)CLRA立即寻址,CLRC位寻址

这2条指令的操作结果相当,但是前1条指令速度快,指令短

如A=12H(PC)=0FFEH+20H+3=1021H如A=10H(PC)=0FFEH+3=1001H

第4章MCS-51单片机汇编语言程序设计

解:

xequ5AH

YEQU5BH

ORG0100H

START:

CJNEA,#10,START1

START1:

JCSTART_M;

X<

10

CJNEA,#15,START2

START2:

JNCSTART_B;

X>

=15

MOVB,A;

10<

=X<

15

MULAB

ADDA,#8

SJMPSTART_END

START_M:

X<

DECA

START_B:

MOVA,#41

START_END:

MOVY,A

SJMP$

解:

dataequ50h

Numequ08h

Resultequ54h

CAL_AVE:

MOVR0,#DATA

MOVR2,#Num

MOVR3,#0

MOVR4,#0

CLRC

CAL_AVE1:

MOVA,R4

ADDCA,@R0

MOVR4,A

MOVA,R3

ADDCA,#0

MOVR3,A

DJNZR2,CAL_AVE1

MOVR2,#3

CAL_AVE2:

CLRC

RRCA

MOVR3,A

MOVA,R4;

/2

DJNZR2,CAL_AVE2

MOVResult,R3

RET

data1equ40h

Data2equ50h

Resultequ40h

Mult10_DATA:

MOVR0,#DATA1

MOVR1,#DATA2

MOVR2,#10H

Mult10_DATA1:

MOVA,@R0

ADDCA,@R0;

*2

MOV@R0,A

MOV@R1,A

INCR0

INCR1

DJNZR2,Mult10_DATA1

Mult10_DATA2:

*2*2

DJNZR2,Mult10_DATA2

MOVR0,#DATA1

Mult10_DATA3:

*2*2*2

DJNZR2,Mult10_DATA3

MOVR0,#DATA1

Mult10_DATA4:

MOVA,@R0;

ADDCA,@R1;

+*2

DJNZR2,Mult10_DATA4

dataequ2000H

NUMEQU100

EVENEQU30H;

偶数

ODDEQU31H;

奇数

CAL_EVEN_ODD:

MOVDPTR,#DATA

MOVR2,#NUM

CAL_EVEN_ODD2:

MOVXA,@DPTR

JBACC.0,CAL_ODD;

INCEVEN

SJMPCAL_EVEN_ODD1

CAL_ODD:

INCODD

CAL_EVEN_ODD1:

INCDPTR

DJNZR2,CAL_EVEN_ODD2

DATA_ASCEQU2000H

DATA_BCDEQU3000H

NUMEQU10

ASC_TO_BCD:

MOVDPTR,#DATA_ASC

MOVP2,DPH

MOVR0,DPL

MOVDPTR,#DATA_BCD

ASC_TO_BCD1:

MOVXA,@R0

ANLA,#0FH

SWAPA

MOVB,A

INCR0

MOVXA,@R0

ANLA,#0FH

ORLA,B

MOVX@DPTR,A

INCDPTR

DJNZR2,ASC_TO_BCD1

RET

第5章单片机C51程序设计

unsignedinthtoi(unsignedchars[],unsignedintsize)

{

unsignedinttmp[10];

unsignedinti=0;

unsignedintcount=1,result=0;

unsignedintflag=0;

if((s[i]=='

0'

)&

&

(s[i+1]=='

x'

)||(s[i+1]=='

X'

))

flag=2;

for(i=size-1;

i>

=flag;

i--){

if((s[i]>

='

(s[i]<

9'

tmp[i]=s[i]-48;

elseif((s[i]>

a'

f'

tmp[i]=s[i]-'

+10;

A'

F'

else

tmp[i]=0;

result=result+tmp[i]*count;

count=count*16;

}

returnresult;

}

#include<

stdio.h>

string.h>

typedefunsignedcharbool;

boolstrend(unsignedchars[],unsignedchart[]);

intmain()

unsignedchars1[]="

abcdefg"

;

unsignedchars2[]="

ef"

boolflag=strend(s1,s2);

printf("

theresultis%d\n"

flag);

return0;

boolstrend(unsignedchars[],unsignedchart[])

intls=strlen(s);

intlt=strlen(t);

if(lt==0)

return1;

if(ls<

lt)

return!

strcmp(&

s[ls-lt],t);

晶振频率12MHZ,25ms中断1次,5次中断为125ms移位1次。

#defineuintunsignedint

#defineucharunsignedchar

uchartemp,num;

voidmain()

{

TMOD=0x10;

TH1=(65536-25000)/256;

TL1=(65536-25000)%256;

EA=1;

ET1=1;

TR1=1;

P1=0xff;

temp=0xfe;

while

(1)

{

P1=temp;

voidtime1()interrupt3

{

TH1=(65536-25000)/256;

TL1=(65536-25000)%256;

num++;

if(num==5)

{

num=0;

temp=(temp<

<

1|temp>

>

7);

}

不是,5/9=0;

则c=0.

改为C=5.0/9.0*(F-32.0);

第6章单片机内部资源

因为10KHZ的周期为100us,定时器中断时间可为50us,因此有4中方式。

方式0:

x=213-50*(12/12)=8192-50=1FCEH

=1111111001110BTH0=FEHTL0=0EH

方式1:

x=216-50*(12/12)=65536-50=FFCEH

=1111111111001110BTH0=FEHTL0=CEH

方式2:

x=28-50*(12/12)=256-50=CEH

=11001110BTH0=CEHTL0=CEH

方式3:

=11001110BTL0=CEH

1.采用汇编语言

定时为50ms,采用方式1,X=216-50000*(12/12)=3CB0H

ORG000BH

LJMPT0_INT

MAIN:

MOVTMOD,#01H

MOVTH0,#3CH

MOVTL0,#0B0H

SETBET0

SETBIE

SETBTR0

CLRP2.0

T0_INT:

CPLP2.0

RETI

2.采用c51语言

定时为50ms,采用方式1,X=216-50000*(12/12)

#include<

reg51.h>

sbitP2_0=P2^0;

voidmain(void)

TMOD=0x01;

P2_0=0;

TH0=(65536–500000)/256;

TL0=(65536–500000)%256;

EA=1;

ET0=1;

TR0=1;

Do{}while

(1);

Voidtimer0(void)interrupt1

P2_0=!

P2_0;

定时为100ms,采用方式1,X=216-100000*(6/12)=3CB0H,当中断3次时清0,满10次重新置1。

MOVR2,#0

SETBP1.0

INCR2

CJNER2,#3,T0_INT1

CLRP1.0

T0_INT1:

CJNER2,#10,T0_INT2

T0_INT2:

定时为100ms,采用方式1,X=216-100000*(6/12)

sbitP1_0=P1^0;

ucharNUM=0;

P1_0=1;

NUM++;

If(NUM==3)P1_0=0;

Elseif(NUM==10)

NUM=0;

P1_0=1;

定时为100ms,采用方式1,X=216-100000*(6/12)=3CB0H,当中断10次时清0,满20次重新置1。

SETBP1.7

CJNER2,#10,T0_INT1

CLRP1.7

CJNER2,#20,T0_INT2

sbitP1_7=P1^7;

P1_7=1;

If(NUM==10)P1_7=0;

Elseif(NUM==20)

P1_7=1;

定时为100ms,采用方式1,X=216-100000*(6/12)=3CB0H,当中断10次时p1.0=0,外部INT0中断时p1.0=1,启动定时器。

ORG0000H

LJMPMAIN

ORG0003H

LJMPINT0_INT

SETBEX0

SETBIT0

CLRP1.1

SETBP1.0

CLRTR0

T0_INT2:

INT0_INT:

SETBP1.1

sbitP1_1=P1^1;

P1_1=0;

EX0=1;

IT0=1;

If(NUM==10)

P1_0=1;

P1_1=0;

TR0=0;

VoidINT_0(void)interrupt0

P1_0=0;

P1_1=1;

NUM=0;

外部脉冲由管脚输入,可设T0工作于定时器方式1,计数初值为0,当输入高电平时对T0计数,当高电平结束时,计数值乘上机器周期数就是脉冲宽度。

工作方式控制字TMOD=00001001B=09H,计数初值TH1=00、TL0=00H。

汇编语言程序:

MAIN:

MOVTMOD,#09H;

T0定时,方式1,GATE=1

MOVTH0,#00H;

置TH0计数初值

MOVTL0,#00H;

置TL0计数初值

WAIT:

JBP3.2WAIT;

等待/P3.2引脚变为低电平

SETBTR0;

预启动T0

WAIT1:

JNBP3.2,WAIT1;

等待/P3.2引脚变为高电平、启动计数

WAIT2:

JBP3.2,WAIT2;

等待/P3.2引脚再变为低电平

CLRTR0;

停止计数

MOV51H,TH1;

读取计数值,存入指定的单元

MOV50H,TL1

END

C语言程序:

unsignedchardata*p;

voidmain(void)

TMOD=0x09;

/*T0工作在定时器方式1,GATE=1*/

TH0=0;

TL0=0;

do{}while(P3.2);

/*等待/P3.2引脚变为低电平*/

TR0=1;

/*启动定时器/计

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 院校资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1