单片机课后答案.docx
《单片机课后答案.docx》由会员分享,可在线阅读,更多相关《单片机课后答案.docx(18页珍藏版)》请在冰点文库上搜索。
![单片机课后答案.docx](https://file1.bingdoc.com/fileroot1/2023-5/26/09bf57fd-cb60-4878-81f6-aaa68440bcc0/09bf57fd-cb60-4878-81f6-aaa68440bcc01.gif)
单片机课后答案
2-4
DPTR由两个特殊功能寄存器DPH和DPL组成,分别存放16为地址的高字节与低字节。
2-5
堆栈指针初始值为07H,可以设置在内部RAM区的30~7FH空间内;
实现方法包括压栈和出栈,采用“先进后出“或”后进先出“的原则。
设置好栈底指针后,压栈时,是sp先加1,再从栈顶压栈;出栈时,是先从栈顶出栈,再sp减1。
2-13
不存在地址重叠,采用不同的操作指令来区分。
当读取外部程序存储器时,采用MOVC指令,同时产生PSEN有效信号,配合ALE、P0和P2地址线进行读取。
当读写外部数据存储器时,采用MOVX指令,同时产生RD/WR有效信号,配合ALE、P0和P2地址线进行读写。
2-17
不存在冲突,采用不同的操作指令来区分。
分别采用字节操作指令和位操作指令对字节地址和位地址操作。
3-4
MOVP1,#0FFH;设置P1口为高阻抗输入状态
MOV@R0,P1
(70H)=B7H,(B)=20H,(R1)=60H,(R0)=70H
3-5
CLRA
MOVR2,A
MOVR7,#4
LOOP:
CLRC
MOVA,R0
RLCA
MOVR0,A
MOVA,R1
RLCA
MOVR1,A
MOVA,R2
RLCA
MOVR2,A
DJNZR7,LOOP
SJMP$
把R2R1R0左移4位
3-6
START:
SETBP1.0
NEXT:
MOV30H,#10;2us
LOOP2:
MOV31H,#0FAH;2us
LOOP1:
NOP;1us
NOP;1us
DJNZ31H,LOOP1;2us
DJNZ30H,LOOP2;2us
CPLP1.0;1us
AJMPNEXT;2us
SJMP$
方波周期为=2×(2+(2+(1+1+2)×250+2)×10+1+2)
=20090us=20.090ms
3-8
MOVSP,#2FH
MOVDPTR,#2000H
MOVR7,#50H
NEXT:
MOVXA,@DPTR
PUSHA
DJNZR7,NEXT
SJMP$
Sp指向2FH+50H=7FH
3-10
XCHA,30H
MOVB,A
ANLA,#0FH
MOV33H,A
MOVA,B
SWAPA
ANLA,#15
MOV34H,A
SJMP$
结果:
(30H)的低4位送到33H单元,高4位送到34H单元
3-20
MOVA,R0
CPLA
JZLABEL1
INCA
JZLABEL2
当(R0)=FFH时转向LABEL1;
当(R0)=00H时转向LABEL2;
3-24
PSW.5=P1.3^ACC.2vB.5^P1.1
MOVC,P1.3
ANLC,ACC.2
ORLC,B.5
ANLC,P1.1
MOVPSW.5,C
4-5求8个数的平均值
设计思路:
先用8次循环求8个数的和(和用两个字节表示),再将该和右移三位以实现除8运算。
方法一:
ORG1000H
MOVR0,#30H
MOVR7,#08H
MOVR2,#00H
MOVR3,#00H
LOOP1:
MOVA,R3
ADDA,@R0
MOVR3,A
MOVA,R2
ADDCA,#00H
MOVR2,A
INCR0
DJNZR7,LOOP1
;右移3位相当于除8
MOVR7,#03H
LOOP2:
CLRC
MOVA,R2
RRCA
MOVR2,A
MOVA,R3
RRCA
MOVR3,A
DJNZR7,LOOP2
MOV38H,R3
SJMP$
END
方法二:
ORG0030H
START:
MOVR7,#7
MOVR3,#0
MOVA,30H
MOVR0,#31H
LOOP:
ADDA,@R0
JNCNEXT
INCR3
NEXT:
INCR0
DJNZR7,LOOP
MOVR2,A
;右移3位相当于除8
MOVR7,#03H
LOOP2:
CLRC
MOVA,R2
RRCA
MOVR2,A
MOVA,R3
RRCA
MOVR3,A
DJNZR7,LOOP2
MOV38H,R3
SJMP$
END
4-6把外部RAM的数据移入内部RAM
方法一:
ORG1000H
MOVDPTR,#2000H
MOVR7,#50H
MOVR0,#30H
LOOP:
MOVXA,@DPTR
MOV@R0,A
INCR0
INCDPL
DJNZR7,LOOP
SJMP$
END
方法二:
MOVSP,#2FH
MOVDPTR,#2000H
MOVR7,#50H
NEXT:
MOVXA,@DPTR
PUSHA
INCDPL;或者INCDPTR
DJNZR7,NEXT
SJMP$
END
4-7求内部RAM数据块最小数
ORG1000H
BLOCKDATA30H
LENDATA10H
MINIDATA20H
MOVR0,#BLOCK
MOVR7,LEN
DECR7
MOVA,@R0
LOOOP:
CLRC
MOVB,A
SUBBA,@R0
JCNOP1
MOVA,@R0
SJMPNOP2
NOP1:
MOVA,B
NOP2:
INCR0
DJNZR7,LOOP
MOVMINI,A
SJMP$
END
4-13SIGN函数
ORG1000H
VARDATA30H
FUNCDATA31H
MOVA,VAR
JNBACC.7,GOE
MOVFUNC,#FFH
SJMPFINISH
GOE:
JNZGR
MOVFUNC,#0
SJMPFINISH
GR:
MOVFUNC,#1
FINISH:
SJMP$
END
注意:
使用CJNE指令,会影响Cy位
4-1616分支跳转
JMP16:
MOVA,R3
RLA
ADDA,R3
MOVDPTR,#PRGTBL
JMP@A+DPTR
PRGTBL:
LJMPROOT00
LJMPROOT01
LJMPROOT02
……………………………
LJMPROOT15
注意:
LJMPAddr16和AJMPAddr11的区别
4-18查平方表
SQR:
MOVA,R3;R3是入口参数,也是出口参数
ANLA,#15
ADDA,#02H
MOVCA,@A+PC
MOVR3,A
RET
SQRTAB:
DB00,01,04,09,16
DB25,36,49,64,81
DB100,121,144,169,196
4-23测试芯片功能
方法一:
ORG1000H
A1BITP1.0
B1BITP1.1
C1BITP1.2
D1BITP1.3
E1BITP1.4
F1BITP1.5
G1BITP1.6
H1BITP1.7
Y1BITP3.0
TEST:
MOVC,A1
ANLC,B1
ANLC,C1
ANLC,D1
MOVF0,C
MOVC,E1
ANLC,F1
ANLC,G1
ANLC,H1
ORLC,F0
CPLC
MOVY1,C
SJMP$
END
方法二:
ORG1000H
A1BITP1.0
B1BITP1.1
C1BITP1.2
D1BITP1.3
E1BITP1.4
F1BITP1.5
G1BITP1.6
H1BITP1.7
Y1BITP3.0
TEST:
MOVC,A1
ANLC,B1
ANLC,C1
ANLC,D1
JCLOOP
MOVC,E1
ANLC,F1
ANLC,G1
ANLC,H1
JCLOW
SETBY1
SJMPNEXT
LOW:
CLRY1
NEXT:
SJMP$
END
5-5答:
当使用MOVC和MOVX对外部存储器(外部程序存储器和外部数据存储器)进行读写操作时,会产生地址锁存ALE信号,接在地址锁存器的使能端G;
当对外部程序存储器进行读操作,即MOVC指令,会产生PSEN信号;
当对外部数据存储器进行读/写操作,即MOVX指令,会产生WR和RD信号
5-10答:
1)
2)采用线选法译码,不重叠时地址分配应为:
P2.7=1,P2.6=1,P2.5=0地址为C000H~DFFFH
P2.7=1,P2.6=0,P2.5=1地址为A000H~BFFFH
P2.7=0,P2.6=1,P2.5=1地址为6000H~7FFFH
5-11答:
1)
2)如果RAM地址为
8000H~BFFFH时两片6264的CE端分别接Y4,Y5
C000H~FFFFH时两片6264的CE端分别接Y6,Y7
5-12答
1)
2)再加16k的ROM——27128应注意的问题
方法:
地址总线D0~D7,数据总线A0~A13,PSEN接27128的OE端,27128的CE端接地或者接P2.6/P2.7(访问ROM时,地址中P2.6/P2.7应为0)。
第六章作业讲解
6-712Mhz时,一个机器周期为1us,则
a)设置1ms对称方波时,应定时0.5ms,P1.0取反输出,T0方式0时,应设置TH0=F0H,TL0=0CH
b)设置2ms(1:
3)不对称方波时,应设置定时,高电平0.667ms,低电平1.333ms,T1方式1时,应设置TH1=FDH,TL1=65H,并设置高电平计数1次,低电平计数2次
参考程序
ORG0000H
LJMPSTART
ORG000BH
SJMPTIME0
ORG001BH
SJMPTIME1
ORG0030H
START:
MOVSP,#60H
MOVTMOD,#10H
MOVTH0,#0F0H
MOVTL0,#0CH
MOVTH1,#0FDH
MOVTL1,#65H
SETBEA
SETBET0
SETBET1
SETBTR0
SETBTR1
MOVR7,#03H
SJMP$
TIME0:
MOVTH0,#0F0H
MOVTL0,#0CH
CPLP1.0
RETI
TIME1:
MOVTH1,#0FDH
MOVTL1,#65H
DJNZR7,FAN
SETBP1.1
MOVR7,#03H
SJMPFINISH
FAN:
CLRP1.1
FINISH:
RETI
END
TIME1:
CLRP1.1
MOVTH1,#0FDH
MOVTL1,#65H
INCR1
CJNER1,#3,FINISH
CLRR1
CPLP1.1
FINISH:
RETI
END
6-812Mhz,定时最长时间为65.536ms,
最简单方式:
利用T0定时30ms取反一次(周期是60ms)和T1计数1000次共同完成。
ORG0000H
LJMPSTART
ORG000BH
SJMPTIME0
ORG001BH
SJMPCOUNT1
ORG0030H
START:
MOVSP,#60H
MOVTMOD,#51H
MOVTH0,#0FCH
MOVTL0,#18H
MOVTH1,#03H
MOVTL1,#0E8H
SETBEA
SETBET0
SETBET1
SETBTR0
SETBTR1
SJMP$
TIME0:
MOVTH0,#0FCH
MOVTL0,#18H
CPLP1.0
RETI
TIM30:
MOVTH1,#03H
MOVTL1,#0E8H
CLRP1.1
RETI
6-9答:
12MHZ晶振,则1个机器周期1us,0.5MHZ方波的周期是2us。
不能用普通的定时方式,应采用门控方式。
参考程序:
MOVTMOD,#09H
MOVTH0,#0H
MOVTL0,#0H
JBP3.2,$
SETBTR1
JNBP3.2,$
CLRTR1
6-23答:
有两种方式:
电平触发和边沿触发
电平触发方式要求中断响应之前中断信号维持低电平,且在中断服务程序返回之前撤销,否这会引起低二次中断
边沿触发要求输入外部中断信号至少大于12个机器周期,可被TCON记忆直到中断响应
6-25答:
可以,在中断矢量地址入口处放一条长跳转指令可跳转至64K存储器空间任一地址。
6-29答:
1)字节操作方式
MOVIE,#97H
MOVIP,#02H
2)位操作方式
SETBEA
SETBES
SETBEX1
SETBET0
SETBEX0
SETBPT0
6-31答:
1)T0和T1都工作于方式1,定时器方式,16位计数器
2)T0计数次数25000,定时50ms,T1计数次数4000,定时值8ms,(主频6MHZ)
3)T0为低优先级,T1为高优先级
4)T0的中断矢量地址为000BH,T1的中断矢量地址为001BH
5)启动T0和T1。
(相当于执行了SETBTR1和SETBT