发表于: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