您现在所在的是:

单片机论坛

回帖:0个,阅读:1552 [上一页] [1] [下一页]
912
sfmcu
文章数:44
年度积分:50
历史总积分:912
注册时间:2006/8/22
发站内信
08年优秀博客奖
发表于:2008/8/28 21:14:00
#0楼
 
一[绪论]
1.简述单片计算机的基本特征。
  2.叙述mcs-51系列单片计算机的三种产品之间的区别。
  3.说明mcs-51系列与mcs-52系列产品的异同点。
  4.说明mcs-51系列与mcs-51(c)系列产品之间的区别。
  5.为什么说普通用户不能选用8051、80c51和8052三种产品。
  6.叙述mcs-51系列单片计算机内含的资源。
  7.mcs-51系列单片计算机外部连接的石英振荡器的最高频率是多少?
  8.mcs-51(2)系列单片计算机采用哪两种制造工艺 ?各具什么特点?
  9.说出几个单片计算机产品的制造商。
  10.简述单片计算机技术的发展趋势和前景。
(参考答案)
  1.单片计算机的特征是在一块半导体硅片上集成了cpu 、rom、ram和i/o电路等功能部件,这块芯片就是一个计算机的硬件系统。
  2.8031、8051和8751是mcs-51系列单片计算机的三种产品。它们的区别是:8031内部没有集成eprom ;8051内部集成的是用户不可编程的rom;8751内部集成了eprom。
  3.mcs-52系列单片机内部有256字节ram ,3个计数器。mcs-51系列内部只有128字节ram,2个计数器。
  4.mcs-51(c)系列产品比mcs-51系列功耗更低,更节能。
  5.这是因为8051、8052和80c51这3种产品内部集成的是普通用户不能编程的rom存储器。
  6.mcs-51系列单片机内部资源有:振荡和时钟电路、cpu、eprom、ram和i/o电路等。
  7.mcs-51系列的最高振荡频率是12mhz。
  8.mcs-51(2)系列产品的两种工艺是 :hmos和chmos 。前者速度高;后者速度高而且功耗低。
  9.intel、motorola、zilog、philips和nec等。
  10.内部集成的资源更多,运算能力更强,运算精度更高,指令系统的编程效率更高。
二[51单片机系统结构]
1.评价mcs-51系统以累加器为中心的特点。
  2.mcs-51系统使用地址/数据复合总线,如何分离地址和数据信息,使二者不发生冲突?
  3.简述mcs-51系统外接石英振荡器后 ,接通电源即可正常工作的原因。
  4.在8031和8751芯片上,ale/-prog引脚的作用有什么不同?
  5.mcs-51系统直接连接的外部中断源有几个?为什么?
  6.mcs-51系统存取外部扩展存储器和 i/o 电路使用哪些控制信号?
  7.mcs-51系统外部计数脉冲通过哪些引脚输入?
  8.简述rst输入的控制作用。
  9.mcs-51系统全双工通信使用哪些引脚?
  10.叙述mcs-51系统的振荡周期、时钟周期、机器周期和指令周期四者之间的内在关系。
  11.使用10mhz的石英振荡器 ,mcs-51系统的振荡周期、时钟周期、机器周期和指令周期各自的时间?
  12.mcs-51系统复位后,默认的工作寄存器组是哪个?
  13.mcs-51系统的堆栈开辟有什么限制?
  14.mcs-51系统的堆栈操作有哪些特点?
  15.p0端口作为普通i/o端口使用时,为什么需要外接上拉电阻?
  16.p1端口作为输入和输出操作时,应该注意什么问题?
  17.mcs-51系统复位后,p1端口的初始状态?这种状态提供了什么便利?
  18.简述读端口锁存器与读端口引脚的区别。
  19.简述冻结运行方式。如何退出冻结运行方式?
  20.简述掉电保持方式。如何退出掉电保持方式?
