《单片机技术》历年考试题目
一、填空题
1、8051单片机的内部硬件结构包括了: CPU 、 时钟电路 、
中断控制系统 、 串行口 以及片内数据存储器、片内程序存储器、并行I/O口、位处理器等部件,这些部件通过 内部数据总线 相连接。(0707)(0801)(0607)
2、 8051单片机的内部硬件结构包括了: CPU ,片内RAM ,
片内ROM , 定时/计数器 以及并行I/O口、串行口、中断控制系统、时钟电路、位处理器等部件,这些部件通过 内部数据总线 相连接。(0901)(0307)
3、MCS-51单片机的整个存储器系统是由 芯片内存储器 和 芯片外扩展存储器 两部分构成的。MCS-51单片机的程序存储区的最大寻址范围为 64K 字节,字节内数据存储空间的最大寻址范围是 256 字节,片外数据存储空间的最大寻址范围是 64K 字节。(0707)
4、 MCS-51单片机中唯一一个供用户使用的16位寄存器是 DPTR ,该寄存器在访问外部数据存储器时作为 地址指针 使用。(0807)(0601)
5、DPTR在访问 外部数据存储器 存储器时做地址指针用,DPTR是 16 位寄存器。(0807)(0901) (0607)(0307)(0507)
6、 MCS-51单片机的堆栈区只可设置在 片内数据存储区(器) ,堆栈寄存器SP 是 8 位寄存器。(0701) (0807)(0301)
7、 MCS-51的堆栈是属于 向上(向高位地址) 生长型,这种堆栈的进栈操作规则是 SP先加1,后写入数据 (0901)(0607)(0307) 8、 MCS-51单片机的P0—P3口均是 并行 I/O口,其中的P0口和P2口除了可以进行数据的输入、输出外,通常还用来构建系统的 数据总线 和 地址总线 ,在P0—P3口中, P0 为真正的双向口, P1—P3 为准双向口。(0701)(0801)(0301) 9、 MCS-96单片机的最大寻址空间是 64K ,该空间的地址范围为 0000H—
FFFFH ,系统上电及复位的程序入口地址为 2080H ,芯片配置字节CCB的地址为 2018H 。(0701)(0301)
10、变址寻址是以 数据指针DPTR 或 程序计数器PC 寄存器作为基地址寄存器,以 累加器A 作为变址寄存器,并以两者的内容相加形成的 16 位地址操作数地址,以达到访问程序存储器中数据表格的目的。(0901)(0607)(0307)
11、MCS-51单片机的变址寻址是以 DPTR或PC 作基地址寄存器,以 AC 作变址寄存器,并以两者内容相加形成的16位地址作为操作数地址,以达到访问 程序 存储区中的数据表格 的目的。(0401) 12、MCS-51单片机外部中断请求信号有电平方式和 脉冲方式 ,在电平方式下,当采集到INT0、INT1的有效信号为 低电平 时,激活外部中断。(0701)
13、MCS-51单片机的外部中断请求信号若设定为电平方式,只有在中断请求引脚上采样到 有效的低电平 信号时,才能激活外中断。而在脉冲方式时,只有在中断请求引脚上采样到 脉冲的后沿负跳有效 信号时,才能激活外中断。
14、MCS-51单片机共有 2 个可编程的定时器/计数器,采用 16位加法 计数结构。(0901)(0607)(0307) 15、定时器/计数器的工作方式3是指的将 定时器/计数器0串行 拆成两个独立的8位计数器。而另一个定时器/计数器此时通常只可作为 口的波特率发生器 使用。(0701)
1
16、单片机系统中经常采用的地址译码技术包括 线选地址译码 方法和
全地址译码 方法。
17、MCS-51单片机外部中断请求信号有脉冲方式和 电平方式 ,在脉冲方式下,当采集到INT0、INT1的有效信号为 后沿负跳脉冲信号 时,激活外部中断。(0601) 18、MCS-51单片机的片内数据存储空间的128字节单元通常可划分为3个区域,这3个区域分别是 寄存器区 、 位寻址区 、 用户RAM区 。 19、溢出标志OV只有在进行 符号数 加法运算时才有意义,OV=0表示加法运算结果 正确 ,OV=1表示加法运算结果超出了A 所能表达的符号数有效范围。(0401) 20、定时器的计数方式是对来自T0、T1引脚的脉冲计数,输入的外部脉冲在 负跳变 时有效,计数器加1,定时功能也是通过计数器计数来实现的,定时功能下的计数脉冲来自 单片机内部的时钟电路 。
21、MCS-51单片机的一个机器周期包含了 6 个状态周期,每个状态周期又可划分为 2 个节拍,一个机器周期实际又包含了 12 个振荡器周期。
22、MCS-51单片机的运算电路包括了 算术逻辑运算单元ALU 、 累加器A , B寄存器 以及状态寄存器PSW和暂存寄存器等部件。 23、MCS-51单片机的控制电路包括了 程序计数器PC 、 指令寄存器 、 指令译码器 和PC加1寄存器以及定时与控制电路等部件。
24、MCS-51单片机的最大程序寻址空间是 64K ,该空间的地址范围为:0000H 至 FFFFH ,系统上电及复位的程序入口地址为 0000H 。
25、MCS-51单片机的片内数据存储空间的最大寻址范围是 256字节 、片外数据存储空间的最大寻址范围是 64K 字节 。(0501) 26、汇编语言指令中的操作数用于给指令的操作提供 操作数据或地址 。
27、MCS-51单片机的运算电路以 算术逻辑运算单元(ALU) 为核心,完成的算术运算包括了加、减、乘、除以及 增量 、 减量 、 比较 等
28、当MCS-51单片机采集到INT0、INT1引脚的有效信号为后沿负条脉冲信号激活外部中断,称为 脉冲 中断方式。当采集到INT0、INT1引脚的有效信号为低电平激活外部中断称为 电平 中断方式。
29、从下表中,已知MCS-51单片机程序状态字PSW中的各位分别是F0、RS1、RS2、P,请在下表中添写PSW的剩余位,并简单说明所添写的PSW中各位的含义。 F0 RS1 RS0 PSW.7为 CY :进位标志位 PSW.6为 AC:辅助进位标志位
/ P PSW.2为 OV:溢出标志位 30、在进行除法运算时,B寄存器中放入的数据为 除数 ,除法指令执行完毕后,B寄存器中存放的数据为 商 。
31、定时器/计数器的工作方式0为 13 位计数结构,其计数器由 TH0的 高8位和 TL0的低5位 构成。
二、选择题:
1、片内RAM的00H—1FH为四组通用寄存器的地址,现要选择18H—1FH地址单元作为工作寄存器使用,PWS中的RS1、RS0应设置为( D ) A、0 0 B、0 1 C、1 0 D、1 1
2
2、片内RAM的20H—2FH为位寻址区,所包含的位地址是( B ) A、00H---20H B、00H—7FH C、20H---2FH D、00H---FFH 3、当执行完毕MOV A,#00H指令后,( A )。 A、不影响PSW B、AC标志清0 C、C标志清0 D、PSW清0
4、JMP @A+DPTR指令的寻址范围包括了(B )
A、片内、片外RAM区 B、64K的ROM区
C、片外RAM区 D、整个ROM、RAM空间 5、当MCS-51单片机接有外部存储器,P2口可作为( D ) A、数据输入口 B、数据的输出口 C、准双向输入/输出口 D、输出高8位地址 6、MCS-51单片机的堆栈区是设置在(C )中 A、片内ROM区 B、片外ROM区
C、片内RAM区 D、片外RAM区
7、在寄存器间接寻址方式中,间接寄存器中存放的数据是( B ) A、参与操作的数据 B、操作数的地址值 C、程序的转换地址 D、指令的操作码
三、简答题:
1、请简述单片机中的控制引脚信号ALE、/EA、/PSEN的功能(0807)(0901)(0601)(0307) 答:ALE为地址锁存控制信号,作为P0口送出的低8位地址信号的锁存信号,可用于分离P0口的低8位地址与8位数据信号。 /EA为访问外部程序存储器的控制信号,当/EA=0时,单片机从外部ROM读取数据,/EA=1单片机从内部ROM开始读取数据并可以延伸至外部ROM。
/PSEN为访问外部程序存储器的读选通控制信号,当单片机读取外部ROM数据时,PSEN为“0”,以实现外部ROM的读操作。
2、已知一单片机系统的外接晶体振荡器的振荡频率为11.059HZ,请计算该单片机系统的节拍P、状态S、机器周期所对应的时间是多少?指令周期中的单字节双周期指令的执行时间是多少?(0801)(0301的参数计算题)
P1f1(11.059106)0.09106s90nsS2P290ns180ns机器周期12P1290ns1.08s双指令周期2机器周期2.16s
3、 什么是MCS-51系列单片机的复位操作? MCS-51系列单片机有几重复位方法?
请画出MCS-51系列单片机复位电路并解释该电路的基本工作原理。
答:复位是单片机的初始化操作,单片机在启动运行时,都需要先进行复位操作。 此外当单片机处于死机状态时,也可以通过复位方式重新启动单片机系统。
MCS-51系列单片机共有上电复位和手动复位两种方式。
3
MCS-51系列单片机复位电路图见《单片机技术》教材34页图2-11(b)图 上电复位电路利用电容C充电来实现,上电瞬间,RC电路充电,单片机的
RST引脚端出现正脉冲,当该正脉冲保持2个周期以上的高电平,便可使单片机复位。 手动按键复位则是通过使复位端经R1与Vcc接通而实现的。
4、(19分)(0707)(0701)
1、MCS-51系列单片机具有几个中断源?如何设置这些中断源的优先级?
2、各中断源对应的中断服务程序的入口地址是否能任意设定?
3、如果想将中断服务程序放置在程序存储区的任意区域,在程序中应该做何种设置才能够转移到该中断服务程序执行?请举例加以说明。
答1、具有5个中断源,分别是外部中断INT0和外部中断INT1、定时器溢出中断0和定时器溢出中断1以及串行中断,通过对中断优先级寄存器IP的设置,每个中断源都可以被定义为高优先级中断。
2、各中断源的入口地址已经在中断地址区中被定义了,不能任意设顶。
3、如果要将中断服务程序放置在程序存储区的任意区域,在程序中要通过在中断地址区的对应地址上设置跳转指令才可实现对中断服务程序的执行。
例如:外部中断0的中断服务程序INT0-P放置在程序存储区的任意区域,此时,通过以下方式,可实现对中断服务程序的执行: ORG 0003H
JMP INT0-P
(列举其他中断跳转的例子也可,但叙述的中断源要与中断地址相对应才可得分,如外中断0对应0003H地址)
5、简述题
(1)MCS-51单片机的中断控制原则是什么?
(2)MCS-51单片机的CPU是如何判断中断源是否有中断请求发生的?
(3)如果某一单片机系统有一外部中断1的中断服务程序INTP1放置在程序存储区的2000H地址开始的一段存储空间中。请问,在编程时应该作何种设置,才能在CPU响应外部中断1时找到对应的中断服务程序INTP1? 答:(1)中断控制原则包括了三部分:①低优先级中断不能打断高优先级中断,而高优先级重担可以打断低优先级中断,以实现中断嵌套;②如果一个中断请求已被响应,则同级的其他中断将被禁止,即同级中断不能嵌套;③如果同级的多个中断请求同时出现,则按CPU的同级查询次序确定那一中断先响应。
(2)CPU是通过测试TCON和SCON中各个标志位的状态来确定有没有中断请求发生以及是哪一个中断源的中断请求。
(3)MCS-51单片机外部中断1的中断地址区为0013H—001AH,当外部中断1的中断服务程序INTP1放置在程序存储区的2000H开始的存储区,此时,在编程时通过以下方式,可实现对中断服务程序的执行: ORG 0013H
JMP INTP1或(JMP 2000H)
6、(0607)已知:在某一子程序执行至RET指令时(尚未执行RET指令),堆栈指针(SP)=25H,程序计数器(PC)=5555H,片内RAM的(24H)=12H,(25H)=34H,(26H)=56H,在执行完了RET指令后, (SP)= 23H ,(PC)= 3412H
4
返回指令RET的操作为(PC15-8)←((SP)) (SP)←(SP)-1 (PC7—0)←((SP)) (SP)←(SP)-1
7、请简述一条单片机指令的执行过程。
答:单片机的指令执行过程为:在控制电路的控制下,首先从程序存储器中取出指令送指令寄存器保存,然后送指令译码器进行译码,译码结果送定时控制逻辑电路,由定时控制逻辑电路产生各种定时信号和控制信号,再送到系统的各个部件去进行相应的操作。
8、堆栈是什么?请简述MCS-51单片机堆栈的功能,为什么说堆栈需要有足够的容量? 答:堆栈是一种数据结构,对于MCS-51单片机而言,堆栈只能开辟在芯片内部数据存储区中。堆栈的第一功能是保存断点地址,因为在单片机执行中断服务程序或进行子程序调用后,都将返回到断点处继续执行程序,为此应预先将断点地址保存在堆栈中,这一入栈、出栈过程是CPU自动完成的。第二种功能是保护现场,即对于在主程序和中断程序、子程序中使用的同一个寄存器在进入中断程序和子程序执行之前要推入堆栈保护并在执行完中断程序和子程序后再加以恢复。这一过程是通过入栈、出栈指令完成的。
由于单片机具有多级中断嵌套和多重子程序调用,所以要求堆栈具有足够的容量。
四、判寻址方式
指出下列各条指令中源操作数的寻址方式(10分)(0701)
1、MOV P1, R7 寄存器寻址 2、MOV 30H, 50H 直接寻址 3、MOV DPTR, #1050H 立即寻址 4、MOV A,@R1 寄存器间接寻址 5、MOVC A,@A+DPTR 变址寻址 6、MOV C,10H 位寻址 7、DJNZ R7,rel 相对寻址 8、XCH A, R7 寄存器直接寻址 9、MOVC A, @A+PC 变址寻址 10、MOV 20H, A 寄存器寻址 11、MOV 30H, C 位寻址 12、ANL A,20H 直接寻址 13、ADDC A,#20H 立即寻址 14、JZ rel 相对寻址 15、CLR C 位寻址 16、RR A 寄存器寻址 17、MOV R6,A 寄存器寻址 18、MOV A,50H 直接寻址 19、JC rel 相对寻址
20、MOVX A,@DPTR 寄存器间接寻址 21、MOVC A,@A+PC 变址寻址 22、MUL AB 寄存器寻址
5
五、判断改错题(10分)
请判断MCS-51单片机的下列各条指令的书写格式是否有错误,如有请说明错误原因。 1、MUL R0 R1 乘法指令应使用A、B寄存器操作
2、ADD 30H, 20H 运算指令中的目的操作数必须为累加器A
3、MOV R1,C 位寻址方式中的源操作数和目的操作数均应为位地址,R1是字节寄存器,这样书写是不对的。
4、MOVX A,@A+DPTR
MOVX指令为对外部数据存储区操作指令,使用的间接寄存器只能是DPTR,使用寄存器间接寻址方式,不可使用变址寻址方式。
5、MOVC B, @A+DPTR
MOVC指令为对程序存储区的操作指令,传送的目的寄存器只能为累加器A,不能传送给其他寄存器。
6、DJNZ rel, R0
错误。寄存器R0与相对转移地址写反了。 3、JMP @A+DPTR 正确
4、LJMP #1000
错误。长转移指令中的操作数为16位转移地址,不能用立即数的形式表达。 5、DJNZ 20H, NEXT 正确
6、MOV A,@R7
错误。间接寄存器使用R7有误,间接寄存器只能使用R0、R1 7、CLR R0
错误,CLR为位操作指令,不可对字节寄存器操作。
8、MOV DPTR,1050H
错误。不能将直接地址1050H送入DPTR,DPTR只能接收立即数。(或答:第二操作数只能为立即数)
9、CJNE A,#50H,NEXT 正确
10、MOV A, #3000H 8位累加器A不能接受16位数据 11、MOVC @A+DPTR, A
MOVC指令为对程序存储区操作指令,累加器的内容不可通过变址方式送如程序存储器,两操作数写反了。
12、JMP @R0+DPTR
错。变址寻址中的变址寄存器只可使用A与DPTR相加的形式完成。 13、XCH A,#00H
错。交换指令只能在寄存器、寄存器与直接地址、间接地址之间进行数据交换,不能与立即数进行数据交换。
14、程序计数器PC的地址为D0H,是可以寻址的专用寄存器( ) 错,PC没有地址,是不可寻址的专用寄存器。
15、转移指令中的偏移量rel是一个无符号的8位二进制数。( ) 错。是一个以补码表示的8位二进制符号数。
16、MCS-51单片机的P3口是一个单一功能的准双向通用I/O口。( )
错。P3口除了可作通用I/O口,P3口线还具有第二功能,为系统提供一些控制信号。 17、堆栈主要是为中断操作以及子程序调用而设立的,其功能主要是保护短点地址和保护现场。( )
6
对
18、D/A转换是指将一个随时间连续变化的模拟信号转换为计算机所能接受的数字量。( ) 错。D/A转换是将计算机处理后的数字量转换为时间连续的模拟信号。
19、对于需要外扩存储器的单片机系统,P0口主要是作为单片机系统的数据线使用。( ) 错。P0口主要是作为单片机系统的数据线与低8位地址线分时共用口使用。
20、当P1口作为输入口使用时,应先向其所存器写入“0”,使输出驱动电路的场效应管FET截止。( )
错。应先向其锁存器写入“1”
21、程序计数器PC中的数据是当前正在执行的指令的地址。( ) 错。是下一条指令的地址。
22、MCS-51单片机的低8位地址线是由P1口提供的,高8位地址线是由P3口提供的。( ) 错。低8位地址线是由P0口提供,高8位地址线是由P2口提供。
23、A/D转换是将计算机处理后的数字量转化为时间连续的模拟信号输出。( ) 错。A/D转换是将一个随时间连续变化的模拟信号转换为计算机所能接受的数字量。
六、 指令分析题(14分)(0807)
试比较下面每一组中两条指令的区别(可直接在每条指令后写出其区别)
1、 MOVX A,@R1
以R1为地址指针的片外数据存储器的内容传送到累加器A中. 2、MOVX @R1 ,A
累加器A中的内容传送到以P1为地址指针的片外数据存储器中. 3、XCH A,R0
A与R0中的数据交换。
4、XCH A,20H
A与直接地址20H中的数据交换。
七、程序分析题
1、设在MCS-51单片机片内RAM中,(20H)=40H,(22H)= 10H,(40H)= 22H,P1=0CFH,当下列程序执行完毕后,各单元的内容分别为多少?请填入给定的各个寄存器及片内单元中。(0801)(0707) MOV R0,#20H MOV A,@R0 MOV R1, A MOV B, @R1 MOV @R1, P1
MOV P3, P1
(A)= (B)= (R0)= (R1)= (P1)= (P3)= (20H)= (40H)= (A)=40H (B)=22H (R0)=20H (R1)=40H
(P1)=0CFH (P3)=0CFH (20H)=40H (40H)=0CFH 2、(16分)(0807)
分析下列程序段,当最后一条指令执行后,A中的结果为多少?CY、AC、OV如何置位?
MOV A,#0C9H MOV B,#8DH
7
SETB C SUBB A,B
(A)= (CY)= (AC)= (OV)= A=3BH CY=0 AC=1 OV=0 3、程序分析题(8分)(0607)(0907)
设在MCS-51单片机内RAM中,(20H)=10H,(40H)=10H,P1=0CFH,P3=0AAH,当下列程序执行至伪指令END处时,各相关单元的内容分别为多少?请填入给定的各个寄存器及片内、片外存储器中。 MOV B,20H MOV A,40H MUL AB MOV P1,A MOV P3,B ADD A,B
MOV DPTR , #2000H MOVX @DPTR,A INC DPTR MOV A,B MOVX @DPTR A
END
(A)= ,(B)= ,(P1)= ,(P3)= (20H)= ,(40H)= ,(片外2000H)= (片外2001H)= 解:(A)=01H (B)=01H (P1)=00H (P3)=01H (20H)=10H (40H)=10H (片外2000H)=01H (片外2001H)=01H
4、程序分析及计算题(15分)(0901)(0607)(0307)
有一单片机系统,现启动了定时器0进行中断方式下的循环定时运行,要求每经过2ms进入一次定时器中断,完成将A中的内容左环移一次并送往P1口,编程的运行程序如下:
ORG 0000H LJMP MAIN ORG 000BH T0INT: MOV TL0,#30H MOV TH0,#0F8H RL A MOV P1,A RETI ORG 0100H
MAIN: MOV TMOD,#01H MOV TL0,#30H MOV TH0,#0F8H MOV A,#01H
8
SETB TR0
SETB ET0 SETB EA WAIT: SJMP WAIT
请分析以上程序,利用题中已给出的数据计算: 单片机系统的机器周期为多少?
单片机的状态S为多少/
单片机系统所外接的晶体振荡器频率为多少?
答:TMOD=01则:定时器0工作在定时方式1(16位计数方式)
初装值:F830H=63536(TH0=F8H TL0=30H) 计数值=65536-63536=2000 机器周期=2ms/2000= 1s状态S机器周期/61s/60.167s167ns
5、请分析下列程序执行至伪指令END处时,各相关单元的内容分别为多少?请填入给顶的各个寄存器中。
ORG 20H DATA:DB 11H,22H,33H,44H MAIN:MOV R3,#03H MOV R0,#DATA MOV R1,#DATA+1 CLR C
MOV A,@R0 LOOP: ADDC A,@R1 MOV @R0,A INC R0 INC R1
DJNZ R3,LOOP
END
(A)= AAH (R0)= 24H (R1)= 25H (R3)= 00H (20H)= 33H (21H)= 66H (22H)= AAH (C)= 0
6、请分析下列程序执行至伪指令END处时,各相关单元的内容分别为多少?请填入给顶的各个寄存器中。
ORG 20H DATA:DB 22H,33H,44H ORG 24H DATB:DB 01H,02H,03H MAIN:MOV R3,#03H MOV R0,#DATA MOV R1,#DATAB CLR C
LOOP: MOV A,@R0
9
晶体振荡器的频率:f12/机器周期12/1s12MHZ
ADDC A,@R1
MOV @R0,A INC R0 INC R1
DJNZ R3,LOOP
END
(A)= 47H (R0)= 22H (R1)= 26H (R3)= 00H (20H)= 23H (21H)= 35H (22H)= 47H (C)= 0
八、参数计算题
1、已知一MCS-51单片机系统使用10MHZ的外部晶体振荡器,请问:(15分)(0807) (1)该单片机系统的状态S与机器周期各为多少?
(2)当单片机的定时器0(T0)工作在方式2时,T0的最大定时时间为多少? (3)当单片机的定时器0(T0)工作在方式2时,要求计时达到250 μs便产生一次定时器溢出,请问,T0中需要预置的初始值应为多少?
Ts2Fosc2(10106)0.2sTcy6Ts60.2s1.2sTomax1.2S256307.2S计数值TC250s2081.2s计数初值N25620848
2、(21分)(0701)
已知一MCS-51单片机系统使用8MHZ的外部晶体振荡器,请问: 该单片机系统的状态周期和机器周期各位多少?
当单片机的定时器0(T0)工作在方式2时,T0的最大定时时间为多少?
当单片机的定时器0(T0)工作在方式2时,要求每记满300μs便产生一次定时器溢出,请问,T0中需要预置的初始值应为多少?
Ts2/Fosc2/81060.25s250nsTcy60.25s1.5sTomax1.5s256384s计数值TC300s2001.5s计数初值N25620056
3、(20分)(0601)(0907)
有一单片机系统的外部晶体振荡器频率为12MHZ,现启动单片机的定时器0工作于定时方
10
式,要求定时器0的定时时间为1ms,计算: (1) 机器周期为多少?
(2) 计时1ms所对应的定时器计数值为多少?
(3) 在方式0下,装入定时器的初值为多少?TH0,TL0中装入的初值数据分别是多
少? (4) 在方式1下,装入定时器的初值为多少?TH0,TL0中装入的初值数据分别是多
少? (1)机器周期12121s 6FOSC1210 (2)计时时间:1ms机器周期计数值
计数值1ms100 0机器周期13(3)方式0为13位计数方式,装入的初值为2计数值71921C18H
1C18H0001110000011000B
低5位装入TL0,则TL0=18H, 高8位装入TH0,则:TH0=E0H
(4) 方式1为16位计数方式,装入的初值为2低8位装入TL0,则TL0=18H 高8位装入TH0,则TH0=FCH
4、有一单片机系统的外部晶体振荡器频率为10MHZ,现启动单片机的定时器0工作于定时方式,请计算:(0407) (1)该单片机系统的机器周期为多少?
(2)定时器0计时,2.4ms所对应的定时器计数值为多少?
(3)在方式0下,要达到2.4ms的定时时间,装入定时器的初值为多少?
(4)在方式0下,要达到2.4ms的定时时间,TH0、TL0中装入的初值数据分别为多少? 解:(1)机器周期=
16计数值65436FC18H
12121.2s Fosc10106(2)计时时间:2.4ms=机器周期╳计数值
计数值=2.4ms/机器周期=2000
(3)方式0为13位计数方式,装入的初值为213-计数值=6192=1830H 1830H=0001100000110000B
(4)低5位装入TL0,则:TL0=10H 高8位装入TH0,则TH0=C1H
5、有一单片机系统的外部晶体振荡器频率为8MHZ,现启动单片机的定时器0工作于定时方式,请计算:(0501)
(1)该单片机系统的机器周期为多少?
(2)定时器0计时,15ms所对应的定时器计数值为多少?
(3)在方式1下,要达到15ms的定时时间,装入定时器的初值为多少?
11
(4)在方式1下,要达到15ms的定时时间,TH0、TL0中装入的初值数据分别为多少? 解:(1)机器周期=
12121.5s 6Fosc810(2)计时时间:15ms=机器周期╳计数值 计数值=15ms/机器周期=10000
(3)方式1为16位计数方式,装入的初值为2- 计数值=55536=D8F0H (4)低8位装入TL0,则:TL0=F0H 高8位装入TH0,则TH0=D8H
6、已知一单片机系统中的单字节双周期指令的执行时间是2.5μs,请问该单片机系统的外接晶体振荡器的振荡频率为多少?该单片机系统的节拍P、状态S、机器周期所对应的时间各为多少?(计算结果如有小数,请保留小数点后3位数值) 解:(1)机器周期=
16
2.5s1.25s 2(2)状态S:由机器周期=6S S机器周期1.25s0.208s 66(3)节拍P:由机器周期=6S=12P
P机器周期1.25s0.104s
1212(4)由机器周期=12/F osc Fosc=
12129.6MHZ
机器周期1.25s九、编程题
1、有一组5个8位无符号数据放在片内RAM从20H地址开始 的单元中,请编程实现这5个字节数据的求和计算,并将数组之和存放于片外RAM的30H单元。(设定数组之和小于255)。程序以RET指令结束。
若已知这5个数据分别为:1AH、01H、58H、3AH、52H,在片外30H单元中所得到的和值为多少?(0901)(0601)
D—ADD: MOV R0,#20H ;也可用R1 MOV R7,#05H ;可用R2----R7 CLR A
LOOP: ADD A,@R0 INC R0
DJNZ R7,LOOP MOV R0,#30H MOVX @R0,A RET 片外(30H)=FFH
2、使用简单指令序列完成以下操作(18分)
12
(1)请将片外RAM20H---25H单元清零 (2)请将ROM3000H单元内容送R7(0701) (1)MOV R0,#20H MOV R7,#06H CLR A
LOOP:MOVX @R0,A INC R0
DJNZ R7,LOOP (2)MOV DPTR,#3000H CLR A
MOVC A,@A+DPTR
MOV R7, A
3、已知在单片机内RAM30H地址开始的缓冲区中存有一组48字节的ASCII码字符串,现要将这组字符串送往片外RAM的20H开始的数据缓冲区,在传送过程中,当检测到字符串中的ASCII码字符“&”(ASCII码为62H)时,在完成了“&”字符的传送后结束本次数据传送,若这组字符串中不含有“&”,则完成全部字符串的传送,请编程。
MOV R0,#30H ;间址寄存器也可选择R1
MOV DPTR,#20H ;间址寄存器也可用R0或R1,但不能与上一句指令中用到的寄存器重复。
MOV R7,#30H ;可用任一寄存器R0—R7,同样不能与上二句指令中
用到的寄存器重复
LOOP:MOV A,@R0
MOVX @DPTR,A
SUBB A,#62H ;判是否为“&”字符 JZ LOOP1 ;是则结束 INC R0 ;地址分别加1 INC DPTR
DJNZ R7,LOOP ;循环控制 LOOP1: RET
4、 已知一MCS-51单片机系统的片内RAM20H单元存放了一个8位无符号数7AH,
片外扩展RAM的8000H存放了一个8位无符号数86H,试编程完成以上两个单元中的无符号数相加,并将和值送往片外RAM的01H、00H单元中,同时将所编写程序运行完成中后数据和状态添入下表中给出的PSW的有关位及寄存器A、DPTR和RAM单元中。 CY 解: CY 0 A 01H DPTR 8000H 片外01H 01H 片外00H 00H 片外8000H 86H A DPTR 片外01H 片外00H 片外8000H MOV DPTR,#8000H ;加数单元地址送DPTR MOVX A,·DPTR ;取加数之一 ADD A,20H ;两数相加
13
MOV R0,#00H ;和值的低位送片外00H单元
MOVX @R0,A INC R0
CLR A ;计算和值的高位 ADDC A,#00H
MOVX @R0,A ;高位送片外01H单片
RET
编程要考虑将进位位的值作为结果的一部分取出来,采用其它变成方式也可以,但结果是不会改变的,和值=100H
5、 使用简单指令序列完成以下操作(0401)
(1) 编程实现对片外RAM从20H地址开始的100个存储单元0处理。 (2) 编程实现运算式(F000H---5005H)(式中数据均为无符号数),运算结果存入片外RAM的1000H开始的地址单元。 解:(1) MOV R0,#20H ;赋清零单元首地址 MOV R3,#100 ;赋清零单元计数器 CLR A ;累加器清零
LOOP:MOVX @R0,A ;外部单元清零 INC R0 ;指向下一单元 DJNZ R3,LOOP;清零过程未完继续
RET
(2) MOV DPTR,#1000H ;设运算结果单元地址
CLR C ;清进位位
MOV A,#00H ;被减数低8位送A SUBB A,#05H ;低8位数据相减 MOVX @DPTR,A ;存低8位差值
INC DPTR ;指针增1
MOV A,#0F0H ;取被减数高8位 SUBB A,#50H ;高8位数据相减 MOVX @DPTR,A ;存高8位差值
6、 已知在单片机片内RAM中从ASCII地址开始的缓冲区中存有8个以ASCII码表示的数据0—9,请编程将这组ASCII码数据转换为十进制数据并送往片外RAM中从DATA开始的数据缓冲区。(程序名和程序中要使用的标号可以自行定义)。 ASC DATA: MOV R2,#08H MOV R1,#ASCII MOV R0,#DATA LOOP: MOV A,@R1 SUBB A, #30H MOVX @R0,A INC R0
INC R1
DJNZ R2,LOOP RET
7、 使用简单指令序列完成以下操作
(1) 已知两个数据7FH和80H,请编程完成这两个数据的乘法运算(7FH×80H),
14
并将乘积转送到片内RAM的30H开始的单元中,其中30H单元存放乘积的低
8位数据。
(2) 请问,当执行完第1小题所要求的操作后,存入片内RAM的30H、31H单元
中的数据为多少?
解:(1) MOV A,#7FH MOV B,#80H MUL AB MOV 30H,A MOV A,B MOV 31H,A (3) 7FH × 80H =3F80H
(30H)=80H
(31H)=3FH
8、请编制两字节(16位)无符号数减法程序。其中被减数的高位数据存放在单片机片内RAM的21H单元、低位数据存放在20H单元中,减数的高位数据存放在23H单元、低位数据存放在22H单元,差值的高位和低位数据分别存放到片外扩展RAM的3001H和3000H地址单元中,程序以RET指令结束(程序名和程序中要使用的标号可以自行定义)(0407)
SUB DATA: MOV DPTR,#3000H
CLR C
MOV A,20H SUBB A,22H MOVX @DPTR,A MOV A,21H SUBB A,22H INC DPTR
MOVX @DPTR,A
RET
9 、使用简单指令序列完成以下操作。
(1) 将外部数据存储器3000H地址单元的内容转送到片外数据存储器3500H地址单
元中。 (2) 在片内数据存储器30H、40H地址单元分别存有1位BCD码,请编程实现两个BCD码发相加并将结果送入片外RAM的50H单元。 解: (1) MOV DPTR,#3000H MOVX A,@DPTR MOV DPTR,#3500H MOVX @DPTR,A
(2) MOV R0,#50H MOV A,30H ADD A, 40H DA
MOVX @R0,A
10、 已知在累加器A中存有一个单字节无符号二进制数,请编程将该数转换成3位
BCD码,其中转换后的BCD码的百位、十位、个位数分别存入片外RAM的32H、
15
31H、30H地址单元,程序以RET结束。(程序名及程序中的标号可自行定义)(0501)。 HEX BCD:MOV R0,#32H ;百位数BCD码存放地址送R0 MOV B,#100 ;除数100
DIV AB ;单字节数除100,商为百位数
MOVX @R0,A ;商值(百位BCD码)存入片外32H单元 DEC R0 ;地址指针减1 MOV A,#10
XCH A,B ;余数作被除数,10作为除数 DIV AB
MOVX @R0,A ;存十位数 DEC R0 MOV A,B
MOVX @R0,A ;存个位数 RET
11、 使用简单指令序列完成以下操作。
(1) 外部RAM20H单元内容送片内RAM20H单元 (2) 外部RAM20H单元内容送片外RAM22H单元 (3) 完成数据20H×30H,并将乘积的高位送片内RAM31H,低位送片内RAM30H。 解:(1)MOV R0,#20H MOVX A,@R0 MOV 20H,A (2) MOV R0,#20H MOV R1,#22H MOVX A,@R0 MOV R1,A MOVX @R0,A (3) MOV A,#20H MOV B,#30H MUL AB
MOV 30H,A MOV 31H,B
16
因篇幅问题不能全部显示,请点此查看更多更全内容