单片机原理习题集(全)

更新时间:2024-02-01 20:45:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

习 题 集

——MCS-51单

吴锤红

机 制

片原

第一章 引 导

1、 列举出单片微机在工业、民用及军事上的应用例子。 2、 单片机与系统型微机在应用上有什么主要差别?

3、 如果让你用单片机开发一项产品,你准备开发什么产品?该产品的功能及应用前景

如何?单片机在该产品中的作用是什么?

4、 用从课文介绍的应用实例中所学习的知识回答以下问题: a.高级语言与机器语言的主要不同点?

b.MCS-51开机或复位后机器语言程序从哪里开始执行? c.人用什么语言编机器语言程序?

d.机器语言指令中的A、B、C等表示的是符号还是数字? e.单片机中处理的是数字量还是模拟量?它们与高电平、低电平或+5伏与0伏的关系是怎样的?

5、 分别举出5个硬件和软件的例子。

6、 I/O对应的英文单词是哪些?表示什么意思? 7、 “汇编语言源程序”、“汇编程序”、“机器目标代码程序”等术语各是什么意思? 8、 选择题:

①高级语言,如Basic、Pascal等,这所以能在IBM-PC微机上或Apple机上执行,是因为__________。

a. 这些机器的CPU能识别这些高级语言并能执行它们。

b. 高级语言与计算机的CPU无关,可以在任何计算机上执行。

c. 这些计算机上配备了能将高级语言转化为(编译器与解释器)机器语言的软件。 d. CPU能将高级语言转化为机器语言并执行它。

②ROM,用形象比喻来说明它的特性,更像__________。 a. 黑板,写上的字与原来的字会叠加在一起。 b. 相片,暴光一次成像,可看读任意多次。 c. 装物的盒子,能存储信息。 d. 生物的大脑,能大量存储信息。

③RAM,用形象比喻来说明它的特性,更像__________。 a. 算盘,由算盘珠摆出了一种状态。 b. 装物盒子,可存入也可取出。 c. 黑板,可写可擦。

d. 生物大脑,可记又会忘。

④存储单元的地址的作用是__________。 a. 用于形成序列联系。 b. 用于访问这些单元。 c. 用于硬件接线。 d. 用于降低成本。 ⑤寄存器__________。

1

a. 的名字用于指令中可以缩短指令长度,提高执行速度。 b. 必须通过地址序号来使用。 c. 关电再开时其内容不变。 d. 可随需要外购扩充。 ⑥接口是__________。

a. CPU内部总线与外部总线间联系的电路。 b. CPU外部总线与外部设备间联系的硬件。

c. CPU与存储器间起数据缓冲、锁存、变换等作用的硬件。 d. 外部设备相互联系的硬件。 ⑦汇编是__________。

a. 将用助记符编写的程序转换成机器码的过程。 b. 将人写的程序变为计算机CPU能直接执行的程序。 c. 将机器码转换成汇编语言程序的过程。 d. 将高级语言转换成低级语言的过程。 ⑧BUS在计算机中表示__________。 a. 类似公共汽车的东西。

b. 信号内容、信号地址及信号时序信息的传输路线。 c. 8位数据总线。

d. 软件、硬件及外设间的联系。

2

第二章 基 础

练 习 一

1. 1234? X 2=2512? 问这是几进制的运算? 2.在9进制系统中,469+??=1009

3.星期、月份、四季、世纪各是几进制运算关系? 4.将下列二进制数转换为十进制数:

10111101B 110111101B

111011010.101B 11110111101110.111011111B

5.将下列十进制数转换为二进制数,对于小数,可以仅取4位

130 123.47 99 0.6 256 11.11 6.计算下列二进制算式:

10100110B-101B 11011110B+1101B 1110B×1011B 10111010B÷110B 7.将第4题转换为十六进制数。

8.将下列数转换成十六进制和二进制数,对于小数,可以仅取二位十六进制数。

12767 60000 123.143 65535 32767 4096.3

9.计算下列算式,结果仍用十六进制数表示,仅取二位小数。

123H+0EFDH 1010011011B-0FDH 0EAH×0CDH 666÷66H

10.在八段数码管中1字节中“位”与数码管“段”的对应关系如下图:

字 模 字 节

afbh g f e d c b a gedch