本章练习(参考答案)
  1.mcs-51系统的算术运算指令只能用累加器作为目地址,这就是以累加器为中心的系统特点。
  2.mcs-51系统采用8位地址数据复合总线ad7~ad0设计 ,通常使用74373地址锁存器来分离地址和数据信息。
  3.mcs-51系统内部集成了振荡和时钟电路。因此,只要外接石英振荡器并接通电源后,就可以正常工作。
  4.对于8031芯片,不存在对内部eprom编程的问题。因此,ale引脚的功能只用于锁存地址 ,别无他用。对于8751芯片,需要对内部eprom进行编程和校验的操作。因此 ,ale引脚的正常功能用于锁存地址,编程操作时,用于输入编程脉冲。
  5.mcs-51系统设计了两条中断输入线int0和int1,可以直接连接两个外部中断源。
  6.mcs-51系统访问外部扩展存储器和i/o电路使用rd 、wr、psen、ale等控制信号。
  7.mcs-51系统的外部计数脉冲通过p3·4和p3·5引脚输入。
  8.mcs-51系统的rst输入的作用是复位系统。正常工作时,rst输入是无效的。
  9.p3·0=rxd作为接收,p3·1=txd作为发送。
  10.时钟周期=2个振荡周期 ;机器周期=6个时钟周期=12个振荡周期;指令周期=1/2/4机器周期。
  11.使用10mhz的石英振荡器,振荡周期=0.1μs;时钟周期=0.2μs;机器周期=6个时钟周期=1.2μs 。指令周期=1/2/4机器周期=1.2μs/2.4μs/4.8μs。
  12.mcs-51系统复位后,默认的工作寄存器组r7~r0对应内部00h~07h单元。
  13.mcs-51系统的堆栈开辟受到的限制是 :只能在内部开辟堆栈存储区。
  14.mcs-51系统的堆栈操作的特点是:“向上生成” ,即堆栈向高地址方向延伸,栈底单元底地址值最小。
  15.p0端口作为普通i/o端口使用时,输出级管子是漏级开路的。因此需要外接上拉电阻,以便形成高低电平状态。
  16.p1端口作为输出操作时,没有限制条件 。p1端口作为输入操作时,必须保证输出级管子是截止的,否则输入恒为零。
  17.mcs-51系统复位后,p1端口的输出级管子全部截止 ,支持p1端口直接进行输入操作。
  18.读端口锁存器是执行端口作为目地址的指令 。读端口引脚是执行端口作为源操作数的指令。
  19.mcs-51系统被冻结后,可以通过复位操作或者中断请求 ,使其退出冻结状态。
  20.mcs-51系统掉电方式后 ,只能通过复位操作,使其退出掉电状态。
三[存储器与寻址方式]
1.叙述mcs-51系统存储器结构的设计特点。
  2.简述mcs-51系统内部数据存储空间与i/o空间的设计原则。
  3.简述mcs-51系统外部数据存储空间与i/o空间的设计原则。
  4.简述mcs-51系统访问外部程序存储器使用的控制信号。
  5.简述mcs-51系统访问外部数据存储器使用的控制信号。
  6.简述mcs-51系统访问外部扩展i/o端口使用的控制信号。
  7.简述寻址方式的逻辑意义。
  8.如何区别立即寻址与直接寻址?
  9.使用寄存器间接寻址应该注意什么问题?
  10.在特殊功能寄存器区,如何区别寄存器寻址与直接寻址?
  11.相对寻址与其他寻址方式的不同在哪里?
  12.28h·6的位地址如何确定?a·5的位地址又如何确定?
  13.在特殊功能寄存器区,如何判断哪些电路支持位操作?
  14.如何选择工作寄存器组?默认的工作寄存器组是哪个?
  15.在mcs-51系统中,堆栈指针的最小值是多少?说明理由。
  16.在工作寄存器组中,哪两个寄存器功能特别?为什么说它们功能特别?
  17.基变址寻址专门使用在什么场合?为什么不能使用于其他场合?
  18.估算mcs-51系统堆栈的最大容量。
  19.简述在基变址寻址方式中,使用pc指针与使用dptr指针的不同之处。
  20.访问 mcs-51 系统的内部资源,为什么不能使用dptr指针间址?
  21.在mcs-51系统设计的7种寻址方式中 ,用于访问内部资源的寻址方式有几种?
  22.在mcs-51系统中,用于访问外部资源的寻址方式有几种?
本章练习(参考答案)
  1.mcs-51系统存储器结构的设计特点是 :程序存储器与数据存储器各自独立编址 ;内部数据存储器与外部数据存储器各自独立编址;外部扩展的数据存储器与i/o电路统一编止。
  2.mcs-51系统内部数据存储空间地址安排在00h~7fh范围。内部i/o空间地址安排在80h~0ffh范围。
  3.mcs-51系统外部数据存储空间与i/o空间的地址采用统一编排,使用相同操作码的指令访问。
  4.mcs-51系统访问外部程序存储器使用的控制信号是:psen、ale。
  5.mcs-51 系统访问外部数据存储器使用的控制信号是 :rd 、wr、ale。
  6.mcs-51系统访问外部扩展 i/o 端口使用的控制信号是:rd、wr、ale。
  7.寻址方式的逻辑意义是:在指令中指出源和目操作数的来源。
  8.区别立即寻址与直接寻址的方法是:前者使用 # 号做前缀 ,例如:#30;后者使用直接数据,例如:30h。
  9.使用寄存器间接寻址应该注意r0(1)指针值<80h。
  10.在特殊功能寄存器区,区别寄存器寻址与直接寻址的方法是:使用汇编符号a、ri、dptr属于寄存器寻址 ;其他的汇编符号如:b、sp、tmod等属于直接寻址。
  11.相对寻址与其他寻址方式的不同在于:相对寻址用于指定转移的目标指令。
  12.28h.6的位地址由模型8×n+i确定。其中:n=0~15之一,i=0~7之一 。即 28h·6 的位地址=8×8+6=70=46h 。a·5的位地址=0e0h+5=0e5h。
  13.在特殊功能寄存器区 ,凡是端口地址能够被8整除的电路都支持位操作。
  14.可以通过给rs1和rs0赋值来选择工作寄存器组。默认的工作寄存器组r7~r0与内部ram的00h~07h单元对应。
  15.在mcs-51系统中,堆栈指针的最小值是08h 。因为00h~07h单元对应工作寄存器组r7~r0,不能作为堆栈使用。
  16.在工作寄存器组中,r0和r1寄存器的功能特别。只有r0和r1寄存器可以作为寄存器间址指针使用。
  17.基变址寻址专门使用在读取程序存储器eprom的场合 。基变址寻址专门与movc指令配套,所以不能使用在其他场合。
  18.mcs-51系统堆栈的最大容量不超过120字节单元。
  19.在基变址寻址方式中,使用pc指针要注意与pc当前值有关,pc值是动态变化的。而dptr指针是静态的,其值相对固定。
  20.这是因为内部ram容量只有256字节,8位寄存器间址已经足够。
  21.内部寻址方式有:立即寻址、寄存器寻址、寄存器间址、直接寻址、位寻址和基变址。
  22.在mcs-51系统中,用于访问外部资源的寻址方式是:累加器与寄存器间址相配合。
