单片机期末复习Word格式.docx
《单片机期末复习Word格式.docx》由会员分享,可在线阅读,更多相关《单片机期末复习Word格式.docx(17页珍藏版)》请在冰豆网上搜索。
RS0:
俩者用于选定4个工作寄存器组的某一组,00:
工作寄存器0组,01:
工作寄存器1组,10:
工作寄存器2组,11:
工作寄存器3组,(pg26页的工作寄存器组0、1、2、3)
OV:
判断运算结果是否溢出,其值为运算结果的最高位(bit7)和次高位(bit6)的异或
-:
暂留位,没用的,无视它
P:
奇偶校验位,累加器A中1的个数是奇数,则为1
单片机里的四个周期:
振荡周期:
振荡脉冲的周期,比如:
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、。
中断优先级控制位(应该不考):
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)立即寻址(程序存储器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中
将累加器A中的值送到R0中
将累加器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;
就要MOVX@Ri,A,R0之前已经用了,所以用R1
MOVX@R1,A;
传送数据到外部RAM的20H中
Pg95:
下面的程序段经汇编后,从2000H开始的各有关存储器单元的内容是什么?
ORG2000H
TAB:
DB10H,20H
DW2100H,23H
DWTAB
DB‘WORK’
ORG2000H是程序运行时需要把程序跳转到一个起始位置,(无视这句)
DB:
定义字节伪指令
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
个:
DIV(除法)的使用
DIVAB(A<
-A/B的商B<
-A/B的余数)
(此处的B寄存器是辅助累加器A完成乘除法运算)
注意没有逗号
Code:
先读取外部RAM2000H中的值
MOVA,@DPTR;
具体操作上面讲过
MOVB,#64H;
64H就是100的16进制,B作为被除数
DIVAB;
A/B=185/100,然后,商
(1)给A,余数(85)给B
将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仍可作为对外输出的时钟脉冲
高5位地址线(A8~12)
低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引脚就没用了
此时
x0xxxxxxxxxxxxxx
同上把x设置为1
1011111111111111
也就是BFFFH(同上一定要懂,主要要看P2口芯片,连接的引脚是哪个)
MOVDPTR,#0BFFFH;
0可有可无
MOVXA,@DPTR
第5章:
无
Orz....真尼玛的累,各位同学辛苦了!
好好复习,回家过个年~~
第6章:
按键抖动消除
解决方案:
硬件(RC滤波,信号锁存)
软件(读取一次状态(按键是按下,还是弹起),延时约30~50ms,再读取一次状态,看俩次状态是否一样,如果一样,那么就是这个状态,实际应用中就是通过软件来解决消除按键抖动的)
数码管显示:
记住数码管各个LED的位置(a、b、c、d、e、f、g、dp)
以数字3为例,需要把a、b、c、d、g五个LED点亮
共阳极:
(点亮的部分设置为0)
dpgfedcba
10110000
所以连接P0口的数据为0xB0(10110000)
共阴极:
(点亮的部分设置为1)
01001111
所以连接P0口的数据为0x4F(01001111)
数码管显示分为动态显示和静态显示,当数码管就一个(指个数比较少)时,使用静态显示,当个数比较多时,使用动态显示,动态显示是指几个数码管按照一定的顺序依次点亮,每个点亮nms,因为视觉暂留,人会认为数码管都是亮的
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也是可以的))
芯片的使用:
先将地址确定
启动芯片(此时,EOC变0,表示芯片正在运作)
当EOC(检测繁忙)由0变为1时,表示数据转换结束
读取数据,先读取的低字节,后是高字节
DA转换DAC0832
分辨率:
△=模拟量输出的满量程值/2^n
比如:
满量程为1,8位的二进制D/A转换器
△=1、256=0.39%
Pg207页例题
书上的图错误,将Iout0改为Iout1,Iout1改为Iout0
P2.7控制CS与XFER,片选信号,低电平有效,所以控制地址为7FFFH,不再解释
操作顺序:
先把准备要转换的数据
拉低CS引脚,开始转换
Pg287页例题
实验书上的三角波实验
这几个例题想说些什么,但又不知道说啥好了,还是在自己看吧,自己领悟吧,能理解就理解,理解不了就算了,或者问我
第7章:
万用表:
略,都懂的
逻辑笔:
用于测试数字电路中测试点的电平状态(高或低)及脉冲信号的有无
逻辑分析仪:
获取通道的逻辑信号
第8章:
常用数据类型位/bit字节数/byte值的范围
bit10,1
signedchar81-128~+127
unsignedchar810~255
signedint162-32768~+32767
unsignedint1620~65535
float324。
sbit10或1
sfr810~255
前五个要记住
其中sbi