兰州理工大学单片机历年期末考重要试题汇总情况.docx
《兰州理工大学单片机历年期末考重要试题汇总情况.docx》由会员分享,可在线阅读,更多相关《兰州理工大学单片机历年期末考重要试题汇总情况.docx(21页珍藏版)》请在冰点文库上搜索。
兰州理工大学单片机历年期末考重要试题汇总情况
2010-2018理工大学单片机历年期末考试题汇总
一、简答题
1.开机复位后,CPU使用哪一组工作存放器?
它们地址是?
如何改变当前工作存放器?
0组工作存放器,00H-07H,通过修改PSW中的RS1和RS0两位来改变。
2.什么是半双工、全双工方式?
MCS-51属于哪种传送方式?
①半:
通信双方只有一条双向传输线,允许数据双向传送,但每个时刻上只能有一方发送,另一方接收,这是一种能切换传送方向的单工方式;
②全:
有两条传输线,允许数据同时双向传送,通信设备具有完全独立的收发功能。
单片机属于全双工传送方式。
3.简述中断的定义。
当CPU正在处理某件事情时,外部发生某一更重要事件,需CPU暂停正在执行的工作去处理这一突发事件,之后再继续执行被暂停的工作,这个过程就叫中断。
中断的优点:
①实现与低速设备的同步;②提高系统处理的实时性;③视线故障处理,防止系统灾难。
4.程序设计语言有几种?
分别适用于哪种场合?
机器语言-程序的读写/执行;
汇编语言-程序编写;
高级语言-程序编写;
5.简述单片机的开展趋势。
第一代:
以1976年推出的MCS-48系列为代表,开始采用单片结构;
第二代:
以MCS-51的8051为代表的单片机,该系列其他单片机都是在8051的根底上进展功能改变得来;
第三代:
以80C51系列为代表的低功耗单片机。
二、填空
通用型和专用型两类。
2.MCS-51片20H-2FH围的数据存储器,既可以字节寻址又可位寻址。
部RAM中,堆栈存放器SP是8位存放器。
64KB,8051访问外ROM时,读选通信号有1个引脚送出,地址码由P2和P0送出,数据由P0送出。
8051的EA应接低电平。
5.I/O传输数据4种方式:
无条件传送、查询式传送、中断传送、DMA控制方式。
6.MCS51单片机可外扩的并行口芯片分两类:
不可编程和可编程并行口芯片。
7.中断处理全过程分3个阶段:
中断响应、中断处理、中断返回。
INT0、T0、INT1、T1、串行接口中断,中断入口地址分别是0003H、0013H、000BH、001BH、0023H。
分辨率、量程、转换精度、转换时间、输出逻辑电压、工作温度围、参考电压。
10.MCS51时钟频率为12MHZ时,一个机器周期为1μs。
11.MCS51复位后,SP容07H,P0容0FFH,PC容0000H。
P0、P1、P2、P3,其数据总线由P0提供,地址总线低8位由P0提供,高8位由P2提供。
部ROM中数据,MOVX访问外部RAM中数据,MOVC访问外部ROM数据。
。
128字节的RAM和14位的定时器。
16.过程通道是在微机和生产过程之间设置的信息传送和转换的连接通道,包括数字量输入、模拟量输入、数字量输出、模拟量输出四种。
写出4种PID控制器的改良形式:
串有低通滤波器的PID算法、带有死区的PID算法、积分别离的PID算法、不完全微分的PID算法。
三、大题
1.外部RAM2000H为始地址的存储区有20个带符号补码数,编写:
把正数和正零取出放入部RAM20H为始地址的存储区〔负数和负零不作处理〕。
解:
ORG0000H
AJMPMAIN
ORG0100H
MAIN:
MOVR0,#14H
MOVR1,#20H
MOVDPTR,#2000H
ROT:
MOVXA,DPTR
ACC.7,NEXT
MOVR1,A
INCR1
NEXT:
INCDPTR
DJNZR0,ROT
SJMP$
END
2.RAM的BLOCK单元,编写能统计正负数个数分别存入NUM和NUM+1单元的程序。
解:
ORG0100H
LENDATA20H
NUMDATA21H
BLOCKDATA23H
MAIN:
MOVNUM,#00H
MOVNUM+1,#00H
MOVR0,#BLOCK
LOOP:
MOVA,R0
JNBACC.7,POSI
INCNUM+1
SJMPNEXT
POSI:
INCNUM
NEXT:
INCR0
DJNZLEN,LOOP
SJMP$
END
3.外部RAM从2000H-2100H单元有一数据块,编程序:
将它们送到外部RAM3000H-3100H区域。
解:
ORG1000H
MOVDPTR,#2000H
NEXT:
MOVXA,DPTR
ORLDPH,#10H
MOVXDPTR,A
ANLDPH,#0EFH
INCDPTR
MOVA,DPH
CJNEA,#21H,NEXT
MOVXA,DPTR
MOVDPH,#31H
MOVXDPTR,A
SJMP$
END
4.将部RAM的AAA单元中8位无符号数转换成BCD码表示的十进制数。
解:
ORG0100H
AAADATA20H
BAIDATA21H
SHIDATA22H
GEDATA23H
MOVA,AAA
MOVB,#0AH
DIVAB
MOVGE,B
MOVB,#0AH
DIVAB
MOVSHI,B
MOVBAI,A
SJMP$
END
5.编程:
从部RAM的BLOCK为起始地址的20个无符号数找出最小值,并送到MIN单元。
解:
ORG0100H
MINDATA20H
BLOCKDATA21H
MAIN:
MOVR0,#BLOCK
MOVR2,#13H
MOVA,R0
LOOP:
INCR0
MOVB,R0
CJNEA,B,NEXT
NEXT:
JCNEXT1
MOVA,R0
NEXT1:
DJNZR2,LOOP
MOVMIN,A
SJMP$
END
6.编程:
用定时器T0〔工作在方式1〕产生一个50Hz的方波,由P1.0输出,晶振频率为12MHz。
解:
由题意,定时器T0需要工作在方式1定时10ms,如此TMOD控制字为01H;fosc=12MHz,如此机器周期为1µs。
定时初值=216–10ms/1µs=55536=D8F0H,即TH0=0D8H,TL0=0F0H。
ORG0000H
AJMPSTART
ORG2000H
START:
MOVTMOD,#01H
MOVTH0,#0D8H
MOVTL0,#0F0H
SETBTR0
LOOP:
CTF0,PE
AJMPLOOP
PE:
MOVTH0,#0D8H
MOVTL0,#0F0H
CPLP1.0
AJMPLOOP
END
7.晶振频率为12MHz,试编程使P1.0和P1.2分别输出周期为2ms和500ms的方波。
设晶振频率为6MHz,试用T0作为外部计数器,编程实现每当计到1000个脉冲,使T1开始2ms定时,定时时间到后,T0又开始计数,这样反复循环下去。
解:
〔1〕按照题意,定时器T0需要工作在方式1定时1ms,如此TMOD控制字为01H;fosc=12MHz,如此机器周期为1µs。
定时初值=216–1ms/1µs=64536=FC18H,即TH0=0FCH,TL0=18H。
程序如下:
主程序:
ORG1000H
START:
MOVTMOD,#01H
MOVTH0,#0FCH
MOVTL0,#18H
MOVIE,#82H
SETBTR0
MOVR0,#0FAH
LOOP:
SJMP$
中断程序:
ORG000BH
AJMPBRT0
ORG0080H
DJNZR0,NEXT
CPLP1.2
MOVR0,#0FAH
NEXT:
MOVTH0,#0FCH
MOVTL0,#18H
RETI
END
(2)按照题意,定时器T0需要工作在方式1计数方式,定时器T1需要工作在方式1定时方式,如此TMOD控制字为15H;T0计数初值为216–1000=64536=FC18H,即TH0=0FCH,TL0=18H;fosc=6MHz,如此机器周期为2µs。
T1定时初值=216–2ms/2µs=64536=FC18H,即TH1=0FCH,TL1=18H。
程序如下:
ORG2000H
START:
MOVTMOD,#15H
MOVTH0,#0FCH
MOVTL0,#18H
MOVTH1,#0FCH
MOVTL1,#18H
SETBTR0
LOOP:
CTF0,PE
AJMPLOOP
PE:
SETBTR1
CLRTR0
LOOP1:
CTF1,PE1
AJMPLOOP1
PE1:
MOVTH0,#0FCH
MOVTL0,#18H
MOVTH1,#0FCH
MOVTL1,#18H
SETBTR0
CLRTR1
AJMPLOOP
END
8.单片机系统时钟频率为6MHz,假如要求定时值分别为0.1ms、1ms和10ms,定时器T0工作在方式0、方式1和方式2时,定时器对应的初值各为多少?
解:
fosc=6MHz,如此机器周期为2µs。
方式0的初值分别为:
8142(1FCEH),即TH0=0FEH,TL0=0EH;7692(1E0CH),即TH0=0F0H,TL0=0CH;3192(0C78H),即TH0=63H,TL0=18H。
方式1的初值分别为:
65486〔FFCEH〕;65036〔FE0CH〕;60536〔EC78H〕。
方式2定时0.1ms的初值为206〔CEH〕,不能直接定时1ms和10ms。
9.设串行口通信波特率为2400bps,异步帧信号由8位数据,无校验位和一个停止位组成,请问传输1024个字节数据,需要多少时间?
。
10.用中断法编出串行口方式1下的发送程序,设单片机主频6MHz,波特率1200bps,发送数据缓冲区在外部RAM,始址为Tblock,数据块长度为30,采用偶校验,放在发送数据第8位〔数据块长度不发送〕。
解:
串行口工作在方式1,定时器T1工作在方式2,作为波特率发生器。
定时常数:
X=256―〔fosc*2SMOD)/(384*波特率)
取SMOD=1,如此X=229.96=230=E6H。
(假如取SMOD=0,如此X=F3H)
采用中断方式编程,单片机发送程序如下:
主程序:
ORG2000H
TblockDATA2000H
MOVTMOD,#20H
MOVTL1,#0E6H
MOVTH1,#0E6H
CLRET1
SETBTR1
MOVSCON,#40H
MOVPCON,#80H
MOVDPTR,#Tblock
MOVR7,#1EH
TRS:
MOVXA,DPTR
MOVACC.7,C
MOVSBUF,A
DECR7
INCDPTR
SETBEA
WAIT:
SETBES
SJMPWAIT
中断服务程序:
ORG0023H
LJMPSBV
ORG0100H
SBV:
CLRES
CLRTI
MOVXA,DPTR
C
MOVSBUF,A
DJNZR7,NEXT
SJMP$
NEXT:
INCDPTR
RETI
END
11.如图8051的P1.4~P1.7接有4个发光二极管,P1.0~P1.3接有4个开关,最下方按键用于产生中断请求信号。
每中断一次,采集一次P1.0~P1.3的开关状态反映到P1.4~P1.7的发光二极管上。
解:
ORG0000H
SJMPMAIN
ORG0003H
AJMPINT0
ORG0030H
MAIN:
SETBIT0
SETBEX0
SETBEA
SJMP$
INT0:
ORLP1,#0FH
MOVA,P1
SWAPA
XRLA,#0F0H
MOVP1,A
RETI
END
12单片机P1端口并行连接两只共阴极数码管显示器,利用扫描方式循环显示两位数00、01、02、……98、99。
1)写出共阴极接法下数码管显示0~9的字型码;
2)编写程序实现上述功能。
解:
〔1〕3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
〔2〕程序清单如下:
ORG0000H
AJMPMAIN
ORG000BH
AJMPTIMER
ORG0030H
TABDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
MAIN:
MOVR0,#00H
MOVDPTR,#30H
MOVTMOD,#01H
MOVTH0,#0D8H
MOVTL0,#0F0H
SETBET0
SETBEA
SETBTR0
START:
INCR0
CJNER0,#100,NEXT
MOVR0,#00H
NEXT:
MOVA,R0
MOVB,10
DIVAB
MOVR1,A
MOVR2,B
MOVR4,#200
DELAY:
MOVR5,#200
DJNZR5,$
DJNZR4,DELAY
AJMPSTART
TIMER:
CLRTR0
MOVA,R1
MOVCA,A+DPTR
MOVP1,A
MOVR6,#200
DJNZR6,$
MOVA,R2
MOVCA,A+DPTR
MOVP1,A
MOVR6,#200
DJNZR6,$
MOVTH0,#0D8H
MOVTL0,#0F0H
SETBTR0
RETI
END
13.根据图9-3电路,请编写如如下图所示梯形波,要求梯形波的下底由8031部定时器实现。
(设fosc=12MHz)
解:
ORG0000H
AJMPSTART
ORG0100H
START:
MOVTMOD,#10H
MOVTH1,#3CH
MOVTL1,#B0H
MOVR0,#0FEH
CLRA
DOWN:
MOVXR0,A
INCA
JNZDOWN
SETBTR1
WAIT:
CTF1,NEXT
SJMPWAIT
NEXT:
CLRTR1
MOVTH1,#3CH
MOVTL1,#B0H
MOVA,#0FEH
UP:
MOVXR0,A
DECA
JNZUP
SJMPDOWN
END
14.2ms延时程序,晶振频率为12MHZ,如此机器周期为1µs。
〔此题必考〕
解:
DELAY2ms:
MOVR7,#10;1T
DL1:
MOVR6,#48;1T
DL2:
NOP;1T
NOP;1T
DJNZR6,DL2;2T
DJNZR7,DL1;2T
RET;2T
15.一个外部中断源时的编程。
如下列图电路,设外部中断信号为负脉冲,引入外部中断1引脚。
要求每中断一次,从P1.4~P1.7输入外部开关状态,然后从P1.0~P1.3输出。
程序清单:
ORG0000H;主程序
SJMPMAIN
ORG0013H
AJMPINT1;转入服务程序
ORG0030H
MAIN:
SETBIT1;设INT1为边沿触发
SETBET1;允许INT1中断
SETBEA;开放总允许
SJMP$
INT1:
ORLP1,#0F0H;中断服务程序:
MOVA,P1;从P1口输入开关状态
SWAPA;交换高、低4位
MOVP1,A;输出
RETI
END
四、知识点〔局部〕
1.ADC0809与MCS-51连接可采用延时方式、查询方式和中断方式。
①延时方式
启动转换后,延时等待一段时间,等待转换完毕后直接读取数据。
无需查询EOC状态,编程简单但占用时间较长。
延时方式编程:
ORG0000H
AJMPMAIN
ORG0050H
MAIN:
MOVR1,#20H;置数据区首地址
MOVDPTR,#7FF8H;指向通道IN0
LOOP:
MOVXDPTR,A;启动A/D转换
MOVR6,#30H;软件延时,等待转换完毕
DELAY:
NOP;延时时间,视CLK时钟
NOP频率而定
NOP
DJNZR6,DELAY
MOVXA,DPTR;读取转换结果
MOVR1,A;存储转换结果
END
②查询方式
启动转换后读取连续EOC引脚电平,直到EOC变为高电平后读取ADC0809转换数据。
查询方式编程:
ORG0000H
AJMPMAIN
ORG0050H
MAIN:
MOVDPTR,#7FF8H;试分析如何读取通道2?
MOVXDPTR,A;启动A/D转换
LOOP:
P1.0,LOOP;等待转换
LOOP1:
JNBP1.0,LOOP1;等待转换完毕
MOVXA,DPTR;读取A/D转换数据
MOV20H,A;存储数据
END
③中断方式
主程序启动转换后继续运行主程序,转换完毕后触发中断,在中断子程序中读取转换数据。
中断方式主程序:
ORG0000H
AJMPSTART
ORG0050H
START:
MOVDPTR,#7FF8H
MOVXDPTR,A;启动A/D转换
SETBEA
SETBEX0;开外中断1
SETBIT0;外中断请求为下跳沿触发
LOOP:
SJMPLOOP;等待中断
中断服务程序:
ORG0013H;外中断1的入口地址
LJMP1000H;转中断服务程序的入口地址
ORG1000H
MOVXA,DPTR;读取A/D转换数据
MOV20H,A;存储数据
RETI;中断返回
END
2.DAC0832的应用〔有直通方式和单缓冲方式两种,这里只讲后者〕
单缓冲方式的应用:
DAC0832部的两个数据缓冲器有一个处于直通方式,另一个处于受控的锁存方式。
①产生锯齿波的程序:
MOVR0,#0FEH
MOVA,#00H
LOOP:
MOVXR0,A
INCA
NOP
NOP
SJMPLOOP
②产生方波的程序:
MOVR0,#0FEH
LOOP:
MOVA,#DATA1
MOVXR0,A
ACALLDELAY
MOVA,#DATA2
MOVXR0,A
ACALLDELAY
AJMPLOOP