如果假定某位为“1”对应该段“亮”,反之为“暗”问显示:1A4B8.C3的字模是什么? 11.按10题条件,写出以下字模字节表示的字符及含义。

CF 06 66 00 54 5C 00 79 50 50 5C 50

12.有十个大箱子,每箱都装有600合的1斤装饼干。因事故,其中有些箱中的每合饼干仅装了9两。有1个人提出,他可以从这十箱中按一定规律各取若干合,放于一堆,

3

只称一次,便可以知道是哪几箱中的饼干出事故。你知道这人是怎么做的呢?

练习二

一、计算题1:

0DCH OR 65H 0E9H AND 7CH 0BAH EOR 5DH 6DH AND 7EH OR 0ABH EOR 0D6H 6DH AND (7EH OR (0ABH EOR 0D6H)) 二、计算题2:

123 AND 10100101B 222 EOR 200

11010110B OR 97 1DH EOR 11111111B 三、应用题1:

某计算机有一个8位并口,读入的数据存在A寄存器中,问:

(1) 判断0、2、6、7位是否全为0,A才变为全0,用什么运算?

(2) 判断1、3、4、5位中是否有任何一位为1,就使得A非0,用什么运算? 四、应用题2:

在Apple计算机中,磁盘存储信息中采用了“4-4编码”,即把一个字节的8 位 D7 D6 D5 D4 D3 D2 D1 D0变成二个编码字节:

1 D7 1 D5 1 D3 1 D1和 1 D6 1 D4 1 D2 1 D0

请给出一种简便方法,将编码后的两两字节还原成原来的一字节(解码)。 五、应用题3:

为了破解一个用异或串连运算加密的加密程序,让一段全为00H字节的程序让其加密,结果形成以8字节为周期的被加密文: 3DH 0E6H 7CH 0ABH 0FH 27H 0EDH 41H 。请利用密文破解以下一段被加密的密文:0FFH 37H 0C2H 66H 00H 0FAH 27H 69H 。 练习三 一、 请在一字节补码表示的带符号数范围中写出以下数值代码:

-96 37 -150 -100 二、 请写出以下补码表示的带符号数表示的数值:

0FDH 0CDH 0FF00H 1234H 三、 在二字节补码表示的带符号范围内计算以下各式结果,并判断结果的正确性:

006CH+00FAH 006CH-00FAH 2E04H-7EDCH 67DCH+1E74H 3C06H-6D9EH 9005H+0EF5EH 四、 应用题:

已知某大学有男、女大学生名额共2000人,如果要在计算机人事档案管理系统中给每一个大学生一个唯一的代码,并用该代码包含性别信息,请问最少要多少二进制位才能构成该代码? 五、 选择题:

1、 如果将存储中文代码的存储器芯片当作微计算机的程序存储器插入程序芯片槽

4

中,请判断一下,开机后最可能出现的现象为__________。 A、屏幕显示中文代码 B、屏幕显示看不懂的东西 B、计算机硬件烧坏 D、什么现象都没有 E、计算机乱响

2、多字节整数实现的方法是__________。 A、由使用它们的程序建立起字节的联系 B、由使用它们的人通过定义语句来实现 C、将该整数的各字节按顺序放成序列 D、由国际标准化组织规定

3、计算机中带符号数的“—”号可以__________。 A、用“—”号的ASCII码来表示 B、用人为规定的符号位来表示 C、用全0或全1来表示 D、用补码来表示 六、正、误判断题:

1、计算机内存中存放的信息是程序代码。 2、计算机程序存储区存放的必都为程序代码。

3、8051程序存储区的开头几个字节必为程序代码。 4、8051数据存储区不能存放程序代码。

5、计算机内存中至少有一部分信息是程序代码。 6、8051程序存储区中存放的是程序代码或常数。 7、程序代码在传送过程中是作为无意义的数据。

8、数据代码与程序代码的区别在于数据代码不能被CPU所识别而程序代码却能。 9、浮点数的用途是表达小数点位置可以变化的小数。 10、浮点数的用途是表达实数。 11、浮点数的精度比多字节整数高。

12、浮点数所能表达的数的范围比同样多字节的多字节整数来得广。 13、定点数中的小数点是用“0”或“1”来代表的。 14、BCD码是十进制数。 15、“二—十进制调整”是将十六进制数转变成十进制数。 16、BCD码将十六进制数作为十进制数看待。 17、BCD码间的算术运算通过“二—十进制调整” 将十六进制运算转换为十进制运算。 18、与美国敌对的国家的计算机中不使用美国发明的ASCII码。 19、ASCII码发明的主要目的是表示字符代码。

