SOC单片机原理及应用教学课件第4章-C8051F单片机的片内功能部件_第1页
SOC单片机原理及应用教学课件第4章-C8051F单片机的片内功能部件_第2页
SOC单片机原理及应用教学课件第4章-C8051F单片机的片内功能部件_第3页
SOC单片机原理及应用教学课件第4章-C8051F单片机的片内功能部件_第4页
SOC单片机原理及应用教学课件第4章-C8051F单片机的片内功能部件_第5页
已阅读5页,还剩211页未读 继续免费阅读

下载本文档

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

文档简介

1、第4章 SOC单片机的片内功能部件 4.1 定时器/计数器 4.2 可编程计数器阵列 4.3 UART通信接口 4.4 SMBus 4.5 SPI总线 第1页,共216页。4.1 定时器/计数器 定时和计数功能最终都是通过计数实现的,若计数的事件源是周期固定的脉冲,则可以实现定时功能,否则只能实现计数功能。因此可以将定时和计数功能由一个部件实现。实现定时和计数的方法一般有软件、专用硬件电路和可编程定时器/计数器三种方法。采用软件只能定时,且占用CPU时间,降低了CPU的使用效率。专用硬件电路可实现精确的定时和计数,但参数调节不便。可编程定时器计数器,不占用CPU时间,能与CPU并行工作,实现精

2、确的定时和计数,又可以通过编程设置其工作方式和其它参数,因此使用方便。 第2页,共216页。4.1 定时器/计数器C8051F020内部有T0T4共5个16位定时器/计数器T0T2与MCS-51中的定时器/计数器兼容T3 和T4 为两个16位自动重装初值的定时器,既可以作为通用定时器使用,也可以用于ADC和SMBus中。 5个定时器/计数器的工作方式如表4-1所示。 第3页,共216页。表4-1 C8051F020定时器/计数器的工作方式 定时器工作方式T0/T1 T2/T4 T3 方式013位定时器/计数器 自动重装载的16位定时器/计数器自动重装载的16位计数器/定时器方式116位定时器/

3、计数器带捕捉的16位定时器/计数器方式28位自动重装载的定时器/计数器UART0/ UART1的波特率发生器方式3两个8位定时器/计数器(只限于定时器0)第4页,共216页。4.1.1 定时器的一般结构和工作原理 模式选择计数器定时器启/停控制执行机构减1计数:如Intel 8253加1计数:如T0T4溢出标志查询中断第5页,共216页。最大定时时间TMAX=2nT计数 式中n由工作方式决定,T计数为定时器/计数器的计数脉冲周期时间,由C8051F的主脉冲或主脉冲经12分频提供,是否需要12分频取决于对时钟控制寄存器CKCON的设定(提供12分频选项是为了与标准8051兼容)。 第6页,共21

4、6页。时钟控制寄存器CKCON位7:未用。读=0b,写=忽略。位6-3:T4M-T0M:T4到T0的时钟选择(不包含T3,T3的时钟选择由T3控制寄存器TMR3CN的第0位T3XCLK决定)。 0:定时器按系统时钟的12分频计数 1:定时器按系统时钟频率计数位2-0:保留。读=000b,写入值必须是000b。 第7页,共216页。定时、计数方式 定时方式:每一个计数周期(T计数)计数器加1,直至计满溢出(从全1到全0)产生中断请求。对于一个N位的加1计数器,若T计数是已知的,则从初值a开始加1计数至溢出所占用的时间为:当N=8、a=0时,最大定时时间为: T=256T计数计数方式:外部输入信号

5、的下降沿触发计数,计数器在每个时钟周期或时钟周期的12分频采样外部输入信号,若一个周期的采样值为1,下一个周期的采样值为0,则计数器加1,故识别一个从1到0的跳变需2个周期,所以,对外部输入信号最高的计数速率是时钟频率的12或1/24(取决于是否12分频)。同时,外部输入信号的高电平与低电平保持时间均需大于一个周期。第8页,共216页。4.1.2 定时器/计数器T0和T1 对T0和T1的访问和控制是通过操作SFR实现的。T0和T1都是16位的加1计数器,访问时以两个字节的形式出现:TL0+TH0、TL1+TH1。TCON用于允许/禁止定时器0和定时器1并指示它们的工作状态。TMOD中的方式选择

6、位M1、M0设置为四种工作方式(方式0 方式3)之一, T1设置为方式3将停止计数。第9页,共216页。1、方式寄存器TMOD T0M0T0M1C/T0GATE0T1M0T1M1C/ T1GATE1TMOD字节地址89H D7 D6 D5 D4 D3 D2 D1 D0控制T0控制T1方式选择00:方式001:方式110:方式211:方式3定时/计数选择0:定时器1:计数器门控位第10页,共216页。2、控制寄存器TCON IT0IE0IT1IE1TR0TF0TR1TF1TCON字节地址88H D7 D6 D5 D4 D3 D2 D1 D0控制外部中断控制T1、T0启/停控制GATE=0时O:停

