单片机原理及应用清华版chap

上传人:re****.1 文档编号:591165771 上传时间:2024-09-16 格式:PPT 页数:188 大小:4.79MB
返回 下载 相关 举报
单片机原理及应用清华版chap_第1页
第1页 / 共188页
单片机原理及应用清华版chap_第2页
第2页 / 共188页
单片机原理及应用清华版chap_第3页
第3页 / 共188页
单片机原理及应用清华版chap_第4页
第4页 / 共188页
单片机原理及应用清华版chap_第5页
第5页 / 共188页
点击查看更多>>
资源描述

《单片机原理及应用清华版chap》由会员分享,可在线阅读,更多相关《单片机原理及应用清华版chap(188页珍藏版)》请在金锄头文库上搜索。

1、14. 4. 内功能部件内功能部件 4.1 4.1 定时器定时器/ /计数器计数器 4.2 4.2 可编程计数器阵列可编程计数器阵列 4.3 UART4.3 UART通信接口通信接口 4.4 4.4 SMBusSMBus 4.5 SPI4.5 SPI总线总线 24.1 4.1 定时器定时器/ /计数器计数器 v定时和计数功能最终都是通过定时和计数功能最终都是通过计数实现计数实现的,若计数的事件源是的,若计数的事件源是周期固定的脉冲,则可以实现周期固定的脉冲,则可以实现定时功能定时功能,否则只能实现,否则只能实现计数功能计数功能。因此可以将定时和计数功能由一个部件实现。因此可以将定时和计数功能由

2、一个部件实现。v实现定时和计数的方法一般实现定时和计数的方法一般有软件、专用硬件电路和可编程定有软件、专用硬件电路和可编程定时器时器/ /计数器计数器三种方法。三种方法。采用软件只能定时,且占用采用软件只能定时,且占用CPUCPU时间,降低了时间,降低了CPUCPU的使用效率。的使用效率。专用硬件电路可实现精确的定时和计数,但参数调节不便。专用硬件电路可实现精确的定时和计数,但参数调节不便。可编程定时器计数器,不占用可编程定时器计数器,不占用CPUCPU时间,能与时间,能与CPUCPU并行工作,实现精确并行工作,实现精确的定时和计数,又可以通过编程设置其工作方式和其它参数,因此使用方的定时和计

3、数,又可以通过编程设置其工作方式和其它参数,因此使用方便便。 34.1 4.1 定时器定时器/ /计数器计数器vC8051F020C8051F020内部有内部有T T0 0T T4 4共共5 5个个1616位定时器位定时器/ /计数器计数器,其中,其中T T0 0T T2 2与与MCS-51MCS-51中的定时器中的定时器/ /计数器兼容,还有两个计数器兼容,还有两个1616位自动重装初值的定位自动重装初值的定时器时器T T3 3 和和T T4 4既可以作为通用定时器使用,也可以用于既可以作为通用定时器使用,也可以用于ADCADC和和SMBusSMBus。 表表4-1 C8051F0204-1

4、 C8051F020定时器定时器/ /计数器的工作方式计数器的工作方式 44.1.1 4.1.1 定时器的一般结构和工作原理定时器的一般结构和工作原理 方式选择方式选择计数器计数器定时器定时器启启/ /停控制停控制执行机构执行机构减减1 1计数:如计数:如Intel 8253Intel 8253加加1 1计数:如计数:如T0T0T4T4溢出标志溢出标志查询查询中断中断5最大定时时间最大定时时间vT TMAXMAX=2=2n nTT计数计数 式式中中n n由由工工作作方方式式决决定定,T T计计数数为为定定时时器器/ /计计数数器器的的计计数数脉脉冲冲周周期期时时间间,由由C8051FC8051

5、F的的主主脉脉冲冲或或主主脉脉冲冲经经1212分分频频提提供供,是是否否需需要要1212分分频频取取决决于于对对时时钟钟控控制制寄寄存存器器CKCONCKCON的的设设定定(提提供供1212分分频频选选项项是是为了与标准为了与标准80518051兼容)。兼容)。 vT0T0T4T4均为加均为加1 1计数器计数器6时钟控制寄存器时钟控制寄存器CKCONCKCONv位位7 7:未用。读:未用。读=0b=0b,写写= =忽略。忽略。v位位6-36-3:T4M-T0MT4M-T0M:T4T4到到T0T0的时钟选择(不包含的时钟选择(不包含T3T3,T3T3的时钟选的时钟选择由择由T3T3控制寄存器控制

6、寄存器TMR3CNTMR3CN的第的第0 0位位T3XCLKT3XCLK决定)。决定)。 0 0:定时器按系统时钟的:定时器按系统时钟的1212分频计数分频计数 1 1:定时器按系统时钟频率计数:定时器按系统时钟频率计数v位位2-02-0:保留。读:保留。读=000b=000b,写入值必须是写入值必须是000b000b。 71 1定时、计数方式定时、计数方式 v定定时时方方式式:每每一一个个计计数数周周期期(T(T计计数数) )计计数数器器加加1 1,直直至至计计满满溢溢出出( (从从全全1 1到到全全0)0)产产生生中中断断请请求求。对对于于一一个个N N位位的的加加1 1计计数数器器,若若

7、T T计计数数是已知的,则从初值是已知的,则从初值a a开始加开始加1 1计数至溢出所占用的时间为:计数至溢出所占用的时间为:v当当N=8N=8、a=0a=0时,时,最大定时时间最大定时时间为:为: T=256T=256T T计数计数v计数方式:计数方式:外部输入信号的外部输入信号的下降沿触发计数下降沿触发计数,计数器在每个时,计数器在每个时钟周期或时钟周期的钟周期或时钟周期的1212分频采样外部输入信号,若一个周期的采分频采样外部输入信号,若一个周期的采样值为样值为1 1,下一个周期的采样值为,下一个周期的采样值为0 0,则计数器加,则计数器加1 1,故识别一个,故识别一个从从1 1到到0

8、0的跳变需的跳变需2 2个周期,所以,对外部输入信号最高的计数速个周期,所以,对外部输入信号最高的计数速率是时钟频率的率是时钟频率的1 12 2或或1/241/24(取决于是否(取决于是否1212分频)。同时,外部分频)。同时,外部输入信号的高电平与低电平保持时间均需大于一个周期。输入信号的高电平与低电平保持时间均需大于一个周期。84.1.2 4.1.2 定时器定时器/ /计数器计数器T0T0和和T1T1 v对定时器对定时器/ /计数器计数器T0T0和和T1T1的访问和控制是通过操作的访问和控制是通过操作SFRSFR实现的。实现的。vT0T0和和T1T1都是都是1616位的加位的加1 1计数器

9、计数器,访问时以两个字节的,访问时以两个字节的形式出现:形式出现:TL0+TH0TL0+TH0、TL1+TH1TL1+TH1vTCONTCON用于允许用于允许/ /禁止定时器禁止定时器0 0和定时器和定时器1 1并指示它们的并指示它们的工作状态。工作状态。vT0T0和和T1T1都有都有四种工作方式四种工作方式,可以,可以TMODTMOD中的方式选择位中的方式选择位M1-M0M1-M0进行选择。进行选择。91 1、方式寄存器、方式寄存器TMODTMOD T0M0T0M1C/T0GATE0T1M0T1M1C/ T1GATE1TMOD字节字节地址地址89H D7 D6 D5 D4 D3 D2 D1

10、D0控制控制T0T0控制控制T1T1方式选择方式选择0000:方式:方式0 00101:方式:方式1 11010:方式:方式2 21111:方式:方式3 3定时定时/ /计数选择计数选择0 0:定时器:定时器1 1:计数器:计数器门控位门控位102 2、控制寄存器、控制寄存器TCONTCON IT0IE0IT1IE1TR0TF0TR1TF1TCON字节字节地址地址88H88H D7 D6 D5 D4 D3 D2 D1 D0控制外部中断控制外部中断控制控制T1T1、T0T0启启/ /停控制停控制GATE=0GATE=0时时O O:停停1 1:启启溢出标志溢出标志1 1:溢出溢出0 0:不溢出不溢

11、出113 3T0T0和和T1T1的工作方式和计数器结构的工作方式和计数器结构 表表4-2 4-2 定时器定时器T0T0、T1T1的工作方式的工作方式12(1 1)工作方式)工作方式0 0 13位计位计数器数器启启/停控制停控制TR0=1TR0=1启动计数启动计数GATE0=0GATE0=0时:时:GATE0=1GATE0=1时:时: TR0=1TR0=1且且INT0=1INT0=1启动计数启动计数时基时基选择选择定时定时/计数选择计数选择13(1 1)工作方式)工作方式0 0v若若T0T0工作于方式工作于方式0 0的定时器模式,计数初值为的定时器模式,计数初值为a a,则,则T0T0从初值从初

12、值a a加加1 1计数至溢出所需的时间为:计数至溢出所需的时间为: 式中式中f fOSCOSC为系统时钟频率,为系统时钟频率,T0MT0M为为T0T0的时钟选择位。的时钟选择位。v如果如果f fOSCOSC12MHz12MHz,则,则T0M=0T0M=0时,时,T T(2(21313a)a)s s;T0M=1T0M=1时,时,T T(2(21313a)/12a)/12s s。14(2 2)工作方式)工作方式1 1v和和方方式式0 0的的差差别别仅仅仅仅在在于于计计数数器器的的位位数数不不同同,方方式式1 1为为1616位位的定时器计数器。的定时器计数器。vT0T0工工作作于于方方式式1 1时时

13、,由由TH0TH0作作为为高高8 8位位,TL0TL0作作为为低低8 8位位,构成一个构成一个1616位计数器。位计数器。v若若T0T0工工作作于于方方式式1 1定定时时,计计数数初初值值为为a a,f fOSCOSC12MHz12MHz,则则T0T0从计数初值从计数初值a a加加1 1计数到溢出的定时时间为:计数到溢出的定时时间为: T T( (2 21616a)s a)s 或或 T T( (2 21616a)/12sa)/12s。15(3 3)工作方式)工作方式2 28位位自动重装初值自动重装初值16(3 3)工作方式)工作方式2 2v适用于需要适用于需要重复定时或计数的场合重复定时或计数

14、的场合。v定时精度比较高,但定时时间较短。定时精度比较高,但定时时间较短。v定时时间可用下式计算:定时时间可用下式计算: 17(4 4)工作方式)工作方式3 3v只适用于只适用于T0T0,若,若T1T1设置为方式设置为方式3 3,则停止计数。,则停止计数。 两个独立两个独立8位计数器位计数器借用借用T1的资源的资源184 4T0T0和和T1T1的初始化的初始化 v初始化步骤初始化步骤 初始化初始化TMOD根据需要初始化根据需要初始化CKCON装入初值装入初值中断设置(中断设置(IE、IP)启动定时启动定时/计数器(计数器(TCON)v计数器方式初值的计算计数器方式初值的计算 TC=MTC=MC

15、 C 为计数器的模,与工作方式有关为计数器的模,与工作方式有关 ,C为需要的计数值为需要的计数值v定时器方式初值的计算定时器方式初值的计算T=(MT=(MTC)TTC)T计数计数 T T计数计数= =CLKCLK或或1212CLKCLK TC=MTC=MT/TT/T计数计数 194 4T0T0和和T1T1的初始化的初始化v最大定时时间(最大定时时间(f fOSCOSC12MHz12MHz、T0M=0T0M=0 ):):方式方式0 0:T TMAX MAX = 2= 2131311s s = 8.192ms= 8.192ms方式方式1 1:T TMAXMAX = 2 = 2161611s s =

16、 65.536ms= 65.536ms方式方式2 2、3 3: T TMAXMAX = 2 = 28 811s s = 0.256ms= 0.256ms205 5T0T0和和T1T1的应用举例的应用举例 v例例4.14.1 若若f fOSCOSC=12MHz=12MHz,用系统时钟的十二分频作为计用系统时钟的十二分频作为计数源,请计算定时数源,请计算定时2ms2ms所需的初值,并给出初始化程序。所需的初值,并给出初始化程序。v解:解: f fOSCOSC= 12MHz= 12MHz,用系统时钟的十二分频作为计用系统时钟的十二分频作为计数源时,方式数源时,方式2 2、3 3的最大定时时间只有的最

17、大定时时间只有0.256ms0.256ms,因此因此要想获得要想获得2ms2ms的定时时间,的定时时间,必须用方式必须用方式0 0或方式或方式1 1。v方式方式0 0TC=2TC=213132ms/1us=6192=1830H2ms/1us=6192=1830H 即:即:TH0=0C1HTH0=0C1H;TL0=10HTL0=10H(高三位为高三位为0 0) v方式方式1 1TC=2TC=216162ms/1us=63536=2ms/1us=63536=F830HF830H 即:即:TH0=0F8HTH0=0F8H;TL0=30HTL0=30H21v初始化程序初始化程序 void T0_mod

18、e1_2ms_init()void T0_mode1_2ms_init() CKCON&=0xf7;CKCON&=0xf7;/T0/T0计数源选择系统脉冲的计数源选择系统脉冲的1212分频分频TMOD=0x01; TMOD=0x01; /T0/T0,方式方式1 1 TH0=0xf8; TH0=0xf8; /初值初值 TL0=0x30;TL0=0x30; TCON|=0x10; TCON|=0x10; /启动启动T0T0,可用可用TR0=1TR0=1代替代替 5 5T0T0和和T1T1的应用举例的应用举例 225 5T0T0和和T1T1的应用举例的应用举例v给定时器赋初值的语句给定时器赋初值的语

19、句也可以采用如下方法也可以采用如下方法: TH0=(65536-2000)/256;TH0=(65536-2000)/256; TL0=(65536-2000)%256; TL0=(65536-2000)%256;或或 TH0=-2000/256;TH0=-2000/256; TL0=-2000%256; TL0=-2000%256;235 5T0T0和和T1T1的应用举例的应用举例v例例4.24.2 若若f fOSCOSC=12MHz=12MHz,T1T1工作于方式工作于方式1 1,产生,产生50ms50ms的定时中断,的定时中断,TF1TF1为高级中断源。试编写主程序和中断服务程序,使为高

20、级中断源。试编写主程序和中断服务程序,使P1.0P1.0产生产生周期为周期为1s1s的方波的方波。 v解:解:让让P1.0P1.0每每500ms500ms取反一次取反一次即可实现。定时器的单次定时时即可实现。定时器的单次定时时间不可能达到间不可能达到500ms500ms,可让定时器可让定时器多次定时产生多次定时产生500ms500ms的定时时间,的定时时间,如让如让T1T1工作在方式工作在方式1 1,单次定时时间为,单次定时时间为50ms50ms,那么那么T1T1中断中断1010次就次就是是500ms500ms的时间。的时间。 v(1 1)确定定时常数)确定定时常数假假设设使使用用f fOSC

21、OSC的的1212分分频频作作为为计计数数源源,则则T T计计数数12/ 12/ f fOSCOSC 12/12/(121012106 6)1s1s由公式由公式TC=MTC=MT/TT/T计数计数,可知,可知TC=2TC=21616-5010-50103 315536=3CB0H15536=3CB0HTH1=0x3cTH1=0x3c,TL0=0xb0TL0=0xb0。 245 5T0T0和和T1T1的应用举例的应用举例v(2 2)初始化程序)初始化程序 包包括括T1T1初初始始化化和和中中断断系系统统初初始始化化,主主要要是是对对IPIP、IEIE、CKCONCKCON、TCONTCON、TM

22、ODTMOD的的相相应应位位进进行行正正确确的的设设置置,并并将将时时间间常常数数送送入入T1T1。本本例例中中将将初初始始化化操操作作放放在在主主程程序序中中完完成成,当当程程序序规规模模较较大大时时,应编写单独的初始化程序,以利于程序的模块化设计。应编写单独的初始化程序,以利于程序的模块化设计。v(3 3)中断服务程序)中断服务程序 中中断断服服务务程程序序除除了了完完成成要要求求的的方方波波产产生生这这一一工工作作之之外外,还还要注意将时间常数重新送入要注意将时间常数重新送入T1T1中,为下一次产生中断作准备。中,为下一次产生中断作准备。25程序清单如下程序清单如下程序清单如下程序清单如

