c51单片机原理复习资料2020

今年考了单片机原理,整理了大几千字的复习文档,留着也没用,就在下面分享出,仅供参考.
以下文档复制自word文档,无图片,下载参见:
坚果云
github
这里还有一个c51的中文介绍文档,觉得也挺不错的,下载参见:
坚果云
github
仅供参考

复习范围(题型:选择、简答、编程、扩展设计)
51是哈弗结构的,ram,rom分开编址

AT89C51的基本参数(CPU,RAM, ROM等)和内部的组成结构。

(1)8位微处理器(CPU);

(2)数据存储器(128B RAM)+128B 特殊功能寄存器;

(3)程序存储器(4KB Flash ROM);

(4)4个8位并行I/O口(P0口~P3口);

(5)1个全双工异步串口;

(6)2个16位定时器/计数器;

(7)1个看门狗定时器;

(8)中断系统:5个中断源、5个中断向量;

(9)特殊功能寄存器(SFR)26个(答案);

(10)低功耗的空闲模式和掉电模式;

(11)在线可编程功能ISP(In System Program);

(12)数据指针2个,方便对片外RAM的访问。

(13)12MHz or 11.0592MHz

各功能部件通过片内单一总线连接而成,基本结构是CPU+外围芯片的传统微机结构。CPU对各种功能部件控制采用特殊功能寄存器的集中控制方式。

重要的特殊寄存器的作用(PC, SP, DPTR,累加器A等),复位后各重要寄存器的状态?PC/SP/P0~P3

(1).程序计数器PC 复位后0000H

(2).累加器A=00H

(3).通用寄存器B=00H

Page Break

(4).程序状态字PSW=00H

(5).堆栈指针SP 复位后07H#for r0~r7 occupied 00H~07H

即指示堆栈栈顶在内部RAM中的位置

(6).数据指针DPTR=0000

(7).P0-P3 复位后FFH

单片机内部时序计算(机器周期、振荡周期\时钟周期、状态周期)

(1)机器周期:CPU完成一个基本操作所需时间为机器周期。执行一条指令分为几个机器周期。每个机器周期完成一个基本操作,如取指令、读或写数据等。每12个时钟周期为1个机器周期。

(2)时钟周期,状态周期:1个机器周期包括12个时钟周期(也称振荡周期),分6个状态:S1~S6。每个状态又分两拍:P1和P2。因此,一个机器周期中的12个时钟周期表示为S1P1、S1P2、S2P1、S2P2、…、S6P2

(3)指令周期:

通用工作寄存器R0~R7(0-3组)的选择方法?(RS0和RS1的设置)

MCS51单片机五大寻址的逻辑地址范围?(内部数据存储器,程序存储器,外部数据存储器,特殊功能寄存器,位地址空间)

内部数据存储器:00H-FFH;实则00H-7FH

程序存储器:0000H-FFFFH;实则0000H-0FFFH

外部数据存储器:0000H-FFFFH

特殊功能寄存器:80H-FFH,需要直接寻址访问,(看似与ram的物理地址相同)实则与ram的物理地址不同,寄存器地址可以被8整除的才可以位寻址.

位地址空间:20H-2FH

(注:RAM是数据存储器,ROM是程序存储器)

MCS-51支持位寻址的存储空间有哪些?。 ram中20H~2FH,寄存器地址可以被8整除的才可以位寻址

I/O口基本性质。

P0:在CPU访问片外存储器时先是用于传送片外存储器的低8位地址,然后传送CPU对片外存储器的读写数据(数据/地址总线,数据/地址复用口)

P2: 高8位

1。p0口灌电流12ma,其余口最大灌电流6ma

2。p0-p3口初始化均为正

四个I/O口P0/P1/P2/P3在片外扩展总线中的作用。I/0口读引脚的方法。

都是向锁存器写1,使场效应管截至,在BUF2读取(p3也可以BUF3)

P3的功能复用较多

作用:P0:在CPU访问片外存储器时先是用于传送片外存储器的低8位地址,然后传送CPU对片外存储器的读写数据(数据/地址总线,数据/地址复用口),先传输地址后传输数据。

  P1:只作为通用I/O口 

P2:配合P1传送片内EPROM12位地址中的高4位地址(地址总线)

P3:控制总线

掌握单片机汇编指令(MOV, MOVX, MOVC, 跳转类JZ,JC, 运算类,CJNE, DJNZ):