7、1:启溢出标志1:溢出0:不溢出第11页,共216页。3T0和T1的交叉开关配置第12页,共216页。4T0和T1的工作方式和计数器结构 表4-2 定时器T0、T1的工作方式M1M0工作方式功 能 说 明00013位定时器计数器01116位定时器计数器102自动重装初值的8位定时器计数器113仅适用于T0,分为两个独立的8位计数器,T1停止计数第13页,共216页。(1)工作方式0 13位计数器启/停控制TR0=1启动计数GATE0=0时:GATE0=1时:TR0=1且INT0=1启动计数时基选择定时/计数模式选择第14页,共216页。(1)工作方式0若T0工作于方式0的定时器模式,计数初值为

8、a,则T0从初值a加1计数至溢出所需的时间为: 式中fOSC为系统时钟频率,T0M为T0的时钟选择位。例:如果fOSC12MHz,则T0M=0时,T(213a)s;T0M=1时,T(213a)/12s。第15页,共216页。(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。第16页,共216页。(3)工作方式28位自动重装初值第1

9、7页,共216页。(3)工作方式2适用于需要重复定时或计数的场合。定时精度比较高,但定时时间较短。定时时间可用下式计算: 第18页,共216页。(4)工作方式3只适用于T0,若T1设置为方式3,则停止计数。 两个独立8位计数器借用T1的资源第19页,共216页。5T0和T1的初始化 初始化步骤 初始化TMOD根据需要初始化CKCON装入初值中断设置(IE、IP)启动定时/计数器(TCON)计数器方式初值的计算 TC=MC 为计数器的模,与工作方式有关 ,C为需要的计数次数定时器方式初值的计算T=(MTC)T计数 T计数=CLK或12CLK TC=MT/T计数 第20页,共216页。5T0和T1

10、的初始化最大定时时间(fOSC12MHz、T0M=0 ):方式0:TMAX = 2131s = 8.192ms方式1:TMAX = 2161s = 65.536ms方式2、3: TMAX = 281s = 0.256ms第21页,共216页。6T0和T1的应用举例 例4.1 若fOSC=12MHz,请分别计算T0M=0和T0M=1两种情况下,定时2ms所需的初值,并给出T0的初始化程序。解: T0M=0 时: fOSC= 12MHz,方式2、3的最大定时时间只有0.256ms,因此要想获得2ms的定时时间,必须用方式0或方式1。方式0TC=2132ms/1us=6192=1830H=00011

11、00000110000B 即:TH0=0C1H;TL0=10H(高三位为0) 方式1TC=2162ms/1us=63536=F830H 即:TH0=0F8H;TL0=30H第22页,共216页。6T0和T1的应用举例T0M=1 时:要达到2ms的定时时间,只能使用方式1。根据公式可算出此时的定时器初值为:TC=2ms12MHz=212103=41536=A240H即,TH0=0A2H,TL0=40H。第23页,共216页。初始化程序 void T0_mode1_2ms_init() CKCON &= 0 xf7;/T0计数源选择系统脉冲的12分频TMOD=0 x01; /T0方式1定时 TH0

12、=0 xf8; /初值 TL0=0 x30; TCON |= 0 x10; /启动T0,可用TR0=1代替 6T0和T1的应用举例 ?第24页,共216页。6T0和T1的应用举例给定时器赋初值的语句也可以采用如下方法: TH0=(65536-2000)/256; TL0=(65536-2000)%256;或 TH0=-2000/256; TL0=-2000%256;或 TH0=-20008; TL0=-2000;/-2000超出TL0的表示范围,将高位截去第25页,共216页。6T0和T1的应用举例例4.2 若fOSC=12MHz,T1工作于方式1,产生50ms的定时中断,TF1为高级中断源。

13、试编写主程序和中断服务程序,使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=0 x3c,TL0=0 xb0。 第26页,共216页。6T0和T1的应用举例(2)初始化程序 包括T1初始化和中断系统初始化,主要是

14、对IP、IE、CKCON、TCON、TMOD的相应位进行正确的设置,并将时间常数送入T1。本例中将初始化操作放在主程序中完成,当程序规模较大时,应编写单独的初始化程序,以利于程序的模块化设计。(3)中断服务程序 中断服务程序除了完成要求的方波产生这一工作之外,还要注意将时间常数重新送入T1中,为下一次产生中断作准备。第27页,共216页。程序清单如下(主程序): #include sbit P1_0 = P10;int count=10;/10次T1中断为500msvoid main( void ) CKCON&=0 xef; /T1的计数源选择系统脉冲的12分频 TMOD=0 x10; /T

15、1方式1 XBR2=0 x40; /并行端口输出使能 P1_0=0; TH1=0 x3c; /初值 TL1=0 xb0; IE|=0 x88; /允许T1中断 IP|=0 x08; /TF1中断为高级中断 TCON|=0 x40; /启动T1 While(1); /死循环,等待中断,产生方波第28页,共216页。程序清单如下(中断服务程序):void Timer1_ISR (void) interrupt 3 TH1=0 x3c; /重装初值 TL1|=0 xb0; count-; /中断计数 if (count=0) /500ms到,重赋计数初值,P1.0取反 count=10; P1_0=

16、!P1_0; 问题:为什么用TL1|=0 xb0;而非TL1=0 xb0?第29页,共216页。程序清单如下(查询式程序):#include sbit P1_0= P10;void main( ) int count=10;/10次T1中断为500ms CKCON&=0 xef;/T1的计数源选择系统脉冲的12分频 XBR2=0 x40; TMOD=0 x10; /T1方式1 P1_0=0; TR1=1; /启动T1第30页,共216页。程序清单如下(查询式程序): For(; ;) /死循环,产生方波 TH1=-50000/256; /T1初值 TL1=-50000%256; Do whil

17、e(!TF1); /查询等待TF1置位, TF1=0; count-; If (count=0) count=10;P1_0=!P1_0; 第31页,共216页。4.1.3 定时器/计数器T2和T4 T2和T4为16位定时/计数器,T2由TL2(低字节)和TH2(高字节)组成。 T4由TL4(低字节)和TH4(高字节)组成。唯一区别是在作波特率发生器使用时,T2用作UART0的波特率发生器,而T4用作UART1的波特率发生器。 以下以T2为例。C/T2=0时,工作在定时方式,由CKCON的T2M位指定不分频或12分频。C/T2 =1时,工作在计数方式, T2输入引脚上的负跳变使计数器加“1”。

18、T2还可以用于启动ADC数据转换。T4还可以用于触发DAC的输出更新。 有三种工作方式(由T2CON中的配置位选择):自动重装初值的16位定时器/计数器方式、带捕捉的16位定时器/计数器方式和波特率发生器方式。第32页,共216页。表4-4 定时器/计数器T2和T4的特殊功能寄存器 特殊功能寄存器符号地址寻址方式复位值定时器T2控制寄存器T2CON0 xC8字节、位0 x00定时器T2重装/捕捉寄存器低字节RCAP2L0 xCA字节0 x00定时器T2重装/捕捉寄存器高字节RCAP2H0 xCB字节0 x00定时器T2低字节TL20 xCC字节0 x00定时器T2高字节TH20 xCD字节0

19、x00定时器T4控制寄存器T4CON0 xC9字节0 x00定时器T4重装/捕捉寄存器低字节RCAP4L0 xE4字节0 x00定时器T4重装/捕捉寄存器高字节RCAP4H0 xE5字节0 x00定时器T4低字节TL40 xF4字节0 x00定时器T4高字节TH40 xF5字节0 x00第33页,共216页。1T2控制寄存器T2CON 位7(TF2):T2溢出标志位T2溢出时由硬件置位。允许T2中断时,使CPU转向T2的中断服务程序。不能由硬件自动清0,必须用软件清0。RCLK0或TCLK0为1时(波特率发生器方式),TF2不会被置1。位6(EXF2):T2外部中断标志位EXEN2为“1”时,

20、当T2EX输入引脚发生负跳变时,由硬件置位。允许T2中断时,使CPU转向T2的中断服务程序。不能由硬件自动清0,必须用软件清0。CP/RL2C/T2TR2EXEN2TCLK0RCLK0EXF2TF2字节地址C8H D7 D6 D5 D4 D3 D2 D1 D0第34页,共216页。1T2控制寄存器T2CON位5(RCLK0):UART0接收时钟选择标志位0:T1溢出作为接收时钟。1:T2溢出作为接收时钟。位4(TCLK0):UART0发送时钟选择标志位0:T1溢出作为发送时钟。1:T2溢出作为发送时钟。位3(EXEN2):T2外部允许标志位0:T2EX上的负跳变被忽略。1:T2EX上的负跳变导

21、致一次捕捉或重载,并置位EXF2。位2(TR2):T2启/停控制位0:停止。1:启动。第35页,共216页。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发生负跳变时捕捉。第36页,共216页。2定时器2的交叉开关配

22、置第37页,共216页。3T2的工作方式和计数器结构 (1)方式0:自动重装初值的16位定时器/计数器方式原理框图如图4-7所示。表4-5 T2的方式选择 RCLK0TCLK0CP/RL2工作方式000自动重装载的16位定时器/计数器 001带捕捉的16位定时器/计数器 01UART0的发送波特率发生器方式10UART0的接收波特率发生器方式11UART0的接收和发送波特率发生器方式第38页,共216页。(1)方式0:16位自动重装初值方式 自动重装初值两中断标志为0时忽略T2EX负跳变,不产生EXF2中断第39页,共216页。(2)方式1:16位带捕捉方式 RCLK0=0、TCLK0=0、C

23、P/RL2=1时,T2工作在此方式EXEN2=1时为允许捕捉方式,T2EX引脚上的负跳变将TH2、TL2的当前值捕捉到RCAP2H、RCAP2L寄存器,同时置EXF2=1,发出中断请求。EXEN2=0时,RCAP2H、PCAP2L不起作用,此时T2与T0、T1的方式1完全相同。即:C/T20时为16位定时器方式,C/T21时为16位计数器方式,计数溢出时TF21,发送中断请求信号。 原理框图如图4-8所示。 第40页,共216页。(2)方式1:16位带捕捉方式是否捕捉捕捉并产生EXF2中断第41页,共216页。(3)方式2:波特率发生器方式 RCLK或TCLK置1时,T2工作于波特率发生器方式

24、。 与自动重装载方式相似。但不置位TF2,也不产生中断。溢出事件用作UART0的移位时钟输入。 T2溢出可用于产生独立的发送或接收波特率,也可同时产生发送和接收波特率,取决于T2CON的设置。 T2的计数源可以是系统时钟的二分频,也可以是T2引脚上的输入,取决于C/T2的设置。 如果EXEN2为1,则T2EX 引脚上的负跳变将置位EXF2标志,并产生一个T2中断(如果允许)。因此,T2EX 输入可以被用作额外的外部中断源。原理框图如图4-9所示。第42页,共216页。(3)方式2:波特率发生器方式做UART0波特率发生器T1作UART0波特率发生器产生外部中断时基选择第43页,共216页。(3

25、)方式2:波特率发生器方式当选择系统时钟的二分频作计数源时,T2 为UART0提供的波特率可以用如下公式计算:当选择外部引脚T2上的输入作为时基时,T2为UART0提供的波特率可以用如下公式计算: 第44页,共216页。4.1.4 定时器/计数器T31. 定时器T3的结构 16位定时/计数器,由TMR3L(低字节)和TMR3H(高字节)组成。 T3的时钟输入可以通过程序选择为外部振荡器的8分频、系统时钟或系统时钟的12分频。 T3只有自动重装初值一种工作方式,初值保存在TMR3RLL(低字节)和TMR3RLH(高字节)两个SFR中,T3没有计数器方式。 除作为通用定时/计数器使用外,T3还可以

26、用于启动ADC数据转换、SMBus定时等。 与T3相关的SFR如表4-6所示,原理框图如图4-8所示。第45页,共216页。表4-6 定时器T3的特殊功能寄存器特殊功能寄存器符号地址寻址方式复位值定时器3控制寄存器TMR3CN0 x91字节0 x00定时器3重载寄存器低字节TMR3RLL0 x 92字节0 x00定时器3重载寄存器高字节TMR3RLH0 x 93字节0 x00定时器3低字节TMR3L0 x 94字节0 x00定时器3高字节TMR3H0 x 95字节0 x00第46页,共216页。1. 定时器T3的结构时基选择仅此一种方式启动ADC第47页,共216页。2定时器3控制寄存器TMR

27、3CN 位7(TF3):T3溢出标志位溢出时置1,不能由硬件自动清0,必须用软件清0 位2(TR3):T3运行控制位 0:停止。1:启动。位1(T3M):T3时钟选择位 0:T3使用系统时钟的12分频。1:T3使用系统时钟。位0(T3XCLK):T3外部时钟选择位 0:由T3M定义。1:外部振荡器输入的8分频。 T3XCLKT3MTR3-TF3字节地址C8H D7 D6 D5 D4 D3 D2 D1 D0第48页,共216页。3T3应用举例 例 4.3 假设C8051F020的并行口P2、P3连接16个共阳极LED指示灯,试编写程序使P3口所接的LED灯循环点亮,P2口所接的LED灯实现走马灯

28、效果。(实验四) 解:要实现题目要求的效果,只需要定期更新P2、P3口的状态即可。这里可以使用T3定时器再加软件计数的方法达到所要求的时间,假设T3定时0.1秒产生中断,则软件计数器每0.1秒加1,让计数器加到5时,改变P2、P3口的状态,就可以实现每秒2次刷新LED灯的状态。第49页,共216页。3T3应用举例#include sfr16 TMR3RL = 0 x92; /16位SFR sfr16 TMR3 = 0 x94; #define SYSCLK 2000000 /系统时钟使用2MHz/函数声明void PORT_Init(void); void Timer3_Init(int co

29、unts);void Timer3_ISR(void);/P2口8个LED (共阴极)产生走马灯效果所需的数据 unsigned int xdata p2led=0 x7f,0 xbf,0 xdf,0 xef,0 xf7, 0 xfb,0 xfd,0 xfe; 第50页,共216页。3T3应用举例void main (void) WDTCN = 0 xde; /禁止看门狗定时器 WDTCN = 0 xad;PORT_Init(); /端口初始化 Timer3_Init(SYSCLK/12/10); /T3初始化,产生0.1秒的定时中断 EA = 1; /开中断 while (1) ; /循环等