20、计算机中的字节代表什么代码由使用该程序的人来解释。 21、同样的一些字节,交由CPU执行时变为指令代码而交由通讯程序时变为数据代码。 22、补码用于表示负数。

23、没有补码就无法表示负数。 24、补码也可以表示正数。

5

25、最高位为1的补码表示的带符号数必为负数。

26、同样的字节,如0E6H,既可以表示正数,又可以表示负数。 27、带符号数相加、减时结果与被运算数异号表明发生了溢出。 28、不带符号数运算不会产生溢出现象。 29、“溢出”是指运算中产生了进位或借位。

30、二个数相减产生借位,表明这两数互为补数。

6

第三章 硬 件

练习一

一、说明以下芯片的异同点:

8051 ,8031, 8751 ,8052 ,80C51 二、8051/8031芯片内部具有哪些主要结构?

三、8051的引脚分成几种功能?哪些功能是复用引脚?

四、用万用电表5伏直流量程档量正在工作的8031芯片的以下引脚时,写出可能的电压值(或范围):

黑表笔 红表笔 电压值 20 40 20 31 20 39 20 9

五、画出使用8031的最小系统图,要求: 1、用12MHZ晶振配15pf电容 2、用8K程序存储器,型号为2764 3、地址锁存器用74LS373

六、设计8031最小系统印刷电路板,要求: 1、采用双面敷铜板制作,绘图比例1:1。

2、两面用线色应有明显区别,如红—黑,红—兰等。

3、电容、电阻脚间距取为10mm,集成元件按实际尺寸绘制。 4、各口线(P0除外),均应在同一侧安排外接线引脚。 5、板上应有复位开发及复位电路。

七、简单解释以下名词、并说明它们的联系: 晶振时钟、机器周期、指令周期

八、如果采用8MHZ晶振,问执行以下指令需要多少时间?

指令 消耗时间 JMP @A+DPTR SWAP A MUL AB 九、说明引脚31(EA)的作用,论述P0口的分时复用原理。

练习二、

一、举一个例子说明中断的工作方式。8051有哪些中断源?

二、中断子程序入口为什么采用固定的入口?该入口又称为什么?当中断服务子程序存于别处时是否可以在中断时进入该子程序?如何办到?

三、中断子程序的开始与结尾各有什么特殊操作,为什么要这样? 四、主程序中如果在某部分程序中不允许响应中断,那么如何处理?

7

*五、有一个用CTC中断来产生计时脉冲的单片机软件时钟系统,其年、月、日、时、分、秒值分别存于year,month,day,hour,minute,second内部RAM单元中,问读取该时钟应怎么读法才能确保正确读出?

*六、如果用CTC中断作时钟计时,又用串行口中断来传输数据,当这二个中断设置为同一优先级时会产生什么问题?应如何处理? *七、请按要求设置中断:

用INT0、INT1,分别检测外部事件,

INT0设置为:电平触发,低优先级 INT1设置为:跳变沿触发,高优先级

并在设置后开启这两中断。 练习三、

一、并口的“口宽度”是指什么?8051并口宽度为多少?该宽度范围内各位传输是否能同时送达口引脚上?超过该宽度(例如多字节)的传输是如何实现的? 二、并口的锁存器与该口引脚的值有什么联系?何时会产生不同? 三、叙述8051四个并口的输入、输出特性。

*四、如何能将P1口的低半字节异或上某数(如7),而不改变高半字节引脚的值? *五、有一个工业控制器,采用了扩展接口的自动识别措施,问,系统如何识别P1.0 ~P1.7脚中哪些已联接上了外部设备,哪些未接上?

六、如果将P1.0、P1.3、P1.6作为输入口,应如何操作?如果向P1.1、P1.2中写入“0”,那么这两口对应引脚输入+5伏时,读到的值是多少? 练习四

一、串口与并口有什么主要不同点? 二、串口是如何解决信号识别的? 三、串口是如何识别信号受到了干扰?

四、校验位是什么意思?如果采用奇校验,那么当分别传输:0E5H 7CH 0C6H 39H字节时各自的校验位分别是多少?

