单片机原理,接口及应用-第5章 单片机的定时计数器与串行接口_第1页
单片机原理,接口及应用-第5章 单片机的定时计数器与串行接口_第2页
单片机原理,接口及应用-第5章 单片机的定时计数器与串行接口_第3页
单片机原理,接口及应用-第5章 单片机的定时计数器与串行接口_第4页
单片机原理,接口及应用-第5章 单片机的定时计数器与串行接口_第5页
已阅读5页,还剩105页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

单片机原理、接口及应用

---嵌入式系统技术基础第5章单片机的定时/计数器与串行接口第1节单片机的定时器/计数器1定时/计数器的结构与工作原理2定时器/计数器的控制3定时/计数器的工作方式4定时/计数器的编程和应用1定时/计数器的结构与工作原理2定时器/计数器的控制3定时/计数器的工作方式4定时/计数器的编程和应用定时器——可根据设定时间进行计时的装置计数器——可对输入脉冲数进行统计的装置电子定时器机械定时器电子计步器机械计数器典型的定时器和计数器产品单片机纯软件定时/计数方法:定时——空循环预定周次,等待预定时间计数——读取I/O口电平,统计变化次数基本思路:CPU负责统计状态变化的次数,待预定结果出现后发出结束信息。delay(unsignedinttime){unsignedintj=0;for(;time>0;time--)for(j=0;j<125;j++);}存在问题:占用过多CPU机时单片机软硬件定时/计数方法:等待CPU响应系统时钟脉冲加1计数器溢出标志溢出定时器外来信号脉冲加1计数器溢出标志溢出等待CPU响应计数器外来信号脉冲加1计数器溢出标志溢出等待CPU响应系统时钟脉冲K定时/计数器定时器本质上是计数器,前者是对时钟脉冲进行计数,后者则是对外来脉冲进行计数计数器的溢出空间可随计数初值改变→定时时间tt=(计数器最大值-计数初值)×机器周期=(2n-a)×12/fosc(微秒)基本工作原理:定时时间t与n、x、fosc三个因素有关TFx(X=0、1)定时/计数器的结构两个外部引脚T0(P3.4)和T1(P3.5)两个16位定时器T0(TH0、TL0)和T1(TH1、TL1)两个控制寄存器TCON和TMOD1定时/计数器的结构与工作原理2定时器/计数器的控制3定时/计数器的工作方式4定时/计数器的编程和应用第6章单片机的定时器/计数器T0方式控制寄存器——TMOD控制寄存器——TCONGATEC/TM1M0GATEC/TM1M0D7D5D4D3D2D1D0TMODD6(89H)定时器1定时器0

T1门控位参与定时器的启停管理方式选择位00-方式001-方式110-方式211-方式3模式选择位CT=0-定时CT=1-计数

T1TF1TR1TF0TR0IE1IT1IE0IT08FH8DH8CH8BH8AH89H88HTCON8EH(88H)定时器控制位外部中断控制位启动控制位TR1=1-启动TR1=0-停止溢出标志位TF=1-溢出TF=0-清零门控位允许TR1启动计数器(=0)允许INT1启动计数器(=1)GATEC/TM1M0GATEC/TM1M0D7D5D4D3D2D1D0TMODD6(89H)定时器1定时器0

初始状态:允许TRx启动计数器、定时模式、方式0TF1TR1TF0TR0IE1IT1IE0IT08FH8DH8CH8BH8AH89H88HTCON8EH(88H)定时器控制位外部中断控制位初始状态:没有定时/计数溢出,TRx处于关闭状态单片机复位时,两个寄存器的所有位都被清0。1定时/计数器的结构与工作原理2定时器/计数器的控制3定时/计数器的工作方式4定时/计数器的编程和应用工作方式0——使用13位的定时/计数器(THi7-0+TLi4-0)定时时间t=(213-a)×12/fosc(μs)计数初值a=213-t×fosc/12若fosc=12MHz,方式0最大定时量t=213μs=8.192ms最小定时量t=1μs解:设fosc=12MHz计数初值a=213-5×1000×12/12=3192=110001111000TH0TL0011000110

