赵嘉蔚北京交通大学单片机原理与接口技术课后习题.docx
《赵嘉蔚北京交通大学单片机原理与接口技术课后习题.docx》由会员分享,可在线阅读,更多相关《赵嘉蔚北京交通大学单片机原理与接口技术课后习题.docx(24页珍藏版)》请在冰豆网上搜索。
赵嘉蔚北京交通大学单片机原理与接口技术课后习题
第一章
1-4
运算器,控制器,存储器,输入设备,输出设备
1-9(7)
1-11(3)
1-12(4)
1-16(3)
见例1-17
1-19
(1)
01000111
1-20
(1)
414238
第二章
2-2见书p30,
2-4见书p31,
2-5见书p31,
2-6见书p32,
2-9见书p38,
2-10见书p39,
2-13见书p43,
2-14见书p46,
3-8按要求写出相应的指令。
(1)把寄存器R6的内容送到累加器A中。
(2)把外部RAM1000H单元的内容传送到内部RAM30H单元中。
(3)清除内部RAM3FH单元的高4位。
(4)使累加器A的最低位置1。
(5)清除进位位。
(6)使和置1。
(7)把外部ROM2000H单元中的内容送到内部RAM的20H单元中。
(8)把外部ROM2000H单元中的内容送到外部RAM的3000H单元中。
答案:
(1)MOVA,R6
(2)MOVDPTR,#1000H
MOVXA,@DPTR
MOVR0,#30H
MOV@R0,A
(3)ANL3FH,#0FH
(4)ORLA,#01H
(5)CLRC
(6)ORLA,#30H
(7)CLRA
MOVDPTR,#2000H
MOVCA,@A+DPTR
MOV20H,A
(8)CLRA
MOVDPTR,#2000H
MOVCA,@A+DPTR
MOVDPTR,#3000H
MOVX@DPTR,A
3-10编写程序段完成如下要求。
(1)将寄存器R0中的内容乘以10(积小于256)。
(2)将片内RAM30H单元开始的15个字节的数据传送到片外RAM3000H开始的单元中。
(3)将片外RAM2000H开始的5个字节的数据传送到片内RAM20H开始的单元中。
(4)有10个字节的二进制数存放在片内RAM以40H开始的单元内,编程找出其中的最大值并存于内部50H单元中。
(5)将片外RAM空间2000H~200AH中的数据的高4位变零,低4位不变,原址存放。
(6)将外部RAM2040H单元的内容与3040H单元的内容互换。
答案:
(1)MOVB,#0AH
MOVA,R0
MULAB
MOVR0,A
(2)ORG0000H
MOVR0,#30H
MOVDPTR,#3000H
MOVR7,#0FH
LOOP:
MOVA,@R0
MOVX@DPRT,A
INCR0
INCDPTR
DJNZR7,LOOP
SJMP$
END
(3)MOVDPTR,#2000H
MOVR0,#20H
MOVR7,#05H
LOOP:
MOVXA,@DPTR
MOV@R0,A
INCR0
INCDPTR
DJNZR7,LOOP
END
(4)ORG0000H
MOVA,40H;A寄存器放最大值,且初始化最大值(默认第一个数)
MOVR3,#09H;比较次数
MOVR0,#41H
START:
CJNEA,@R0,LOOP
LOOP:
JNCLOOP1;如果比A小,则跳转到LOOP1
MOVA,@R0;如果比A大,则更新A的值
LOOP1:
INCR0
DJNZR3START
MOV50H,A
SJMP$
END
(5)MOVDPTR,#20000H
MOVR1,#0BH
LOOP:
MOVXA,@DPTR
ANLA,#0FH
MOVX@DPTR,A
INCDPTR
DJNZR1,LOOP
SJMP$
(6)MOVDPTR,#2040H
MOVXA,@DPTR
MOVR0,#20H
MOV@R0,A
MOVDPTR,#3040H
MOVXA,@DPTR
XCH@R0,A
MOVX@DPTRA
MOVA,@R0
MOVDPTR,#2040H
MOVX@DPTR,A
3-15设有一带符号的十六位数以补码形式存放在R2、R3寄存器中,试编制求其原码的程序。
ORG0000H
START:
MOVA,R3
JB,NEXT;判读符号位,如果是正数则原码与补码一样,如果为负,求原码的方法是符号位不变,其余位取反加1
MOVR3,A
HERE:
SJMP$
NEXT:
XRLA,#7FH;高八位,符号位不变,其余取反
MOVR3,A;放回R3
MOVA,R2;低八位
XRLA,#0FFH;取反
ADDA,#01H;加1
MOVR2,A;放回R2
MOVA,R3;看低八位是否有向高八位进位
ADDCA,#00H
MOVR3,A
SJMP$
END
3-16设有一不带符号的十六进制数组,存放在8031单片机片内RAM以BUFFER为首址的连续单元中,其长度为30个字节,要求统计小于10,等于10及大于10的数的个数,并把它们分别存放到片内RAM的LESS、EQUAL、BIG单元中,试编制实现上述要求的程序并画出相应的流程图。
ORG0000H
BUFFERDATA10H
LESSDATA30H
EQUALDATA31H
BIGDATA32H
MOVR0,#BUFFER
MOVR7,#1EH
MOVLESS,#00H
MOVEQUAL,#00H
MOVBIG,#00H
NEXT:
CJNE@R0,#0AH,LOOP1;循环次数
INCEQUAL
AJMPLOOP3
LOOP1:
JCLOOP2
INCBIG
AJMPLOOP3
LOOP2:
INCLESS
LOOP3:
INCR0
DJNZR7,NEXT
SJMP$
END
3-17在外部RAM1000H单元开始的存储区域存放着10个用ASCII码表示的0~9之间的数字,请编程将它们转换成BCD码,然后存放在2000H~2004H单元(以压缩BCD码存放)。
ORG0000H
MOVR2,#05H
MOVDPTR,#1000H
MOVR0,#20H
LOOP:
MOVXA,@DPTR
ANLA,#0FH
MOVR4,A
INCDPTR
MOVXA,@DPTR
ANLA,#0FH
SWAPA
ADDA,R4
MOV@R0,A
INCR0
INCDPTR
DJNZR2,LOOP
MOVR5,#05H
MOVR0,#20H
MOVDPTR,#2000H
LOOP1:
MOVA,@R0
MOVX@DPTR,A
INCR0
INCDPTR
DJNZR5,LOOP1
SJMP$
END
3-18设有50个无符号8位二进制数,存放在8031单片机内部RAM以BOFER为首址的连续单元中,试编制将其中最小数存放到内部RAM的MIN单元的程序并画出相应的流程图。
ORG0000H
BOFERDATA20H
MINDATA60H
MOVR2,#31H;循环49次
MOVR1,#BOFER+1
MOVMIN,BOFER;把最小值放A,且初始化时把第一个数放入A
LOOP:
CJNE@R1,MIN,LOOP1
LOOP1:
JNCLOOP2;@R1>MIN
MOVMIN,@R1;MIN>@R1,MIN要更新
LOOP2:
INCR1
DJNZR2,LOOP
SJMP$
END
3-19设有一字符串存放在8031单片机内部RAM以20H为首址的连续单元中,字符串以回车结束。
要求统计该字符串中字符B(‘B’=42H)的个数,并将其存入外部RAM的40H单元中。
试编写实现上述要求的程序并画出相应的流程图。
ORG0000H
MOVR0,#20H
MOVR1,#00H;‘B’的个数初始化
LOOP:
MOVA,@R0
CJNEA,#42H,NEXT;不为B则跳转
LOOP1:
INCR1;为B则使计数器加1
INCR0
AJMPLOOP
NEXT:
CJNEA,#0DH,LOOP1;判断是否结束(回车键)
MOVDPTR,#0040H;把结果放外部RAM中
MOVA,R1
MOVX@DPTR,A
SJMP$
END
3-23已知MDA和MDB单元内分别存有两个小于10的整数a和b,试用查表子程序实现c=a2+2ab+b2,并把和存于MDC和MDC+1单元中(MDC单元中放低字节,MDC+1单元中放高字节)。
ORG0000H
MDADATA20H
MDBDATA21H
MDCDATA22H
ORG0000H
CLRC
MOVA,MDA
ACALLSQR
MOVR2,A
MOVA,MDB
ACALLSQR
ADDA,R2
MOVR2,A;a2+b2结果暂时放入R2
MOVB,MDA;下面算2*a*b
MOVA,MDB
MULAB
RLA
ADDCA,R2
MOVMDC,A
CLRA
ADDCA,#00H
MOVMDC+1,A
SJMP$
SQR:
ADDA,#01H
MOVCA,@A+PC
RET
SQRTAB:
DB0149162536496481100121
DB144169196225
END
3-25设有一长度为20H的字符串,存放在8031单片机片内RAM以10H为首地址的连续单元中,试编制将其中数字与字母分开并将它们分别送到以30H和50H为首地址的连续单元中的程序。
ORG0000H
MOVR2,#20H;循环次数
MOVR1,#10H
MOV60H,#30H;数字存储首地址
MOV61H,#50H;字母存储首地址
LOOP:
MOVA,@R1
CJNEA,#40H,NEXT
NEXT:
JNCNEXT1;如果是字母则跳转到NEXT1
MOVR0,60H;是数字,把数字的存储地址给R0
MOV@R0,A
INC60H
SJMPLOOP1
NEXT1:
MOVR0,61H
MOV@R0,A;是字母,把字母的存储地址给R0
INC61H
LOOP1:
INCR1
DJNZR2,LOOP
SJMP$
END
第四章
4-3,见书略
4-4,见书略
4-5,见书略
4-8,见书略
4-9,见书略
4-16,16.高电平:
初值:
低电平:
初值:
ORG0000H
AJMPMAIN
ORG000BH
AJMPTOINT
MAIN:
MOVTMOD,#01H
MOVTH0,#FDH
MOVTL0,#64H
MOVIE,#82H
SETB
SETBTR0
SJMP$
TOINT:
MOVC,
JCNEXT
MOVTH0,#0FDH
MOVTL0,#64H
SJMPCOM
NEXT:
MOVTH0,#0FAH
MOVTL0,#0CAH
COM:
CPL
RETI
END
4-17,定时器50ms,循环2次可得100ms,设定初值3CB0H
ORG0000H
AJMPMAIN
ORG001BH
AJMPBRT1
MAIN:
MOVTMOD#10H
MOVTH1,#3CH
MOVTL1,#0B0H
MOVR1,#10H
MOVR0,#70H
MOVR2,#5
MOVR3,#02H
MOVIE,#88H
SETBTR1
LOOP:
SJMP$
BRT1:
MOVTH1,#3CH
MOVTL1,#0B0H
DJNZR3,DONE
MOVR3,#02H
DJNZR2,LOOP
CLRET1
SJMPDONE
LOOP:
MOVR4,#10
LOOP1:
MOVA,@R1
MOV@R0,A
INCR1
INCR0
DJNZR4,LOOP1
DONE:
RETI
END
4-26,串行接口设置为方式1,采用定时器T1方式2作为波特率发生器,SMOD=0,则计数初值0E6H分别装入TL1,TH1,程序如下:
ORG0000H
AJMPMAIN
ORG0023H
AJMPPR1
RBLOCKDATA2000H
MAIN:
MOVTMOD,#20H
MOVTL1,#0E6H
MOVTH1,#0E6H
MOVPCON,#00H
SETBTR1
MOVSCON,#50H
MOVDPTR,#RBLOCK
MOVR2,#30
SETBEA
SETBES
WAIT:
JBERROR1
SJMPWAIT
ERROR1:
CLREA
SJMP$
PR1:
CLRRI
MOVA,SBUF
MOVC,
JCERROR
ANLA,#7FH
MOVX@DPTR,A
DJNZR2,NEXT
CLREA
SJMP$
ERROR:
SETB
SJMPNEXT1
NEXT:
INCDPTR
NEXT1:
RETI
END
第五章
5-8要在单片机片外扩展16KB数据存储器,选择其地址为0000~3FFFH。
如选用6264为存储器芯片,74LS138为译码器,试画出硬件的连接图。
(图中右边的6116应该改为6264)
5-9要在单片机片外扩展32KB数据存储器,选择其地址为8000H~FFFFH。
如选用线选法,试设计其硬件的连接图。
5-11决定8155端口地址的引脚有哪些的作用是什么T/IN和的作用是什么
1.AD0~AD7(8条)三态地址/数据线
控制总线(8条)
I/O总线(22条)
电源线(2条)
2.为I/O口及存储器选择信号,若=0,则选择存储器;否则选择I/O口;
3.T/IN为定时器输入,定时器工作所需的时钟信号由此端输入。
为定时器输出;
5-13LED数码管显示器在单片机系统中有哪几种显示方式
LED显示器的显示方式可分为静态显示和动态显示两种。
静态显示是指每个数码管的段选线控制是独立的,其特点是各LED管能稳定地同时显示各自的字形。
动态显示又称扫描显示方式,它是将每个数码管的段选线同名相连,在某一时刻只让一根位选线有效,同时在段选线上输出该位要显示的字形码,在下一时刻改变要显示的字位并在段选线上输出相应的字形码,如此各LED轮流地一遍一遍地显示各自的字符,由于视觉器官具有视觉暂留效应,从而看到的是各LED似乎在同时显示不同的字形。
5-14以共阴极数码管为例说明其字形码是如何形成的
共阴极是把八个二极管的阴极接在一起作为位选线,低电平有效。
下图为八段LED数码显示管的结构和原理图。
管脚信号a~h用来控制显示的字形,称为段选线,一般将段选线的高低电平按h、g、f、e、d、c、b、a顺序排列,形成十六进制编码,称为字形码
5-16已知30H单元中有一带符号数,若它是正数,则在图5-41所示接口电路中自左至右不断地依次显示0;若它是负数,则自右至左不断地依次显示1。
试编写相应的程序。
ORG0000H
START:
MOVR1,#06H;数码管个数
MOVR2,#20H;负数时数码管自右向左显示时初始位控制字
MOVR3,#01H;正数时数码管自左向右显示时初始位控制字
MOVR7,#02H;延时1ms,内部循环
MOVR6,#0FFH;延时1ms,外部循环
MOVA,#0EH;命令控制字,B口输出,C口输出
MOVDPTR,#2100H;命令寄存器地址
MOV@DPTR,A;写命令
MOVA,30H;取出30H单元的数,判断正负
JB,NEG;如果为负则跳转至NEG
SJMPPOS;如果为正则跳转至POS
NEG:
MOVA,#06H;“1”的字形码
MOVDPTR,#2102H;B寄存器
MOVX@DPTR,A;
NXN:
MOVA,R2;负数的位控制字
MOVDPTR,#2103H;C寄存器
MOVX@DPTR,A;输出位控制字,控制数码管的显示
RRA;位控制字右移一位,实现数码管自右向左点亮
MOVR2,A;把位控制字放回R2寄存器
ACALLDL;调用延时程序,延时1ms
NEXTN:
DJNZR1,NXN;判断数码管是否已经循环完毕
SJMPJS;如果显示完毕则跳转至JS
POS:
MOVA,#3FH;“0”的字形码
MOVDPTR,#2102H;B寄存器
MOVX@DPTR,A;
NXP:
MOVA,R3;正数的位控制字
MOVDPTR,#2103H;C寄存器
MOVX@DPTR,A;
RLA;位控制字左移一位,实现数码管自左向右点亮
MOVR3,A;把位控制字放回R3寄存器
ACALLDL;调用延时程序,延时1ms
NEXTP:
DJNZR1,NXP;判断数码管是否已经循环完毕
JS:
SJMPSTART;如果显示完毕则跳转至JS
DL:
MOVR6,#0FFH;延时1ms子程序
DL6:
DJNZR6,DL6;
DJNZR7,DL;
RET
END
5-18设计具有三个按键的电路并编写相应的程序:
当第一个按键按下时,将40H单元置1;当第二个按键按下时,40H单元置2;当第三个按键按下时,40H单元置0。
ORG0000H
SCAN:
MOVDPTR,#0101H
MOVA,#00H
MOV@DPTR,A
MOVDPTR,#0103H
MOVXA,@DPTR
ANLA,#07H
CJNEA,#07H,KEYSCAN
KEYSCAN:
ACALLDYRMS
MOVR2,#0FEH
KEYSM1:
MOVA,R2
MOVDPTR,#0101H
MOVX@DPTR,A
MOVDPTR,#0103H
MOVXA,@DPTR
ANLA,#07H
CJNEA,#07H,JSADD
SJMP$
JSADD:
JB,JSADD1
MOV40H,#01H
AJMPDONE
JSADD1:
JB,JSADD2
MOV40H,#02H
AJMPDONE
JSADD2:
JB,DONE
MOV40H,#00H
DONE:
SJMP$
DYRMS:
MOVR7,#18H
DYRMS1:
MOVR6,#0FFH
DYRMS2:
DJNZR6,DYRMS2
DJNZR7,DYRMS1
RET
END
第六章
6-5见书p211,
6-6见书p213,
6-8仿书p216,
6-10见书p219,
6-11见书p221,
3.解:
分辨率为
6-8利用8051单片机和DAC0832产生的梯形波(如图6-16所示,梯形波的斜边采用步幅为1的线性波形,幅度从00H~80H,水平段调用延迟程序维持),编写梯形波产生的程序。
若水平段由8051的内部定时器/计数器来维持,程序应怎样编制
图6-16梯形波
8.ORG0000H
TIXING:
MOVA,#00H
MOVDPTR,#7FFFH
MOVR2,#80H
UP:
MOVX@DPTR,A
INCA
DJNZR2,UP
ACALLDELAY
DOWN:
MOVX@DPTR,A
DECA
JNZDOWN
ACALLDELAY
SJMPUP
DELAY:
MOVR4,#02H
DEL1:
MOVR5,#0F4H
DEL2:
DJNZR5,DEL2
DJNZR4,DEL1
RET
END
若是采用定时器维持水平段:
ORG0000H
AJMPMAIN
ORG000BH
AJMPT0INT
MAIN:
MOVTMOD,#01H
MOVTH0,#0D8H
MOVTL0,#0FAH
MOVIE,#82H
MOVA,#00H
MOVDPTR,#7FFFH
MOVR2,#80H
UP:
MOVX@DPTR,A
INCA
DJNZR2,UP
SETBF0
SETBTR0
SJMP$
T0INT:
CLRTR0
JBF0,DOWN
CLRA
MOVR2,#80H
UP:
MOVX@DPTR,A
INCA
DJNZR2,UP
SETBF0
SJMPFAN
DOWN:
MOVX@DPTR,A
DECA
JNZDOWN
CLRF0
FAN:
MOVTH0,#0D8H
MOVTL0,#0FAH
SETBTR0
RETI
12.ORG0000H
ADC:
MOVDPTR,#7FFFH
MOVR0,#30H
LOOP:
MOVA,#01H
MOVX@DPTR,A
MOVR2,#05H
DL:
DJNZR2,DL
WAIT:
JB,WAIT
MOVXA,@DPTR
MOV@R0,A
SJMPADC
END
6-13参考图6-13所示的电路原理图,若使ADC0809的8个模拟通道地址处于4000H~5FFFH,接口电路应如何改动编写程序,定时1s对IN7通道进行A/D转换,利用8051的定时器/计数器T0实现定时,结果存于8051的内部RAM50H单元。
13.定时器50ms,循环20次可得1s,设定初值3CB0H
ORG0000H
AJMPMAIN
ORG000BH
AJMPTOINT
MAIN:
MOVTMOD,#01H
MOVR1,#20
LOOP:
MOVTH0,#03CH
MOVTL0,#0B0H
MOVDPTR,#6007H
MOVX@DPTR,