资源描述
很有用的笔记
本文的对象是MCS-51单片机且晶振频率是12MHz
一些周期:
晶振频率f;
振荡周期: T1=1/f;时钟周期:T2=2*T1=2/f;机器周期:T3=6*T2=6*2/f=12*f;
若f=6MHz 指令周期=(1~4)*机器周期T3=2~8(us);
振荡周期
若f=12MHz 指令周期=(1~4)*机器周期T3=1~4(us);
时钟周期
机器周期=6*时钟周期 机器周期
MCS—51型单片机的中断系统
1.中断的概念:(简单地说就是中断函数的在特定的时刻被调用,然后中断函数还一可以继续调用其它函数等等,当然能进入到这中断函数是有条件的!个人感觉咯!!!)
中断是通过硬件来改变CPU的运行方向的,当CPU正在执行主程序时,外部或内部发生的某一事件(如某个引脚山上的电平的变化,一个脉冲的发生或计数器的技计数溢出等)请求CPU迅速处理,CPU暂时中断当前程序的执行而转而执行相应的处理程序,待处理程序执行完毕后,CPU再继续执行原来被中断的程序,这样的过程称为中断,如图
图5.2中断示意图
中断需要解决两个主要问题:一是如何从主程序转到中断服务程序;而是如何从中断服务返回主程序。
2.中断的特点
(1)分时操作。 单片机有了中断功能,能使CPU与外设有串行工作变为分时并行工作,实现CPU和外设的同步工作,大大提高了单片机的效率。
(2)实时处理。 在实现控制中,现场的各种参数、信息均随时间和现场而变化。这些外界变量可根据要求随时向CPU发出中断申请,请求CPU及时处理。如中断条件满足,CPU会马上响应,进行处理。
(3)故障处理。针对随机发生的情况或故障如掉电、存储出错、电路故障等,可通过中断系统由故障源向CPU发出中断请求,再有CPU转到相应的故障处理程序进行处理不必停机。
3.中断源和中断标志:
1)INT0:外部中断0中断请求,由P3.2引脚输入。通过IT0引脚(TCON.0)来决定是低电平有效或者还是下跳有效。一旦输入信号有效,就向CPU申请中断,并建立IE0标志。中断入口地址是0003H。
2)INT1:外部中断1中断请求,由P3.3引脚(TCON.2)来决定是低电平有效还是下跳有效。一旦输入有效,就向CU申请中断,并建立IE1标志。中断入口地址为000BH。
3)TF0:定时器0溢出中断请求。当定时器0产生溢出时,其中断请求标志位(TCON.5)置位(由硬件自动执行),请求中断处理。中断入口地址是0013H。
4)TF1:定时器1溢出中断请求,当定时器1产生溢出时,其中断请求标志置位(由硬件自动执行),请求中断处理。中断入口地址为:001BH。
5)RI或TI:串行中断请求。当接收或发送完一串行帧时,内部串行口中断请求标志位RI或TI置位(由硬件自动执行),请求中断。中断入口地址为0023H;
中断优先权的控制
8051单片机有两个中断优先级,每个中断源都可以通过编程确定为高优先级中断或低优先级中断,因此,可实现二级嵌套。同一优先级别中的中断源可能不止一个,也有中断优先级排队的问题,专一的寄存器IP位中断优先级寄存器,锁存各中断源优先级控制位,IP寄存器各位定义如图5.6所示
PS
PT1
PX1
PT0
PX0
PS:串行口中断优先级控制;
PT1:T1中断优先级控制;
PX1:INT1优先级控制为;
PT0:T0中断优先级控制位;
PX0:INT0中断优先级控制位;
对于同级中断源,系统默认的优先级顺序如下:
外部中断0 > 定时器/计数器0 > 外部中断1 > 定时器/计数器1 > 串行中断;
对于中断优先级和中断嵌套,MCS-51单片机有以下3条的规定:
(1) 正在进行的中断过程不能被新的同级或低优先级的中断请求中断;
(2) 正在进行的低优先级中断服务进程能被高优先级中断请求中断,实现两级中断嵌套;
(3) CPU同时接收几个中断请求时,首先响应优先级最高的中断请求。
中断嵌套只能被高优先级中断,低优先级不中断高级优先级,同一优先级的中断也不能相互中断。
外部中断的查询方式:外部中断0->定时中断0->外部中断1->定时中断1->串行中断
中断控制
中断控制包括中断开放、中断判别、中断响应、中断查询、中断处理等。
它们分别由特殊寄存器IE和IP的相应位控制
1) 中断的开放和屏蔽
2) MCS-51系列单片机的5个中断源都是可屏蔽中断,其中中断系统内部设有一个专用寄存器IE,用于控制CPU对各中断源的开放或屏蔽。IE寄存器各位定义如图所示
EA
ES
ET1
EX1
ET0
EX0
1) EA:总中断允许控制为:EA=1,开放所有中断,之后各中断源的允许和禁止可通过相应的中断允许位单独加以控制;EA=0 ,禁止所有中断
EA就像一个总开关,而其后还有其他的分支开关来控制各支路。
2) ES:串行口中断允许位。ES=1,允许串行口中断:ES=0,禁止串行中断。
3) ET1(或ET0)定时中断1(0)中断允许位。ET1(或ET0)=1,允许定时中断;ET1(或ET0)=0,禁止定时中断;
4) EX1(或EX0)外部中断1(或0)中断允许位。EX1(EX0)=1,允许外部中断1(或0);EX1=0,禁止外部中断1(或0;
中断响应:
1.中断响应的条件
单片机响应的条件为:中断源有请求(IE相应位置1),且CPU开中断(即EA=1).这样,在每个机器周期内,单片机对所有中断源都进行顺序检测,并可在任一个周期的S6期间,找到所有有效的中断请求,并对其优先级进行排队.但是,必须满足下列条件:
1) 无同级或高级中断正在服务;
2) 现行指令将执行到最后一个机器周期且已结束;
3) 若现行指令为RETI或需访问特殊功能寄存器IE或IP的指令时,执行完该指令且紧随其后的另一条指令也已执行完。
4) 单片机便在紧接着的下一个机器周期的S1期间响应中断,否则,将丢弃中断查询结果。
2.中断响应的过程:
单片机一旦响应中断,首先对相应的优先级有效触发器位置。然后执行一条由硬件产生的子程序调用指令,将断点地址压入堆栈,再把与各中断源对应的中断服务程序入口地址送入程序计数器PC,同时清除中断请求标志(串行口中断和外部电平)
中断的嵌套:
MC-51只有能有两个中断嵌套!嵌入式系统可以多个嵌套!
定时器和计数器:
8051单片机内部有两个16位的可编程定时器/计数器,称位定时器0(T0)和定时器1(T1),可编程选择其作为定时器或作为计数器。
8051定时器/计数器的核心是一个加1计数器,它的输入脉冲有两个来源:一个是外部脉冲源,另外一个是系统机器周期(时钟周期经12分频以后的脉冲信号)。有定时器0定时器1、定时方式寄存器TMOD和定时器控制寄存器TCON组成。定时器0由TH0和TL0组成,定时器1由TH1和TL1组成。
2. 定时器/计数器的工作原理
当定时器/计数器设置为定时工作方式时,计数器对内部机器周计数,每过一个机器周期,计数器加一,直至计满溢出。定时器的定时时间与系统的振荡频率密切相关。因为MCS-51型单片机的一个机器周期由12个振荡脉冲组成,如果单片机系统采用12MHz晶振,则计数周期为一μs。适当选择定时器的初值可获取各种定时时间。
当定时器/计数器设置为计数工作方式时,计数器对来自输入引脚T0(P3.4)和T1(P3.5)的外部信号计数,外部脉冲的下降沿将触发计数。在每个机器周期的S5P2期间采样引脚输入电平,若前一个机器周期采样值为1,后一个机器周期采用值为0,则计数器加1。新的计数值是在检测到输入引脚电平发生1到0的负跳变,在下一个机器周期的S3P1期间装入计数器中,可见,检测一个由1到0的负跳变需要两个机器周期,所以最高检测信号频率应为振荡频率的1/24;
3. 控制定时器的特殊功能寄存器
定时器/计数器的初始化是通过定时器/计数器的方式寄存器TMOD和控制寄存器TCON完成。
1) 定时器/计数器方式寄存器TMOD
TMOD为定时器0、定时器1的工作方式寄存器,其格式如下图所示。
GATE
C/T
M1
M0
GATE
C/T
M1
M0
定时器/计数器方式寄存器
GATE=0时,只要用软件使TCON中的TR0和TR1为1,就可以启动定时/计数器工作;GATA=1是要用软件使TR0和TR1为1,同时外部中断引脚或也为高电平是,才能能够启动定时器/计数器工作。即此时定时器的启动多了一条件。
C/T:定时/计数模式选择为。C/T=0为定时模式;C/T=1为计数模式;
M1M0:工作方式设置位;定时器/计数器有四种工作方式
如:若TMOD=0x09那么就有GATE=1
TMOD的低4位为定时器0的方式字段,高4位为定时器1的方式字段,他们的含义完全相同。各位的意义如下:
(1) M1M0:工作方式选择位。
0 0 方式0: 13位寄存器/计数器
0 1 方式1: 16位定时器/计数器
1 0 方式 2: 常数自动重装的8位定时器/计数器
1 1 方式 3: 仅适用于T0,分为两个8位定时器/计数器
(2) C/T:定时器/计数器
0: 定时方式。
1: 计数方式。
(3) GATE: 门控位
GATE=0时,只要TRi=1,定时器/计数器就开始工作,称为软启动。
GATE=1时,只有INTi引脚和Tri引脚同时为1时,定时器/计数器才开始工作,主要用于测量INT引脚上高电平脉冲的宽度,称为硬启动。
2) 定时器/计数器控制寄存器TCON
TCON的作用是控制定时器/计数器的启动、停止,标志定时器的溢出和中断情况,其格式如图所示。
TF1
TR1
TF0
TR0
定时器/计数器控制寄存器
(1) TF1(TF0):定时器/计数器T1(T0)的溢出标志。
当T1(T0)被允许技术后,T1(T0)从初始值开始加1计数,最高位产生溢出时,该位由内部硬件位置,并向CPU请求申请中断。当CPU响应时,由硬件清零。
(2) TR1(TR0)定时器/计数器T1(T0)的运行控制位。有软件置1或清零来启动或关闭定时器/定时器。
定时器/计数器的应用
(1) 确定工作方式,对TMOD赋值。
(2) 计算定时或计数的初值,将初值写入TH0、TL0或TH1、TL1。
定时器/计数器的初值因工作方式的不同而不同。设最大计数值为M,则各种工作方式下的M值如下:
方式0:M=2^13=8912;
方式1:M=2^16=65536;
方式2:M=2^8=256;
方式3:定时器0分为两个8位计数器,所以两个定时器的M值为256。
因为定时器/计数器工作方式的实质是做“加1”计数,所以,当最大计数值M值已知时,初值X可计算如下:X=M-计数值。其中X是变成十六位的二进制数高八位是TH0(TH1)的值,低八位是TL0(TL1)的值。
(3) 根据需要开启定时器/计数器中断,对IE寄存器赋值。
(4) 启动定时器/计数器工作,将TR0或IR1置“1”;
例题:设系统时钟频率为12MHz,利用定时器/计数器T0编程实现从P1.0输出周期为20ms的方波。
解:从P1.0输出周期为20ms的方波,只需要P1.0每隔10ms去反义词。当系统时钟为12MHz,定时器/计数器T0工作方式1时,最大的定时时间为2^16us满足10ms,的定时要求。系统时钟为12Mhz,计数值为10 000,那么初值为X=M-计数值=65536-10 000=55536=11011000 11110000(变成16位的二进制数高八位是TH0(TH1)低八位是TL0(TL1))
键盘分编码键盘和非编码键盘:
编码键盘:用硬件实现键的识别,非编码键盘主要由用户用软件来实现键盘的定义和识别,单片机中一般使用非编码键盘,这将在定义键盘的具体功能方面具体灵活性。
非编码键盘:独立键盘和矩阵键盘(行列键盘)
矩阵键盘一般的原理图:
非编码键盘的扫描的方法:
1. 查询方式: 在查询方式中判读是否有按键按下的方法是: 先由相应的I/O接口列线输出为0电平.再由相应的I/O接口将所有的行线结果输入到CPU中的累加器A内。若有行线输入为0,则有按键按下,反之则没有按键按下。
判断是否有某按键按下(即确定键号)的方法是:一次轮流将列线输出为0电平,然后检查各列线的状态。若某行线输入为0,则对应的该行与该列的按键被按下,即可确定对应键号。
2. 中断方式:为了提高CPU的效率,也可以采用中断扫描方式。…..
很重要的关系:
线与(&)和线或(|):I/O口 不是高阻状态(即没有三态)则输出线与接口相连的关系是线与(&)的关系;如果有三态的则为线或(|)关系;
三态:高电平(低阻状态),低电平(低阻状态),高阻态(即输出端与其它电路相连相当于开路)
串行通信与并行通信:
概念:
并行通信是指各个数据位同事进行传送同时,进行传送的数据方式,因此有多少个数据位,就需要多少根数据线。并行通信的特点是:传送数据快,效率高,但成本很高,通常只适合30米距离内传送数据。
串行数据传送:按位顺序进行,最少只需两根传输线即可完成。因此,传送的速度慢,效率低,但传送距离远,而且可以使用现有的通信通道(如电话线,各种网络等)故在集散控制系统中远距离通信使用很广。
串行通信:
根据同步时钟提供的不同,串行通信可分为异步串行(或称串行异步)和同步串行两种方式。在单片机中使用大都是异步串行通信在此仅介绍异步串行通信方式。
1. 异步串行通信的字符格式
在异步通信中,结合搜是依靠字符帧格式来判断发送端开始发送和结束发送的时间。字符帧格式是异步通信的一个重要指标。
字符帧也叫数据帧,由四部分组成:起始位,数据位,奇偶校验位和停止位。
(1) 起始位:位于字符帧开头,只占一位,为逻辑0低电平,用于向接收设备表示发送端开始发送一帧信息。
(2) 数据位:紧跟起始位之后,用户根据情况可取5、6、7或8位,低位在前高位在后。
(3) 奇偶校验位:位于数据位之后,仅占一位,用来表示串行通信中采用奇校验还是偶校验,由用户决定。
(4) 停止位:位于字符帧最后,为逻辑1高电平。通常取1、1.5或2位,用于向接收端表示一帧字符信息已发送完,也为发送下一帧做准备。
2. 异步串行通信的传送速率
异步串行通信的传送速率用于表示数据传送的快慢。在串行通信中,以每秒钟传送二进制的位数来表示,也称波特率(baud rate),单位为位/秒(bps)或波特(baud)。波特率既反映了串行通信的速率,也可以反映了对传输通道的要求,波特率越高,要求传输通道的频带也越宽。在异步通信时,波特率为每秒传送的字符个数和每字符所含二进制位数的乘积。例如:某异步通信每秒传送的速率为120个字符/秒,而该异步串行通信的字符格式为10位(1个起始位,7个数据位,1个奇偶校验位和1个停止位),则该串行通信的波特率为:
120字符/秒×10位/字符=1200位/秒=1200波特;
通常异步通信的的波特率为50~9600bps。
3. 异步串行通信的通信制式:
根据同一时刻串行通信的数据方向,异步串行通信分为以下3种数据通路形式:
(1) 单工形式(Simplex)。在单工方式下,数据的传送是单向的。通信双方中,一方固定为发送方,另一方固定为接收方。其间只需一个数据线进行数据传送。
(2) 全双工形式(Full-duplex)。在全双工方式下,数据的传送是双向的,且可以同时接收和发送数据,其间需要两根数据线进行数据传送。
(3) 半双工形式(Half-duplex)。在半双工方式下,数据传送也是双向的,但与全双工方式不同的是:任何时候只能由其中一方进行发送,而另一方接收。一次,在半双工方式下,通信双方既可以使用一条数据线,也可以使用两条数据线。
MCS-51型单片机的串行口及控制寄存器
MCS-51型单片机的串行口是全双工的串行口,而且其异步通用接收发送器也已集成在芯片内部,作为单片机的组成部分。他既可以实现串行异步通信,也可以为同步移位寄存器使用。
1. MCS-51串行口的结构
MCS-51内部有两个独立的接收、发送缓冲器SBUF。SBUF属于特殊功能寄存器。发送缓冲器只能写入不能读出,接收缓冲器只能读出不能写入,二者共用一个字节地址(99H)。
当数据由单片机内部总线传送到发送SBUF时,即启动一帧数据的串行发送过程,发送SBUF将并行数据转换成串行数据,并自动插入格式位,在移动时钟信号作用下,将串行二进制信息由TXD(P3.1)引脚按设定波特率逐位的发送出去.发送完毕后TXD引脚呈高电平,并置TI标志位1,表示一帧数据发送完毕。
当RXD(P3.0)引脚由高电平变为低电平时,表示一帧数据的接接收已经开始。输入位移寄存器在位移时钟的作用下,自动滤除格式信息,将二进制数据逐位地接收进来.接收完毕后,将串行数据转换为并行数据 传送到接收SBUF中,并置RI标志位为1,表示一帧数据接收完毕。
2. MCS-51串行口控制寄存器
在MCS-51型单片机中,与串行通信有关的控制寄存器如下。
1) 串行口控制寄存器SCON
SCON寄存器是MCS-51单片机一个可寻址专用寄存器,用于串行数据通信的控制,其字节地址为98H,位地址为98H~9FH。SCON寄存器内容表示如下:
SM0
SM1
SM2
REN
TB8
RB8
T1
RI
各位功能如下:
(1) SM0SM1:串行工作方式选择位。
SM0 SM1
工作方式
功能
波特率
0 0
方式0
8位同步移位寄存器
ƒosc/12
0 1
方式1
10位UART
可变
1 0
方式2
11位UART
ƒosc/64(或ƒosc/32)
1 1
方式3
11位UART
可变
(2) SM2:多机通信控制位。仅当串行口工作于 方式2或方式3时,该位才有意义。
当串行口工作于 方式2或.3接收时,若SM2=1,则只有当接收到第9位数据(RB8)为1时,才将前八位数据送入SBUF中并置RI=1产生中断请求;否则将接收到的8位数据丢弃。而当SM2=0是,不管接受的第9数据位为0或1,都将前八位数据送入接收缓冲SBUF,并使RI=1产生中断。当串行口工作于方式0时,SM2一定要设为0
(3) REN:接收允许控制位。REN位用于对串行数据的接收控制。当REN位设为1时,允许串行接口接收;当REN位设为0时,禁止串行口接收。
(4) TB8:发送第9数据位。串行口工作于方式2或3时,TB8的内容是将要发送的第9数据位,其值由用户软件设置。在双机通信时,TB8位常作为奇偶校验位用;在多机通信时,常以TB8位的状态作为表示发送机发送的是地址帧还是数据帧。一般,TB8=0;发送的前八位数据是数据帧;TB8=1,发送的前八位数据为地址帧。
(5) RB8:接受的第9数据位。串行口工作于方式2或3时,RB8存放接受的第9位数据,也就是说,发送机发送的第9位数据TB8被接收机接收后,存放于接收机的SCON寄存器的RB8中。
(6) TI:发送中断标志。发送完一帧数据后,硬件自动置TI=1。该位可供软件查询或申请中断。与其他4个中断标志位不同,TI位必须要软件清零。
(7) RI:接收中断标志。接收完一帧数据后,硬件自动置RI=1。该位可供软件查询或申请中断。与其他4个中断标志位不同,RI位必须要软件清零。
2)电源控制寄存器PCON
I^2C串行总线的组成及工作原理
常用的串行扩展总线有:I^2C(Inter IC BUS)总线、单总线(1-WIRE BUS)、SPI(Serial Peripheral Interface)总线及Micro wire/PLUS等。
I^2C总线:
概述:I^2C总线是PHLIPS公司推出的一种串行总线,是具备多主机系统所需的包括总线裁决和高低速器件同步功能的高性能串行总线。
I^2C总线只有两根双向信号线。一根是数据线SDA,另一根是时钟线SCL。
用地址匹配来识别链接。
I^2C总线通过上拉电阻接正电源。当总线空闲时,将两线均为高电平。连到总线上的任一器件输出的低电平,都将要使总线的信号变低,即各器件的SDA及SCL都是线“与”的关系。
SDA与SCL的关系:一个时钟传输一个数据或者一组数据。
传输数据有效性:
I^2C总线进行数据传输时,时钟信号为高电平期间,数据线上的数据必须保持稳定,这样子芯片才可以读数据。只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许变化。
起始信号和终止信号
SCl线为高电平期间,SDA线由高电平向低电平的变化表示起始信号;SCL线为高电平期间SDA线由低电平向高电平的变化表示终止信号。
起始和终止信号都有主机发出,在起始信号产生后,总线就处于被占用的状态;在终止信号产生后,总线就处于空闲状态。连接在I^2C总线上的器件,若具有I^2C总线的硬件接口,则很容易检测到起始和终止信号。
接受器件接收到一个完整的数据自节后,有可能需要完成一些其他工作,如果处理内部中断服务等,可能无法立刻接受下一个字节,这是接收器件可以讲SCL线拉成低电平,从而是主机处于等待状态。直接接收器件准备好接受下一个字节时,再释放SCL线使之为高电平,从而使数据传送可以继续进行。
数据的传送:
1) 字节传送与应答
每一个字节必须保证是8位长度。数据传送石先传最高位(MSB),每一个被传送的字节后面都必须跟随一位应答位(即一帧共9位)。
存储器的操作:
MCS-51通过访问方式来区别物理内存位置,即使地址一样。
比如内部RAM的高128字节,如果用直接寻址,那么就是操作SFR;如果用间接寻址(MOVX @Ri,A)那么就是对RAM操作。
在C语言中,通过定义变量时加上关键字表示位置:
如unsigned char data a;表示内部RAM低128字节中定义一个无符号整数a。省略或data表示内部低128字节(用直接寻址);bdata表示在可位寻址区;idata表示内部高128字节(用MOV @Ri,A);pdata表示外部低256字节拓展RAM(用MOVX @Ri,A);xdata表示外部所有拓展RAM(用MOVX @DPTR,A);code表示ROM(用MOVC),通常用作数据表格。
串行口中有两个缓冲寄存器SBUF,一个是发送寄存器,一个是接收寄存器,在物理结构上是完全独立的。它们都是字节寻址的寄存器,字节地址均为99H。这个重叠的地址靠读/写指令区分:串行发送时,CPU向SBUF写入数据,此时99H表示发送SBUF;串行接收时,CPU从SBUF读出数据,此时99H表示接收SBUF。
展开阅读全文