23、下(主程序)(主程序)(主程序)(主程序): #include #include sbitsbit P1_0 = P10; P1_0 = P10;intint count=10; count=10;/10/10次次T1T1中断为中断为500ms500msvoid main( void )void main( void ) CKCON&=0xef; CKCON&=0xef; /T1/T1的计数源选择系统脉冲的的计数源选择系统脉冲的1212分频分频 TMOD=0x10; TMOD=0x10; /T1/T1方式方式1 1 P1_0=0;P1_0=0; TH1=0x3c; TH1=0x3c; /初值初

24、值 TL1=0xb0; TL1=0xb0; IE|=0x88; IE|=0x88; /允许允许T1T1中断中断 IP|=0x08; IP|=0x08; /TF1/TF1中断为高级中断中断为高级中断 TCON|=0x20; TCON|=0x20; /启动启动T1 T1 while(1); while(1); /死循环,等待中断,产生方波死循环,等待中断,产生方波 26程序清单如下程序清单如下程序清单如下程序清单如下(中断服务程序)(中断服务程序)(中断服务程序)(中断服务程序):void Timer1_ISR (void) void Timer1_ISR (void) interrupt 3in

25、terrupt 3 TH1=0x3c; TH1=0x3c; /重装初值重装初值 TL1|=0xb0;TL1|=0xb0; count count-; ; /中断计数中断计数 if (countif (count=0) 0) /500ms/500ms到,重赋计数初值,到,重赋计数初值,P1.0P1.0取反取反 count=10; P1_0=!P1_0; count=10; P1_0=!P1_0; 问题:问题:为什么用为什么用TL1|=0xb0;TL1|=0xb0;而非而非TL1=0xb0TL1=0xb0?27程序清单如下程序清单如下程序清单如下程序清单如下(查询式程序)(查询式程序)(查询式程序

26、)(查询式程序):v#include #include sbitsbit P1_0= P10; P1_0= P10;void main( )void main( ) intint count=10; count=10; /10/10次次T1T1中断中断为500ms500msCKCON&=0xef;CKCON&=0xef;/T1/T1的的计数源数源选择系系统脉冲的脉冲的1212分分频TMOD=0x10; TMOD=0x10; /T1/T1方式方式1 1P1_0=0;P1_0=0;TR1=1;TR1=1;/启动启动T1T128 For(; ;) For(; ;) /死循死循环,产生方波生方波 TH

27、1=-50000/256; TH1=-50000/256; /T1/T1初初值 TL1=-50000%256;TL1=-50000%256; Do while(!TF1); Do while(!TF1); /查询等待等待TF1TF1置位,置位, TF1=0;TF1=0; If (count!=0) count If (count!=0) count-; ; else count=10;P1_0=!P1_0; else count=10;P1_0=!P1_0; 294.1.3 4.1.3 定时器定时器/ /计数器计数器T2T2 vT2T2为为1616位位定时定时/ /计数器,由计数器,由TL2T

28、L2(低字节)和低字节)和TH2TH2(高字节)组高字节)组成。成。vC/T2=0(C/T2=0(定时定时) )时,系统时钟作为定时器的输入(由时,系统时钟作为定时器的输入(由CKCONCKCON的的T2MT2M位指定不分频或位指定不分频或1212分频)。分频)。C/T2 =1C/T2 =1(计数)计数)时,时,T2T2输入引脚上输入引脚上的负跳变使计数器加的负跳变使计数器加“1”1”。vT2T2还可以用于启动还可以用于启动ADCADC数据转换。数据转换。 v三种工作方式三种工作方式(由(由T2CONT2CON中的配置位选择):自动重装初值的中的配置位选择):自动重装初值的1616位定时器位定

29、时器/ /计数器方式、带捕捉的计数器方式、带捕捉的1616位定时器位定时器/ /计数器方式和波计数器方式和波特率发生器方式。特率发生器方式。301 1T2T2控制寄存器控制寄存器T2CONT2CON v位位7 7(TF2TF2):):T2T2溢出标志位溢出标志位T2T2溢出时由硬件置位。允许溢出时由硬件置位。允许T2T2中断时,使中断时,使CPUCPU转向转向T2T2的中断的中断服务程序。不能由硬件自动清服务程序。不能由硬件自动清0 0,必须用软件清必须用软件清0 0。RCLK0RCLK0或或TCLK0TCLK0为为1 1时(波特率发生器方式),时(波特率发生器方式),TF2TF2不会被置不会

30、被置1 1。v位位6 6(EXF2EXF2):):T2T2外部中断标志位外部中断标志位EXEN2EXEN2为为“1”1”时,当时,当T2EXT2EX输入引脚发生输入引脚发生负跳变负跳变时,由硬件置时,由硬件置位。允许位。允许T2T2中断时,使中断时,使CPUCPU转向转向T2T2的中断服务程序。不能由硬的中断服务程序。不能由硬件自动清件自动清0 0,必须用软件清,必须用软件清0 0。CP/RL2C/T2TR2EXEN2TCLK0RCLK0EXF2TF2字节字节地址地址C8HC8H D7 D6 D5 D4 D3 D2 D1 D0311 1T2T2控制寄存器控制寄存器T2CONT2CONv位位5

31、5(RCLK0RCLK0):UART0UART0接收时钟选择标志位接收时钟选择标志位0 0:T1T1溢出作为接收时钟。溢出作为接收时钟。1 1:T2T2溢出作为接收时钟。溢出作为接收时钟。v位位4 4(TCLK0TCLK0):UART0UART0发送时钟选择标志位发送时钟选择标志位0 0:T1T1溢出作为发送时钟。溢出作为发送时钟。1 1:T2T2溢出作为发送时钟。溢出作为发送时钟。v位位3 3(EXEN2EXEN2):T2T2外部允许标志位外部允许标志位0 0:T2EXT2EX上的负跳变被忽略。上的负跳变被忽略。1 1:T2EXT2EX上的负跳变导致一次捕捉或重载上的负跳变导致一次捕捉或重载

32、。v位位2 2(TR2TR2):T2T2启启/ /停控制位停控制位0 0:停止停止。1 1:启动启动。321 1T2T2控制寄存器控制寄存器T2CONT2CONv位位1 1(C/T2C/T2):定时器定时器/ /计数器功能选择位计数器功能选择位0 0:定时器功能,由:定时器功能,由T2M(CKCON.5)T2M(CKCON.5)定义的时钟加定义的时钟加“1”1”。1 1:计数器功能,由外部输入引脚:计数器功能,由外部输入引脚(T2)(T2)的负跳变加的负跳变加“1”1”。v位位0 0(CP/RL2CP/RL2):捕捉捕捉/ /重载选择位重载选择位EXEN2EXEN2必须为必须为1 1才能使才能

33、使T2EXT2EX上的负跳变能够被识别并触发捕捉上的负跳变能够被识别并触发捕捉和重载。和重载。当当RCLK0RCLK0或或TCLK0TCLK0为为“1”1”时,该位被忽略,时,该位被忽略,T2T2将工作将工作在自动重装载方式。在自动重装载方式。0 0:T2T2溢出或溢出或T2EXT2EX上发生负跳变时将自动重装载上发生负跳变时将自动重装载1 1:T2EXT2EX发生负跳变时捕捉发生负跳变时捕捉。332 2T2T2的工作方式和计数器结构的工作方式和计数器结构 v(1 1)方式)方式0 0:自动重装初值的自动重装初值的1616位定时器位定时器/ /计数器方式计数器方式原理框图如原理框图如图图4-5

34、4-5所示。所示。TH2TH2、TL2TL2构成构成1616位加位加“1”1”计数器。计数器。RCAP2HRCAP2H、RCAP2LRCAP2L构成构成1616位初值寄存器,位初值寄存器,EXEN2=1EXEN2=1时,时,当当T2EXT2EX上有负跳变或上有负跳变或T2T2溢出时,将溢出时,将RCAP2HRCAP2H、RCAP2LRCAP2L中预置的中预置的初值自动重新装入初值自动重新装入TH2TH2、TL2TL2,T2T2重新开始计数,并置位中断标志重新开始计数,并置位中断标志EXF2EXF2或或TF2TF2,向,向CPUCPU申请中断。申请中断。EXEN2=0EXEN2=0时,时,T2E

35、XT2EX上的负跳变被忽略,只有当上的负跳变被忽略,只有当T2T2溢溢出时才重载初值并出时才重载初值并向向CPUCPU申请中断。申请中断。 表表4-3 4-3 T2T2的方式选择的方式选择 RCLK0+TCLK0CP/RL2工作方式工作方式00自动重装载的自动重装载的16位定时器位定时器/计数器计数器 01带捕捉的带捕捉的16位定时器位定时器/计数器计数器 1UART0波特率发生器方式波特率发生器方式34(1 1)方式)方式0 0:1616位自动重装初值方式位自动重装初值方式 自动重自动重装装初值初值两中断标志两中断标志为为0时时忽略忽略T2EX负跳变,负跳变,不产生不产生EXF2中断中断35

36、(2 2)方式)方式1 1:1616位带捕捉方式位带捕捉方式 vRCLK0=0RCLK0=0、TCLK0=0TCLK0=0、CP/RL2=1CP/RL2=1时,时,T2T2工作在此方式工作在此方式vEXEN2=1EXEN2=1时为允许捕捉方式,时为允许捕捉方式,T2EXT2EX引脚上的负跳变将引脚上的负跳变将TH2TH2、TL2TL2的当前值捕捉到的当前值捕捉到RCAP2HRCAP2H、RCAP2LRCAP2L寄存器,同时寄存器,同时置置EXF2=1EXF2=1,发出中断请求。发出中断请求。vEXEN2=0EXEN2=0时,时,RCAP2HRCAP2H、PCAP2LPCAP2L不起作用,此时不

37、起作用,此时T2T2与与T1T1、T0T0的方式的方式1 1完全相同。完全相同。即:即:C/T2C/T20 0时为时为1616位定时器方式,位定时器方式,C/T2C/T21 1时为时为1616位计数器方式,计数溢出位计数器方式,计数溢出时时TF2TF21 1,发发送中断请求信号。送中断请求信号。 v原理框图如原理框图如图图4-64-6所示。所示。 36(2 2)方式)方式1 1:1616位带捕捉方式位带捕捉方式是否捕捉是否捕捉捕捉并产生捕捉并产生EXF2中断中断37(3 3)方式)方式2 2:波特率发生器方式:波特率发生器方式 vRCLKRCLK或或TCLKTCLK置置1 1时,时,T2T2工

38、作于波特率发生器方式。工作于波特率发生器方式。 v与自动重装载方式相似。但与自动重装载方式相似。但不置位不置位TF2TF2,也不产生中断。溢出也不产生中断。溢出事件用作事件用作UART0UART0的移位时钟输入。的移位时钟输入。 vT2T2溢出可用于产生独立的发送或接收波特率溢出可用于产生独立的发送或接收波特率, ,也可同时产生发也可同时产生发送和接收波特率,取决于送和接收波特率,取决于T2CONT2CON的设置。的设置。 vT2T2的计数源可以是系统时钟的二分频,也可以是的计数源可以是系统时钟的二分频,也可以是T2T2引脚上的输引脚上的输入,取决与入,取决与C/T2C/T2的设置。的设置。

39、v如果如果EXEN2EXEN2为为1 1,则,则T2EX T2EX 引脚上的负跳变将置位引脚上的负跳变将置位EXF2EXF2标志,并标志,并产生一个产生一个T2T2中断(如果允许)。因此,中断(如果允许)。因此,T2EX T2EX 输入可以被用作额输入可以被用作额外的外部中断源。外的外部中断源。v原理框图如原理框图如图图4-74-7所示。所示。38(3 3)方式)方式2 2:波特率发生器方式:波特率发生器方式做做UART0波特率发生器波特率发生器T1作作UART0波波特率发生器特率发生器产生外部中断产生外部中断时基选择时基选择39(3 3)方式)方式2 2:波特率发生器方式:波特率发生器方式v

40、当选择系统时钟的二分频做计数源时,当选择系统时钟的二分频做计数源时,T2 T2 为为UART0UART0提提供的波特率可以用如下公式计算:供的波特率可以用如下公式计算:v当选择外部引脚当选择外部引脚T2T2上的输入作为时基时,上的输入作为时基时,T2T2为为UART0UART0提供的波特率可以用如下公式计算:提供的波特率可以用如下公式计算: 404.1.4 4.1.4 定时器定时器/ /计数器计数器T3T31. 1. 定时定时器器T3T3的结构的结构 v1616位定时位定时/ /计数器计数器 ,由,由TMR3LTMR3L(低字节)和低字节)和TMR3HTMR3H(高字节)组高字节)组成成 vT

41、3T3的时钟输入可以通过程序选择为外部振荡器的的时钟输入可以通过程序选择为外部振荡器的8 8分频、系统分频、系统时钟或系统时钟的时钟或系统时钟的1212分频。分频。 vT3T3只有自动重装初值一种工作方式,只有自动重装初值一种工作方式,初值初值保存保存在在TMR3RLLTMR3RLL(低低字节)和字节)和TMR3RLHTMR3RLH(高字节)两个高字节)两个SFRSFR中,中,T3T3没有计数器方式。没有计数器方式。 v除作为通用定时除作为通用定时/ /计数器使用外,计数器使用外,T3T3还可以用于启动还可以用于启动ADCADC数据转数据转换、换、SMBusSMBus定时等。定时等。 v原理框

42、图如原理框图如图图4-8所示。所示。411. 1. 定时定时器器T3T3的结构的结构时基时基选择选择仅此仅此一种方式一种方式启动启动ADC422 2定时器定时器3 3控制寄存器控制寄存器TMR3CNTMR3CN v位位7 7(TF3TF3):):T3T3溢出标志位溢出标志位溢出时置溢出时置1 1,不能由硬件自动清,不能由硬件自动清0 0,必须用软件清必须用软件清0 0 v位位6-36-3:未用。读:未用。读=0000b=0000b,写写= =忽略忽略 v位位2 2(TR3TR3):):T3T3运行控制位运行控制位 0 0:停止:停止。1 1:启动启动。v位位1 1(T3MT3M):):T3T3

43、时钟选择位时钟选择位 0 0:T3T3使用系统时钟的使用系统时钟的1212分频。分频。1 1:T3T3使用系统时钟。使用系统时钟。v位位0 0(T3XCLKT3XCLK):):T3T3外部时钟选择位外部时钟选择位 0 0:由:由T3MT3M定义。定义。1 1:外部振荡器输入的:外部振荡器输入的8 8分频。分频。 T3XCLKT3MTR3-TF3字节字节地址地址C8HC8H D7 D6 D5 D4 D3 D2 D1 D0433 3T3T3应用举例应用举例 v例例 4.34.3 假设假设C8051F020C8051F020的并行口的并行口P2P2、P3P3连接连接1616个个LEDLED指示灯,试

44、编写程序使指示灯,试编写程序使P3P3口所接的口所接的LEDLED灯循环点亮,灯循环点亮,P2P2口所接的口所接的LEDLED灯实现走马灯效果。(灯实现走马灯效果。(实验四实验四) v解:解:要实现题目要求的效果,只需要要实现题目要求的效果,只需要定期更新定期更新P2P2、P3P3口的状态口的状态即可。这里可以使用即可。这里可以使用T3T3定时器再加软件计数的定时器再加软件计数的方法达到所要求的时间,假设方法达到所要求的时间,假设T3T3定时定时0.10.1秒产生中断,秒产生中断,则软件计数器每则软件计数器每0.10.1秒加秒加1 1,让计数器加到,让计数器加到5 5时,改变时,改变P2P2、

45、P3P3口的状态,就可以实现口的状态,就可以实现每秒每秒2 2次刷新次刷新LEDLED灯的状态。灯的状态。 443 3T3T3应用举例应用举例#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 (共阴极)产生走马灯效果所需的数据共阴极)产生走马灯效果所需的数据 uns

46、igned int xdata p2led=0x7f,0xbf,0xdf,0xef,0xf7, 0xfb,0xfd,0xfe; 453 3T3T3应用举例应用举例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

47、 (void) XBR2 = 0x40; /使能交叉开关使能交叉开关463 3T3T3应用举例应用举例void Timer3_Init (int counts) TMR3CN = 0x00; TMR3RL = -counts; /T3赋初值,也可以采用赋初值,也可以采用8位位SFR方式,向例方式,向例4.2那样那样 TMR3 = 0xffff; /立即重载立即重载 EIE2 |= 0x01; /开开T3中断中断 ,P42 EIE2格式格式 TMR3CN |= 0x04; /启动启动T3473 3T3T3应用举例应用举例void Timer3_ISR (void) interrupt 14 st

48、atic int count; static int i=9,j=0; static int led=0xff; /P3口口LED灯的初始状态灯的初始状态 TMR3CN &= (0x80); /清清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=0xff; /P3口口LED灯循环一个周期灯循环一个周期 484.1.5 4.1.5 定时器

49、定时器/ /计数器计数器T4T4 v16位的定时器位的定时器/计数器,由计数器,由TL4(低字节)和低字节)和TH4(高字节)组高字节)组成。成。 vT4还可以用于启动还可以用于启动ADC 数据转换。数据转换。vT4与与T2的功能和结构类似,与的功能和结构类似,与T2有区别的是,有区别的是,T4可以作为可以作为UART1的波特率发生器。的波特率发生器。 UART1波特率发生器方式波特率发生器方式1带捕捉的带捕捉的16位定时器位定时器/计数器计数器 10自动重装载的自动重装载的16位定时器位定时器/计数器计数器 00工作方式工作方式CP/RL4RCLK1+TCLK1表表4-4 定时器定时器T4的