30、待T3中断,产生走马灯效果 void PORT_Init (void) XBR2 = 0 x40; /使能交叉开关第51页,共216页。3T3应用举例void Timer3_Init (int counts) TMR3CN = 0 x00; TMR3RL = -counts; /T3赋初值,也可以采用8位SFR方式,向例4.2那样 TMR3 = 0 xffff; /立即重载 EIE2 |= 0 x01; /开T3中断 ,见P42 EIE2格式 TMR3CN |= 0 x04; /启动T3第52页,共216页。3T3应用举例void Timer3_ISR (void) interrupt 14

31、static int count; static int i=9,j=0; static int led=0 xff; /P3口LED灯的初始状态 TMR3CN &= (0 x80); /清TF3 count+; if(count=5) /T3中断5次更新一次LED灯状态 count=0; P3=led;P2=p2ledj; /查表led=led1; i-; j+; if(j=8) j=0; /P2口LED灯循环一个周期 if(i=0) i=9; led=0 xff; /P3口LED灯循环一个周期 为什么i=9,而不是i=8?因为还有全亮和全灭两个状态,所以共10个状态。第53页,共216页。

32、4.2 可编程计数器阵列 可编程计数器阵列 (Programmable Counter Array)提供了增强的定时器功能,与标准8051的定时器/计数器相比,需要的CPU干预更少。C8051F020内部集成有一个可编程计数器阵列,称为PCA0 。包含一个专用的16位定时器/计数器和5个16位捕捉/比较模块。每个捕捉/比较模块有自己的I/O线 (CEXn)。通过配置交叉开关,可以将I/O线连接到并行I/O端口。定时/计数器有六个计数源(由PCA0MD中的CPS2-CPS0位选择):系统时钟、系统时钟/4、系统时钟/12、外部振荡器时钟源8分频、定时器0溢出、ECI线上的外部时钟信号。每个捕捉/