四[指令系统]
1.mcs-51系统的内部数据传送与外部数据传送如何进行?
  2.mcs-51系统的堆栈开辟有何规定?
  3.访问 mcs-51系统的特殊功能寄存器区域应该注意什么问题?
  4.mcs-51指令系统的算术运算类指令的局限性?
  5.mcs-51指令系统的减法指令的设计特点?
  6.mcs-51指令系统的逻辑运算类指令的设计灵活性表现在哪里?
  7.jz/jnz指令的测试对象?
  8.如何判断整数运算是否产生了溢出?
  9.指出下列各组指令的本质区别。
  (1)mov a,#3;
     mov a,3;
  (2)mov 20h,28h;
     mov 20h,#28h;
  (3)mov @r0,a;
     movx @r0,a;
  (4)movx @r0,a;
     movx @drtr,a;
  (5)inc dptr;
     dec dptr;
  10.指出下列各条指令的错误所在,一言以蔽之。
  (1)movx @r0,b;
  (2)mov @drtr,a;
  (3)mov @r2,a;
  (4)movc @drtr,a;
  (5)push dptr;
  (6)push #3;
  (7)pop dptr;
  (8)add b,a;
  (9)add a,dptr;
  (10)sub a,20;
  (11)subb a,+128;
  (12)anl b,30h;
  (13)cpl p1;
  (14)rl 28h;
  (15)clr r4
  (16)clr 30h·0
  (17)jb sp·6,k1;
  (18)jnb a·8,nst;
  11.写出指令序列,完成下列操作。
  (1)外部数据存储器1000h地址单元赋值+5。
  (2)外部数据存储器1000h地址单元+1运算。
  (3)把内部40地址单元中的数据传送到外部40h地址单元。
  (4)寄存器b加5运算。
  (5)p1端口输出状态反相。
  (6)dptr指针加2。
  (7)选择10h~17h单元作为r7~r0使用。
  (8)调用子程序routine。
  (9)无条件转到check执行。
  (10)控制cpu原地踏步。
  (11)如果产生溢出,转到overflow执行。
  (12)如果逻辑运算的结果包含有偶数个1,转到flow执行。
  (13)如果自定义标志为1,转到user执行。
  (14)把dptr指针写入堆栈保护。
  (15)把立即数1000h写入堆栈。
  12.阅读下列程序段,回答当执行结束后,r0= ;a= ;(32h)= ;(40h)= ;
  mov 32h,#80h;
  mov 40h,#8;
  mov r0,#32h;
  mov a,#48h;
  mov a,@r0;
  mov @r0,40h;
  mov 40h,a;
  mov r0,#35h;
  13.如果sjmp指令的存储地址是1000h ,位移量rel是-16,问目标指令的地址是多少?
  14.某控制系统,要求根据运算结果(0~15之一)访问指定的数据表,读出对应的16位数据输出 。设运算结果(0~15之一)由内部30h单元提供,数据表存放在程序存储器首地址为first区域。读出数据的低位字节存入内部40h单元,高位字节存入内部41h单元。
  first:dw 3678h,0a3fh,4b76h,…
  15.编写指令序列,完成1357+2468的bcd码运算。
  16.编写指令序列,完成16位被乘数×8位乘数的运算。设被乘数放在内部30h、31h单元中(低字节在30h单元),乘数放在40h单元。乘积放在50h、51h和52h单元中。
  17.阅读下列指令序列,说明每条逻辑运算指令执行后 ,目操作数和psw的结果。
  mov a,#0aah;
  mov r4,#55h;
  anl a,r4;
  orl a,r4;
  xrl a,r4;
  18.ret指令与reti指令有何区别?各自使用在什么场合?
  19.使用位操作指令编写程序,完成
  运算。
  20.阅读下列程序段,分析执行结果。
    setb c;
    mov a,#66h;
    jc l1;
    cpl c;
    l1:
    jc l2;
    …
    …
    l2:
    jb a·0,l3;
    setb a·0;
    l3:
    jnb a·3,l4;
    clr a·3;
    l4:
    jbc a·7,l8;
    …
    …
    …
    l8:
    …
    …
  21.如果子程序routine的入口地址是1000h,acall routine指令的存储地址是17feh,问执行acall routine指令后,可否正确调用子程序routine?为什么?
  22.编写指令序列,控制p1端口输出为:p1·0~p1·2=0;p1·3~p1·5=1;p1·6~p1·7状态相反。