五、画出按以下传输协议传输6DH字节的波形,并注出起始位,数据,校验位和停止位。传输协议:8位有效数据,奇校验,2个停止位。

六、当波特率为4800时,按第五题的传输协议,每秒钟大约可以传输多少字节? 七、简述与8051串行口有关的寄存器,它们的作用各是什么?

*八、如果以1953的波特率,在6MHZ系统上向别机的串口传输数据,请选择串口工作方式并设置好该工作方式。 练习五

一、为什么说定时器和计数器是同一器件的两种工作方式?二者的异、同点各是什么?

*二、为什么定时器和计数器都可以测试车辆的速度?简述用这两种方式测试的原理。

8

*三、当T0或T1从0FFFFH变为0000H时,出现了哪些信号?

*四、CPU本身也可以计数和计时,问用CTC完成相同工作的好处何在?

*五、用定时器方式编制百米赛跑计时系统,问Gate位应如何设置?信号从哪里取得(赛场中哪个设备),应送到8051的哪个脚上?

*六、用6MHZ晶振,编制时钟程序,取“嘀嗒”时标为100ms(即1/10秒产生计时中断信号),问如何设置T0?并写出T0中断子程序的头、尾部分。

*七、采用12MHZ晶振,在P1.0口上送出稳定的方波,波形如下,如何实现?

八、8051中与CTC有关的寄存器有哪些?它们的的作用各是什么? 练习六

一、复位时计算机中主要做了什么工作?

*二、复位的信号要求是什么?画出一种复位电路并叙述该电路工作过程。 *三、80C51与8051的主要不同点在哪里?什么是待机状态?它有什么用途? *四、对HMOS和CHMOS的MCS-51器件如何处理突然断电事故?

9

第四章 存 储

一、对MCS-51家族器件,0E0H,0FFH作为地址分别可以对应那些存储单元? 二、对MCS-51家族器件, 0F00H和2000H作为地址分别可以对应那些存储单元? 三、8051单片机又外接了一片2764 EPROM芯片。

问:EA脚接高电平与接低电平时,2764的首个存储单元地址各为多少?

四、在什么条件下,改变R3等效于改变1BH内部RAM单元?

*五、指出以下二列程序段在改变00H内部RAM单元上有什么不同?(设当前取0组工作寄存器区)

CLR RS1 SETB RS1 MOV 0,R0 MOV 0,R0 六、 指出以下操作的不同点:

CLR A CLR 0E0H MOV 0E0H,#0 MOV A,#0 七、 指出以下操作的后果:(对8052)

① CLR 0FFH MOV C,0FFH ② MOV 0FFH,#0 MOV A,0FFH ③ MOV R0,#0FFH MOV A,@R0 MOV 0FFH,A

为什么说工作寄存器组R0~R7是:“赋予存储器以寄存器性质”。而说特殊功能寄存器映象区是:“赋予寄存器以存储器性质”。

如果将RD“与”上PSEN并用此信号控制对外部RAM的读取,这时用: MOVC A,@A+DPTR

与 MOVX A,@DPTR

A是否取到相同的值?用MOVX @DPTR,A指令是否能改变程序?这种做法通常用在开发装置中,为什么? 八、 正误判断,并简述判断论点:

1、8051地址的低8位可以访问内部RAM和特殊功能寄存器区。 2、A与ACC的差别是ACC有地址而A却无地址。 3、改变R0等于改变0组工作寄存器区首个存储单元。

4、当RS0=0,RS1=0时,改变03H内部RAM单元等效于改变R3单元。

5、从指令的角度看,8051的程序存储区是“只读”的,即使用RAM器件作程序存

10

储区也一样。

6、位单元与内部RAM的字节单元或SFR映象单元的区别在于其地址不同。 7、8051中的内部RAM字节单元,除了20H~2FH外其余单元均不可以位寻址。 8、不可以位寻址的字节单元是不可以逐位操作的。 9、进入中断子程序,在开头用PUSH PSW 和 SETB RS0 后可以随意使用R0~R7,而不用担心改变主程序的R0~R7。

10、退出中断子程序前,用POP PSW 就可以自动恢复主程序中的所有工作寄存器。 11、对于8051,其外部程序存储区地址从1000H开始,而对于8031,从0000H开始。 12、在P1悬空时,可以将其作为存储单元使用。