33、比较模块可独立工作在6种工作方式之一。第54页,共216页。4.2 可编程计数器阵列6种时钟源捕捉/比较模块第55页,共216页。4.2.1 PCA0交叉开关配置第56页,共216页。表4-7 PCA0的功能引脚与I/O端口的连接PCA0ME2(XBR0.5)PCA0ME12(XBR0.4)PCA0ME0(XBR0.3)连到I/O端口连接数000所有PCA0口都不配置I/O端口0001CEX01010CEX0、CEX12011CEX0、CEX1、CEX23100CEX0、CEX1、CEX2、CEX341CEX0、CEX1、CEX2、CEX3、CEX45第57页,共216页。4.2.2 PCA0

34、的特殊功能寄存器特殊功能寄存器符号地址寻址方式复位值PCA0控制寄存器PCA0CN0 xD8字节、位0 x00PCA0方式选择寄存器PCA0MD0 x D9字节0 x00PCA0捕捉/比较寄存器PCA0CPMn0 x 8A字节0 x00PCA0定时器/计数器低字节PCA0L0 x E9字节0 x00PCA0定时器/计数器高字节PCA0H0 x F9字节0 x00PCA0捕捉模块低字节PCA0CPLn0 x EA0 xEE字节0 x00PCA0捕捉模块高字节PCA0CPHn0 x FA0 xFE字节0 x00第58页,共216页。4.2.2 PCA特殊功能寄存器 1、PCA控制寄存器PCA0CN

