c8051单片机原理及应用4_第1页
c8051单片机原理及应用4_第2页
c8051单片机原理及应用4_第3页
c8051单片机原理及应用4_第4页
c8051单片机原理及应用4_第5页
已阅读5页,还剩183页未读 继续免费阅读

下载本文档

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

文档简介

4. C8051F单片机的片内功能部件,4.1 定时器/计数器 4.2 可编程计数器阵列 4.3 UART通信接口 4.4 SMBus 4.5 SPI总线,4.1 定时器/计数器,定时和计数功能最终都是通过计数实现的,若计数的事件源是周期固定的脉冲,则可以实现定时功能,否则只能实现计数功能。因此可以将定时和计数功能由一个部件实现。实现定时和计数的方法一般有软件、专用硬件电路和可编程定时器/计数器三种方法。采用软件只能定时,且占用CPU时间,降低了CPU的使用效率。专用硬件电路可实现精确的定时和计数,但参数调节不便。可编程定时器计数器,不占用CPU时间,能与CPU并行工作,实现精确的定时和计数,又可以通过编程设置其工作方式和其它参数,因此使用方便。,4.1 定时器/计数器,C8051F020内部有T0T4共5个16位定时器/计数器,其中T0T2与MCS-51中的定时器/计数器兼容,还有两个16位自动重装初值的定时器T3 和T4既可以作为通用定时器使用,也可以用于ADC和SMBus。,表4-1 C8051F020定时器/计数器的工作方式,4.1.1 定时器的一般结构和工作原理,最大定时时间,TMAX=2nT计数 式中n由工作方式决定,T计数为定时器/计数器的计数脉冲周期时间,由C8051F的主脉冲或主脉冲经12分频提供,是否需要12分频取决于对时钟控制寄存器CKCON的设定(提供12分频选项是为了与标准8051兼容)。 T0T4均为加1计数器,时钟控制寄存器CKCON,位7:未用。读=0b,写=忽略。位6-3:T4M-T0M:T4到T0的时钟选择(不包含T3,T3的时钟选择由T3控制寄存器TMR3CN的第0位T3XCLK决定)。 0:定时器按系统时钟的12分频计数 1:定时器按系统时钟频率计数位2-0:保留。读=000b,写入值必须是000b。,1定时、计数方式,定时方式:每一个计数周期(T计数)计数器加1,直至计满溢出(从全1到全0)产生中断请求。对于一个N位的加1计数器,若T计数是已知的,则从初值a开始加1计数至溢出所占用的时间为:,当N=8、a=0时,最大定时时间为: T=256T计数计数方式:外部输入信号的下降沿触发计数,计数器在每个时钟周期或时钟周期的12分频采样外部输入信号,若一个周期的采样值为1,下一个周期的采样值为0,则计数器加1,故识别一个从1到0的跳变需2个周期,所以,对外部输入信号最高的计数速率是时钟频率的12或1/24(取决于是否12分频)。同时,外部输入信号的高电平与低电平保持时间均需大于一个周期。,4.1.2 定时器/计数器T0和T1,对定时器/计数器T0和T1的访问和控制是通过操作SFR实现的。T0和T1都是16位的加1计数器,访问时以两个字节的形式出现:TL0+TH0、TL1+TH1TCON用于允许/禁止定时器0和定时器1并指示它们的工作状态。T0和T1都有四种工作方式,可以TMOD中的方式选择位M1-M0进行选择。,1、方式寄存器TMOD,T0M0,T0M1,C/T0,GATE0,T1M0,T1M1,C/ T1,GATE1,TMOD,字节地址89H,D7 D6 D5 D4 D3 D2 D1 D0,2、控制寄存器TCON,3T0和T1的工作方式和计数器结构,表4-2 定时器T0、T1的工作方式,(1)工作方式0 特别重要,13位计数器,TR0=1,启动计数,启动计数,(1)工作方式0,若T0工作于方式0的定时器模式,计数初值为a,则T0从初值a加1计数至溢出所需的时间为:,式中fOSC为系统时钟频率,T0M为T0的时钟选择位。如果fOSC12MHz,则T0M=0时,T(213a)s;T0M=1时,T(213a)/12s。,(2)工作方式1,和方式0的差别仅仅在于计数器的位数不同,方式1为16位的定时器计数器。T0工作于方式1时,由TH0作为高8位,TL0作为低8位,构成一个16位计数器。若T0工作于方式1定时,计数初值为a,fOSC12MHz,则T0从计数初值a加1计数到溢出的定时时间为: T(216a)s 或 T(216a)/12s。,(3)工作方式2,(3)工作方式2,适用于需要重复定时或计数的场合。定时精度比较高,但定时时间较短。定时时间可用下式计算:,(4)工作方式3,只适用于T0,若T1设置为方式3,则停止计数。,4T0和T1的初始化,初始化步骤 初始化TMOD根据需要初始化CKCON装入初值中断设置(IE、IP)启动定时/计数器(TCON)计数器方式初值的计算 TC=MC 为计数器的模,与工作方式有关 ,C为需要的计数值定时器方式初值的计算T=(MTC)T计数 T计数=CLK或12CLK TC=MT/T计数,4T0和T1的初始化,最大定时时间(fOSC12MHz、T0M=0 ):方式0:TMAX = 2131s = 8.192ms方式1:TMAX = 2161s = 65.536ms方式2、3: TMAX = 281s = 0.256ms,5T0和T1的应用举例,例4.1 若fOSC=12MHz,用系统时钟的十二分频作为计数源,请计算定时2ms所需的初值,并给出初始化程序。解: fOSC= 12MHz,用系统时钟的十二分频作为计数源时,方式2、3的最大定时时间只有0.256ms,因此要想获得2ms的定时时间,必须用方式0或方式1。方式0TC=2132ms/1us=6192=1830H 即:TH0=0C1H;TL0=10H(高三位为0) 方式1TC=2162ms/1us=63536=F830H 即:TH0=0F8H;TL0=30H,初始化程序 void T0_mode1_2ms_init() CKCON /启动T0,可用TR0=1代替 ,5T0和T1的应用举例,5T0和T1的应用举例,给定时器赋初值的语句也可以采用如下方法: TH0=(65536-2000)/256; TL0=(65536-2000)%256;或 TH0=-2000/256; TL0=-2000%256;,5T0和T1的应用举例,例4.2 若fOSC=12MHz,T1工作于方式1,产生50ms的定时中断,TF1为高级中断源。试编写主程序和中断服务程序,使P1.0产生周期为1s的方波。 解:让P1.0每500ms取反一次即可实现。定时器的单次定时时间不可能达到500ms,可让定时器多次定时产生500ms的定时时间,如让T1工作在方式1,单次定时时间为50ms,那么T1中断10次就是500ms的时间。 (1)确定定时常数假设使用fOSC的12分频作为计数源,则T计数12/ fOSC 12/(12106)1s由公式TC=MT/T计数,可知TC=216-5010315536=3CB0HTH1=0x3c,TL0=0xb0。,5T0和T1的应用举例,(2)初始化程序 包括T1初始化和中断系统初始化,主要是对IP、IE、CKCON、TCON、TMOD的相应位进行正确的设置,并将时间常数送入T1。本例中将初始化操作放在主程序中完成,当程序规模较大时,应编写单独的初始化程序,以利于程序的模块化设计。(3)中断服务程序 中断服务程序除了完成要求的方波产生这一工作之外,还要注意将时间常数重新送入T1中,为下一次产生中断作准备。,程序清单如下(主程序):,#include sbit P1_0 = P10;int count=10;/10次T1中断为500msvoid main( void ) CKCON /死循环,等待中断,产生方波,程序清单如下(中断服务程序):,void Timer1_ISR (void) interrupt 3 TH1=0x3c; /重装初值 TL1|=0xb0; count-; /中断计数 if (count=0) /500ms到,重赋计数初值,P1.0取反 count=10; P1_0=!P1_0; ,问题:为什么用TL1|=0xb0;而非TL1=0xb0?,程序清单如下(查询式程序):,#include sbit P1_0= P10;void main( ) int count=10;/10次T1中断为500msCKCON/启动T1,For(; ;) /死循环,产生方波 TH1=-50000/256; /T1初值 TL1=-50000%256; Do while(!TF1); /查询等待TF1置位, TF1=0; If (count!=0) count-; else count=10;P1_0=!P1_0; ,4.1.3 定时器/计数器T2,T2为16位定时/计数器,由TL2(低字节)和TH2(高字节)组成。C/T2=0(定时)时,系统时钟作为定时器的输入(由CKCON的T2M位指定不分频或12分频)。C/T2 =1(计数)时,T2输入引脚上的负跳变使计数器加“1”。T2还可以用于启动ADC数据转换。 三种工作方式(由T2CON中的配置位选择):自动重装初值的16位定时器/计数器方式、带捕捉的16位定时器/计数器方式和波特率发生器方式。,1T2控制寄存器T2CON,位7(TF2):T2溢出标志位T2溢出时由硬件置位。允许T2中断时,使CPU转向T2的中断服务程序。不能由硬件自动清0,必须用软件清0。RCLK0或TCLK0为1时(波特率发生器方式),TF2不会被置1。位6(EXF2):T2外部中断标志位EXEN2为“1”时,当T2EX输入引脚发生负跳变时,由硬件置位。允许T2中断时,使CPU转向T2的中断服务程序。不能由硬件自动清0,必须用软件清0。,1T2控制寄存器T2CON,位5(RCLK0):UART0接收时钟选择标志位0:T1溢出作为接收时钟。1:T2溢出作为接收时钟。位4(TCLK0):UART0发送时钟选择标志位0:T1溢出作为发送时钟。1:T2溢出作为发送时钟。位3(EXEN2):T2外部允许标志位0:T2EX上的负跳变被忽略。1:T2EX上的负跳变导致一次捕捉或重载。位2(TR2):T2启/停控制位0:停止。1:启动。,1T2控制寄存器T2CON,位1(C/T2):定时器/计数器功能选择位0:定时器功能,由T2M(CKCON.5)定义的时钟加“1”。1:计数器功能,由外部输入引脚(T2)的负跳变加“1”。位0(CP/RL2):捕捉/重载选择位EXEN2必须为1才能使T2EX上的负跳变能够被识别并触发捕捉和重载。当RCLK0或TCLK0为“1”时,该位被忽略,T2将工作在自动重装载方式。0:T2溢出或T2EX上发生负跳变时将自动重装载1:T2EX发生负跳变时捕捉。,2T2的工作方式和计数器结构,(1)方式0:自动重装初值的16位定时器/计数器方式原理框图如图4-5所示。TH2、TL2构成16位加“1”计数器。RCAP2H、RCAP2L构成16位初值寄存器,EXEN2=1时,当T2EX上有负跳变或T2溢出时,将RCAP2H、RCAP2L中预置的初值自动重新装入TH2、TL2,T2重新开始计数,并置位中断标志EXF2或TF2,向CPU申请中断。EXEN2=0时,T2EX上的负跳变被忽略,只有当T2溢出时才重载初值并向CPU申请中断。,表4-3 T2的方式选择,(1)方式0:16位自动重装初值方式,(2)方式1:16位带捕捉方式,RCLK0=0、TCLK0=0、CP/RL2=1时,T2工作在此方式EXEN2=1时为允许捕捉方式,T2EX引脚上的负跳变将TH2、TL2的当前值捕捉到RCAP2H、RCAP2L寄存器,同时置EXF2=1,发出中断请求。EXEN2=0时,RCAP2H、PCAP2L不起作用,此时T2与T1、T0的方式1完全相同。即:C/T20时为16位定时器方式,C/T21时为16位计数器方式,计数溢出时TF21,发送中断请求信号。 原理框图如图4-6所示。,(2)方式1:16位带捕捉方式,(3)方式2:波特率发生器方式,RCLK或TCLK置1时,T2工作于波特率发生器方式。 与自动重装载方式相似。但不置位TF2,也不产生中断。溢出事件用作UART0的移位时钟输入。 T2溢出可用于产生独立的发送或接收波特率,也可同时产生发送和接收波特率,取决于T2CON的设置。 T2的计数源可以是系统时钟的二分频,也可以是T2引脚上的输入,取决与C/T2的设置。 如果EXEN2为1,则T2EX 引脚上的负跳变将置位EXF2标志,并产生一个T2中断(如果允许)。因此,T2EX 输入可以被用作额外的外部中断源。原理框图如图4-7所示。,(3)方式2:波特率发生器方式,(3)方式2:波特率发生器方式,当选择系统时钟的二分频做计数源时,T2 为UART0提供的波特率可以用如下公式计算:,当选择外部引脚T2上的输入作为时基时,T2为UART0提供的波特率可以用如下公式计算:,4.1.4 定时器/计数器T3,1. 定时器T3的结构 16位定时/计数器 ,由TMR3L(低字节)和TMR3H(高字节)组成 T3的时钟输入可以通过程序选择为外部振荡器的8分频、系统时钟或系统时钟的12分频。 T3只有自动重装初值一种工作方式,初值保存在TMR3RLL(低字节)和TMR3RLH(高字节)两个SFR中,T3没有计数器方式。 除作为通用定时/计数器使用外,T3还可以用于启动ADC数据转换、SMBus定时等。 原理框图如图4-8所示。,1. 定时器T3的结构,2定时器3控制寄存器TMR3CN,位7(TF3):T3溢出标志位溢出时置1,不能由硬件自动清0,必须用软件清0 位6-3:未用。读=0000b,写=忽略 位2(TR3):T3运行控制位 0:停止。1:启动。位1(T3M):T3时钟选择位 0:T3使用系统时钟的12分频。1:T3使用系统时钟。位0(T3XCLK):T3外部时钟选择位 0:由T3M定义。1:外部振荡器输入的8分频。,3T3应用举例,例 4.3 假设C8051F020的并行口P2、P3连接16个LED指示灯,试编写程序使P3口所接的LED灯循环点亮,P2口所接的LED灯实现走马灯效果。(实验四) 解:要实现题目要求的效果,只需要定期更新P2、P3口的状态即可。这里可以使用T3定时器再加软件计数的方法达到所要求的时间,假设T3定时0.1秒产生中断,则软件计数器每0.1秒加1,让计数器加到5时,改变P2、P3口的状态,就可以实现每秒2次刷新LED灯的状态。,3T3应用举例,#include sfr16 TMR3RL = 0x92; /16位SFR sfr16 TMR3 = 0x94; #define SYSCLK 2000000 /系统时钟使用2MHz/函数声明void PORT_Init(void); void Timer3_Init(int counts);void Timer3_ISR(void);/P2口8个LED (共阴极)产生走马灯效果所需的数据 unsigned int xdata p2led=0x7f,0xbf,0xdf,0xef,0xf7, 0xfb,0xfd,0xfe;,3T3应用举例,void main (void) WDTCN = 0xde; /禁止看门狗定时器 WDTCN = 0xad;PORT_Init(); /端口初始化 Timer3_Init(SYSCLK/12/10); /T3初始化,产生0.1秒的定时中断 EA = 1; /开中断 while (1) ; /循环等待T3中断,产生走马灯效果 void PORT_Init (void) XBR2 = 0x40; /使能交叉开关,3T3应用举例,void Timer3_Init (int counts) TMR3CN = 0x00; TMR3RL = -counts; /T3赋初值,也可以采用8位SFR方式,向例4.2那样 TMR3 = 0xffff; /立即重载 EIE2 |= 0x01; /开T3中断 ,P42 EIE2格式 TMR3CN |= 0x04; /启动T3,3T3应用举例,void Timer3_ISR (void) interrupt 14 static int count; static int i=9,j=0; static int led=0xff; /P3口LED灯的初始状态 TMR3CN /P3口LED灯循环一个周期 ,4.1.5 定时器/计数器T4,16位的定时器/计数器,由TL4(低字节)和TH4(高字节)组成。 T4还可以用于启动ADC 数据转换。T4与T2的功能和结构类似,与T2有区别的是,T4可以作为UART1的波特率发生器。,T4CON的格式:,位7(TF4):T4溢出标志位T4溢出时由硬件置位。允许T4中断时,使CPU转向T4的中断服务程序。不能由硬件自动清0,必须用软件清0。RCLK0或TCLK0为1时(波特率发生器方式),TF4不会被置1。位6(EXF4):T4外部中断标志位EXEN4为“1”时,当T4EX输入引脚发生负跳变时,由硬件置位。允许T4中断时,使CPU转向T4的中断服务程序。不能由硬件自动清0,必须用软件清0。,T4CON的格式:,位5(RCLK1):UART1接收时钟选择标志位0:T1溢出作为接收时钟。1:T4溢出作为接收时钟。位4(TCLK1):UART1发送时钟选择标志位0:T1溢出作为发送时钟。1:T4溢出作为发送时钟。位3(EXEN2):T4外部允许标志位0:忽T2EX上的负跳变被略。1:T2EX上的负跳变导致一次捕捉或重载。位2(TR4):T4运行控制位0:禁止T4。1:允许T4。,T4CON的格式:,位1(C/T4):定时器/计数器功能选择位0:定时器功能:T4由T4M(CKCON.6)定义的时钟加“1”。1:计数器功能:T4由外部输入引脚(T4)的负跳变加“1”。位0(CP/RL4):捕捉/重载选择位该位选择T4为捕捉还是自动重装载方式。EXEN4必须为1才能使T4EX上的负跳变能够被识别并触发捕捉和重载。当RCLK0或TCLK0为“1”时,T4将工作在自动重装载方式。0:当T4溢出或T4EX上发生负跳变时将自动重装载1:在T4EX发生负跳变时捕捉。,4.2 可编程计数器阵列,可编程计数器阵列 (Programmable Counter Array)提供了增强的定时器功能,与标准8051的定时器/计数器相比,需要的CPU干预更少。C8051F020内部集成有一个可编程计数器阵列,称为PCA0 。包含一个专用的16位定时器/计数器和5个16位捕捉/比较模块。每个捕捉/比较模块有自己的I/O线 (CEXn)。通过配置交叉开关,可以将I/O线连接到并行I/O端口。定时/计数器有六个计数源:系统时钟、系统时钟/4、系统时钟/12、外部振荡器时钟源8分频、定时器0溢出、ECI线上的外部时钟信号。每个捕捉/比较模块可独立工作在6种工作方式之一。,4.2 可编程计数器阵列,4.2.1 PCA定时器/计数器,16位PCA定时/计数器由PCA0L(低字节)和PCA0H(高字节)组成。在读PCA0L的同时自动锁存PCA0H的值。读PCA0H或PCA0L不影响计数器工作。原理框图如图4-10所示。PCA0MD寄存器中的CPS2-CPS0位用于选择PCA定时/计数器的计数脉冲源,如下表所示。,4.2.1 PCA定时器/计数器,4.2.1 PCA定时器/计数器,定时/计数器溢出时 (从0xFFFF加1到0x0000),PCA0MD中的CF 置1,如果允许CF中断,则可以产生一个中断请求。PCA0MD中的ECF位置1即可允许CF中断,但要使CF中断得到响应,必须先总体允许PCA0中断(通过将EA位 (IE.7) 和EPCA0位 (EIE1.3) 置1可总体允许PCA0中断)。CF位不能由硬件自动清除,必须用软件清0。PCA0中断配置的详细信息如图4-11所示。清除PCA0MD寄存器中的CIDL位则允许PCA在微控制器内核处于等待方式时继续正常工作。,4.2.1 PCA定时器/计数器,4.2.2 PCA捕捉/比较模块,5个捕捉/比较模块都可独立工作在六种工作方式(由PCA0CPMn设置),如下表所示:,1边沿触发的捕捉方式,CEXn引脚上有效的电平变化(CEXn输入信号的高、低电平至少要持续两个系统时钟周期)可以捕捉PCA0定时 /计数器的值,将其装入到对应模块的16位捕捉/比较寄存器 (PCA0CPHn和PCA0CPLn) 进行比较。当发生匹配时,PCA0CN中的捕捉/比较标志 (CCFn) 置1,如果允许CCF中断,则可产生一个中断请求。CCFn位不能由硬件自动清除,必须用软件清0。原理框图如图4-12所示。,1边沿触发的捕捉方式,2软件定时(比较)器方式,置1 PCA0CPMn寄存器中的ECOMn和MATn位可将PCA0设置在软件定时器方式。该方式将PCA0定时/计数器与模块的16位捕捉/比较寄存器 (PCA0CPHn和PCA0CPLn) 进行比较。匹配时,PCA0CN中的捕捉/比较标志 (CCFn) 置1,如果允许CCF中断,则可产生一个中断请求。CCFn位不能由硬件自动清除,必须用软件清0。注意:向PCA0的捕捉/比较寄存器写入一个16位值时,应先写低字节,后写高字节。对PCA0CPLn的写入操作将清ECOMn位;PCA0CPHn写入时将置1 ECOMn位。 原理框图如图4-13所示。,2软件定时(比较)器方式,3高速输出方式,该方式下,每当PCA的计数器与模块的16位捕捉/比较寄存器 (PCA0CPHn和PCA0CPLn) 发生匹配时,模块的CEXn引脚上的逻辑电平将发生改变。置1 PCA0CPMn寄存器中的TOGn、MATn和ECOMn位可将PCA0设置为该方式。与软件定时器方式一样应注意,当向PCA0的捕捉/比较寄存器写入一个16位数值时,应先写低字节,后写高字节。 原理框图如图4-14所示。,3高速输出方式,4频率输出方式,该方式在对应的CEXn引脚产生可编程频率的方波。捕捉/比较寄存器的高字节保持着输出电平改变前要计的PCA时钟数。,所产生的方波的频率由下式定义: FPCA是由PCA方式寄存器PCA0MD中的GPS2-0位选择的PCA时钟频率。,4频率输出方式,捕捉/比较模块的低字节与PCA0计数器的低字节比较,两者匹配时,CEXn的电平发生改变,高字节中的偏移值加到PCA0CPLn。注意:在该方式下如果允许模块匹配 (CCFn) 中断,则发生中断的速率为2FCEXn。置位PCA0CPMn寄存器中ECOMn、TOGn和PWMn位可将PCA0设置为频率输出方式。,4频率输出方式,58位脉宽调制器方式,该方式下,每个模块都可以独立地产生脉宽调制 (PWM)输出。PWM的频率取决于PCA0定时/计数器的计数时钟源。使用模块的捕捉/比较寄存器PCA0CPLn可以改变PWM输出信号的占空比。当PCA0定时器/计数器的低字节 (PCA0L)与PCA0CPLn中的值相等时,CEXn输出高电平,当PCA0L中的计数值溢出时,CEXn输出低电平。当定时器/计数器的低字节PCA0L溢出时(从0xFF到0x00),保存在PCA0CPHn中的值自动装入PCA0CPLn,不需软件干预。置1 PCA0CPMn寄存器中的ECOMn和PWMn位可将PCA0设置为8位脉冲宽度调制器方式。,58位脉宽调制器方式,8位PWM方式的占空比由下面方程给出: 可见,最大占空比为100% (PCA0CPHn=0),最小占空比为0.39% (PCA0CPHn =0xFF)。可以通过清0 ECOMn位产生0%的占空比。,58位脉宽调制器方式,616位脉宽调制器方式,4.2.3 PCA特殊功能寄存器,1、PCA控制寄存器PCA0CN,位7(CF):PCA定时器/计数器溢出标志位PCA0定时/计数器溢出时由硬件置位。如允许CF中断,将使CPU转向CF中断服务程序。不能由硬件自动清0,必须用软件清0。 位6(CR):PCA0定时/计数器运行控制位0:停止计数 1:启动计数位5:未用。读=0b,写=忽略。位4-位0(CCF4- CCF0):PCA0模块4-模块0捕捉/比较标志位匹配或捕捉时由硬件置位。允许CCF中断时,将使CPU转向CCF中断服务程序。不能由硬件自动清0,必须用软件清0。,2、PCA0方式选择寄存器PCA0MD,位7(CIDL):PCA0定时/计数器等待控制位0:当CPU处于等待方式时,PCA0继续正常工作。1:当CPU处于等待方式时,PCA0停止工作。位6-4:未用。读=000b,写=忽略。位3-1(CPS2-CPS0):PCA0定时器/计数器计数时钟源选择位这些位选择PCA0计数器的计数时钟源,如表4-5所示。位0(ECF)PCA0定时器/计数器溢出中断允许位0:禁止CF中断。 1:允许CF中断。,3、PCA0捕捉/比较寄存器PCA0CPMn,PCA0CPMn地址: PCA0CPM0=0xDA (n=0)、PCA0CPMl=0xDB (n=1) PCA0CPM2=0xDC (n=2)、PCA0CPM3=0xDD (n=3) PCA0CPM4=0xDE (n=4)位7:PWMl6n:16位脉冲宽度调制允许位 当工作在脉冲宽度调制方式时 (PWMn=1),该位选择16位PWM方式。 0:选择8位PWM。1:选择16位PWM。,位6(ECOMn):比较器功能允许位0:禁止。1:允许。位5(CAPPn):正沿捕捉功能允许位0:禁止。1:允许。位4(CAPNn):负沿捕捉功能允许位0:禁止。1:允许。位3(MATn):匹配功能允许位0:禁止。1:允许。位2(TOGn):电平切换功能允许位 0:禁止。1:允许。位1(PWMn):脉宽凋制方式允许位 0:禁止。1:允许。位0(ECCFn):捕捉/比较标志中断允许位0:禁止CCFn中断1:当CCFn位置1时,允许捕捉/比较标志的中断请求。,3、PCA0捕捉/比较寄存器PCA0CPMn,PCA应用举例,例4.4 对液体流量进行测量的流量计是通过对脉冲进行计数实现的,某应用系统中需要对2路液体的流量进行测量。系统中使用PCA0工作在上升沿捕捉方式对脉冲进行计数,试编写实现该功能的程序。解:实现该功能的程序如下:#include c8051f020.h unsigned long xdata Plus_NUM2=0x0l,0x0l ; /用于脉冲计数void PORT_Init (void) /端口初始化 XBR0 = 0x10; /CEX0、CEX1配置到P0.0、0.1 XBR2 = 0x40; /允许交叉开关 P0MDOUT=0x00; /P0为开漏输出 ,PCA应用举例,void SYSCLK_Init (void) /时钟初始化 int i; OSCXCN = 0x67; /外部晶振22.1184MHz for (i=0; i 256; i+) ;/延时 while (!(OSCXCN /关PCA0,PCA应用举例,void PCA0_ISR (void) interrupt 9 /PCA0中断服务程序 EA=0; /关中断 if (CCF0=1) /模块0对第一路液体脉冲计数 CCF0=0; /清CCF中断标志 Plus_NUM0+; /脉冲计数 if (CCF1=1) /模块1 CCF1=0; Plus_NUM1+; EA=1; /开中断,PCA应用举例,void main (void) /主程序 WDTCN = 0xde; /关看门狗WDTCN = 0xad; SYSCLK_Init (); /初始化时钟 PORT_Init (); /初始化IO口Init_PCA0(); /初始化PCA0 CR=1; /启动PCA0EA=1; /开中断while (1); /等待中断,4.3 UART通信接口,C8051F具有丰富的串行通信接口。包括2个UART通信接口、一个与I2C兼容的SMBus接口和一个SPI接口。UART串行接口是全双工串行通信接口,即能同时进行串行发送和接收。它可以作UART(通用异步接收和发送器)用,也可以作同步位移寄存器用。 应用UART串行接口可以实现C8051F单片机系统之间点对点的单机通信、多机通信以及C8051F与系统机(如IBM-PC机等)的单机或多机通信。,4.3.1 串行通信及基础知识,1数据通信的概念 并行通信和串行通信 并行通信是指数据的各位同时进行传送(发送或接收)的通信方式。其优点是传递速度快;缺点是数据有多少位,就需要多少根传送线。并行通信在位数多、传送距离又远时就不太适宜。串行通信指数据是一位一位按顺序传送的通信方式,它的突出优点是只需一对传送线(利用电话线就可作为传送线),这样就大大降低了传送成本,特别适用于远距离通信。其缺点是传送速度较低。,2串行通信的传送方向,三种:一种为单工(或单向)配置,只允许数据向一个方向进行传送;另一种是半双工(或半双向)配置,允许数据向两个方向中的任何一个方向传送,但一次只能有一个发送,一个接收;第三种传送方式是全双工(或全双向)配置,允许同时双向传送数据,因此,全双工配置是一对单工配置,它要求两端的通信设备都具有完整和独立的发送和接收能力。,3异步通信和同步通信,(1)异步通信 异步通信用起始位0表示字符的开始,然后从低位到高位逐位传送数据,最后用停止位1表示字符结束,如图4-18所示。一个字符又称一帧信息。图4-18a中,一帧信息包括1位起始位、8位数据位和1位停止位,图418b中,数据位增加到9位。在C8051F单片机系统中,第9位数据D8可以用作奇偶校验位,也可以用作地址数据帧的标识位,D81表示该帧信息传送的是地址,D80表示传送的是数据。两帧信息之间可以无间隔,也可以有间隔,且间隔时间可任意改变,间隔用空闲位“1”来填充。,异步通信,图4-18 异步通信数据格式,(2)同步通信,在同步通信中,每一数据块开头时发送一个或两个同步字符,使发送与接收双方取得同步。数据块的各个字符间取消了起始位和停止位,所以通信速度得以提高,如图4-19所示。同步通信时,如果发送的数据块之间有间隔时间,则发送同步字符填充。,图4-19 同步通信数据格式,4.3.2 串行接口的组成和特性,1UART的组成C8051F的UART可以实现同时发送和接收数据的全双工通信。串行口的内部有独立的数据接收缓冲器和数据发送缓冲器。这两个数据缓冲器都用符号SBUF0来表示(UART1的数据缓冲器用SBUF1表示)的,地址都是99H(SBUF1的地址是F2H)。CPU对特殊功能寄存器SBUF0或SBUF1执行写操作,就是将数据写入发送缓冲器;对SBUF0或SBUF1的读操作,就是读出接收缓冲器的内容。,1UART的组成,UART的原理框图如图4-20所示。由原理图可知,发送电路由发送SBUF 、零检测器和发送控制器等组成。接收电路由接收SBUF、接收移位寄存器和接收控制器等组成。除发送和接收电路以外,还有波特率发生器、错误校验电路、多机通信控制电路和交叉开关等组成,交叉开关可将接收与发送引脚配置到P0到P3的任意口线。,UART的组成发送部分,UART的组成接收部分,2串行口控制寄存器SCON,位7-5:该三位的功能由PCON中的SSTAT0位决定SSTAT0 =1时,用于UART0 的出错状态指示位。FE0=1为帧格式错,即收到的停止位为0;RXOV0=1为接收覆盖错误,即前一个字节还没有取走,接收器又锁存了一个新字节;TXCOL0=1为发送冲突错误,即前一个字节还没有发送完又往SBUF写入一新字节。SSTAT0 =0时, SM00、SM10按表4-7选择UART0的工作方式。,RI0,TI0,RB80,TB80,REN0,SM20/TXCOL0,SM10/RXOV0,SM00/FE0,字节地址98H,D7 D6 D5 D4 D3 D2 D1 D0,2串行口控制寄存器SCON,表4-7 UART0的方式选择位,2串行口控制寄存器SCON,SM20为多处理器通信允许位方式0时该位无作用。方式1时用于检查有效停止位。0:忽略对停止位的检测。1:只有接收到有效的停止位时才置位RI0。方式2和方式3时为多机通信允许位0:忽略对第九位的检测。1:只有当第九位为“1”并且接收到的地址与UART0的地址或广播地址匹配时才置位RI0并产生中断。,2串行口控制寄存器SCON,位4(REN0):接收允许位0:禁止UART0接收 1:允许UART0接收位3(TB80):第9发送位对于方式2和方式3,是发送的第9位数据。可跟据需要时由软件置位或复位。在方式0和1中未用。位2(RB80):第9接收位对于方式2和方式3,是接收到的第9位数据。对于方式1,如SM20=0,RB80是接收到的停止位。对于方式0,不使用RB80。,2串行口控制寄存器SCON,位1(TI0):发送中断标志位由硬件在方式0串行发送第8位结束时置位,或在其它方式串行发送停止位的开始时置位。当允许UART0中断时,置1该位将使CPU转到UART0中断服务程序。该位必须由软件清0。位0(RI0):接收中断标志位由硬件在方式0接收到第8位结束时置位,或在其它方式接收到停止位的中间时置位。当允许UART0中断时,置1该位将使CPU转到UART0中断服务程序。该位必须由软件清0。,3特殊功能寄存器PCON,位7(SMOD0):UART0波特率系数控制位0:UART0的波特率不加倍。1:UART0的波特率加倍。位6(SSTAT0):UART0增强状态方式选择位0:读/写SCON0.57时访问UART0方式设置位SM20-SM00。1:读/写SCON0.57时访问帧格式错误(FE0)、接收覆盖错误(RXOV0)和发送冲突错误(TXCOL0)状态位。,3特殊功能寄存器PCON,位5:保留。读出值无定义,必须写入0。位4(SMOD1):UART1波特率系数控制位0:UART1的波特率不加倍。1:UART1的波特率加倍。位3(SSTAT1):UART1增强状态方式选择。0:读/写SCON1.57时访问UART1方式设置位SM21-SM01。1:读/写SCON1.57时访问帧格式错误(FE1)、接收覆盖错误(RXOV1)和发送冲突错误(TXCOL1)状态位。位2: 保留。读出值无定义,必须写入0。位1-位0:见2.6节电源管理方式。,4.3.3 串行接口的工作方式,1方式0 方式0是扩展移位寄存器的工作方式,用以扩展并行IO接口。串行发送,发送SBUF相当于一个并入串出移位寄存器,由C8051F的内部总线并行接收8位数据,并从RXD线串行输出。串行接收,接收SBUF相当于一个串入并出的移位寄存器,从RXD线接收一帧串行数据,并把它并行地送到内部总线。由RXD串行输入输出数据,TXD输出移位脉冲。波特率固定为fosc12 。,(1)方式0输出,串口外接74LSl64串入并出移位寄存器的接口逻辑如图4-21所示。TXD输出移位脉冲,RXD输出数据移入74LSl64。CPU写发送SBUF,启动串行口从低位开始发送,经过8个发送周期,发送SBUF的内容移入74LSl64,并置位TI,完成一字节输出。若fosc=12MHz,则串行输出一位的时间是1s,传输一个字节需8s。从低位开始串行输出,数据的低位在右高位在左,在具体应用中应加以注意。方式0输出时,可以串接多个移位寄存器。,(1)方式0输出,图4-21,(1)方式0输出,74LS164,74LS164真值表,例4-5 编程使下图中L0L3、L8、L10、L12、L14亮,其余灭,(1)方式0输出举例,(2)方式0输入,方式0输入,RXD-数据输入线,TXD-移位脉冲,串行口与外接的并入串出的移位寄存器74LSl66的接口逻辑如图4-23所示。,图4-23 方式0输入时移位寄存器的连接,74LS165并入串出移位寄存器( 74LS166与之类似 ),74LS165,74LS165真值表,(2)方式0输入举例,例:根据下图编写程序,当开关K合上时, 采集8位开关量,根据开关的不同状态进行不同处理。,(2)方式0输入举例,程序如下: START: JB P1.0, $ ; 开关K未合上, 等待 CLR P1.1 ; 74LS165并行输入数据 SETB P1.1 ; 开始串行移位 MOV SCON, 10H ; 串行口方式 0并启动接收 JNB RI, $ CLR RI MOV A, SBUF ; 输入数据 ; 根据 A处理不同任务 SJMP START ; 准备下一次接收。,(2)方式0输入举例,2方式1,方式1是8位异步串行通信方式,TXD为数据输出线,RXD为数据输入线。传送一帧信息的数据格式如下图所示,一帧为10位:1位起始位,8位数据位(先低位后高位)和1位停止位。,2方式1,(1)方式1输出 CPU向发送SBUF写入一个数据,即启动发送,从TXD端输出一帧信息,先发送起始位0,接着从低位开始依次输出8位数据,最后输出停止位1,并置1发送中断标志TI。CPU查询TI=1后,清TI,再向SBUF写入数据,启动下一字符发送。也可以采用中断方式,TI=1时向CPU产生中断请求。,(2)方式1输入,REN置1允许接收器接收。接收器以所选波特率的16倍的速率采样RXD端的电平。当检测到RXD端输入电平发生负跳变时,复位内部的十六分频计数器。计数器的16个状态把传送一位数据的时间分为16等分,在每位中心,即7、8、9这三个计数状态,位检测器采样RXD的输入电平,接收的值是三次采样中至少是两次相同的值,这样处理可以防止干扰。如果在第1位时间接收到的值(起始位)不是0,则起始位无效,复位接收电路,重新搜索RXD端上的负跳变。接收到停止位为1时,将接收到的8位数据装入接收数据缓冲器SBUF,置位RI,供CPU查询或向CPU请求中断。,3方式2和方式3,方式2和方式3是9位异步串行通信方式,TXD为数据发送端,RXD为数据接收端。方式2的波特率固定为振荡器频率的164或132,而方式3的波特率由定时器T1或T2的溢出率确定(UART1方式3的波特率由定时器T1或T4的溢出率确定)。在方式2和方式3中,一帧信息为11位:1位起始位,8位数据位(先低位后高位),1位附加的第9位数据(发送时为SCON中的TB8,接收时为SCON中的RB8。用于奇偶校验和多机通信),1位停止位。数据的格式如下图所示。,3方式2和方式3,多一附加位TB8、RB8,可用于多机通信和奇偶校验区别是波特率不同输出:写发送SBUF即启动发送发完置位TI输入:置位REN 接收完后,若RI=0、SM2=0或收到的第9位为1,则置位RI 读接收SBUF,4.3.4 波特率设计,4.3.4 波特率设计,例4.6 已知C8051F单片机时钟振荡频率为11.0592MHz,选用定时器T1工作方式2作波特率发生器,波特率为2400bit/S,求初值X。 解

温馨提示

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

评论

0/150

提交评论