单片机考试样卷1.docx
- 文档编号:10741039
- 上传时间:2023-05-27
- 格式:DOCX
- 页数:23
- 大小:73.36KB
单片机考试样卷1.docx
《单片机考试样卷1.docx》由会员分享,可在线阅读,更多相关《单片机考试样卷1.docx(23页珍藏版)》请在冰点文库上搜索。
单片机考试样卷1
编程实现把8031片内以40H为首地址的16个单元内容送到以50H为首地址的扩展RAM单元中。
MOVR0,#40H
MOVR3,#10H
MOVR1,#50H
LOOP:
MOVA,@R0
MOVX@R1,A
INCR0
INCR1
DJNZR3,LOOP
RET
1、内部RAM20H单元开始存放8个8位无符号二进制数,找出其中的最大数的程序如下。
阅读程序后,请给程序加上适当注释,并画出该程序的流程图。
ORGSTART
START:
MOVR0,#20H;首地址送R0
MOVR7,#08H;指定长度计数器R7
MOVA,@R0;取第一个数送A
DECR7;长度计数器内容减1
LOOP:
INCR0;修改地址
MOV2AH,@R0;取第二个数送2AH
CJNEA,2AH,CHK;前后两个数比较
CHK:
JNCLOOP1;前者大于后者去LOOP1
MOVA,@R0;前者小于后者,大数存A
LOOP1:
DJNZR7,LOOP;8个数没比完去LOOP
MOV2BH,A;比完了大数存2BH
SJMP$;等待
END;结束
流程图如下
1.设单片机8031系统的振荡频率为6MHz,试编程实现10mS的延时程序。
DELAY:
MOVR6,#0AH
DELAY1:
MOVR7,#0FAH
DELAY0:
DJNZR7,DELAY0
DJNZR6,DELAY1
RET
2.设8031时钟频率f=12MHz,请编出利用定时器T0在P1.0引脚上输出周期为2秒的方波程序。
ANLTMOD,#0F0H
ORLTMOD,#01H
MOVTH0,#0D8H
MOVTL0,#0E6H
SETBTR0
SETBEA
SETBET0
PL0:
MOVR2,#100
PL1:
MOVP1,#01H
CJNER2,#0,PL1
CPLP1.0
SJMPPL0
TOINT:
CLRTR0
DECR2
MOVTH0,#0D8H
MOVTL0,#0E6H
SETBTR0
RETI
END
1.根据某要求编写的程序清单给出如下:
ORG8000H
BEGIN:
LJMPSTART
ORG8003H
LJMPINT-P
ORG8030H
START:
SETBIT0;设置外部中断0为负边沿触发
MOVA,#01H
MOVIE,#81H;开外部中断
LOOP:
MOVP1,A;P1口计数方式输出
INCA
MOVR6,#0FFH;延时
DEL:
MOVR7,#0FFH
DEL1:
DJNZR7,DEL1
DJNZR6,DEL
SJMPLOOP;等待中断
INT-P:
MOVDPTR,#0CFFFH;中断服务,从外设读输入状态
MOVXA,@DPTR;读开关状态
RETI
END
●程序中CFFFH为外设74LS244的口地址。
要求:
(1)阅读程序,给程序加适当的注释;
(2)依照该程序,编写符合以下要求的程序:
将8031的P1口作输入口,74LS377(地址为CFFFH)作输出口,8031的INT1接一单脉冲发生器,外部中断设置为边沿触发方式,累加器A作为计数器、复位的初态为1,每隔0.1秒计数器加1。
计数器的值通过377输出到八位LED上显示出来。
当INT1有单脉冲输入时产生一次中断,中断处理程序从P1口上读入新的值作为计数基值,以后在此值基础上计数(fosc=6MHZ)。
ORG8000H
BEGIN:
LJMPSTART
ORG8013H
LJMPINT-P
ORG8030H
START:
SETBIT1
MOVA,#01H
MOVIE,#84H
LOOP:
MOVDPTR,#CFFFH
MOVX@DPTR,A
INCA
MOVR7,#64H
DEL:
MOVR6,#F9H
DEL1:
DJNZR6,DEL1
DJNZR7,DEL
SJMPLOOP
INT-P:
MOVP1,#0FFH
MOVA,P1
RETI
END
2、设8155扩展芯片的Tin端输入脉冲频率为2MHZ,试编写程序,使得在Tout输出端输出周期为1ms的方波程序,假定8155命令状态口地址为100H。
解:
8155定时器预置初值计算如下:
8155定时器为减一计数器,预置初值为N=T/Tj=10--3/(0.5*10-6)=2000=07D0H
根据题意要求,定时器设置工作在方式1,则TC初值为47D0H,编制程序为如下:
ORG1000H
MOVDPTR,#0100H
MOVA,#0C0H;送控制字
MOVX@DPTR,A
MOVDPTR,#0104H
MOVA,#0D0
MOVX@DPTR,A
INCDPTR
MOVA,#47H;送定时器初值,启动定时器
MOVX@DPTR,A
……………
END
3.编程实现检索关键字“KEY”的子程序“SKWORD”。
假定数据区首地址是内部RAM20H,数据区长度为8,把关键字存放在2BH单元,检索成功的序号存放入2CH单元。
ORG1000H
SKWORD:
MOVR0,#20H
MOVR7,#08H
MOVR2,#00H
MOV2BH,#KEY
MOV2CH,#00H
MOV2BH,#KEY
MOV2CH,00H
NEXT:
INCR2
MOVA,2BH
CLRC
SUBBA,@R0
JZENDP
INCR0
DJNZR7,NEXT
MOVR2,#00H
ENDP:
MOV2CH,R2
RET
4、试画出8031和2片2764和两片6264存储器芯片的连线图,要求采用全译码方式,并写出各片的基本地址范围,如有重叠地址请一同列出。
地址:
4#:
6000H-7FFFH,3#:
4000H-5FFFH,2#:
2000H-3FFFH,1#:
0000H-1FFFH
解:
5、试以一片2764和一片6264与8031单片机组成存储器扩展系统,要求采用全译码的方法,请画出逻辑连接图,并说明各芯片的地址范围。
解:
2764的地址范围:
0000~1FFFH;6264的地址范围:
2000H~3FFFH
3.8编写一段程序:
将30H-32H压缩的BCD码构成单字节BCD码存放到33H开始的单元中。
ORG1000H
ADDR1DATA0030H
ADDR2EQU33H
MOVDPTR,#ADRR1
MOVR0,#ADDR2
NEXT:
MOVA,#DPTR
MOVB,A
ANLA,#0FH
MOV@R0,A
INCR0
MOVA,B
ANLA,#0F0H
SWAPA
MOV@R0,A
INCR0
INCDPTR
MOVR1,DPTR
DECR1
CJNER1,#32H,NEXT
SJMP$
END
3.10试编写一段程序,其功能:
将20H开始的10个单元中压缩的BCD码的高低位四位分别转换为ASC数据,存放到外部数据存储器的4000H开始的单元中。
ORG1000H
LENDATA0AH
ADDR1DATA0020H
ADDR2DATA4000H
MOVDPTR,#ADDR1
MOVR0,#ADDR2
MOVR1,LEN
NEXT:
MOVXA,DPTR
MOVB,A
ANLA,#0FH
ORLA,#30H
MOV@R0,A
INCR0,
MOVA,B
ANLA,#0F0H
SWAPA
ORLA,#30H
MOV@R0,A
DECR1
INCR0
INCDPTR
CJNER1,#00H,NEXT
SJMP$
END
4.4设自变量X为一无符号数,存放在内部RAM的VAR单元,函数Y存放在FUNC单元。
请编出满足如下关系的程序:
当X≥50,Y=X;当50>X≥20,Y=5X;当X<20,Y=2X.
ORG1000H
MOVA,VAR
CJNEA,#50,DSC
DSC:
JNC,CUNN
CJNEA,#20,SM1
SM1:
RLA
JNCMIN
SJMPCUNN
MIN:
RLA
ADDA,VAR
CUNN:
MOVFUNG,A
RET
4.5外部RAM的SOURCE(二进制8位)单元开始有一数据块,该数据块以”$”字符结尾。
请编写一个程序,把它们传送到内部RAM起始地址为DIST的区域(“$”字符也要传送).
ORG0000H
MOVR0,#SOURCE
MOVR1,#DIST
LOOP:
MOVXA,@R0
MOV@R1,A
CJNEA,#18H,LOOP1
SJMPEXIT
LOOP1:
INCR0
INCR1
SJMPLOOP
EXIT:
RET
4.6在外部RAM的低256地址单元区,有始地址为SOURCE和长度在LEN单元的数据块。
请编出一个能对他们进行奇偶校验的程序。
凡满足奇校验(奇数个1)的数据均送至内部RAM始地址为DIST.
ORG1000H
MOVR0,#SOURCE
MOVR1,#DIST
MOVR2,LEN
LOOP:
MOVXA,@R0
JBPSW.0,SEVE
SJMPLOOP1
SEVE:
MOV@R1,A
LOOP1:
INCR0
INCR1
DJNZR2,LOOP
RET
4.8编写一个能在内部RAM的BLOCK为起始地址的100个无符号数中找出最小值,并把它送入MIN单元的程序。
ORG1000H
MOVR2,#99H
MOVR1,#BLOCK
MOVA,@R1
MOVR0,A
LOOP:
MOVA,R0
INCR1
CLRC
SUBBA,@R1
JNCNEXT
DJNER2,LOOP
NEXT:
MOVA,@R1
MOVR0,A
DJNER2,LOOP
MOVMIN,R0
SJMP$
END
4.10在内部RAM中,BLOCK开始的存储区有10个双字节十进制数求和(和为4位BCD数),编程求BCD数之和,并把它们存于SUM开始的连续单元。
ORG1000H
MOVR4,#09H
MOVR3,#100H
MOVR1,#BLOCK
MOVR0,#BLOCK
INCR1
MOVA,@R1
SWAPA
ORLA,@R0
MOVR2,A
LOOP:
INCR0
INCR0
INCR1
INCR1,
MOVA,@R1
ADDA,R2
ADDA,R2
MOVR2,A
MOVA,R3
ADDCA,#00H
MOVR3,A
CLRC
DJNZR4,LOOP
MOVSUM,R2
MOVR5,#SUM
INCR5
MOV@R5,R3
SJMP$
END
4.12设R0内为一补码形式的带符号被除数,R1内为补码形式的带符号除数,编程完成除法,并把商置于R2内,余数置于R3内。
ORG1000H
SBITBIT(20H).0
SBIT1BIT(20H).1
SBIT2BIT(20H).2
MOVA,R0
RLCA
MOVSBIT1,C
MOVA,R1
RLCA
MOVSBIT2,C
ANLC,SBIT1
MOVSBIT,C
MOVC,SBIT1
ANLC,SBIT2
ORLC,SBIT
MOVSBIT,C
MOVSBIT,C
MOVA,R0
JNBSBIT1,NCH1
CPLA
INCA
NCH1:
MOVB,A
MOVA,R1
JNBSBIT2,NCH2
CPLA
ADDA,#01H
NCH2:
XCHA,B
DIVAB
JNBSBIT,NCH3
CPLA
ADDA,#01H
NCH3:
MOVR2,A
MOVA,B
JNBSBIT,NCH4
CPLA
ADDCA,#00H
NCH4:
MOVR3,A
SJMP$
END
5.10试写出
为边沿触发方式的中断初始化程序
解:
SETBEA
SETBEX0;开外部中断0
SETBPX0;令
为高优先级
SETBIT0;边沿触发方式
5.15请用中断法编出串行口方式1下的发送程序。
设单片机主频为6MHz,波特率为600bit/s,发送数据缓冲器在外部RAM区,始址为RBLOCK,接收数据区长度不为0。
解:
设R0存放了所要发送数据的长度,RI为中断触发标志
ORG0000H
LJMPSTART
ORG0100H
START:
MOVTMOD,#20H;T1为方式2
MOVTH1,#230
MOVTL1,#230
SETBTR1
MOVPCON,#00H
MOVSCON,#D0H
SETBEA
SETBES
.
.
.
SJMP$
中断服务程序如下:
ORG0023H
LJMPINTSV
ORG0200H
INTSV:
CLRRI;清RI
PUSHACC
PUSHPSW
MOVDPTR,#RBLOCK
LOOP:
MOVXA,@DPTR
MOVSBUF,A;发送数据
JNBTI,$
INCDPTR
DJNZR0,LOOP
POPPSW
POPACC
RETI
END
6.12图6-55所示为DAC0809与MCS-51的一种接口电路。
设在内部RAM20H开始有一数据区,请写出对8路模拟电压连续采集并循环存入(或更新)这个数据区的程序。
解:
ORG0000H
SJMPSTART
ORG0030H
START:
MOVR0,#20H
MOVDPTR,#7FF8H;指向通道IN0
SAMPLE:
MOVX@DPTR,A
JBP3.3
MOVXA,@DPTR
MOV@R,A
CJNER0,#0FFH,NEXT
MOVR0,#20H
SJMPCHN
NEXT:
INCR0
CHN:
CJNEDPTR,#7FFFH,AGAIN;是否指向通道INT
MOVDPTR,#7FF8H
SJMPSAMPLE
AGAIN:
INCDPTR
SJMPSAMPLE
END
6.14参考图6-71编写一个定时扫描键盘程序。
将键号值保存在内部RAM30H单元中,同时置位标志内部RAM(20H).0位,并通知主程序对输入键进行处理。
解:
设按键顺序(从左到右)为:
第4行(接P1.0)0,1,2,3,
第3行(接P1.1)4,5,6,7,
依次类推。
设定时器T0工作在方式1,50ms扫描1次,得时间常数为40536,消除抖动时间为10ms
主程序:
ORG0000H
LJMPSTART
ORG000BH
LJMPCLOCK
ORG0030H
START:
MOVDPTR,#40536
MOVTH0,DPH;置时间常数
MOVTL0,DPL
MOVTMOD,#1
SETBEA
SETBET0
SETBTR0;开中断
扫描程序:
CLOCK:
CLREA;关中断
CLRTR0
MOVTH0,DPH
MOVTL0,DPL
MOVP1,#0FH
MOVA,P1
ORLA,#0F0H
CPLA
JZINT_DONE;没有按下键,返回
MOVR1,#20
DE:
MOVR0,#0;消除抖动,延时10ms
DJNZR0,$
DJNZR1,DE
MOVP1,#0FH
ORLA,#0F0H
CPLA
JZINT_DONE;没有键按下,返回
MOVR0,#0EFH;先扫描P1.4
MOVR1,#4
MOVR2,#0
MOVR3,#30H;存键值于R3中
LOOP:
MOVP1,R0
JBP1.0,ISP1.1;不是P1.0,跳转
MOV@R3,R2
SETB(20H).0
LJMPINT_DONE
ISP1_1:
JBP1.1,ISP1_2
MOVA,R2
ADDA,#4
MOV@R3,A
SETB(20H).0
LJMPINT_DONE
ISP1_2:
JBP1.2,ISP1_3
MOVA,R2
ADDA,#8
MOV@R3,A
SETB(20H).0
LJMPINT_DONE
ISP1_3:
JBP1.3,NEXT;第一列没有键按下,准备下一次扫描
MOVA,R2
ADDA,#12
MOV@R3,A
SETB(20H).0
LJMPINT_DONE
NEXT:
MOVA,R0
JNBACC.0,INT_DONE;扫描完成,返回
RLA;准备下一次扫描
INCR2
LJMPLOOP
INT_DONE:
SETBTR0
MOVP1,#0FH
SETBEA
RETI
设有10个二进制码存于单片机8051内部RAM区首地址为BLOCK的存储区,编写程序,将该数据区数据按从小到大排序,并送到外部存储单元以BLOCK1为首地址的存储区中。
ORG1000H
MOVR2,#09H
MOVR3,#09H
BUBBLE:
CLP7FHH
MOVA,R3
MOVR2,A
MOVR0,#BLOCK
BULOOP:
MOV20H,@R0
MOVA,@R0
INCR0
MOV21H,@R0
CJNEA,21H,LOOPY
LOOPY:
JCBUNEXT
MOV@R0,20H
DECR0
MOV@R0,21H
INCR0
SETB7FH
BUNEXT:
DJNZR2,BULOOP
JNB7FH,BUOK
DJNZR3,BUBBLE
BUOK:
MOVR0,#BLOCK
MOVDPTR,@BLOCK1
MOVR1,#0AH
LOOP1:
MOVA,@R0
MOVX@DPTR,A
INCR0
INCDPTR
DJNZR1,LOOP1
SJMP$
END
设有二个字节BCD码存于单片机8051内部RAM区首地址为BLOCK的存储区,试编写程序,将该数据区二进制码数据转换成ASC码送到外部存储单元以BLOCK1为首地址的存储区中。
ORG1000H
MOVDPTR,#BLOCK
MOVR0,#BLOCK
MOVA,@R0
MOVB,A
ANLA,#0FH
ORLA,#30H
MOVX@DPTR,A
INCDPTR
MOVA,B
ANLA,#0F0H
SWAPA
ORLA,#30H
MOVX@DPTR,A
INCDPTR
INCR0
MOVA,@R0
MOVB,A
ANLA,#0FH
ORLA,#30H
MOVX@DPTR,A
INCDPTR
MOVA,B
ANLA,#0F0H
SWAPA
ORLA,#30H
MOVX@DPTR,A
SJMP$
END
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 试样