单片机原理及应用专升本复习总结.docx
《单片机原理及应用专升本复习总结.docx》由会员分享,可在线阅读,更多相关《单片机原理及应用专升本复习总结.docx(51页珍藏版)》请在冰豆网上搜索。
单片机原理及应用专升本复习总结
《单片机原理及应用》复习
单片机(MicroControllerUnit,简称MCU):
把中央处理器(CPU)、随机存储器(RAM)、只读存储器(ROM)、输入/输出接口电路、定时器/计数器以及串行通信接口等集成在一块芯片中,构成一个完整的微型计算机。
第一部分时钟与复位
一、振荡器和时钟电路
1.内部时钟方式
2.外部时钟方式:
外部时钟信号接至XTAL1,XTAL2悬空(P34图2-11)
二、时序
1.振荡周期:
也称为时钟周期。
取决于晶振的频率。
(以12MHz为例)
2.状态周期:
两个时钟周期为一个状态周期,用S表示。
两个时钟周期作为一个状态的两个节拍,分别称为节拍P1和节拍P2。
3.机器周期:
一个机器周期包含6个状态周期,用S1、S2、…、S6表示;共12个节拍,依次可表示为S1P1、S1P2、S2P1、S2P2、…、S6P1、S6P2。
4.指令周期:
执行一条指令所占用的全部时间,它以机器周期为单位。
(1)1机器周期指令:
ADDA,Rn(P291:
1us)
(2)2机器周期指令:
INCDPTR(P292:
2us)
(3)4机器周期指令:
MULAB;DIVAB;DAA(P292:
4us)
应用举例:
8051晶振采用12MHz,执行完下面子程序,需要花多少时间?
DL:
MOVR7,#20
(1)
DL2:
MOVR6,#250
(1)
DL1:
DJNZR6,DL1
(2)
DJNZR7,DL2
(2)
RET
(2)
1×1us+250×20×2×1us+20×1×1us+20×2×1us+2×1us≈10ms
-------------------------------------------------------------------------------
注意事项
(I)在每个机器周期内,ALE信号两次有效(出现两次高电平,每次高电平的宽度为2个时钟周期)。
(1)第一次出现在S1P2-S2P1
(2)第二次出现在S4P2-S5P1
(II)没有3机器周期指令
(III)定时器是对机器周期(不是时钟周期)进行计数,每个机器周期加1。
(IV)RST引脚端出现两个机器周期(24个时钟周期)以上高电平时,80C51进入复位状态。
三、复位和复位电路
1.复位电路
(1)上电复位
(2)按键复位
注意事项
(I)复位工作过程
(II)复位条件:
在RST引脚保持24个时钟周期以上的高电平
(III)复位电路中电阻和电容的取值,保证复位条件得到满足。
2.复位状态
单片机在RST引脚高电平的控制下,特殊功能寄存器和程序计数器PC复位后的状态如下表所示。
(1)(SP)=07H;(P0-P3)=(FFH),其余专用寄存器全为0;
(2)(PC)=0000H:
复位后,单片机从0000H地址处开始执行程序
ORG0000H
START:
MOV..
…
END
(3)复位时:
ALE和
引脚成输入状态,为高电平
(4)P0-P3这四个双向口皆处于输入口。
第二部分并行I/O
(一)四个I/O口(P0-P3)
一、P1口
Output:
内部总线=1P1.x=1
内部总线=0P1.x=0
Input:
输入时,Q0管要截止,内部总线要先写入1
P1.x=1内部总线=1
P1.x=0内部总线=0
应用举例
1.P1口作为输出口使用
下图为8段共阴数码管与8051的连接,请写出显示如下字符时P1口的输出值。
03FH106H25BH34FH466H56DHP73H707H87FHC39H
思考题:
如果采用的是共阳极数码管,显示上述字符时P1口应输出何值?
2.P1口作为输入口使用
根据下图,当KEY按下时,LED点亮;当KEY未按时,LED灭。
KEY:
MOVP1,#01H
MOVA,P1
ANLA,#01H
JZNEXT1
SETBP3.0
AJMPNEXT2
NEXT1:
CLRP3.0
NEXT2:
AJMPKEY
二、P2口
MUX:
多路开关,由控制信号线决定开关是打向左还是打向右。
(控制线、读线、写线均由CPU产生)
引脚复用:
减少引脚数目,降低芯片成本
1.作为普通I/O口使用(与P1口相同):
控制=0,开关打向左端
2.作为高8位地址输出口:
控制=1,开关打向右端
(注意:
高8位地址存放在DPH中)
地址线=1P2.x=1
地址线=0P2.x=0
三、P3口
引脚复用:
减少引脚数目,降低芯片成本
1.作为普通I/O口使用:
第二功能输出端要保持高电平
(1)Output:
内部总线=1P3.x=1
内部总线=0P3.x=0
(2)Input:
内部总线先向锁存器写入1
P3.x=1内部总线=1
P3.x=0内部总线=0
2.作为第二功能I/O口:
锁存器输出端保持1
(1)Output:
第二功能输出线=1P3.x=1
第二功能输出线=0P3.x=0
(2)Input:
第二功能输出线=1
P3.x=1第二功能输入线=1
P3.x=0第二功能输入线=0
(注:
P3口各位的第二功能见P16表2-2)
四、P0口
1.作为普通I/O口使用:
控制线=0,V1截止,多路开关打到0端
Input:
内部总线先写入1,V2截止
P0.x=0内部总线=0
P0.x=1内部总线=1
Output:
内部总线=0P0.x=0
内部总线=1P0.x=高阻
2.作为地址/数据口使用:
控制线=1,多路开关打到1端
Output:
地址/数据线=1P0.x=1
地址/数据线=0P0.x=0
重点:
P0口是三态口,输出时可能为1,可能为0,还可能是高阻
(举例说明为何要高阻状态,以数据传输说明)
重点:
P0口是时分复用,先发送地址,再发送数据
Input:
P0.x=0内部总线=0
P0.x=1内部总线=1
四个并行口的总结
1.P0口为三态双向口,负载能力为8个TTL电路,P1~P3口为准双向口(用作输入时,口线被拉成高电平,故称为准双向口),负载能力为4个TTL电路。
2.在作为一般输入时,都必须先向锁存器写入‘1’,使驱动管截止;
(复位后:
(P0-P3)=(FFH)进行读操作时,这四个双向口皆处于输入口)
3.读入时,分为读引脚和读锁存器两种
(1)读引脚:
是读外部接口的电平信号,读引脚信号有效。
MOVA,P1
(2)读锁存器:
是将接口锁存器的Q端信号读回,写锁存器信号有效。
读锁存器指令主要用于读—修改—写指令。
如下列这些指令:
ANLP1,A
XRLP3,A
INCP2
4.四个I/O口在实际使用中,一般遵循以下用法:
P0口一般做系统扩展地址低8位/数据复用口;
P1口一般做I/O扩展口;
P2口做系统扩展地址高8位和I/O口扩展的地址译码用;
P3口做中断输入、定时输出、串行通用口使用。
(二)并行I/O口的扩展
一、简单并行I/O接口的扩展(见P168图8-9)
(P2.0=0时,同时选中273、244两个口)
二、可编程I/O接口的扩展---8155
(说明:
此部分内容放至存储器扩展部分再讲述)
第三部分存储器
存储器(Memory):
程序存储器(ROM)和数据存储器(RAM)两种。
ROM:
断电后存储在里面的数据不会丢失,用来存储程序代码;需采用特殊方法进行擦除。
1.EPROM2.EEPROM3.FLASH
RAM:
断电后存储在里面的数据会丢失;
8051芯片内含有4KB的ROM,256B的RAM(128B用户RAM,128B系统RAM)。
当需要更多的ROM或RAM时,需要连接外部的ROM或外部的RAM。
一、各种存储器之间的数据传送
1.ROM送至片内RAM(MOVC,MOV)
应用举例:
已知'A','B','C','D','E'存储在程序储器中,程序存储器的首地址为500H,编写一汇编程序,依次将这些数据读出,送入内部数据存储器,内部数据存储器首地址为30H。
ORG500H
fDATA:
DB'A','B','C','D','E'
ORG0000H
Reset:
LJMPMain
ORG0050H
Main:
MOVR0,#5
MOVR1,#30H
MOVDPTR,#fDATA
SLOOP:
MOVA,#0
MOVCA,@A+DPTR
MOV@R1,A
INCDPTR
INCR1
DJNZR0,SLoop
STOP:
LJMPSTOP
END
2.片内ROM送至片外RAM(MOVC,MOV,MOVX)
应用举例:
已知'A','B','C','D','E'存储在程序储器中,程序存储器的首地址为500H,编写一汇编程序,依次将这些数据读出,送入外部数据存储器,外部数据存储器的首地址为2000H。
ORG500H
fDATA:
DB'A','B','C','D','E'
ORG0000H
Reset:
LJMPMain
ORG0050H
Main:
MOVR2,#0
SendLoop:
MOVDPTR,#fDATA
MOVA,R2
MOVCA,@A+DPTR
MOVDPH,#20H
MOVDPL,R2
MOVX@DPTR,A
INCR2
CJNER2,#5,SendLoop
STOP:
LJMPSTOP
END
3.片内RAM送至片内RAM
应用举例:
将位于片内RAM的30H处开始存放的10个数据依次传送至片内RAM的40H处开始存放。
(略)
4.片内RAM送至片外RAM
应用举例:
将位于片内RAM的30H处开始存放的10个数据依次传送至片外RAM的0030H处开始存放。
(略)
5.片外RAM送至片内RAM(略)
应用举例:
将位于片外RAM的0030H处开始存放的10个数据依次传送至片内RAM的30H处开始存放。
(略)
6.片外RAM送至片外RAM
应用举例:
将位于片外RAM的0030H处开始存放的10个数据依次传送至片外RAM的3000H处开始存放。
ORG0000H
Reset:
LJMPMain
ORG0050H
Main:
MOVR2,0
SendLoop:
MOVDPTR,#0030H
MOVA,DPL
ADDA,R2
MOVDPL,A
MOVXA,@DPTR
MOVDPTR,#3000H
MOVA,DPL
ADDA,R2
MOVDPL,A
MOVX@DPTR,A
INCR2
CJNER2,#10,SendLoop
STOP:
LJMPSTOP
END
综合应用
1.从内部RAM30H单元开始,有10个单字节数据。
试编一个程序,把其中的正数、负数分别送40H和50H开始的内部RAM单元。
MOVR0,#30H
MOVR1,#40H
MOVA,#50H
MOVR7,#10
LOOP:
MOV20H,@R0
JB20H.7,FSHU
ZSHU:
MOV@R1,20H
INCR1
SJMPNEXT
FSHU:
XCHA,R1
MOV@R1,A
XCHA,R1
INCA
NEXT:
INCR0
DJNZR7,LOOP
END
2.将外部RAM的2000H~4FFFH区域之间的所有单元清零。
MOVDPTR,#2000H
LOOP:
CLRA
MOVX@DPTR,A
INCDPTR
MOVA,DPH
CJNZA,#50H,LOOP
END
3.设逻辑运算表达式为
,其中A,B,C分别为P1.0、P1.1、P1.2,D、E、F分别为内部RAM的22H.0、22H.3,22H.5,输出变量Y为P1.5,试编写一程序以软件的方法实现上述逻辑功能。
ABITP1.0
BBITP1.1
DBIT22H.0
EBIT22H.3
FBIT22H.5
YBITP1.5
MOVC,F
CPLC
ORLC,E
ANLC,D
CPLC
MOVD,C
MOVC,P1.2
CPLC
ORLC,B
CPLC
ANLC,A
ORLC,D
MOVY,C
END
难点:
熟练各种寻址方式的应用
1.立即寻址 2.寄存器寻址 3.直接寻址4.寄存器间接寻址5.变址寻址 6.相对寻址7.位寻址
二、存储器的扩展
MCS-51可以扩展64KB的外部的程序存储器和64KB的外部数据存储器。
外部数据存储空间可以作为扩展外围I/O的地址空间,这样,单片机就可以像访问外部RAM存储器那样访问外部接口芯片,对其进行读/写操作。
这些外部芯片必须从属于主机,受主机支配和指挥。
因此,主机与各外部扩展的器件之间必须互相连接,沟通信息。
连接各扩展部器件的公共信息线称为总线。
1.线性选择法:
将空余的地址总线(即除去存储器容量所占用的地址总线外)中的某一根地址线(通常是P2口的某—根线)接到外围芯片的片选端上,只要该地址线为低电平,就选中该芯片。
各芯片的地址空间
若将6116的F001H单元的内容读到内部RAM20H单元,可执行以下程序:
MOVDPTR,#0F001H
MOVXA,@DPTR
MOV20H,A
2.全地址译码法
将低位地址线作为芯片的片内地址(取外部电路中最大的地址线位数),用译码器对高位地址线进行译码,译出的信号作为片选线。
一般采用74LSl38作地址译码器。
如果译码器的输入端占用三根最高位地址线,则剩余的13根地址线可作为片内地址线,因此,译码器的8根输出线分别对应于一个8K字节的地址空间。
各芯片的地址空间
说明:
全地址译码法比线性选择法更节省引脚资源
综合应用题
第1题:
某一系统,采用8031单片机,需外扩16KB容量的程序存储器(提供2764、373、逻辑电路)要求a)画出扩展后的连接图。
b)写出这16KB的地址范围。
2764
(1)地址:
0000H——1FFFH2764
(2)地址:
2000H——3FFFH
第2题
1.下图中外部扩展的数据存储器容量是多少?
(2分)
2.三片6264的地址范围分别是多少?
(地址线未用到的位填1)(6分,)
3.若外部程序存储器已扩展(未画出),请编写程序,要求:
将62642#的前32个单元的内容送入40H~5FH中;(6分)
解:
1.外部扩展的数据存储器为3片8K的RAM,总共外扩容量为24K
2.A15A14A13地址范围
6264#10116000H~7FFFH
6264#2101A000H~BFFFH
6264#3110C000H~DFFFH
3.程序如下:
ORG0000H
RESET:
AJMPMAIN;转主程序
ORG0100H
MAIN:
MOVDPL#00H;初始化DPTR
MOVDPH,#0A0H
MOVR0,#40H;初始化R0
LOOP:
MOVXA,@DPTR
MOV@R0,A
INCDPTR
INCR0
CJNER0,#60H,LOOP
RET
第四部分中断与定时器
(一)中断
一、中断的概念
1.“中断”
中断是指计算机在执行程序的过程中,由于计算机系统内、外的某种原因使CPU暂时停止当前程序的执行,而转去处理该突发事件服务,处理完毕后,再返回原程序继续执行的过程。
2.中断技术的优点:
(1)提高了CPU的工作效率
(2)使CPU能及时处理实时测控现场中许多随机的参数和信息。
(3)使CPU具有了处理故障的能力,提高了系统可靠性。
3.几个概念:
(1)中断服务程序
(2)中断请求(3)断点
(4)响应中断(5)中断返回(6)中断优先级(7)中断嵌套
(8)中断源(9)中断矢量(中断程序入口地址)
8051单片机的有5个中断源以及对应的中断入口地址:
INT0:
0003H
T0:
000BH
INT1:
0013H
T1:
001BH
串行中断:
0023H
二、与中断控制有关的寄存器(主要有4个寄存器)
1.中断源的中断请求标志TCON:
TF1:
定时器T1的溢出中断请求标志位。
TF0:
定时器T0的溢出中断请求标志位。
IE1:
外部中断1的中断请求标志位。
IT1:
外部中断的中断触发方式控制位。
IE0:
外部中断的中断请求标志位,
IT0:
外部中断0的中断触发方式控制位。
2.中断允许控制IE与串行口控制寄存器SCON
EA:
中断允许总控制位。
ES:
串行口中断允许位。
ET1:
定时器/计数器T1的溢出中断允许位。
EX1:
外部中断1中断允许位。
ET0:
定时器/计数器T0的溢出中断允许位。
EX0:
外部中断0中断允许位
SCON:
其低2位TI和RI锁存串行口的接收中断和发送中断。
3.中断优先级控制寄存器IP:
IP中各位的含义(为1时是高优先级,为0时是低优先级):
PS:
串行口中断优先级控制位。
PT1:
定时器/计数器T1中断优先级控制位。
PX1:
外部中断中断优先级控制位。
PT0:
定时器/计数器T0中断优先级控制位。
PX0:
外部中断中断优先级控制位。
同一级优先级从高到低的顺序为:
INT0,T0,INT1,T1,串行口。
三、中断响应的条件:
1.有中断源发出中断请求;
2.中断总允许位EA=1,即CPU开中断;
3.申请中断的中断源的中断允许控制位为1,即中断没被屏蔽;
4.无同级或更高级中断正在被服务;
5.当前的指令周期已经结束。
INT0,INT1外部中断应用举例
如下图所示,要求将开关所设的数据读入单片机内,并依次通过P1.0~P1.3驱动发光二极管。
现要求采用外部中断边沿触发方式。
ORG0000H
RESET:
AJMPMAIN
ORG0003H
AJMPINT0_ISR
ORG0050H;主程序
MAIN:
SETBIT0
SETBEX0
SETBEA;CPU开中断
HERE:
SJMPHERE;等待中断
ORG0200H
INT0_ISR:
MOVA,#0F0H
MOVP1,A
MOVA,P1
SWAPA
MOVP1,A
RETI
END
(二)定时器
一、定时电路系统
二、与定时有关的寄存器
1.定时器方式寄存器TMOD
M1.M0:
工作方式选择位,有4种工作方式
M1M0=00时,定时方式0,是一个13位计数器,由TL0的低5位和TH0的8位所构成。
M1M0=01时,定时方式1,是一个16位计数器,由TH0(高8位)和TL0(低8位)构成
M1M0=10时,定时方式2,是一个能自动恢复初值的8位定时器/计数器。
M1M0=11时,只有定时器T0被选择为工作方式3,它被拆分成2个独立的8位计数器TL0和TH0。
C/T:
0-定时,1-计数
GATE:
0-由软件控制TR0或TR1位启动定时器工作
1-由中断引脚(P3.2)和(P3.3)输入电平分别控制T1或T0的运行。
2.定时器控制寄存器TCON
TF1:
定时器T1溢出标志。
TR1:
定时器T1的运行控制位,由软件置位或复位。
TR1=1,允许T1计数;当TR1=0,禁止T1计数。
TF0:
定时器T0溢出标志,其含义与TF1类同
TR0:
定时器T0的运行控制位,其含义与TR1类同。
3.TH0,TL0,TH1和TL1
三、定时时间的计算
定时器的定时时间t为:
t=(2x-T0初值)×机器周期T
=(2x-T0初值)×时钟周期×12
注:
X根据定时器的工作方式0~3分别取13或16或8
例1:
假设8051单片机晶振频率为12MHz,定时器T0初值为912(即0390H),当T0工作在方式0时的定时时间是多少?
解:
由上述公式可得:
定时时间
t=(213-912)×1/12MHz×12=8000s=8ms
例2:
假设8051单片机晶振频率为12MHz,所需定时时间为250s,当T0工作在方式0时T0计数器的初值是多少?
解:
由定时时间t=(213-T0初值)×机器周期T,可得:
T0初值=213-定时时间t/机器周期T=213-250s/1s=8192-250=7942D=1111100000110B。
十六进制表示,高8位为0F8H,低5位为06H。
其中高8位放入TH0,即TH0=0F8H;低5位放入TL0,即TL0=06H。
---------------------------------------------------------------------
T0,T1定时/计数器应用举例
(一)计数器应用举例(略,参见真题分析)
(二)定时器应用举例
1.查询方式实现
(1)设8051单片机晶振频率为12MHz,使用定时器T1以方式0产生周期为500s的等宽正方波连续脉冲,并由P1.0输出。
(用查询方式)
解:
设待求的计数初值为X,则:
(213-X)×1s=250s
得:
X=7942D=1111100000110B。
其中高8位放入TH1,即TH1=0F8H;低5位放入TL1,即TL1=06H。
TMOD寄存器初始化:
T1工作在方式0,用TR1为定时功能,故TMOD=00H。
ORG0000H
MOVTMOD,#00H
MOVTH1,0F8H
MOVTL1,06H
CLREA
SETBTR1
SETBTR1
LOOP:
JNBTF1,LOOP
CPLP1.0
MOVTH1,0F8H
MOVTL1,06H
CLRTF1
AJMPLOOP
(2)试编写程序将内部RAM以30H为起点地址的X个数传送到外RAM以BUF为起点地址的区域,要求每隔500ms传送一个数据,设8031型单片机的时钟频率为6MHz。
(略)
2.中断方式实现.
设单片机的系统时钟频率为12MHz,试编程输出频率为100KHZ,占空比为2:
10的矩形波。
解:
信号频率为100KHz,则周期为1/100kHz=10s,占