AT89C51学习以及练习详解 联系客服

发布时间 : 星期一 文章AT89C51学习以及练习详解更新完毕开始阅读d6619d46be1e650e52ea996f

http://www.soufiles.com soufiles资源搜索 面的16个单元(20H~2FH)构成固定的可位寻址存储区;用户RAM区(30H~7FH),可作为数据缓冲区,用于存放各种数据和中间结果,同时没有使用的工作寄存器单元和可位寻址单元都可作为数据缓冲区,同时该区也可作为堆栈区,栈底可以根据片内数据存储器的使用情况由指令设定。

11. AT89C851单片机有多少专用寄存器?分布在何地址范围?若对片内84H读/写将会产生什么结果?(提示:考虑84H为位地址、为字节地址两种情况) 答:AT89C51单片机有21个专用寄存器,零散分布在内部RAM的高128单元(80H~FFH)。 84H位地址为P0.4位,对其进行读写就是对P0口的第五位进行读写;而84H为字节地址时因为该单片机本身未对84H定义专用寄存器,因此不能对84H字节地址进行读写。

12. 分别说明程序计数器PC和堆栈指针SP的作用?复位后PC和SP中值各为何?在程序设计时,有时为什么要对SP赋值?

答: 程序计数器PC时一个16位的计数器,其内容为将要执行的指令的首地址,寻址范围达64KB,PC具有自动加1功能,以实现程序的顺序执行。PC不可寻址,无法对它进行读写。堆栈指针SP的内容就是堆栈栈顶的存储单元地址,向堆栈中每存一个数,SP中的值就自动加1,每取一个数就自动减1,SP始终指在栈顶地址。

复位后,PC=0000H,使单片机从0000H单元开始执行,SP=07H,这样堆栈就要从08H开始,而08H属于工作寄存器区,若程序要用到这些寄存器组则要将SP设置大些,因此堆栈最好在内部的RAM(30H~7FH)中开辟。

13. 开机复位后,CPU作用的是哪组工作寄存器?它们的地址是什么?CPU如何确定和改变当前工作寄存器?

答:开机复位后,CPU作用的时第0组工作寄存器,它们的地址是内部RAM的00H~07H,CPU若要确定当前工作寄存器,则读出专用寄存器PSW的RS1和RS0内容;若要改变当前工作寄存器,则需要修改PSW的RS1和RS0的内容。

14. 位地址3EH和字节地址3EH有何区别?位地址3EH具体在片内RAM中什么位? 答:字节地址3EH是内RAM低128字节中的一个字节存储单元。而位地址是针对可位寻址区域而言的,位寻址区占用了字节地址的20H~2FH共16个字节,字节地址20H中的20H.0~20H.7位地址是00H~08H,因此位地址3EH是字节地址27H中的第7位。

4

http://www.soufiles.com soufiles资源搜索 第三章 AT89C51指令系统

1. 简述下列基本概念:指令,指令系统,机器语言,汇编语言。 答:指令是单片机CPU执行某种操作的命令。

指令系统是一台计算机所能执行的指令集合。

机器语言即二进制代码语言,是计算机可以直接识别。

汇编语言是用助记符、字符串和数字等来表示指令的程序语。

2. 简述AT89S51单片机的指令格式 答:该单片机的指令由两部分组成,即操作码和操作数。操作码用来规定指令进行什么操作,而操作数则是指令操作的对象,操作数可能是一个具体的数据,也可能是指出到哪里取得数据的地址或符号。指令格式一般为:

[ 标号:] 操作码 [操作数1][,操作数2][,操作数3] [;注释]

3. 简述AT89S51的寻址方式和所能涉及的寻址空间 答:共有7种寻址方式,见表3-2。

表3-2 寻址方式及相应的寻址存储器范围 寻 址 方 式 立即寻址 直接寻址 寄存器寻址 寄存器间接寻址 变址寻址 相对寻址 位寻址 程序存储器ROM 片内RAM低128B,特殊功能寄存器 工作寄存器R0~R7,A, C, DPTR,AB 片内RAM低128B,片外RAM 程序存储器ROM(@A+DPTR,@A+PC) 程序存储器ROM (相对寻址指令的下一指令PC值加-128~+127) 片内RAM的20H~2FH字节地址中所有的位,可位寻址的特殊功能寄存器 寻 址 存 储 器 范 围 分别是:(1)寄存器寻址:寻址范围为通用寄存器组,共4组32个,但只能使用当前寄存器组,因此使用前需要通过对PSW种的RS1、RS0位的状态进行设置;(2)直接寻址:寻址范围为内部RAM,包括低128位用户RAM区和高128位专用寄存器;(3)寄存器间接寻址:寻址范围为内部RAM低128位,外部RAM 64KB(低256单元可以使用DPTR和R0、R1作为间接寻址寄存器,而其他单元只能用DPTR作为间接寻址寄存器);(4)立即寻址:直接给出立即数,不涉及寻址空间;(5)变址寻址:只对程序寄存器进行寻址;(6)相对寻址:以PC的内容为基值,加上指令机器代码中‘相对地址’形成新的PC值转移;(7)位寻址:寻址空间包括内部RAM位寻址区(20~2FH)和专用寄存器的可寻址位。

4. 要访问片外程序存储器和片外数据存储器,应采用哪些寻址方式?