13、F0既可以看作B寄存器、B的0位位单元以可以作为PSW中的用户标志0。 14、SFR中凡地址不能被8除尽的寄存器都不能位寻址理因为这些寄存器不允许逐位改变。

15、MCS-51元件将程序存储区与数据存储区分开是为了加密程序。

11

第五章 寻址

一、写出以下指令中“源”与“的”的寻址方式:

MOV A,#00H MOV 0,A MOV 30H,ACC ADD A,30H SUBB A,B MOV A,R0

MOV @R0,A MOV DPTR,#1234H MOVC A,@A+PC MOVX @DPTR,A JNZ LOOP SJMP stsrt AJMP start LJMP start CLR A SETB C INC DPTR PUSH ACC JMP @A+DPTR CLR 30H *二、手工汇编以下程序:

2000H: MOV R0,#40 ;2000H为程序存放首地址

MOV R3,#5 CLR A

LOOP: MOV @R0,A DEC A

DJNZ R3,LOOP MOV 30H,40H MOV C,30H AJMP 2678H

三、在以下程序中,数3FH最终传到了什么单元中?

Mov A,#3FH Mov R0,A Mov @R0,A

四、为什么说“立即寻址方式只能用于传送常数”?

*五、在“LJMP 2345H 指令”中,源是什么?来自哪个存储区间?的又是什么?它的作用是什么?

六、解释“指令地址”与“指令当前PC值”的区别?二者间的联系? 七、指令代码:“80H 0FEH”是什么操作?其中的“0FEH”是什么?执行该指令会产生什么效果?

*八、在地址07FFH处有一条指令,它的指令代码为:“81H 24H”(AJMP),问执行这条指令的效果是什么?

九、正、误判断,并简述判断论点:

1、LJMP指令从含义上说可视为立即寻址方式,而与SJMP指令对比,又可以说它是绝对寻址方式。

2、相对寻址方式即以该指令地址加上指令字节数作为坐标原点。

12

3、凡用SFR映象地址进行寻址的均为直接寻址而不是寄存器寻址方式。 4、用工作寄存器R0~R7寻址的其实就是直接寻址方式。 5、间变址寻址是将寄存器内容作为单元地址。(JMP @A+DPTR 除外) 6、二字节地址寻址的,如A,@DPTR均不能寻址内部RAM。 7、一字节地址寻址的,如A,@R0均不能寻址外部RAM。 8、在指令中只有R0、R1可以用作间址寄存器。

9、只有R0、R1的间址才能访问8052的80H~0FFH的内部RAM。

10、MOV A,@R0 当(R0)=40H时,该指令执行的效果等于MOV A,40H。 11、MOV @R0,A 当R0内容为HEX(HEX代表任一个单字节数)时,该指令执行的效果等于MOV HEX,A。

12、PC的值决定了在CPU内正要执行的指令的地址。 13、PC值永远指向下一条待执行指令的首地址上。

14、间变址寻址中,变址寄存器A中存的是单字节带符号数。

15、用同一条指令取到不同的数可以用直接寻址方式,而要取到不同单元中的数却要用到R间址方式。

13

第六章 指令

练习一

一、按要求写出指令:

1、 将数7FH传给由R1寻址的内部RAM单元中。 2、 交换A和B内容。 3、 将R2内容传给B。

4、 将4CH单元的内容与5CH单元的内容交换。 5、 将数6CH传给外部RAM的2C63H单元。

6、 将外部RAM的2000H单元内容传给R0所指的内部RAM单元中。

※ 7、将SP所指的内部RAM内容送到P2和R0所指的外部RAM单元中。 ※ 8、交换2000H和2010H外部RAM单元内容。 ※ 9、将位单元30H与42H对换。

二、写出执行以下程序后A,B的值,并汇编该程序: 1、 Mov A,#3CH

Mov B,#4CH Mov R0,B XCH A,@R0 XCH A,B Mov A,@R0

2、 MOV DPTR,#2000H

MOV 20H,#3CH MOV R1,#20H MOV A,20H MOVX @DPTR,A CXH A,R1

MOVX A,@DPTR XCH A,B

练习二

一、按要求写出指令:

1、 将A中的数减去B中的数,结果存入A中。 2、 将B中的数减去A中的数,结果存入A中。 3、 用加法指令完成将R0所指单元中的数乘2。 4、 将B中的数乘以A中的数。 5、 将B中的数除以A中的数。 6、 将R1所指单元内容增1。