50、方式选择的方式选择 49T4CON的格式:的格式: v位位7(TF4):T4溢出标志位溢出标志位T4溢出时由硬件置位。允许溢出时由硬件置位。允许T4中断时,使中断时,使CPU转向转向T4的中的中断服务程序。不能由硬件自动清断服务程序。不能由硬件自动清0,必须用软件清,必须用软件清0。RCLK0或或TCLK0为为1时(波特率发生器方式),时(波特率发生器方式),TF4不会被不会被置置1。v位位6(EXF4):T4外部中断标志位外部中断标志位EXEN4为为“1”时,当时,当T4EX输入引脚发生负跳变时,由硬件输入引脚发生负跳变时,由硬件置位。允许置位。允许T4中断时,使中断时,使CPU转向转向T4

51、的中断服务程序。不能的中断服务程序。不能由硬件自动清由硬件自动清0,必须用软件清,必须用软件清0。CP/RL4C/T4TR4EXEN4TCLK1RCLK1EXF4TF4字节字节地址地址C9H D7 D6 D5 D4 D3 D2 D1 D050T4CON的格式:的格式:v位位5 5(RCLK1RCLK1):):UART1UART1接收时钟选择标志位接收时钟选择标志位0 0:T1T1溢出作为接收时钟。溢出作为接收时钟。1 1:T4T4溢出作为接收时钟。溢出作为接收时钟。v位位4 4(TCLK1TCLK1):):UART1UART1发送时钟选择标志位发送时钟选择标志位0 0:T1T1溢出作为发送时钟

52、。溢出作为发送时钟。1 1:T4T4溢出作为发送时钟。溢出作为发送时钟。v位位3 3(EXEN2EXEN2):):T4T4外部允许标志位外部允许标志位0 0:忽:忽T2EXT2EX上的负跳变被略。上的负跳变被略。1 1:T2EXT2EX上的负跳变导致一次捕捉或重载。上的负跳变导致一次捕捉或重载。v位位2 2(TR4TR4):):T4T4运行控制位运行控制位0 0:禁止:禁止T4T4。1 1:允许允许T4T4。51T4CON的格式的格式:v位位1(C/T4):):定时器定时器/计数器功能选择位计数器功能选择位0:定时器功能:定时器功能:T4由由T4M(CKCON.6)定义的时钟加定义的时钟加“1

53、”。1:计数器功能:计数器功能:T4由外部输入引脚由外部输入引脚(T4)的负跳变加的负跳变加“1”。v位位0(CP/RL4):):捕捉捕捉/重载选择位重载选择位该位选择该位选择T4为捕捉还是自动重装载方式。为捕捉还是自动重装载方式。EXEN4必须为必须为1才能才能使使T4EX上的负跳变能够被识别并触发捕捉和重载。当上的负跳变能够被识别并触发捕捉和重载。当RCLK0或或TCLK0为为“1”时,时,T4将工作在自动重装载方式。将工作在自动重装载方式。0:当:当T4溢出或溢出或T4EX上发生负跳变时将自动重装载上发生负跳变时将自动重装载1:在:在T4EX发生负跳变时捕捉发生负跳变时捕捉。524.2

54、4.2 可编程计数器阵列可编程计数器阵列 v可编程计数器阵列可编程计数器阵列 (Programmable Counter Array)提供了增强提供了增强的定时器功能,与标准的定时器功能,与标准8051的定时器的定时器/计数器相比,需要的计数器相比,需要的CPU干预更少。干预更少。vC8051F020内部集成有一个可编程计数器阵列,称为内部集成有一个可编程计数器阵列,称为PCA0 。包含一个专用的包含一个专用的16位定时器位定时器/计数器和计数器和5个个16位位捕捉捕捉/比较模块比较模块。每个捕捉每个捕捉/比较模块有自己的比较模块有自己的I/O线线 (CEXn)。通过配置交叉开关,通过配置交叉

55、开关,可以将可以将I/O线连接到并行线连接到并行I/O端口。端口。v定时定时/计数器有计数器有六个计数源:六个计数源:系统时钟、系统时钟系统时钟、系统时钟/4、系统时、系统时钟钟/12、外部振荡器时钟源、外部振荡器时钟源8分频、定时器分频、定时器0溢出、溢出、ECI线上的外线上的外部时钟信号。每个捕捉部时钟信号。每个捕捉/比较模块可独立工作在比较模块可独立工作在6种工作方式种工作方式之一。之一。534.2 4.2 可编程计数器阵列可编程计数器阵列6种种时钟源时钟源捕捕捉捉/比比较较模模块块544.2.1 PCA4.2.1 PCA定时器定时器/ /计数器计数器 v1616位位PCAPCA定定时时

56、/ /计计数数器器由由PCA0LPCA0L(低低字字节节)和和PCA0HPCA0H(高高字字节节)组组成成。在在读读PCA0LPCA0L的的同同时时自自动动锁锁存存PCA0HPCA0H的的值值。读读PCA0HPCA0H或或PCA0LPCA0L不不影影响计数器工作。原理框图如响计数器工作。原理框图如图图4-104-10所示。所示。vPCA0MDPCA0MD寄寄存存器器中中的的CPS2-CPS0CPS2-CPS0位位用用于于选选择择PCAPCA定定时时/ /计计数数器器的的计计数脉冲源数脉冲源,如下表所示。,如下表所示。CPS2CPS1CPS0计数脉冲源计数脉冲源000系统时钟的系统时钟的12分频

57、分频001系统时钟的系统时钟的4分频分频010定时器定时器0溢出溢出011ECI负跳变(最大速率负跳变(最大速率=系统时钟频率系统时钟频率/4)100系统时钟系统时钟101外部振荡源外部振荡源8分频分频554.2.1 PCA4.2.1 PCA定时器定时器/ /计数器计数器读读PCA0L时锁存时锁存PCA0H564.2.1 PCA4.2.1 PCA定时器定时器/ /计数器计数器v定时定时/ /计数器溢出时计数器溢出时 ( (从从0xFFFF0xFFFF加加1 1到到0x0000)0x0000),PCA0MDPCA0MD中的中的CF CF 置置1 1,如果允许,如果允许CFCF中断,则可以产生一个

58、中断请求。中断,则可以产生一个中断请求。vPCA0MDPCA0MD中的中的ECFECF位置位置1 1即可允许即可允许CFCF中断,但要中断,但要使使CFCF中断得到响应,中断得到响应,必须先必须先总体允许总体允许PCA0PCA0中断中断(通过将(通过将EAEA位位 (IE.7) (IE.7) 和和EPCA0EPCA0位位 (EIE1.3) (EIE1.3) 置置1 1可总体允许可总体允许PCA0PCA0中断)中断)。CFCF位不能由硬件自动清除,位不能由硬件自动清除,必须用软件清必须用软件清0 0。PCA0PCA0中断配置的详细信息如中断配置的详细信息如图图4-114-11所示。所示。v清除清

59、除PCA0MDPCA0MD寄存器中的寄存器中的CIDLCIDL位则允许位则允许PCAPCA在微控制器内核处于在微控制器内核处于等待方式时继续正常工作。等待方式时继续正常工作。 574.2.1 PCA4.2.1 PCA定时器定时器/ /计数器计数器将将PCA0MDPCA0MD中的中的ECFECF位置位置1 1即可即可允许允许CFCF中断中断各各模块中断控制模块中断控制总控总控开关开关584.2.2 PCA4.2.2 PCA捕捉捕捉/ /比较模块比较模块 v5 5个个捕捉捕捉/ /比较模块比较模块都可独立工作在六种工作方式(由都可独立工作在六种工作方式(由PCA0CPMnPCA0CPMn设置),如

60、下表所示:设置),如下表所示: PWM16ECOMCAPPCAPNMATTOGPWM工工 作作 方方 式式XX10000用用CEXn的正沿触发捕捉的正沿触发捕捉XX01000用用CEXn的负沿触发捕捉的负沿触发捕捉XX11000用用CEXn的电平改变触发捕捉的电平改变触发捕捉X100100软件定时器软件定时器X100110高速输出高速输出X100X11频率输出频率输出0100X018位脉冲宽度调制器位脉冲宽度调制器1100X0116位脉冲宽度调制器位脉冲宽度调制器591 1边沿触发的捕捉方式边沿触发的捕捉方式vCEXn引脚上有效的电平变化(引脚上有效的电平变化(CEXn输入信号的高、输入信号的

61、高、低电平至少要持续两个系统时钟周期)可以捕捉低电平至少要持续两个系统时钟周期)可以捕捉PCA0定时定时 /计数器的值,将其装入到对应模块的计数器的值,将其装入到对应模块的16位捕捉位捕捉/比较寄存器比较寄存器 (PCA0CPHn和和PCA0CPLn) 进行比较。进行比较。v当发生匹配时,当发生匹配时,PCA0CN中的捕捉中的捕捉/比较标志比较标志 (CCFn) 置置1,如果允许,如果允许CCF中断,则可产生一个中断请求。中断,则可产生一个中断请求。CCFn位不能由硬件自动清除,必须用软件清位不能由硬件自动清除,必须用软件清0。v原理框图如原理框图如图图4-12所示。所示。 601 1边沿触发

62、的捕捉方式边沿触发的捕捉方式正正/负跳变捕捉负跳变捕捉中断中断捕捉捕捉612 2软件定时软件定时( (比较比较) )器方式器方式 v置置1 PCA0CPMn寄寄存存器器中中的的ECOMn和和MATn位位可可将将PCA0设设置置在软件定时器方式。在软件定时器方式。v该该方方式式将将PCA0定定时时/计计数数器器与与模模块块的的16位位捕捕捉捉/比比较较寄寄存存器器 (PCA0CPHn和和PCA0CPLn) 进进行行比比较较。匹匹配配时时,PCA0CN中中的的捕捕捉捉/比比较较标标志志 (CCFn) 置置1,如如果果允允许许CCF中中断断,则则可可产产生生一一个个中中断请求。断请求。CCFn位不能

63、由硬件自动清除,位不能由硬件自动清除,必须用软件清必须用软件清0。v注意注意:向:向PCA0的捕捉的捕捉/比较寄存器写入一个比较寄存器写入一个16位值时,位值时,应先写应先写低字节,后写高字节低字节,后写高字节。对。对PCA0CPLn的写入操作将清的写入操作将清ECOMn位;位;PCA0CPHn写入时将置写入时将置1 ECOMn位。位。 v原理框图原理框图如如图图4-13所示。所示。622 2软件定时软件定时( (比较比较) )器方式器方式写写PCA0CPLnPCA0CPLn 、 PCA0CPHnPCA0CPHn对对ECOMnECOMn的的影响影响匹配允匹配允许开关许开关中断中断比较比较633

64、 3高速输出方式高速输出方式 v该该方方式式下下,每每当当PCAPCA的的计计数数器器与与模模块块的的1616位位捕捕捉捉/ /比比较较寄寄存存器器 (PCA0CPHn(PCA0CPHn和和PCA0CPLn) PCA0CPLn) 发发生生匹匹配配时时,模模块块的的CEXnCEXn引脚上的引脚上的逻辑电平将发生改变逻辑电平将发生改变。v置置1 1 PCA0CPMnPCA0CPMn寄寄存存器器中中的的TOGnTOGn、MATnMATn和和ECOMnECOMn位位可可将将PCA0PCA0设置为该方式。设置为该方式。v与软件定时器方式一样应注意,当向与软件定时器方式一样应注意,当向PCA0PCA0的捕

65、捉的捕捉/ /比比较寄存器写入一个较寄存器写入一个1616位数值时,位数值时,应先写低字节,后写高应先写低字节,后写高字节字节。 v原理框图如原理框图如图图4-14所示。所示。643 3高速输出方式高速输出方式同上同上设置此设置此3位即为位即为该方式该方式匹配后电平发生改变匹配后电平发生改变654 4频率输出方式频率输出方式 v该方式在对应的该方式在对应的CEXn引脚产生可编程频率的方波。引脚产生可编程频率的方波。捕捉捕捉/比较寄存器的高字节保持着输出电平改变前要计比较寄存器的高字节保持着输出电平改变前要计的的PCA时钟数。时钟数。 v所产生的方波的频率由下式定义:所产生的方波的频率由下式定义

66、: FPCA是由是由PCA方式寄存器方式寄存器PCA0MD中的中的GPS2-0位选择的位选择的PCA时钟频率。时钟频率。664 4频率输出方式频率输出方式v捕捕捉捉/ /比比较较模模块块的的低低字字节节与与PCA0PCA0计计数数器器的的低低字字节节比比较较,两两者者匹匹配配时时,CEXnCEXn的的电电平平发发生生改改变变,高高字字节节中中的的偏偏移移值值加到加到PCA0CPLnPCA0CPLn。v注注意意:在在该该方方式式下下如如果果允允许许模模块块匹匹配配 ( (CCFnCCFn) ) 中中断断,则发生中断的速率为则发生中断的速率为2F2FCEXnCEXn。v置置位位PCA0CPMnPC

67、A0CPMn寄寄存存器器中中ECOMnECOMn、TOGnTOGn和和PWMnPWMn位位可可将将PCA0PCA0设置为频率输出方式。设置为频率输出方式。674 4频率输出方式频率输出方式匹配时,电平改变,匹配时,电平改变,PCA0CPHnPCA0CPHn加到加到PCA0CPLnPCA0CPLn685 58 8位脉宽调制器方式位脉宽调制器方式 v该该方方式式下下,每每个个模模块块都都可可以以独独立立地地产产生生脉脉宽宽调调制制 (PWM)输输出出。PWM的的频频率率取取决决于于PCA0定定时时/计计数数器器的的计计数数时时钟钟源源。使使用用模模块块的的捕捕捉捉/比比较较寄寄存存器器PCA0CP

68、Ln可可以以改改变变PWM输输出出信信号号的的占占空空比比。v当当PCA0定定时时器器/计计数数器器的的低低字字节节 (PCA0L)与与PCA0CPLn中中的的值值相相等等时时,CEXn输输出出高高电电平平,当当PCA0L中中的的计计数数值值溢溢出出时时,CEXn输出低电平。输出低电平。v当当定定时时器器/计计数数器器的的低低字字节节PCA0L溢溢出出时时(从从0xFF到到0x00),保存在保存在PCA0CPHn中的值自动装中的值自动装入入PCA0CPLn,不需软件干预。不需软件干预。v置置1 PCA0CPMn寄寄存存器器中中的的ECOMn和和PWMn位位可可将将PCA0设设置为置为8位脉冲宽

69、度调制器方式。位脉冲宽度调制器方式。695 58 8位脉宽调制器方式位脉宽调制器方式v8 8位位PWMPWM方式的占空比由下面方程给出:方式的占空比由下面方程给出: v可见,最大占空比为可见,最大占空比为100% (PCA0CPHn=0)100% (PCA0CPHn=0),最小占空最小占空比为比为0.39% (PCA0CPHn =0xFF)0.39% (PCA0CPHn =0xFF)。可以通过清可以通过清0 0 ECOMnECOMn位位产生产生0%0%的占空比。的占空比。 705 58 8位脉宽调制器方式位脉宽调制器方式匹配时置匹配时置1溢出时置溢出时置0并将并将PCA0CPHnPCA0CPH

70、n装入装入PCA0CPLnPCA0CPLn716 61616位脉宽调制器方式位脉宽调制器方式16位方式,其余与位方式,其余与8位方式相同位方式相同724.2.3 PCA特殊功能寄存器特殊功能寄存器 1 1、PCAPCA控制寄存器控制寄存器PCA0CNPCA0CN CCF0CCF1CCF2CCF3CCF4-CRCF字节字节地址地址D8HD8H D7 D6 D5 D4 D3 D2 D1 D0v位位7 7(CFCF):):PCAPCA定时器定时器/ /计数器溢出标志位计数器溢出标志位PCA0PCA0定时定时/ /计数器溢出时由硬件置位。如允许计数器溢出时由硬件置位。如允许CFCF中断,将使中断,将使