35、 CCF0CCF1CCF2CCF3CCF4-CRCF字节地址D8H D7 D6 D5 D4 D3 D2 D1 D0位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。第59页,共216页。2、PC

36、A0方式选择寄存器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中断。ECFCPS0CPS1CPS2-CIDL字节地址D9H D7 D6 D5 D4 D3 D2 D1 D0第60页,共216页。3、PCA0捕捉/比较寄存器PCA0CPMn P

37、CA0CPMn地址: PCA0CPM0=0 xDA (n=0)、PCA0CPMl=0 xDB (n=1) PCA0CPM2=0 xDC (n=2)、PCA0CPM3=0 xDD (n=3) PCA0CPM4=0 xDE (n=4)位7:PWMl6n:16位脉冲宽度调制允许位 当工作在脉冲宽度调制方式时 (PWMn=1),该位选择16位PWM方式。 0:选择8位PWM。1:选择16位PWM。ECCFnPWMnTOGnMATnCAPNnCAPPnECOMnPWM16n字节地址0DA-0DEH D7 D6 D5 D4 D3 D2 D1 D0第61页,共216页。位6(ECOMn):比较器功能允许位0

38、:禁止。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 第62页,共216页。4.2.3 PCA定时器/计数器 16位PCA定时/计数器由PCA0L(低字节)和PCA0H(高字节)组成。在读

39、PCA0L的同时自动锁存PCA0H的值。读PCA0H或PCA0L不影响计数器工作。原理框图如图4-10所示。PCA0MD寄存器中的CPS2-CPS0位用于选择PCA定时/计数器的计数脉冲源,如下表所示。CPS2CPS1CPS0计数脉冲源000系统时钟的12分频001系统时钟的4分频010定时器0溢出011ECI负跳变(最大速率=系统时钟频率/4)100系统时钟101外部振荡源8分频第63页,共216页。4.2.3 PCA定时器/计数器清除PCA0MD寄存器中的CIDL位则允许PCA在微控制器内核处于等待方式时继续正常工作。定时/计数器溢出时 (从0 xFFFF加1到0 x0000),PCA0M