0

0110006 3 1 8H举例:计算T0方式0定时5ms的计数初值a注意:方式0的TL0高3位未用,可填0,因此a=0110001100011000=6318H编程时需将此初值装载到Tx中,例如:TH0=0x63;TL0=0x18;工作方式1——使用16位定时/计数器(THi7-0+TLi7-0)定时时间为:t=(216-a)×12/fosc(微秒)定时范围扩大到1μs~65ms(fosc=12MHz时)计数初值无需修正:a=216-t×fosc/12使用过程中计数初值需要重装载延时时间t=(28-a)×12/fosc(微秒)可自动重装载计数初值(TLx溢出后THx中数值可自动装入TLx适合于作串口波特率发生器(定时精度较高)工作方式2——采用8位计数器常数寄存器T0的工作方式3——主要用于当T1用作串行口的波特率发生器的情况TH0+TF1+TR1组成的8位定时器TL0+TF0+TR0组成的8位定时/计数器T1组成的无中断功能的定时器特点:方式3下T0可有2个具有中断功能的8位定时器3个定时器在定时器T0用作方式3时,T1仅方式2有意义。TL1TH1使用定时/计数器的步骤:强调:TMOD的工作方式字只能以字节形式给出T0(1)设置TMOD工作方式字——确定T0?T1?——确定定时模式?计数模式?——确定方式0、方式1、方式2、方式3?——确定定时/计数器的工作状态

由于定时器/计数器以加1方式计数,假设计数值为x,则应装入定时器/计数器的初值为:(n为不同方式下计数器的位数)(2)设置合适的计数初值——产生期望的定时间隔:

每个机器周期包括12个振荡周期,若晶振频率为6MHz,一个机器周期:定时时间为TC:Tp为机器周期:计数个数为:则应装入的计数初值为:(2)设置合适的计数初值——产生期望的定时间隔:

计数初值a=2n-t×fosc/12(相当于负数的补码形式)=-t×fosc/12TH0=-t/256;TL0=-t%256;装载初值,例:(12MHz晶振)ET0=1;EA=1;voidtx_srv(void)interruptn

{……}3)确定采用何种方式处理溢出结果查询方式?中断方式?若是查询方式——采用条件判断语句if(TF0){……}while(!TF0){……}若是中断方式——中断初始化和中断服务程序:4)启动定时器:TR0=1或TR1=15)进行定时或计数结束后的工作6)为下次定时/计数做准备(清TF标志+重装载初值)若是中断方式,则无需软件清TF标志位;若是查询方式,还需软件清除TF标志位若是方式2,没有重装载问题,否则需重装载初值1定时/计数器的结构与工作原理2定时器/计数器的控制3定时/计数器的工作方式4定时/计数器的编程和应用

例1

假设系统时钟频率采用6MHz,要在P1.0上输出一个周期为2ms的方波,如图所示。

思路:方波的周期用T0来确定,让T0每隔1ms计数溢出1次(每1ms产生一次中断),CPU响应中断后,在中断服务程序中对P1.0取反。

(1)计算初值X

设初值为X,则有:机器周期为12/(6×106)=2×10-6

(216-X)×2×10-6=1×10-3216-X=500X=65036X化为16进制,即X=FE0CH=1111111000001100B。所以,T0的初值为:TH0=0FEHTL0=0CH(2)初始化程序设计

对寄存器IP、IE、TCON、TMOD的相应位进行正确设置,将计数初值送入定时器中。(3)程序设计

中断服务程序除产生方波外,还要注意将计数初值重新装入定时器中,为下一次中断作准备。参考程序:

ORG0000HRESET:AJMPMAIN;转主程序

ORG000BH;T0的中断入口 AJMPIT0P ;转T0中断处理程序IT0P