71、CPUCPU转向转向CFCF中中断服务程序。不能由硬件自动清断服务程序。不能由硬件自动清0 0,必须用软件清,必须用软件清0 0。 v位位6 6(CRCR):):PCA0PCA0定时定时/ /计数器运行控制位计数器运行控制位0 0:停止计数:停止计数 1 1:启动计数:启动计数v位位5 5:未用。读:未用。读=0=0b b,写写= =忽略。忽略。v位位4-4-位位0 0(CCF4- CCF0CCF4- CCF0):):PCA0PCA0模块模块4-4-模块模块0 0捕捉捕捉/ /比较标志位比较标志位匹配或捕捉时由硬件置位。允许匹配或捕捉时由硬件置位。允许CCFCCF中断时,将使中断时,将使CPU

72、CPU转向转向CCFCCF中断服务中断服务程序。不能由硬件自动清程序。不能由硬件自动清0 0,必须用软件清,必须用软件清0 0。732、PCA0方式选择寄存器方式选择寄存器PCA0MD v位位7 7(CIDLCIDL):):PCA0PCA0定时定时/ /计数器等待控制位计数器等待控制位0 0:当当CPUCPU处于等待方式时处于等待方式时,PCA0PCA0继续正常工作。继续正常工作。1 1:当:当CPUCPU处于等待方式时,处于等待方式时,PCA0PCA0停止工作。停止工作。v位位6-46-4:未用。读:未用。读=000b=000b,写写= =忽略。忽略。v位位3-13-1(CPS2-CPS0C

73、PS2-CPS0):PCA0PCA0定定时时器器/ /计计数数器器计计数数时时钟钟源选择位源选择位这些位选择这些位选择PCA0PCA0计数器的计数时钟源,计数器的计数时钟源,如表如表4-54-5所示所示。v位位0 0(ECFECF)PCA0PCA0定时器定时器/ /计数器溢出中断允许位计数器溢出中断允许位0 0:禁止:禁止CFCF中断。中断。 1 1:允许:允许CFCF中断。中断。ECFCPS0CPS1CPS2-CIDL字节字节地址地址D9HD9H D7 D6 D5 D4 D3 D2 D1 D0743 3、PCA0PCA0捕捉捕捉/ /比较寄存器比较寄存器PCA0CPMnPCA0CPMn vP

74、CA0CPMnPCA0CPMn地址:地址: PCA0CPM0=0xDA (n=0)PCA0CPM0=0xDA (n=0)、PCA0CPMl=0xDB (n=1)PCA0CPMl=0xDB (n=1) PCA0CPM2=0xDC (n=2) PCA0CPM2=0xDC (n=2)、PCA0CPM3=0xDD (n=3)PCA0CPM3=0xDD (n=3) PCA0CPM4=0xDE (n=4) PCA0CPM4=0xDE (n=4)v位位7 7:PWMl6nPWMl6n:1616位脉冲宽度调制允许位位脉冲宽度调制允许位 当当工工作作在在脉脉冲冲宽宽度度调调制制方方式式时时 ( (PWMnPWM

75、n=1)=1),该该位位选选择择1616位位PWMPWM方式。方式。 0 0:选择:选择8 8位位PWMPWM。1 1:选择选择1616位位PWMPWM。ECCFnPWMnTOGnMATnCAPNnCAPPnECOMnPWM16n字节字节地址地址0DA-0DEH0DA-0DEH D7 D6 D5 D4 D3 D2 D1 D075v位位6 6(ECOMnECOMn):):比较器功能允许位比较器功能允许位0 0:禁止。:禁止。1 1:允许。:允许。v位位5 5(CAPPnCAPPn):):正沿捕捉功能允许位正沿捕捉功能允许位0 0:禁止。:禁止。1 1:允许。:允许。v位位4 4(CAPNnCAP

76、Nn):):负沿捕捉功能允许位负沿捕捉功能允许位0 0:禁止。:禁止。1 1:允许。:允许。v位位3 3(MATnMATn):):匹配功能允许位匹配功能允许位0 0:禁止。:禁止。1 1:允许。:允许。v位位2 2(TOGnTOGn):):电平切换功能允许位电平切换功能允许位 0 0:禁止。:禁止。1 1:允许。:允许。v位位1 1(PWMnPWMn):):脉宽凋制方式允许位脉宽凋制方式允许位 0 0:禁止。:禁止。1 1:允许。:允许。v位位0 0(ECCFnECCFn):):捕捉捕捉/ /比较标志中断允许位比较标志中断允许位0 0:禁止:禁止CCFnCCFn中断中断1 1:当:当CCFnC

77、CFn位置位置1 1时,允许捕捉时,允许捕捉/ /比较标志的中断请求。比较标志的中断请求。3 3、PCA0PCA0捕捉捕捉/ /比较寄存器比较寄存器PCA0CPMnPCA0CPMn 76PCA应用举例应用举例v例例4.44.4 对液体流量进行测量的流量计是通过对脉冲进行计数实对液体流量进行测量的流量计是通过对脉冲进行计数实现的,某应用系统中需要对现的,某应用系统中需要对2 2路液体的流量进行测量。系统中使路液体的流量进行测量。系统中使用用PCA0PCA0工作在工作在上升沿捕捉方式上升沿捕捉方式对脉冲进行计数,试编写实现该功对脉冲进行计数,试编写实现该功能的程序。能的程序。v解:实现该功能的程序

78、如下:解:实现该功能的程序如下:#include c8051f020.h #include c8051f020.h unsigned long unsigned long xdataxdata Plus_NUM2=0x0l,0x0l ; Plus_NUM2=0x0l,0x0l ; /用于脉冲计数用于脉冲计数void PORT_Init (void) void PORT_Init (void) /端口初始化端口初始化 XBR0 = 0x10; XBR0 = 0x10; /CEX0CEX0、CEX1CEX1配置到配置到P0.0P0.0、0.1 0.1 XBR2 = 0x40; XBR2 = 0x4

79、0; /允许交叉开关允许交叉开关 P0MDOUT=0x00; P0MDOUT=0x00; /P0P0为开漏输出为开漏输出 77PCA应用举例应用举例void SYSCLK_Init (void) /时钟初始化初始化 int i; OSCXCN = 0x67; /外部晶振外部晶振22.1184MHz for (i=0; i 256; i+) ; /延延时 while (!(OSCXCN & 0x80) ;/等待外部晶振稳定等待外部晶振稳定 OSCICN = 0x88; /选择外部晶振作系统时钟源,允许时钟丢失检测选择外部晶振作系统时钟源,允许时钟丢失检测 void Init_PCA0(void)

80、 /PCA0初始化初始化 PCA0MD=0x08; /PCA0采用系采用系统时钟,禁止,禁止PCA0溢出中断溢出中断EIE1|=0x08; /允允许PCA0中断中断 PCA0CPM0=0x21; /模模块0上升沿中断允上升沿中断允许 PCA0CPM1=0x21; /模模块1 CR=0; /关关PCA078PCA应用举例应用举例void PCA0_ISR (void) interrupt 9 /PCA0中断服中断服务程序程序 EA=0; /关中断关中断 if (CCF0=1) /模模块0对第一路液体脉冲第一路液体脉冲计数数 CCF0=0; /清清CCF中断中断标志志 Plus_NUM0+; /脉

81、冲脉冲计数数 if (CCF1=1) /模模块1 CCF1=0; Plus_NUM1+; EA=1; /开中断开中断79PCA应用举例应用举例void main (void) /主程序主程序 WDTCN = 0xde; /关看关看门狗狗WDTCN = 0xad; SYSCLK_Init (); /初始化初始化时钟 PORT_Init (); /初始化初始化IO口口Init_PCA0(); /初始化初始化PCA0 CR=1; /启启动PCA0EA=1; /开中断开中断while (1); /等待中断等待中断 804.3 UART通信接口通信接口 vC8051F具有丰富的串行通信接口。包括具有丰富

82、的串行通信接口。包括2个个UART通通信接口、一个信接口、一个与与I2C兼容的兼容的SMBus接口和一个接口和一个SPI接口。接口。vUART串行接口是全双工串行通信接口,即能同时进串行接口是全双工串行通信接口,即能同时进行串行发送和接收。它可以作行串行发送和接收。它可以作UART(通用异步接收和通用异步接收和发送器)用,也可以作同步位移寄存器用。发送器)用,也可以作同步位移寄存器用。 v应用应用UART串行接口可以实现串行接口可以实现C8051F单片机系统之间单片机系统之间点对点的点对点的单机通信、多机通信单机通信、多机通信以及以及C8051F与系统机与系统机(如(如IBM-PC机等)的单机

83、或多机通信。机等)的单机或多机通信。 814.3.1 4.3.1 串行通信及基础知识串行通信及基础知识 1 1数据通信的概念数据通信的概念 v并行通信和串行通信并行通信和串行通信 并并行行通通信信是是指指数数据据的的各各位位同同时时进进行行传传送送(发发送送或或接接收收)的的通通信信方方式式。其其优优点点是是传传递递速速度度快快;缺缺点点是是数数据据有有多多少少位位,就就需需要要多多少少根根传传送送线线。并并行行通通信信在在位位数数多多、传传送送距距离离又又远远时时就就不不太适宜。太适宜。串串行行通通信信指指数数据据是是一一位位一一位位按按顺顺序序传传送送的的通通信信方方式式,它它的的突突出出

84、优优点点是是只只需需一一对对传传送送线线(利利用用电电话话线线就就可可作作为为传传送送线线),这这样样就就大大大大降降低低了了传传送送成成本本,特特别别适适用用于于远远距距离离通通信信。其其缺缺点是传送速度较低。点是传送速度较低。822 2串行通信的传送方向串行通信的传送方向 v三三种种:一一种种为为单单工工(或或单单向向)配配置置,只只允允许许数数据据向向一一个方向进行传送;个方向进行传送;v另另一一种种是是半半双双工工(或或半半双双向向)配配置置,允允许许数数据据向向两两个个方方向向中中的的任任何何一一个个方方向向传传送送,但但一一次次只只能能有有一一个个发发送送,一个接收;一个接收;v第

85、第三三种种传传送送方方式式是是全全双双工工(或或全全双双向向)配配置置,允允许许同同时时双双向向传传送送数数据据,因因此此,全全双双工工配配置置是是一一对对单单工工配配置置,它它要要求求两两端端的的通通信信设设备备都都具具有有完完整整和和独独立立的的发发送送和和接接收收能力。能力。833 3异步通信和同步通信异步通信和同步通信 (1 1)异步通信)异步通信 异异步步通通信信用用起起始始位位0 0表表示示字字符符的的开开始始,然然后后从从低低位位到到高高位位逐逐位位传传送送数数据据,最最后后用用停停止止位位1 1表表示示字字符符结结束束,如如图图4-184-18所所示示。一一个个字字符符又又称称

86、一一帧帧信信息息。图图4-18a4-18a中中,一一帧帧信信息息包包括括1 1位位起起始始位位、8 8位位数数据据位位和和1 1位位停停止止位位,图图4 418b18b中中,数数据据位位增增加加到到9 9位位。在在C8051FC8051F单单片片机机系系统统中中,第第9 9位位数数据据D8D8可可以以用用作作奇奇偶偶校校验验位位,也也可可以以用用作作地地址址数数据据帧帧的的标标识识位位,D8D81 1表表示示该该帧帧信信息息传传送送的的是是地地址址,D8D80 0表表示示传传送送的的是是数数据据。两两帧帧信信息息之之间间可可以以无无间间隔隔,也也可可以以有有间间隔隔,且且间间隔隔时时间间可可任

87、任意意改改变变,间间隔隔用用空空闲闲位位“1”1”来填充。来填充。84异步通信异步通信 图图4-18 4-18 异步通信数据格式异步通信数据格式 85(2 2)同步通信)同步通信 v在同步通信中,每一数据块开头时发送一个或两个在同步通信中,每一数据块开头时发送一个或两个同步字符同步字符,使发送与接收双方取得同步。数据块的各个字符间取消了起始位使发送与接收双方取得同步。数据块的各个字符间取消了起始位和停止位,所以通信速度得以提高,如图和停止位,所以通信速度得以提高,如图4-194-19所示。同步通信时,所示。同步通信时,如果发送的数据块之间有间隔时间,则发送同步字符填充。如果发送的数据块之间有间

88、隔时间,则发送同步字符填充。 图图4-19 4-19 同步通信数据格式同步通信数据格式 864.3.2 4.3.2 串行接口的组成和特性串行接口的组成和特性 1UART的组成的组成vC8051F的的UART可可以以实实现现同同时时发发送送和和接接收收数数据据的的全全双双工工通通信信。串行口的内部有串行口的内部有独立的独立的数据接收缓冲器和数据发送缓冲器。数据接收缓冲器和数据发送缓冲器。v这这两两个个数数据据缓缓冲冲器器都都用用符符号号SBUF0来来表表示示(UART1的的数数据据缓缓冲器用冲器用SBUF1表示)的,地址都是表示)的,地址都是99H(SBUF1的地址是的地址是F2H)。)。vCP

89、U对对特特殊殊功功能能寄寄存存器器SBUF0或或SBUF1执执行行写写操操作作,就就是是将将数数据据写写入入发发送送缓缓冲冲器器;对对SBUF0或或SBUF1的的读读操操作作,就就是是读读出出接接收收缓冲器的内容。缓冲器的内容。871UART的组成的组成vUART的原理框图如的原理框图如图图4-20所示。由原理图可知,所示。由原理图可知,发发送电路送电路由发送由发送SBUF 、零检测器和发送控制器等组成。零检测器和发送控制器等组成。接收电路接收电路由接收由接收SBUF、接收移位寄存器和接收控制器接收移位寄存器和接收控制器等组成。等组成。v除发送和接收电路以外,还有除发送和接收电路以外,还有波特

90、率发生器波特率发生器、错误校错误校验电路验电路、多机通信控制电路多机通信控制电路和和交叉开关交叉开关等组成,交叉开等组成,交叉开关可将接收与发送引脚配置到关可将接收与发送引脚配置到P0到到P3的任意口线的任意口线。 88UARTUART的组成的组成发送部分发送部分写写SBUF有三个作用有三个作用发送结束,发送结束,置置TI标志标志89UARTUART的组成的组成接收部分接收部分起始位检测起始位检测接收完一字节,装接收完一字节,装SBUFRB8=1时,检测地址,时,检测地址,多机通信多机通信902 2串行口控制寄存器串行口控制寄存器SCONSCONv位位7-5:该三位的功能:该三位的功能由由PC

91、ON中的中的SSTAT0位决定位决定SSTAT0 =1时,用于时,用于UART0 的出错状态指示位。的出错状态指示位。FE0=1为帧格式错,即收到的停止位为为帧格式错,即收到的停止位为0;RXOV0=1为接收覆盖错误,即前一个字节还没有取走,为接收覆盖错误,即前一个字节还没有取走,接收器又锁存了一个新字节;接收器又锁存了一个新字节;TXCOL0=1为发送冲突错误,即前一个字节还没有发送完为发送冲突错误,即前一个字节还没有发送完又往又往SBUF写入一新字节。写入一新字节。SSTAT0 =0时,时, SM00、SM10按按表表4-7选择选择UART0的工作方的工作方式式。 RI0 TI0 RB80