本章练习(参考答案)

1.简述异步串行接口电路的数据收发原理。
  2.简述模式0串行传送的特点。
  3.有人说在两个mcs-51系统之间采用模式0进行双机通信最为方便。对此说法发表你的见解。
  4.说明写串行缓冲器sbuf操作与读sbuf操作的不同意义。
  5.设置mcs-51系统的串行传输模式,如何编程最为简捷?
  6.说明模式1串行传送和模式2串行传送各自适用的场合。
  7.说明模式1串行传送和模式3串行传送各自适用的场合。
  8.为什么选择计数器采用计数方式2为串行传输提供波特率?
  9.在mcs-51系统使用12mhz振荡频率和波特率不加倍的情况下,分别对应的最高和最低波特率各为何值?
  10.mcs-51系统的串行接口电路为什么把ti和ri标志设计成硬件置位和软件复位?
  11.在mcs-51系统中,当cpu响应串行接口电路中断请求后,其入口地址在哪里?
  12.设系统振荡频率是6mhz,波特率是9600位/秒,选择模式1和奇校验发送任意字符。分别设计在示波器观测串行数据流的查询和中断控制程序。
本章练习(参考答案)
  1.异步串行接口电路把cpu写入的并行数据加上起始位和停止位后,转换成串行数据逐位输出。
  2.模式0串行传送的特点是:数据帧字长8位,无起始位和停止位,传输波特率是固定值。
  3.两个mcs-51系统之间采用模式0进行双机通信是不可行的。这是因为两个mcs-51系统的txd移位脉冲都是输出的。所以模式0不能用于双机通信。
  4.写串行缓冲器sbuf操作立即激活了串行接口电路的发送功能。读sbuf操作是把串行口已经转换好的并行数据读到cpu。
  5.要设置mcs-51系统的串行传输模式,使用位操作指令编程最为方便。例如:下列两条位操作指令设置模式2传送:
  setb sm0;
  clr sm1;
  6.模式1串行传送的波特率可以在一定的范围内调节。因此,模式1串行传送可以用于同类型和不同类型的计算机之间进行通信。模式2串行传送的波特率是固定不变的。因此,模式2串行传送只能使用在mcs-51同类型系统之间的通信。
  7.模式3串行传送的波特率不仅可以在一定的范围内调节,而且模式3串行传送采用9位数据,其中的最高位d8=0表示数据帧,d8=1表示地址帧,因此模式3串行传送支持多机通信系统。
  8.计数器采用何种计数方式,对于最高传送波特率没有影响。计数器采用计数方式2具有无需监视计数值何时溢出和重装计数值操作的优点,因此被采用。
  9.在使用12mhz振荡频率和波特率不加倍的情况下,mcs-51系统的最高串行波特率是31250位/秒;最低串行波特率是122位/秒。
  10.这是因为mcs-51系统的串行接口电路的发送中断和接收中断共享一个入口地址,cpu转入执行服务程序时,首先要测试ti和ri标志,确定本次中断是发送中断还是接收中断。因此,不能设计硬件自动复位ti和ri标志。
  11.在mcs-51系统中,当cpu响应串行接口电路中断请求后,自动转入程序存储器的23h单元执行。这里为串行口中断服务程序分配8个字节单元。如果存储空间不够,中断服务程序可以存储在程序存储器的其它区域,在入口地址区安排转移指令引导cpu进入服务程序。
  12.根据题意要求,设计的模式1、奇校验查询和中断控制程序如下:
  (1)中断控制程序
  org 1000h; 主程序段
  clr sm0; 设置串行口模式1发送
  setb sm1;
  mov tmod,#100000b;设置计数器1方式2计数
  mov th1,#254; 设置波特率
  mov tl1,th1;
  setb tr1; 启动计数器1计数
  setb ea; cpu开中断
  setb es; 串行口开中断
  clr tb8;
  mov a,38h; 设字符存放在38h单元
  orl a,a; 设置奇校验
  jb psw.0,output;
  setb tb8;
  output:
  mov sbuf,a; 写串行口,启动发送
  here: 
  sjmp here; 等候中断
  org 23h; 串行口中断入口地址
  ljmp routine;
  org 200h;
  routine:
  clr ti; 复位ti
  mov sbuf,a; 写串行口,启动发送
  reti; 中断返回

  (2)查询控制程序
  org 1000h; 主程序段
  clr sm0; 设置串行口模式1发送
  setb sm1;
  mov tmod,#100000b;设置计数器1方式2计数
  mov th1,#254; 设置波特率
  mov tl1,th1;
  setb tr1; 启动计数器1计数
  clr tb8;
  mov a,38h; 设字符存放在38h单元
  orl a,a; 设置奇校验
  jb psw.0,output;
  setb tb8;
  output:
  mov sbuf,a; 写串行口,启动发送
  here:
  jnb ti,here; 未发送完等待
  clr ti; 复位ti
  sjmp output; 重复发送