命令+操作码 + 操作数

MOV :common operation

MOVX: operation used on outter ram

MOVC used on ROM 转移方向都是由右到左

JZ:累加器为0跳转

JC:C为1跳转

CJNE:ram单元与立即数不等转移

DJNZ:直接寻址单元或寄存器减一不为0转移

汇编指令的七种寻址方式。(能举例,会区分):

寻址指的单个数据,而一个操作符可以包含多种寻址方式,一般讨论的后面一个

立即寻址

直接给出运算所用的立即数:eg:MOV A,#30;

直接寻址

直接给出地址,只可以作用于内部ram,特殊功能寄存器,位地址空间,其中特殊功能寄存器,位地址空间只可以直接寻址:eg:ANL 70H,#30;把70H中的数与操作30,并保存于70H

间接寻址

间接寻址在r0或r1面前加上@进行寻址,eg:MOV A,@r0

寄存器寻址

对r0-r7,累加器A,通用寄存器B,地址寄存器DPTR,进位C中的数进行操作,是一种隐含寻址方式,eg:INC r0;++r0

相对寻址

用于转移指令中PC中基址加偏移量的寻址方式,偏移量+127~-128,eg:

JC 80H;若果c=1,则pc加80H作为偏移量

变址寻址

变址寄存器加上基址寄存器,基址寄存器有pc与dptr,eg:

MOVC A,@A+DPTR

位寻址

是对内部ram与特殊功能寄存器中的位寻址空间进行位寻址。借助进位寄存器C作为位操作累加器,指令操作数直接给出位地址,根据操作码的性质进行位操作。位操作与字节操作完全相同,主要由操作码进行区分。

Eg:MOV C,20H

访问程序存储器、片外数据存储器、内部数据存储器、特殊功能寄存器各用什么指令?

程序存储器:

MOVC

片外数据存储器:

MOVX

内部数据存储器:

MOV ,直接寻址,位寻址,

特殊功能寄存器:

直接寻址,位寻址

定时器的相关控制寄存器TMOD, TCON的比特位定义?定时器有哪几种工作方式,怎么配置?

当定时器1作为波特率发生器时,定时器1可以作为两个8位定时器用

,用TMOD中控制位C/T决定作为定时器还是计数器,核心部件是一个加法器,本质都是对脉冲进行计数,只是脉冲源来源不同。当为定时模式时,系统时钟每6个或12个脉冲计数一次

TMOD

复位值:00H

只可以字节寻址

D0D3为T0定时/计数器的设置,D4D7为T1定时/计数器的设置 。

//GATE :为门控位,GATE=0时,只要在编写程序时,使TCON中的TRO或TR1为1,就可以启动定时器/计数器工作。GATE=1时,不仅要在编写程序时,使TCON中的TRO或TR1为1,且需要外部引脚也为高电平,才能 工作。

C/T :定时/计数模式切换,C/T=0时为定时模式,C/T=1时为计数模式。

M1,M0:用来选择定时计/计数器的工作方式,一般使用都是采用16位的计时计数器。

TCON

T0,T1控制寄存器

作用是控制定时器的启、停,标志定时器溢出和中断情况

可位寻址

//TF1 :TF1=1表示T1有中断产生。(Timer Flag,定时器标志位)

//TR1 :TR1=1表示T1开始运行。(单片机中T0引脚,需要高低电平的驱动)

TF0 :TF0=1表示T0有中断产生。

//TR0 :TR0=1表示T0开始运行。(单片机中T1引脚,需要高低电平的驱动)

//IE1 :IE1=1表示INT1有中断产生。

IT1 :IT1=1表示INT1为下降沿触发,IT1=0表示INT1为低电平触发。

IE0 :IE0=1表示INT0有中断产生。

IT0 :IT0=1表示INT0为下降沿(负跳变)触发,IT0=0表示INT0为低电平触发。

程序状态字PSW的每个比特位的定义。重点是加法乘法指令ADD/ADDC对标志位的影响

可位寻址

ADD 两数相加,不加进位位。

ADDC 两数相加,加进位位。进位当时为1就加1,进位为0就加0。

一般在多字节数相加时,低字节相加用ADD ,高字节相加就用ADDC。

实现低字节产生的进位加到高字节相加当中,最终完成多字节数的相加。