92、 TB80 REN0 SM20/TXCOL0 SM10/RXOV0 SM00/FE0字节字节地址地址98H D7 D6 D5 D4 D3 D2 D1 D0912 2串行口控制寄存器串行口控制寄存器SCONSCONSM00SM10方式方式功功 能能 说说 明明000同步方式(扩展移位寄存器方式,用于同步方式(扩展移位寄存器方式,用于I/O口扩展),口扩展),波特率固定(波特率固定(fosc12)0118位位UART,波特率可变(由波特率可变(由T1或或T2溢出率决定)溢出率决定)1029位位UART,波特率固定(波特率固定(fosc64或或fosc32)1139位位UART,波特率可变(由波特率

93、可变(由T1或或T2溢出率决定)溢出率决定)表表4-7 4-7 UART0UART0的方式选择位的方式选择位 922 2串行口控制寄存器串行口控制寄存器SCONSCONvSM20为多处理器通信允许位为多处理器通信允许位方式方式0时该位无作用。时该位无作用。方式方式1时用于检查有效停止位。时用于检查有效停止位。0:忽略对停止位的检测。:忽略对停止位的检测。1:只有接收到有效的停止位时才置位:只有接收到有效的停止位时才置位RI0。方式方式2和方式和方式3时为多机通信允许位时为多机通信允许位0:忽略对第九位的检测。:忽略对第九位的检测。1:只有当第九位为:只有当第九位为“1”并且接收到的地址并且接收

94、到的地址与与UART0的的地址或广播地址匹配时才置位地址或广播地址匹配时才置位RI0并产生中断。并产生中断。 932 2串行口控制寄存器串行口控制寄存器SCONSCONv位位4 4(REN0REN0):):接收允许位接收允许位0 0:禁止:禁止UART0UART0接收接收 1 1:允许:允许UART0UART0接收接收v位位3 3(TB80TB80):):第第9 9发送位发送位对于方式对于方式2 2和方式和方式3 3,是发送的第,是发送的第9 9位数据。可跟据需要时由软位数据。可跟据需要时由软件置位或复位。在方式件置位或复位。在方式0 0和和1 1中未用。中未用。v位位2 2(RB80RB80

95、):):第第9 9接收位接收位对于方式对于方式2 2和方式和方式3 3,是接收到的第,是接收到的第9 9位数据。对于方式位数据。对于方式1 1,如,如SM20=0SM20=0,RB80RB80是接收到的停止位。对于方式是接收到的停止位。对于方式0 0,不使用,不使用RB80RB80。942 2串行口控制寄存器串行口控制寄存器SCONSCONv位位1 1(TI0TI0):):发送中断标志位发送中断标志位由硬件在方式由硬件在方式0 0串行发送第串行发送第8 8位结束时置位,或在其它方式串位结束时置位,或在其它方式串行发送停止位的开始时置位。当允许行发送停止位的开始时置位。当允许UART0UART0

96、中断时,置中断时,置1 1该位该位将使将使CPUCPU转到转到UART0UART0中断服务程序。该位必须由软件清中断服务程序。该位必须由软件清0 0。v位位0 0(RI0RI0):):接收中断标志位接收中断标志位由硬件在方式由硬件在方式0 0接收到第接收到第8 8位结束时置位,或在其它方式接收位结束时置位,或在其它方式接收到停止位的中间时置位。当允许到停止位的中间时置位。当允许UART0UART0中断时,置中断时,置1 1该位将使该位将使CPUCPU转到转到UART0UART0中断服务程序。该位必须由软件清中断服务程序。该位必须由软件清0 0。 953 3特殊功能寄存器特殊功能寄存器PCONP

97、CON v位位7(SMOD0):):UART0波特率系数控制位波特率系数控制位0:UART0的波特率不加倍。的波特率不加倍。1:UART0的波特率加倍。的波特率加倍。v位位6(SSTAT0):):UART0增强状态方式选择位增强状态方式选择位0:读:读/写写SCON0.57时访问时访问UART0方式设置位方式设置位SM20-SM00。1:读读/写写SCON0.57时访问帧格式错误时访问帧格式错误(FE0)、)、接收覆盖接收覆盖错误错误(RXOV0)和发送冲突错误和发送冲突错误(TXCOL0)状态位。状态位。IDLEIDLE STOPSTOP - - SSTAT1SSTAT1 SMOD1SMOD

98、1 - - SSTAT0SSTAT0 SMOD0SMOD0 字节字节地址地址87H87H D7 D6 D5 D4 D3 D2 D1 D0963 3特殊功能寄存器特殊功能寄存器PCONPCONv位位5:保留。读出值无定义,必须写入:保留。读出值无定义,必须写入0。v位位4(SMOD1):):UART1波特率系数控制位波特率系数控制位0:UART1的波特率不加倍。的波特率不加倍。1:UART1的波特率加倍。的波特率加倍。v位位3(SSTAT1):):UART1增强状态方式选择。增强状态方式选择。0:读:读/写写SCON1.57时访问时访问UART1方式设置方式设置位位SM21-SM01。1:读读/

99、写写SCON1.57时访问帧格式错误时访问帧格式错误(FE1)、)、接收覆盖接收覆盖错误(错误(RXOV1)和发送冲突错误和发送冲突错误(TXCOL1)状态位。状态位。v位位2: 保留。读出值无定义,必须写入保留。读出值无定义,必须写入0。v位位1-位位0:见:见2.6节电源管理方式。节电源管理方式。 974.3.3 4.3.3 串行接口的工作方式串行接口的工作方式 1方式方式0 v方式方式0是扩展移位寄存器的工作方式,用以扩展并行是扩展移位寄存器的工作方式,用以扩展并行IO接口。接口。串串行行发发送送,发发送送SBUF相相当当于于一一个个并并入入串串出出移移位位寄寄存存器器,由由C8051F

100、的内部总线并行接收的内部总线并行接收8位数据,并位数据,并从从RXD线串行输出。线串行输出。串串行行接接收收,接接收收SBUF相相当当于于一一个个串串入入并并出出的的移移位位寄寄存存器器,从从RXD线接收一帧串行数据,并把它并行地送到内部总线。线接收一帧串行数据,并把它并行地送到内部总线。v由由RXD串串行行输输入入输输出出数数据据,TXD输输出出移移位位脉脉冲冲。波波特特率率固固定定为为fosc12 。 98(1 1)方式)方式0 0输出输出 v串串口口外外接接74LSl6474LSl64串串入入并并出出移移位位寄寄存存器器的的接接口口逻逻辑辑如如图图4-214-21所所示示。TXDTXD输

101、出移位脉冲,输出移位脉冲,RXDRXD输出数据移入输出数据移入74LSl6474LSl64。vCPUCPU写写发发送送SBUFSBUF,启启动动串串行行口口从从低低位位开开始始发发送送,经经过过8 8个个发发送送周周期,发送期,发送SBUFSBUF的内容移入的内容移入74LSl6474LSl64,并置位并置位TITI,完成一字节输出。完成一字节输出。v若若foscfosc=12MHz=12MHz,则则串串行行输输出出一一位位的的时时间间是是1 1s s,传传输输一一个个字字节节需需8 8s s。v从从低低位位开开始始串串行行输输出出,数数据据的的低低位位在在右右高高位位在在左左,在在具具体体应

102、应用用中应加以注意。方式中应加以注意。方式0 0输出时,可以串接多个移位寄存器。输出时,可以串接多个移位寄存器。99(1 1)方式)方式0 0输出输出图图4-214-21 100(1 1)方式)方式0 0输出输出74LS16474LS164真值表真值表101例例4-5 编程使下图中编程使下图中L0L3、L8、L10、L12、L14亮,其余灭亮,其余灭MRMR解解 SCON0=0x00; /UART0SCON0=0x00; /UART0初始化,方式初始化,方式0 0,禁止接收,禁止接收SBUF0=0x0f; /SBUF0=0x0f; /发送一字节发送一字节while (!TI0); /while

103、 (!TI0); /等待发送完毕等待发送完毕TI0=0; /TI0=0; /清除发送结束标志清除发送结束标志SBUF0=0x55; /SBUF0=0x55; /继续发下一字节继续发下一字节while (!TI0);while (!TI0);TI0=0;TI0=0; /; /其他操作其他操作(1 1)方式)方式0 0输出举例输出举例102(2 2)方式)方式0 0输入输入 v方式方式0 0输入,输入,RXD-RXD-数据输入线,数据输入线,TXD-TXD-移位脉冲,串移位脉冲,串行口与外接的并入串出的移位寄存器行口与外接的并入串出的移位寄存器74LSl6674LSl66的接口逻的接口逻辑如图辑如

104、图4-234-23所示。所示。 图图4-23 4-23 方式方式0 0输入时移位寄存器的连接输入时移位寄存器的连接10374LS165并入串出并入串出移位寄存器移位寄存器( 74LS166与之与之类似类似 )74LS16574LS165真值表真值表(2 2)方式)方式0 0输入举例输入举例104 例例:根根据据下下图图编编写写程程序序,当当开开关关K合合上上时时, 采采集集8位位开开关关量量,根据开关的不同状态进行不同处理。根据开关的不同状态进行不同处理。 (2 2)方式)方式0 0输入举例输入举例105程序如下程序如下: START: JB P1.0, $ ; 开关开关K未合上未合上, 等待

105、等待 CLR P1.1 ; 74LS165并行输入数据并行输入数据 SETB P1.1 ; 开始串行移位开始串行移位 MOV SCON, 10H ; 串行口方式串行口方式 0并启动接收并启动接收 JNB RI, $ CLR RI MOV A, SBUF ; 输入数据输入数据 ; 根据根据 A处理不同任务处理不同任务 SJMP START ; 准备下一次接收。准备下一次接收。 (2 2)方式)方式0 0输入举例输入举例1062 2方式方式1 1v方方式式1 1是是8 8位位异异步步串串行行通通信信方方式式,TXDTXD为为数数据据输输出出线线,RXDRXD为为数数据据输输入入线线。传传送送一一帧

106、帧信信息息的的数数据据格格式式如如下下图图所所示示,一一帧帧为为1010位位:1 1位位起起始始位位,8 8位位数数据据位位(先先低低位位后后高高位位)和)和1 1位停止位。位停止位。1072 2方式方式1 1v(1)方式)方式1输出输出 vCPU向发送向发送SBUF写写入一个数据,即入一个数据,即启动启动发送,发送,从从TXD端输出一帧信息,先发送起始位端输出一帧信息,先发送起始位0,接着从低位开,接着从低位开始依次输出始依次输出8位数据,最后输出停止位位数据,最后输出停止位1,并置,并置1发送发送中中断标志断标志TI。vCPU查询查询TI=1后,清后,清TI,再向再向SBUF写入数据,启动

107、写入数据,启动下一字符发送。也可以采用下一字符发送。也可以采用中断方式中断方式,TI=1时向时向CPU产生中断请求。产生中断请求。 108(2)方式)方式1输入输入 vREN置置1允许接收器接收。接收器以所选波特率的允许接收器接收。接收器以所选波特率的16倍的速率倍的速率采样采样RXD端的电平。当检测端的电平。当检测到到RXD端输入电平发生端输入电平发生负跳变负跳变时,时,复位内部的十六分频计数器。复位内部的十六分频计数器。v计数器的计数器的16个状态把传送一位数据的时间分为个状态把传送一位数据的时间分为16等分,在每位等分,在每位中心,即中心,即7、8、9这三个计数状态,位检测器采样这三个计

108、数状态,位检测器采样RXD的输入电的输入电平,接收的值是平,接收的值是三次采样中至少是两次相同三次采样中至少是两次相同的值,这样处理可以的值,这样处理可以防止干扰。防止干扰。v如果在第如果在第1位时间接收到的值(起始位)不是位时间接收到的值(起始位)不是0,则起始位无效,则起始位无效,复位接收电路,重新搜索复位接收电路,重新搜索RXD端上的负跳变。接收到停止位为端上的负跳变。接收到停止位为1时,将接收到的时,将接收到的8位数据装入接收数据缓冲器位数据装入接收数据缓冲器SBUF,置位置位RI,供供CPU查询或向查询或向CPU请求中断请求中断。1093 3方式方式2 2和方式和方式3 3 v方方式

109、式2和和方方式式3是是9位位异异步步串串行行通通信信方方式式,TXD为为数数据据发发送送端端,RXD为为数数据据接接收收端端。方方式式2的的波波特特率率固固定定为为振振荡荡器器频频率率的的164或或132,而而方方式式3的的波波特特率率由由定定时时器器T1或或T2的的溢溢出出率率确确定定(UART1方式方式3的波特率由定时的波特率由定时器器T1或或T4的溢出率确定)。的溢出率确定)。v在方式在方式2和方式和方式3中,一帧信息为中,一帧信息为11位:位:1位起始位,位起始位,8位数据位位数据位(先低位后高位),(先低位后高位),1位附加的第位附加的第9位数据(发送时位数据(发送时为为SCON中的

110、中的TB8,接收时为接收时为SCON中的中的RB8。用于用于奇偶校验奇偶校验和和多机通信多机通信),),1位停止位。数据的格式如下图所示。位停止位。数据的格式如下图所示。 1103 3方式方式2 2和方式和方式3 3v多一附加位多一附加位TB8、RB8,可用于多机通信和奇偶校验可用于多机通信和奇偶校验v区别是波特率不同区别是波特率不同v输出:写发送输出:写发送SBUF即启动发送即启动发送发完置位发完置位TIv输入输入:置位:置位REN 接收完后,接收完后,若若RI=0、SM2=0或收到或收到的第的第9位为位为1,则,则置位置位RI 读接收读接收SBUF1114.3.4 4.3.4 波特率设计波

111、特率设计 方式方式1、3: 2SMOD T1溢出率溢出率/32 方式方式0:fOSC /12 方式方式2:2SMOD fOSC /64溢出周期溢出周期T= =1Q方式方式2溢出率溢出率T= = 1波特率波特率= = =XT1 时钟选择位时钟选择位(CKCON.4)1124.3.4 4.3.4 波特率设计波特率设计v例例4.6 已知已知C8051F单片机时钟振荡频率为单片机时钟振荡频率为11.0592MHz,选用定时选用定时器器T1工作方式工作方式2作波特率发生器,作波特率发生器,波特率为波特率为2400bit/S,求初值求初值X。 v解:解:设波特率控制位设波特率控制位SMOD0=0,定时定时

112、器器T1计数脉冲计数脉冲控制位控制位T1M=0,则有:则有: P163 常用波特率表常用波特率表113(2 2)用定时)用定时器器T2T2和和T4T4产生波特率产生波特率 vC/T2 =0C/T2 =0时,波特率计算公式为:时,波特率计算公式为:v C/T2 =1C/T2 =1时,波特率计算公式时,波特率计算公式为:为:T4作波特率发生器类似作波特率发生器类似FCLK为为T2引脚引脚上输入信号的频率上输入信号的频率 1144.3.5 4.3.5 串行口应用编程串行口应用编程 v 设设定定波波特特率率。串串行行口口的的波波特特率率有有两两种种,即即固固定定波波特特率率和和可可变变波波特特率率。当

113、当使使用用可可变变波波特特率率时时,应应先先计计算算T1或或T2/T4的的计计数数初初值值,并并对对相相应应定定时时器器进进行行初初始始化化;如如使使用用固固定定波波特特率率(方方式式0、方式、方式2),则此步骤可以省略。),则此步骤可以省略。v填填写写控控制制字字。即即对对SCON寄寄存存器器设设定定工工作作方方式式,如如果果是是接接收收程程序序或或双双工工通通信信方方式式,需需要要置置REN=1(允允许许接接收收),同同时时也也要要将将TI、RI进行清零。进行清零。1154.3.5 4.3.5 串行口应用编程串行口应用编程v采采用用查查询询和和中中断断两两种种方方式式。TITI和和RIRI

114、是是一一帧帧数数据据是是否否发发送送完完或或收收齐齐的的标标志志,可可用用于于CPUCPU查查询询;如如果果允允许许,也也可可以以向向CPUCPU申申请请中中断断。两种方式的编程方法如下:两种方式的编程方法如下:查询式发送程序查询式发送程序:发送一个数据:发送一个数据查询查询TITI发送下一个数据(先发后查)。发送下一个数据(先发后查)。查查询询式式接接收收程程序序:查查询询RIRI读读入入一一个个数数据据查查询询RIRI读读下下一一个个数数据据(先先查后收)。查后收)。中中断断式式发发送送程程序序:发发送送一一个个数数据据等等待待中中断断在在中中断断服服务务程程序序中中发发送送下下一个数据。

