单片机期末复习.docx

上传人:b****6 文档编号:5646687 上传时间:2022-12-30 格式:DOCX 页数:17 大小:3.31MB
下载 相关 举报
单片机期末复习.docx_第1页
第1页 / 共17页
单片机期末复习.docx_第2页
第2页 / 共17页
单片机期末复习.docx_第3页
第3页 / 共17页
单片机期末复习.docx_第4页
第4页 / 共17页
单片机期末复习.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

单片机期末复习.docx

《单片机期末复习.docx》由会员分享,可在线阅读,更多相关《单片机期末复习.docx(17页珍藏版)》请在冰豆网上搜索。

单片机期末复习.docx

单片机期末复习

第1章:

1:

什么是单片机:

单片机由三大组成部分(CPU、存储器(RAM,ROM)、I/O接口)和一些实时控制需要的功能期间集成在一片芯片上。

它有三大总线:

数据总线、地址总线、控制总线

2:

ISP:

(InSystemProgramming),即在系统编程

IAP:

(InApplicationProgramming),即在应用编程

3:

I2C总线:

采用俩线制,数据线(SDA)和时钟线(SCL)构成,其有起始信号(S)和终止信号(P),所有操作在起始信号后有效,在终止信号后无效

4:

单片机的特点:

(1)单片机的存储器ROM和RAM是严格区分的(ROM为程序存储器,只存放程序、固定常数及数据表格,RAM是数据存储器,用于工作区及存放用户数据)

(2)采用面向控制的指令系统

(3)单片机的I/O引脚通常是多功能的

(4)单片机的外部扩展能力很强

5:

MCS单片机是Intel公司生产的单片机的总称,MCS-51是Intel的51系列单片机

第2章:

(H表示16进制,如:

1FH,是指31的16进制表示,1FH也可以小写1fH)

1:

8051的内部资源:

(1)定时器:

T0,T1

(2)五个中断源:

(由高到低)外部中断0、定时器/计数器0中断、外部中断1、定时器/计数器1中断、串行口中断。

(在单片机中定时器和计数器是同一个东西,由TMOD的C/T位来确定)

(3)全双工串行口

2:

必须要记住的几个引脚:

ALE:

地址锁存输出端

RST:

复位,高电平10ms以上才能保证有效复位

EA(上面有个横线,不会弄额):

片外程序存储器,低电平时,只选用片外程序存储器

3:

CPU的组成:

控制器、运算器

4:

程序状态字PSW:

bit位由高到低(7~0):

C:

进位标志,最高位有进位时(加法时)或有借位(减法),C=1,否则C=0;

AC:

辅助进位,D3位向D4位有进位(或借位)时为1

F0:

用户自定义区

RS1:

RS0:

俩者用于选定4个工作寄存器组的某一组,00:

工作寄存器0组,01:

工作寄存器1组,10:

工作寄存器2组,11:

工作寄存器3组,(pg26页的工作寄存器组0、1、2、3)

OV:

判断运算结果是否溢出,其值为运算结果的最高位(bit7)和次高位(bit6)的异或

-:

暂留位,没用的,无视它

P:

奇偶校验位,累加器A中1的个数是奇数,则为1

5:

单片机里的四个周期:

振荡周期:

振荡脉冲的周期,比如:

12MHz的振荡频率,其振荡周期为1/12us

状态周期:

2个振荡周期为1个状态周期,也称时钟周期

机器周期:

一个机器周期包含6个状态周期,12个振荡周期,此时12MHz的振荡频率,机器周期为1us

指令周期:

执行一条指令所用时间,以机器周期为单位,单周期指令和双周期指令在12MHz下指令周期分别为1us和2us,乘除法为4周期(4us)

6:

内部RAM(数据存储器)主要分为:

工作寄存器(4个,地址为0:

00H~07H,1:

08H~0FH,2:

10H~17H,3:

18H~1FH,(由程序状态字PSW里的RS1和RS0控制工作寄存器组,上面已有描述))、位寻址区(20H~2FH,顾名思义,在控制,读写数据时可以进行位操作,为一个地址有8位,如21H下有08bit位到0Fbit位)、数据缓冲区(30H~7FH(堆栈))

7:

堆栈的操作:

堆栈是按先进后出,后进先出的原则读写,当数据压栈时,先把SP内容加1,再把数据存放到SP所指向的内容,出栈时:

数据弹出后,SP减1.(要理解)(复位后,SP初值为07H,存放数据时SP加1,在存放数据,也就是说,堆栈实际从08H存放信息)

8:

I/O口:

P0口:

地址总线的低8位,或普通I/O口(I:

InO:

Out)

