单片机试题库编程题Word文件下载.docx
《单片机试题库编程题Word文件下载.docx》由会员分享,可在线阅读,更多相关《单片机试题库编程题Word文件下载.docx(39页珍藏版)》请在冰点文库上搜索。
06
2002
5B
2003
4F
2004
66
20056D
2006
7D
2007
07
2008
7F
2009
6F
23.将片外RAM空间2000H~200AH中的数据的高四位变零,低四位不变,原址存放。
24.将累加器A和状态寄存器内容压入堆栈保护,然后再恢复A和状态寄存器内容。
25.求片外RAM3000H、3001H单元数据的平均值,并传送给3002H单元。
26.分别写出实现如下功能的程序段。
(1)将片外RAM30H的中间4位,31H的低2位,32H得高2位按序拼成一个新字节,存入33H单元。
(2)将DPTR中间8位取反,其余位不变。
27.写出达到下列要求的指令(不能改变各未涉及位的内容)。
(1)使A的最低位置1。
(2)清除A得高4位。
(3)使ACC.2和ACC.3置1。
(4)清除A的中间4位。
28.有一段程序如下:
地址码机器码标号汇编助记符
200AHE8CHAR:
MOVA,R0
..........................
2010H80relSJMPCHAR
(1)计算指令“SJMPCHAR”的相对便移量rel的值(十六进制机器码形式)。
(2)支出相对偏移量值rel所在的地址单元。
29.编写程序将片内RAM30H中的2位十进制数转换为ASCII码,并存入31H和32H中。
30.编写程序段,用三种方法实现累加器A与寄存器B的内容转交换。
31.将如图11-3所示片外RAM中两个无符号数按从小到大顺序排列,编程并注释。
0000HD1
0001HD2
图11-3片外RAM数据
32.编程将一个按高低字节存放在21H、20H中的双字节数乘2后,在按高低次序将结果存放到22H、21H、20H单元。
33.编程将存放在片外RAM1000H、1001H中的两个数,按大小次序存放到片内RAM的30H、31H单元。
34.多字节减法编程,一直有两个多字节数,从高到低依次存放如下:
X1--(13H)(12H)(11H)(10H)
X2--(23H)(22H)(21H)(20H)计算X1-X2,差存放在13H、12H、11H、10H中。
35.计算下面逻辑值(用x表示逻辑乘,+表示逻辑加)。
P1.0=P1.1xP1.2+ACC.7xC+/PSW.0
36.在ROM空间建立一个10以内的平方值表,根据R0中的数查出平方值,若平方值超出表的范围则将FF装入A。
37.三字节无符号数相加,被加数在片外RAM的200H-2002H(低位在前),加数在片内RAM的20H-22H(低位在前),要求把相加之和存放在20H-22H之中,请编程。
38.将片内RAM30H-3FH中的数据按顺序传送到片外RAM2000H-200FH,请编程。
39.列举4条能使累加器A清0的指令。
40.已知A=7AH,R0=30H,片内RAM30H单元的内容为A5H,请问下列程序段执行后,(A)=?
ANLA,#17H
ORL30H,A
XRLA,@R0
CPLA
41.编程将片外RAM1000-1010H内容传入片内RAM30H开始的单元。
42.8255A控制字地址为300FH,请按:
A口方式0输入,B口方式1输出,C口高位输出、C口低位输入,确定8255A控制字并编程初始化程序。
43.复位后,跳过中断区,重新设置堆栈,并将工作寄存器切换至3区。
44.在片外RAM空间有一个数据块如图11-4所示。
(1)若该数据块为无符号数,求该数据块1000H数据块长度
中数据最小值,并存放于片内RAM20H单元。
1001HX1
(2)若该数据块是有符号数,求正数、负1002HX2
数和0的个数,并将它们的个数分别存到12H、1003HX3
11H、10H单元中。
...
图11-4数据块
45.编写一个软件延时1s和1min的子程序。
设fosc=6MHz,则1个机器周期=2us。
46.试用DAC0832芯片设计单脉冲方式的D/A转换接口电路,并编写两个程序,分别使DAC0832输出负向锯齿波和15个正向阶梯波。
47.试设计DAC0809对1路模拟信号进行转换的电路,并编制采集100个数据存入89C51的程序。
48.请编制串行通信的数据发送程序,发送片内RAM50H-5FH的16B数据,串行接口设定为方式2,采用偶校验方式。
设晶振频率为6MHz。
49.请编制串行通信数据接收程序,将接收的16B数据送入片内RAM58H-5FH单元中,串行接口设定为工作方式3,波特率为1200波特,fosc=6MHz。
50.在89C51片内RAM20H-3FH单元中有32B数据,若采用方式1进行串行通信,波特率为1200波特,
fosc=12MHz,用查询和中断两种方式编写发送/接收程序对。
51.已知当前PC值为2000H,请用两种方法将程序存储器20F0H中的常数送入累加器A中。
52.请用两种方法实现累加器A与寄存器B的内容交换。
53.请用位操作指令编写下面逻辑表达值的程序。
P1.7=ACC.0X(B.0+P2.1)+P3.2
54.编程将片内20H单元开始的30个数据送到片外RAM3000H开始的单元中。
55.在片外2000H开始的单元中有100个有符号数,试编程统计其中正数、负数和0的个数的程序。
56.在2000H-2004H单元中,存有5个压缩BCD码,编程将他们转换成ASCII码,存入2005H开始的连续单元中。
57.编程将累加器A的低4位数据送P1口的高4位,P1口的低4位保持不变。
58.编程将片内RAM40H单元的中间4位取反,其余位不变。
59.如果R0的内容0,将R1置为0,如R0内容非0,置R1为FFH,试进行编程。
60.编程将片内数据存储器20H-24H单元压缩的BCD码转换成ASCII存放在25H开始的单元。
61.片内存储单元40H中有一个ASCII字符,试编一程序给该数的最高位加上奇校验。
62.编写一段程序,将存放在自DATA单元开始的一个4B数(高位在高地址),取补后送回原单元。
63.将片内RAM的20H单元中的十六进制数变换成ASCII存入22H、21H单元,高位存入22H单元,要求用调子程序编写。
64.编写一段程序,以实现图11-5种硬件的逻辑运算功能。
图11-5逻辑运算图
65.用位操作指令实现下面的逻辑方程。
P1.2=(ACC.3XP1.4X/ACC.5)+(/B.4X/P1.5)
66.利用89C51的P1口,监测某一按键开关,使每按键一次,输出一个正脉冲(脉宽随意)。
画出电路,编出汇编语言程序。
67.利用89C51的P1口控制8个发光二极管LED。
相邻的4个LED位一组,使2组每隔0.5s交替发亮一次,周而复始。
画出电路,编写程序(设延时0.5s子程序为D05,已存在)。
68.设计一个4位数码显示电路,并用汇编语言编程使“8”从右到左显示1遍。
69.编制一个循环闪烁灯的程序。
有8个发光二极管,每次其中某个灯闪烁点亮10次后,转到下一个闪烁10次,循环不止。
画出电路图。
70.设计89C51和ADC0809的接口,采集2通道10个数据,存入内部RAM的50H-59H单元,画出电路图,编出
(1)延时方式;
(2)查询方式;
(3)中断方式中的一种程序。
五、编程题答案
1.
程序如下:
STRAT:
MOVA,R0
MOVB,#10
MULAB
MOVR0,A
RET
MOVR0,#30H
START:
MOVR7,#0FH
MOVDPTR,#3000H
LOOP:
MOVA,@R0
MOVX@DPTR,A
INCR0
INCDPTR
DJNZR7,LOOP
RET
3.
MOVA,40H
MOVDPTR,#TAB
MOVCA,@A+DPTR
MOV40H,A
TAB:
DB30H,31H,32H,33H,34H,
DB35H,36H,37H,38H,39H
4.START:
CLRC
MOVA,51H
CPLA
ADDA,#01H
MOV51H,A
MOVA,50H
ADDCA,#00H
MOV50H,A
5.ADDIO:
MOVR0,30H
MOVR7,#9H
MOVA,@R0
LOOP:
ADDA,@R0
DJNZR7,LOOP
MOV30H,A
6.RIB-AI:
MOVA,R1
ORLA,#30H
MOVDPTR,#1000H
7.SOUT:
MOVSCON,#40H
MOVTMOD,#20H
MOVTL1,#OE8H
MOVTH1,#0E8H
SETBTR1
MOVSBUF,A
JNBT1,$
CLR
8.CARY:
MOVDPTR,#2000H
MOVR0,#20H
MOVR3,#05H
NEXT:
MOVXA,@DPTR
MOV@R0,A
DJNZR3,NEXT
9.程序如下:
MAIN:
MOVA,R3
MOVR3,A
10START:
MOVR0,#40H
MOVR7,#09H
MOV30H,@R0
CJNEA,30H,NEXT
JNCBIE1
MOVA,30H
BIE1:
MOV50H,A
11.
MOVR7,#20H
MOVR0,#30H
MOVXA,@DPTR
MOV@R0,A
12
MOVA,R2
ADDA,#01H
MOVR2,A
MOVA,R1
ADDCA,#00H
MOVR1,A
13.
MOVR0,#40H
MOVR7,#0AH
MOVDPTR,#4000H
INCR0
14.
START:
MOVTL1,#0E8H
MOVSCON,#50H
L1:
JNBR1,L1
CLRR1
MOVA,SBUF
15.START:
MOVA,31H
RLCA
MOV31H,A
MOVA,30H
MOV30H,A
16.START:
MOVXA,@DPTR
ADDA,#30H
MOVX@DPTR,A
17.解:
要实现单字节BCD数的减法,应当设法将减法变为加法后,再用DAA指令调整。
具体操作是:
先用模(99+1)H即9AH减去减数,再与被减数进行加法操作,然后用DAA调整。
假定被减数放在片内RAM的60H单元,减数放在61H单元,差值放入62H单元。
程序如下:
CLRC
MOVA,#9AH
SUBBA,61H
ADDA,60H
DAA
MOV62H,A
18.解:
用R0和R1作数据指针,R0指向第一个加数,并兼做“和”的指针,R1指向另一个加数,字节数存放到R2中作记初值。
主程序:
JAFA:
MOVR0,#20H
MOVR1,#29H
MOVR2,#04H
ACALLJASUB
AJMP$
多字节加法子程序:
JASUB:
CLRC
JASUB1:
MOVA,@R0
ADDCA,@R1
MOV@R0,A
INCR0
INCR1
DJNZR2,JASUB1
19.解:
MOVDPTR,#0000H
MOVXA,@DPTR
MOV10H,A
MOVB,#00H
MOVDPTR,#0001H
THREE:
CJNEA,B,ONE
ONE:
JCTWO
XCHA,B
TWO:
DJNZ10H,THREE
MOVA,B
20
解:
ORG0030H
MOV20H,#00H
MOVDPTR,#0000H
MOV10H,A
MOVDPTR,#0001H
JBACC.7,ONE
DJNZ10H,TWO
21.解:
MOVDPTR,#0000H
MOVA,#00H
PUSHA
MOV20H,A
POPA
ADDA,20H
DJNZ10H,ONE
22.解:
TABLE:
MOVA,20H
CJNEA,#0AH,NEXT
JCLED
MOV30H,#0FFH
SJMPENDD
LED:
MOVDPTR,#2000H
MOVCA,@A+DPTR
ENDD:
23.解:
ORG1000H
MOVDPTR,#2000H
MOV10H,#0BH
MOVXA,@DPTR
ANLA,#0FH
MOVX@DPTR,A
DJNZ10H,LOOP
24.解:
PUSHPSW
┇
POPPSW
25.解:
MOVDPTR,#3000H
MOVXA,@DPTR
MOVR0,A
INCDPTR
ADDA,R0
RRCA
MOVX@DPTR,A
26.解:
⑴MOVA,30H
ANLA,#3CH
RLA
MOV33H,A
ANL31H,#3
ANL32H,#0C0H
MOVA,31H
ORLA,32H
ORL33H,A
⑵XRLDPH,#0FH
XRLDPL,#0F0H
27.解:
⑴SETBACC.0或ORLA,#1
⑵ANLA,#0FH
⑶ORLA,0CH
⑷ANLA,#0C3H
28.解:
相对偏移量的计算方法有两种,一种是偏移量=转移地址-(相对转移指令地址+相对转移指令字节数),则本题中的偏移量=200AH-(2010H+2)=FFF8。
另一种是根据转移指令的硬件动作直接计算,既偏移量=目标地址-下条指令的地址,则本题中的偏移量=H200AH-2012H=FFF8H。
取低8位偏移值,rel=F8H。
29.解:
MOVR0,#30H
MOVA,@R0
SWAPA
ANLA,#0FH
ORLA,#30H
XCHDA,@R0
MOV32H,A
30.解:
方法1用1条指令实现:
XCHA,B
方法2用3条指令实现:
MOVR0
MOVB,A
方法3用4条指令实现:
PUSHACC
PUSHB
POPACC
POPB
31.解:
ORG0300H
JNCTWO
SJMPTWO
32.解:
ORG0030H
MOVA,20H
MOV20H,A
MOVA,21H
MOV21H,A
JNCNEXT
MOV22H,#01
SJMP$
33.解:
MOVDPTR,1000H
MOVB,A
CJNEA,B,00H
JNCNEXT1
MOV30H,B
SJMPNEXT2
NEXT1:
MOV31H,B
NEXT2:
SJMPNEXT2
34.解:
MOVR0,#10H
MOVR1,#20H
MOVR7,#04H
SUBBA,@R1
35.解:
MOVC,P1.1
ANLC,P1.2
MOV7EH,C
ANLC,ACC.7
ORLC,7FH
ORLC,/PSW.0
MOVP1.0,C
36.解:
MOVDPTR,#TAB
MOVA,R0
CJNEA,#10H,NEXT
JNCNEXT1
MOVA,#0FFH
37.解:
MOVDPTR,#2000H
MOVR0,#20H
MOVR1,#03H
ADDCA,@R0
DJNZR1,LOOP
38.解:
MOVR0,#30H
MOVR1,#10H
MOVA,2R0
INC