115、一个数据。中断式接收程序中断式接收程序:等待中断:等待中断在中断服务程序中接收一个数据。在中断服务程序中接收一个数据。v两种方式中,发送和接收数据后都要注意两种方式中,发送和接收数据后都要注意清清零零TITI或或RIRI。 1161 1查询方式查询方式 初始化并启动定时器工作初始化并启动定时器工作设定串行通信方式设定串行通信方式,允许接收允许接收置发送缓冲区首址和置发送缓冲区首址和发送数据块长度计数器发送数据块长度计数器TI1?开始开始Y清清TI修改地址指针修改地址指针和块长度计数器和块长度计数器全部数据发送完?全部数据发送完?结束结束YNN发送数据发送数据初始化并启动定时器工作初始化并启动定

116、时器工作设定串行通信方式设定串行通信方式,允许接收允许接收置接收缓冲区首址和置接收缓冲区首址和接收数据块长度计数器接收数据块长度计数器RI1?开始开始接收数据接收数据Y清清RI修改地址指针修改地址指针和块长度计数器和块长度计数器全部数据接收完?全部数据接收完?结束结束YNN初初始始化化循循环环发发送送或或接接收收1172 2中断方式中断方式 发送发送1182 2中断方式接收中断方式接收1193 3串行通信编程举例串行通信编程举例v例例4.7 在在C8051F020的片内数据存储器的片内数据存储器20H3FH单元单元共有共有32个字节数据,要求使用个字节数据,要求使用UART0方式方式1发送出去

117、,发送出去,传输波特率为传输波特率为9600,设,设SYSCLK=12MHz。试分别用查试分别用查询方式和中断方式编写发送程序和相应的接收程序。询方式和中断方式编写发送程序和相应的接收程序。 v解解 选选T1工作于方式工作于方式2,作为波特率发生器,作为波特率发生器,取,取T1M=0(T1按振荡器的按振荡器的12分频计数)分频计数)、SMOD0=0,T1的时间常数计算(请同学自己计算):的时间常数计算(请同学自己计算):253(FDH) 120#include void main(void) unsigned char i; char data *p; /发送数据块地址指针发送数据块地址指针

118、TMOD=0x20; /初始化并启动初始化并启动T1 TH1=0xfd; TL1=0xfd; TR1=1; SCON0=0x40; /UART0初始化初始化 p=0x20; /地址指针初始化地址指针初始化 for(i=0;i32;i+) SBUF0=*p; /一字节送发送一字节送发送SBUF0p+;while(!TI);/等待发送完成等待发送完成TI=0; 查询方式发送程序:查询方式发送程序:查询方式发送程序:查询方式发送程序:121查询方式接收程序:查询方式接收程序:查询方式接收程序:查询方式接收程序:#include void main(void) unsigned char i;char

119、 data *p; /发送数据块地址指针发送数据块地址指针 TMOD=0x20; /初始化并启动初始化并启动T1 TH1=0xfd; TL1=0xfd; TR1=1; SCON0=0x50; /UART0初始化,方式初始化,方式1 、允许接收、允许接收 p=0x20; /地址指针初始化地址指针初始化 for(i=0;i32;i+)while(!RI); /等待等待UART0接收一个字符接收一个字符RI=0; *p=SBUF0; /放入接收缓冲区放入接收缓冲区p+; 122中断方式发送主程序中断方式发送主程序:#include void main(void) char data *p; /发送数

120、据块地址指针发送数据块地址指针 TMOD=0x20; /初始化并启动初始化并启动T1 TH1=0xfd; TL1=0xfd; TR1=1; SCON0=0x40; /UART0初始化,方式初始化,方式1 p=0x20; /地址指针初始化地址指针初始化 EA=1; /开中断开中断 ES0=1; SBUF0=*p; /发送第一个字符发送第一个字符 while(1); /等待发送中断等待发送中断123中断方式发送中断服务程序:中断方式发送中断服务程序:void interrupt_UART0(void) interrupt 4TI=0; /清清发送中断送中断标志志 p+;if(p0x40)SBUF0

121、=*P; /发送下一字送下一字节else ES0=0; /关串口中断关串口中断124中断方式接收主程序中断方式接收主程序:#include void main(void) unsigned char i; char data *p; /发送数据块地址指针发送数据块地址指针 TMOD=0x20; /初始化并启动初始化并启动T1 TH1=0xfd; TL1=0xfd; TR1=1; SCON0=0x50; /UART0初始化,方式初始化,方式1、允许接收、允许接收 p=0x20; /地址指针初始化地址指针初始化 EA=1; /开串口中断开串口中断 ES0=1; while(1); /等待接收中断等

122、待接收中断125中断方式接收中断服务程序中断方式接收中断服务程序:void interrupt_UART0(void) interrupt 4 RI=0; /清接收中断标志清接收中断标志 *p=SBUF0; /收到的字符送接收缓冲区收到的字符送接收缓冲区 p+; if(p=0x40) ES0=0; /关串口中断关串口中断1263 3串行通信编程举例串行通信编程举例v例例4.8 试编写一个试编写一个UART0带奇偶校验的发送程序带奇偶校验的发送程序。v设设SYSCLK=11.0592MHz,波波特特率率=9600,UART0工工作作于于方方式式1,发发送送字字符符的的ASCIIASCII码码最最

123、高高位位作作校校验验位位,用用T2作波特率发生器作波特率发生器,T2的时间常数计算如下:的时间常数计算如下:v 波特率波特率v RCAP2H:RCAP2L=65536 - =65500=0xffdc1273 3串行通信编程举例串行通信编程举例#include #include char s=“C8051F020 Serial Communication”;char bdata c; sbit c7=c7;void main(void)char a,b=0;T2CON=0x14; /T2作作发送波特率送波特率发生器生器,TCLK0=1,TR2=1SCON0=0x40; /SM20=SM00=0,

124、SM10=1,REN0=0;RCAP2H=0xff; RCAP2L=0xdc; a=strlen(s); 1283 3串行通信编程举例串行通信编程举例for(;ba;b+)c=sb;ACC=c; /形成校验位形成校验位c7=P; /最高位作校最高位作校验位位SBUF0=c;while(!TI0);TI0=0; 方式方式2、3中也可以使用中也可以使用TB8、RB8作校验位,请自己练习!作校验位,请自己练习!129例例例例4.9 A4.9 A4.9 A4.9 A机和机和机和机和B B B B机进行点对点通信机进行点对点通信机进行点对点通信机进行点对点通信vA A机开始发送时,先发送机开始发送时,先

125、发送AAAA联络信号联络信号,vB B机收到后回答一个机收到后回答一个BBBB信号信号,表示同意接收。,表示同意接收。vA A机收到机收到BBBB信号后开始发送数据,每发送一个字节便求一次信号后开始发送数据,每发送一个字节便求一次累加校验和累加校验和。v假假定定数数据据块块长长度度为为1616字字节节,数数据据缓缓冲冲区区首首地地址址为为BUFBUF,数数据据发发送送完完后后马马上上发发送校验和。送校验和。vB B机机接接收收数数据据并并将将其其存存入入BUFBUF为为首首地地址址的的缓缓冲冲区区,每每收收到到一一字字节节也也计计算算一一次次校校验验和和,当当收收齐齐数数据据块块后后,再再接接

126、收收A A机机发发来来的的校校验验和和,并并将将其其与与自自己己计计算算出出来来的的校校验验和和进进行行比比较较。若若二二者者相相等等,则则说说明明接接收收正正确确,B B机机回回答答00H00H;否否则则说说明接收不正确,明接收不正确,B B机机回答回答FFHFFH,请求重发。请求重发。vA A机收到机收到00H00H的回答后,结束发送。否则将数据再重发一次。的回答后,结束发送。否则将数据再重发一次。v双双方方约约定定的的波波特特率率为为12001200,SYSCLK=11.0592MHzSYSCLK=11.0592MHz,用用定定时时器器T1T1作作波波特特率率发发生生器,取器,取T1M=

127、0T1M=0、SMOD0=0SMOD0=0。130例例例例4.9 A4.9 A4.9 A4.9 A机和机和机和机和B B B B机进行点对点通信机进行点对点通信机进行点对点通信机进行点对点通信AA 数据(数据(16字节)字节) 校验和校验和BB 数据(数据(16字节)字节) 校验和校验和 00/FFA机机B机机数据(数据(16字节)字节) 校验和校验和 131例例例例4.9 A4.9 A4.9 A4.9 A机和机和机和机和B B B B机进行点对点通信机进行点对点通信机进行点对点通信机进行点对点通信#include #define uchar unsigned char#define TR 1

128、 /发送、接收控制变量,发送、接收控制变量,0发送、发送、1接收接收uchar idata buf16; /发送、接收缓冲区发送、接收缓冲区uchar pf; /校验和校验和void init(void) /初始化函数初始化函数TMOD=0x20; /定时定时器器T1方式方式2,作波特率发生器,作波特率发生器TH1=0xe8;TL1=0xe8;PCON=0x00;TR1=1;SCON0=0x50; /UART0方式方式1、REN0=1132例例例例4.9 A4.9 A4.9 A4.9 A机和机和机和机和B B B B机进行点对点通信机进行点对点通信机进行点对点通信机进行点对点通信void se

129、nd(uchar idata *d) /发送函数发送函数 uchar i;do SBUF0=0xAA; /发送联络信号发送联络信号while(!TI0); TI0=0; while(!RI0); RI0=0;while(SBUF00xBB)!=0);/直到对方同意接收直到对方同意接收 do pf=0; for(i=0;i16;i+) SBUF0=di; /发送一字节发送一字节 pf+=di; /计算校验和计算校验和 while(!TI0); TI0=0; 133例例例例4.9 A4.9 A4.9 A4.9 A机和机和机和机和B B B B机进行点对点通信机进行点对点通信机进行点对点通信机进行点

130、对点通信 SBUF0=pf; /发送校验和发送校验和 while(!TI0); TI0=0; while(!RI0); /等待对方回应等待对方回应 RI0=0; while(SBUF0!=0); /直到对方回应直到对方回应00,否则重发,否则重发 void receive(uchar idata *d) /接收函数接收函数 uchar i;do while(!RI0);RI0=0;while(SBUF00xAA)!=0);/接收发送请求接收发送请求SBUF0=0XBB; /回送应答回送应答while(!TI0);TI0=0;134例例例例4.9 A4.9 A4.9 A4.9 A机和机和机和机和

131、B B B B机进行点对点通信机进行点对点通信机进行点对点通信机进行点对点通信 While(1) pf=0; for(i=0;i16;i+) while(!RI0); /接收并保存一个字符、计算校验和接收并保存一个字符、计算校验和 RI0=0; di=SBUF0; pf+=di; while(!RI0); /接收校验和接收校验和 RI0=0; If(SBUF0pf)=0 SBUF0=0x00; /回送接收正确应答回送接收正确应答 while(!TI0); TI0=0;Break; else SBUF0=0xff; /回送接收出错应答,请求重发回送接收出错应答,请求重发 while(!TI0);

132、 TI0=0; 135A 机定义机定义TR=0;B机定义机定义TR=1void main(void) /主程序主程序init();if(!TR) send(buf); /TR=0,发送发送elsereceive(buf); /TR=1,接收接收1364.3.6 4.3.6 多机通信原理及应用多机通信原理及应用 v1 1多机通信系统原理多机通信系统原理 主主-从式多机通信系统从式多机通信系统 1371 1多机通信系统原理多机通信系统原理vC8051FC8051F内置内置UARTUART地址识别硬件地址识别硬件,UART0UART0地址是通过串地址是通过串口地址寄存器口地址寄存器SADDR0SAD

133、DR0和串口地址允许寄存器和串口地址允许寄存器SADEN0SADEN0两个两个SFRSFR编程的。编程的。vSADEN0SADEN0用于设置用于设置SADDR0SADDR0中地址的中地址的屏蔽位屏蔽位,SADEN0SADEN0中为中为1 1的位对应的位对应于于SADDR0SADDR0中用来检查接收到的地址字节的位中用来检查接收到的地址字节的位;SADEN0SADEN0为为0 0的位对应的位对应于于SADDR0SADDR0中的中的“无关无关” ” 位。位。v如,若如,若SADDR0 = 00110101SADDR0 = 00110101、SADEN0 = 00001111SADEN0 = 000

134、01111,则,则UART0UART0地址地址= xxxx0101= xxxx0101;1381 1多机通信系统原理多机通信系统原理v如果如果从机的从机的SM2=1,则只有当接收到的第九数据位则只有当接收到的第九数据位(RB8)为为1时,收到有效的停止位并且接收的数据字时,收到有效的停止位并且接收的数据字节节与与UART0从地址匹配时从地址匹配时UART才会产生中断。才会产生中断。v在接收地址的中断处理程序中,从机应清除它的在接收地址的中断处理程序中,从机应清除它的SM2位,以允许后面接收数据字节时产生中断。一旦接收完位,以允许后面接收数据字节时产生中断。一旦接收完整个数据块,被寻址的从机应将

135、整个数据块,被寻址的从机应将其其SM2位重新置位重新置“1” 。v在在SM20=1时,时,UART0忽略所有那些与忽略所有那些与UART地址不地址不匹配以及第九数据位不是匹配以及第九数据位不是“1”的字节的字节。1392 2多机通信协议多机通信协议 v(1 1)所有从机)所有从机的的SM2SM2位置位置1 1,处于只接收地址帧的状态。,处于只接收地址帧的状态。v(2 2)主主机机发发送送一一帧帧地地址址信信息息,其其中中前前8 8位位为为地地址址,第第9 9位位为为地地址数据信息的标志位,址数据信息的标志位,1 1表示该帧为地址信息。表示该帧为地址信息。v(3 3)从从机机接接收收到到地地址址

136、帧帧后后,与与本本机机的的地地址址比比较较。若若相相等等则则将将其其SM2SM2清清0 0,并并把把本本机机的的地地址址回回送送给给主主机机作作为为应应答答,然然后后开开始始接接收收主主机机随随后后发发来来的的数数据据或或命命令令信信息息;否否则则仍仍保保持持SM2SM2为为1 1,对对主主机机随随后发来的数据不予理睬,直至发送新的地址帧。后发来的数据不予理睬,直至发送新的地址帧。v(4 4)主主机机收收到到从从机机的的地地址址应应答答后后,确确认认地地址址是是否否相相符符。若若相相符符,则则清清TB8TB8,开开始始发发送送命命令令,通通知知从从机机是是进进行行数数据据接接收收或或数数据据发

137、送;否则发复位信号(数据帧中发送;否则发复位信号(数据帧中TB8TB81 1)。)。v(5 5)主从机之间进行数据通信。主从机之间进行数据通信。140所有从机所有从机SM2=1,监听主机的地址信息监听主机的地址信息主机发联络地址信息主机发联络地址信息(TB8=1)各从机收到地址后与自己的地址比较各从机收到地址后与自己的地址比较将本从机将本从机SM2置置0,并回送自己的地址给主机,并回送自己的地址给主机主机收到从机地址,若与自己发出的相主机收到从机地址,若与自己发出的相符,则发数据(符,则发数据(TB8=0),),开始通信开始通信相符相符1 1主主- -从式多机通信过程从式多机通信过程1413

138、3多机通信程序多机通信程序v主机的命令编码如下:主机的命令编码如下:01H:请求从机接收主机数据的命令;请求从机接收主机数据的命令;02H:请求从机向主机发送数据的命令;请求从机向主机发送数据的命令;其他都按从机向主机发送数据命令其他都按从机向主机发送数据命令02H。v从机的状态字格式如下:从机的状态字格式如下:ERR00000TRDY RRDYERR=1表示从机接收到的命令是非法的;表示从机接收到的命令是非法的;TRDY=1表示从机已准备好向主机发送数据;表示从机已准备好向主机发送数据;RRDY=1表示从机已准备好接收主机发送的数据。表示从机已准备好接收主机发送的数据。v请课后阅读请课后阅读

139、P174-P178程序程序主机流程图主机流程图主机流程图主机流程图从机流程图从机流程图从机流程图从机流程图1444.4 4.4 SMBusSMBus v为为了了使使智智能能仪仪器器微微型型化化,首首先先要要设设法法减减少少仪仪器器所所用用芯芯片片的的引引脚脚数数。这这样样一一来来过过去去常常用用的的并并行行总总线线接接口口方方案案由由于于需需要要较较多多的的引引脚脚而不得不舍弃,转而采用只需少量引脚数的串行总线接口方案。而不得不舍弃,转而采用只需少量引脚数的串行总线接口方案。vI2C ( Inter-Integrated Circuit )和和 SPI ( Serial Peripheral

140、Interface )就是两种常用的串行总线接口。就是两种常用的串行总线接口。vSPI三线总线三线总线只需只需3根引脚线就可与外部设备相连。根引脚线就可与外部设备相连。vI2C双总线双总线则只需则只需2根引脚线就可与外部设备相连根引脚线就可与外部设备相连。 v采采用用I2C或或SPI总总线线接接口口的的器器件件相相当当丰丰富富,如如存存储储器器、A/D、D/A、日日历历时时钟钟、键键盘盘显显示示等等,采采用用串串行行总总线线扩扩展展单单片片机机外外围围器器件正成为一种理想的选择。件正成为一种理想的选择。1454.4 4.4 SMBusSMBusv目目前前,多多数数单单片片机机内内部部都都集集成