比如例一:

0290H + 0190H

低字节相加用 ADD

90H+90H=120H 用ADD指令得到20H,并溢出产生进位 C=1

高字节相加用 ADDC

02H+01H=03H 用ADDC指令两数相加结果03H会再加上进位位1,得到 04H

0290H+0190H=0420H

中断控制寄存器IE/IP的比特位定义、5种中断源入口地址表/中断标志位

C51有5个中断

0, 外部中断0, IE0(P3.2)

1, 定时器0溢出中断, TF0

2, 外部中断1, IE1(P3.3)

3, 定时器1溢出中断, TF1

4, 串行口中断, RI

0003H->外部中断0入口地址,之后每间隔8bytes一个中断入口

IE中断允许控制寄存器(可位寻址)

EX0:外部中断0允许位;
ET0:定时/计数器T0中断允许位;
EX1:外部中断1允许位;
ET1:定时/计数器T1中断允许位;
ES :串行口中断允许位;
EA :CPU中断允许(总允许)位。

IP中断优先级寄存器

可位寻址

c51只有两级优先

PX0:外部中断0优先级设定位
PT0:定时/计数器T0优先级设定位
PX1:外部中断1优先级设定位
PT1:定时/计数器T1优先级设定位
PS :串行口优先级设定位

中断响应条件

中断请求+中断允许位为1+中断总允许位为1

中断标志位有scon与tcon

TCON参照上面的,SCON如下:

SCON可位寻址

RI:串行口接收中断标志位。当允许串行口接收数据时,每接收完一个串行帧,由硬件置位RI。注意,RI必须由软件清除。

TI:串行口发送中断标志位。当CPU将一个发送数据写入串行口发送缓冲器时,就启动了发送过程。每发送完一个串行帧,由硬件置位TI。CPU响应中断时,不能自动清除TI,TI必须由软件清除。

5种中断源的自然优先级

优先级参考上面例举的顺序

何谓同步通信、异步通信?两种串口异步通信的数据帧格式

同步通信指的有同步时钟信号的通信

8051中的串口是全双工的

有两个缓冲器,发送缓冲器只可写与接受缓冲器只可读,因此共用地址99H,统一称作SBUF

P3.0RX,P3.1TX,波特率由计数器给出

帧格式:

数据帧格式:同步:即检测到规定的同步字符(1~2个)后,下面就连续按顺序传送数据,直到一块数据传送完毕。字符之间不需要间隙,也不要起始位和停止位。

异步:一个数据帧包括:1个起始位(低电平),8个数据位,1个校验位,1个停止位(高电平,表示数据帧结束)

串口方式控制字SCON比特位定义; 根据波特率参数,对串口初始化计算和编程

SCON(串口控制寄存器)

M0、SM1, 工作方式, 功能描述, 波特率

0 0, 方式0, 8位移位寄存器, Fosc/12

0 1, 方式1, 10位UART, 可变

1 0, 方式2, 11位UART, Fosc/64或fosc/32

1 1, 方式3, 11位UART, 可变( fosc )

SM2:多机通讯控制位。在方式0时,SM2一定要等于0。在方式1中,当(SM2)=1则只有接收到有效停止位时,RI才置1。在方式2或方式3当(SM2)=1且接收到的第九位数据RB8=0时,RI才置1。

REN:接收允许控制位。由软件置位以允许接收,又由软件清0来禁止接收。

TB8: 是要发送数据的第9位。在方式2或方式3中,要发送的第9位数据,根据需要由软件置1或清0。例如,可约定作为奇偶校验位,或在多机通讯中作为区别地址帧或数据帧的标志位。

RB8:接收到的数据的第9位。在方式0中不使用RB8。在方式1中,若(SM2)=0,RB8为接收到的停止位。在方式2或方式3中,RB8为接收到的第9位数据。

TI:发送中断标志。在方式0中,第8位发送结束时,由硬件置位。在其它方式的发送停止位前,由硬件置位。TI置位既表示一帧信息发送结束,同时也是申请中断,可根据需要,用软件查询的方法获得数据已发送完毕的信息,或用中断的方式来发送下一个数据。TI必须用软件清0。

RI:接收中断标志位。在方式0,当接收完第8位数据后,由硬件置位。在其它方式中,在接收到停止位的中间时刻由硬件置位(例外情况见于SM2的说明)。RI置位表示一帧数据接收完毕,可用查询的方法获知或者用中断的方法获知。RI也必须用软件清0。

