MCS51单片机作业解答.docx
- 文档编号:30192620
- 上传时间:2023-08-07
- 格式:DOCX
- 页数:30
- 大小:463.21KB
MCS51单片机作业解答.docx
《MCS51单片机作业解答.docx》由会员分享,可在线阅读,更多相关《MCS51单片机作业解答.docx(30页珍藏版)》请在冰豆网上搜索。
MCS51单片机作业解答
MCS51单片机作业解答
第二章MCS-51单片机的结构和原理
(1)MCS-51单片机芯片包含哪些主要功能部件?
答:
CPU、4KBROM、128BRAM、4个8位I/O口、2个定时计数器、串行I/O口、中断系统、时钟电路、位处理器、总线结构。
(2)MCS-51单片机的/EA端有何用途?
答:
当/EA=0只访问片外程序区;当/EA=1时,先访问片内程序区,当PC超过片内程序容量时,自动转向外部程序区。
(3)MCS-51单片机有哪些信号需要芯片引脚以第二功能的方式提供?
答:
RXD、TXD、/INT0、/INT1、T0、T1、/WR、/RD
(4)MCS-51单片机的4个I/O口在使用上各有什么功能和特点?
答:
P1口通用输入输出;P0口数据总线、地址总线低8位、通用输入输出
P2口地址总线高8位、通用输入输出
P3第2功能信号、通用输入输出。
(5)单片机的存储器分哪几个空间?
试述各空间的作用。
答:
程序存储器:
内部ROM、外部ROM
数据存储器:
内部基本RAM、专用寄存器区、外部RAM
(6)简述片内RAM中包含哪些可位寻址单元?
答:
20H~2FH共16个可寻址单元
(7)什么叫堆栈?
堆栈指针SP的作用是什么?
在程序设计中为何要对SP重新赋值?
答:
只允许数据单端输入输出的一段存储空间。
SP的作用是用来存放堆栈栈顶的地址。
因为SP的初值是07H,后继的是寄存器区和位寻址区,为了便于编程工作,要修改SP.
(8)程序状态字寄存器PSW的作用是什么?
简述各位的作用。
答:
PSW用来存放程序执行状态的信息,
CY—加减运算的进位、借位
AC—辅助进位标志,加减运算的低4位进位、借位
(9)位地址65H与字节地址65H如何区别?
位地址65H具体在片内RAM中什么位置?
答:
位地址65H中是一位0/1的数据,字节地址65H是8位0/1的数据。
位地址65H在片内RAM中2CH单元第5位。
(10)什么是振荡周期、时钟周期、机器周期和指令周期?
如何计算机器周期的确切时间?
答:
振荡周期——为单片机提供信号的振荡源的周期
时钟周期——振荡脉冲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:
MOVB,A;X<10
MULAB
DECA
SJMPSTART_END
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
MOVA,R3
RRCA
MOVR3,A
MOVA,R4;/2
RRCA
MOVR4,A
DJNZR2,CAL_AVE2
MOVResult,R3
RET
解:
data1equ40h
Data2equ50h
Resultequ40h
Mult10_DATA:
MOVR0,#DATA1
MOVR1,#DATA2
MOVR2,#10H
CLRC
Mult10_DATA1:
MOVA,@R0
ADDCA,@R0;*2
MOV@R0,A
MOV@R1,A
INCR0
INCR1
DJNZR2,Mult10_DATA1
MOVR0,#DATA1
MOVR2,#10H
CLRC
Mult10_DATA2:
MOVA,@R0
ADDCA,@R0;*2*2
MOV@R0,A
INCR0
DJNZR2,Mult10_DATA2
MOVR0,#DATA1
MOVR2,#10H
CLRC
Mult10_DATA3:
MOVA,@R0
ADDCA,@R0;*2*2*2
MOV@R0,A
INCR0
DJNZR2,Mult10_DATA3
MOVR0,#DATA1
MOVR1,#DATA2
MOVR2,#10H
CLRC
Mult10_DATA4:
MOVA,@R0;*2*2*2
ADDCA,@R1;+*2
MOV@R0,A
INCR0
INCR1
DJNZR2,Mult10_DATA4
RET
解:
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
RET
解:
DATA_ASCEQU2000H
DATA_BCDEQU3000H
NUMEQU10
ASC_TO_BCD:
MOVDPTR,#DATA_ASC
MOVP2,DPH
MOVR0,DPL
MOVDPTR,#DATA_BCD
MOVR2,#NUM
ASC_TO_BCD1:
MOVXA,@R0
ANLA,#0FH
SWAPA
MOVB,A
INCR0
MOVXA,@R0
ANLA,#0FH
ORLA,B
MOVX@DPTR,A
INCR0
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]>='0')&&(s[i]<='9'))
tmp[i]=s[i]-48;
elseif((s[i]>='a')&&(s[i]<='f'))
tmp[i]=s[i]-'a'+10;
elseif((s[i]>='A')&&(s[i]<='F'))
tmp[i]=s[i]-'A'+10;
else
tmp[i]=0;
result=result+tmp[i]*count;
count=count*16;
}
returnresult;
}
解:
#include
#include
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 return0; 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: x=28-50*(12/12)=256-50=CEH =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 SJMP$ T0_INT: MOVTL0,#0B0H MOVTH0,#3CH CPLP2.0 RETI 2.采用c51语言 定时为50ms,采用方式1,X=216-50000*(12/12) #include 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 { TL0=(65536–500000)%256; TH0=(65536–500000)/256; P2_0=! P2_0; } 解: 1.采用汇编语言 定时为100ms,采用方式1,X=216-100000*(6/12)=3CB0H,当中断3次时清0,满10次重新置1。 ORG000BH LJMPT0_INT MAIN: MOVTMOD,#01H MOVTH0,#3CH MOVTL0,#0B0H MOVR2,#0 SETBET0 SETBIE SETBTR0 SETBP1.0 SJMP$ T0_INT: MOVTL0,#0B0H MOVTH0,#3CH INCR2 CJNER2,#3,T0_INT1 CLRP1.0 RETI T0_INT1: CJNER2,#10,T0_INT2 SETBP1.0 MOVR2,#0 T0_INT2: RETI 2.采用c51语言 定时为100ms,采用方式1,X=216-100000*(6/12) #include sbitP1_0=P1^0; ucharNUM=0; voidmain(void) { TMOD=0x01; P1_0=1; TH0=(65536–500000)/256; TL0=(65536–500000)%256; EA=1; ET0=1; TR0=1; Do{}while (1); } Voidtimer0(void)interrupt1 { TL0=(65536–500000)%256; TH0=(65536–500000)/256; NUM++; If(NUM==3)P1_0=0; Elseif(NUM==10) { NUM=0; P1_0=1; } } 解: 1.采用汇编语言 定时为100ms,采用方式1,X=216-100000*(6/12)=3CB0H,当中断10次时清0,满20次重新置1。 ORG000BH LJMPT0_INT MAIN: MOVTMOD,#01H MOVTH0,#3CH MOVTL0,#0B0H MOVR2,#0 SETBET0 SETBIE SETBTR0 SETBP1.7 SJMP$ T0_INT: MOVTL0,#0B0H MOVTH0,#3CH INCR2 CJNER2,#10,T0_INT1 CLRP1.7 RETI T0_INT1: CJNER2,#20,T0_INT2 SETBP1.7 MOVR2,#0 T0_INT2: RETI 2.采用c51语言 定时为100ms,采用方式1,X=216-100000*(6/12) #include sbitP1_7=P1^7; ucharNUM=0; voidmain(void) { TMOD=0x01; P1_7=1; TH0=(65536–500000)/256; TL0=(65536–500000)%256; EA=1; ET0=1; TR0=1; Do{}while (1); } Voidtimer0(void)interrupt1 { TL0=(65536–500000)%256; TH0=(65536–500000)/256; NUM++; If(NUM==10)P1_7=0; Elseif(NUM==20) { NUM=0; P1_7=1; } } 解: 1.采用汇编语言 定时为100ms,采用方式1,X=216-100000*(6/12)=3CB0H,当中断10次时p1.0=0,外部INT0中断时p1.0=1,启动定时器。 ORG0000H LJMPMAIN ORG0003H LJMPINT0_INT ORG000BH LJMPT0_INT MAIN: MOVTMOD,#01H MOVTH0,#3CH MOVTL0,#0B0H MOVR2,#0 SETBET0 SETBIE SETBEX0 SETBIT0 SETBP1.0 CLRP1.1 SJMP$ T0_INT: MOVTL0,#0B0H MOVTH0,#3CH INCR2 CJNER2,#10,T0_INT2 SETBP1.0 CLRP1.1 CLRTR0 T0_INT2: RETI INT0_INT: SETBTR0 MOVR2,#0 CLRP1.0 SETBP1.1 RETI 2.采用c51语言 定时为100ms,采用方式1,X=216-100000*(6/12) #include sbitP1_0=P1^0; sbitP1_1=P1^1; ucharNUM=0; voidmain(void) { TMOD=0x01; P1_0=1; P1_1=0; TH0=(65536–500000)/256; TL0=(65536–500000)%256; EA=1; ET0=1; EX0=1; IT0=1; Do{}while (1); } Voidtimer0(void)interrupt1 { TL0=(65536–500000)%256; TH0=(65536–500000)/256; NUM++; If(NUM==10) { P1_0=1; P1_1=0; TR0=0; } } VoidINT_0(void)interrupt0 { P1_0=0; P1_1=1; TR0=1; NUM=0; } } 解: 外部脉冲由管脚输入,可设T0工作于定时器方式1,计数初值为0,当输入高电平时对T0计数,当高电平结束时,计数值乘上机器周期数就是脉冲宽度。 工作方式控制字TMOD=00001001B=09H,计数初值TH1=00、TL0=00H。 汇编语言程序: ORG0000H LJMPMAIN ORG0100H 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 SJMP$ END C语言程序: #include unsignedchardata*p; voidmain(void) { TMOD=0x09;/*T0工作在定时器方式1,GATE=1*/ TH0=0; TL0=0; do{}while(P3.2);/*等待/P3.2引脚变为低电平*/ TR0=1;/*启动定时器/计数器0*/ do{}whi
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MCS51 单片机 作业 解答