完整版单片机原理与应用技术江力版第三四六章答案.docx
《完整版单片机原理与应用技术江力版第三四六章答案.docx》由会员分享,可在线阅读,更多相关《完整版单片机原理与应用技术江力版第三四六章答案.docx(17页珍藏版)》请在冰豆网上搜索。
完整版单片机原理与应用技术江力版第三四六章答案
第三章作业参考答案
3-10.己知(A)=7AH,(R0)=34H,(34H)=A5H,请写出分别执行下面各条指令后累加器A的内容。
(1)MOVA,R0;(A)=34H
(2)MOVA,@R0;(A)=A5H
(3)MOVA,34H;(A)=A5H
(4)MOVA,#34H;(A)=34H
3-12.1设(R0)=32H,(A)=48H,片内RAM中(32H)=60H,(40H)=61H。
请指出在执行下列程序段后上述各单元内容的变化。
MOVA,@R0;(A)=(32H)=60H
MOV@R0,40H;(32H)=61H
MOV40H,A;(40H)=(A)=60H
MOVR0,#40H;(R0)=40H
即:
执行完程序段后,(R0)=40H,(A)=60H,片内RAM中,(32H)=61H,(40H)=60H
3-13已知(A)=83H,(R0)=47H,(47H)=34H。
请写出执行完下列程序段后A的内容。
ANLA,47H;(A)=83H∧34H=00H
ORL47H,A;(47H)=34H∨00H=34H
00H?
34H=34H;(A)=XRLA,@R0
SWAPA;(A)=43H
答:
执行完程序段后,(A)=43H
3-1414.说明下段程序执行过程中,SP的内容及堆栈中内容的改变过程。
MOVSP,#30H;(SP)=30H
MOV30H,#55H
MOV40H,#66H
PUSH30H;(SP)=31H,堆栈区中(31H)=55H
PUSH40H;(SP)=32H,堆栈区中(32H)=66H
POP30H;先将堆栈区中32H单元的内容送入30H单元,使(30H)=66H,再使
;SP值减1,即:
(SP)=31H
POP40H;先将堆栈区中31H单元的内容送入40H单元,使(40H)=55H,再使
;SP值减1,即:
(SP)=30H
最终,(SP)=30H,内部RAM中,(30H)=66H,(40H)=55H.
3-15编程实现两个16位二进制数的减法。
设被减数放在40H、41H单元中,减数放在50H、51H
单元,差仍存于被减数地址单元中,减数、被减数都是低地址单元存放低8位。
解:
CLCC
MOVA,40H
SUBBA,50H
MOV40H,A
MOVA,41H
SUBBA,51H
MOV41H,A
3-16.编写一BCD码拼字程序,将存放在40H、41H单元的两个一位十进制数的BCD码合并构成一个字节的压缩BCD码,并将结果保存在42H单元中(高地址单元的BCD码放在高4位)。
分析:
设(40H)=XYH,(41H)=WZH,则,合并结果为(42H)=ZYH,X,Y,W,Z取值0~9.
解:
MOVA,40H
ANLA,#0FH
MOVB,A
MOVA,41H
ANLA,#0FH
A
SWAP
ORLA,B
MOV42H,A
3-17.把片外数据存储器4020H单元中的数据读到累加器中,应用哪几条指令?
解:
方法1:
MOVDPTR,#4020H方法2:
MOVP2,#40H
MOVXA,@DPTRMOVR0,#20H
MOVXA,@R0
3-18.试编写程序将外部RAM5000H单元内容传送至外部RAM6030H单元。
解:
MOVDPTR,#5000H
MOVXA,@DPTR
MOVDPTR,#6030H
MOVX@DPTR,A
3-20.试编写一段程序,将累加器A的高4位由P1口的高4位输出,P1口低4位保持不变。
分析:
设(A)=XYH,(P1)=WZH,则执行结果为:
(P1)=XZH,
解:
ANLA,#0F0H;(A)=X0H
ANLP1,#0FH;(P1)=0ZH
ORLP1,A;(P1)=XZH
21.试编写一段程序,将P1口的高5位置位,低3位不变。
ORLP1,#11111000B
或ORLP1,#0F8H
25.使用位操作指令实现下列逻辑关系。
(1)P1.0=(10H∨Pl.1)∧(ACC.0∨CY)
(2)P1.3=(ACC.2∧P1.0)⊕(ACC.1∨P1.1)
解:
(1)ORLC,ACC.0
MOVF0,C;令F0=ACC.0∨CY
MOVC,10H;注意此处的10H是一个位地址而非字节地址
ORLC,P1.1;令CY=(10H)∨Pl.1
ANLC,F0;令CY=(10H)∨Pl.1)∧(ACC.0∨CY)
MOVP1.0,C
(2)MOVC,ACC.2
ANLC,P1.0
MOV20H,C;令20H=(ACC.2∧P1.0)
MOVC,ACC.1
ORLC,P1.1;令CY=(ACC.1∨P1.1)
但可利用“X?
Y?
XY?
XY”来形成异或运算,指令,只能用;位指令中没有XRL
MOV21H,C;令21H=(ACC.1∨P1.1)
ANLC,/20H
MOVF0,C
MOVC,20H
ANLC,/21H
ORLC,F0;令C=(ACC.2∧P1.0)⊕(ACC.1∨P1.1)
MOVP1.3,C
26.试编程将内部RAM30H~3FH单元中的内容全部清0(利用循环转移指令)。
解:
MOVR0,#30H
MOVR7,#10H;30H~3FH共10H个数据
LOOP:
MOV@R0,#00H
INCR0
DJNZR7,LOOP
27.在程序存储器中有一个常数表,从2040H单元开始分别存放表格的第0项、第1项……第n项,项的内容。
m试编程查出表格第
DPTR,#2040H
解:
MOV
MOVA,#m
A,@A+DPTR
MOVC
作业参考答案第4章31H单元内,请编程求它们21H单元和30H、5.有两个4位十六进制数分别存放在片内RAM20H、41H单元。
的和,并将和存放到片内RAM40H、单元内,请编程求它的补码,并将它存放、61H16位二进制负数的原码存放在片内RAM60H6.有一个71H单元。
到片内RAM70H、A,61H6.MOV
存放高字节设20H、30H解:
5.ACPL
A,#1ADDMOVA,21H
1低字节取反加71H,A;MOVA,31H
ADD
A,60HMOV41H,A
MOV
ACPLA,20H
MOV高字节取反加上进位位;ADDCA,#00HA,30H
ADDC1
高字节的符号位一定为;SETBACC.740H,A
MOVMOV70H,AENDEND
为首地址的50H,请编程将数据块传送到片外RAM以RAM中存放有20个数据,首地址为40H7.片内存储单元中。
)(编程1解:
)(编程2
R7,#20MOVR7,#20MOV
R0,#40HMOVR0,#40HMOV
R1,#50HMOVDPTR,#0050HMOV
P2,#00HMOVA,@R0LOOP:
MOV
A,@R0LOOP:
MOV@DPTR,AMOVX
R1,A@MOVXR0INC
R0INCDPTRINC
R1INCR7,LOOPDJNZ
R7,LOOPDJNZEND
END
为首地址5000HRAM以个数据,首地址为RAM中存放有2040H,请编程将数据块传送到片外8.片外个存储单元中的内容全清零。
为首地址的20的存储单元中,同时将片外RAM以40H解:
R7,#20MOV
P2,#00HMOV
R0,#40HMOV
DPTR,#5000H
MOV
;从源区取数据LOOP:
MOVXA,@R0
送入目的区DPTR,A;MOVX@
ACLR
0;将源区当前单元内容清@R0,AMOVX
R0INC
修改源区和目的区的地址;INCDPTR
R7,LOOPDJNZ
END
。
的子程序,晶振频率1min、1h12MHz请分别编写延时10.
DELAY2
,DELAY1延时子程序的名字分别为1h延时子程序、1min解:
设
DELAY1:
MOVR7,#250
R6,#250MOVDL1:
DELAY1需要较精确延时,则可修改R5,#240MOVDL2:
DELAY1:
MOVR7,#250NOPDL3:
MOVR6,#250DL1:
NOPMOVR5,#239DL2:
R5,DL3DJNZNOPR6,DL2DJNZNOPDL3:
R7,DL1DJNZNOPRETDJNZR5,DL3=1min*240]*1μs(1+1+2);延时时间=[250×250*DJNZR6,DL2
R1,#60DELAY2:
MOVDJNZR7,DL1DELAY1LOOP:
ACALLRET
R1,LOOPDJNZ;精确延时时间计算为RET[1+(1+(1+1+4*239+2)*250+2)*250+2]*1us延时。
60次,达到1h;通过调用1min延时子程序单元。
请编写满足如下31H单元,函数Y存放在X为一无符号数,存放在片内RAM区30H11.自变量。
时,Y=3Y=2;X≥10595时,Y=1;95<X<105时,关系的程序:
X≤A,30HMOV解:
NEXT1
96A,#CJNE
NEXT2则转至;X>95,NEXT2NEXT1:
JNC
Y=1;X≤95,则令31H,#1MOV
DONESJMP
A,#105,NEXT3NEXT2:
CJNE
NEXT4;X≥105,则转至NEXT3:
JNCNEXT4
Y=2105时,则令<X<MOV31H,#2;95
DONE
SJMP
;X≥105时,令Y=331H,#3NEXT4:
MOV
$SJMPDONE:
END
编写双字节无符号数加法子程序。
13.
加数低字节地址指针)==被加数低字节地址指针,(R1解:
设子程序的入口参数为:
(R0)和的高字节地址指针)=出口参数为:
(R0参考程序如下:
A,@R0MOVADD_SUB:
A,@R1ADD
@R0,AMOV
R0INC
R1INC
A,@R0MOV
A,@R1ADDC
@R0,AMOV
R0INC
ACLR
A,#0ADDC
@R0,AMOV
RET
作业参考答案第六章
(略)1.,请计算最小定时时间、最大定时时间、最12MHz计数器工作于方式0时,晶振频率为3.当定时器/小计数值和最大计数值。
,,最大定时时间为8192μsT=1μs,对于方式0,最小定时时间为1μs答:
当fosc=12MHz时,机。
1,最大计数值为8192最小计数值为,则相应的最小定时时间、最大定时时间、最小计数值和最大计数值1(补充说明,如果工作于方式)μs,1,65536。
分别为1μs,65536(略)4.,晶振频率100HzP1.1输出频率为0设计两个不同频率的方波,P1.0输出频率为200Hz,7.用方式12MHz。
定时T1作5ms分析:
该题编程可以有很多方案,比如可以设计两个定时器,让T0作2.5ms定时器,的定时器,让P1.1口电平改变一次;也可以只设计一个2.5ms器,定时时间一到,分别对P1.0口和口每两次定时时间到改变电平一次。
又如,定时器既可以P1.1口每次定时时间到改变电平一次,P1.0用中断方式工作,也可以用查询方式工作。
大家可自定方案。
P1.0定时器,定时时间一到,分别对2.5ms定时器,T1作5ms作参考方案1:
设计两个定时器,让T0次,P1.0电平改变1:
只用T0作2.5ms定时器,定时时间到,口和P1.1口电平改变一次。
参考方案2电平改变次。
1每定时2次,P1.1;参考方案1(中断方式);参考方案(查询方式)参考方案21(查询方式);0000HORG0000HORGORG0000HMAINAJMPMAINAJMPAJMPMAIN000BH
ORG0100H
0100HORGORGTIMER0
AJMPP1.0
SETBSETBP1.0MAIN:
MAIN:
001BH
ORGP1.1SETBSETBP1.1TIMER1
AJMPR7,#2MOVMOVTMOD,#00H0100H
ORG
TMOD,#00HMOVMOVTH0,#0B1HP1.0
SETBMAIN:
P1.1SETBTH0,#0B1HMOVTL0,#1CHMOV
TMOD,#00HMOVTL0,#1CHMOVMOVTH1,#63H
TH0,#0B1HMOVTR0SETBTL1,#18HMOVTL0,#1CH
MOVTF0,LP2
JBCLP1:
SETBTR0TH1,#63H
MOVLP1
SETBTR1SJMPTL1,#18H
MOVTH0,#0B1HMOVLP2:
CHECK:
JBCTF0,TIMER0EA
SETBTL0,#1CHJBCTF1,TIMER1MOVET0
SETB
P1.0CPLCHECKSJMPET1
SETB
R7,EXITDJNZTR0
SETB
TR1SETBTIMER0:
MOVTH0,#0B1HMOVR7,#2
SJMP$MOVTL0,#1CHCPLP1.1TIMER0:
MOVTH0,#0B1HCPLP1.0EXIT:
SJMPLP1
MOVTL0,#1CH
SJMPCHECKEND
CPLP1.0
TIMER1:
MOVTH1,#63H
RETIMOVTL1,#18HTIMER1:
MOVTH1,#63H
CPLP1.1MOVTL1,#18H
SJMPCHECKCPLP1.1
RETIEND
END
的矩形波,晶振频率为、占空比为7:
10输出脉冲宽度调制(PWM)信号,即脉冲频率为2KHz8.P1.012MHz。
,,高电平的软件计数为7P1.1取反时,由于高、低电平的时间不同,可选时间基准为0.05ms解:
对X=256-50/1=CEH。
工作于方式2,则定时初值低电平的软件计数为3。
若采用定时器11(中断方式);参考程序)
2(查询方式;参考程序0000H
ORG0000HORGMAIN
LJMPP1.0SETBMAIN:
001BH
ORGR7,#7MOVTIMER1
LJMPTMOD,#20HMOVP1.0
SETBMAIN:
TH1,#0CEHMOVR7,#7
MOVTL1,#0CEHMOVTMOD,#20H
MOVTR1SETBTH1,#0CEH
MOVTF1,LP2TIMER1:
JBCTL1,#0CEH
MOVTIMER1SJMPEA
SETBR7,TIMER1DJNZLP2:
ET1
SETBP1.0CPLTR1
SETBP1.0,L1JNB$
SJMPR7,#7MOVR7,EXIT
TIMER1:
DJNZTIMER1SJMPP1.0
CPLR7,#3MOVL1:
P1.0,L1
JNBTIMER1SJMPR7,#7
MOVENDEXIT
SJMPR7,#3
MOVL1:
RETIEXIT:
END
)工作于方式13参考程序(查询方式,T1;0000H
ORG
P1.0SETBMAIN:
R7,#7MOV
TMOD,#10HMOV
TH1,#0FFHMOV
TL1,#0CEHMOV
TR1SETB
TF1,LP2JBCTIMER1:
TIMER1SJMP
TH1,#0FFHMOVLP2:
TL1,#0CEH
MOV
R7,TIMER1
DJNZ
P1.0CPL
P1.0,L1JNB
R7,#7MOV
TIMER1SJMP
R7,#3L1:
MOV
TIMER1SJMP
END
、0.5kHz分别输出频率P1.0使种不同的组合逻辑状态,4在开关信号,P3.1、P3.0两只开关分别接入9.
1kHz、2kHz、4kHz的方波,晶振频率为12MHz。
解:
仍有多种设计方案。
其中一种为:
输出方波频率P3.1P3.0P1.0、2kHz、1kHz、要求P1.0分别输出频率0.5kHz000.5KHz
4kHz的方波,需要的定时时间分别为:
011kHz
。
可设计一个、0.125ms1ms、0.5ms、0.25ms102kHz
的定时器,作为基准时间,再加上软0.125ms1
14kHz工作T0、2、1即可。
设定时器件计数器8、4,查询方式工作,参考程序如下。
于方式11
参考程序;;参考程序20000H
ORGORG0000HP1.0
MAIN:
SETBMAIN:
SETBP1.0P3.1,NEXT
CHECK:
JBCHECK:
MOVP3,#0FFHP3.0,KHZ_1
JBMOVA,P3HZ_500
SJMPANLA,#03HP3.0,KHZ_2
NEXT:
JNBTEST0:
CJNEA,#00H,TEST1KHZ_4
SJMPSJMPHZ_500R7,#8
HZ_500:
MOVTEST1:
CJNEA,#01H,TEST2Y
SJMPTO_DLSJMPKHZ_1R7,#4
KHZ_1:
MOVTEST2:
CJNEA,#02H,TEST3Y
SJMPTO_DLSJMPKHZ_2R7,#2
KHZ_2:
MOVTEST3:
SJMPKHZ_4Y
SJMPTO_DLHZ_500:
MOVR7,#8R7,#1
KHZ_4:
MOVSJMPTO_DLYDELAY
TO_DELAY:
ACALLKHZ_1:
MOVR7,#4P1.0
CPLSJMPTO_DLYCHECK
SJMPKHZ_2:
MOVR7,#2TMOD,#01H
DELAY:
MOVSJMPTO_DLYTH0,#0FFH
MOVKHZ_4:
MOVR7,#1TL0,#83H
MOVTO_DELAY:
ACALLDELAYTR0
SETBCPLP1.0TF0,LP1
LP:
JBCSJMPCHECKLP
SJMPDELAY:
MOVTMOD,#01HR7,LP2
LP1:
DJNZMOVTH0,#0FFHEXIT
SJMPMOVTL0,#83HTH0,#0FFH
MOVLP2:
SETBTR0TL0,#83H
MOVLP:
JBCTF0,LP1LP
SJMPSJMPLPRETEXIT:
LP1:
DJNZR7,LP2ENDSJMPEXITLP2:
MOVTH0,#0FFHMOVTL0,#83HSJMPLPEXIT:
RETEND3
;参考程序0000H
ORG
P1.0
SETBAIN:
M
CHECK:
JBP3.1,NEXT
JBP3.0,KHZ_1
SJMPHZ_500
NEXT:
JNBP3.0,KHZ_2
SJMPKHZ_4
HZ_500:
MOVR7,#8
D1:
ACALLDELAY
DJNZR7,D1
CPLP1.0
SJMPCHECK
KHZ_1:
MOVR7,#4
D2:
ACALLDELAY
DJNZR7,D2
CPLP1.0
SJMPCHECK
KHZ_2:
MOVR7,#2
D3:
ACALLDELAY
DJNZR7,D3
CPLP1.0
SJMPCHECK
KHZ_4:
MOVR7,#1
D4:
ACALLDELAY
DJNZR7,D4
CPLP1.0
SJMPCHECK
DELAY:
MOVTMOD,#01H
MOVTH0,#0FFH
MOVTL0,#83H
SETBTR0
LP1:
JBCTF0,LP2
SJMPLP1
LP2:
MOVTH0,#0FFH
MOVTL0,#83H
EXIT:
RET
END