《单片机原理与应用》作业第二章:第1、3、5、8、9、10、11题1.MCS-51系列单片机内部有哪些主要的逻辑部件P10答:程序存储器、数据存储器、中断系统、定时器/计数器、串行口、4个并行I/O、特殊功能寄存器、CPU。3.MCS-51内部RAM区功能如何分配?如何选用4组工作寄存器中的一组作为当前的工作寄存器组?位寻址区域的字节地址范围是多少?P14答:MCS-51内部RAM分三个区域,00H~1FH为寄存器工作区、20H~2FH为位寻址区、30H~7FH为用户区。通过PSW中的RS1、RS0来设置当前工作寄存器组。当RS1RS0=00时,选择寄存器1组,地址为00H~07H;当RS1RS0=01时,选择寄存器2组,地址为08H~0FH,当RS1RS0=10时,选择寄存器2组,地址为10H~17H,当RS1RS0=11时,选择寄存器3组,地址为18H~1FH。位寻址区域的字节地址范围为20H~2FH。5.8031设有4个8位并行端口,若实际应用8位I/O,应使用P0~P3中哪个端口传送?16位地址如何形成?答:若实际应用8位I/O,应使用P1口传送。16位地址的低8位地址由P0端口给出,高8位地址由P2端口给出。(8031没有内部程序存储区,只能外接P3有第二功能)8.MCS-51的时钟周期、机器周期、指令周期是如何分配的?当振荡频率为10MHz时,一个机器周期为多少微秒?P25答:指令周期:CPU执行一条指令的时间称为指令周期。机器周期:MCS-51典型的指令周期为一个机器周期。时钟周期:即为振荡周期。每个机器周期由6个状态周期组成,每个状态周期由2个振荡周期组成,即一个机器周期由12个振荡周期组成。若MCS-51振荡频率为12MHz,则每一个指令周期(机器周期)为1us。当振荡频率为10MHz时,一个机器周期为1121.210sMHz9.在MCS-51扩展系统中,片外程序存储器和片外数据存储器地址一样时,为什么不会发生冲突?答:因为MCS-51系列单片机的存储器组织采用的是哈佛结构,即将程序存储器和数据存储器分开,程序存储器和数据存储器具有各自独立的寻址方式、寻址空间和控制信号。访问时用的指令也不一样。对外部程序存储器,使用MOVC指令;对外部数据存储器,使用MOVX指令。10.MCS-51的P3口具有哪些第二种功能?P19答:P3口的第二功能定义端口引脚第二功能P3.0RXD(串行输入口)P3.1TXD(串行输出口)P3.2INT0(外部中断0)P3.3INT1(外部中断1)P3.4T0(定时器0外部中断)P3.5T1(定时器1外部中断)P3.6WR(外部数据存储器写信号)P3.7RD(外部数据存储器读信号)11.位地址7CH与字节地址7CH有什么区别?位地址7CH具体在内存中什么位置?答:字节地址7CH是内部RAM的实际地址,其存储空间为一个字节,处于用户区,只能按字节寻址。位地址7CH不是内部RAM的实际地址,其存储实间为一个二进制位,要通过位寻址才能找到。位地址7CH位于内部RAM的位寻址区20H~2FH范围内,具体为字节地址2FH从低位算起的第5位位地址。(7CH12420H-2FH128)第三章:第2、3、7、8、9、10题2.什么是寻址方式?MCS-51单片机有哪几种寻址方式?P36答:寻址方式是指令中确定操作数的形式。单片机寻址方式有:立即寻址、直接寻址、寄存器寻址、寄存器间接寻址、基址寄存器+变址寄存器的间接寻址、相对寻址和位寻址。3.指出下列指令中画线的操作数的寻址方式。MOVR0,#55H答:立即寻址MOVA,2AH答:直接寻址MOVA,@R1答;寄存器间接寻址MOV@R0,A答:寄存器寻址DIVA,B答:寄存器寻址ADDA,R7答:寄存器寻址MOVXA,@DPTR答:寄存器间接寻址MOVDPTR,#0123H答:立即寻址MOVCA,@A+DPTR答:基址寄存器+变址寄存器间接寻址INCDPTR答:寄存器寻址7.为什么要进行十进制调整?调整方法是什么?答:因为在单片机,表示0~9之间的十进制数是用4位二进制数表示的,即BCD码。而在运算过程中,是按二进制规则进行的,即每位相加大于16时进位,十进制数是大于10时进位。因此BCD码运算时,结果大于9时得到的结果不是正确的,必须进行调整。调整方法是在加法指令后用指令DAA进行调整。(注意,减法指令不可以使用DA进行调整)8.编程实现两个一字节压缩型BCD码的减法。设被减数地址在R0中,减数地址在R1中,差仍存于被减数地址单元中。(BCD码减法不考)答:CLRCMOVA,#9AHSUBBA,@R1ADDA,@R0DAAMOV@R0,A也可以在开头改为:SETBCMOVA,#99H9.把片外数据存储器8000H单元中的数据读到累加器中,应用哪几条指令?答:MOVDPTR,#8000HMOVXA,@DPTR外部数据存储器(@R0、@R1、DPTR)10.已知内部RAM中,(A)=35H,(R0)=6FH,(P1)=0FCH,(SP)=0C0H答:(1)MOVR0,A答:(R0)=35H(2)MOV@R0,A答:(6FH)=35H(3)MOVA,#90H答:(A)=90H(4)MOVA,90H答:(A)=(P1)=0FCH/P1的物理地址是90HP15(5)MOV80H,#81H答:(80H)=81H(6)MOVX@R0,A答:(6FH)=35H(7)PUSHA答:(SP)=0C1H,(0C1H)=35H(8)SWAPA答:(A)=53H(9)XCHA,R0答:(A)=6FH,(R0)=35H第四章:第2、3、6、11、12题2.在汇编语言程序设计中,为什么要采用标号来表示地址?标号的构成原则是什么?使用标号有什么限制?注释段起什么作用?P69答:标号位于语句的开始,代表语句的地址,采用标号便于在编写程序时,实现跳转、循环等程序控制转移。标号由以字母开头的字母和数字组成。标号与指令间要用冒号“:”分开,标号与“:”之间不能有空格,“:”与操作码之间可以有空格。注释段放在语句的最后,以“;”开始,为不可执行部分,对程序进行解释说明。3.MCS-51汇编语言有哪几条常用伪指令?各起什么作用?答:(1)设置起始地址伪指令ORG格式:ORG起始地址作用:ORG伪指令总是出现在每段源程序或数据块的开始,可以使程序、子程序或数据块存放在存储器的任何位置。若在源程序开始处不放ORG指令,则汇编将从0000H单元开始编排程序。(2)定义字节伪指令DB格式:〈标号:〉DB〈项或项表〉作用:从指定地址(标号)开始,定义字节数据,把项或项表的数值存入从标号开始的连续单元中。(3)定义字伪指令DW格式:〈标号:〉DW〈项或项表〉作用:从指定地址(标号)开始,定义16位数据,常用于建立地址表,16位数据的高8位存低地址,低8位存高地址。(4)预留存储区伪指令DS格式:〈标号:〉DS〈表达式〉作用:由标号指定的单元开始,定义一个存储区,以给程序使用。存储区内预留的存储单元数由表达式的值决定。(5)为标号赋值伪指令EQU格式:〈标号:〉EQU数或汇编符号作用:将操作数中的地址或数据赋给标号字段的标号,又称为等值指令。(6)数据地址赋值伪指令DATA格式:〈标号:〉DATA数或表达式作用:可以把数据或可求值的表达式赋给字符名,常在程序中定义数据地址。(7)位地址符号伪指令BIT格式:字符名BIT位地址作用:把位地址赋给字符名称。(8)源程序结束伪指令END格式:〈标号:〉END〈表达式〉作用:END命令通知汇编程序结束汇编。在END之后,所有的汇编语言指令均不作处理。6.外部RAM中从1000H到10FFH有一个数据区,现在将它传送到外部RAM中2500H单元开始的区域中,编写有关程序。答:第一种方法:START:MOVR0,#00HMOVDPTR,#1000HLOOP:MOVXA,@DPTRMOVDPH,#25HMOVX@DPTR,AMOVDPH,#10HINCDPTR//INCR0DJNZR0,LOOPSJMP$第二种方法:START:MOVR7,#00HMOVR1,#10HMOVR2,#00HMOVR3,#25HMOVR4,#00HLOOP:MOVDPH,R1MOVDPL,R2MOVXA,@DPTRINCDPTRMOVR1,DPHMOVR2,DPLMOVDPH,R3MOVDPL,R4MOVX@DPTR,AINCDPTRMOVR3,DPHMOVR4,DPLDJNZR7,LOOPSJMP$第三种方法:MOVP2,#25HMOVR0,#00HMOVR3,#00HMOVDPTR,#1000HLOOP:MOVXA,@DPTRMOVX@R0,AINCDPTRINCR0DJNZR3,LOOPSJMP$11.设系统晶体振荡频率为12MHz,请编写延时50ms的延时子程序。答:1个机器周期为1us,一条DJNZ耗时2us。所以50ms=2us×250×100,程序如下:DELAY:MOVR4,#100DELAY1:MOVR3,#250DELAY2:DJNZR3,DELAY2DJNZR4,DELAY1RET12.分析下列程序中各条指令的作用,并说明运行后相应寄存器和内存单元的结果。MOVA,#34H;将立即数34H送到累加器A,(A)=34HMOVB,#0ABH;将立即数0ABH送到寄存器B,(B)=0ABHMOV34H,#78H;将立即数78H送到内部RAM中的34H单元中,(34H)=78HXCHA,R0;寄存器R0与累加器A交换数值,(R0)=34HXCHA,@R0;寄存器R0的值所表示的地址中的数值与累加器A的数值交换,(A)=(34H)=78HXCHA,B;寄存器B与累加器A交换数值,(A)=0ABH,(B)=78HSJMP$第五章:第2、6、9题2.8051单片机的定时器/计数器有哪几种工作方式?各有什么特点?P105答:8051单片机的定时器/计数器有4种工作方式,分别是:(1)工作方式0:M1M0=00,为13位定时器/计数器,其计数器由THi的全8位和TLi的低5位构成,TLi的高3位未用。当TLi的低5位计满时,向THi进位,THi溢出后对中断标志位TFi置“1”,并申请中断。Ti是否溢出可用软件查询TFi是否为“1”。计数值范围为1~8192,如需再次定时或计数,需要用指令重置时间常数。(2)工作方式1:M1M0=01,与工作方式0基本相同,不同之处在于其为16位定时器/计数器,计数值范围为1~65536。如需再次定时或计数,需要用指令重置时间常数。(3)工作方式2:M1M0=10,为可重装初值的8位定时器/计数器。把16位的计数器拆成两个8位计数器,TLi用作8位计数器,THi用来保存初值。每当TLi计满溢出时,可自动将THi的初值再装入TLi,继续计数,循环重复。其计数范围为1~256。(4)工作方式3:M1M0=11,T0分成两个独立的8位计数器,其中TL0既可以作计数器使用,又可以作定时器使用。而TH0只能作8位定时器使用,并占用了T1的控制启动位TR1和溢出标志位TF1。T1只能工作在方式0、方式1或方式2,只能用在不需中断控制的场合。6、编程实现一个利用定时器T1产生一个50HZ(20000us)的方波,由p1.3输出,设晶体振荡器频率为12MHz。解:START:MOVTMOD,#10H;//工作方式1MOVTH0,#D8MOVTL0,#F0SETBTR0LOOP:JNBTF0,LOOPCPLP1.3CLRTF0CLRTR0AJMPSTART9.设晶体振荡器频率为6MHz。编程实现,使用定时器T0工作在方式2、定时,在P1.4输出周期为100us,占空比为4:1的矩形脉冲。答:因为晶体振荡器频率为6MHz,所以1个机器周期为2us。因为占空比为4:1,所以将矩形脉冲分为5分,前4份P1.4输出高电平,第5份输出低电平。则计数初值满足:8100(2)2205x,解得计数初值为246=0F6H,所以TH0=TL0=0F6H。TMOD设置:0