※ 7、将R0所指的二字节单元(R0指在低字节上,下同)内容增1。 ※ 8、将R0所指的二字节单元内容减1。

14

※ 9、R2R3:=R4R5+R6R7 ※ 10、R2R3:=R4R5-R6R7

二 、写出以下程序执行后A、C、OV、的值: 1、 MOV A,#7FH

ADD A,#9CH

2、 SETB C

MOV A,#80H SUBB A,#80H、、、 3、 MOV A,#40H

MOV B,#10H DIV AB

4、 MOV A,#0C0H

MOV B,A MUL AB

5、 MOV A,#0FFH

MOV B,A INC A DEC B ADD A,B

练习三

一、按要求写出指令: 1、 R1或上R2。

2、 R1与上R0所指单元。

3、 用移位指令实现将R0所指单元乘2。 4、 用移位指令实现将R2R3除以2。 5、 取R5的补数,仍存于R5中。 6、 取反由A所指的内部RAM单元。

7、 A异或上R1R0所指的外部RAM单元。 二、写出以下程序执行后A中的值: 1、 MOV B,#3EH MOV A,#0A5H CPL A XRL A,B 2、 CLR C

MOV A,#75H RRC A RR A

15

3、 ORL A,#5AH RL A

ANL A,#94H

练习四

一、手工汇编以下程序,并分析程序执行后A中的值: 1、 SETB C

L:2、 L:

*3、 4、 7FE0H: L0: L1:*5、 *6、

CLR A

CPL A

SUBB A,#0FFH JNC L

MOV A,#3CH

MOV R3,#2CH

DEC A

DJNZ R3,L

CLR A PUSH ACC MOV R0,SP DEC SP DEC @R0 MOV SP,R0 POP ACC

MOV A,#3FH

AJMP L1

CPL A

MOV B,#02H

MUL AB JC L0

MOV A,#2 RL A ADD A,#1 MOVC @A+PC RET

DB 2CH,0FCH,7DH,66H,47H,83H MOV A,#20H ;本题指出最后一句的操作 PUSH ACC INC A

16

PUSH ACC RET 二、按要求写出小程序:

1、 比较B与数7FH,不相等时转到LNT。

2、 将R0所指的20个单元清0,R0指在最低地址单元上。

3、 将A异或上B,并且如果A低半字节为0,则转移到L0,否则转到L1。 4、 利用堆栈将A、B值传给R2、R3。

5、 按R0所指的单元中的第6位(从0算起)如果为1,则转到LK。 *6、利用RET指令跳转到1234H。 三、正、误判断,并简述判断论点:

1、用MOV SP,#40H 指令后,即将堆栈起始单元地址定为40H。 2、PUSH Acc后,SP内容为存放Acc值的栈地址。 3、POP Acc后,SP内容为存入Acc值的栈地址。

4、CJNE M1,M2,Lable执行后M1,M2都不改变,只是将C按M1-M2是否产生借位而取值,且当M1?M2时转到Lable处。 5、JZ是按运算结果为0时转移。 6、Ajmp是在该指令所在区域转移指令。

7、JMP及CALL类指令的“当前PC值”仍然是下一条指令的首地址。 8、CALL类指令所作的操作是将转移目的地址传送给PC。

9、RET及RETI执行后之所以会返回主程序CALL指令或中断处的下一条指令执行,是因为CALL指令或中断操作执行时将“当前PC值”入栈。

10、由CALL类指令入栈的高8位地址先入栈,位于低地址,低8位地址后入栈,位于高地址。

11、每做一次堆栈操作后,堆栈指针SP就会自动加1。

*12、在子程序的RET之前用了1条POP指令,将产生严重的运行混乱。(子程序中没有PUSH指令,并除了末条POP外也没有改变SP指针)。

*13、监控系统初始化子程序中用MOV SP,# 指令设置堆栈是不允许的。 *14、堆栈指针SP设置为00是不适宜的。

*15、在子程序中不想回到原主程序去而直接跳向某程序可以用二条POP指令之后用LJMP实现。

*16、子程序可以被多个主程序在不同处调用,因此子程序自身无法了解是哪个主程序调用了它。

*17、只有相对转移而没有绝对转移指令的程序指令码可以移到别的地址处执行。

四、错误判断: 1、 逐句判断:

LL: MOV R2,#20H ;子程序入口为LL