P1口:

一般I/O口

P2口:

地址总线的高8位,或普通I/O口,当作为普通I/O口时,需加上拉电阻

P3口:

特殊功能I/O口,或普通I/O口

附:

当输入时,先写”1”(我也不是很理解,普通的单片机是直接读取信号的,可能是我不懂汇编,不知道具体工作原理的原因吧)

9:

定时器:

工作方式由TMOD(timermode)来决定,高四位决定T1,第四位决定T0,这四位分别为:

GATE(门控位,用于控制定时器/计数器的启动是否由中断引脚INT0/1来控制,这个考试不必了解,无视吧,知道有这个一个位即可)、C/T(T上有个横线,表示低电平为T,1:

计数器0:

定时器)、M1、M0(这俩位来决定工作方式)

M1、M0位对工作方式的控制:

(初值的计算,重点,通过理解来计算,前俩个重点看)

工作方式0(00)(13位计数器/定时器):

定时时间:

T=N*Tcy=(8192-x)*Tcy

8192=2^13(THx的高8位和TLx的低5位)

x初值的设定

Tcy:

单片机的机器周期,比如12MHz的晶振,机器周期为1us

也就是说工作方式0的定时范围是0~8192us

初值的计算:

先求x,比如要求定时1000us(当然,主要讲解的是一个方法,考试初值定位多少,使用的是工作方式几我也不知道),那(8192-x)*Tcy=1000(Tcy=1)解得x为7192,()(以定时器0为例,也可能只考计算公式T=N*Tcy=(8192-x)*Tcy吧)

工作方式1(01)(16位计数器/定时器)(实际应用中一般使用工作方式1):

T=N*Tcy=(65536-x)*Tcy(具体的解释参考上面,THx和TLx都是8位)

工作方式2(10)(8位计数器/定时器)

T=N*Tcy=(256-x)*Tcy

工作方式3(11)(只适用于定时器0)(应该无视吧,因为实际应用中也基本不用)

分为俩个独立的8位计数器(TH0和TL0),TH0只可作为定时器,占用定时器1的TR1(定时器1的启动位)和TF1(定时器1的中断标志位),(无论定时器0还是1操作时都会运用到TR和TF位),TL0可作为定时器也可作为计数器

10:

串行通信(用于计算机与计算机,上位机与下位机之间的通信):

异步串行通信标准:

RS-232C

波特率的设置:

由SCON的SM1和SM0这俩个控制位来设置波特率的工作方式

SCON(8位,了解即可):

7~0:

SM0SM1SM2RENTB8RB8TIRI

由SM0和SM1来控制波特率的方式0~3

波特率的计算:

方式0(00):

