《单片机原理及应用》课外练习.docx
《《单片机原理及应用》课外练习.docx》由会员分享,可在线阅读,更多相关《《单片机原理及应用》课外练习.docx(17页珍藏版)》请在冰豆网上搜索。
![《单片机原理及应用》课外练习.docx](https://file1.bdocx.com/fileroot1/2023-2/6/8da528b7-f5bd-4b66-ad28-4b1babd0e5ff/8da528b7-f5bd-4b66-ad28-4b1babd0e5ff1.gif)
《单片机原理及应用》课外练习
《单片机原理及应用》------------课外练习题目答案
一:
基础部份:
1:
什么叫单片机?
答:
所谓单片机就是把CPU和一定容量的存储器(RAM和ROM),中断系统,一些并串口电路及定时器/计数器集成在一块芯片上。
2:
什么叫原码?
反码?
补码?
答:
原码:
凡正数的符号位用0表示,负数的符号位用1表示,而数值位保持原样的机器数称为原码。
反码:
正数的反码和原码相同,负数的反码是符号位不变,数值位按值取反。
补码:
正数的补码与正数的原码相同,负数的补码是由它的反码在末位加1得到。
3:
什么叫溢出?
8位符号数X,Y,X=+60,Y=+70,相加是否会溢出。
答:
所谓溢出是指参加运算的操作数或操作结果的绝对值超出计算装置的范围时,就称为溢出。
由于X+Y=130超过了+127所以会溢出。
4:
总线有哪几种类型,各作用又是什么?
答:
总线有以下类型:
1:
数据总线。
2:
地址总线,3:
控制总线。
数据总线用于传送数据信息。
地址总线用于传送地址信息
控制总线用于传送控制命令。
5:
单片机有哪五个主要部分组成。
答:
1:
运算器2:
控制器3:
存储器4:
输入设备5:
输出设备
6:
什么叫全双工的传输方式。
MCS-51是不是全双工通信接口。
答:
允许数据同时沿两个方向传送。
MCS-51的通信接口是全双工的通信接口
7:
MCS51有那些中断源,各中断源的中断服务程序入地址在分别在哪.
MCS51有以下5个中断源。
1:
外部中断0入口地址0003h
2:
定时器0中断入口地址000Bh
3:
外部中断1入口地址0013h
4:
定时器1中断入口地址001Bh
5:
串口中断入口地址0023h
8:
如果外部中断零允许中断,怎么初始化。
第一步:
设置外部中断0的中断方式。
第二步:
开外部0中断
9:
如果定时器0工作在中断方式,要怎么初始化,定时器的初值随意。
第一步:
初始化定时器的初值
第二步:
初始化定时器零的工作方式
第三步:
开定时器0的中断
10:
简要说明串口是怎么发送一个数据,是怎么接收一个数据。
答:
初始化串口以后,往SBUF写一个数据,串口会自动把SBUF中的数据发出。
当RI=1时,读SBUF中的数据,就是接收到的串口数据。
二:
判断题:
在对的地方打(√),在错的地方打(X)。
1:
MOVA,11H,是直接寻址。
(√)。
2:
MOVA,R0,是寄存器寻址。
(√)。
3:
MOVA,#22H,SUBBA,#11H,Cy=1(x)。
4:
MOVA,@R0是寄存器间接寻址(√)。
5:
MOVA,#11H是立即数寻址(√)。
6:
MOVDPTR,#TABLE
MOVA,#01
RLA
JMP@A+DPTR
TABLE:
AJMPPRG0
AJMPPRG1
AJMPPRG2
AJMPPRG3
程序会执行到这条指令AJMPPRG0(X)。
7:
MOVR4,#5
LOOP:
NOP
DJNZR4,LOOP
MOVA,R4
(A)=0(√)。
8:
已知(CY)=0,
JCLOOP1
NOP
NOP
AJMPLOOP2
LOOP1:
NOP
NOP
LOOP2:
NOP
NOP
程序会执行到LOOP1(X)
9:
MOVA,#11H
ANLA,#FFH
(A)=11H(√)
10:
MOVA,#11H
ORLA,#FFH
(A)=11H(X)
三:
填空题:
1:
假定外部数据存储器1000H单元的内容为60H,执行下列指令后,累加器A的内容为(61H)。
MOVDPTR,#1000H
MOVA,#00H
MOVXA,@DPTR
ADDA,#01H
2:
假设外部数据存储器1000H单元的内容为10H,1001H的单元内容为20H,执行下列指令后,累加器A的内容为(30H)。
MOVDPTR,1000H
MOVXA,@DPTR
MOVR1,A
INCDPTR
MOVXA,@DPTR
ADDA,R1
3:
A=8AH,(R1)=B2H,执行指令ADDA,R1后,(A)=,(AC)=,(CY)=,(OV)=。
(A)=3CH,(AC)=0,(CY)=1,(OV)=1.
4:
(R1)=30H,(A)=2BH,(30H)=6AH,执行指令后XCHDA@R1,(R1)=,(A)=,(30H)=。
(R1)=30H,(A)=2AH,(30H)=6BH
5:
设(A)=04H,(CY)=1,
RLA,A=,A=08H
RRA,A=,A=02H
RLCA,A=,A=09H
RRCA,A=。
A=82H
6:
(A)=7AH,(R0)=30H,(30H)=A5H,(CY)=1,写出下列各条指令的结果。
MOVA,R0(A)=30H(R0)=30H
XCHA,R0(A)=30H(R0)=30H
XCHDA,@R0(A)=A5H(R0)=30H(30H)=30H
ADDA,#30H(A)=D5H(CY)=1
ADDCA,30H(A)=06H(CY)=1
SUBBA,#30H(A)=D5H(CY)=1
7:
将真值+1001001写成,原码反码及补码。
原码(01001001)反码(00110110)补码(01001001)
8:
将真值-1001101写成,原码反码及补码。
原码(11001101)反码(10110010)补码(10110011)
9:
将58转化成二进制,十六进制。
二进制(111010)十六进制(3AH)
10:
将200转化成二进制,十六进制。
二进制(11001000)十六进制(C8H)
11:
当串口接收到一个数据,此时RI=
(1),当串口发送完一个数据,此时TI=
(1);
12:
MOVR4,#6
LOOP:
NOP
DJNZR4,LOOP
MOVA,R4
(A)=(00H)。
13:
MOVA,#13H
INCA
INCA
ADDA,#11H
(A)=(26H)。
14:
MOVA,#11H
CJNEA,#11H,LOOP
MOVR1,#22H
AJMPLOOP1
LOOP:
MOVR1,#11H.
LOOP1:
(R1)=(22H)。
15:
MOVSP,#60H
MOVA,#30H
MOVB,#70H
PUSHACC
PUSHB
SP=(62H),61H单元的内容为(30H),62H单元的内容为(70H);
16:
MOVA,#33H
ANLA,#0FH
(A)=(03H);
17:
MOVA,#00H
XRLA,#FFH
(A)=(FFH);
18:
MOVA,#0FH
CPLA
(A)=(F0H)
19MOVA,#01H
RLA
(A)=2
20(CY)=1;
MOVA,#01H
RRCA
(A)=(80H);
编程部分:
1:
设在外部RAM中有三个连续单元2001H,2002H,2003H,其中2001H和2002H单元中分别存放两个8位无符号二进制数,比较这两个数的大小,然后将大数送到2003H单元。
ORG0000H
ACALLcompare
Wait:
Ajmpwait;
Compare:
movDPTR,#2001h
movxa,@dptr
movr0,a
incdptr
movxa,@dptr
subba,r0
jncloop
mova,r0
incdptr
movx@dptr,a
ret
loop:
incdptr
movx@dptr,a
ret
2:
将内部RAM40H开始的10个单元,搬移到50H开始的10个单元中。
Org0000h
Acallmovedata:
Wait:
Ajmpwait
Movdata:
movr0,#40h
movr1,#50h
movr2,#10
loop1:
mova,@r0
mov@r1,a
incr0
incr1
djnzr2,loop1
ret
3:
设单片机晶振频率为12Mhz,使用定时器0,怎么样在P1.0引脚输出一个周期为1000us等宽的矩形波?
org0000H
AJMPMAIN
ORG000BH
AJMPT0_INT
MAIN:
MOVTH0,0xfe
MOVTL0,0x0b
MOVTMOD,#01H
SETBTR0
SETBET0
SETBEA
WAIT:
AJMPWAIT
T0_INT:
MOVTH0,0xfe
MOVTL0,0x0b
CPLP1.0
RETI
END
4:
设单片机晶振频率为12Mhz,怎么样让一个发光二极管以一秒周期闪烁。
发光二极管的控制脚用P1.3.
org0000H
AJMPMAIN
ORG000BH
AJMPT0_INT
MAIN:
MOVTH0,0xd8
MOVTL0,0xef
MOVTMOD,#01H
SETBTR0
SETBET0
SETBEA
MOV30H,#00H
WAIT:
AJMPWAIT
T0_INT:
MOVTH0,0xd8
MOVTL0,0xef
INC30H
MOVA,30H
CJNEA,#50,LOOP1
CPLP1.3
Mov30H,#00H
RETI
LOOP1:
RETI
END
4:
实现一个4个键盘的方法,画出硬件简略图.怎么实现都可以不限条件。
;键盘为1行四列
;p1.7为输出
;p1.0p1.1p1.2p1.3为输入
;键值放在20h单元
org0000H
mov20h,#00H
wait:
acallkey_input
ajmpwait
key_input:
jnbp1.0,key_0
jnbp1.1,key_1
jnbp1.2,key_2
jnbp1.3,key_3
ret
key_0:
acalldelay
jnbp1.0,get_key_0
mov20h,#00h
ret
get_key_0:
mov20h,#30h
ret
key_1:
acalldelay
jnbp1.1,get_key_1
mov20h,#00h
ret
get_key_1:
mov20h,#31h
ret
key_2:
acalldelay
jnbp1.2,get_key_2
mov20h,#00h
ret
get_key_2:
mov20h,#32h
ret
key_3:
acalldelay
jnbp1.0,get_key_3
mov20h,#00h
ret
get_key_3:
mov20h,#33h
ret
delay:
movr0,#0ffh;
delay2:
movr1,#22h
delay1:
djnzr1,delay1
djnzr0,delay2
ret
end
5:
设在外部RAM中有3个连续单元1000H,1001H,1002H,求这三个单元之和,和结果放在1004H1005H,低位放在1004H,高位放在1005H.
org0000H
;把1004h1005h单元内容清为零
acalladdthree:
wait:
ajmpwait
addthree:
movdptr,#1004h
mova,#00h
mov@dptra
incdptr
mov@dptr,a
;把1001单元内容存到r0
movdptr,#1001h
movxa,dptr
movr0,a
;把1002单元内容存到r1
incdptr
movxa,@dptr
movr1,a
;把1003单元内容存到a
incdptr
movxa,@dptr
;
adda,r0
movdptr,#1004h
movx@dptr,a
jcloop1
adda,r1
movx@dptr,a
jcloop2
ret
loop1:
;高位加1
movdptr,#1005h
mova,#01h
movx@dptr,a
movdptr,#1004h
movxa,@dptr
adda,r1
movx@dptr,a
jcloop2
ret
loop2:
;高位加1
movdptr,#1005h
movxa,@dptr
inca
movx@dptr,a
ret
6:
设在内部RAM中50H开始有连续的10个单元,求这10个单元之和,结果放在60H,61H,低位放在60H,高位在61H.
org0000H
acalladdten
wait:
ajmpwait
addten:
movr0,50h
movr1,#10
mova,#00h
mov60h,a
mov61h,a
loop1:
adda,@r0
incr0
mov60h,a
jcloop2
djnzr1,loop1
ret
loop2:
mova,61h;
adda,#01h
djnzr1,loop1
ret
end
7:
怎么让20H单元的内容低四位保持不变,高四位取反。
Org0000h
MovA,20H
XRLA,#f0h
Wait:
Ajmpwait
8:
有一个控制字保存在20H单元中,如果这个控制字的第八位为零,则P1.0端口输出为0,
如果这个控制字的第八位为1,则P1.0输出为1.
Org0000h
ACALLCONTROL:
WAIT:
AJMPWAIT
CONTROL:
Mova,20H
RLCA
JCLOOP
CLRP1.0
RET
LOOP:
SETBP1.0
RET
9:
求出上面各芯片2764,6264,8255,0832的起始地址?
2764的起始地址为0000H
6264的起始地址为2000H
8255 的起始地址为5FFCH
0832的起始地址为7FFCH