您好,欢迎访问三七文档
当前位置:首页 > 机械/制造/汽车 > 机械/模具设计 > MCS-51作业讲解
第二章习题与思考题1.举例说明你所知道的MCS-51有哪些典型产品,它们有何区别?答:有8031、8051、8751。8051内部有4KBROM;8751内部有4KBEPROM8031片内无ROM;除此之外,三者的内部结构及引脚完全相同。2.MCS-51单片机内部包含哪些主要逻辑功能部件?答:有8位CPU、4KB的ROM、可寻址64KB的程序存储器和数据存储器、128B的片内RAM和21个SFR、两个16位的定时/计数器、4个8位的I/O并行口、一个全双工异步串行口、5个中断源,两个中断优先级、一个内部时钟发生器。3.MCS-51单片机内256B的数据存储器可分为几个区?分别作什么用?答:分为二大部分四个不同的区:⑴00H~7FH单元组成低128字节的片内RAM区,其中00H~1FH共32个单元通常作为工作寄存器区;20H~2FH共16个字节,这些单元可以构成布尔处理机的存储器空间;30H~7FH共80个单元为用户RAM区,作堆栈或数据缓冲区。⑵80H~FFH单元组成高128字节的专用寄存器(SFR)区。5.MCS一51单片机的EA、ALE、PSEN信号各自的功能是什么?答:EA的主要作用是选择程序memory。当EA=0时CPU只能访问片外memory;当EA=1时,如果PC﹤﹦0FFFH时,则CPU访问片内ROM,否则CPU自动转向外部EPROM。ALE有三个作用。①当CPU访问外部memory初时,产生正脉冲ALE信号输出,在其后沿将P0口输出的低8位地址锁存于外部地址锁存器中;②访问外部memory的过程中,ALE端仍以不变的频率周期性的输出正脉冲信号,且fALE=1/6fosc,所以可用作对外输出的时钟信号和定时作用;③当片内有EPROM时,可作为编程脉冲输入端使用。PSEN:外部程序memory(EPROM)选通信号线,当CPU读取外部程序时,PSEN每个机器周期两次有效。⒍MCS-51单片机如何实现工作寄存器组R0-R7的选择?答:用户可通过改变PSW中的RS1和RS0的两位的值选择相应的工作寄存器组。⒎什么是时钟周期、机器周期、指令周期?当单片机时钟频率为12MHz时,一个机器周期是多少?ALE引脚的输出频率是多少?答:时钟周期:指为单片机提供时钟信号的振荡源的周期.机器周期T机:指CPU完成某些基本操作的所需要的时间。当单片机时钟频率为12MHz时:T机=12T振=fosc/12=1us。fALE=fosc/6=2MHz指令周期T指:指令周期是指执行一条指令所需要的时间。补充作业:①开机复位后,CPU使用的是哪组工作寄存器?它们的地址是什么?CPU如何确定和改变当前工作寄存器组?答:开机复位后,CPU使用第0组工作寄存器,地址是00H~07H,可通过对PSW状态字寄存器中RS1及RS0两位的设置来确定和改变CPU当前使用的工作寄存器组。②MCS-51单片机的程序存储器和数据存储器共处同一地址空间为什么不会发生总线冲突?答:虽然数据存储器的地址与程序存储器的地址都是0000~FFFFH,但CPU对它们的访问是相互独立的,不会产生二意性,即CPU给出一个地址,不会同时选中二个存储单元。因为数据存储器在硬件上有RD或WR信号选通,软件上有MOVX类指令访问。而程序存储器在硬件上有PSEN信号选通,软件上有MOVC类指令访问。③位地址7CH与字节地址7CH如何区别?位地址7CH具体在片内RAM中什么位置?答:位地址7CH与字节地址7CH靠所使用的指令或指令中所使用的寄存器来区别,当使用位指令或指令中使用“C”寄存器时表明此时的地址是位地址,其余情况均为字节地址。位地址7CH具体在片内RAM2FH单元中D4位。2.设内部RAM中59H单元的内容为50H,写出当执行下列程序断后寄存器A,R0和内部RAM中50H、51H单元的内容为何值?第三章习题与思考题MOVA,59H;MOVR0,A;MOVA,#00;MOV@R0,A;MOVA,#25H;MOV51H,A;MOV52H,#70H;(A)=50H(R0)=50H(A)=00H(50H)=00H(A)=25H(51H)=25H(52H)=70H⒋MOVCA,@A+DPTR与MOVXA,@DPTR指令有何不同?答:MOVCA,@A+DPTR指令访问的对象是程序存储器,操作数在(A+DPTR)所指向的存储单元中;而MOVXA,@DPTR指令访问的对象是外部数据存储器,操作数在DPTR所指向的存储单元中。7.试分析下列程序段,当程序执行后,位地址00H和01H中的内容将为何值?P1口的8条I/O线为何状态?CLRC;MOVA,#66H;JCLOOP1;CPLC;SETB01H;LOOP1:ORLC,ACC.0;JBACC.2,LOOP2;……LOOP2:MOVP1,A;(01H)=1(00H)保持原有内容P1=66H8.要完成以下的数据传送,应如何用MCS-51指令实现?(4)片外RAM1000H单元的内容送片内RAM20H单元;MOVDPTR,#1000H;MOVXA,@DPTR;MOV20H,A;⒑已知:(A)=83H,(R0)=17H,(17H)=34H,请写出下列程序段执行后A中的内容。ANLA,#17HORL17H,AXRLA,@R0CPLA;(A)=03H;(17H)=37H;(A)=34H;(A)=0CBHMOVC,P1.3ANLC,Acc.2MOVPSW.5,CMOVC,B.5ANLC,P1.1ORLC,PSW.5MOVPSW.5,C13.请用位操作指令编写实现下面逻辑表达式的程序。⑴PSW.5=P1.3×Acc.2+B.5×P1.1第四章习题与思考题(P73)⒈若有两个符号数x,y分别存放在内部存储器50H、51H单元中,试编写一个程序实现x×10+y,结果存入52H,53H单元中.CLRCMOVR0,#50HMOVB,#10MOVA,@R0MULABINCR0ADDA,@R0INCR0MOV@R0,AINCR0XCHA,BADDCA,#00HMOV@R0,ARET⒉在以3000H为首地址的外部单元中,存放了14个ASCII码表示的0~9之间的数,试编写程序将它们转换为BCD码,并以压缩型BCD码的形式存放在以2000H为首地址的外部单元中.MOVDPTR,#2000HMOVP2,#20HMOVR0,#00HMOVR3,#07HLOOP:MOVXA,@R0INCR0SUBBA,#30HMOVB,AMOVXA,@R0INCR0SUBBA,#30HSWAPAORLA,BMOVX@DPTR,AINCDPTRDJNZR3,LOOPRET⒊采样的5个值分别存放在R0、R1、R2、R3、R4中,求出它们的中间值,并存放在R2中.MOVR2,#4H;置外循环计数器LOOP0:MOVR0,#00H;置内循环地址指针初值MOVR1,#01H;下一存储单元地址指针MOVR3,R2;置内循环计数器初值LOOP1:MOVA,@R0;取相邻两单元中的数MOV30H,A;低地址内容→30HMOVA,@R1;高地址内容→A中解:设R0~R4的地址分别为00H~04HCJNEA,30H,NEXT;两数比较,不等转NEXTSJMPNOCHA;相等转NOCHA(不交换位置)NEXT:JNCNOCHA;C=0则(A)>(30H)不交换,转NOCHA(@R1R0@)MOV@R0,A;交换R0与R1指向单元的数XCHA,30H;将@R1中的数(A)与30H(原R0)交换MOV@R1,A;使A(原R0中数)→@R1NOCHA:INCR0;调节地址指针INCR1DJNZR3,LOOP1;内循环结束判别DJNZR2,LOOP0;外循环结束判别RET⒋以BUF1为起始地址的外部数据存储器区中,存放有16个单字节无符号二进制数,试编写一程序,求其平均值并送BUF2单元.MOVDPTR,#BUFMOVR5,#0FHMOVR4,#00HMOVA,@DPTRINCDPTRLP:ADDA,@DPTRJNCLP1INCR4CLRCLP1:INCDPTRDJNZR5,LPMOVR3,AMOVR5,#04HLP2:MOVA,R4RRCAMOVR4,AMOVA,R3RRCAMOVR3,ACLRCDJNZR5,LP2MOVBUF2,R3RET⒌试编写程序,将内部RAM中DATA1单元开始的20个单字节数据依次与DATA2单元为起始地址的20个单字节数据进行交换.MOVR0,#DATA1MOVR1,#DATA2MOVR2,#20LP1:MOVA,@R0XCHA,@R1MOV@R0,AINCR0INCR1DJNZR2,LP1RET⒍某场歌手赛,共有10个评委,试编译程序,输入10个评分,去掉最高分和最低分,求平均分(均为BCD码).MOVR2,#10;置外循环计数器LOOP0:MOVR0,#50H;置内循环地址指针初值MOVR1,#51H;下一存储单元地址指针MOVR3,R2;置内循环计数器初值LOOP1:MOVA,@R0;取相邻两单元中的数MOV30H,A;低地址内容→30HMOVA,@R1;高地址内容→A中CJNEA,30H,NEXT;两数比较,不等转NEXTSJMPNOCHA;相等转NOCHA(不交换位置)NEXT:JNCNOCHA;C=0则(A)>(30H)不交换,转NOCHA(@R1R0@)MOV@R0,A;交换R0与R1指向单元的数XCHA,30H;将@R1中的数(A)与30H(原R0)交换MOV@R1,A;使A(原R0中数)→@R1NOCHA:INCR0;调节地址指针INCR1DJNZR3,LOOP1;内循环结束判别DJNZR2,LOOP0;外循环结束判别RETMOVR0,#51HMOVR5,#07HMOVR4,#00HMOVA,@R0INCR0LP:ADDA,@R0JNCLP1INCR4CLRCLP1:INCR0DJNZR5,LPMOVR3,AMOVR5,#04HLP2:MOVA,R4RRCAMOVR4,AMOVA,R3RRCAMOVR3,ACLRCDJNZR5,LP2RET⒎编写将一个单字节十六进制数转换为十进制数的子程序.BINBCD1:MOVB,#100DIVAB;A=百位数,B=余数(十位及个位数)MOV@R0,A;百位数存入RAMINCR0入口:A←十六进制数出口:R0=十位数和个位数地址指针MOVA,#10;XCHA,B;DIVAB;A=十位数,B=个位数,(A、B中高4位一定为0)SWAPAADDA,B;数组合到AMOV@R0,A;存入RAM⒏在内部RAM的BLOCK开始的单元中有一无符号数据块,数据块长度存入LEN单元.试编程求其中的最大数并存入MAX单元中.MOVR0,#BLOCKMOVR2,LENDECR2MOVA,@R0LP:INCR0CLRCCJNEA,@R0,LP2SJMPLP1LP2:JNCLP1MOVA,@R0LP1:DJNZR2,LPMOVMAX,ARET⒐试编程将内部RAM中41H~43H单元中的数左移4位,移出部分送40H单元.MOV40H,#00HMOVR4,#04HLP1:MOVR0,#41HMOVR3,#03HCLRCLP0:MOVA,@R0RLCAXCHA,@R0INCR0DJNZR3,LP0XCHA,40HRLCAXCHA,40HDJNZR4,LP1RET⒑在外部RAM的BLOCK单元开始有一数据块,数据块长度存入内部RAM的LEN单元。试编程统计其中正数、负数和零的个数分别存入内部RAM的PCOUNT、MCOUNT和ZCOUNT单元。MOVZCOUNT,#00H;存0的个数MOVPCOUNT,#00H;存正数的个数MOVMCOUNT,#00H;存负数的个数MOVDPTR,#BLOCKMOVR4,LENLOOP1:MOVXA,@DPTRRLCAJCL2MOVXA,@DPTRCJNEA,#00H,L1INCZCOUNTSJMPLOOP2L1:INCPCOUNTSJMPLOOP2L2:INCMCOUNTLOOP2:INCDPTRDJNZR4,LOOP1R
本文标题:MCS-51作业讲解
链接地址:https://www.777doc.com/doc-7311293 .html