fosc/12(fosc是振荡频率,如果还不知道什么是振荡频率,面壁去。

方式1(01):

(2^(SMOD)*T1溢出率)/32

方式2(10):

2^(SMOD)*fosc/64(SMOD可以取0或1,0时:

波特率为:

fosc/64,1时:

波特率为:

fosc/32)

方式3(11):

3和1一样

附:

PCON的bit7位是SMOD,SMOD是波特率系数控制位,SMOD=1时波特率增大一倍

11:

中断:

五个中断源:

三个内部中断:

定时器/计数器T0中断、定时器/计数器T1中断、串行口中断,俩个外部中断:

外部中断INT0、外部中断INT1、。

(在单片机中定时器和计数器是同一个东西,由TMOD的C/T位来确定)

中断优先级控制位(应该不考):

IP(bit7~bit0)

空-PT2PSPT1PX1PT0PX0

PX:

外部中断优先级控制

PT:

定时器中断优先级

PS:

串口中断优先级

-:

没有

中断允许控制(需要知道)

IE(bit7~bit0)

EA-ET2ESET1EX1ET0EX0

EA(enableall):

中断总控制位

ET:

定时器/计数器溢出中断允许位

ES:

串行口中断允许位

EX:

外部中断允许位

外部中断控制(需要知道):

TCON(bit7~bit0)

TF1TR1TF0TR0IE1IT1IE0IT0

IT0(IT1):

外部中断触发控制位,0:

电平触发1:

电平跳变触发

IE0(IE1):

外部中断请求标志位,当有外部中断时,该位会自动置1

TF0(TF1):

定时器/计数器溢出标志位,当定时器/计数器溢出时,该位自动置1

TR0(TR1):

1:

打开定时器/计数器0:

关闭定时器/计数器

12:

复位状态:

单片机在复位后:

(1):

SP的值指向07H(SP用于堆栈的地址的,上面第7点介绍到)

(2):

P0~P3I/O口默认电平变为1,即FFH

(3):

其它的都为0

13:

单片机的低功耗:

PCON(bit7~bit0)(主要记住最后俩个)

SMOD--GF1GF0PDIDL

PD:

掉电方式控制位,1:

进入掉电方式0:

结束掉电方式

IDL:

空闲方式控制位,1:

进入空闲方式0:

结束空闲方式

附:

(SMOD,上面已有介绍,波特率控制位,该位来控制波特率是否加倍,GF1、GF0无视吧,不常用)

第3章:

1:

指令一般有功能、时间和空间三种属性。

2:

寻址方式:

主要记住的三种:

(1)立即寻址(程序存储器ROM):

例MOVA,#30H(30H就是一个立即数,把30H这个数送到累加器A中)

(2)寄存器间接寻址(内部RAM、外部RAM和I/O口):

例MOVA,@R1(功能是将以工作寄存器R1(假设为80H)中的内容为地址的片内RAM单元的数据传送到A中去)

(3)直接寻址(内部RAM、特殊寄存器(唯一方法)):

例MOVA,40H(40H就是操作数的地址该指令的功能是把片内RAM地址为40H的内容送到A中)

预先添加的知识(一定要看懂,不然后面的题目你不会!

believeme。

):

R0~R7:

是工作寄存器组里的工作寄存器

A:

累加器(ACC)

MOV:

数据传送

DPTR:

双字节的存储时需要运用到DPTR

A和DPTR都是数据传送过程中的”搬运工”(一定要注意,在数据传送中,要有搬运工)

MOVX:

CPU对片外扩展的数据存储器RAM或I/O口进行数据传输时,必须采用寄存器间接寻址,通过累加器A完成。

例:

读:

MOVXA,@DPTR

MOVXA,@Ri(Ri是指R0~R7)

写:

MOVX@DPTR,A

MOVX@Ri,A

MOVC:

访问程序存储器(ROM)的数据时,采用的命令采用基址寄存器间接寻址方式,把程序存储器存放的表格数据中读出,传送到累加器A

使用:

MOVCA,@A+DPTR;(基址寄存器间接寻址,具体介绍见Pg57的变址寻址)

解释:

由A和DPTR相加的值作为地址,将该地址的值存放到累加器A中

下面这个图,可以方便数据传输的理解:

Pg93:

若要完成以下数据传送,应如何用51单片机的指令来完成

(1)R0的内容传送到R1中

代码:

MOVA,R0(看!

有个逗号,这个不能省!

MOVR1,A

理解:

(“;为注释,写答案时是不需要写注释的”)

MOVA,R0;将R0的值存放到累加器A中

MOVR1,A;将累加器A中的值存放到R1中

(2)外部RAM的20H单元内容传送到R0,送内部RAM的20H单元

(假设20H中的内容为41H

思路:

重点是MOVXA,@R0的理解,这是以R0中的值为地址,把该地址的值(41H)存到A中,所以,首先对R0进行赋值,所赋值的内容为该数的地址!

,也就是MOVR0,#20H,然后,在MOVXA,@R0之后,A中的就是20H单元的内容(41H),然后,就是把该内容传送到R0中MOVR0,A,传送到内部RAM的20H单元MOV20H,A)

只需要写代码部分,”;”后的注释不需要写,以下都是这样!

MOVR0,#20H;将立即数20H存到R0中

MOVXA,@R0;预备知识中写了,当由工作寄存器到

;累加器时用MOVX,

;把R0中以20H为地址的内容存放到累加器A中

MOVR0,A;把把累加器A中的值存到R0中

MOV20H,A;把累加器A中的值存到20H单元的内容中

(3)外部RAM的2000H单元内容送R0,送内部RAM的20H单元,送外部RAM的20H单元

如果该题目无法更好的理解,请把上一题多多理解下!

MOVDPTR,#2000H;将立即数送到DPTR中,因为2000H是双字节数,

;单字节就可以直接送到R0中

MOVXA,DPTR;将2000H送到累加器A中

MOVR0,A;将累加器A中的值送到R0中

MOV20H,A;将累加器A中的值送到20H中

MOVR1,#20;因为要存放到外部RAM中

;就要MOVX@Ri,A,R0之前已经用了,所以用R1,

;要存放到外部RAM的20H中,先对R1进行赋值

MOVX@R1,A;传送数据到外部RAM的20H中

(4)ROM的2000H单元内容送R0,送内部RAM的20H单元,送外部RAM的20H单元

MOVDPTR,#2000H;将立即数送到DPTR中,因为2000H是双字节数

MOVA,#00H;这个主要解释见Pg57的变址寻址

MOVCA,@DPTR+A;把以00H+2000H位地址的内容存放到累加器A中

MOVR0,A;将A中的值(2000H为地址中的内容)存放到R0中

MOV20H,A;将数值传送到内部RAM的20H单元中

MOVR1,#20H;因为要存放到外部RAM中

;就要MOVX@Ri,A,R0之前已经用了,所以用R1

;要存放到外部RAM的20H中,先对R1进行赋值

MOVX@R1,A;传送数据到外部RAM的20H中

Pg95:

下面的程序段经汇编后,从2000H开始的各有关存储器单元的内容是什么?

ORG2000H

TAB:

DB10H,20H

DW2100H,23H

DWTAB

DB‘WORK’

理解:

ORG2000H是程序运行时需要把程序跳转到一个起始位置,(无视这句)

DB:

定义字节伪指令

ORG2000H

TAB1:

DB30H,8AH,

DB‘A’

那么,TAB1的值为2000H

(2000H)=30H,(2001H)=8AH(2001H)=41H(‘A’的ASCII码)

DW:

定义字(双字节)伪指令,先写高字节,再写低字节

所以上题的结果:

(2000H)=10H

(2001H)=20H

(2002H)=21H

(2003H)=00H

(2004H)=00H;因为DW是写双字节,所以23H就要表示为0023H

;高字节00H

(2005H)=23H

(2006H)=20H

(2007H)=00H

(2008H)=57H;‘W’的ASCII码

(2009H)=4FH;‘O’

(2010H)=52H;‘R’

(2011H)=4BH;‘K’

下面这题,老师说了肯定考!

Orz.....

外部RAM2000H单元有个8位二进制数,要求转换为8421BCD码,并将百、十、个位分别存放到内部RAM的20H、21H、22H

8位:

(0~256)如10111001BCD码为:

185

百:

185/100=1余数:

85

十:

85/10=8余数:

5

个:

5

DIV(除法)的使用

DIVAB(A<-A/B的商B<-A/B的余数)

(此处的B寄存器是辅助累加器A完成乘除法运算)

注意没有逗号

Code:

MOVDPTR,#2000H;先读取外部RAM2000H中的值

MOVA,@DPTR;具体操作上面讲过

MOVB,#64H;64H就是100的16进制,B作为被除数

DIVAB;A/B=185/100,然后,商

(1)给A,余数(85)给B

MOV20H,A;将A中的值(百位)存放到20H中MOVA,B;A中的值为85

MOVB,#0AH;将10(0AH)存放到B中

DIVAB;A/B=85/10,商(8)给A,余数(5)给B

MOV21H,A;十位放到21H

MOV22H,B;个位放到22H

第4章:

80C31的最小系统结构图(加程序存储器)(80C31无ROM(程序存储器),80C51才有ROM)

引脚及芯片介绍:

ALE:

地址锁存有效信号输出端,在访问片外程序存储器期间,ALE以每机器周期俩次进行信号输出,其下降沿用于控制锁存P0口输出低8位地址,在不访问片外程序存储器时,ALE仍可作为对外输出的时钟脉冲

P2口:

高5位地址线(A8~12)

P0口:

低8位地址线(A0~A7),及数据线(D0~D7)(A:

AddressD:

Date)

PSEN:

片外程序存储器选通信号输出端低电平有效,图中OE控制芯片输出是否有效,也就是读取数据

74LS373:

锁存器,当G为1时,锁存器输出端同输入端,当G由‘1’变‘0’时,数据存入锁存器中

要求:

会确定地址

这部分,他也没讲多少,我上课也没听,我就随便写写一点吧,对不住了:

51单片机地址总线宽度为(16位,P2口的高8位加P0口的低8位)也就是2^16b=2^6*2^10b=64*1Kb=64Kb

地址范围:

0000H~FFFFH

当连接到芯片的引脚不是16根时,要额外的思考,

如只连接P2口的P2.0~P2.5和P0口的P0.0~P0.7

则地址线为8+6=14(0011111111111111)

2^14=16Kb

地址范围0000H~3FFFH

总之把连接到芯片的引脚以二进制表示出来,再化为十六进制

顺便看一下Pg:

102页下面的地址译码关系。

值得一提的是:

译码地址线和与存储器芯片连接的地址线是有思考上的差别的

译码地址线:

这是作为芯片选通的地址(这些芯片在运用中地址不一样,有上面的地址引脚电平连接决定,是固定值)

存储器芯片连接的地址线:

这是芯片内部数据,计算方法如上

实验一

(1)

图解释:

74LS240:

提高I/O口的驱动能力的,从功能上讲,可以无视它

代码:

实验一的代码还是挺简单的,但是量比较多,就不写了,还是你们自己看吧,不好意思

74LS377的使用:

74LS377是一个锁存器

因为P2.7控制着E(芯片的使用与否,低电平有效)

在使用时,这么连接的输出口地址是P2.7=0的任何16位地址,7FFFH可作为该入口地址

7FFFH的由来(一定要记住,我觉得应该会考):

P2.7~P2.0P0.7~P0.0

0xxxxxxxxxxxxxxx

暂时可把x设置为1,就可以使用它了

所以就为0111111111111111,7FFFH

使用代码:

MOVDPTR,#7FFFH;使DPTR指向74LS377输出口

MOVA,#data;输出的数据要通过累加器A传送

MOVX@DPTR,A;向74LS377扩展口输出数据

同上,此处连接的是P2.6,当P2.6为0时,0与x相或,值为x,1与x相或,值为1

,所以,我们不能使P2.6为1,若为1,RD引脚就没用了

此时

P2.7~P2.0P0.7~P0.0

x0xxxxxxxxxxxxxx

同上把x设置为1

1011111111111111

也就是BFFFH(同上一定要懂,主要要看P2口芯片,连接的引脚是哪个)

代码:

MOVDPTR,#0BFFFH;0可有可无

MOVXA,@DPTR

第5章:

Orz....真尼玛的累,各位同学辛苦了!

好好复习,回家过个年~~

第6章:

1:

按键抖动消除

解决方案:

硬件(RC滤波,信号锁存)

软件(读取一次状态(按键是按下,还是弹起),延时约30~50ms,再读取一次状态,看俩次状态是否一样,如果一样,那么就是这个状态,实际应用中就是通过软件来解决消除按键抖动的)

2:

数码管显示:

记住数码管各个LED的位置(a、b、c、d、e、f、g、dp)

以数字3为例,需要把a、b、c、d、g五个LED点亮

共阳极:

(点亮的部分设置为0)

dpgfedcba

10110000

所以连接P0口的数据为0xB0(10110000)

共阴极:

(点亮的部分设置为1)

dpgfedcba

01001111

所以连接P0口的数据为0x4F(01001111)

数码管显示分为动态显示和静态显示,当数码管就一个(指个数比较少)时,使用静态显示,当个数比较多时,使用动态显示,动态显示是指几个数码管按照一定的顺序依次点亮,每个点亮nms,因为视觉暂留,人会认为数码管都是亮的

3:

AD转换

芯片:

ADC0809

ADC0809的讲解:

Pg197页:

ADC0809芯片:

Pg:

282例题(这是他上课具体提出的题目)

稍微针对该题题目说一下难点:

通道的选择:

如图所示,题中说选择通道0也就是说A,B,C均为0

然后,也74LS373锁存器,用于锁存信号,A,B,C为0,就是P0口的P0.0,P0.1,P0.2为0,然后P2.7口与WR和RD分别相或,为了不干涉它们的工作,该位置0,所以设置通道0的地址是:

0111111111111000(7FF8H也就是C语言里的0x7FF8(小写0x7ff8也是可以的))

芯片的使用:

1:

先将地址确定

2:

启动芯片(此时,EOC变0,表示芯片正在运作)

3:

当EOC(检测繁忙)由0变为1时,表示数据转换结束

4:

读取数据,先读取的低字节,后是高字节

DA转换DAC0832

分辨率:

△=模拟量输出的满量程值/2^n

比如:

满量程为1,8位的二进制D/A转换器

△=1、256=0.39%

Pg207页例题

书上的图错误,将Iout0改为Iout1,Iout1改为Iout0

P2.7控制CS与XFER,片选信号,低电平有效,所以控制地址为7FFFH,不再解释

操作顺序:

1:

先把准备要转换的数据

2:

拉低CS引脚,开始转换

Pg287页例题

实验书上的三角波实验

这几个例题想说些什么,但又不知道说啥好了,还是在自己看吧,自己领悟吧,能理解就理解,理解不了就算了,或者问我

第7章:

万用表:

略,都懂的

逻辑笔:

用于测试数字电路中测试点的电平状态(高或低)及脉冲信号的有无

逻辑分析仪:

获取通道的逻辑信号

第8章:

常用数据类型位/bit字节数/byte值的范围

bit10,1

signedchar81-128~+127

unsignedchar810~255

signedint162-32768~+32767

unsignedint1620~65535

float324。

sbit10或1

sfr810~255

前五个要记住

其中sbi

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1