1,方式0为移位寄存器输入/输出方式。可外接移位寄存器以扩展I/O口,也可以外接同步输入/输出设备。8位串行数据者是从RXD输入或输出,TXD用来输出同步脉冲。
(1)输出串行数据从RXD引脚输出,TXD引脚输出移位脉冲。CPU将数据写入发送寄存器时,立即启动发送,将8位数据以fos/12的固定波特率从RXD输出,低位在前,高位在后。发送完一帧数据后,发送中断标志TI由硬件置位。
(2)输入当串行口以方式0接收时,先置位允许接收控制位REN。此时,RXD为串行数据输入端,TXD仍为同步脉冲移位输出端。当(RI)=0和(REN)=1同时满足时,开始接收。当接收到第8位数据时,将数据移入接收寄存器,并由硬件置位RI。

2,方式1为波特率可变的10位异步通讯接口方式。发送或接收一帧信息,包括1个起始位0,8个数据位和1个停止位1。
(1)输出当CPU执行一条指令将数据写入发送缓冲SBUF时,就启动发送。串行数据从TXD引脚输出,发送完一帧数据后,就由硬件置位TI。
(2)输入在(REN)=1时,串行口采样RXD引脚,当采样到1至0的跳变时,确认是开始位0,就开始接收一帧数据。只有当(RI)=0且停止位为1或者(SM2)=0时,停止位才进入RB8,8位数据才能进入接收寄存器,并由硬件置位中断标志RI;否则信息丢失。所以在方式1接收时,应先用软件清零RI和SM2标志。

3,方式2
方式2为固定波特率的11位UART方式。它比方式1增加了一位可程控为1或0的第9位数据。
(1)输出: 发送的串行数据由TXD端输出一帧信息为11位,附加的第9位来自SCON寄存器的TB8位,用软件置位或复位。它可作为多机通讯中地址/数据信息的标志位,也可以作为数据的奇偶校验位。当CPU执行一条数据写入SUBF的指令时,就启动发送器发送。发送一帧信息后,置位中断标志TI。
(2)输入: 在(REN)=1时,串行口采样RXD引脚,当采样到1至0的跳变时,确认是开始位0,就开始接收一帧数据。在接收到附加的第9位数据后,当(RI)=0或者(SM2)=0时,第9位数据才进入RB8,8位数据才能进入接收寄存器,并由硬件置位中断标志RI;否则信息丢失。且不置位RI。再过一位时间后,不管上述条件时否满足,接收电路即行复位,并重新检测RXD上从1到0的跳变。

4,工作方式3
方式3为波特率可变的11位UART方式。除波特率外,其余与方式2相同。

存储器芯片容量与地址线数量的关系?比如2732是什么芯片,容量是多少?6264是什么芯片,容量又是多少?

储存芯片容量<=2^(地址线线数)*(数据线线数)/8 (KB)

后两位表示总存储量:4Kx8bits=4KB

后两位表示总存储量:8Kx8bits=8KB

单片机外部并行扩展的基本方法(线选法等)的概念。能用线选法扩展数据存储器和确定其寻址地址。

单片机

编程题的范围

编程题的范围

19、 能编写对内存单元中的数进行奇数和偶数判断的汇编程序,算法原理是除以2后判断余数是否为0.

ORG 0100H

MOV A, #00H; dividend

MOV B, #2;divisor

DIV AB

MOV A, B;B(remainder),A(quotient)

JZ even_num

SETB P1.0

even_num:

CLR P1.0

END

20、 能编写两数进行加减乘除的汇编程序。

ORG 0100H

MOV A, #00H

MOV B, #00H

ADD A,B;stored A

SUBB A,B; stored A

MUL AB; stored H:B,L:A

DIV AB; stored A

21、 能编写通过定时器中断在I/O引脚输出方波的完整汇编程序。(定时器和中断初始化)

ORG 0000H

LJMP MAIN

ORG 000BH

CPL P1.0

RETI

ORG 0100H

MAIN: MOV SP, #60H;设置堆栈指针

MOV TMOD, #02H;设置定时器T0为方式2

MOV TL0, #206;设置计数初值,计50次后溢出,正好50微秒

MOV TH0,#206

SETB TR0;启动定时器

SETB EA;开中断开关