七[中断系统]
1.简述中断控制的含义和采用中断控制的意义。
  2.执行子程序调用与执行中断服务有何不同?
  3.mcs-51系统有哪些中断源?能否扩展更多的中断源?
  4.简述入口地址与断点地址各自的含义。
  5.何谓中断嵌套服务?实现中断嵌套服务的前提条件是什么?
  6.一般在中断服务程序的开始部分有保护断点现场的设计,如何确定要保护哪些内容?
  7.简述mcs-51系统响应中断请求的3个条件。
  8.何谓中断响应延迟?提高mcs-51系统的中断响应速度的有效方法是什么?
  9.写出mcs-51系统复位后,默认的中断优先链结构。
  10.如何动态改变mcs-51系统的中断优先链结构。
  11.mcs-51系统的外部中断请求的有效状态有几种?如何进行设置?
  12.能否通过查询ie标志的方法,控制mcs-51系统的外部中断?为什么?
本章练习(参考答案)
  1.暂时改变cpu的执行路线,控制cpu转去执行中断服务子程序,执行结束后再返回原路线继续执行原有程序。这样一种过程叫做中断。
  2.子程序调用是人为安排好的。执行中断服务是随机的。子程序的存储地址没有限制,中断服务程序的存储地址是指定的。
  3.mcs-51系统的固有中断源是:计数器0、计数器1、串行接口、int0和int1共5个中断源。通过适当设计,外部中断源的数量可以扩充。当cpu响应外部中断后,通过查询方式确定服务对象。
  4.入口地址是指中断服务程序的起始地址,这是中断控制系统设计和规定的。断点地址是指主程序被打断的位置,断点地址是随机的。
  5.中断嵌套服务是指:高级请求打断了低级服务过程。实现中断嵌套服务的前提条件是:给各个中断源分配了高低不同的优先级,同时在中断服务期间,cpu处于中断开放状态。
  6.保护断点现场的内容设计,一般是把服务程序使用到的、与主程序有冲突的资源确定为保护的对象。在执行服务内容之前,先把保护对象写入堆栈。
  7.mcs-51系统响应中断请求的3个条件分别是:没有高级服务正在进行中;当前指令周期已经结束;当前不是执行reti指令和访问ie(ip)的指令。
  8.中断响应延迟是指:中断源从提出请求到获得cpu的服务之间存在的时间滞后。提高mcs-51系统的中断响应速度的有效方法是:提供mcs-51系统的振荡频率。因为中断响应延迟与系统的振荡频率成反比。
  9.mcs-51系统复位后,默认的中断优先链结构从高到低的顺序是:int0、计数器0、int1、计数器1、串行接口。
  10.通过对寄存器ip编程,可以动态改变mcs-51系统的中断优先链结构。
  11.mcs-51系统的外部中断请求的有效状态有两种:低电平触发和下降沿触发。通过对位单元it0(it1)编程确定。
  12.实验表明:ie标志可以使用软件复位。因此,能够通过查询ie标志的方法,控制mcs-51系统的外部中断。只是这样做的效率低,一般不采用。
八[程序设计基础]
1.写出满足下列要求的伪指令。
  (1)字符串computer存入起始地址为200h、符号地址为byte的存储区。
  (2)给变量x赋值32,并且固定。
  (3)给变量y赋值32,并且动态可变。
  (4)把16位数据123ah,578bh,762ch存入起始地址为word的存储区,并且作出数据字节存储示意图。
  (5)保留100个单元作为备用存储区,起始地址为start。
  2.阅读下列程序段,解答以下问题。
  (1)为什么首先执行 clr c指令?
  (2)绘制程序流程图。
  (3)简述本段程序的功能。
  (4)在每条指令后面写上简明注释。
    clr c;
    mov r2,#3;
    next:
    mov a,@r0;
    addc a,@r1;
    mov @r0,a;
    inc r0;
    inc r1;
    djnz r2,next;
    jnc down;
    mov @r0,#1;
    sjmp stop;
    down:
    dec r0;
    stop:
    sjmp stop;
  3.设在内部ram首地址分别为first和second区域,按照小数端格式存储两个字长是个字节的整数。编写完成两个整数相加运算的程序,结果存入first区域。对运算结果是否产生溢出做出标记。
  4.采用循环结构编写3字节被乘数与单字节乘数相乘运算的程序。
  5.mcs-51系统的振荡频率12mhz。阅读以下子程序分析:
  (1)该子程序产生的时间定时范围?
  (2)写出产生1秒钟延迟的调用程序。
  (3)该子程序尚有不完善之处否?将其改写的更加完善。
    delay:
    mov r3,#250;
    next1:
    mov r2,#250;
    next2:
    nop; 1机器周期
    nop; 1机器周期
    djnz r2,next2;2机器周期
    djnz r3,next1;2机器周期
    djnz r4,delay;2机器周期
    ret;
  6.mcs-51系统内部30h~3fh单元提供随机数0~15之一。试将其转换成对应的ascii代码后,从p1端口输出。编写程序实现之。
  7.外部ram首地址1000h单元开始,存储有字长是200字节的序数数组。编写查找数组最大元素的程序。
  8.mcs-51系统内部30h单元开始,存储一个8位整数数组。数组长度存放在1fh单元。编写程序统计正元素、0元素和负元素的数目,结果分别存入1ah、1bh和1ch单元。绘制分支结构流程图。