ORG0100HMAIN:MOVSP,#60H;设堆栈指针MOVTMOD,#01H ;设置T0为方式1ACALLPT0M0 ;调用初始化子程序PT0M0HERE:AJMPHERE ;自身跳转PT0M0:MOVTL0,#0CH ;T0中断服务程序,T0重新置初值MOVTH0,#0FEHSETBTR0 ;启动T0SETBET0 ;允许T0中断SETBEA;CPU开中断RET

ITOP:MOVTL0,#0CH;T0中断服务子程序,T0置初值 MOVTH0,#0FEHCPLP1.0;P1.0的状态取反RETI查询方式的参考程序:

MOVTMOD,#01H;设置T0为方式1

SETBTR0;接通T0LOOP:MOVTH0,#0FEH ;T0置初值 MOVTL0,#0CHLOOP1:JNBTF0,LOOP1 ;查询TF0标志 CLRTR0 ;T0溢出,关闭T0 CPLP1.0 ;P1.0的状态求反 SJMPLOOP

【例】对上例使用定时器/计数器T0的方式0,设定1ms的定时。在P1.0引脚上产生周期为2ms的方波输出。晶体振荡器的频率为fosc=6MHz。

解:(1)定时常数计算

振荡器频率为fosc=6MHz=6×106HZ

方式0计数器长度n=13

2n=213=8192

定时时间:t=1ms=1×10-3s

机器周期:Tp=12/(6×106)=2us

计数值:x=Tc/Tp=1ms/2us=500

那么应装入的初值为8192-500=7692

定时常数TC转换成二进制数TCB=1111000001100B。

所以TCH=1EH,TCL=0CH。

那么应该写入T0的形式为TH0=1EH,TL0=0CH。

例2

假设系统时钟为6MHz,编写定时器T0产生1秒定时的程序。(1)T0工作方式的确定定时时间较长,采用哪一种工作方式?由各种工作方式的特性,可计算出:

方式0最长可定时16.384ms;

方式1最长可定时131.072ms;方式2最长可定时512

s。选方式1,每隔100ms中断一次,中断10次为1s。

(2)计算计数初值因为:(216-X)×2×10-6=10-1所以:X=15536=3CB0H因此:TH0=3CH,TL0=B0H(3)10次计数的实现采用循环程序法。(4)程序设计参考程序:

ORG0000HRESET:LJMPMAIN ;上电,转主程序入口MAIN

ORG000BH;T0的中断入口LJMPIT0P ;转T0中断处理程序IT0P

ORG1000HMAIN:MOVSP,#60H ;设堆栈指针MOVB,#0AH;设循环次数10次 MOVTMOD,#01H;设T0工作在方式1MOVTL0,#0B0H;给T0设初值MOVTH0,#3CH SETBTR0 ;启动T0SETBET0 ;允许T0中断 SETBEA;CPU开放中断HERE:SJMPHERE;等待中断ITOP:MOVTL0,#0B0H;T0中断子程序,重装初值MOVTH0,#3CH; DJNZB,LOOPCLRTR0;1s定时时间到,停止T0工作LOOP:RETI例3利用T1的方式2对外部信号计数,要求每计满100个数,将P1.0取反。本例是方式2计数模式的应用。(1)选择工作方式外部信号由T1(P3.5)脚输入,每发生一次负跳变计数器加1,每输入100个脉冲,计数器产生溢出中断,在中断服务程序中将P1.0取反一次。T1方式2的控制字为TMOD=60H。不使用T0时,TMOD的低4位可任取,但不能使T0进入方式3,这里取全0。(2)计算T1的初值

X=28-100=156=9CH因此,TL1的初值为9CH,重装初值寄存器TH1=9CH(3)程序设计

ORG0000H LJMPMAIN

ORG001BH ;T1中断服务程序入口

CPLP1.0 ;P1.0位取反 RETI