SETB ET0;开定时器T0中断

SJMP $;原地循环

END

22、 能编写通过CJNE和JC的指令组合,编写比较两个数大小的汇编程序

MOV A,#00H

MOV B,#00H

SUBB AB

JC, LOOP(A<B)

CJNE Cy,#00H,START(A>B)

SETB P1.0

SETB P1.1

LOOP:

CLR P1.1(A<B)

START:

CLR P1.0(A>B)

END,

23、 能编写通过串口发送数据的程序。

ORG 0000H

LJMP MAIN

ORG 0023H

LJMP SENDSTR

ORG 0100H

MAIN: MOV SP, #60H;设置堆栈指针

MOV TMOD ,#20H

MOV TL1,#0F4H

MOV TH1,#0F4H

SETB TR1

MOV SCON, #40H;串口通信方式1

MOV PCON,#80H

SETB EA;开中断开关

SETB ES;开串口中断

MOV R7,#9

MOV SBUF,#30H

SJMP $;原地循环

ORG 0200H

SENDSTR: CLR TI

MOV SBUF, #30H

DJNZ R7, EXIT

CLR ES

EXIT: RETI

END

24、 能编写子程序、循环结构体程序。

DELAY:

MOV R1,#255

LOOP:

MOV R2,#255

DJNZ R2,$

DJNZ R1,LOOP

RET

END

(LCALL DELAY)

25、 能编写延时子程序。

ORG 0000H

TIME EQU 60000;us

LJMP START

ORG 000BH;timer1 interrupt address

MOV TH0,#(65536-TIME)/256 ;set time

MOV TL0,#(65536-TIME)MOD 256 ;set time

LJMP T0_INT

START:

 SETB C 

 MOV P1,#0FEH 

 MOV P2,#0FFH 

 MOV R0,#0 

 MOV TMOD,#01H;set timer0 work mode 

 MOV TH0,#(65536-TIME)/256 ;set time 

 MOV TL0,#(65536-TIME)MOD 256 ;set time 

 MOV IE,#10000010B;enable all interrupt and timer0 interrupt  

 SETB TR0;start counter0  

 MOV R2,#3   

 SJMP $ //wait 

T0_INT:

 MOV A,P1 

 RLC A 

 MOV P1,A 

 MOV A,P2 

 RLC A 

 MOV P2,A 

 RETI  //RETURN  

END

设计题范围

能画出对单片机扩展程序存储器、数据存储器的电路逻辑框图。能准确连接扩展中的对应控制引脚。能依据自己画得电路图,确定扩展芯片的寻址范围。

RAM拓展

MOVX A,@DPTR //读外扩ram,产生读时序,由WR/p3.6产生

MOVX @DPTR,A //写外扩ram,产生写时序,由RD/p3.7产生

我们发出一条MOVX指令的时候,先发出16位地址,产生控制时序,然后在写(读)数据,这个时候,我们低8位地址总线就与数据总线冲突了(因为都是用的P0口),使用如果我们要时候低8位地址去限定的时候,就可以就一个锁存器,来锁存低8位地址(这个时候要用到锁存信号引脚ALE),再比如我们外围器件不多的时候,或者外扩ram不超过2^8=256B的时候,完全可以不管低8位

P0用锁存器74373

拓展ram芯片选择6264,8KB

寻址范围:0000H-1FFFH

ROM拓展

8051程序存储器用于存放编好的程序和表格常数。程序存储器通过16位程序计数器PC寻址,寻址能力为64K字节。8051,8751的64程序存储器片内ROM为4K字节,地址为0000H—0FFFH,片外最多可扩至64K字节ROM,地址1000H—FFFFH,片内外是统一编址的。

当引脚EA接高电平时,8051程序计数器PC在0000H—0FFFH范围内,即前4K字节地址执行片内ROM中的程序;当指令地址超过0FFFH后,就自动地转向片外ROM指令

当引脚EA接低电平时,8051片内ROM不起作用,CPU只能从片外ROM中取指令,地址可以从000H开始编址。这种接法特别适用于采用8031单片机的场合,由于8031片内不带ROM,所以使用使必须使EA=0.以便能够从外部扩展EPROM中取指令。

CE:片选,A0~A10:地址,O0~O7:数据,ALE:锁存,OE:输出允许,地址范围:f000-f7ff

  • 4
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值