单片机课后习题答案 联系客服

发布时间 : 星期三 文章单片机课后习题答案更新完毕开始阅读d1836bd9876fb84ae45c3b3567ec102de3bddf94

PC是不可以访问的,有自己独特的变化方式,它的变化轨迹决定了程序执行的流程; DPTR是可以访问的,如MOV DPTR,#XXXXH,INC DPTP。23. 89C51端口锁存器的“读—修改—写”操作与“读引脚”操作有何区别?答:指令系统中有些指令读锁存器的值,有些指令则读引脚上的值。读锁存器指令是从锁存器中读取一个值并进行处理,把处理后的值(原值或已修改后的值)重新写入锁存器中。这类指令称为读-修改-写指令。 对于读-修改-写指令。直接读锁存器而不是读端口引脚, 是因为从引脚上读出的数据不一定能真正反映锁存器的状态。 单片机原理及接口技术课后习题答案第三章1、

指令:CPU根据人的意图来执行某种操作的命令指令系统:一台计算机所能执行的全部指令集合机器语言:用二进制编码表示,计算机能直接识别和执行的语言

汇编语言:用助记符、符号和数字来表示指令的程序语言

高级语言:独立于机器的,在编程时不需要对机器结构及其指令系统有深入了解的通用性语言

3、 操作码 [目的操作数] [,源操作数]

5、SFR:直接寻址,位寻址,寄存器寻址;片外RAM:寄存器间接寻址

6、 MOV A,40H ;直接寻址(40H)→A MOV R0,A;寄存器寻址(A)→R0 MOV P1,#0F0H ;立即数寻址0F0→P1 MOV @R0,30H;直接寻址(30H) →(R0) MOV DPTR,#3848H;立即数寻址 3848H→DPTR MOV 40H,38H;直接寻址 (38H) →40H MOV R0,30H;直接寻址 (30H) →R0 MOV P0,R0;寄存器寻址( R0 )→P0 MOV 18H,#30H ;立即数寻址30H→18H MOV A,@R0 ;寄存器间接寻址 ((R0)) →A MOV P2,P1 ;直接寻址 (P1)→P2最后结果:(R0)=38H,(A)=40H,(P0)=38H,(P1)=(P2)=0F0H,(DPTR)=3848H,(18H)=30H,(30H)=38H,(38H)=40H,(40H )=40H,(48H)=38H 注意:→左边是内容,右边是单元7、 用直接寻址,位寻址,寄存器寻址8、 MOV A,DATA;直接寻址2字节1周期MOV A,#DATA;立即数寻址2字节1周期 MOV DATA1,DATA2;直接寻址3字节2周期

MOV 74H,#78H;立即数寻址3字节2周期如果想查某一指令的机器码,字节数或周期数可查阅书本后面的附录A

9MOVA,@R0;((R0))=80H→AMOV@R0,40H;(40H)=08H→(R0)MOV40H,A;(A)=80→40HMOVR0,#35H;35H→R0最后结果:(R0)=35H (A)=80H,(32H)=08H,(40H)=80H 10、用直接寻址,位寻址,寄存器寻址

11、只能采用寄存器间接寻址(用MOVX指令)

12、低128字节:直接寻址,位寻址,寄存器间接寻址,寄存器寻址(R0~R7)高128字节:直接寻址,位寻址,寄存器寻址 13、采用变址寻址(用MOVC指令)

14、压缩BCD码在进行加法运算时应逢十进一,而计算机只将其当作十六进制数处理,此时得到的结果不正确。用DA A指令调整(加06H,60H,66H) 15、用来进行位操作

16、ANL A,#17H ;83H∧17H=03H→A

ORL 17H,A ;34H∨03H=37H→17HXRL A,@R0 ;03H⊕37H=34HCPL A ;

34H求反等于CBH所以(A)=CBH 17、(1)SETB ACC.0或SETB E0H;E0H是累加器的地址

(2)CLR ACC.7 CLR ACC.6 CLR ACC.5 CLR ACC.4(3)CLR ACC.6 CLR ACC.5 CLR ACC.4 CLR ACC.3

18、MOV 27H,R7MOV 26H,R6MOV 25H,R5MOV 24H,R4MOV 23H,R3MOV 22H,R2MOV 21H,R1MOV 20H,R0 19、MOV 2FH,20

MOV 2EH,21 MOV 2DH,22

20、CLR CMOV A,#5DH ;被减数的低8位→AMOV R2,#B4H ;减数低8位→R2SUBB A,R2 ;被减数减去减数,差→A