ORG0100HMAIN: MOVTMOD,#60H;设T1为方式2计数 MOVTL0,#9CH;T0置初值 MOVTH0,#9CH SETBTR1 ;启动T1 SETBET1;开中断 SETBEAHERE:AJMPHERE

门控位的应用

门控位GATE为1时,TRx=1,INTx=1才能启动定时器。利用这个特性可以测量外部输入脉冲的宽度。例5利用T0门控位测试INT0引脚上出现的正脉冲宽度,已知晶振频率为12MHz,将所测得值最高位存入片内71H单元,低位存入70H单元。解:设外部脉冲由(P3.2)输入,T0工作于定时方式1(16位计数),GATE设为1。测试时,应在INT0低电平时,设置TR0为1(16位计数);当INT0变为高电平时,就启动计数;再次变低时,停止计数。此计数值与机器周期的乘积即为被测正脉冲的宽度。因fosc=12MHZ,机器周期为1us,测试过程如下。源程序如下:

MOVTMOD,#09H;设T0为方式1MOVTL0,#00H;设计初值取最大值MOVTH0,#00HMOVR0,#70HJBP3.2,$;等P3.2(INT0)变低SETBTR0;启动T0准备工作JNBP3.2,$;等待P3.2(INT0)变高JBP3.2,$;等待P3.2(INT0)变低CLRTR0;停止计数T0从0开始计数INT009H(TMOD)1TR00TR0T0停止计数

MOV@R0,TL0;存放结果INCR0MOV@R0,TH0SJMP$

运行中读定时器/计数器在读取运行中的定时器/计数器时,需注意:若恰好出现TLX溢出向THX进位的情况,则读得的(TLX)值就完全不对。同样,先读(THX)再读(TLX)也可能出错。方法:先读(THX),后读(TLX),再读(THX)。若两次读得(THX)相同,则读的内容正确。若前后两次读的(THX)有变化,则再重复上述过程,这次重复读得的内容就应是正确的。下面是有关的程序,读得的(TH0)和(TL0)放置在R1和R0内。RDTIME:MOVA,TH0 ;读(TH0)MOVR0,TL0 ;读(TL0)

CJNEA,TH0,RDTIME;比较2次读得的(TH0) ;不相等则重复读MOVR1,A ;(TH0)送入R1中 RET

本节小结1、定时器和计数器本质上都是计数器,前者是对时钟脉冲进行计数,后者则是对外来脉冲进行计数。2、设置TMOD工作方式字可确定定时/计数器的工作状态;设置合适的计数初值可产生期望的定时间隔。3、定时器共有4种工作方式,其中方式1采用16位计数器,方式2采用8位计数器,可以自动重装载计数常数。第2节单片机的串行通信技术1串行通信概述2串行口的结构组成及控制寄存器3串行通信工作方式及应用举例4串行通信设计应用举例

1串行通信概述1.1数据通信1.2异步通信和同步通信1.3波特率的概念和串行通信的传输方向2串行口的结构组成及控制寄存器3串行通信工作方式及应用举例4串行通信接口

常用的数据通信包括两种形式:并行通信和串行通信。并行通信(1)并行方式——数据的各位同时发送或同时接收。传送速度快,但因需要多根传输线,故一般只在近距离通信中使用。串行通信(2)串行方式——数据的各位依次逐位发送或接收。传输速度慢,但因只需较少传输线,故适合于远距离通信。1串行通信概述1.1数据通信

1.2异步通信和同步通信1.3波特率的概念和串行通信的传输方向2串行口的结构组成及控制寄存器3串行通信工作方式及应用举例4串行通信接口

异步通信——以字符为单位组成字符帧进行的数据传送在串行数据通信中,有同步通信和异步通信两种方式。

一帧数据由起始位、数据位、[可编程位]和停止位构成特点——收发双方不同步时,能够依靠在每帧开始时的不断对齐,自行纠正偏差,故对收发双方的时钟精度要求较低,但因每个字节都要建立一次同步,所以工作速度较低。