40、D中的CF 置1,如果允许CF中断,则可以产生一个中断请求。PCA0MD中的ECF位置1即可允许CF中断,但要使CF中断得到响应,必须先总体允许PCA0中断(通过将EA位 (IE.7) 和EPCA0位 (EIE1.3) 置1可总体允许PCA0中断)。CF位不能由硬件自动清除,必须用软件清0。PCA0中断配置的详细信息如图4-11所示。第64页,共216页。4.2.3 PCA定时器/计数器读PCA0L时锁存PCA0H第65页,共216页。4.2.3 PCA定时器/计数器将PCA0MD中的ECF位置1即可允许CF中断各模块中断控制总控开关第66页,共216页。4.2.4 PCA捕捉/比较模块 5个

41、捕捉/比较模块都可独立工作在六种工作方式(由PCA0CPMn设置),如下表所示: PWM16ECOMCAPPCAPNMATTOGPWM工 作 方 式XX10000用CEXn的正沿触发捕捉XX01000用CEXn的负沿触发捕捉XX11000用CEXn的电平改变触发捕捉X100100软件定时(比较)器X100110高速输出X100X11频率输出0100X018位脉冲宽度调制器1100X0116位脉冲宽度调制器第67页,共216页。1边沿触发的捕捉方式CEXn引脚上有效的电平变化(CEXn输入信号的高、低电平至少要持续两个系统时钟周期)可以捕捉PCA0定时 /计数器的值,将其装入到对应模块的16位捕

42、捉/比较寄存器 (PCA0CPHn和PCA0CPLn) 进行比较。当捕捉发生时,PCA0CN中的捕捉/比较标志 (CCFn) 置1,如果允许CCF中断,则可产生一个中断请求。CCFn位不能由硬件自动清除,必须用软件清0。原理框图如图4-12所示。 第68页,共216页。1边沿触发的捕捉方式正/负跳变捕捉中断捕捉第69页,共216页。2软件定时(比较)器方式 置1 PCA0CPMn寄存器中的ECOMn和MATn位可将PCA0设置在软件定时(比较)器方式。该方式将PCA0定时/计数器与模块的16位捕捉/比较寄存器 (PCA0CPHn和PCA0CPLn) 进行比较。匹配时,PCA0CN中的捕捉/比较

43、标志 (CCFn) 置1,如果允许CCF中断,则可产生一个中断请求。CCFn位不能由硬件自动清除,必须用软件清0。注意:向PCA0的捕捉/比较寄存器写入一个16位值时,应先写低字节,后写高字节。对PCA0CPLn的写入操作将清ECOMn位;PCA0CPHn写入时将置1 ECOMn位。 原理框图如图4-13所示。第70页,共216页。2软件定时(比较)器方式写PCA0CPLn 、 PCA0CPHn对ECOMn的影响匹配允许开关中断比较第71页,共216页。3高速输出方式 该方式下,每当PCA的计数器与模块的16位捕捉/比较寄存器 (PCA0CPHn和PCA0CPLn) 发生匹配时,模块的CEXn

44、引脚上的逻辑电平将发生改变。置1 PCA0CPMn寄存器中的TOGn、MATn和ECOMn位可将PCA0设置为该方式。与软件定时器方式一样应注意,当向PCA0的捕捉/比较寄存器写入一个16位数值时,应先写低字节,后写高字节。 原理框图如图4-14所示。第72页,共216页。3高速输出方式同上设置此3位即为该方式匹配后电平发生改变第73页,共216页。4频率输出方式 该方式在对应的CEXn引脚产生可编程频率的方波。捕捉/比较寄存器的高字节保持着输出电平改变前要计的PCA时钟数。 所产生的方波的频率由下式定义: FPCA是由PCA方式寄存器PCA0MD中的GPS2-0位选择的PCA时钟频率。第74

45、页,共216页。4频率输出方式捕捉/比较模块的低字节与PCA0计数器的低字节比较,两者匹配时,CEXn的电平发生改变,高字节中的偏移值加到PCA0CPLn。注意:在该方式下如果允许模块匹配 (CCFn) 中断,则发生中断的速率为2fCEXn。置位PCA0CPMn寄存器中ECOMn、TOGn和PWMn位可将PCA0设置为频率输出方式。第75页,共216页。4频率输出方式匹配时,电平改变,PCA0CPHn加到PCA0CPLn第76页,共216页。58位脉宽调制器方式 该方式下,每个模块都可以独立地产生脉宽调制 (PWM)输出。PWM的频率取决于PCA0定时/计数器的计数时钟源。使用模块的捕捉/比较