141、成有有I2C总总线线和和SPI总总线线接接口口,对对于于内内部部没没有有这这些些接接口口的的单单片片机机,也也可可以以通通过过并并行行口口线线用用软软件件仿仿真真的的方法来实现。方法来实现。vC8051F单单片片机机内内部部集集成成有有与与I2C公公用用双双总总线线完完全全兼兼容容的的SMBus总线总线和和SPI总线接口。总线接口。vI I2 2C(IIC)C(IIC)总线总线是是PhilipPhilip公司推出的芯片间串行传输总线,公司推出的芯片间串行传输总线,C8051FC8051F的的SMBusSMBus与其完全兼容。与其完全兼容。vSMBusSMBus总线采用了器件地址硬件设置的方法,

142、通过软件寻址,总线采用了器件地址硬件设置的方法,通过软件寻址,完全避免了用片选线对器件的寻址方法,从而使硬件系统扩展简完全避免了用片选线对器件的寻址方法,从而使硬件系统扩展简单灵活。单灵活。1464.4.1 4.4.1 SMBusSMBus原理原理 vSMBus总线传输中的所有状态都生成相应的总线传输中的所有状态都生成相应的状态码状态码,主机依照,主机依照状态码自动地进行状态码自动地进行总线管理总线管理,用户只要在程序中装入这些标准处,用户只要在程序中装入这些标准处理模块,根据数据操作要求完成总线的初始化,启动总线就能自理模块,根据数据操作要求完成总线的初始化,启动总线就能自动完成规定的数据传

143、送操作。动完成规定的数据传送操作。vSMBus只用两根线就可以实现同步串行接收和发送:只用两根线就可以实现同步串行接收和发送:(1)串行数据线串行数据线SDA ( Serial Data )(2)串行时钟线串行时钟线SCL ( Serial Clock ) vSMBus发送和接收只能分时进行;发送和接收只能分时进行;SDA和和SCL必须接上拉电阻;必须接上拉电阻;工作电压工作电压3.0V5.0V 1474.4.1 4.4.1 SMBusSMBus原理原理SMBus总线电气连接图总线电气连接图1494.4.2 4.4.2 SMBusSMBus协议协议v主器件产生通信的主器件产生通信的开始条件开始

144、条件(SCL高电平高电平时,时,SDA产生负跳变)产生负跳变)和和结束条件结束条件(SCL高电平时,高电平时,SDA产生正跳变)产生正跳变)vSDA线上的数据在线上的数据在SCL高电平期间必须保持稳定高电平期间必须保持稳定(高电平为(高电平为1,低电平为,低电平为0),否则会被误认为是开始条件或结束条件,只有),否则会被误认为是开始条件或结束条件,只有在在SCL低电平期间才能改变低电平期间才能改变SDA线上的数据线上的数据vSMBus总线上传输的每一个字节均为总线上传输的每一个字节均为8位位,但每启动一次,但每启动一次SMBus总线,其后传输的数据字节数是没有限制的。总线,其后传输的数据字节数

145、是没有限制的。 v每传输完一个字节后都必须有一个接收器回应的应答位(低电每传输完一个字节后都必须有一个接收器回应的应答位(低电平为应答信号平为应答信号ACK,高电平为非应答信号高电平为非应答信号NACK),),并且首先并且首先发出的是数据的发出的是数据的最高位最高位。 150SMBusSMBus时序时序1514.4.2 4.4.2 SMBusSMBus协议协议v有两种数据传输类型(按传输方向):有两种数据传输类型(按传输方向):主发从收主发从收(称为(称为写写操作)和操作)和从发主收从发主收(称为(称为读读操作)。两种传操作)。两种传输都由主器件启动,主器件还提供串行时钟。地址字输都由主器件启

146、动,主器件还提供串行时钟。地址字节的节的最低位表示传输方向位最低位表示传输方向位,1读(读(R),),0写(写(W)。)。 v如果多个主器件同时启动传输,如果多个主器件同时启动传输,仲裁机制仲裁机制将保证有将保证有一个主器件会赢得总线。任何发送起始条件和从器件一个主器件会赢得总线。任何发送起始条件和从器件地址的器件就成为该次传输的主器件,没有必要在系地址的器件就成为该次传输的主器件,没有必要在系统中指定主器件。统中指定主器件。152典型典型SMBusSMBus数据传输过程数据传输过程v典型的典型的SMBus传输包括起始条件传输包括起始条件、地址字节(位地址字节(位7-1:7位从地址;位位从地址

147、;位0:R/W方向位)、一个或多个后跟接方向位)、一个或多个后跟接收应答(收应答(ACK或或NACK)的数据字节和一个停止条件。的数据字节和一个停止条件。1531 1总线仲裁总线仲裁v一个主器件只能在总线空闲时启动一次传输。一个主器件只能在总线空闲时启动一次传输。v在一个停止条件之后或在一个停止条件之后或SCLSCL和和SDASDA保持高电平超过指定时间,则保持高电平超过指定时间,则总线是空闲的总线是空闲的。由于产生起始条件的器件并不知道其它器件也正。由于产生起始条件的器件并不知道其它器件也正想占用总线,所以可能会有两个或多个主器件在同一时刻产生起想占用总线,所以可能会有两个或多个主器件在同一

148、时刻产生起始条件,这时始条件,这时SMBusSMBus使用仲裁机制迫使一个主器件放弃总线。使用仲裁机制迫使一个主器件放弃总线。v这些主器件继续发送起始条件,直到其中一个主器件发送高电这些主器件继续发送起始条件,直到其中一个主器件发送高电平而其它主器件平而其它主器件在在SDASDA上发送低电平。由于总线是漏极开路的,上发送低电平。由于总线是漏极开路的,总线将被拉为低电平。发送高电平的主器件将检测到这个总线将被拉为低电平。发送高电平的主器件将检测到这个SDASDA低低电平并放弃总线。赢得总线的器件继续其数据传输过程,而未赢电平并放弃总线。赢得总线的器件继续其数据传输过程,而未赢得总线的器件成为从器

149、件。得总线的器件成为从器件。v该该仲裁机制是非破坏性的仲裁机制是非破坏性的,总会有一个器件赢得总线,不会发,总会有一个器件赢得总线,不会发生数据丢失生数据丢失。1542 2 2 2时钟低电平扩展时钟低电平扩展时钟低电平扩展时钟低电平扩展vSMBusSMBus提供了一种同步机制,允许提供了一种同步机制,允许不同速度的器件不同速度的器件共存于一个总线上。为了共存于一个总线上。为了使使低速从器件低速从器件能与高速主器件通信,从器件可以在传输期间保持能与高速主器件通信,从器件可以在传输期间保持SCLSCL为低电平为低电平以扩展时钟低电平时间,即降低串行时钟的频率。以扩展时钟低电平时间,即降低串行时钟的

150、频率。3 3SCLSCL低电平超时低电平超时 v如果如果SCLSCL线被总线上的从器件保持为低电平,则不能再进行通信,并且主器线被总线上的从器件保持为低电平,则不能再进行通信,并且主器件也不能强制件也不能强制SCLSCL为高电平来纠正这种错误。为了解决这一问题,为高电平来纠正这种错误。为了解决这一问题,SMBusSMBus协议协议规定:参加一次数据传输的器件必须检查时钟低电平时间,若超过规定:参加一次数据传输的器件必须检查时钟低电平时间,若超过25ms25ms则认则认为是为是“超时超时”。检测到超时条件的器件检测到超时条件的器件必须在必须在10ms10ms以内以内复位通信电路复位通信电路。 4

151、 4SCLSCL高电平高电平 ( (SMBusSMBus空闲空闲) ) 超时超时vSMBusSMBus标准规定:如果一个器件保持标准规定:如果一个器件保持SCLSCL和和SDASDA线为高电平的时间超过线为高电平的时间超过50s50s,则可认为总线处于则可认为总线处于空闲状态空闲状态。如果一个。如果一个SMBusSMBus器件正等待产生一个主起始条器件正等待产生一个主起始条件,则该起始条件将在总线空闲超时之后立即产生。件,则该起始条件将在总线空闲超时之后立即产生。 1554.4.3 4.4.3 SMBusSMBus数据传输方式数据传输方式 1 1主发送器方式主发送器方式vSMBus0SMBus

152、0首首先先产产生生起起始始条条件件,然然后后发发送送含含有有目目标标从从器器件件地地址址和和方方向向位位(0 0表表示示写写)的的第第一一个个字字节节。接接着着,在在SDASDA线线上上发发送送一一个个或或多多个个字字节节的的串串行行数数据据、在在SCLSCL上上输输出出串串行行时时钟钟,每每发发送送完完一一字字节节后后等等待待从从器器件件的的确确认认应应答答ACKACK或或非非确确认认应答应答NACKNACK。最后,产生停止条件。典型的主发送器时序如下图所示。最后,产生停止条件。典型的主发送器时序如下图所示。 1562 2主接收器方式主接收器方式vSMBus0SMBus0首先产生起始条件,然

153、后发送含有从器件地址和数据方首先产生起始条件,然后发送含有从器件地址和数据方向(向(1 1表示读)的第一字节。接着表示读)的第一字节。接着,接收来自从器件的串行数据接收来自从器件的串行数据并并在在SCLSCL上输出串行时钟。每收到一个字节后,根据上输出串行时钟。每收到一个字节后,根据SMB0CNSMB0CN中中AAAA位的状态产生确认应答位的状态产生确认应答ACKACK或非确认应答或非确认应答NACKNACK。最后,产生停止最后,产生停止条件。条件。1573 3从发送器方式从发送器方式 vSMBus0SMBus0首首先先收收到到起起始始条条件件和和含含有有从从地地址址和和数数据据方方向向位位(

154、1 1表表示示读读)的的字字节节。如如果果从从地地址址与与SMB0ADRSMB0ADR中中的的一一致致,则则产产生生ACKACK应应答答。如如果果是是全全局局呼呼叫叫地地址址 (0x00) (0x00) 并并且且全全局局呼呼叫叫允允许许位位 (SMB0ADR.0)(SMB0ADR.0)为为1 1,也也会会发发出出ACKACK应应答答。接接着着在在SCLSCL上上接接收收串串行行时时钟钟并并在在SDASDA上上发发送送串串行行数数据据,每每发发送送一一个个字字节节后后等等待待主主器器件件发发送送的的ACKACK或或NACKNACK。最后,在收到主器件的停止条件后,退出从方式。最后,在收到主器件的

155、停止条件后,退出从方式。1584 4从接收器方式从接收器方式vSMBus0SMBus0首首先先收收到到起起始始条条件件和和含含有有从从地地址址和和数数据据方方向向位位(0 0表表示示写写)的的字字节节。如如与与SMB0ADRSMB0ADR中中的的地地址址一一致致,则则产产生生ACKACK应应答答。如如果果是是全全局局呼呼叫叫地地址址(0x00)(0x00)并并且且全全局局呼呼叫叫地地址址允允许许位位(SMB0ADR.0)(SMB0ADR.0)为为1 1,也也发发ACKACK应应答答。接接着着,在在SCLSCL上上接接收收串串行行时时钟钟、在在SDASDA上上接接收收串串行行数数据据,每每收收到

156、到一一字字节节后后,根根据据SMB0CNSMB0CN中中AAAA位位产产生生ACKACK或或NACKNACK。最后,在收到停止条件后,退出从接收器方式。最后,在收到停止条件后,退出从接收器方式。1594.4.4 4.4.4 SMBusSMBus特殊功能寄存器特殊功能寄存器1 1、控制寄存器、控制寄存器SMB0CNSMB0CN TOETOE FTEFTE AA AA SISI STOSTO STA STA ENSMBENSMB BUSYBUSY 字节字节地址地址C0HC0H D7 D6 D5 D4 D3 D2 D1 D0v位位7 7(BUSYBUSY):):忙状态标志位忙状态标志位0 0:SMB

157、us0SMBus0空闭空闭 1 1:SMBus0SMBus0忙忙v位位6 6(ENSMBENSMB):):SMBus0SMBus0允许位允许位0 0:禁止:禁止 1 1:允许允许v位位5 5(STASTA): SMBus0: SMBus0起始标志位起始标志位0 0:不发送起始条件。:不发送起始条件。1 1:为主器件时,若总线空闲,则发送起始条件。否则在收到停止条件后再:为主器件时,若总线空闲,则发送起始条件。否则在收到停止条件后再发送起始条件。发送起始条件。 如如STASTA被置被置1 1,而此时已经发送或接收了一个或多个字节并,而此时已经发送或接收了一个或多个字节并且没有收到停止条件,则发送

158、重复起始条件。为保证操作正确,应在且没有收到停止条件,则发送重复起始条件。为保证操作正确,应在对对STASTA置置1 1之前,将之前,将STOSTO清清0 0。1601 1、控制寄存器、控制寄存器SMB0CNSMB0CNv位位4 4(STOSTO):):SMBus0SMBus0停止标志位停止标志位0 0:不发送停止条件。:不发送停止条件。1 1:发发送送一一个个停停止止条条件件。当当收收到到停停止止条条件件时时,硬硬件件将将STOSTO清清0 0。如如果果STASTA和和STOSTO都都被被置置1 1,则则发发送送一一个个停停止止条条件件后后再再发发送送一一个个起起始始条条件件。在在从从方方式

159、式,置置位位STOSTO将将导导致致SMBusSMBus的的行行为为象象收收到到了了停停止条件一样。止条件一样。v位位3 3(SISI):):SMBus0SMBus0串行中断标志位串行中断标志位进进入入2727种种状状态态之之一一(除除0xF80xF8,见见表表4-104-10)时时由由硬硬件件置置位位。 当当允允许许中中断断时时,该该位位置置1 1将将使使CPUCPU转转向向SMBus0SMBus0中中断断服服务务程程序序。不能由硬件自动清不能由硬件自动清0 0,必须用软件清除。,必须用软件清除。1611 1、控制寄存器、控制寄存器SMB0CNSMB0CNv位位4 4(STOSTO):):S

160、MBus0SMBus0停止标志位停止标志位0 0:不发送停止条件。:不发送停止条件。1 1:发发送送一一个个停停止止条条件件。当当收收到到停停止止条条件件时时,硬硬件件将将STOSTO清清0 0。如如果果STASTA和和STOSTO都都被被置置1 1,则则发发送送一一个个停停止止条条件件后后再再发发送送一一个个起起始始条条件件。在在从从方方式式,置置位位STOSTO将将导导致致SMBusSMBus的的行行为为象象收收到到了了停停止条件一样。止条件一样。v位位3 3(SISI):):SMBus0SMBus0串行中断标志位串行中断标志位进进入入2727种种状状态态之之一一(除除0xF80xF8,见

161、见表表4-104-10)时时由由硬硬件件置置位位。 当当允允许许中中断断时时,该该位位置置1 1将将使使CPUCPU转转向向SMBus0SMBus0中中断断服服务务程程序序。不能由硬件自动清不能由硬件自动清0 0,必须用软件清除。,必须用软件清除。1621 1、控制寄存器、控制寄存器SMB0CNSMB0CNv位位4 4(STOSTO):):SMBus0SMBus0停止标志位停止标志位0 0:不发送停止条件。:不发送停止条件。1 1:发发送送一一个个停停止止条条件件。当当收收到到停停止止条条件件时时,硬硬件件将将STOSTO清清0 0。如如果果STASTA和和STOSTO都都被被置置1 1,则则

162、发发送送一一个个停停止止条条件件后后再再发发送送一一个个起起始始条条件件。在在从从方方式式,置置位位STOSTO将将导导致致SMBusSMBus的的行行为为象象收收到到了了停停止条件一样。止条件一样。v位位3 3(SISI):):SMBus0SMBus0串行中断标志位串行中断标志位进进入入2727种种状状态态之之一一(除除0xF80xF8,见见表表4-104-10)时时由由硬硬件件置置位位。 当当允允许许中中断断时时,该该位位置置1 1将将使使CPUCPU转转向向SMBus0SMBus0中中断断服服务务程程序序。不能由硬件自动清不能由硬件自动清0 0,必须用软件清除。,必须用软件清除。1631

