资源描述
资料内容仅供您学习参考,如有不当或者侵权,请联系改正或者删除。
单片机原理及应用期末复习题
一、 填空题
1.相对寻址是以 PC 的当前值为基准, 加上指令中给出的相对 偏移量 形成目标地址的方式。
2.AT89S51单片机的1个机器周期含有 12 个晶振周期或 6 状态周期。
3.AT89S51单片机进行扩展时, 用 P0 口作为地址/数据总线, 用 P2 口作为地址总线高8位。
4.假定累加器A的内容30H, 执行指令: 1000H: MOVC A, @A+PC后, 把
程序存储器1031H单元的内容送累加器A中
5. 指令格式是由 操作码 和 操作数 部分组成。
6. AT89S51单片机的串行口控制寄存器中有2个中断标志位, 它们是 TI 和 RI
7. JNC rel指令执行时, 当CY位为 0 时程序发生跳转。
8. 单片机位寻址区的单元地址是从20H单元到2FH单元, 若某位地址是10H, 它所在单元的地址应该是 22H 。
9.外部中断0的中断入口地址为 0003H , 定时/记数器T1的中断入口地址为 001BH 。
10.串行口工作方式2为 9位异步通信, 若SMOD=0, f OSC = 6 MHZ , 则其相应波特率为 6×106/64 b/s
11.堆栈应遵循 先进后出 规律, 堆栈指针的符号为 SP
12、 程序计数器PC存放的是 下一条要执行指令的地址 ;
13、 指令MOVX A, @DPTR的寻址方式是 寄存器间接寻址 :
14、 MCS-51访问ROM、 片内RAM、 片外RAM的指令助记符分别为 MOVC 、 MOV和 MOVX 。
15、 机器字长为8位, 则[—10]原 = 8AH , [-10]反 = F5H , [-10]补 = F6H 。
16、 已经累加器A = 97H, 则执行指令ADD A, #7DH后, A = 14H , C = 1 , OV = 0 , AC = 1 。
二、 单项选择题
1.AT89S51单片机的( d )口的引脚, 还具有外中断、 串行通信等第二功能。
a) P0 b) P1 c) P2 d) P3
2.单片机应用程序一般存放在( b )
a)RAM b) ROM c) 寄存器 d) CPU
3.已知某数的BCD码为0010 则其表示的十进制数值为( b )
a) 7542H b) 7542 c) 75.42H d) 75.42
4.下列指令中不影响标志位CY的指令有( d ) 。
a) ADD A, 20H b) CLR c) RRC A d) INC A
5.CPU主要的组成部部分为( a )
a) 运算器、 控制器 b) 加法器、 寄存器
c) 运算器、 寄存器 d) 运算器、 指令译码器
6.AT89S51 的CPU是( c ) 位的单片机
a) 16 b) 4
c) 8 d) 准16
7.当需要从AT89S51单片机程序存储器取数据时, 采用的指令为( b ) 。
a) MOV A, @R1 b) MOVC A, @A + DPTR
c) MOVX A, @ R0 d) MOVX A, @ DPTR
8.AT89S51单片机中既可位寻址又可字节寻址的单元是( a )
a) 20H b) 30H c) 00H d) 70H
9.下列哪条指令是正确的( d )
a) PUSH R2 b) ADD R0, A
c) MOVX A @DPTR d) MOV @R0, A
11.要使累加器A的高4位置为0000, 低4位不变, 以下指令正确的是 B 。
( A) ANL A, #0F0H ( B) ANL A, #0FH ( C) ORL A, #0F0H ( D) ORL A, #0FH
12. 利用串行口工作方式1进行异步串行通信, 当其波特率为4800bps, 每秒最多能传送
A 个字符。
( A) 480 ( B) 960 ( C) 4800 ( D) 9600
13. C51中, 要编写一个中断函数, 则必须在函数名后加 B 修饰符。
( A) void ( B) interrupt ( C) using ( D) unsigned
14. 51系列单片机系统中需扩展32KByte的片外RAM, 则需要 C 片6264( 8K×8bit) 。
( A) 1 ( B) 2 ( C) 4 ( D) 8
15. 若单片机当前正在执行高优先级的中断服务, 则以下能响应的中断是 D 。
( A) 高优先级中断 ( B) 同优先级中断 ( C) 低优先级中断 ( D) 以上都不能响应
16. 键盘的软件消除键抖动是经过 C 来实现的。
( A) 加滤波器 ( B) 中断 ( C) 延时 ( D) 加RS触发器
三、 写出实现下列各要求的指令或程序段
1、 将80H单元中的内容与数据4FH相比较, 相等返回, 不相等将80H单元置FFH返回。
MOV A, 80H
CJNE A, # 4FH, BD
SJMP L1
BD: MOV 80H, #0FFH
L1: RET
2、 外部RAM单元 H的内容传送到内部RAM单元70H;
MOV DPTR, # H
MOVX A, @DPTR
MOV 70H, A
3、 将32H单元中内容的第7位取反后送给50H。
MOV A, 32H
CPL ACC.7
MOV C, ACC.7
MOV 50H, C
4、 若( 50H) =40H, 试写出执行以下程序段后累加器A、 寄存器R0及内部RAM的40H、 41H、 42H单元中的内容各为多少? ( 5分)
MOV A, 50H ; (A)=40H
MOV R0, A ; (R0)=40H
MOV A, #00H ; (A)=0
MOV @R0, A ; (40H)=0
MOV A, #3BH ; (A)=3BH
MOV 41H, A ; (41H)=3BH
MOV 42H, 41H ; (42H)=3BH
(A)= 3BH ; (R0)= 40H;
(40H)= 0; (41H)= 3BH; (42H)= 3BH
5、 将外部数据存储器3000H开始100个存储单元的内容存入3070开始的存储单
元( 9分)
MOV DPTR #3000H
MOV P2,#30H
MOV R1,#70H
MOV R5,#100
L1: MOVX A, @DPTR
MOVX@R1,A
INC R1
INC DPTR
DJNZ R5, L1
RET
四、 读程序填空
1. CLR C
MOV A, 4DH
SUBB A,, 4EH
MOV 30H, A
MOV A, 7FH
SUBB A, 2BH
MOV 31H, A
SJMP $
( 1) 该程序的功能是: 两个16位数的减法: (7F4DH)-(2B4EH), 结果存入内部RAM的30H和31H单元, 31H单元存差的高8位, 30H单元存差的低8位
( 2) 若( 4DH) =06H, (4EH)=05H, ( 7FH) =0AH, (2BH)=01H
则执行上述程序后( 30H) = 01 H。( 31H) = 09 H。
2. START: MOV R0 , #40H
MOV R7, #04H
MOV A, @R0
LOOP: INC R0
MOV 50H , @R0
CJNE A, 50H , NEXT
NEXT: JNC BIE1
MOV A, 50H
BIE1: DJNZ R7, LOOP
MOV 30H, A
RET
(1) 该程序的功能是: 求出40H—44H中最大的无符号数, 并将最大数存入30H中
(2) 设(40H)=12H, (41H)=22H , (42H)= 6EH, (43H)=5AH , (44H)= 8AH,
填写程序执行后的结果, (30H)= 8A H。
3.已知( 30H) =49H, ( 31H) =2BH, ( 32H) =0A3H, 执行以下程序:
MOV R7, # 4
RR0: MOV R6, # 3
CLR C
MOV R0, # 30H
RR1: MOV A, @R0
RRC A
MOV @R0, A
INC R0
DJNZ R6, RR1
DJNZ R7, RR0
RET
从该程序可看出这段程序的功能是: 将内RAM中30H~32H的内容
右移4位
执行后结果: ( 30H) = 04H , ( 31H) = 92H , ( 32H) = 0BAH 。
( 3分)
4、 已知( A) =58H, ( 30H) =7FH, ( P1) =EAH, 执行下列程序:
MOV SP, #40H
PUSH A
PUSH 30H
MOV A, P1
MOV 30H, A
POP 30H
POP A
执行后结果: ( SP) = 40H , ( A) = 58H , ( 30H) = 7FH , ( 41H) = 58H 。
五、 根据题意, 按要求答题。
1. AT98S51单片机P1口上接8只发光二极管( 高电平亮, 低电平灭) , 若晶振频率是12MHz, 用定时/计数器T0以工作方式1工作, 使8只发光二极管每1S单循环点亮。
(1) 计算定时初值, 写出过程
(2) 根据相关注释, 填写程序
(3)
答: ( 1) 定时初值:
( 216-X) ×1μS = 50mS
X=216-50000
=15536
( 2) MOV TMOD, #01H ; 设T0工作方式
MOV DPTR, #15536 ; 置定时初值50mS
MOV TH0, DPH
MOV TL0, DPL
MOV A, #01H ; 置A初值
SETB TR0 ; 允许定时
LOOP: MOV R7, #20 ; 设定时次数
MOV P1, A ; 从P1口输出
LOOP1: JNB TF0, $ ; 判断定时50mS到没
CLR TF0 ; 定时时间到, TF0清0
MOV TH0, DPH ; 重新置定时初值50mS
MOV TL0, DPL
DJNZ R7, LOOP1 ; 判断定时次数到没
RL A ; 输出左移
SJMP LOOP ; 继续循环输出
END
2、 根据给定存储类型和数据类型, 声明下列变量:
( 1) 在片内RAM低128字节定义一个有符号整型变量val, 初值为100;
(signed) int data val = 100;
( 2) 在ROM定义一个3元素的无符号字节数组num, 数组内容分别为: 12H, 34H, 56;
unsigned char code num[3] = {0x12, 0x34, 56};
( 3) 在片外RAM定义一个指向无符号字节类型的指针变量p;
unsigned char xdata *p;
3、 根据下图进行分析。
( 1) 6264是程序存储器还是数据存储器?
数据存储器件
( 2) 写出三片6264所占的地址范围。
0x6000~0x7fff,0x80000`0x9fff;0xa000~0xbfff
4、 51系列单片机中, 利用8255A扩展了3个共阴极LED数码管, 如下图所示。
( 1) 写出8255A的控制字;
控制字: 0x80
( 2) 写出三位数码管显示”8””1””0”时( 按上图由左至右显示为”810”) , PA口和PB口分别送出的数据;
”8”: 0x7f 0xfe?
”1”: 0x06 0xfd?
”0”: 0x3f 0xfb?
8255控制字:
特征位
A组工作方式
A口入/出
C口高4位入/出
B组工作方式
B口入/出
C口低4位入/出
6、 简述矩阵式8行2列键盘的工作过程, 其中P1口连接8根行线, P3.0和P3.1连接2根列线。
判断是否有键按下: 先给列线P3.0和P3.1送低电平, 然后读行线P1的值, 判断P1是否为0xff; 若P1为0xff则表示没有键按下, 则返回重新判断是否有键按下; 若P1不为0xff则表示有键按下, 则延时10ms去抖动, 再重新读行线P1口, 再次判断是否有键按下。
若确实有键按下, 则判断哪一个键按下: 先给第一根列线P3.0送低电平, 而P3.1送高电平, 然后读行线P1, 判断P1是否为0xff; 若是则表示按下的键在这第一列; 否则给第二列P3.1送低电平, 而P3.0送高电平, 然后读行线P1, 判断P1是否为0xff, 若是则表示按下的键在这第二列; 找到按键所在列后, 再根据读到的行线值中0的位置从而判断按键所在行线。
确定按键后, 执行按键所对应的服务程序; 然后等待键释放; 按键释放经过给所有的列线P3.0和P3.1送低电平, 然后读行线P1的值来进行判断; 按键释放后再次延时去抖动, 然后返回重新判断是否有键按下。
7、 简述51单片机串行双机通信的过程, 写明发送和接收时软硬件分别执行的操作。
先
数据发送时, 在TI=0时, CPU将待发送数据送入SBUF, 启动发送; 数据由TXD引脚按位送出, 发送时钟由T1控制, 最先送出起始位( 0) , 然后依次是8位数据位( 低位在前) , 最后是停止位( 1) ; 一帧数据发送完毕后, 硬件自动将TI置1, 向CPU请求中断; CPU接收到请求信号后, 需将TI清0, 然后才能启动下一次发送。
数据接收时, 允许接收位REN必须置1, 接收器开始工作; 当接收到起始位( 0) , 启动接收; 在波特率的控制下, 把接收到的数据依次移入移位寄存器; 当接收完一帧数据, 将移位寄存器中的数据送入SBUF, 同时硬件自动将RI置1, 向CPU请求中断。CPU接收到请求信号后, 需将RI清0, 然后才能正常接收下一帧数据。
展开阅读全文