单片机原理及应用课后习题答案 联系客服

发布时间 : 星期一 文章单片机原理及应用课后习题答案更新完毕开始阅读

DEC R0 ;R0=1FH

XCHD A,@R0 ;(A)=8FH,(20H)=0A5H,P=1

10. 写出完成如下要求的指令,但是不能改变未涉及位的内容。 (1)把ACC.3, ACC.4,ACC.5和 ACC.6置“1”。 ORL A,#01111000B

(2)把累加器A的中间4位清“0”。 ANL A,#11000011B

(3)将内部数据存储器10H单元中的数据的高2位,低3位清“0”。 ANL 10H,#00111000B

(4)将内部数据存储器50H单元中的数据所有位取反。 XRL 50H,#11111111B

(5)将内部数据存储器40H单元中的数据高4位取反。 XRL 40H,#11110000B

(6)将内部数据存储器10H单元中的数据低3位置“1”。 ORL 10H,#00000111B

11.分析执行下列指令序列所实现的逻辑运算式

MOV C,P1.0

ANL C,/P1.1 MOV 20H, C MOV C,/P1.0

ANL C, P1.1

ORL C, 20H MOV P3.0,C

P3.0=(P1.0∧/P1.1)∨(/P1.0∧P1.1)

思考题与习题4

一、简答题

1.什么是汇编语言源程序、汇编、汇编程序?

(1)使用汇编语言编写的程序称为汇编语言源程序。

(2)汇编语言程序不能直接在计算机上运行,需要将它翻译成机器语言程序,也就是目标代码程序,这个翻译过程称为汇编。 (3)完成汇编任务的程序成为汇编程序。 2.什么叫伪指令,有什么作用?

所谓伪指令是 告诉汇编程序应该如何完成汇编工作,只有在汇编前的源程序中才有伪指令,而在汇编后没有机器代码产生。

伪指令具有控制汇编程序的输入输出、定义数据和符号、条件汇编、分配存储空间等功能。

二、编程题

1. 在外部RAM3000H单元中有一个8位二进制数,试编程将该数的低四位屏蔽掉,并送给外部RAM3001H单元中。 MOV DPTR,#3000H MOVX A,@DPTR ANL A,#0F0H INC DPTR MOVX @DPTR,A 2. 已知fOSC?12MHz,试编写延时20ms和1s的程序

DELAY20MS: MOV R6,#100 ;延时20ms

D1: MOV R7,#98 nop

D2: DJNZ R7,D2

DJNZ R6,D1 RET END DELAY1S: MOV R7,#250 DEL1: MOV R6,#200 DEL2: MOV R5,#98 DEL3: DJNZ R5,DEL3

NOP

DJNZ R6,DEL2 DJNZ R7,DEL1 RET END

3. 用查表的方法求0~6之间的整数的立方。已知整数存在内部RAM30H单元中,查表结果回存30H单元。 MOV DPTR,#tab MOV A,30H

MOVC A,@A+DPTR

MOV 30H,A Ret ORG 1000H

TAB: DB 00H,01H,08H,1BH,40H,7DH,0D8H

4. 若有3个无符号数x、y、z分别在内部存储器40H、41H、42H单元中,试编写一个程序,实现x≥ y时,x+z的结果存放在43H、44H单元中;当x<y时,y+z的结果存放入43H、44H单元中。 MOV A,40H CLR C

SUBB A,41H ;相减比较大小 JC L1

MOV A,40H ;x>=y SJMP L2

L1:MOV A,41H ;x

MOV A,#0 ;保存进位到44H单元 ADDC A,#0 MOV 44H,A

5. 在内部RAM的BLOCK开始的单元中有一无符号数据块,数据块长度存人LEN单元。试编程求其中的最小的数并存入MINI单元。 MOV R2, #11H ;要比较的数据字节数 MOV R1 , #BLOCK;置数据块的首地址 DEC LEN MOV A , @R1

LOOP: MOV MINI,A INC R1 CLR C SUBB A,@R1 ;两个数比较 JC LOOP1 ;C=1,A中的数小,跳转到LOOP1 MOV A,@R1 ;C=1,则把小数送给A SJMP LOOP2

LOOP1: MOV A,MINI

LOOP2: DJNZ R2, LOOP ;比较是否结束 MOV 50H,A ;把大数存入50H单元 RET

6. 在外部RAM3000H起始的单元中存放一组有符号数,字节个数存在内部RAM20H单元中。统计其中大于0、等于0和小于0的数的数目,并把统计结果存放在内部RAM21H、22H和23H单元中。

MOV DPTR,#3000H ;设置首地址 MOV 22H,#0 ;清零

MOV 23H,#0 MOV 24H,#0

L2:MOVX A,@DPTR;取数据

JNZ L1

INC 22H ;为0 SJMP NEXT L1:JB ACC.7,FU

INC 21H ;正数 SJMP NEXT FU:INC 23H ;负数 NEXT:INC DPTR

DJNZ 20H,L2 RET

7. 查找内部RAM20H~40H单元中是否有0FFH这一数据,如果有,将PSW中的F0位置1,没有则将其清零。 MOV R0,#20H MOV R1,#21H CLR F0

NEXT:MOV A,@R0 CJNE A,#0FFH,L1 SETB F0 SJMP L2 L1:INC R0 DJNZ R1,NEXT L2:RET

8. 在片内RAM的30H单元开始,相继存放5个无符号数,请使用冒泡法编写程序,使这组数据按照从小到大顺序排列。

MAIN: MOV R0,#30H ;数据存储区首单元地址 MOV R7.#04H ;各次冒泡比较次数 CLR F0 ;互换标志清“0” LOOP: MOV A,@R0 ;取前数 MOV R2,A ;存前数 INC R0

MOV A,@R0 ;取后数 CLR C

SUBB A,R2 ;比较大小 JNC LOOP1

SETB F0 ;互换,置标志位 MOV A,R2 ;互换数据 XCH A,@R0 DEC R0 XCH A,@R0 INC R0

LOOP1: MOV A,@R0