17

MOV DPTR,5C00H

L0: MOV R1,F0H MOV A,@DPTR XCH B,A MOV A,@R2

CJNE B,#70H,L1

L1: JC C,L2 MOV @R1,B

MOV @DPTR,A L2: INC R2

PUSH R2 DEC DPTR POP F0H MOV R1,R2 POP ACC RET

2、 有人编了一个子程序,想完成:“将30H开始的16个数中大于等于80H的单元内

容放入50H以后的相应单元中”。程序有错,请逐行改正。 有错程序 修改程序

MOV R0,#30H MOV R7,#50H

LOOP: MOV R6,16H MOV A,R0

JNB ACC.8,NPUT MOV @R7,A

INC R0

NPUT: INC R7

DJNZ R6,LOOP

18

练习五 编程题

1、 内部RAM从list单元开始存放一正数表,表中之数作无序排列,并以“-1”作结束标志。

编程实现在表中找出最小数。

2、 求8个数的平均值,这8个数以表格形式存放在从table开始的单元中。

3、 比较两个ASCII码字符串是否相等。字符串的长度在内部RAM 41H单元,第一个字符串

的首地址为42H,第二个字符串的首地址为52H。如果两个字符串相等,则置内部RAM40H单元为00H,否则置40H单元为0FFH。

4、 输入缓冲区inbuf存有80个字节,编程实现将其中所有的组分隔符(1DH)的地址依次压入

separ栈中。

5、 求16位补码所对应的原码,16位补码存放在31H和30H单元,转换后的原码仍放在这两个

单元,低地址存低字节。

6、 设有100个有符号数,连续存放在以2000H为首地址的RAM中,试编程统计其中正数、负

数、零的个数,并把统计结果分别存入50H,51H,52H这三个单元中。

7、 5个双字节数,存放在外部RAM从barf开始的单元中,求它们的和,并把和存放在sum开

始的单元中,请编程实现。

8、编写双字节有符号数除法子程序。

19

第七、八、九章 综合

一、 简单小程序编制:

注:所有多字节数的低字节都在低地址;R0或R1均指向内部RAM的最低字节。 1、 将30H、31H单元内容与T0计数器的TL0、TH0交换。保持其它R和M不变。 2、将30H、31H单元内容与5C30H、5C31H交换。保持其它R和M不变。

3、将30H、31H单元内容与R0指向的两字节单元交换。保持其它R和M不变。 4、将30H、31H单元内容与DPTR指向的两字节单元交换。保持其它R和M不变。 5、将30H、31H单元内容存入5C30H、5C31H单元。保持其它R和M不变。 6、将30H、31H单元内容加上数03C4H后存入5C30H、5C31H单元。 7、将30H、31H单元内容减去数03C4H后存入5C30H、5C31H单元。 8、将30H、31H单元内容除以2后存入5C30H、5C31H单元。 9、将30H、31H单元内容乘以2后存入5C30H、5C31H单元。 10、将30H、31H单元内容减1。保持其它R和M不变。 11、将30H、31H单元内容加1。保持其它R和M不变。

12、将外部RAM中的5C30H、5C31H单元内容乘以2。保持其它R和M不变。 13、将外部RAM中的5C30H、5C31H单元内容除以2。保持其它R和M不变。 14、将30H的低半字节和31H单元的高半字节交换。 15、将30H的高半字节和31H单元的高半字节交换。

16、将30H、31H单元的4位16进制数的中间两位数交换。

17、如果INT0为低,则,位30H改为它的值与P0口最低位的“反”相“与”后的值;否则,清30H位。

18、如果INT0为低,则,位30H改为它的值与P0口最高位的“反”相“或”后的值;否则,清30H位。

19、如果INT0为高,则,位30H改为它的值与P0口最低位相“或”后的值;否则,取反30H位。

20、如果INT0为低,则,A的最低位与A的最高位对调;否则,清除A。

21、如果INT1为高,则,A的最低位改为它的值与A的最高位的“反”相“与”后的值;否则,取反A。

22、改变30H单元为加上数0F7H后的值,如果产生进位,则,设置F0标志;否则,清除F0标志。

23、改变30H单元为减去数0F7H后的值,如果产生进位,则,设置F0标志;否则,清除F0标志。