同步通讯数据格式——数据以块为单位连续传送。在发一组数据时,只在开始用若干个同步字符作为双方的号令,然后连续发送整组数据。特点——数据是以数据块为单位连续传送的,结构紧凑,传输效率高,但要求双方有准确的时钟,对硬件要求高。1串行通信概述1.1数据通信1.2异步通信和同步通信1.3波特率的概念和串行通信的传输方向

2串行口的结构组成及控制寄存器3串行通信工作方式及应用举例4串行通信接口

波特率为每秒钟发送二进制数码的位数,即b/S(位/秒)。在串行通信中,数据传输速率的快慢,通过波特率来衡量。例如,在异步通信中传输速度为360字符/秒,每个字符又包含10位,则波特率为:360字符/秒*10位/字符=3600波特标准波特率:110、300、600、1200、2400、4800、9600、19200、38400波特等。

在串行通信中,按照传输数据的流向,可分成三种传输形式:

单工通信半双工通信全双工通信SimplexHalfDuplex

FullDuplex

80C51内部设有一个全双工串行接口收发双方角色固定不能互换收发双方角色可换但需切换收发双方互不影响双向通信RXD——ReceiveData——接收数据TXD——TransmitData——发送数据

80C51单片机串行I/O口是可提供同步或异步两种通信方式的全双工串行接口。它由下面几个特殊功能寄存器组成,

发送数据寄存器(SBUF)、 接收数据寄存器(SBUF)、 串行口控制寄存器(SCON) 电源控制寄存器(PCON)

80C51内部设有一个全双工串行接口1串行通信概述2串行口的结构组成及控制寄存器

2.1串行口的结构组成2.2串行口控制寄存器3串行通信工作方式及应用举例4串行通信接口

若干寄存器:两个数据缓冲器SBUF(99H)+串行控制寄存器SCON(98H)+移位寄存器+......。CPU

两个引脚:数据接收RXD(P3.0)和数据发送TXD(P3.1)。(1)发送数据过程(中断法)

内部数据并行写入SBUF发→数据串行送出→中断标志位TI硬件置1→CPU响应中断→TI软件清零,写入下一数据→CPU(2)接收数据的过程(中断法)外界数据串行送入移位寄存器→数据并行送入SBUF收→标志位RI硬件置1→CPU响应中断→RI软件清零,读走数据→CPUD0D1D2D3D4D5D6D7传送数据同步时钟数据传送——将串行数据按一定节拍(同步时钟脉冲)输出到传输线上,或从传输线上读入。同步时钟信号可由系统时钟或定时器产生同步时钟和传送数据的关系:发送数据时,发送时钟的下降沿将数据串行移位输出;接收数据时,接收时钟的上升沿开始对数据位采样。1串行通信概述2串行口的结构组成及控制寄存器2.1串行口的结构组成2.2串行口控制寄存器3串行通信工作方式及应用举例4串行通信接口

(1)串行数据缓冲器,SBUF在物理上有两个SBUF:一个用于发送,另一个用于接收。在逻辑上只有一个SBUF(99H)。可根据用法区分功能:ucharcounter;待发送存放变量…SBUF=counter;

完成一次数据发送…counter=SBUF;

完成一次数据接收CPU(2)串口控制寄存器,SCON(98H)SM2、TB8、RB8主要用于多机通讯(1)SM0、SM1——串行口4种工作方式的选择位

表串行口的4种工作方式SM0SM1方式 功能说明

000同步移位寄存器方式(用于扩展I/O口)0118位异步收发,波特率可变(由定时器控制)1029位异步收发,波特率为fosc/64或fosc/321139位异步收发,波特率可变(由定时器控制)(2)SM2——多机通信控制位