46、寄存器PCA0CPLn可以改变PWM输出信号的占空比。当PCA0定时器/计数器的低字节 (PCA0L)与PCA0CPLn中的值相等时,CEXn输出高电平,当PCA0L中的计数值溢出时,CEXn输出低电平。当定时器/计数器的低字节PCA0L溢出时(从0 xFF到0 x00),PCA0CPHn中的值自动装入PCA0CPLn,不需软件干预。置1 PCA0CPMn寄存器中的ECOMn和PWMn位可将PCA0设置为8位脉冲宽度调制器方式。第77页,共216页。58位脉宽调制器方式匹配时置1溢出时置0并将PCA0CPHn装入PCA0CPLn第78页,共216页。58位脉宽调制器方式8位PWM方式的占空比由

47、下面方程给出: 可见,最大占空比为100% (PCA0CPHn=0),最小占空比为0.39% (PCA0CPHn =0 xFF)。可以通过清0 ECOMn位产生0%的占空比。 第79页,共216页。616位脉宽调制器方式16位方式,其余与8位方式相同第80页,共216页。4.2.5 PCA应用举例例4.4 PCA0模块0工作在16位PWM方式驱动直流电机。1. 工作原理设置PCA0模块0工作在16位PWM方式,从P0.0输出方波脉冲驱动直流电机,原理图如图4-22所示。改变方波的占空比,可以实现对直流电机的调速控制。第81页,共216页。4.2.5 PCA应用举例2. 相关特殊功能寄存器的配置

48、(1)I/O端口交叉开关寄存器XBR0 选择PCA0ME=001B,CEX0连接到端口P0.0。XBR0=0 x08。(2)I/O端口交叉开关寄存器XBR2 选择WEAKPUD=0,允许全局弱上拉;XBARE=1,使能交叉开关。XBR2=0 x40。CP0EECI0EPCA0ME2PCA0ME1PCA0ME0UART0ENSPI0ENSMB0EN00001000WEAKPUDXBARE-T4EXET4EUART1EEMIFLECNVSTE01000000第82页,共216页。4.2.5 PCA应用举例(3)PCA0方式选择寄存器PCA0MD 选择CIDL=0,系统空闲时,PCA0继续工作;CP

49、S=100,使用系统时钟为PCA0计数器时钟源;ECF=1,允许PCA0定时器/计数器溢出中断。PCA0MD=0 x09。(4)PCA0捕捉/比较模块0寄存器PCA0CPM0 选择PWM160=1,ECOM0=1,PWM0=1,使捕捉/比较模块0工作在16位PWM方式;ECCF0=1,允许捕捉/比较标志CCF0的中断请求;MAT0=1,使能匹配功能。PCA0CPM0=0 xcb。 CIDL-CPS2CPS1CPS0ECF00001001PWM160ECOM0CAPP0CAPN0MAT0TOG0PWM0ECCF011001011第83页,共216页。4.2.5 PCA应用举例(5)PCA0捕捉模

50、块0寄存器PCA0CPL0和 PCA0CPH0由前可知,16位PWM方式的占空比为: 占空比= 这里,模块0的PCA0CPn由PCA0CPL0和 PCA0CPH0组成。PCA0CPL0和 PCA0CPH0的值由占空比决定,即占空比= 由该式可以计算出常用占空比与PCA0CPL0和PCA0CPH0的对应关系如表4-11所示。 第84页,共216页。4.2.5 PCA应用举例PCA0CPH0PCA0CPL0占空比0 x800 x00(0 x1000-0 x8000)/0 x10000=1/20 xc00 x00(0 x1000-0 xc000)/0 x10000=1/40 xe00 x00(0 x

51、1000-0 xe000)/0 x10000=1/8表4-11 16位PWM方式的占空比与PCA0CPL0和PCA0CPH0的对应关系第85页,共216页。4.2.5 PCA应用举例(6)内部振荡器控制寄存器OSCICN 选择IFRDY=1,内部振荡器准备好标志,内部振荡器频率按照IFCN位指定的速度运行,这里IFCN=11,选择16MHz。I0SCEN=1,使能内部振荡器。OSCICN=0 x17。MSCLKE-IFRDYCLKSLIOSCENIFCN1IFCN000010111第86页,共216页。4.2.5 PCA应用举例3. 程序清单#include /函数原型声明void Port_

52、Init(void); /端口初始化程序void PCA0_Init(void); /PCA0初始化程序void PCA0_ISR(void); /PCA0中断服务程序void main(void)WDTCN=0 xde; /关看门狗WDTCN=0 xad;Port_Init( );PCA0_Init( );EA=1;while(1); /等待中断产生PWM波形第87页,共216页。4.2.5 PCA应用举例void Port_Init(void) /端口初始化程序XBR0=0 x08; /CEX0配置到端口P0.0XBR2=0 x40; /使能交叉开关和弱上拉void PCA0_Init(v

53、oid) /PCA0初始化程序EIE1=0 x08; /允许PCA0申请中断OSCICN=0 x17; /采用内部时钟,频率为16MHzPCA0MD=0 x09; /使用系统时钟源,允许PCA0定时器/计数器溢出中断PCA0L=0 x00; /定时器/计数器初值为0 x0000PCA0H=0 x00;PCA0CPM0=0 xcb; /PCA0模块0为16位PWM方式,允许CCF0中断PCA0CPL0=0 x00;PCA0CPH0=0 x80;PCA0CN=0 x40; /启动PCA0定时器/计数器 第88页,共216页。4.2.5 PCA应用举例void PCA0_ISR(void) inte

