单片机缩印汇总.docx
《单片机缩印汇总.docx》由会员分享,可在线阅读,更多相关《单片机缩印汇总.docx(20页珍藏版)》请在冰豆网上搜索。
单片机缩印汇总
简答题
1.8051的定时/计数器T0的有几种工作模式,对各工作模式作简单的叙述。
答:
定时/计数器T0的模式:
0:
13位计数器;1:
16位计数器;
2:
8位循环计数器;3:
2个独立的8位计数器串行通信模式
2.8051的串行通信有几种工作模式,请对各工作模式作简单的叙述。
答:
串行通信共有4种工作模式,分别是:
模式0:
同步移位寄存器;模式1:
波特率可变的8位两机异步通信;
模式2:
波特率固定的9位可多机的异步通信;
模式3:
波特率可变的9位可多机的异步通信
3.CPU响应中断的条件有哪些?
答:
1、CPU没有处在一个同级或高级的中断服务中
2、查询中断请求的机器周期是当前指令的最后一个机器周期
3、当前指令不是返回指令(RET,RETI)或访问IE、IP的指令。
4.MCS-51系统有几个外部中断和内部中断?
分别是什么?
系统中有几个中断优先级,若同时有几个同级的中断申请,系统将如何处理?
答:
MCS-51系统有2个外部中断和3个内部中断,分别是外部中断0,外部中断1,定时/计数中断0,定时/计数中断1,串行中断。
系统中共有两个中断优先级,若同时有几个同级的中断申请,则按外中断0――外中断1――定时/计数中断0――定时/计数中断1――串行中断此顺序响应中断。
5.各中断源对应中断服务程序的入口地址是否能任意设定?
如果想将中断服务程序放置在程序存储区的任意区域,在程序中应该作何种设置?
请举例加以说明。
答:
各中断源的入口地址已经在中断地址区中被定义了,不能任意设定。
如果要将中断服务程序放置在程序存储区的任意区域,在程序中要通过在中断地址区的对应地址上设置跳转指令才可实现对中断服务程序的执行。
例如:
外部中断0的中断服务程序INT0P放置在程序存储区的任意区域,此时,通过以下方式,可实现对中断服务程序的执行:
ORG 0003H“换一行写”LJMPINTOP
6.已知一单片机系统的外接晶体振荡器的振荡频率为6MHz,请计算该单片机系统的拍节P、状态S、机器周期所对应的时间是多少?
指令周期中的单字节双周期指令的执行时间是多少?
答:
已知fosc=6MHZ
则:
系统的拍节P=1/fosc=1/(6*106)s=1/6μs=0.167μs
系统的状态S=2P=2*1/6μs=0.33μs
机器周期T=6S=12P=12*1/6μs=2μs
单字节双周期指令的执行时间为2T=2*2μs=4μs
7.80C51单片机的片内RAM低128单元分哪3个主要部分?
各部分的主要功能是什么?
答:
80C51单片机的片内RAM低128单元分为:
寄存器区(00H-1FH),共有四个寄存器组,主要为寄存器访问方式,常用数据存储。
位寻址区(20H-2FH),主要用于位数据存放,也可用于存放字节数据。
普通用户RAM区(30H-7FH),只用于存放字节数据。
8.MCS-51指令系统有哪几种寻址方式?
答:
MCS-51指令系统有7种寻址方式,分别为:
寄存器寻址,直接寻址,寄存器间接寻址,立即寻址,相对寻址,基址寄存器加变址寄存器间接寻址(变址寻址),位寻址等方式。
9.MCS-51单片机系统中,外接程序存储器和数据存储器公用16位地址线和8位数据线,为什么不会发生冲突?
答:
因为MCS-51单片机访问外部程序存储器用的指令是MOVC,控制线为
,而访问外部数据存储器时,使用的指令是MOVX,有效的控制信号是
,
。
所以不会发生冲突。
10.简述动态显示与静态显示的区别及优缺点
答:
静态显示,就是当显示器显示某一个字符时,相应的发光二极管恒定的导通或截止。
这种显示方式每一位都需要有一个8位输出口控制,亮度大,耗电也大。
需要的I/O端口较多,如四个七段数码管需要32根口线,适用于显示位数较少的场合。
但编程简单。
动态显示,就是一位一位地轮流点亮显示器各个位(扫描),对于显示器的每一位来说,每隔一段时间点亮一次。
利用人的视觉暂留功能可以看到整个显示,但必须保证扫描速度足够快,字符才不闪烁。
将各显示器的段码同名端边在一起,用一个I/O端口驱动;位码用另一个I/O端口分别控制。
如四个七段数码管只需要11根口线。
编程较复杂。
11.简述堆栈。
(1)在程序中断或子程序调用时,为了保护返回地址(断点)和保护现场而设立的RAM区。
(2)用MOVSP,#STK指令建立堆栈。
(3)存放数据按“后进先出”原则进行。
4)利用PUSH、POP指令即可进行进栈、出栈操作。
12.简述变址寻址方式并举例说明。
(1)变址寻址是以DPTR或PC作基址寄存器,累加器A作变址寄存器以两者内容相加形式的16位地址作为操作数地址。
(2)变址寻址只能对移定存储器寻址,其指令只有三条:
MOVCA,@A+DPTRMOVCA,@A+PCJMP@A+DPTR
前二条为查表指令,后一条为无条件转移指令
13.简述中断响应的主要内容。
由硬件自动生成一条调用指令LCALL转去中断服务,具体操作为:
(1)将程序计数器PC的内容(断点)压栈
(2)将中断入口地址装入PC,转去执行中断服务程序
14.简述汇编语言中的标号有什么规定
(1)标号由1—8字符组成,头一个字符必须是字母。
(2)不能使用汇编语言已定义的符号。
(3)标号后必须跟冒号:
(4)同一标号在一个程序中只能定义一次。
15.A/D转换器转换数据的传送有几种方式
(1)定时传送方式:
A/D启动后,调用延时时间大于转换时间的延时程序后即可读取。
(2)查询方式:
A/D启动后,查询EOC(转换结束信号),转换一完成即可读取转换数据。
(3)中断方式:
将EOC作为外中断请求信号,转换一结束,即引起中断,读取转换数据。
16.简述MCS-51指令系统的寻址方式及对应的寻址空间。
MCS-51指令系统有7种寻址方式,分别为:
1)寄存器寻址,对工作寄存器R0-R7和A,B,C,DPTR进行寻址。
2)直接寻址,对片内RAM低128字节及SFR寻址。
3)寄存器间接寻址,对片内RAM低128字节,片外RAM寻址。
4)立即寻址,对程序存储器寻址。
5)相对寻址,对程序存储器256字节范围寻址。
6)基址寄存器加变址寄存器间接寻址(变址寻址),对程序存储器寻址。
7)位寻址,对片内RAM的20H-2FH字节地址及部分特殊功能寄存器寻址。
17.简述子程序调用和执行中断服务程序的异同点。
相同点:
均能中断主程序执行本程序,然后再返回断点地址继续执行主程序。
不同点:
1)中断服务程序入口地址是固定的,子程序调用入口地址是用户自己设定的。
2)中断服务子程序返回指令除具有子程序返回指令所具有的全部功能之外,还有清除中断响应时被置位的优先级状态、开放较低级中断和恢复中断逻辑等功能。
3)中断服务子程序是在满足中断申请的条件下,随机发生的;而子程序调用是用户主程序事先安排好的。
18.MCS-51单片机系统I/O端口编址方式有哪几种?
分别对其进行简要描述。
答:
I/O端口编址两种方式:
独立编址与统一编址。
1)独立编址方式:
I/O寄存器地址空间和存储器地址空间分开编址,但需一套专门的读写I/O的指令和控制信号。
2)统一编址方式:
I/O寄存器与数据存储器单元同等对待,统一编址。
不需要专门的I/O指令,直接使用访问数据存储器的指令进行I/O操作,简单、方便且功能强。
MCS-51使用统一编址的方式,每一接口芯片中的一个功能寄存器(端口)的地址就相当于一个RAM单元。
19.写出8051单片机P3口作第二功能时每个引脚信号的名称。
口线
第二功能信号
第二功能信号名称
P3.0
RXD
串行数据接收
P3.1
TXD
串行数据发送
P3.2
INT0
外部中断0申请
P3.3
INT1
外部中断1申请
P3.4
T0
定时器/计数器0计数输入
P3.5
T1
定时器/计数器1计数输入
P3.6
/WR
外部RAM写选通
P3.7
/RD
外部RAM读选通
阅读程序题
1.已知(A)=83H,(R0)=17H,(17H)=34H,执行下列程序后:
行ANLA,#17H行ORL17H,A行XRLA,@R0
行CPLA
问:
(A)=CBH,(R0)=17H,(17H)=37H。
2.已知(10H)=5AH,(2EH)=1FH,(40H)=2EH,(60H)=3DH,执行下列程序段后:
行MOV20H,60H行MOVR1,20H行MOVA,40H
行XCHA,R1行XCHA,60H行XCHA,@R1
行MOVR0,#10H行XCHDA,@R0
问:
(A)=5AH(10H)=1FH(2EH)=3DH
(40H)=2EH(60H)=3DH
3.执行下列程序段:
行MOVA,#00H行MOVR7,#0FFH
行MOVPSW,#80H行ADDCA,R7
问:
(CY)=1(AC)=1(P)=0
(ACC)=00H(R7)=0FFH
4.已知(A)=19H,(B)=04H行DIVAB
问:
执行后,(A)=6(B)=1
5.执行下列程序段中,第一条指令后,(P1.7)=_0___,(P1.3)=_0___,
(P1.2)=__0___;执行第二条指令后,(P1.5)=_____1___,(P1.4)=____1_____,(P1.3)=____1____.
行ANLP1,#73H行ORLP1,#38H
6.下列程序段执行后,(A)=___13______,(B)=___16______.
行MOVA,#0FBH行 MOVB,#12H行DIVAB
7.下列程序段执行后,(R0)=__7EH_____,(7EH)=_FFH____,
(7FH)=__3FH___.
行MOVR0,#7FH行MOV7EH,#0
行MOV7FH,#40H行DEC@R0行DECR0
行DEC@R0
8.已知(SP)=09H,(DPTR)=4567H,在执行下列指令后,(SP)=__0BH___,内部RAM(0AH)=__46H___,(0BH)=__45H__
行 PUSHDPL行PUSHDPH
9.下列程序中注释的数字为执行该指令所需的机器周期数,若单片机的晶振频率为6MHz,问执行下列程序需要多少时间___16us_____
行MOVR3,#100;1行LOOP:
NOP;1 行 NOP
行NOP行 DJNZR3,LOOP;2
行RET;2
10.执行下面程序后,所实现的逻辑运算式为___p1.7=p1.3^p1.1^/p1.4__。
行MOVC,P1.3行ANLC,P1.1行CPLP1.4
行ANLC,P1.4行MOVP1.7,C
11.写出下面每条指令顺序执行后,各目的存储单元的值,并说明该条指令中源操作数的寻址方式。
行MOVR0,#20H;__(R0)=20H____立即寻址__________________
行MOV20H,#29H;_(20H)=29H立即寻址_________________
行CLRC ;__CY=0_________________________________
行MOVA,@R0;__(A)=29H___寄存器间接寻址_____________
12.执行如下三条指令后,30H单元的内容是___0EH
行MOVR1,#30H行MOV40H,#0EH行MOV﹫R1,40H
13.请分析下面程序执行后的操作结果,(A)=__40H_,(R0)=__60H_。
行MOVA,#60H行MOVR0,#40H行MOV@R0,A
行MOV41H,R0行XCHA,R0
14.已知片内RAM中ONE和TWO两个单元中存有两个无符号数,将两个数中的小者存入30H单元。
请完成以下程序实现上述功能。
行MOVA,ONE行CJNEA,TWO,BIG行 SJMPSTO
行BIG:
JC STO行MOVA,TWO行STO:
MOV30H,A
行RET
15.执行下面程序后,(A)=_____06H_________。
行MOVA,#06H行MOVCA,@A+PC
行DB00H,01H,02H,03H,04H,05H,06H
16.设(SP)=60H,片内RAM的(30H)=24H,(31H)=10H,执行程序:
行PUSH30H行PUSH3lH行POPDPL
行POPDPH行MOVA,#00H行MOVX@DPTR,A
最后执行结果是将0送____外部RAM地址为2410H的单元中_________。
17.写出下面每条指令顺序执行后,各目的存储单元的值,并说明该条指令中源操作数的寻址方式(已知内部RAM(40H)的值为30H)。
MOVR1,#40H;_(R1)=40H,立即寻址___
CLRC ;_(Cy)=0,位寻址_______
MOVA,@R1;_(A)=30H,寄存器间接寻址_____
RLCA;__(A)=60H,寄存器寻址
18.有如下程序段:
行MOVR0,#30H行SETBC行CLRA
行ADDCA,R0行MOV﹫R0,A
执行后(30H)=31H
19.执行下列程序后,(A)=_40H__,(B)=__1___。
行MOVA,#0AH行MOVB,#20H行MULAB
20.存放于ADDR1和ADDR2中的两个无符号二进制数,求其中的大数并存于ADDR3中,请完成以下程序实现上述功能。
行MOV A,ADDR1行CJNEA,ADDR2,LP1
行LP1:
JCLP2行MOVADDR3,A 行SJMPLP3
行LP2:
MOVADDR3,ADDR2行LP3:
RET
21.设R0=20H,R1=25H,(20H)=80H,(21H)=90H,(22H)=A0H,(25H)=A0H,(26H)=6FH,(27H)=76H,下列程序执行后,结果如何?
行CLRC行MOV R2,#3H行LOOP:
MOV A,@R0
行ADDCA,@R1行MOV@R0,A行INCR0
行INCR1行DJNZR2,LOOP行JNCNEXT行MOV@R0,#01H行SJMP$
行NEXT:
DECR0行SJMP$
答:
(20)H=20H,(21H)=00H,(22H)=17H,
Cy=1,A=17H,R0=23H,R1=28H
22.执行下列程序后,(A)=_40H(B)=_01H
行MOVA,#0AH行MOVB,#20H行MULAB
23.内部RAM从list单元开始存放一单字节正数表,表中之数作无序排列,并以-1作结束标志。
编程实现表中找出最小值。
行MOVR0,#LIST行MOVA,@R0行MOVMIN,A
行LOOP5:
INCR0行MOVA,@R0行_JNBACC.7____,LOOP3
行RET行LOOP3:
CJNEA,MIN,LOOP1
行LOOP1:
_JNC____LOOP2行MOVMIN,A
行LOOP2:
SJMPLOOP5
程序阅读题
24.设两个十进制数分别在内部RAM40H单元和50H单元开始存放(低位在前),其字节长度存放在内部30H单元中。
编程实现两个十进制数求和,并把求和结果存放在40H开始的单元中。
行MOVR0,#40H行MOVR1,#50H行MOVR2,#30H
行_CLRC____行LOOP:
MOVA,@R0行ADDCA,@R1
行__DAA_______行MOV@R0,A行INCR0
行INCR1行DJNZR2,LOOP行RET
编程题
13.两个字符串分别存放在首地址为42H和52H的内部RAM中,字符串长度放在41H单元,请编程比较两个字符串。
若相等,则把数字00H送40H单元,否则把0FFH送40H单元。
有一个字节不等,整个字符串不相等,所有字节相等,两字串才相等
行MOV R0,#42H行MOVR1,#52H行LOOP:
MOVA,@R0
行 CLRC;不相等,FFH→40H行SUBBA,@R1
行 JNZLOOP1;相等时,比较下一字节行INCR0
行INCR1行DJNZ41H,LOOP
行MOV 40H,#0;所有字符均相等,则两字串相等。
行RET
行LOOP1:
MOV 40H,#0FFH行RET
编程题
1.在两个8051间用模式2进行串行通信,A机并行采集外部开关的输入,然后串行传输给B机;B机接收后并行输出控制LED发光。
画出连接示意图,写出完整的程序。
A机程序行ORG0000H行AJMPSTART行ORG4100H
行START:
MOVP1,#0FFH行MOVSCON,#80H
行AGAIN1:
MOVSBUF,P1行JNBTI,$行CLRTI
行SJMPAGAIN1行END
B机程序行ORG0000H行AJMPSTART行ORG4100H
行START:
MOVSCON,#90H行AGAIN1:
JNBRI,$
行MOVP1,SBUF行CLRRI行SJMPAGAIN1行END
2.编写一段子程序,将二位压缩的BCD码转换为二进制数,入口、出口均是A。
若是非法的BCD码,则A返回值为255。
行SUBP:
MOVR1,A行ANLA,#0F0H行SWAPA
行CJNEA,#10,NEXT1行NEXT1:
JNCERROR行MOVB,#10
行MULAB行XCHA,R1行ANLA,#0FH
行CJNEA,#10,NEXT2行NEXT2:
JNCERROR
行ADDA,R1行RET行ERROR:
MOVA,#255行RET
4.将外RAM地址从1000H开始的100个单元清零,编程实现之。
行MOVDPTR,#1000H行MOVR1,#100(#64H)行CLRA
行LOOP:
MOVX@DPTR,A行INCDPTR行DJNZR1,LOOP
行SJMP$
3.用8051输出控制8个LED从LED1到LED8、再到LED1…,每次一个LED发光,并不断循环。
一个开关控制引起中断,电平触发,中断后8个LED一起闪5下,然后恢复前面的循环。
画出连接示意图,写出完整的程序。
(软件延时用循环5*126*200次控制)
行ORG0000H行LJMPSTART行ORG3H行LJMPINT00
行START:
SETBEA行SETBEX0行CLRIT0行MOVA,#1
行AGAIN:
MOVP1,A行ACALLDELAY行RLA行SJMPAGAIN
行DELAY:
MOVR1,#5行LOOP1:
MOVR2,#200
行LOOP2:
MOVR3,#126行DJNZR3,$行DJNZR2,LOOP2
行DJNZR1,LOOP1行RET行INT00:
PUSHACC
行PUSH1行PUSH2行PUSH3行MOVR4,#5
行AGAIN:
MOVP1,#0FFH行ACALLDELAY行MOVP1,#0
行ACALLDELAY行DJNZR4,AGAIN行POP3行POP2
行POP1行POPACC行RETI行END
5.编写一个程序,把片内RAM从30H开始存放的16个数据传送到片外RAM从0000H开始的单元中。
行MOVR0,#30H行MOVDPTR,#0000H行MOVR1,#10H
行LOOP:
MOVA,@R0行MOVX@DPTR,A行INCR0
行INCDPTR行DJNZR1,LOOP行SJMP$
6.在外RAM2000H单元开始建立0~99(BCD码)的一百个数,试编制此程序。
行MOVDPTR,#2000H行MOVR0,#100(#64H)行CLRA
行LOOP:
MOVX@DPTR,A行INCDPTR行ADDA,#01H
行DAA行DJNZR0,LOOP行SJMP$(RET)
7.已知被减数存放在内RAM的51H、50H单元中,减数存放在61H、60H单元中(高字节在前),相减得到的差放回被减数的单元中(设被减数大于减数)。
试编程之。
行MOVA,50H行CLRC行SUBBA,60H行MOV50H,A
行MOVA,51H行SUBBA,61H行MOV51H,A
行SJMP$(RET)
8.设晶振为12MHz,选用T1的工作方式1产生1mS定时,在P1.1口输出周期为2mS的方波(用中断法)。
行ORG0000H行SJMPMAIN行ORG001BH行SJMPITT1
行ORG0030H行MAIN:
MOVTMOD,#10H行MOVTH1,#0FCH
行MOVTL1,#18H行SETBTR1行SETBET1行SETBEA
行HERE:
SJMPHERE行ITT1:
MOVTH1,#0FCH
行MOVTL1,#18H行CPLP1.1行RETI行END
9.请使用位操作指令,实现下列逻辑操作:
行P1.5=ACC.2∧P2.7∨ACC.1∧P2.0行MOV C,ACC.1
行ANL C,P2,0行 MOV 12H,C行MOV,C,A CC.2
行ANL C,P2.7行ORLC,12H行MOV P1.5,C行RET
10.在外部RAM首地址为TABLE的数据表中有10个字节数据,请编程将每个字节的最高位无条件地置1.
行MOV R2,#10行MOV DPRT,#TABLE
行LOOP:
MOVXA,@DPRT;取一数
行ORLA,#80H;最高位置1行MOV X@DPTR,A;写回原地址
行1NC DPTR;处理下一单元 行DJNZR2,LOOP行RET
11.已知内部RAM30H单元开始存放20H个数据,将其传送到外部RAM的0000H单元开始的存储区,请编程实现。
行MOVR0,#30H行 MOVR1,#00H行MOVR2,#20H
行LOOP:
MOVA,@R0;取数