用于方式2或方式3中(9位)。当串行口以方式2或方式3接收时,如果SM2=1,只有当接收到的第9位数据(RB8)为“1”时,才将接收到的前8位数据送入SBUF,并置“1”RI,产生中断请求;当接收到的第9位数据(RB8)为“0”时,则将接收到的前8位数据丢弃。如果SM2=0,则不论第9位数据是“1”还是“0”,都将前8位数据送入SBUF中,并置“1”RI,产生中断请求。在方式1时,如果SM2=1,则只有收到停止位时才会激活RI。在方式0时,SM2必须为0。

(3)REN——允许串行接收位由软件置“1”或清“0”。 REN=1允许串行口接收数据。

REN=0禁止串行口接收数据。

(4)TB8——发送的第9位数据方式2和3时,TB8是要发送的第9位数据,可作为奇偶校验位使用,也可作为地址帧或数据帧的标志。

=1为地址帧,=0为数据帧(5)RB8——接收到的第9位数据方式2和3时,RB8存放接收到的第9位数据。在方式1,如果SM2=0,RB8是接收到的停止位。在方式0,不使用RB8。

(6)TI——发送中断标志位方式0时,串行发送第8位数据结束时由硬件置“1”,其它工作方式,串行口发送停止位的开始时置“1”。TI=1,表示一帧数据发送结束,可供软件查询,也可申请中断。CPU响应中断后,向SBUF写入要发送的下一帧数据。TI必须由软件清0。(7)RI——接收中断标志位

方式0时,接收完第8位数据时,RI由硬件置1。其它工作方式,串行接收到停止位时,该位置“1”。RI=1,表示一帧数据接收完毕,并申请中断,CPU从接收SBUF取走数据。该位状态也可软件查询。RI必须由软件清“0”。(3)电源控制寄存器,PCON(87H)由定时器产生的同步时钟

通过SM0和SM1不同的取值,可选择串行通信中的四种工作方式。SM0SM1工作方式说明波特率00方式0同步移位寄存器fosc/1201方式110位异步收发由定时器控制10方式211位异步收发fosc/32或fosc/6411方式311位异步收发由定时器控制1串行通信概述2串行口的结构组成及控制寄存器3串行通信工作方式3.1方式0(八位同步移位寄存器方式)3.2方式1(十位异步收发通信模式)3.3方式2、方式3数据帧格式及应用举例4串行通信接口

1.方式0方式0为移位寄存器方式,通过外接CM0S或TTL移位寄存器实现串行、并行转换。该工作方式用于扩展I/0接口。在这种方式下,传送的数据为8位,数据只能从RxD端输入输出。TxD端用于输出移位同步时钟信号,其波特率固定为振荡频率的1/12,即每个机器周期传送一位数据。方式0可以认为是同步工作方式。(1)方式0输出

第5章MCS-51系列单片机的并行、串行输入/输出接口(2)方式0输入

八位同步移位寄存器方式——用于扩展并行I/O接口

数据传输波特率固定为fosc/12由RXD引脚输入或输出数据(低位在前,高位在后)由TXD引脚输出同步时钟信号扩展输出口扩展输入口实例1

利用74LS164扩展并行输出口,并实现发光二极管循环控制功能74LS164为8位串并转换移位寄存器能将串行输入数据转为并行输出引脚功能描述A、B串行数据输入引脚QA~QG并行数据输出引脚CLOCK移位脉冲输入端CLEAR移位寄存器清零端工作原理:1)CLEAR端若为低电平,输出端QA~QG都为0;2)CLEAR端若为高电平,且CLOCK端出现上升沿脉冲,则输出端锁存输入端的电平接线原理:数据发送端A(B)——RXD;同步时钟端CLK——TXD;数据清除端CLR——P1.0#include<reg51.h>sbitMR=P1^0;voiddelay(){ //延时unsignedinti;for(i=0;i<20000;i++){}}voidmain(){unsignedcharindex,LED;//定义LED指针和显示字模SCON=0; //设置串行模块工作在方式0MR=1;//CLEAR端=1,允许输入数据

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论