本章练习(参考答案)
  1.满足要求的伪指令如下:
  (1)org 200h;
    byte: db ‘computer’
  (2)x:equ 32
  (3)y:dl 32
  (4)word:dw 123ah,578bh,762ch
    等价于:byte:db 12h,3ah,57h,8bh,76h,2ch
  (5)start:ds 100
  2.解答问题如下:
  (1)因为使用addc指令做最低位字节相加,进位标志c必须先清0。
  (2)程序流程图如示
  (3)本段程序的功能是:两个3字节序数数组相加运算。
  (4)在每条指令后面写上简明注释自行完成。
  3.两个4字节整数相加程序如下:
   org 2000h;
   mov r0,#first; 被加数指针
   mov r1,#second;加数指针
   clr c;
   mov r2,#4; 数据长度
   next:
   mov a,@r0; 取被加数
   addc a,@r1; 两数相加
   mov @r0,a; 存入结果
   inc r0;
   inc r1;
   djnz r2,next; 未完继续
   jb psw·2,flag;溢出打上‘-’标记
   mov @r0,#‘+’; 未溢出打上‘+’标记
   sjmp stop;
   flag:
   mov r0,#‘-’;
   stop:
   sjmp stop;
  4.采用循环结构编写3字节被乘数与单字节乘数相乘运算的程序如下:
  说明:设2a4b5ch×6dh。
  (1)数据在内部存储如示
    x:db 5ch,4bh,2ah,6dh
    m:db 0,0,0,0,0,0,
    y:db 0,0,0,0
  (2)源程序段
    mov r0,#x;被乘数指针
    mov r1,#m;部分积指针
    mov r2,#3; 相乘次数
    next:
    mov a,@r0;自低位到高位取被乘数
    mov b,x+3;取乘数
    mul ab; 相乘
    mov @r1,a;存人乘积低8位
    inc r1;
    mov @r1,b;存人乘积高8位
    inc r1; 修改部分积指针
    inc r0; 修改被乘数指针
    djnz r2,next;
    mov y,m; 部分积相加并存储
    mov a,m+1;
    add a,m+2;
    mov y+1,a;
    mov a,m+3;
    addc a,m+4;
    mov y+2,a;
    mov a,m+5;
    addc a,#0;
    mov y+3,a;
  5.解答如下:
  (1)r2=r3=250,选择r4=1~255数值之一,可以产生250毫秒~62.5秒范围的定时。
  (2)产生1秒钟延迟的调用程序如下
    main:
    mov r4,#4;
    lcall delay; 
    … 
    …
  (3)该子程序的不完善表现是:r2和r3未做现场保护和恢复。增加r2和r3的现场保护和恢复,就使得delay子程序更加完善。
    delay:
    push r3; 保护现场
    push r2;
    mov r3,#250;
    next1:
    mov r2,#250;
    next2:
    nop; 1机器周期
    nop; 1机器周期
    djnz r2,next2;2机器周期
    djnz r3,next1;2机器周期
    djnz r4,delay;2机器周期
    pop r2; 恢复现场
    pop r3;
    ret;
  6.本题设计表结构程序解决之。
  (1)ascii代码表设计如下
    ascii:db ‘0123456789abcdef’
  (2)查表程序如下:
    main:
    mov dptr,#ascii;ascii码首地址
    mov r1,#30h; 随机数首地址
    mov r2,#16; 16个随机数
    next:
    mov a,@r1; 取随机数
    inc r1;
    movc a,@a+dptr;转换成ascii码
    mov p1,a; 从p1端口输出
    djnz r2,next; 未完继续
    end
  7.本题参考第四节循环结构程序设计中的例2。
  8.解答如下:
  (1)分支流程图

  (2)分支结构程序如下:
    main:
    mov r0,#20h;数组指针预置
    next:
    mov a,@r0; 读出元素
    inc r0; 指向新元素
    jz zero; 转0元素
    jnb a·7,plus;转正元素
    inc 1ch; 负元素
    sjmp down;
    plus:
    inc 1ah;
    sjmp down;
    zero:
    inc 1bh;
    down:
    djnz 1fh,next;
    end