MOV 30H,A ;低8位结果→30HMOV A,#6FH ;被减数的高8位→A MOV R2,#13H ;减数高8位→R2SUBB A,R2 ;被减数减去减数,差→AMOV 31H,A ;高8位结果→30H注意:如果在你的程序中用到了进位位,在程序 开始的时候要记得清0进位位21、(1)A≥10CJNE A,#0AH,L1;(A)与10比较,不等转L1LJMP LABEL ;相等转LABELL1:JNC LABEL ;(A)大于10,转LABEL或者:CLR C SUBB A,#0AHJNC LABEL

(2)A>10CJNE A,#0AH,L1;(A)与10比较,不等转L1RET ;相等结束L1:JNC LABEL ;(A)大于10,转LABEL RET ;(A)小于10,结束或者:CLR CSUBB A,#0AHJNC L1RETL1RET;数据块长度减1,不等于0,继续查找(3)A≤10 RETCJNE A,#0AH,L1 27、 MOV DPTR,#SOURCE ;(A)与10比较,不等转L1;源首地址→DPTRL2:LJMP LABEL ;相等转LABEL MOV R0,#DIST L1:JC L2 ;(A)小于10,转L2;目的首地址→R0RET LOOP:MOVX A,@DPTR 或者:;传送一个字符CLR C MOV @R0,ASUBB A,#0AH INC DPTR JC LABEL

JZ LABELRET22、(SP)=23H,(PC)=3412H 23、(SP)=27H,(26H)=48H,(27H)=23H,(PC)=3456H参看书上79页 24、不能。ACALL是短转指令,可调用的地址范围是2KB。在看这个题的时候同时看一下AJMP指令。同时考虑调用指令ACALL和LCALL指令和RET指令的关系。

25、 MOV R2,#31H ;数据块长度→R2 MOV R0,#20H ;数据块首地址→R0LOOP:MOV A,@R0 ;待查找的数据→A CLR C ;清进位位

SUBB A,#0AAH ;待查找的数据是0AAH吗 JZ L1 ;是,转L1 INC R0 ;不是,地址增1,指向下一个待查数据 DJNZ R2,LOOP ;数据块长度减1,不等于0,继续查找 MOV 51H,#00H ;等于0,未找到,00H→51H RET L1:MOV 51H,#01H ;找到,01H→51H RET

26、 MOV R2,#31H ;数据块长度→R2 MOV R0,#20H ;数据块首地址→R0LOOP:MOV A,@R0 ;待查找的数据→A JNZ L1 ;不为0,转L1 INC 51H ;为0,00H个数增1 L1:INC R0 ;地址增1,指向下一个待查数据 DJNZ R2,LOOP ;指向下一个字符 INC R0 CJNE A,#24H,LOOP

;传送的是“$”字符吗?不是,传送下一个字符 RET28、 MOV A,R3 ;取该数高8位→A ANL A,#80H ;取出该数符号判断 JZ L1 ;是正数,转L1 MOV A,R4 ;是负数,将该数低8位→A CPL A ;低8位取反 ADD A,#01H ;加

1

MOV R4,A ;低8位取反加1后→R4 MOV A,R3 ;将该数高8位→A CPL A ;高8位取反 ADDC A,#00H;加上低8位加1时可能产生的进位 MOV R3,A ;高8位取反加1后→R3 L1: RET29、 CLR C ;清进位位C MOV A,31H ;取该数低8位→A RLC A ;带进位位左移1位 MOV 31H,A ;结果存回31H MOV A,30H ;取该数高8位→A RLC A ;带进位位左移1位

MOV 30H,A ;结果存回30H30、 MOV R2,#04H ;字节长度→R2 MOV R0,#30H

;一个加数首地址→R0 MOV R1,#40H ;另一个加数首地址→R1 CLR C ;清进位位LOOP:MOV A,@R0 ;取一个加数 ADDC A,@R1 ;两个加数带进位位相加 DA A ;十进制调整 MOV @R0,A ;存放结果 INC R0;指向下一个字节MOV A,@R0 ;98H→A INC R1 ; INC R0 ;41H→R0 DJNZ R2,LOOP ADD A,@R0 ;98H+(41H)=47H→A INC R0 ;数据块长度减1,不等于0,继续查找

RETMOV @R0,A ;结果存入42H单元31、 MOV R2,#08H ;数据块长度→R2CLR A ;清A MOV R0,#30H ADDC A,#0 ;进位位存入A INC R0 ;数据块目的地址→R0

MOV DPTR,#2000H MOV @R0,A ;进位位存入43H ;数据块源地址→DPTR

LOOP:MOVX A,@ DPTR ;传送一个数据 MOV @R0,A

