第三章单片机原理及接口技术课后习题答案_第三五章__李朝青

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第三章6、MOVA,40H;直接寻址(40H)→AMOVR0,A;寄存器寻址(A)→R0MOVP1,#0F0H;立即数寻址0F0→P1MOV@R0,30H;直接寻址(30H)→(R0)MOVDPTR,#3848H;立即数寻址3848H→DPTRMOV40H,38H;直接寻址(38H)→40HMOVR0,30H;直接寻址(30H)→R0MOVP0,R0;寄存器寻址(R0)→P0MOV18H,#30H;立即数寻址30H→18HMOVA,@R0;寄存器间接寻址((R0))→AMOVP2,P1;直接寻址(P1)→P2最后结果:(R0)=38H,(A)=40H,(P0)=38H,(P1)=(P2)=0F0H,(DPTR)=3848H,(18H)=30H,(30H)=38H,(38H)=40H,(40H)=40H,(48H)=38H注意:→左边是内容,右边是单元8、MOVA,DATA;直接寻址2字节1周期MOVA,#DATA;立即数寻址2字节1周期MOVDATA1,DATA2;直接寻址3字节2周期MOV74H,#78H;立即数寻址3字节2周期如果想查某一指令的机器码,字节数或周期数可查阅书本后面的附录A9、MOVA,@R0;((R0))=80H→AMOV@R0,40H;(40H)=08H→(R0)MOV40H,A;(A)=80→40HMOVR0,#35H;35H→R0最后结果:(R0)=35H(A)=80H,(32H)=08H,(40H)=80H16、ANLA,#17H;83H∧17H=03H→AORL17H,A;34H∨03H=37H→17HXRLA,@R0;03H⊕37H=34HCPLA;34H求反等于CBH所以(A)=CBH17、(1)SETBACC.0或SETBE0H;E0H是累加器的地址(2)CLRACC.7CLRACC.6CLRACC.5CLRACC.4(3)CLRACC.6CLRACC.5CLRACC.4CLRACC.318、MOV27H,R7MOV26H,R6MOV25H,R5MOV24H,R4MOV23H,R3MOV22H,R2MOV21H,R1MOV20H,R019、MOV2FH,20MOV2EH,21MOV2DH,2220、CLRCMOVA,#5DH;被减数的低8位→AMOVR2,#B4H;减数低8位→R2SUBBA,R2;被减数减去减数,差→AMOV30H,A;低8位结果→30HMOVA,#6FH;被减数的高8位→AMOVR2,#13H;减数高8位→R2SUBBA,R2;被减数减去减数,差→AMOV31H,A;高8位结果→30H注意:如果在你的程序中用到了进位位,在程序开始的时候要记得清0进位位21、(1)A≥10CJNEA,#0AH,L1;(A)与10比较,不等转L1LJMPLABEL;相等转LABELL1:JNCLABEL;(A)大于10,转LABEL或者:CLRCSUBBA,#0AHJNCLABEL(2)A>10CJNEA,#0AH,L1;(A)与10比较,不等转L1RET;相等结束L1:JNCLABEL;(A)大于10,转LABELRET;(A)小于10,结束或者:CLRCSUBBA,#0AHJNCL1RETL1:JNZLABELRET(3)A≤10CJNEA,#0AH,L1;(A)与10比较,不等转L1L2:LJMPLABEL;相等转LABELL1:JCL2;(A)小于10,转L2RET或者:CLRCSUBBA,#0AHJCLABELJZLABELRET22、(SP)=23H,(PC)=3412H参看书上80页23、(SP)=27H,(26H)=48H,(27H)=23H,(PC)=3456H参看书上79页24、不能。ACALL是短转指令,可调用的地址范围是2KB。在看这个题的时候同时看一下AJMP指令。同时考虑调用指令ACALL和LCALL指令和RET指令的关系。25、MOVR2,#31H;数据块长度→R2MOVR0,#20H;数据块首地址→R0LOOP:MOVA,@R0;待查找的数据→ACLRC;清进位位SUBBA,#0AAH;待查找的数据是0AAH吗JZL1;是,转L1INCR0;不是,地址增1,指向下一个待查数据DJNZR2,LOOP;数据块长度减1,不等于0,继续查找MOV51H,#00H;等于0,未找到,00H→51HRETL1:MOV51H,#01H;找到,01H→51HRET26、MOVR2,#31H;数据块长度→R2MOVR0,#20H;数据块首地址→R0LOOP:MOVA,@R0;待查找的数据→AJNZL1;不为0,转L1INC51H;为0,00H个数增1L1:INCR0;地址增1,指向下一个待查数据DJNZR2,LOOP;数据块长度减1,不等于0,继续查找RET27、MOVDPTR,#SOURCE;源首地址→DPTRMOVR0,#DIST;目的首地址→R0LOOP:MOVXA,@DPTR;传送一个字符MOV@R0,AINCDPTR;指向下一个字符INCR0CJNEA,#24H,LOOP;传送的是“$”字符吗?不是,传送下一个字符RET28、MOVA,R3;取该数高8位→AANLA,#80H;取出该数符号判断JZL1;是正数,转L1MOVA,R4;是负数,将该数低8位→ACPLA;低8位取反ADDA,#01H;加1MOVR4,A;低8位取反加1后→R4MOVA,R3;将该数高8位→ACPLA;高8位取反ADDCA,#00H;加上低8位加1时可能产生的进位MOVR3,A;高8位取反加1后→R3L1:RET29、CLRC;清进位位CMOVA,31H;取该数低8位→ARLCA;带进位位左移1位MOV31H,A;结果存回31HMOVA,30H;取该数高8位→ARLCA;带进位位左移1位MOV30H,A;结果存回30H30、MOVR2,#04H;字节长度→R2MOVR0,#30H;一个加数首地址→R0MOVR1,#40H;另一个加数首地址→R1CLRC;清进位位LOOP:MOVA,@R0;取一个加数ADDCA,@R1;两个加数带进位位相加DAA;十进制调整MOV@R0,A;存放结果INCR0;指向下一个字节INCR1;DJNZR2,LOOP;数据块长度减1,不等于0,继续查找RET31、MOVR2,#08H;数据块长度→R2MOVR0,#30H;数据块目的地址→R0MOVDPTR,#2000H;数据块源地址→DPTRLOOP:MOVXA,@DPTR;传送一个数据MOV@R0,AINCDPTR;指向下一个数据INCR0;DJNZR2,LOOP;数据块长度减1,没传送完,继续传送RET32、(1)MOVR0,0FH;2字节,2周期4字节4周期(差)MOVB,R0;2字节,2周期(2)MOVR0,#0FH;2字节,1周期4字节3周期(中)MOVB,@R0;2字节,2周期(3)MOVB,#0FH;3字节,2周期3字节2周期(好)33、(1)功能是将片内RAM中50H~51H单元清0。(2)7A0A(大家可以看一下书上,对于立即数寻址的话,后面一个字节存放的是立即数)7850(第一个字节的后三位是寄存器,前一个条指令是010也就是指的R2,在这里是R0,所以应该是78,后一个字节存放的是立即数)DAFC(这里涉及到偏移量的计算,可以参考书上56页)34、INC@R0;(7EH)=00HINCR0;(R0)=7FHINC@R0;(7FH)=39HINCDPTR;(DPTR)=10FFHINCDPTR;(DPTR)=1100HINCDPTR;(DPTR)=1101H35、解:(1000H)=53H(1001H)=54H(1002H)=41H(1003H)=52H(1004H)=54H(1005H)=12H(1006H)=34H(1007H)=30H(1008H)=00H(1009H)=70H36、MOVR0,#40H;40H→R0MOVA,@R0;98H→AINCR0;41H→R0ADDA,@R0;98H+(41H)=47H→AINCR0MOV@R0,A;结果存入42H单元CLRA;清AADDCA,#0;进位位存入AINCR0MOV@R0,A;进位位存入43H功能:将40H,41H单元中的内容相加结果放在42H单元,进位放在43H单元,(R0)=43H,(A)=1,(40H)=98H,(41H)=AFH,(42H)=47H,(43H)=01H37、MOVA,61H;F2H→AMOVB,#02H;02H→BMULAB;F2H×O2H=E4H→AADDA,62H;积的低8位加上CCH→AMOV63H,A;结果送62HCLRA;清AADDCA,B;积的高8位加进位位→AMOV64H,A;结果送64H功能:将61H单元的内容乘2,低8位再加上62H单元的内容放入63H,将结果的高8位放在64H单元。(A)=02H,(B)=01H,(61H)=F2H,(62H)=CCH,(63H)=B0H,(64H)=02H39、MOVA,XXHORLA,#80HMOVXXH,A40、(2)MOVA,XXHMOVR0,AXRLA,R0第五章2、试编写一段对中断系统初始化的程序,使之允许INT0,INT1,TO,串行口中断,且使T0中断为高优先级中断。解:MOVIE,#097HMOVIP,#02H5、什么是中断优先级?中断优先处理的原则是什么?答:中断优先级是CPU相应中断的先后顺序。原则:(1)先响应优先级高的中断请求,再响应优先级低的(2)如果一个中断请求已经被响应,同级的其它中断请求将被禁止(3)如果同级的多个请求同时出现,则CPU通过内部硬件查询电路,按查询顺序确定应该响应哪个中断请求查询顺序:外部中断0→定时器0中断→外部中断1→定时器1中断→串行接口中断13、89C51单片机有五个中断源,但只能设置两个中断优先级,因此,在中断优先级安排上受到一定的限制。试问以下几种中断优先顺序的安排(级别由高到低)是否可能:若可能,则应如何设置中断源的中断级别:否则,请简述不可能的理由。⑴定时器0,定时器1,外中断0,外中断1,串行口中断。可以,MOVIP,#0AH⑵串行口中断,外中断0,定时器0,外中断1,定时器1。可以,MOVIP,#10H⑶外中断0,定时器1,外中断1,定时器0,串行口中断。不可以,只能设置一级高级优先级,如果将INT0,T1设置为高级,而T0级别高于INT1.⑷外中断0,外中断1,串行口中断,定时器0,定时器1。可以,MOVIP,#15H⑸串行口中断,定时器0,外中断0,外中断1,定时器1。不可以⑹外中断0,外中断1,定时器0,串行口中断,定时器1。不可以⑺外中断0,定时器1,定时器0,外中断1,串行口中断。可以,MOVIP,#09H第6章习题答案2、单片机内部定时方式产生频率为100KHZ等宽矩形波,假定单片机的晶振频率为12MHZ,请编程实现。答:T0低5位:1BHT0高8位:FFHMOVTMOD,#00H;设置定时器T0工作于模式0MOVTL0,#1BH;设置5ms定时初值MOVTH0,#0FFHSETBTR0;启动T0LOOP:JBCTF0,L1;查询到定时时间到?时间到转L1SJMPLOOP;时间未到转LOOP,继续查询L1:MOVTL0,#1BH;重新置入定时初值MOVTH0,#0FFHCPLP1.0;输出取反,形成等宽矩形波SJMPLOOP;重复循环8、以定时器/计数器1进行外部时间计数,每计数1000个脉冲后,定时器/计数器1转为定时工作方式,定时10ms后又转为计数方式,如此循环不止。假定为6WHZ,用模式1编程。解:T1为定时器时初值:T1为计数器时初值:所以:L1:MOVTMOD,#50H;设置T1为计数方式且工作模式为1MOVTH1,#0FCH;置入计数初值MOVTL1,#18HSETBTR1;启动T1计数器LOOP1:JBCTF1,L2;查询计数溢出?有溢出(计数满1000个)转L2SJMPLOOP1;无溢出转LOOP1,继续查询L2:CLRTR1;关闭T1MOVTMOD,

1 / 18
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功