九[系统资源和功能扩展]
1.简述在mcs-51系统扩展功能的设计中采用地址不完全译码的优、缺点。
  2.简述采用地址完全译码设计的优、缺点。
  3.如何确定sram和eprom芯片的存储容量?
  4.与eprom芯片比较,eeprom芯片的优点是什么?
  5.sram和eeprom芯片都是可读写存储器,二者的重要区别在哪里?
  6.比较8155h计数器与mcs-51系统计数器在性能上的差别。
  7.比较8155h接口的pa~pc端口与8255a接口的pa~pc端口在功能上的差别。
  8.简述8155h接口如何寻址内部的ram单元和i/o端口。
  9.简述8255a并行接口的直接i/o传送与选通式i/o传送的控制区别。
  10.简述8位a/d转换和8位d/a转换各自的含义。
  11.简述rs-232c标准的基本特点。
  12.简述典型的rs-232c标准接口的功能。
  13.简述为mcs-51系统扩展rs-232c标准接口的作用。
  14.分析图示74138地址译码器的8个输出y0~y7各自的寻址范围。

  15.设mcs-51系统外部扩展8k×8eprom、4k×8ram和8255a并行接口,要求扩展空间地址采用统一编排设计。试做出扩展系统逻辑接线图和写出各部分的地址范围。
 

  1.mcs-51系统的内部数据传送使用mov指令传送。外部数据使用movx指令传送。
  2.mcs-51系统的只能在内部开辟堆栈区。
  3.访问 mcs-51系统的特殊功能寄存器区域不能使用寄存器间址。
  4.mcs-51系统的算术运算类指令的局限性在于:只能用累加器a作为目地址。
  5.mcs-51指令系统的只设计了带借位的减法指令。
  6.mcs-51指令系统的逻辑运算类指令的设计灵活性表现为:可以使用直接寻址的单元作为目地址。
  7.jz/jnz指令的测试对象是累加器a。
  8.通过测试psw·2位单元,可以判断整数运算是否产生了溢出。
  9.下列各组指令的本质区别分别是:
  (1)前者源操作数是立即寻址,后者源操作数是直接寻址。
  (2)前者源和目操作数都是直接寻址。后者源操作数是立即寻址寻址。
  (3)前者是内部数据传送。后者是外部数据传送。
  (4)前者访问外部空间00h~0ffh范围。后者访问外部空间0000h~0ffffh范围。
  (5)前者是合法指令。后者是非法指令。
  10.下列各条指令的错误分别是:
  (1)不能使用b寄存器访问外部资源。
  (2)不能使用drtr指针间址内部资源。
  (3)寄存器r2不能作为间址指针使用。
  (4)movc指令必须采用基变址寻址。
  (5)push指令的数据字长是8位。
  (6)立即数不能直接入栈。
  (7)pop指令的数据字长是8位。
  (8)add指令只能使用累加器a作为目地址。
  (9)源与目操作数字长不相等。
  (10)没有sub指令设计。
  (11)整数+128是16位数据。
  (12)目地址是直接寻址,源地址不允许使用直接寻址。
  (13)p1端口不能直接进行逻辑非运算。
  (14)只有累加器a可以直接进行移位操作。
  (15)只有累加器a可以直接进行清除操作。
  (16)30h·0位单元不支持位操作。
  (17)sp·6位单元不支持位操作。
  (18)a·8汇编符号是错误的。
  11.写出指令序列,完成下列操作。
  (1)mov dptr,#1000h;
    mov a,#+5;
    movx @dptr,a;
  (2)mov dptr,#1000h;
    movx a,@dptr
    inc a;
    movx @dptr,a;
  (3)mov a,40h;
    mov dptr,#40h;
    movx @dptr,a;
  (4)mov a,b;
    add a,#5;
    mov b,a;
  (5)mov a,p1;
    cpl a;
    mov p1,a;
  (6)inc dptr;
    inc dptr;
  (7)sebt rs1;
    clr rs0;
  (8)lcall routine;
  (9)ljmp check;
  (10)sjmp $;
  (11)jb psw·2,overflow;
  (12)jnb psw·0,flow;
  (13)jb f0,user;
  (14)push dph;
     push dpl;
  (15)mov dptr,#1000h;
     push dph;
     push dpl;
  12.执行结果是:r0=32h;a=80h;(32h)=8;(40h)= 80h
  13.目标指令的地址=1002h+0ff10h=0f12h。
  14.first:dw 3678h,0a3fh,4b76h,…
    mov dptr,#first;
    mov a,30h;
    add a,a;
    push a;
    movc a,@a+dptr;
    mov 40h,a;
    pop a;
    inc a;
    movc a,@a+dptr;
    mov 41h,a;
  15.完成1357+2468的bcd码运算的指令序列如下:
    mov a,#68h;
    add a,#57h;
    da a;
    mov b,a;
    mov a,#24h;
    addc a,#13h;
    da a;
  16.写出指令序列,完成16位被乘数×8位乘数的运算。设被乘数放在内部30h、31h单元中(低字节在30h单元),乘数放在40h单元。乘积放在50h、51h和52h单元中。
  (1) 算法流程如下
  

  (2)运算程序:
   
    mov b,30h; 取被乘数l
    mov a,40h; 取乘数u
    mul ab;
    mov 50h,a; 乘积低字节
    mov 51h,b; 乘积高字节
    mov b,31h; 取被乘数h
    mov a,40h; 取乘数u
    mul ab;
    add a,51h;
    mov 51h,a;
    xch a,b;
    addc a,#0;
    mov 52h,a;
  17.阅读下列指令序列,说明每条逻辑运算指令执行后,目操作数和psw的结果。
    mov a,#0aah;
    mov r4,#55h;
    anl a,r4; a=00h,cy=ov=0,p=0
    orl a,r4; a=55h,cy=ov=0,p=0
    xrl a,r4; a=00h,cy=ov=0,p=0
  18.ret指令是控制子程序返回。reti指令是控制中断服务返回。前者使用在子程序段中,后者使用在中断服务程序段中。
  19.使用位操作指令编写的完成l=x1·(x2+x3)+x4·(x5+x6) 运算的程序如下。
    mov cy,x2;
    orl cy,/x3;
    cpl cy;
    anl cy,x1;
    mov l,cy;
    mov cy,x5;
    orl cy,x6;
    anl cy,x4;
    cpl cy;
    orl cy,l;
    mov l,cy;
  20.给定的分支结构程序段的执行结果是:a·7=0,执行jbc指令后,继续顺序执行。
  21.答:acall routine指令的存储地址是17feh,说明pc当前值是1800h。而子程序routine的入口地址是1000h,二者已经不在同一个2k地址页面中。因此,不能正确调用子程序routine。
  22.控制p1端口输出为:p1·0~p1·2=0;p1·3~p1·5=1;p1·6~p1·7状态相反的指令序列如下。
    anl p1,#11111000b;
    orl p1,#00111000b;
    xrl p1,#11000000b;
