单片机习题.docx
《单片机习题.docx》由会员分享,可在线阅读,更多相关《单片机习题.docx(18页珍藏版)》请在冰点文库上搜索。
![单片机习题.docx](https://file1.bingdoc.com/fileroot1/2023-5/19/d8e9776f-31e7-4593-8d04-80e6c3331e4f/d8e9776f-31e7-4593-8d04-80e6c3331e4f1.gif)
单片机习题
单片机基础问答题答案:
第2章
1、.8051单片机芯片包含哪些主要逻辑功能部件?
各有什么主要功能?
答:
CPU:
控制单片机各部份协调工作进行算术和逻辑运算
内部数据存储器:
存储数据
内部程序存储器:
存储程序
定时器/计数器,并行I/O口
串行口,中断控制系统,时钟电路
2、MCS—51单片机的EA信号有何功能?
在使用8031时EA信号引脚应如何处理?
答:
访问程序存储器控制信号,EA=0访问外部程序存储器,EA=1访问内部程序存储器。
8031无内部程序存储器,所以EA接地。
3、MCS—51 单片机有哪些信号需要芯片引脚以第二功能的方式提供?
答:
P3口,ALE/PROG(30脚),EA/VPP(31脚),
RST/VPD(9脚)
4、内部RAM低128单片划分为哪3个主要部分?
说明各部分的使用特点?
答:
1.寄存器区,可寄存器寻址
2.位寻址区,可位寻址
3.用户RAM区,其单元地址为30H~7FH,一般还把堆栈开辟在用户RAM区
5、程序计数器(PC)作为不可寻址寄存器,它有哪些特点?
答:
PC是一个16位的计数器。
其内容为将要执行的指令地址,寻址范围达64KB。
有以下功能:
A.自动加1功能,从而实现程序的顺序执行。
B.上电复位功能。
C.能接收内部数据总线上来的数据,主要通过转移,调用,返回等指令改变其内容
以实现程序的转移,转移范围216=64K=65536。
PC没有地址,是不可寻址的。
6、堆栈有哪些功能?
堆栈指示器(SP)的作用是什么?
在程序设计时,为什么还要对SP重新赋值?
答:
堆栈是一种数据结构,堆栈的最大特点就是“后进先出”的数据操作规则。
堆栈是为子程序调用和中断操作而设立的。
其具体功能有两个:
保护断点和保护现场。
堆栈指示器SP的作用是指示栈顶地址。
程序设计时一般把SP值初始化为30H以后,因为复位时,SP初始化为07H,而这里是寄存器区和位寻址区。
7、MCS—51的4个I/O口在使用上有哪些分工和特点?
试比较各口的特点?
答:
P1口:
只有一种功能通用I/O口
P2口:
通用I/O口和地址总线高八位
P3口:
一种功能通用I/O口和第二功能状态
P0口:
一种功能通用I/O口和AB/DB复用总线
8、MCS—51单片机运行出错或程序进入死循环,如何摆脱困境?
答:
按复位键以重新启动。
9、什么是指令周期,机器周期和时钟周期?
如何计算机器周期的确切时间?
答:
执行一条指令所需的时间称之为指令周期,
机器周期就是振荡脉冲的十二分频,
时钟周期定义为状态(用S表示),2个振荡脉冲。
10、使单片机复位有哪几种方法?
复位后机器的初始状态如何?
答:
复位操作有上电自动复位和按键手动复位两种方式。
按键手动复位有电平方式和脉冲方式两种。
它们的复位状态如下:
PC 0000H TCON 00H
ACC 00H TL0 00H
PSW 00H TH0 00H
SP 07H TL1 00H
DPTR 0000H TH1 00H
P0~P3 FFH SCON 00H
IP xx000000B SBUF 不定
IE 0x000000B PCON 0xxx0000b
TMOD 00H
-----------------------------------------------------------------------------------------------------------
单片机基础编程题答案:
第4章
1、把长度为10H的字符串从内部RAM的输入缓冲区inbuf向设在外部RAM输出缓冲区outbuf进行传送,一直进行到遇见回车符CR或整个字符传送完毕。
ORG 0030H
MOV R0,#inbuf
MOV R1,#outbuf
MOV R4,#10H
LOOP:
MOV A,@R0;从内部RAM取数
CJNE A,#0DH,LL;是否为回车符CR
SJMP STOP;是转停止传送
LL:
MOVX @R1,A;不是则传送到外部RAM
INC R0
INC R1
DJNZ R4,LL;沒传送完则循环
STOP:
SJMP$
2、内部RAM从list单元开始存放一正数表,表中之数作无序排列,并以“-1”作结束标志。
编程实现在表中找出最小数。
ORG 0030H
MOVR0,#list
MOVA,@R0;取第一个正数
LOOP:
INCR0;指向下一个正数
MOV3AH,@R0
CJNEA,3AH,CHK;前一个数与后一个数比较
CHK:
JC LOOP1;前一个数小,则转
MOVA,@R0;前一个数大,取后一个数
LOOP1:
XCHA,3AH
CJNEA,#0FFH,LOOP
XCHA,3AH;取最小数
MOV 3BH,A
SJMP$
3、求8个数的平均值,这8个数以表格形式存放在从table开始的单元中。
ORG0030H
MOVR0,#table
MOVR6,#07H
MOVR3,#00H
MOVA,@R0
CLRC
LOOP:
INCR0
ADD A,@R0;累加
JNC LOOP1
INC R3
LOOP1:
DJNZ R6,LOOP
CLRC
MOV R5,#03H
MOV R2,A
LOOP2:
MOV A,R3;除8
RRCA
MOV R3,A
MOVA,R2
RRCA
MOV R2,A
DJNZR5,LOOP2
4、把一个8位二进制数的各位用ASCII码表示之(亦即为“0”的位用30H表示,为“1”的位用31H表示)。
该数存放在内部RAM中byte单元中。
变换后行到的8个ASCII码存放在外部RAM以buf始的存储单元中去。
ORG 0030H
MOV R0,#byte
MOV DPTR,#buf
MOV R5,#08H
MOV A,@R0
LOOP:
RLC A
MOV R7,A
JC LOOP1
MOV A,#30H
SJMP LOOP2
LOOP1:
MOV A,#31H
LOOP2:
MOVX @DPTR,A
MOV A,R7
INC DPTR
DJNZ R5,LOOP
5、搜索一串ASCII码字符中最后一个非空格字符,字符串从外部RAM8100H单元开始存放,并用一个回车符(0DH)作结束。
编程实现搜索并把搜索到的非空格字符的地址存入内部RAM单元40H和41H中,其中高字节放入41H单元。
ORG0030H
MOVDPTR,#8100H
MOV40H,#00H
MOV41H,#00H
LOOP:
MOVXA,@DPTR
INCDPTR
CJNEA,#0DH,LOOP;是否为回车符
loop1:
mova,dpl;dptr-1,指向0dh单元地址
clrc
subba,#01h
movdpl,a
mova,dph
subba,#00h
movdph,a
loop2:
mova,dpl;dptr-1,调整单元地址
clrc
subba,#01h
movdpl,a
mova,dph
subba,#00h
movdph,a
movxa,@dptr;取下一个数
cjnea,#20h,loop3;是否为空格字符,不是转
sjmploop2;是空格字符则转调整单元地址
loop3:
mov40h,dpl;存最后一个非空格字符的
mov41h,dph;地址
sjmp$
end
6、比较两个ASCII码字符串是否相等。
字符串的长度在内部RAM41H单元,第一个字符串的首地址为42H,第二个字符串的首地址为52H。
如果两个字符串相等,则置内部RAM40H单元为00H;否则置40H单元为FF。
ORG 0030H
MOVR0,#42H
MOVR1,#52H
MOVR7,41H
LOOP:
MOVA,@R0
MOV30H,@R1
CJNEA,30H,LK
INC R0
INC R1
DJNZ R7,LOOP
MOV 40H,#00H
SJMP DD
LK:
MOV40H,#0FFH
DD:
SJMPDD
7.外部RAM首址为table的数据表中,有10个字节的数据。
编程将每个字节的最高位无条件地置“1”。
ORG0030H
MOV DPTR,#table
MOV R6,#10
LOOP:
MOVXA,@DPTR
SETB E7H
MOVX@DPTR,A
INC DPTR
DJNZR6,LOOP
8、 8000H开始的有200个字节的源数据区,隔一个单元送到4000H开始的数据区。
在目的数据区中,每隔两个单元写一个数。
如遇0DH(回车)则传送结束。
ORG 0030H
MOV DPTR,#8100H;源数据区首址
PUSH DPL ;源首址暂存堆栈
PUSH DPH ;
MOV DPTR,#4000H;目的数据区首址
MOV R2,DPL;目的首址暂存寄存器
MOV R3,DPH ;
MOV R7,#200
LOOP:
POP DPH ;取回源地址
POP DPL ;
MOVX A,@DPTR;取出数据
INC DPTR ;源地址增量
INC DPTR ;隔一个单元
PUSH DPL ;源地址暂存堆栈
PUSH DPH ;
MOV DPL,R2 ;取回目的地址
MOV DPH,R3 ;
CJNEA,#0DH,LL;是否为0DHSJMP LP ;是0DH则传送结束
LL:
MOVX @DPTR,A ;数据送目的区
INC DPTR ;目的地址增量
INC DPTR;隔两个单元
INC DPTR
MOV R2,DPL ;目的地址暂存寄存器
MOV R3,DPH ;
DJNZ R7,LOOP ;没完,继续循环
LP:
RET ;返回主程序
9、 输入缓冲区inbuf存有80个字节,编程实现将其中所有的组分隔符(1DH)地址依次压入separ栈中。
ORG 0030H
MOV SP,#separ
MOV R0,#inbuf
MOV R4,#80
LOOP:
MOV A,@R0
CJNE A,#1DH,LPP;是否为1DH
MOV 7FH,R0;是则将组分隔符
PUSH 7FH;地址依次压入separ栈中。
LPP:
INCR0
DJNZ R4,LOOP
10、内部RAM缓冲区buffin向外部RAMbuffou传送一个字符串,遇0DH结束,置PSW的F0位为“1”;或传送完128个字符后结束,并置PSW的OV位为“0”。
ORG 0030H
MOV R0,#buffin
MOV DPTR,#buffou
MOV R7,#128
LOOP:
MOV A,@R0
CJNE A,#0DH,LP
SJMP STOP
LP:
MOVX@DPTR,A
INC R0
INC DPTR
DJNZ R7,LOOP
CLR OV
SJMP PP
STOP:
SETB F0
PP:
SJMP PP
11、编写读取运行定时器中计数器值并送LED显示器的程序。
可根据需要定义子程序。
12、求16位带符号二进制补码数的绝对值。
假定补码放在内部RAM的num和num+1单元中,求得的绝对值仍放在原单元中。
ORG0030H
MOVR0,#num+1
MOVA,@R0
JNBACC.7,KK
DECR0
MOVA,@R0
MOV @R0,A
INC R0
MOV A,@R0
CPLA
ADDC A,#00H
MOV@R0,A
KK:
SJMPKK
13、求16位补码数的原码。
16位补码数放在内部RAM的data和data+1单元中,转换后得到的原码仍放在原单元中。
ORG0030H
MOVR0,#data+1
MOVA,@R0
JNBACC.7,KK
DECR0
MOVA,@R0
CPLA
ADDA,#01H
MOV @R0,A
INC R0
MOV A,@R0
CPLA
ADDC A,#00H
MOV@R0,A
KK:
SJMPKK
14、从内部RAM20H单元中开始存放一组带符号数,字节数存在1FH中,请统计出其中大于0,等于0和小于0的数的数目,并把统计结果分别存入one、two、therr3个单元中。
ORG 0030H
MOV R0,#20H
MOV R7,1FH
CLR A
MOV one,A
MOV two,A
MOV therr,A
LOOP:
MOV A,@R0
JNZ KK
INCtwo;0单元计数
SJMPKP
KK:
JBACC.7,PP
INCone;正数单元计数
SJMPKP
PP:
INCtherr;負数单元计数
KP:
INCR0
DJNZ R7,LOOP
15、5个双字节数,存放在外部RAM从barf开始的单元中,求它们的和,并把和存放在sumg开始单元中,请编程实现。
START:
MOV R0,#BARF
MOV R1,#SUMG
MOV R2,#04H
MOVX A,@R0
MOV R3,A
INC R0
MOVX A,@R0
MOV R4,A
LOOP:
INC R0
MOVX A,@R0
ADD A,R3
MOV R3,A
INC R0
MOVX A,@R0
ADDC A,R4
MOV R4,A
JNC HER
CLR A
ADDC A,#00H
MOV R5,A
HER:
DJNZ R2,LOOP
MOV A,R3
MOVX @R1,A
INC R1
MOV A,R4
MOVX @R1,A
INC R1
MOV A,R5
MOVX @R1,A
HERE:
SJMP $
16、把外部RAM中block1为首地址的数据块传送到内部RAM以block2为首地址的单元中去,数据块的长度为N字节。
MOV R0,#BLOCK1
MOV R1,#BLOCK2
MOV R7,#N
LOOP:
MOVX A,@R0
MOV @R1,A
INC R0
INC R1
DJNZ R7,LOOP
CPLA
ADDA,#01H
-------------------------------------------------------------------------------------------------------------
单片机基础问答题答案:
第5章
1、 在MCS-51单片机系统中,外接程序存储器和数据存储器共用16位地址线和8位数据线,为什么不会发生冲突?
答:
外接程序存储器和数据存储器的连接信号不同,及所使用的指令不同。
外接程序存储器连接PSEN信号,数据存储器连接WR,RD信号,另外访问外接程序存储器用MOVC指令,访问外接数据存储器用MOVX指令。
2、 以两片Intel2716给80C51单片机扩展一个4KB的外部程序存储器,要求地址空间与8051的内部ROM相銜接,请画出逻辑连接图。
3、 试以一片Intel2716和一片Intel6116组成一个既有程序存储器又有数据存储器的存储器扩展系统,请画出逻辑连接图,并说明各芯片的地址范围。
4.以译码编址方式,把4片Intel6116组成8KB的数据存储器,请画出逻辑连接图,并说明各芯片的地址范围。
-------------------------------------------------------------------------------------------------------------
第六章 习 题
编程题和问答题
1、单片机用内部定时方法产生频率为100KHZ等宽矩形波,假定单片机的晶振频率为12MHZ,请编程实现。
答:
定时5μ