54、rrupt 9 /PCA0中断服务子程序CF=0; /清溢出中断标志CCF0=0; /清匹配中断标志 第89页,共216页。4.2.5 PCA应用举例例4.5 用PCA0边沿触发的捕捉方式测量方波的周期。1. 工作原理PCA0负边沿触发的捕捉方式测量方波周期的电路图如图4-23所示。将CEX0配置到P0.0端口,并将被测方波信号由P0.0输入到C8051F020中的PCA0。 第90页,共216页。4.2.5 PCA应用举例输入时钟信号间隔T微妙后便产生1次负跳变并触发中断,产生捕捉。这时在t时间宽度内,两次负跳变之间的计数值存放在16位寄存器PCA0CPH0和CPA0CPL0中,可以读出。设

55、该计数值的数值为D,则或式中,T为被测方波的周期。16MHz是程序选定的振荡器频率,它作为PCA0计数器的计数时钟源。为提高测量精度,可以选择测量的时间宽度为100T,D为100T内的计数值的总和,然后再取平均值可得到T:第91页,共216页。4.2.5 PCA应用举例2. 相关特殊功能寄存器的配置 1)I/O端口交叉开关寄存器XBR0和XBR2与例4.4相同,XBR0=0 x08,XBR2=0 x40。2)PCA0方式选择寄存器(PCA0MD)与例4.4相同,PCA0MD=0 x09。3)PCA0捕捉/比较模块0寄存器PCA0CPM0选择CAPN0=1,使捕捉/比较模块0工作在负边沿触发的捕

56、捉方式;ECCF0=1,允许捕捉/比较标志CCF0的中断请求。 PCA0CPM0=0 x11。4)内部振荡器控制寄存器OSCICN与例4.4相同,OSCICN=0 x17。第92页,共216页。4.2.5 PCA应用举例3. 程序清单#include /函数原型声明void PORT_Init (void); /I/O端口初始化void PCA0_Init (void); /PCA0初始化void PCA0_ISR (void); /PCA0中断服务子程序unsigned char i; /PCA0中断次数计数器void main (void) float T,data0; /用于频率计算 W

57、DTCN = 0 xde; /关看门狗 WDTCN = 0 xad; PORT_Init (); i=0; EA = 1; /开中断 PCA0_Init (); /PCA0初始化 while (i0 x64) ; /等待PCA0 中断100次 PCA0CN=0 x00; /禁止PCA0定时器/计数器 EIE1 = 0 x00; /禁止PCA0中断 data0=(PCA0CPH0*256+PCA0CPL0); /处理来自PCA0CPH0和PCA0CPL0的数据 data0=data0/16.0; T=data0/100.0; /计算被测波形的周期,以s为单位第93页,共216页。4.2.5 PC

58、A应用举例void PORT_Init (void) /端口初始化程序 XBR0 = 0 x08;/CEX0配置到端口P0.0 XBR2 = 0 x40; /使能交叉开关和弱上拉void PCA0_Init (void) /PCA0初始化程序EIE1 = 0 x08; /使能PCA0中断OSCICN=0 x17; /采用内部时钟,频率为16MHzPCA0MD = 0 x09; /使用系统时钟源,允许PCA0定时器/计数器溢出中断PCA0L = 0 x00;PCA0H = 0 x00;PCA0CPM0 = 0 x11; /PCA0负边沿捕捉方式,允许辅捉/比较标志的中断申请PCA0CPL0 =

59、0 x00;PCA0CPH0 = 0 x00; PCA0CN=0 x40;/启动PCA0定时器/计数器void PCA0_ISR (void) interrupt 9 /PCA0中断服务子程序i+;/计中断次数CCF0 = 0;/清匹配中断标志CCF0第94页,共216页。PCA应用举例void SYSCLK_Init (void) /时钟初始化 int i; OSCXCN = 0 x67; /外部晶振22.1184MHz for (i=0; i 256; i+) ;/延时 while (!(OSCXCN & 0 x80) ;/等待外部晶振稳定 OSCICN = 0 x88; /选择外部晶振作

60、系统时钟源,允许时钟丢失检测 void Init_PCA0(void) /PCA0初始化 PCA0MD=0 x08; /PCA0采用系统时钟,禁止PCA0定时器溢出中断EIE1|=0 x08; /允许PCA0中断 PCA0CPM0=0 x21; /模块0上升沿中断允许 PCA0CPM1=0 x21; /模块1 CR=0; /关PCA0第95页,共216页。4.3 UART通信接口 C8051F具有丰富的串行通信接口。包括2个UART通信接口、一个与I2C兼容的SMBus接口和一个SPI接口。UART串行接口是全双工串行通信接口,即能同时进行串行发送和接收。它可以作UART(通用异步接收和发送器

温馨提示

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

最新文档

评论

0/150

提交评论