单片机部分习题答案何桥Word格式.docx
《单片机部分习题答案何桥Word格式.docx》由会员分享,可在线阅读,更多相关《单片机部分习题答案何桥Word格式.docx(16页珍藏版)》请在冰豆网上搜索。
寄存器间接寻址中的间址寄存器只能是R0或者R1。
(3)DECDPTR
规定减1指令DEC与DPTR无法连用,但加1指令INC可与DPTR连用。
(4)CPL2FH
合乎规定。
因为此处的2FH表示的是位地址。
(5)MOV20H.7,F0
因为位寻址是在片内RAM的位寻址区和可以位寻址的专用寄存器间进行的位操作。
(6)PUSHDPTR
因为DPTR为16位,而PUSH只能处理8位。
(7)MOVPC,#2000H
因为只能通过转移、调用、返回指令来使PC值自动改变。
5.原题目需进行部分修改,修改后程序如下:
ORG2000H;
指定汇编的起始地址
MOVSP,#40H;
设堆栈指针SP为40H
MOVA,#30H;
将30H复制给累加器A
LCALL2400H;
调用2400H开始处的子程序,原PC值入栈保护,故SP加2变为
;
42H,PC值变为2400H,
ADDA,#20H;
累加器A的内容30H加上20H,变为50H
MOVB,A;
将累加器A的值也赋给累加器B,即累加器B的内容也变为50H
ZY:
SJMPZY;
程序结束
ORG2400H;
指定子程序起始地址
MOVDPTR,#200AH;
将200AH赋值给DPTR
PUSHDPL;
将低位的0AH入栈保护,SP加1变为43H
PUSHDPH;
将高位的20H入栈保护,SP加1变为44H
RET;
返回指令,原PC值出栈,故SP减2变为42H
由以上程序分析,可知
SP=42HA=50HB=50H
6.
(1)1230HAJMP1620H
未超出。
1230H+2=1232H,G故高五位为00010,而1620H高五位也为00010。
所以转移目标地址与AJMP下一条指令的第一个字节在同一2KB范围内。
(2)2780HAJMP2830H
超出。
2780H+2=2782H,G故高五位为00100,而2830H高五位为00101。
所以转移目标地址与AJMP下一条指令的第一个字节不在同一2KB范围内。
(3)1230HLJMP8FFFH
LJMP指令转移的目标地址可以在64KB程序存储器地址空间的任何地方。
(4)1750HACALL1A00H
1750H+2=1752H,G故高五位为00010,而1A00H高五位为00011。
所以所调用的子程序地址与ACALL下一条指令的第一个字节不在同一2KB范围内。
(5)2330HSJMP2340H
2340H-2330H=0010H=+16∈(-128,+127)
(6)2800HSJMP27FAH
27FAH-2800H=-0006H=-6∈(-128,+127)
(7)3FEEHSJMP3730H
3730H-3FEEH=-00CEH=-206∈(-128,+127)
8.
执行ACALL3A00H以后,
(PC)=(PC+2)=3800H
入栈保护,SP两次加1变为62H。
且先存PC的低8位,再存PC的高8位,即堆栈中存储情况如下:
入栈保护完以后,PC值变为调用的子程序的地址3A00H。
11.
ONEDATA1CH
TWODATA1DH
THREEDATA1EH
MOVR0,#20H;
数据块首地址
MOVR1,1FH;
取数据块长度到R1
MOVA,R1
JZFINISH;
长度为0则结束
CLRA
MOVONE,A;
计数单元清0
MOVTWO,A
MOVTHREE,A
LOOP:
MOVA,@R0;
取数
INCR0;
修改地址指针
JZNEXT2;
A=0,转向NEXT2
JBACC.7,NEXT3;
A<
0,转向NEXT3
INCONE;
A>
0,ONE单元加1
SJMPNEXT1
NEXT3:
INCTHREE;
0,THREE单元加1
NEXT2:
INCTWO;
A=0,TWO单元加1
NEXT1:
DJNZR1,LOOP;
长度减1不为0则返回
FINISH:
SJMP$
END
12.12MHZ,则一个机器周期T为1us。
(1)2ms,此处采用双重循环来实现,设外层循环为10次,则2000us÷
10÷
1us÷
(1+1+2)=50=32H,则程序如下:
ORG1000H
MOVR6,#0AH;
1T
DL2:
MOVR7,#32H;
DL1:
NOP;
DJNZR7,DL1;
2T
DJNZR6,DL2;
RET;
(2)1s,此处采用三重循环来实现,设外层循环为100次(64H),中间循环也为100次(64H),则1000000us÷
100÷
100÷
(1+1+2)=25=19H,则程序如下:
ORG1000H
MOVR5,#64H;
DL3:
MOVR6,#64H;
MOVR7,#19H;
DJNZR5,DL3;
15.
MOVR2,#20H;
源数据区地址高8位
MOVR3,#28H;
目的数据区地址高8位
MOVR7,#81H;
存放数据块数据个数
MOVDPL,#00H;
数据区地址低8位
LOOP:
MOVDPH,R2;
形成源地址
MOVXA,@DPTR;
取一个数
PUSHA;
A入栈保护
CLRA
MOVX@DPTR,A;
把原数据块中的区域清0
POPA;
A出栈
MOVDPH,R3;
形成目的地址
MOVX@DPTR,A;
传送一个数
INCDPL;
修改低8位地址
CJNER7,#81H,LOOP
SJMP$
END
18.
SOURCEDATA3000H
MOVDPTR,#SOURCE;
源数据块首地址
MOVNUM,#00H;
NUM初始值为0
MOVXA,@DPTR;
取一个数据
INCDPTR;
CJNEA,#24H,NEXT;
不为结束符$,则判断是否为结尾符00H
INCNUM;
为结束符$则NUM值加1
NEXT:
CJNEA,#00H,LOOP;
不为结尾符00H,则循环,取下一个数据继续判断
SJMP$;
结束
END
第四章作业参考答案
5.MCS-51系列单片机的中断矢量地址分别为:
6.中断响应过程:
单片机一旦响应中断,首先置位相应的优先级有效触发器,然后执行一个硬件子程序调用,把断点地址压入堆栈保护,然后将对应的中断人口地址装入程序计数器PC,使程序转向该中断入口地址,以执行中断服务程序。
7.
(1)保护断点:
由CPU自动执行的。
相应中断后,CPU会执行一个硬件子程序调用,把断点地址压入堆栈保护。
当执行中断返回指令RETI后,将断点弹出送回PC,使程序回到原来被中断的主程序继续执行。
(2)保护现场:
由用户编写程序执行。
现场有PSW、工作寄存器、专用寄存器等,如果在中断服务程序中要用到这些寄存器,则用户必须编写程序使得在进入中断服务之前将他们的内容包含起来。
同时用户必须在中断结束执行RETI之前编写程序恢复之前的现场。
8.CPU响应中断的条件:
(1)有中断源发出中断请求;
(2)中断总允许位EA=1,即CPU开中断;
(3)申请中断的中断源的中断允许位为1。
9.MCS-51扩充中断源可采用的方法:
(1)用定时器扩充外部中断;
(2)中断与查询相结合;
(3)用Intel8259可编程中断控制器扩展外部中断。
第五章作业参考答案
5.解:
设定时25ms的计数初值为X,则:
(216-X)*(12/6)*10-6=25*10-3
解得:
X=53036
将X用十六进制表示为:
CF2CH
TH0=0CFH
TL0=2CH
程序设计如下:
ORG2000H
MOVTMOD,#01H;
写入方式控制字
MOVTL0,#2CH;
计数初值写入
MOVTH0,#0CFH
SETBTR0;
启动T0
LOOP:
JBCTFO,PE
AJMPLOOP
PE:
MOVTL0,#2CH;
重装计数初值
AJMPLOOP
6.答:
1)8051做定时时其计数脉冲由内部提供。
采用晶体脉冲的十二分频信号作为计数信号,即使对机器周期进行计数。
2)8051做计数时其计数脉冲来自外部引脚T0或T1。
7.答:
门控信号设置为1时,定时器/计数器的启动要由外部中断引脚INTi和TRi位共同提供。
只有INT0(或INT1)引脚为高电平,TR0或TR1置“1”才能启动定时器/计数器。
8.解:
因为方波周期为2ms,故采用定时器T1定时1ms,
设定时1ms的计数初值为X,则:
(213-X)*(12/12)*10-6=1*10-3
X=7192
1C18H
TH0=1CH
TL0=18H
MOVTMOD,#00H;
MOVTL1,#18H;
MOVTH1,#1CH
SETBTR1;
启动T1
JBCTF1,PE
MOVTL1,#18H;
CPLP1.0
SJMPLOOP;
P1.0取反
9.解:
定时100us和200us,应用T0方式3。
定时100us计数初值,则:
(28-X1)*(12/6)*10-6=100*10-6
X1=206=0CEH
定时200us计数初值,则:
(28-X2)*(12/6)*10-6=200*10-6
X2=156=9CH
程序设计如下:
START:
AJMPMAIN
ORG000BH
AJMPPIT0;
转T0中断处理入口
ORG001BH;
转T1中断处理入口
AJMPPIT1
ORG2100H
MAIN:
MOVSP,#60H
MOVTMOD,#03H;
置方式3
MOVTL0,#0CEH;
定时100us计数初值
MOVTH0,#9CH;
定时200us计数初值
MOVTCON,#50H;
启动TL0、TH0计数
MOVIE,#8AH;
中断允许T0、T1开发中断
AJMPLOOP;
等待中断
PIT0:
MOVTL0,#0CEH;
T0中断处理程序
CPLP1.0
RETI
PIT1:
MOVTH0,#9CH;
T1中断处理程序
CPLP1.1
第六章作业参考答案
1.答:
不会发生冲突的原因是因为控制信号不同。
程序存储器选用PSEN做选通信号,而数据存储器选用WR或者RD做选通信号。
2.答:
在进行系统扩展时,P0口还用做数据线,因此需采用分时复用技术,对地址和数据进行分离。
为此在构造地址总线时要增加一个8位锁存器,先把这低8位地址送锁存器暂存,由地址锁存器为系统提供低8位地址,然后把P0口作为数据线使用。
而P2口只用作地址线。
3.答:
因为在访问外部ROM或者大于256B的RAM时,P2口作为扩展存储器的高8位地址。
当访问这些部分时,P2必须要输出一个稳定不变的地址。
将8031芯片扩展扩展一片27256EPROM组成最小系统,因为27256为32KB*8bit型芯片,32KB=215,所以需要15根地址线,又因为8bit,所以需要8根数据线。
图略,可参照教材上P91图6-8来设计。
地址范围根据具体图而定。
6.解:
扩展16KB的程序存储器和32KB的数据存储器,方法很多,比如可选用1片27128和2片62128。
图略,可参照教材上P91图6-8和P95图6-14来设计。
第七章作业参考答案
用中断方式编写串行口方式3下的发送程序。
此处采用定时器1方式2做波特率发生器,根据发送的波特率为4800b/s,取SMOD=0,通过下式计算得到TH1和TL1的时间常数初值X为:
X=256-11.059*106*20/(384+4800)=250=0FAH
ORG0000H
AJMPSTART
ORG0023H
AJMPSPIN
ORG1000H
MOVSP,#70H
MOVTMOD,#20H
MOVTH1,#0FAH
MOVTL1,#0FAH
SETBTR1
MOVDPTR,@TTAB
MOVR2,#30
MOVPCON,#00H
MOVSCON,#0C0H
SETBEA
SETBES
STOP:
SJMPSTOP
ORG2000H
D01:
CLRTI
MOVA,@DPTR
MOVC,PSW.0
CPLC
MOVACC.7,C
MOVSBUF,A
INCDPTR
DJNZR2,RIGH
CLRES
RIGH:
用中断方式编写串行口方式3下的接收程序。
此处采用定时器1方式2做波特率发生器,根据接收的波特率为4800b/s,取SMOD=0,通过下式计算得到TH1和TL1的时间常数初值X为:
MOVDPTR,@RTAB
MOVSCON,#0D0H
SPIN:
CLRRI
MOVA,SBUF
JNBPSW.0,PZ
JNBRB8,ERR
SJMPYES
PZ:
JBRB8,ERR
YES:
MOV@DPTR,A
CLRPSW.5
ERR:
SETBPSW.5
CLREA
1)串行口多机通信的原理是:
当串行口以方式2或方式3工作时,发送和接收的每一帧信息都是11位,其中第9位数据是可编程的,通过对SCON的TB8置“1”或清“0”,以区别发送的是数据帧还是地址帧。
2)其中SM2的作用是:
多机通信功能位。
3)与双机通信的区别是:
单片机系统的数量不一样,通信协议也不一样。
8.答:
因为RS-232信号电平和TTL电平不匹配,故需要进行信号电平转换。
常用器件是MAX232。
第八章作业参考答案
1)在同时需要扩展RAM和I/O的MCS-51应用系统中,选用8155芯片做扩展比较合适。
2)8155与8051单片机相连时不需要加地址锁存器,因为8155内部自带锁存器。
4.答:
1)8279芯片内的主要部件有:
I/O控制和数据缓冲器;
控制逻辑;
扫描计数器;
键盘输入控制;
FIFO/传感器RAM及其状态寄存器;
显示缓冲RAM和显示地址寄存器。
2)8279的主要特色:
利用8279可实现对键盘/显示器的自动扫描,并识别键盘上闭合键的键号,不仅可以大大节省CPU对键盘/显示器的操作时间,而且提高了CPU的工作效率。
逻辑电路图略,可参照教材P145图8-29。
程序略,和书上P146-P147差不多,一共3部分程序,将其中的显示字符子程序中显示个数根据具体情况修改即可。
7.解:
图略,因为至少60条外部I/O端口线,所以需要4片8155或8255来设计,可参照P127图8-8或P132图8-18,地址根据具体布线图决定。
第九章作业参考答案
主要技术指标有:
转换速度、转换精度、分辨率、建立时间。
设晶振为6MHz,则一个机器周期为2us,用双重循环实现每隔12.5ms采集一个数据(因为每8个共100ms)的延时,此处采用软件延时的方法,假设内层循环为10次,设计数初值为X,则:
5*2*10*XUT=100/8*103
XUT=125=7DH
图略,可参照教材P150图9-6。
MOVR0,#2000H
MOVR2,#64H;
总的循环采集100次
LP1:
MOVR3,#08H;
8个通道
MOVDPTR,#0FFF8H;
指向通道0
LP2:
MOVX@DPTR,A
MOVR6,#0AH
DL2:
MOVR7,#7DH
DL1:
NOP
DJNZR7,DL1
DJNZR6,DL2
MOVA,@DPTR;
读取转换结果
MOV@R0,A;
转存
INCR0
DJNZR3,LP2;
8个通道全采集完了吗?
DJNZR2,LP1;
采集了100次了吗?
RET
1)输出负向锯齿波:
DAADREQU7FFFH
STAR:
MOVDPTR,#DAADR;
选中DAC0832
MOVA,#00H
LP:
DECA
SJMPLP
2)输出15个正向梯形波:
MOVR2,#0FH
MOVDPTR,#DAADR
MOVA,#dataL
LP2:
INCA
CLRC
SUBBA,#dataH
JNCDOWN
ADDA,#dataH
SJMPLP2
DOWN:
LCALLDEL
LP3:
SUBBA,#dataL
JCLP1
ADDA,#dataL
SJMPLP3
DJNZR2,LP1