五[定时器计数器]
1.简述mcs-51系统计数器的计数特点。
2.简述mcs-51系统计数器对于内、外脉冲计数能力上的差别。
  3.使用计数模式0应该注意什么问题?
  4.计数值n是如何确定的?写入计数器的初始计数值又如何确定?
  5.软件字tmod中的gate位单元的控制作用?
  6.tf0(1)标志的作用和操作特点?
  7.mcs-51系统的最高振荡频率是12mhz。问内部和外部计数脉冲的最高频率分别是多少?
  8.比较计数值溢出与算术运算结果溢出的不同意义。
  9.评价教科书p108页中,例3程序的不足之处并完善之。
  10.mcs-51系统的振荡频率是6mhz。分别使用计数模式2和计数模式3并采用查询控制技术,设计两个控制p1.1引脚输出频率为2.5khz方波脉冲的控制程序。
本章练习(参考答案)
  1.mcs-51系统计数器的计数特点是:二进制加法计数。
  2.mcs-51系统计数器的内计数脉冲频率比外计数脉冲频率高一倍。
  3.使用计数模式0应该注意的是:13位计数值是由高8位和低5位组成的。
  4.计数值n=定时时间÷计数脉冲的周期。写入计数器的初始计数值=(-n)的补码
  5.软件字tmod中的gate位单元的控制作用是:决定tr0(1)能否单独控制计数器的启动和停止。
  6.tf0(1)标志的作用是:供程序查询计数器是否产生了溢出。tf0(1)标志是自动置1,可以软件复位。
  7.当mcs-51系统的最高振荡频率是12mhz时,内部和外部计数脉冲的最高频率分别是12mhz÷12=1mhz和12mhz÷24=500khz。
  8.计数值溢出表示一次计数过程的终结。算术运算结果溢出表示运算结果出错。
  9.教科书p108页中给出的例3程序的不足之处是:中断服务子程序没有明确其入口地址。较为完善的程序段如下:
   org 1000h; 主程序地址
   start:
   mov tmod,#3;计数器0方式3
   mov tl0,#9ch;
   mov th0,#38h;
   setb ea; cpu开中断
   setb et0; 计数器0开中断
   setb et1; 计数器1开中断
   setb tr0; 启动计数
   setb tr1;
   sjmp $; 等候中断
  10.mcs-51系统的振荡频率是6mhz。分别使用计数模式2和计数模式3并采用查询控制技术,设计两个控制p1.1引脚输出频率为2.5khz方波脉冲的控制程序。
  分析:mcs-51系统的振荡频率是6mhz;计数周期=2μs;p1.1引脚输出频率为2.5khz方波信号,其周期=400μs。计数值n=200μs÷2=100,(-n)补码=9ch。
  (1)采用计数模式2的查询控制程序
  org 1000h; 程序地址
  start:
  mov tmod,#2;计数器0方式2
  mov tl0,#9ch;
  next:
  setb tr0; 启动计数
  w:
  jnb tf0,w; 未溢出等待
  clr tr0; 关闭计数
  cpl p1.1; 改变状态
  sjmp next; 循环计数
  (2)采用计数模式3的查询控制程序
  org 1000h; 程序地址
  start:
  mov tmod,#3;计数器0方式3
  next:
  mov tl0,#9ch;
  setb tr0; 启动计数 
  w:
  jnb tf0,w; 未溢出等待
  clr tr0; 关闭计数
  cpl p1.1; 改变状态
  sjmp next; 循环计数
六[串行接口]
----------------------------------------------
此篇文章从博客转发
原文地址: Http://blog.gkong.com/more.asp?id=60705&Name=sfmcu

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 非法和不良信息举报

工控网客服热线:0755-86369299
版权所有 工控网 Copyright©2024 Gkong.com, All Rights Reserved

78.0005