AT89C51学习以及练习详解.docx
《AT89C51学习以及练习详解.docx》由会员分享,可在线阅读,更多相关《AT89C51学习以及练习详解.docx(45页珍藏版)》请在冰豆网上搜索。
AT89C51学习以及练习详解
单片机原理、应用与PROTEUS仿真
习题答案
目录
第一章概论2
第二章AT89C51单片机内部结构基础3
第三章AT89C51指令系统6
第四章AT89C51汇编语言程序设计10
第五章AT89C51输入/输出(I/O)口及其简单应用16
第六章AT89C51中断系统与定时器/计数器18
第一章概论
1.什么是单片机、单片机系统、单片机应用系统?
答:
单片机:
又名微控制器,是将微型计算机中的中央处理器(CPU)、随机存储器(RAM)、只读存储器(ROM)及I/O口电路等主要部件,结合连接它们的总线集成在一块芯片上,即它是一块智能芯片。
单片机系统:
单片机本身只是一块芯片,它并不能集成计算机的全部电路,因此需要加上时钟、复位电路等,才能构成单片机最小应用系统;若最小系统资源不足时,还需扩展外围电路和外围芯片等,从而构成能满足应用要求的单片机系统。
单片机应用系统:
它是为实际的控制应用而设计的,该系统与控制对象结合在一起,是满足嵌入式对象要求的全部电路系统。
它在单片机的基础上配置了前/后向通道接口电路、人机交互通道接口电路、串行通信接口等面向对象的接口电路。
另单片机系统和单片机应用系统都是软硬件结合的系统,缺一不可。
2.单片机有哪些特点?
答:
单片机的特点很多,主要是体积小品种多,价格便宜,可靠性高,使用灵活,还有
(1)突出控制功能
(2)ROM和RAM分开(3)单片机资源具有广泛的通用性(4)易于扩展ROM、RAM、定时/计数器、中断源等资源。
3.为什么说AT89C51单片机是MCS-51系列的兼容机?
AT89C51单片机有何优点?
答:
AT89系列单片机是将FLASH存储器技术和MCS-51系列单片机的基本内核相结合的单片机,且管脚也与之兼容,可以直接代换,所以说AT89C51是MCS-51系列的兼容机。
AT89C51单片机是AT89系列机的标准型单片机,它的优点主要有:
内ROM是FLASH存储器,已获得广泛应用的80C51兼容,采用静态逻辑设计,操作频率范围宽,具有两个软件选择的节电模式等。
4.AT89C51单片机由哪些主要功能部件组成?
答:
CPU,RAM,ROM,I/O接口等。
5.面包板、电子电路实验板、PCB板在产品开发过程中的作用?
它们各有什么优缺点?
答:
它们都是单片机实际应用系统中的不可缺少的一部分,它们都是构成硬件系统连接的载体介质。
面包板可以多次利用,可是稳定性不高;电子电路实验板的稳定性由焊接质量来决定,不可多次利用;PCB板最为可靠,可是如果不是量产,价格偏高,时间较长。
6.简述单片机应用研发过程和研发工具。
答:
任务分析→方案论证→硬件设计→软件设计→仿真调试→实物制作与调试。
研发工具:
调试仿真软件KEIL、在线仿真器、编程器或ISP下载器、PROTEUS仿真平台、教学实验板等。
第二章AT89C51单片机内部结构基础
1.AT89C51单片机内部结构主要有哪些部件组成?
它们的主要功能是什么?
答:
AT89C51单片机内部结构主要有:
(1)中央处理器CPU,是单片机的核心,完成运算和控制功能;
(2)内部数据存储器(256字节),前面128个单元00H~7FH存储内部数据,后面128个单元80H~FFH被专用寄存器占用,用来实现对片内各部件进行管理、控制、监视;
(3)程序计数器PC,是一个16位专用寄存器,其内容为下一条执行指令的地址;
(4)Flash内部程序存储器(4K),用于存储程序、原始数据、表格等;
(5)4个并行I/O口(8位),实现数据的并行输入输出;
(6)串行通信口,实现单片机和其他数据设备之间的串行数据传送;
(7)2个定时器/计数器(16位),实现定时或计数功能;
(8)中断控制系统,共5个中断源,分高低两个优先级;
(9)一个片内振荡器和时钟电路,为单片机产生时钟脉冲序列;
(10)总线,用于连接各个部件和单片机系统的扩展。
2.请将AT89C51的40个引脚按4类(电源、时钟、控制和I/O引脚)分类。
答:
电源
(2):
Vss接地端,Vcc接DC正电源线;
时钟
(2):
XTAL1,XTAL2
控制(4):
RST复位输入,ALE/(/PROG)地址锁存允许/编程脉冲,/PSEN外ROM读选通信号,(/ES)/VPP内外ROM选择/编程电源
I/O引脚(32):
P0~P3并行8位I/O口
3.AT89C51单片机引脚/EA、RST、ALE、/PSEN的功能是什么?
答:
/EA是片内外ROM选择端,ROM的寻址范围为64KB,而AT89C51内部只有4KBROM,当不够用时可在外扩展ROM。
当/EA信号为低电平时,指访问外部ROM;当/EA为高电平时,则先访问内部ROM,当PC值超过4KB时自动转向外部ROM中执行。
RST复位信号,当此引脚上的信号出现至少两个机器周期的高电平将使单片机复位。
ALE地址锁存控制信号,当系统扩展时,ALE用于控制把P0口输出的低8位地址送入锁存器存起来,以实现低位地址和数据的分时传送。
/PSEN外部ROM的读选通信号,在访问外部ROM时,每个机器周期两次PSEN有效(低电平),但在此期间内,每当访问外部数据存储器时,这两次有效的PSEN将不出现。
4.什么是单片机的振荡周期、状态时钟周期、机器周期和指令周期?
它们之间有什么关系?
答:
单片机是按一定的时序进行工作的,而时序是通过XTAL1和XTAL2引脚跨接振荡器与内部振荡电路共同产生固定频率的波形。
我们把振荡频率的倒数称振荡周期。
状态时钟周期是指单片机时钟信号的周期,是振荡周期的两倍,又称状态周期。
一个机器周期由6个状态组成,即机器周期等于6个状态时钟周期或等于12个振荡周期。
指令周期是指单片机执行一条指令所占用的时间,根据指令的不同,可包含有1、2、4等机器周期的倍数。
5.当AT89C51单片机外接晶振为4MHZ时,其振荡周期、状态时钟周期、机器周期、指令周期的值各为多少?
答:
振荡周期为0.25μs,状态时钟周期为0.5μs,机器周期为3μs,指令周期根据指令而不同可能是3μs、6μs、12μs等。
6.简述AT89C51单片机复位条件,并说明复位后寄存器中的数值状态。
答:
当RST引脚上的复位信号保持至少两个机器周期的高电平时,即满足复位条件。
复位后程序计数器PC的值初始化为0000H,这样单片机在复位后就从程序存储器ROM的0000H单元开始执行程序。
另外其他的寄存器内容为:
ACC,B,PSW,TCON,TL0,TH0,TL1,TH1,SCON,TMOD均为00H,而DPTR=0000H,SP=07H,P0~P3=0FFH,IP=××000000B,IE=0××00000B,PCON=0×××0000B。
参考表2-1。
7.参阅图2-5,分析上电复位过程。
答:
图2-5中A是通过外部复位电容充电实现复位的,单片机上电的瞬间,电容两端的电位不会突然变化,则RST的电位为Vcc(高电平),随着充电电流的减小,RST引脚电位逐渐下降,而其维持高电平的时间取决于电容的充电时间,应大于两个机器周期。
B图是在A的基础上引入了按键复位,按下按键时RST为高(电阻分压),按键松开后RST逐渐降为低电平,复位结束。
8.AT89C51单片机的ROM空间中,这6个地址(0、03H、0BH、13H、1BH、23H)有什么特殊的意义和用途?
用户应怎样合理安排?
答:
他们都是特殊的地址单元,其中0000H是单片机复位后,系统开始取指、执行指令的地址,即单片机复位后PC值为0000H;而03H、0BH、13H、1BH、23H是单片机5个中断服务子程序的入口地址。
相邻中断入口地址间隔8个单元。
当程序使用中断时,在入口地址处安放一条跳转指令,而相应的中断服务子程序从转移地址开始安放,若中断服务子程序小于等于8个单元可直接存在入口地址开始的8个单元内。
若没有用到中断功能,这些单元就可以作为一般的程序存储器用。
9.画图说明AT89C51单片机的存储空间结构。
答:
程序存储器ROM结构内RAM存储器结构
10.AT89C51单片机的片内RAM是如何分区的,各有什么功能?
答:
AT89C51单片机内RAM,最低32单元(00H~1FH)为工作寄存器区;工作寄存器上面的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位。
第三章AT89C51指令系统
1.简述下列基本概念:
指令,指令系统,机器语言,汇编语言。
答:
指令是单片机CPU执行某种操作的命令。
指令系统是一台计算机所能执行的指令集合。
机器语言即二进制代码语言,是计算机可以直接识别。
汇编语言是用助记符、字符串和数字等来表示指令的程序语。
2.简述AT89S51单片机的指令格式
答:
该单片机的指令由两部分组成,即操作码和操作数。
操作码用来规定指令进行什么操作,而操作数则是指令操作的对象,操作数可能是一个具体的数据,也可能是指出到哪里取得数据的地址或符号。
指令格式一般为:
[标号:
]操作码[操作数1][,操作数2][,操作数3][;注释]
3.简述AT89S51的寻址方式和所能涉及的寻址空间
表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字节地址中所有的位,可位寻址的特殊功能寄存器
答:
共有7种寻址方式,见表3-2。
分别是:
(1)寄存器寻址:
寻址范围为通用寄存器组,共4组32个,但只能使用当前寄存器组,因此使用前需要通过对PSW种的RS1、RS0位的状态进行设置;
(2)直接寻址:
寻址范围为内部RAM,包括低128位用户RAM区和高128位专用寄存器;(3)寄存器间接寻址:
寻址范围为内部RAM低128位,外部RAM64KB(低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。
请分析下面各是什么指令,说明源操作数的寻址方式及按顺序执行每条指令后的结果。
答:
指令
指令说明
源操作数寻址方式
结果
MOVA,40H
将内部RAM中40H内容传送到累加器A中
(A)←(40H)
直接寻址
(A)=48H
MOVR0,A
再将A中内容传送给R0
(R0)←(A)
寄存器寻址
(R0)=48H
MOVP1,#0F0H
将立即数0F0H送到P1口,即P1.4~P1.7位1,其余为0
(P1)←0F0H
立即数寻址
(P1)=0F0H
MOV@R0,30H
将30H中的内容,传放到以R0单元内容为地址的单元中
((R0))←(30H)
直接寻址
((R0))=(48H)=38H
MOVDPTR,#3848H
将立即数3848传送给DPTR数据指针
(dptr)←3848H
立即数寻址
(DPTR)=3848H
MOV40H,38H
将内部RAM中38H内容传送到40H单元中
(40H)←(38H)
直接寻址
(40H)=40H
MOVR0,30H
将30H中的内容给R0寄存器
(R0)←(30H)
直接寻址
(R0)=38H
MOVP0,R0
将R0的内容传送到P0
(P0)←(R0)
寄存器寻址
(P0)=38H
MOVA,@R0
将R0内容为地址的该单元内容传送给A
(A)←((R0))
寄存器间接寻址
(A)=40H
MOVP2,P1
将P1的内容传送给P2
(P2)←(P1)
直接寻址
(P2)=0F0H
6.指出下列指令的源操作数的寻址方式
MOVA,65H直接寻址
MOVA,#65H立即数寻址
MOVA,@R0寄存器间接寻址
MOVA,R2寄存器寻址
MOVCA,@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。
分别求各条指令执行后的结果(要求进行二进制运算验证)及标志位Cy、P的影响。
(1)MOVA,@R1(A)=0CEHP=1,C不变
(2)MOV40H,30H(40H)=0CEHP和C不变
(3)MOVP1,R1(P1)=30HP和C不变
(4)MOVCA,@A+PC(A)=46HP=1,C不变
(5)PUSHB(31H)=78H,(SP)=31HP和C不变
(6)POPDPH(DPH)=0CEH,(SP)=29HP和C不变
(7)XCHDA,@R1(A)=05EH,(30H)=CBHP=1,C不变
(8)ADDA,30H(A)=29HP=1,C=1
(9)ADDCA,P1(A)=CDHP=1,C=0
(10)SUBBA,P1(A)=E9HP=1,C=1
(11)ANLP1,#0FH(P1)=01HP和C不变
(12)CLRPSW.7C=0
(13)RLCA(A)=B7HP=0,C=0
(14)ORLC,90HC=1,P不变
9.对下面一段程序加上机器码和注释,并说明程序运行后寄存器A、R0和内部RAM50H、51H、52H单元的内容。
MOV50H,#50H755050 ;(50H)←50H
MOVA,50HE550 ;(A)←(50H)
MOVR0,AF8 ;(R0)←(A)
MOVA,#30H7430 ;(A)←30H
MOV@R0,AF6 ;((R0))←(A)
MOVA,#50H7450 ;(A)←50H
MOV51H,AF551 ;(51H)←(A)
MOV52H,#00H755200 ;(52H)←00H
答:
运行后寄存器(A)=50H,(R0)=50H,(50H)=30H,(51)=50H,(52H)=00H
10.区别下列各指令中20H的含义,在每条指令后加上注释。
MOVA,#20H将20H立即数传送给A
MOV45H,20H将内部RAM中20H单元的内容传送到45H中
MOVC,20H.0将内部RAM中20H单元内容的第0位(最低位)传送给C
MOVC,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置位;
(9)使累加器的低4位清零;
(10)使P1.2与CY相与,结果送CY;
(11)立即数45H、93H进行逻辑与、或、异或操作;
(12)两立即数求和:
1C0H+45H,结果按高低8位存在30H、31H中。
答案:
(1)MOVR1,#30H
(2)MOV78H,30H
(3)MOV@R0,#30H(4)MOVP1,R2
(5)MOVA,60H;;
movp2,#0;
movr0,#60h;
movx@r0,a
(6)MOVA,60H;;
movdptr,#1060;
movx@dptr,a
(7)MOVA,#00H
MOVDPTR,#1000H
MOVCA,@A+DPTR
MOV30H,A
(8)SETBACC.7
(9)ANLA,#0F0H
(10)ANLC,p1.2
(11)与:
MOVA,#45H
ANLA,#59H
或:
MOVA,#45H
ORLA,#59H
异或:
PMOVA,#45H
XRLA,#59H
(12)CLRC
MOVR2,#1
MOVA,#0C0H
ADDA,#45H
MOV31H,A
MOVA,R2
ADDCA,#0
MOV30H,A
12.写出下列指令执行过程中堆栈的变化
设堆栈初值为X:
MOVR6,#11H(SP)=X(堆栈不变)
MOVR7,#23H(SP)=X(堆栈不变)
ACALL200H(SP)=X+2
;(X+1)=第4条指令的首址PC低8位(X+2)=第4条指令的首址PC高8位
POP50H(SP)=X-1
POP51H(SP)=X-2
SJMP$
ORG200H
RET
答:
执行过程中,前面两条为立即寻址指令,堆栈不变;执行第三条ACALL指令时,首先将程序寄存器PC的当前值加2,接着先后将PC的低八位和高八位分别进栈,(SP)=(SP)+2;然后再将PC内容中的低11位用200H来替代,同时程序跳到第七条ORG200H中,接着RET表示子程序返回,将原先压入堆栈的PC值弹出,(SP)=(SP)-2;最后两条POP指令执行后将SP所指地址中的内容赋给50H,SP减1后再将SP所指地址中的内容赋给51H,SP内容再减1给SP,最后程序结束。
13.请写出能实现下列功能的程序段:
(1)一个16位数据,高低字节分别放在20H和21H中,试将该数乘以2
MOVA,21H
CLRC
RRCA
MOV21H,A
MOVA,20H
RRCA
MOV20H,A
(2)16位二进制数由高位到低位放在30H和31H单元,将其内容加1;
MOVA,31H
ADDA,#01H
MOV31H,A
MOVA,30H
ADDCA,#00H
MOV30H,A
(3)将DPTR中的数据减5;
CLRC
MOVA,DPL
SUBBA,#05H
MOVDPL,A
MOVA,DPH
SUBBA,#00H
MOVDPh,A
(4)有3个位变量X,Y,Z,请编写程序实现Y=X+YZ的逻辑关系式。
XBIT30H
YBIT31H
ZBIT32H
MOVC,Y
ANLC,Z
MOV20H,C
MOVC,X
ORLC,20H
MOVY,C
第四章AT89C51汇编语言程序设计
1.将一个按高低字节存放在21H、20H中的一个双字节乘以2后,再按高低次序将结果存放到22H、21H、20H单元
ORG0
STAR:
CLRC
MOV20H,#0E2H;设低字节的数据是E2H
MOV21H,#0F3H;设高字节的数据是F3H
MOVA,20H
MOVB,#2H
MULAB
MOV20H,A
MOV23H,B
MOVA,21H
MOVB,#2H
MULAB
ADDCA,23H
MOV21H,A
MOV22H,B
SJMP$
END
2.试编程,将片外RAM1000H~1050H单元的内容置为55H。
MOVP2,#10H
MOVR0,#00H
MOVA,#55H
MOVX@R0,A
MOVR0,#50H
L0:
MOVX@R0,A
DJNZR0,L0
SJMP$
END
3.试编程统计