24、如果30H内容等于数80H,则,P1.0置位;否则,P1.0清零。保持其它R和M不变。 25、改变30H、31H单元内容为乘以2后的值,如果产生进位,则,工作寄存器换用寄存器组1。

26、改变30H、31H单元内容为除以2后的值,如果余数为1,则,工作寄存器换用寄存器组3。

27、已知晶振频率为8MHZ,编一个子程序,延时150微秒。保持其它R和M不变。

20

28、已知晶振频率为6MHZ,编一个子程序,延时30微秒。保持其它R和M不变。 29、将从10H开始的64单元内容异或数5AH。保持其它R和M不变。 30、将由R0寻址的32个单元内容清为零。保持其它R和M不变。

31、将由R0寻址的32个单元内容移到R1寻址的单元中。保持其它R和M不变。

32、将由R0寻址的16个单元内容改为与R1寻址的单元相“异或”后的值。保持其它R和M不变。

33、将由R0寻址的32个单元内容改为与R1寻址的单元相“或”后的值。保持其它R和M不变。

33、将由DPTR寻址的100个单元中找出第一个内容为00H的单元,其地址存入30H、31H。 35、将从5C00H开始的100个单元内容移到5E00H开始的单元中。

36、将从5C00H开始的100个单元内容改为与5E00H开始的单元相“或”后的值。 37、将从5C00H开始的100个单元内容改为与5E00H开始的单元相“异或”后的值。 38、将从5C00H开始的100个单元中找出第一个内容为00H的单元,其地址存入30H、31H。 39、将从5C00H开始的100个单元中找出第一个内容不为00H的单元,其地址存入30H、31H。

40、将从5C00H开始的100个单元中找出最大的数和存该数的单元,数存入40H,地址存入30H,31H。

41、将从5C00H开始的100个单元中找出最小的数和存该数的单元,数存入40H,地址存入30H,31H。

42、将从5C00H开始的100个单元中找出第一个偶数和存该数的单元,数存入40H,地址存入30H,31H。

43、将从5C00H开始的100个单元中找出第一个奇数和存该数的单元,数存入40H,地址存入30H,31H。

44、编查表子程序,按40H中的索引数查出存在5C00H中的100个三字节数,存入30H,31H,32H。

45、编多分支转移程序段,按40H中的索引数,取转移地址表中的两字节地址,进行跳转。 46、将R0指向的三字节带符号数取负后存回。 47、将R0指向的三字节数取R2R3乘以R4的积。

48、将R0指向的二字节带符号数乘以2,校验是否溢出。 49、将R0指向的二字节带符号数除以2。 50、一字节带符号数R2R3=R4乘以R5。 51、将R0指向的二字节数乘以10。 52、将R0指向的2n字节的单字节BCD码转换成压缩BCD码,放于(R1)指向的n字节中。 53、将R0指向的n字节的压缩BCD码转换成单字节BCD码,放于(R1)指向的2n字节中。

二、优化编制小程序

A、用最少的机器周期编制以下各程序。

1、将R0所指的二字节数除以16,保持R0不变。

2、将R0所指的n字节(n存于A中)乘以16,保持R0不变。

21

3、不用乘法指令实现将R0所指的1字节数乘以10。 4、将二字节单元正整数(存于W1W0)整除以3。 B、用最短的程序长度编制以下各程序:

5、对由R0寻址的n字节数(n<127,R0指在最低字节上)乘以2k(k?8)的子程序,出口时R0不变。

6、全程范围(64k)的查常数表程序,入口常数指针存于W0(低),W1(高)中。 7、(R2)2=(R0)2+(R1)2,保持R0、R1、R2不变。

8、在从1000H开始的外部RAM中找出周期大于等于10H小于20H的第一组数据长度,找不到时长度取为0。

*三、综合程序编制:

1、编制一个能进行加、减运算的计算器,包括监控部分。 2、编制能让数码管以各种花样表演显示的监控及显示程序。 3、编制一个时钟程序,包含监控系统工程。 4、编制一个系统能做到:

按下MOV键时能将此之前的数字以输入时的速度再自动重现出来。

5、编一个监控,能输入数字及小数点,并将有小数点的数码管以约每秒3~4次闪烁,其余数码管保持不变的方式显示。

6、编制一个复位后能继续原有工作的监控程序。例如保持原有花样显示表演或计算器工作的系统。

22

本文来源:https://www.bwwdw.com/article/i4fw.html

Top