INC DPTR;指向下一个数据 INC R0 ; DJNZ R2,LOOP ;数据块长度减1,没传送完,继续传送 RET32、(1)MOV R0,0FH ;2字节,2周期 4字节4周期(差) MOV B,R0 ;2字节,2周期 (2)MOV R0,#0FH ;2字节,1周期 4字节3周期(中) MOV B,@R0 ;2字节,2周期 (3)MOV B,#0FH ;3字节,2周期 3字节2周期(好)33、(1)功能是将片内RAM中50H~51H单元清0。 (2)7A0A

(大家可以看一下书上,对于立即数寻址的话,

后面一个字节存放的是立即数) 7850 (第一个字节的后三位是寄存器,前一个条指令

是010也就是指的R2,在这里是R0,所以应该是7

8,后一个字节存放的是立即数) DAFC (这里涉及到偏移量的计算,可以 34、 INC @R0 ;(7EH)=00H INC R0 ;(R0)=7FH INC @R0 ;(7FH)=39H INC DPTR ;(DPTR)=10FFH INC DPTR ;(DPTR)=1100H INC DPTR ;(DPTR)=1101H35、解:(1000H)=53H (1001H)=54H (1002H)=41H (1003H)=52H (1004H)=54H (1005H)=12H (1006H)=34H (1007H)=30H

(1008H)=00H (1009H)=70H

36、MOV R0,#40H ;40H→R0

功能:将40H,41H单元中的内容相加结果放在42H单元,进位放在43H单元,(R0)=43H,(A)=1,(40H)=98H,(41H)=AFH,(42H)=47H,(43H)=01H37、 MOV A,61H ;F2H→A MOV B,#02H ;02H→B MUL AB ;

F2H×O2H=E4H→A ADD A,62H;积的低8位加上CCH→A MOV 63H,A ;结果送62H CLR A ;清A ADDC A,B;积的高8位加进位位→A MOV 64H,A ;结果送64H功能:将61H单元的内容乘2,低8位再加上62H单元的内容放入63H,将结果的高8位放在64H单元 。(A)=02H,(B)=01H,(61H)=F2H,(62H)=CCH,(63H)=B0H,(64H)=02H39、MOV A,XXHORL A,#80H MOV XXH,A40、(2)MOV A,XXH MOV R0,A XRL A,R0第五章1、什么是中断和中断系统?其主要功能是什么?答:当CPU正在处理某件事情的时候,外部发生的某一件事件请求CPU迅速去处理,于是,CPU暂

时中止当前的工作,转去处理所发生的事件,中断服务处理完该事件以后,再回到原来被终止的地方,继续原来的工作。这种过程称为中断,实现这种功能的部件称为中断系统。功能:(1) 使计算机具有实时处理能力,能对外界异步发生

的事件作出及时的处理(2) 完全消除了CPU在查询方式中的等待现象,大大提高了CPU的工作效率 7/18页

(3) 实现实时控制

2、试编写一段对中断系统初始化的程序,使之允许INT0,INT1,TO,串行口中断,且使T0中断为高优先级中断。解:MOV IE,#097H MOV IP,#02H 3、在单片机中,中断能实现哪些功能?

答:有三种功能:分时操作,实时处理,故障处理

4、89C51共有哪些中断源?对其中端请求如何进行控制? 答:(1)89C51有如下中断源① :外部中断0请求,低电平有效② :外部中断1请求,低电平有效③T0:定时器、计数器0溢出中断请求④T1:定时器、计数器1溢出中断请求⑤TX/RX:串行接口中断请求

(2)通过对特殊功能寄存器TCON、SCON、IE、IP的各位进行置位或复位等操作,可实现各种中断控制功能

5、什么是中断优先级?中断优先处理的原则是什么? 答:中断优先级是CPU相应中断的先后顺序。原则:(1) 先响应优先级高的中断请求,再响应优先级低的(2)

如果一个中断请求已经被响应,同级的其它中断请求将被禁止(3)

如果同级的多个请求同时出现,则CPU通过内部硬件查询电路,按查询顺序确定应该响应哪个中断请求

查询顺序:外部中断0→定时器0中断→外部中断1→定时器1中断→串行接口中断

6、说明外部中断请求的查询和响应过程。

答:当CPU执行主程序第K条指令,外设向CPU发出中断请求,CPU接到中断请求信号并在本条指令执行完后,中断主程序的执行并保存断点地址,然后转去响应中断。CPU在每个S5P2期间顺序采样每个中断源,CPU在下一个机器周期S6期间按优先级顺序查询中断标志,如果查询到某个中断标志为1,将在接下来的机器周期S1期间按优先级进行中断处理,中断系统通过硬件自动将相应的中断矢量地址装入PC,以便进入相应的中断服务程序。中断服务完毕后,CPU返回到主程序第K+1条指令继续执行。