答:访问片外程序存储器采用变址寻址方式,片外数据存储器采用寄存器间接寻址方式,且用DPTR可以访问64KB,而用R0或者R1只可访问低256字节。

5. 在AT89S51片内RAM中,已知(30H)=38H,(38H)=40H,(40H)=48H,(48H)=90H。请分析下面各是什么指令,说明源操作数的寻址方式及按顺序执行每条指令后的结果。 答:

5

http://www.soufiles.com soufiles资源搜索 指令 MOV A, 40H 指令说明 将内部RAM中40H内容传送到累加器A中 (A)← (40H) 再将A中内容传送给R0 (R0)← (A) 源操作数寻址方式 结果 直接寻址 (A)=48H MOV R0, A MOV #0F0H 寄存器寻址 立即数寻址 (R0)=48H (P1)=0F0H P1, 将立即数0F0H送到P1口,即P1.4~P1.7位1,其余为0 (P1) ← 0F0H MOV @R0, 将30H中的内容,传放到30H 以R0单元内容为地址的单元中 ((R0)) ← (30H) MOV DPTR, 将立即数3848传送给#3848H DPTR数据指针 (dptr) ← 3848H MOV 38H MOV 30H 40H, 将内部RAM中38H内容传送到40H单元中 (40H) ← (38H) R0, 将30H中的内容给R0寄存器 (R0) ← (30H) 将R0的内容传送到P0 (P0) ← (R0) 直接寻址 ((R0))=(48H)=38H 立即数寻址 (DPTR)=3848H 直接寻址 (40H)=40H 直接寻址 (R0)=38H MOV P0, R0 寄存器寻址 寄存器间接寻址 (P0)=38H (A)=40H MOV A, @R0 将R0内容为地址的该单元内容传送给A (A)←((R0)) MOV P2, P1 将P1的内容传送给P2 (P2) ← (P1) 直接寻址 (P2)=0F0H

6. 指出下列指令的源操作数的寻址方式 MOV A, 65H 直接寻址 MOV A, #65H 立即数寻址 MOV A, @R0 寄存器间接寻址 MOV A, R2 寄存器寻址 MOVC A, @A+PC 变址寻址

7. 内部RAM和特殊功能寄存器各用什么寻址方式?

答:内部RAM有寄存器寻址方式、直接寻址方式和间接寻址方式; 特殊功能寄存器除A外只能进行直接寻址。

8. 已知:(A)=5BH,(R1)=30H,(30H)=0CEH,(P1)=71H,(PSW)=80H,(PC)=2000H,(205CH)=46H,(SP)=30H,(B)=78H。分别求各条指令执行后的结果(要求进行二进

6

http://www.soufiles.com soufiles资源搜索 制运算验证)及标志位Cy、P的影响。

(1)MOV A, @R1 (A)=0CEH P=1, C不变 (2)MOV 40H, 30H (40H)=0CEH P和C不变 (3)MOV P1, R1 (P1)=30H P和C不变 (4)MOVC A, @A+PC (A)=46H P=1, C不变

(5)PUSH B (31H)=78H,(SP)=31H P和C不变 (6)POP DPH (DPH)=0CEH,(SP)=29H P和C不变 (7)XCHD A, @R1 (A)=05EH,(30H)=CBH P=1, C不变 (8)ADD A, 30H (A)=29H P=1, C=1 (9)ADDC A, P1 (A)=CDH P=1, C=0 (10)SUBB A, P1 (A)=E9H P=1, C=1 (11)ANL P1, #0FH (P1)=01H P和C不变 (12)CLR PSW.7 C=0

(13)RLC A (A)=B7H P=0, C=0 (14)ORL C, 90H C=1, P不变

9. 对下面一段程序加上机器码和注释,并说明程序运行后寄存器A、R0和内部RAM 50H、51H、52H单元的内容。

MOV 50H,#50H 75 50 50 ;(50H)←50H MOV A,50H E5 50 ;(A)←(50H) MOV R0,A F8 ;(R0)←(A)

MOV A,#30H 74 30 ;(A)←30H MOV @R0,A F6 ;((R0))←(A) MOV A,#50H 74 50 ;(A)←50H MOV 51H,A F5 51 ;(51H)←(A) MOV 52H,#00H 75 52 00 ;(52H)←00H 答:运行后寄存器(A)=50H,(R0)=50H,(50H)=30H,(51)=50H,(52H)=00H

10. 区别下列各指令中20H的含义,在每条指令后加上注释。

MOV A , #20H 将20H立即数传送给A

MOV 45H, 20H 将内部RAM中20H单元的内容传送到45H中

MOV C, 20H.0 将内部RAM中20H单元内容的第0位(最低位)传送给C MOV C, 20H 将内部RAM中20H位地址内容传送给C

11. 写出完成以下功能的指令 (1) 将立即数30H送到R1;

(2) 将内RAM30H中的数据送到内RAM78H单元;

(3) 将立即数30H送到 以R0中内容为地址的存储器中; (4) 将R2中的内容送到 P1;

(5) 将内RAM60H单元的数据送到 外RAM60H单元;

(6) 将内RAM60H单元的数据送到外RAM1060H单元; (7) 将ROM1000H单元的内容送到内RAM30H单元; (8) 使ACC.7置位;

7