163、 1、控制寄存器、控制寄存器SMB0CNSMB0CNv位位2 2(AAAA):):SMBus0SMBus0确认标志位确认标志位0 0:返回:返回“非确认非确认”应答应答 。1 1:返回:返回“确认确认”应答应答 v位位1 1(FTEFTE):):SMBus0SMBus0空闲定时器允许位空闲定时器允许位0 0:无:无SCLSCL高电平超时。高电平超时。1 1:当:当SCLSCL高电平超过高电平超过SMB0CRSMB0CR规定的极限时发生超时。规定的极限时发生超时。v位位0 0(TOETOE):):SMBus0SMBus0超时允许位超时允许位0 0:无:无SCLSCL低电平超时。低电平超时。1 1

164、:当当SCLSCL处处于于低低电电平平的的时时间间超超过过由由定定时时器器3 3 ( (如如果果被被允允许许) ) 定定义的极限值时发生超时。义的极限值时发生超时。1642 2时钟速率寄存器时钟速率寄存器SMB0CRSMB0CRv用于控制主方式用于控制主方式下下SCL的频率的频率。SMB0CR寄存器中的寄存器中的8位字预装在一个专用的位字预装在一个专用的8位定时器中。该定时器向上计位定时器中。该定时器向上计数,当计满回到数,当计满回到0x00时时SCL改变逻辑状态改变逻辑状态。SMB0CR的的值应根据下面的方程设置,其中值应根据下面的方程设置,其中SMB0CR 是是SMB0CR寄存器中的寄存器

165、中的8位无符号数值位无符号数值。SYSCLK是系统时钟频率,是系统时钟频率,单位单位为为Hz。 1652 2时钟速率寄存器时钟速率寄存器vSCL SCL 信号的高电平和低电平时间由下式给出:信号的高电平和低电平时间由下式给出:v使用相同使用相同的的SMB0CRSMB0CR值,总线空闲超时周期由下式给出:值,总线空闲超时周期由下式给出: 1663 3数据寄存器数据寄存器SMB0DATSMB0DATv保保存存要要发发送送或或刚刚接接收收的的数数据据。在在SISI为为1 1时时软软件件可可以以读读或或写写该该寄寄存存器器;当当SMBus0SMBus0被被允允许许并并且且SISI标标志志被被清清0 0

166、时时软软件件不不应应访访问问该该寄寄存存器,因为硬件可能正对该寄存器中的数据进行移入或移出操作。器,因为硬件可能正对该寄存器中的数据进行移入或移出操作。v总总是是移移出出MSBMSB( (Most Most Significant Significant BitBit,最最高高有有效效位位) )。在在每每收收到到一一个个字字节节后后,接接收收数数据据的的第第一一位位位位于于SMB0DATSMB0DAT的的MSBMSB。在在数数据据被被移移出出的的同同时时,总总线线上上的的数数据据被被移移入入。所所以以SMB0DATSMB0DAT中中总总是是保保存存最最后后出出现现在在总总线线上上的的数数据据字

167、字节节。因因此此在在竞竞争争失失败败后后,从从主主发发送送器器转转为从接收器时为从接收器时SMB0DATSMB0DAT中的数据保持正确。中的数据保持正确。1674 4地址寄存器地址寄存器SMB0ADRSMB0ADRv位位7-17-1:SLV6-SLV0SLV6-SLV0:7 7位位SMBus0SMBus0从地址从地址7 7位从地址,当工作在从方式时位从地址,当工作在从方式时,SMBus0SMBus0将应答该地址。将应答该地址。v位位0 0:GCGC:全局呼叫地址允许位全局呼叫地址允许位0 0:忽略全局呼叫地址。:忽略全局呼叫地址。1 1:识别全局呼叫地址。:识别全局呼叫地址。 GC GC SL

168、V0 SLV0 SLV1 SLV1 SLV2 SLV2 SLV3SLV3 SLV4 SLV4 SLV5SLV5 SLV6 SLV6 字节字节地址地址0xC30xC3 D7 D6 D5 D4 D3 D2 D1 D01685. 5. 状态寄存器状态寄存器SMB0STASMB0STAv保保存存8 8位位状状态态码码。共共有有2828个个可可能能的的状状态态。状状态态码码的的高高5 5位位是是可可变变的的,低低3 3位位固固定定为为0 0 ( (当当SI=1SI=1时时) ),因因此此所所有有有有效效状状态态码码都都是是8 8的的整整数数倍倍。这这样样就就可可以以很很容容易易地地在在软软件件中中用用状

169、状态态码码作作索索引引查查询询转转移移到到的的正正确确中中断断服服务务程程序序 ( (允允许许8 8字字节节的的代代码码对对状状态态提提供供中中断断服服务务或或转转到到更更长长的的中中断断服务程序中服务程序中) )。v对对于于用用户户软软件件而而言言,SMB0STASMB0STA的的内内容容只只在在SISI标标志志为为1 1时时才才有有定定义义。软软件件不不应应对对SMB0STASMB0STA寄寄存存器器进进行行写写操操作作,否否则会产生不确定的结果。则会产生不确定的结果。1695. 5. 状态寄存器状态寄存器v位位7-3(STA7-STA3):):5位位SMBus0状态代码状态代码保保存存S

170、MBus0状状态态码码。共共有有28个个可可能能的的状状态态码码,每每个个状状态态码码对对 应应 一一 个个 SMBus状状 态态 。 在在 SI标标 志志 (SMB0CN.3) 为为 1时时 ,SMB0STA中中的的状状态态码码有有效效,当当SI标标志志为为0时时,SMB0STA中中的的内内容容无无定定义义。任任何何时时候候对对SMB0STA寄寄存存器器执执行行写写操操作作将将导导致致不确定的结果。不确定的结果。v位位2-0(STA2-STA0):当当SI标标志志位位为为1时时,这这三三个个SMB0STA最低位的读出值总是为逻辑最低位的读出值总是为逻辑0。STA0 STA0 STA1 STA

171、1 STA2 STA2 STA3 STA3 STA4 STA4 STA5 STA5 STA6 STA6 STA7 STA7 字节字节地址地址C3HC3H D7 D6 D5 D4 D3 D2 D1 D0170SMBus应用举例应用举例v参见参见8.1、8.2应用举例应用举例1714.5 SPI4.5 SPI总线总线vSPISPI(Serial Peripheral Interface Serial Peripheral Interface 串行外设接口)总线系串行外设接口)总线系统是统是MotorolaMotorola公司提出的一种同步串行外设接口,允许公司提出的一种同步串行外设接口,允许MCU

172、MCU与各与各种外围设备以同步串行方式进行通信。种外围设备以同步串行方式进行通信。vSPISPI总线可直接与各厂家生产的多种标准外围器件直接接口,总线可直接与各厂家生产的多种标准外围器件直接接口,该接口一般使用该接口一般使用4 4根线:根线:串行串行时钟时钟线线SCKSCK、主入主入/ /从出从出数据线数据线MISOMISO、主出主出/ /从入从入数据线数据线MOSIMOSI低电平有效的从机低电平有效的从机选择线选择线SSSS。vC8051F020的的串行外设接口串行外设接口 (SPI0) 提供访问一个提供访问一个4线、全双工线、全双工串行总线的能力,原理图如串行总线的能力,原理图如图图4-3

173、9所示。所示。172SPI原理图原理图3个个SFR系统时钟分频系统时钟分频后给控制器后给控制器帧帧长度和发送计数长度和发送计数中断中断请求请求173SPI原理图原理图4根引脚线根引脚线数据寄存器数据寄存器1744.5.1 4.5.1 信号说明信号说明v主出从入数据线主出从入数据线MOSI主主器器件件的的输输出出和和从从器器件件的的输输入入数数据据线线,用用于于从从主主器器件件到到从从器器件件的的串串行行数数据据传传输输。作作为为主主器器件件时时,该该信信号号是是输输出出;作作为为从从器件时,该信号是输入。数据传输时器件时,该信号是输入。数据传输时最高位在先最高位在先。v主入从出数据线主入从出数

174、据线MISO从从器器件件的的输输出出和和主主器器件件的的输输入入数数据据线线,用用于于从从从从器器件件到到主主器器件件的的串串行行数数据据传传输输。作作为为主主器器件件时时,该该信信号号是是输输入入;作作为为从从器器件件时时,该该信信号号是是输输出出。数数据据传传输输时时最最高高位位在在先先。当当SPI从从器器件未被选中时,件未被选中时,它将它将MISO引脚置于高阻状态。引脚置于高阻状态。175v串行时钟线串行时钟线SCK主主器器件件的的输输出出和和从从器器件件的的输输入入时时钟钟信信号号线线,用用于于同同步步主主器器件件和和从从器器件件之之间间在在MOSI和和MISO线线上上的的串串行行数数

175、据据传传输输。当当SPI0作为主器件时产生该信号。作为主器件时产生该信号。v从器件选择从器件选择线线NSS从从器器件件的的输输入入信信号号线线,主主器器件件用用它它来来选选择择处处于于从从方方式式的的SPI0器器件件,在在器器件件为为主主方方式式时时用用于于禁禁止止SPI0。注注意意:NSS信信号号总总是是作作为为SPI0从从器器件件的的输输入入,SPI0工工作作在在主主方方式式时时,从从选选择择信信号号必须必须用通用用通用端口端口I/O引脚进行输出引脚进行输出。176典型典型SPI配置配置1794.5.2 SPI04.5.2 SPI0操作操作每次数据传输后每次数据传输后NSS变为高电平,变为

176、高电平,接收数据送缓冲器并禁止移出接收数据送缓冲器并禁止移出只有主器件才能启动传输只有主器件才能启动传输1834.5.3 4.5.3 串行时钟时序串行时钟时序 v使用使用SPI0CFGSPI0CFG中的时钟控制可以选择时钟中的时钟控制可以选择时钟相位相位( (锁存数据的边沿锁存数据的边沿) )和和极性极性。CKPHACKPHA位位 (SPI0CFG .7) (SPI0CFG .7) 选择两种时钟相位选择两种时钟相位 中的一种。中的一种。CKPOLCKPOL位位 (SPI0CFG .6) (SPI0CFG .6) 在高电平有效和低电平有效的时钟之间在高电平有效和低电平有效的时钟之间选择。主器件和

177、从器件必须被配置为使用相同的时钟相位和极性。选择。主器件和从器件必须被配置为使用相同的时钟相位和极性。1844.5.4 SPI4.5.4 SPI特殊功能寄存器特殊功能寄存器 v1时钟速率寄存器时钟速率寄存器SPI0CKR 当当SPI0工作在主方式时,工作在主方式时,SPI0CKR寄存器的值决定寄存器的值决定SCK输出输出的频率。的频率。SCK时钟频率是从系统时钟分频得到的,由下面的方程时钟频率是从系统时钟分频得到的,由下面的方程给出:给出: 其中:其中:SYSCLK是系统时钟频率,是系统时钟频率,SPI0CKR是是SPI0CKR寄存器寄存器中的中的8位值。位值。例如:如果例如:如果SYSCLK

178、=2MHz,SPI0CKR=0x04,则则1853 3配置寄存器配置寄存器SPI0CFGSPI0CFGv位位7:CKPHA:SPI0时钟相位控制位,用于选择时钟相位控制位,用于选择SPI0时钟的相位。时钟的相位。0:在:在SCK周期的第一个边沿采样数据。周期的第一个边沿采样数据。1:在在SCK周期的第二个边沿采样数据。周期的第二个边沿采样数据。v位位6:CKPOL:SPI0时钟极性控制位,用于选择时钟极性控制位,用于选择SPI0时钟的极性。时钟的极性。0:SCK在空闲状态时处于低电平。在空闲状态时处于低电平。1:SCK在空闲状态时处于高电平。在空闲状态时处于高电平。v位位5-3:BC2-BC0

179、:SPI0发发送送计计数数位位,用用于于指指示示发发送送到到了了SPI字字的的哪哪一一位位,000到到111分别对应位分别对应位0到位到位7。v位位2-0:SPIFRS2-SPIFRS0:SPI0帧帧长长度度控控制制位位,在在主主方方式式时时用用于于控控制制数数据据传输的位数,传输的位数, 000到到111分别对应分别对应1位到位到8位位 。 SPIFRS0 SPIFRS0 SPIFRS1 SPIFRS1 SPIFRS2 SPIFRS2 BC0 BC0 BC1 BC1 BC2 BC2 CKPOL CKPOL CKPHA 7 CKPHA 7 字节字节地址地址9AH9AH D7 D6 D5 D4

180、D3 D2 D1 D01864 4控制寄存器控制寄存器SPI0CNSPI0CN v位位7 7:SPIFSPIF:SPI0SPI0中断标志位中断标志位该该位位在在数数据据传传输输结结束束后后由由硬硬件件置置1 1。如如果果允允许许中中断断,置置1 1该该位位会会使使CPUCPU转转到到SPI0SPI0中断服务程序。该位不能由硬件自动清中断服务程序。该位不能由硬件自动清0 0,必须用软件清,必须用软件清0 0。v位位6 6:WCOLWCOL:写冲突标志位写冲突标志位如如果果在在数数据据传传送送期期间间对对SPI0SPI0数数据据寄寄存存器器进进行行了了写写操操作作,该该位位由由硬硬件件置置1 1。

181、置置1 1该该位位会会使使CPUCPU转转到到SPI0SPI0中中断断服服务务程程序序。该该位位不不能能由由硬硬件件自自动动清清0 0,必必须须用软件清用软件清0 0。v位位5 5:MODFMODF:方式错误标志位方式错误标志位当当检检测测到到主主方方式式冲冲突突 (NSS(NSS为为低低电电平平且且NSTEN=1) NSTEN=1) 时时,该该位位由由硬硬件件置置1 1。置置1 1该该位位会会使使CPUCPU转转到到SPI0SPI0中中断断服服务务程程序序。该该位位不不能能由由硬硬件件自自动动清清0 0,必必须须用用软件清软件清0 0。SPIEN SPIEN MSTEN MSTEN SLVS

182、EL SLVSEL TXBSY TXBSY RXOVRN RXOVRN MODFMODFWCOL WCOL SPIF SPIF 字节字节地址地址F8HF8H D7 D6 D5 D4 D3 D2 D1 D01874 4控制寄存器控制寄存器SPI0CNSPI0CNv位位4 4:RX0VRNRX0VRN:接收溢出标志位接收溢出标志位当当前前传传输输的的最最后后一一位位已已经经移移入入SPI0SPI0移移位位寄寄存存器器,而而接接收收缓缓冲冲器器中中仍仍保保存存着着前前一一次次传传输输未未被被读读取取的的数数据据时时该该位位由由硬硬件件置置1 1。置置1 1该该位位会会使使CPUCPU转转到到SPI0

183、SPI0中断服务程序。该位不能由硬件自动清中断服务程序。该位不能由硬件自动清0 0,必须用软件清,必须用软件清0 0。v位位3 3:TXBSYTXBSY:发送忙标志位发送忙标志位当一个主方式传输正在进行时,该位由硬件置当一个主方式传输正在进行时,该位由硬件置1 1,传输结束后由硬件清,传输结束后由硬件清0 0。v位位2 2:SLVSELSLVSEL:从选择标志位从选择标志位该该位位在在NSSNSS引引脚脚为为低低电电平平时时置置1 1,允允许许为为从从方方式式。在在NSSNSS变变为为高高电电平平时时清清0 0 ,禁止为从方式。,禁止为从方式。v位位1 1:NSTENNSTEN:主方式允许位主方式允许位0 0:禁止主方式,以从方式操作。:禁止主方式,以从方式操作。 1 1:允许主方式,以主方式操作。:允许主方式,以主方式操作。v位位0 0:SPIENSPIEN:SPI0SPI0允许位允许位0 0:禁止:禁止SPI0 1SPI0 1:允许允许SPI0SPI01884.5.5 SPI4.5.5 SPI应用举例应用举例+5VP0.2P0.1P0.0P0.3P0.2P0.1P0.0P0.32.5k认真阅读认真阅读P196-P198程序程序

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 商业/管理/HR > 营销创新

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号