《第4章SOC单片机的片内功能部件资料》由会员分享,可在线阅读,更多相关《第4章SOC单片机的片内功能部件资料(171页珍藏版)》请在金锄头文库上搜索。
1、1第第4 4章章 SOC SOC单片机的片内功能部件单片机的片内功能部件 4.1 4.1 定时器定时器/ /计数器计数器 4.3 4.3 UARTUART通信接口通信接口 4.2 4.2 可编程计数器阵列可编程计数器阵列 4.4 4.4 系统管理总线系统管理总线SMBusSMBus 4.5 4.5 串行外设接口总线串行外设接口总线SPISPI 重点重点了解了解24.1 4.1 定时器定时器/ /计数器计数器 v定时和计数是定时和计数是测控系统测控系统中常用的功能,都是中常用的功能,都是通过计数实现通过计数实现的,的,可以由一个部件(可编程定时可以由一个部件(可编程定时/ /计数器)完成计数器)
2、完成若计数的事件源是若计数的事件源是周期固定周期固定的脉冲,则可以实现的脉冲,则可以实现定时功能定时功能若计数的事件源若计数的事件源周期不一定固定周期不一定固定,则只能实现,则只能实现计数功能计数功能v实现定时和计数的一般方法实现定时和计数的一般方法软件法软件法:只能定时,且占用:只能定时,且占用CPUCPU时间,降低了时间,降低了CPUCPU的使用效率的使用效率 P88P88专用硬件电路法专用硬件电路法:可以实现精确的定时和计数,但是参数调节不便:可以实现精确的定时和计数,但是参数调节不便可编程定时器计数器法可编程定时器计数器法:不占用:不占用CPUCPU时间,能与时间,能与CPUCPU并行
3、工作,实现精并行工作,实现精确的定时和计数,又可以通过编程设置其工作方式和其它参数,使用方便确的定时和计数,又可以通过编程设置其工作方式和其它参数,使用方便 34.1 4.1 定时器定时器/ /计数器计数器vC8051F020C8051F020内部有内部有T T0 0T T4 4共共5 5个个1616位的可编程定时位的可编程定时/ /计数器计数器T T0 0T T2 2与与MCS-51MCS-51中的定时中的定时/ /计数器兼容计数器兼容T T3 3 和和T T4 4 为两个自动重装初值的定时为两个自动重装初值的定时/ /计数器,既可以作为通用计数器,既可以作为通用定定时时/计数器计数器用,也
4、可以用于用,也可以用于ADCADC和和SMBusSMBus中中作定时器用时,对作定时器用时,对SYSCLKSYSCLK或其或其1212分频分频进行计数(取决于进行计数(取决于CKCONCKCON),),作计数器用时,对外部输入的事件源计数(需配置交叉开关)作计数器用时,对外部输入的事件源计数(需配置交叉开关)有有多种工作方式多种工作方式,采用,采用加加1 1方式计数方式计数(有的器件是减(有的器件是减1 1计数的)计数的) 4表表4-1 C8051F0204-1 C8051F020定时器定时器/ /计数器的工作方式计数器的工作方式 定时器定时器工作方式工作方式定时器定时器0和定和定时器时器1定
5、时器定时器2定时器定时器3定时器定时器4方式方式013位定时器位定时器/计数器计数器 自动重装载自动重装载的的16位定时位定时器器/计数器计数器自动重装载自动重装载的的16位计数位计数器器/定时器定时器自动重装载自动重装载的的16位定时位定时器器/计数器计数器方式方式116位定时器位定时器/计数器计数器带捕捉的带捕捉的16位定时器位定时器/计计数器数器带捕捉的带捕捉的16位定时器位定时器/计计数器数器方式方式28位自动重装位自动重装载的定时器载的定时器/计数器计数器UART0的波的波特率发生器特率发生器UART1的波的波特率发生器特率发生器方式方式3两个两个8位定时位定时器器/计数器计数器(只
6、限于定时只限于定时器器0)54.1.1 4.1.1 定时器的一般结构和工作原理定时器的一般结构和工作原理 模式选择模式选择计数器计数器定时器定时器启启/ /停控制停控制执行机构执行机构减减1 1计数:如计数:如Intel 8253Intel 8253加加1 1计数:如计数:如T0T0T4T4溢出标志溢出标志查询查询中断中断6最大定时时间最大定时时间vT TMAXMAX=2=2n nTT计数计数 式式中中n n由由工工作作方方式式决决定定,T T计计数数为为定定时时器器/ /计计数数器器的的计计数数脉脉冲冲周周期期时时间间,由由C8051FC8051F的的主主脉脉冲冲或或主主脉脉冲冲经经1212
7、分分频频提提供供,是是否否需需要要1212分分频频取取决决于于对对时时钟钟控控制制寄寄存存器器CKCONCKCON的的设设定定(提提供供1212分分频频选选项项是是为了与标准为了与标准80518051兼容)。兼容)。 7时钟控制寄存器时钟控制寄存器CKCONCKCONv位位7 7:未用。读:未用。读=0b=0b,写,写= =忽略。忽略。v位位6-36-3:T4M-T0MT4M-T0M:T4T4到到T0T0的时钟选择(不包含的时钟选择(不包含T3T3,T3T3的时钟选的时钟选择由择由T3T3控制寄存器控制寄存器TMR3CNTMR3CN的第的第0 0位位T3XCLKT3XCLK决定)。决定)。 0
8、 0:定时器按系统时钟的:定时器按系统时钟的1212分频计数分频计数 1 1:定时器按系统时钟频率计数:定时器按系统时钟频率计数v位位2-02-0:保留。读:保留。读=000b=000b,写入值必须是,写入值必须是000b000b。 8定时、计数方式定时、计数方式 v定定时时方方式式:每每一一个个计计数数周周期期(T(T计计数数) )计计数数器器加加1 1,直直至至计计满满溢溢出出( (全全1 1加加1 1到到全全0)0)产产生生中中断断请请求求。对对于于N N位位的的加加1 1计计数数器器,若若T T计计数数是是已知的,则从初值已知的,则从初值a a开始至溢出所用的时间为:开始至溢出所用的时
9、间为: 当当N=8N=8、a=0a=0时,时,最大定时时间最大定时时间为:为:T=256TT=256T计数计数v计数方式:计数方式:外部输入信号的外部输入信号的下降沿触发计数下降沿触发计数,计数器在每个时,计数器在每个时钟周期钟周期采样采样外部输入信号,若前一个周期的采样值为外部输入信号,若前一个周期的采样值为1 1,下一个,下一个周期的采样值为周期的采样值为0 0,则计数器加,则计数器加1 1,故识别一个从,故识别一个从1 1到到0 0的跳变需的跳变需2 2个周期,所以,对外部输入信号最高的计数速率是时钟频率的个周期,所以,对外部输入信号最高的计数速率是时钟频率的1 12 2。 TC=2TC
10、=2N N-C-C94.1.2 4.1.2 定时器定时器/ /计数器计数器T0T0和和T1T1 v对定时器对定时器/ /计数器计数器T0T0和和T1T1的访问和控制是通过操作的访问和控制是通过操作SFRSFR实现的。实现的。vT0T0和和T1T1都是都是1616位的加位的加1 1计数器计数器,访问时以两个字节的,访问时以两个字节的形式出现:形式出现:TL0+TH0TL0+TH0、TL1+TH1TL1+TH1。vTCONTCON用于允许用于允许/ /禁止禁止T0T0和和T1T1并指示它们的工作状态。并指示它们的工作状态。vT0T0和和T1T1都可以通过都可以通过TMODTMOD中的方式选择位中的
11、方式选择位M1M1、M0M0设置为设置为四种工作方式四种工作方式(方式(方式0 0 方式方式3 3)之一,)之一, T1 T1设置为方式设置为方式3 3将停止计数。将停止计数。101 1、方式寄存器、方式寄存器TMODTMOD T0M0T0M1C/T0GATE0T1M0T1M1C/ T1GATE1TMOD字节字节地址地址89H D7 D6 D5 D4 D3 D2 D1 D0控制控制T0T0控制控制T1T1方式选择方式选择0000:方式:方式0 00101:方式:方式1 11010:方式:方式2 21111:方式:方式3 3定时定时/ /计数选择计数选择0 0:定时器:定时器1 1:计数器:计数
12、器门控位门控位112 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:不溢出不溢出P41123 3T0T0和和T1T1的交叉开关配置的交叉开关配置134 4T0T0和和T1T1的工作方式和计数器结构的工作方式和计数器结构 表表4-3 4-3 定时器定时器T0T0、T1T1的工作方式的工作方式TnM1TnM0
13、工作方式工作方式功功 能能 说说 明明00013位定时器计数器位定时器计数器01116位定时器计数器位定时器计数器102自动重装初值的自动重装初值的8位定时器计数位定时器计数器器113仅适用于仅适用于T0,分为两个独立的,分为两个独立的8位位计数器,计数器,T1停止计数停止计数14(1 1)工作方式)工作方式0 0 13位计位计数器数器启启/停控制停控制TR0=1TR0=1启动计数启动计数GATE0=0GATE0=0时:时:GATE0=1GATE0=1时:时: TR0=1TR0=1且且INT0=1INT0=1启动计数启动计数时基选择时基选择定时定时/计数模式选择计数模式选择15(1 1)方式)
14、方式0 0v若若T0T0工作于方式工作于方式0 0的定时器模式,计数初值为的定时器模式,计数初值为a a,则,则T0T0从初值从初值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。16(2 2)方式)方式1 1v与与方方式式0 0的的差差别别仅仅仅仅在在于于计计
15、数数器器的的位位数数不不同同,方方式式1 1为为1616位位的定时器计数器。的定时器计数器。vT0T0工工作作于于方方式式1 1时时,由由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。17(3 3)方式)方式2 2
16、8位自动重装初值位自动重装初值18(3 3)方式)方式2 2v适用于需要适用于需要重复定时或计数的场合重复定时或计数的场合。v定时精度比较高,但定时时间较短。定时精度比较高,但定时时间较短。v定时时间可用下式计算:定时时间可用下式计算: 19(4 4)方式)方式3 3v只适用于只适用于T0T0,若,若T1T1设置为方式设置为方式3 3,则停止计数。,则停止计数。 两个独立两个独立8位计数器位计数器借用借用T1的资源的资源TH0只只作定时作定时器用器用TL0可定可定时时/计数计数205 5、T0T0和和T1T1的初始化的初始化 v初始化步骤初始化步骤 初始化初始化TMOD根据需要初始化根据需要初
17、始化CKCON装入初值装入初值中断设置(中断设置(IE、IP)启动定时启动定时/计数器(计数器(TCON)v计数器方式初值的计算计数器方式初值的计算 TC=2TC=2N NC C N N为计数器的位数,与工作方式有关为计数器的位数,与工作方式有关 ,C为需要的计数次数为需要的计数次数v定时器方式初值的计算定时器方式初值的计算T=(T=(2 2N NTC)TTC)T计数计数 TC=TC=2 2N NT/TT/T计数计数 步骤随意步骤随意215 5T0T0和和T1T1的初始化的初始化v最大定时时间(最大定时时间(f fOSCOSC12MHz12MHz、T0M=0T0M=0 ):):方式方式0 0:
18、T TMAX MAX = 2= 2131311s s = 8.192ms= 8.192ms方式方式1 1:T TMAXMAX = 2 = 2161611s s = 65.536ms= 65.536ms方式方式2 2、3 3: T TMAXMAX = 2 = 28 811s s = 0.256ms= 0.256ms226 6T0T0和和T1T1的应用举例的应用举例 v例例4.14.1 若若f fOSCOSC=12MHz=12MHz,用系统时钟的十二分频作为计数源,请,用系统时钟的十二分频作为计数源,请计算定时计算定时2ms2ms所需的初值,并给出初始化程序。所需的初值,并给出初始化程序。v解解(
19、1 1)T0M=0T0M=0时,时, f fOSCOSC= 12MHz= 12MHz,用系统时钟的十二分频作为,用系统时钟的十二分频作为计数源时,方式计数源时,方式2 2、3 3的最大定时时间只有的最大定时时间只有0.256ms0.256ms,因此要想获得,因此要想获得2ms2ms的定时时间,的定时时间,必须用方式必须用方式0 0或方式或方式1 1。v方式方式0 0TC=2TC=213132ms/1us=6192=1830H 2ms/1us=6192=1830H 即:即:TH0=0C1HTH0=0C1H;TL0=10HTL0=10H(高三位为(高三位为0 0) v方式方式1 1TC=2TC=2
20、16162ms/1us=63536=2ms/1us=63536=F830HF830H 即:即:TH0=0F8HTH0=0F8H;TL0=30HTL0=30H(2) T0M=1时,只能使用方式时,只能使用方式1TC=216212103=41536=A240H?23v初始化程序初始化程序 void T0_mode1_2ms_init()void T0_mode1_2ms_init() CKCON CKCON &= &= 0xf7;0xf7;TMOD=0x01; TMOD=0x01; TH0=0xf8; TH0=0xf8; TL0=0x30; TL0=0x30; TCON TCON |= |= 0x
21、10; 0x10; 6 6T0T0和和T1T1的应用举例的应用举例 时基与工时基与工作方式设作方式设定定装入初装入初始值始值启动启动T0,可用可用TR0=1代替代替?246 6T0T0和和T1T1的应用举例的应用举例v给定时器赋初值的语句给定时器赋初值的语句也可以采用如下方法也可以采用如下方法: 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;由编
22、译器完由编译器完成数据的计成数据的计算算?26上次课内容回顾上次课内容回顾v定时定时/计数器原理计数器原理框图结构,框图结构,4部分组成部分组成v定时定时/计数器计数器T0、T1TMOD、TCON的作用、格式的作用、格式工作方式工作方式方式方式0、方式、方式1、方式、方式2、方式、方式3初始化工作初始化工作TMOD、TCON、CKCON、IE、IP、初始值、初始值初值计算初值计算TC=M-CTC=M-T/T计数计数276 6T0T0和和T1T1的应用举例的应用举例v例例4.24.2 若若f fOSCOSC=12MHz=12MHz,T1T1工作于方式工作于方式1 1,产生,产生50ms50ms的
23、定时中断,的定时中断,TF1TF1为高级中断源。试编写主程序和中断服务程序,使为高级中断源。试编写主程序和中断服务程序,使P1.0P1.0产生产生周期为周期为1s1s的方波的方波。 v解:解:让让P1.0P1.0每每500ms500ms取反一次取反一次即可实现。定时器的单次定时时即可实现。定时器的单次定时时间不可能达到间不可能达到500ms500ms,但可通过,但可通过多次定时产生多次定时产生500ms500ms的定时时间,的定时时间,如让如让T1T1工作在方式工作在方式1 1,单次定时时间为,单次定时时间为50ms50ms,那么,那么T1T1中断中断1010次就次就是是500ms500ms的
24、时间。的时间。 v(1 1)确定定时常数)确定定时常数假假设设使使用用f fOSCOSC的的1212分分频频作作为为计计数数源源,则则T T计计数数12/f12/fOSCOSC 12/12/(121012106 6)1s1s由公式由公式TC=MTC=MT/TT/T计数计数,可知,可知TC=2TC=21616-5010-50103 315536=3CB0H15536=3CB0HTH1=0x3cTH1=0x3c,TL0=0xb0TL0=0xb0。 285 5T0T0和和T1T1的应用举例的应用举例v(2 2)初始化程序)初始化程序 包包括括T1T1初初始始化化和和中中断断系系统统初初始始化化,主主
25、要要是是对对IPIP、IEIE、CKCONCKCON、TCONTCON、TMODTMOD的的相相应应位位进进行行正正确确的的设设置置,并并将将时时间间常常数数送送入入T1T1。本本例例中中将将初初始始化化操操作作放放在在主主程程序序中中完完成成,当当程程序序规规模模较较大大时时,应编写单独的初始化程序,以利于程序的模块化设计。应编写单独的初始化程序,以利于程序的模块化设计。v(3 3)中断服务程序)中断服务程序 中中断断服服务务程程序序除除了了完完成成要要求求的的方方波波产产生生这这一一工工作作之之外外,还还要注意将时间常数重新送入要注意将时间常数重新送入T1T1中,为下一次产生中断作准备。中
26、,为下一次产生中断作准备。29程序清单如下(主程序):程序清单如下(主程序): #include #include sbit P1_0 = P10;sbit P1_0 = P10;int count=10;int count=10;/全局变量全局变量void main( void )void main( void ) WDTCN=0xDE; WDTCN=0xDE; WDTCN=0xAD; WDTCN=0xAD; CKCON&=0xef; CKCON&=0xef; TMOD=0x10; TMOD=0x10; XBR2=0x40; XBR2=0x40; P1_0=0;P1_0=0; TH1=0x3
27、c; TL1=0xb0; TH1=0x3c; TL1=0xb0; IE|=0x88; IE|=0x88; IP|=0x08; IP|=0x08; TCON|=0x40; TCON|=0x40; while(1); while(1); 关看门狗时关看门狗时基和方式设基和方式设定,使能交定,使能交叉开关叉开关初值与中断初值与中断设定,启动设定,启动计数计数无限循环,无限循环,等待计时中等待计时中断断30程序清单如下(中断服务程序):程序清单如下(中断服务程序):程序清单如下(中断服务程序):程序清单如下(中断服务程序):void Timer1_ISR (void) void Timer1_ISR
28、(void) interrupt 3interrupt 3 TH1=0x3c; TH1=0x3c; TL1|=0xb0;TL1|=0xb0; count count-; ; if (count if (count=0) 0) count=10; P1_0=!P1_0; count=10; P1_0=!P1_0; 重装初值重装初值中断中断10次次产生一次产生一次方波方波问题:问题:为什么用为什么用TL1|=0xb0;TL1|=0xb0;而非而非TL1=0xb0TL1=0xb0?31程序清单如下(查询式程序):程序清单如下(查询式程序):v#include #include sbit P1_0=
29、P10;sbit P1_0= P10;void main( )void main( ) int count=10;int count=10;局部局部变变量量 WDTCN=0xDE; WDTCN=0xDE; WDTCN=0xAD; WDTCN=0xAD; CKCON&=0xef; CKCON&=0xef; XBR2=0x40;XBR2=0x40; TMOD=0x10; TMOD=0x10; P1_0=0; P1_0=0; TR1=1; TR1=1;时基和方式时基和方式设定,使能设定,使能交叉开关交叉开关启动计启动计数数32程序清单如下(查询式程序):程序清单如下(查询式程序): for(; ;)
30、 for(; ;) TH1=-50000/256; TH1=-50000/256; TL1=-50000%256; TL1=-50000%256; Do while(!TF1); Do while(!TF1); TF1=0; count TF1=0; count-; ; If (count=0) If (count=0) count=10;P1_0=!P1_0; count=10;P1_0=!P1_0; 无限循环,同无限循环,同while(1)装入装入初值初值查询查询TF1产生产生波形波形334.1.3 4.1.3 定时器定时器/ /计数器计数器T2T2 和和T4T4vT2T2 和和T4T4基
31、本相同,唯一区别是基本相同,唯一区别是T2T2可作可作UART0UART0波特率发生器,而波特率发生器,而T4T4可作可作UART1UART1波特率发生器波特率发生器vT2T2为为1616位位定时定时/ /计数器,由计数器,由TL2TL2(低字节)和(低字节)和TH2TH2(高字节)组(高字节)组成。成。vC/T2C/T2(T2CON.1T2CON.1)=0(=0(定时定时) )时,系统时钟作为定时器的输入时,系统时钟作为定时器的输入(由(由CKCONCKCON的的T2MT2M位指定不分频或位指定不分频或1212分频)。分频)。C/T2 =1C/T2 =1(计数)(计数)时,时,T2T2输入引
32、脚上的负跳变使计数器加输入引脚上的负跳变使计数器加“1”“1”。vT2T2还可以用于启动还可以用于启动ADCADC数据转换和触发数据转换和触发DACDAC的输出更新。的输出更新。 v三种工作方式三种工作方式(由(由T2CONT2CON中的配置位选择):自动重装初值的中的配置位选择):自动重装初值的1616位定时器位定时器/ /计数器方式、带捕捉的计数器方式、带捕捉的1616位定时器位定时器/ /计数器方式和波计数器方式和波特率发生器方式。特率发生器方式。341 1T2T2控制寄存器控制寄存器T2CONT2CON v位位7 7(TF2TF2):):T2T2溢出标志位溢出标志位T2T2溢出时由硬件
33、置位。允许溢出时由硬件置位。允许T2T2中断时,使中断时,使CPUCPU转向转向T2T2的中断服的中断服务程序。不能由硬件自动清务程序。不能由硬件自动清0 0,必须用软件清,必须用软件清0 0。RCLK0RCLK0或或TCLK0TCLK0为为1 1时(波特率发生器方式),时(波特率发生器方式),TF2TF2不会被置不会被置1 1。v位位6 6(EXF2EXF2):):T2T2外部中断标志位外部中断标志位EXEN2EXEN2为为“1”“1”时,当时,当T2EXT2EX输入引脚发生输入引脚发生负跳变负跳变时,由硬件置时,由硬件置位。允许位。允许T2T2中断时,使中断时,使CPUCPU转向转向T2T
34、2的中断服务程序。不能由硬的中断服务程序。不能由硬件自动清件自动清0 0,必须用软件清,必须用软件清0 0。CP/RL2C/T2TR2EXEN2TCLK0RCLK0EXF2TF2字节字节地址地址C8HC8H D7 D6 D5 D4 D3 D2 D1 D0351 1T2T2控制寄存器控制寄存器T2CONT2CONv位位5 5(RCLK0RCLK0):UART0UART0接收时钟选择位接收时钟选择位0 0:T1T1溢出作为接收时钟。溢出作为接收时钟。1 1:T2T2溢出作为接收时钟。溢出作为接收时钟。v位位4 4(TCLK0TCLK0):UART0UART0发送时钟选择位发送时钟选择位0 0:T1
35、T1溢出作为发送时钟。溢出作为发送时钟。1 1:T2T2溢出作为发送时钟。溢出作为发送时钟。v位位3 3(EXEN2EXEN2):T2T2外部中断允许控制位外部中断允许控制位0 0:T2EXT2EX上的负跳变被忽略。上的负跳变被忽略。1 1:T2EXT2EX上的负跳变导致一次捕捉或重载,并置位上的负跳变导致一次捕捉或重载,并置位EXF2EXF2。v位位2 2(TR2TR2):T2T2启启/ /停控制位停控制位0 0:停止。:停止。1 1:启动。:启动。361 1T2T2控制寄存器控制寄存器T2CONT2CONv位位1 1(C/T2C/T2):定时器:定时器/ /计数器功能选择位计数器功能选择位
36、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才能使才能使T2EXT2EX上的负跳变能够被识别并触发捕捉上的负跳变能够被识别并触发捕捉和重载。当和重载。当RCLK0RCLK0或或TCLK0TCLK0为为“1”“1”时,该位被忽略,时,该位被忽略,T2T2将工作将工作在自动重装载方式。在自动重装
37、载方式。0 0:T2T2溢出或溢出或T2EXT2EX上发生负跳变时将上发生负跳变时将自动重装载自动重装载1 1:T2EXT2EX发生负跳变时发生负跳变时捕捉捕捉。372. T2的交叉开关配置的交叉开关配置382 2T2T2的工作方式和计数器结构的工作方式和计数器结构 v(1 1)方式)方式0 0:自动重装初值的自动重装初值的1616位定时器位定时器/ /计数器方式计数器方式原理框图如原理框图如图图4-54-5所示。所示。表表4-3 T24-3 T2的方式选择的方式选择 RCLK0+TCLK0CP/RL2工作方式工作方式00自动重装载的自动重装载的16位定时器位定时器/计数器计数器 01带捕捉的
38、带捕捉的16位定时器位定时器/计数器计数器 1UART0波特率发生器方式波特率发生器方式39(1 1)方式)方式0 0:1616位自动重装初值方式位自动重装初值方式 自动重装初值自动重装初值两中断标志两中断标志为为0时忽略时忽略T2EX负跳变,负跳变,不产生不产生EXF2中断中断40(2 2)方式)方式1 1:1616位带捕捉方式位带捕捉方式 vRCLK0=0RCLK0=0、TCLK0=0TCLK0=0、CP/RL2=1CP/RL2=1时,时,T2T2工作在此方式工作在此方式vEXEN2=1EXEN2=1时为允许捕捉方式,时为允许捕捉方式,T2EXT2EX引脚上的引脚上的负跳变负跳变将将TH2
39、TH2、TL2TL2的当前值捕捉到的当前值捕捉到RCAP2HRCAP2H、RCAP2LRCAP2L寄存器,同时置寄存器,同时置EXF2=1EXF2=1,发,发出中断请求。出中断请求。vEXEN2=0EXEN2=0时,时,RCAP2HRCAP2H、PCAP2LPCAP2L不起作用,此时不起作用,此时T2T2与与T0T0、T1T1的的方式方式1 1完全相同。即:完全相同。即:C/T2C/T20 0时为时为1616位定时器方式,位定时器方式,C/T2C/T21 1时时为为1616位计数器方式,计数溢出时位计数器方式,计数溢出时TF2TF21 1,发送中断请求信号。,发送中断请求信号。 v原理框图如原
40、理框图如图图4-64-6所示。所示。 41(2 2)方式)方式1 1:1616位带捕捉方式位带捕捉方式是否捕捉是否捕捉捕捉并产生捕捉并产生EXF2中断中断触发捕捉触发捕捉42(3 3)方式)方式2 2:波特率发生器方式:波特率发生器方式 vRCLKRCLK或或TCLKTCLK置置1 1时,时,T2T2工作于波特率发生器方式。工作于波特率发生器方式。 v与自动重装载方式相似。但与自动重装载方式相似。但不置位不置位TF2TF2,也不产生中断。溢出,也不产生中断。溢出事件事件用作用作UART0UART0的移位时钟的移位时钟输入。输入。 vT2T2溢出可用于产生独立的发送或接收波特率溢出可用于产生独立
41、的发送或接收波特率, ,也可同时产生发也可同时产生发送和接收波特率,取决于送和接收波特率,取决于T2CONT2CON的设置。的设置。 vT2T2的计数源可以是的计数源可以是系统时钟的二分频系统时钟的二分频,也可以是,也可以是T2T2引脚上的引脚上的输入,取决于输入,取决于C/T2C/T2的设置。的设置。 v如果如果EXEN2EXEN2为为1 1,则,则T2EX T2EX 引脚上的负跳变将置位引脚上的负跳变将置位EXF2EXF2标志,并标志,并产生一个产生一个T2T2中断(如果允许)。因此,中断(如果允许)。因此,T2EX T2EX 输入可以被用作额输入可以被用作额外的外部中断源。外的外部中断源
42、。v原理框图如原理框图如图图4-74-7所示。所示。43(3 3)方式)方式2 2:波特率发生器方式:波特率发生器方式做做UART0波特率发生器波特率发生器T1作作UART0波波特率发生器特率发生器产生外部中断产生外部中断时基选择时基选择不置位不置位TF244(3 3)方式)方式2 2:波特率发生器方式:波特率发生器方式v当选择系统时钟的二分频作计数源时,当选择系统时钟的二分频作计数源时,T2T2为为UART0UART0提提供的波特率可以用如下公式计算:供的波特率可以用如下公式计算:v当选择外部引脚当选择外部引脚T2T2上的输入作为时基时,上的输入作为时基时,T2T2为为UART0UART0提
43、供的波特率可以用如下公式计算:提供的波特率可以用如下公式计算: 454.1.4 4.1.4 定时器定时器/ /计数器计数器T3T31. 1. 定时器定时器T3T3的结构的结构 v1616位定时位定时/ /计数器,由计数器,由TMR3LTMR3L(低字节)和(低字节)和TMR3HTMR3H(高字节)组(高字节)组成。成。 vT3T3的时钟输入可以通过程序选择为外部振荡器的的时钟输入可以通过程序选择为外部振荡器的8 8分频、系统分频、系统时钟或系统时钟的时钟或系统时钟的1212分频。分频。 vT3T3只有自动重装初值一种工作方式,初值保存在只有自动重装初值一种工作方式,初值保存在TMR3RLLTM
44、R3RLL(低(低字节)和字节)和TMR3RLHTMR3RLH(高字节)两个(高字节)两个SFRSFR中,中,T3T3没有计数器方式。没有计数器方式。 v除作为通用定时除作为通用定时/ /计数器使用外,计数器使用外,T3T3还可以用于启动还可以用于启动ADCADC数据转数据转换、换、SMBusSMBus定时等。定时等。 v原理框图如原理框图如图图4-8所示。所示。461. 1. 定时器定时器T3T3的结构的结构时基选择时基选择仅此一种方式仅此一种方式启动启动ADC472 2定时器定时器3 3控制寄存器控制寄存器TMR3CNTMR3CN v位位7 7(TF3TF3):):T3T3溢出标志位溢出标
45、志位溢出时置溢出时置1 1,不能由硬件自动清,不能由硬件自动清0 0,必须用软件清,必须用软件清0 0 v位位2 2(TR3TR3):):T3T3运行控制位运行控制位 0 0:停止。:停止。1 1:启动。:启动。v位位1 1(T3MT3M):):T3T3时钟选择位时钟选择位 0 0:T3T3使用系统时钟的使用系统时钟的1212分频。分频。1 1:T3T3使用系统时钟。使用系统时钟。v位位0 0(T3XCLKT3XCLK):):T3T3外部时钟选择位外部时钟选择位 0 0:由:由T3MT3M定义。定义。1 1:外部振荡器输入的:外部振荡器输入的8 8分频。分频。 T3XCLKT3MTR3-TF3
46、字节字节地址地址C8HC8H D7 D6 D5 D4 D3 D2 D1 D0483 3T3T3应用举例应用举例 v例例 4.3 4.3 假设假设C8051F020C8051F020的并行口的并行口P2P2、P3P3连接连接1616个共阳极个共阳极LEDLED指指示灯,试编写程序使示灯,试编写程序使P3P3口所接的口所接的LEDLED灯循环点亮,灯循环点亮,P2P2口所接的口所接的LEDLED灯实现走马灯效果。(灯实现走马灯效果。(实验四实验四) v解:解:要实现题目要求的效果,只需要要实现题目要求的效果,只需要定期更新定期更新P2P2、P3P3口的状态口的状态即可。这里可即可。这里可以使用以使
47、用T3T3定时器再加软件计数的方法达定时器再加软件计数的方法达到所要求的时间,假设到所要求的时间,假设T3T3定时定时0.10.1秒产生秒产生中断,则软件计数器每中断,则软件计数器每0.10.1秒加秒加1 1,让计,让计数器加到数器加到5 5时,改变时,改变P2P2、P3P3口的状态,就口的状态,就可以实现可以实现每秒每秒2 2次刷新次刷新LEDLED灯的状态。灯的状态。493 3T3T3应用举例应用举例#include sfr16 TMR3RL = 0x92; /16位位SFR sfr16 TMR3 = 0x94; #define SYSCLK 2000000 /系统时钟使用系统时钟使用2M
48、Hz/函数声明函数声明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; 503 3T3T3应用举例应用举例void main (void) WDTCN = 0xde; /禁止看门狗定时器禁止看门狗定时器 WDTCN = 0xad;PORT_Init(); /端口初始化端口初始
49、化 Timer3_Init(SYSCLK/12/10); /T3初始化,产生初始化,产生0.1秒的定时中断秒的定时中断 EA = 1; /开中断开中断 while (1) ; /循环等待循环等待T3中断,产生走马灯效果中断,产生走马灯效果 void PORT_Init (void) XBR2 = 0x40; /使能交叉开关使能交叉开关TC=-T/T计数=-0.1/12/SYSCLK=-SYSCLK/12/10513 3T3T3应用举例应用举例void Timer3_Init (int counts) TMR3CN = 0x00; TMR3RL = -counts; /T3赋初值,也可以采用赋初
50、值,也可以采用8位位SFR方式,向例方式,向例4.2那样那样 TMR3 = 0xffff; /立即重载立即重载 EIE2 |= 0x01; /开开T3中断中断 ,见见P44 EIE2格式格式 TMR3CN |= 0x04; /启动启动T3523 3T3T3应用举例应用举例void Timer3_ISR (void) interrupt 14 static int count; static int i=9,j=0; static int led=0xff; /P3口口LED灯的初始状态灯的初始状态 TMR3CN &= (0x80); /清清TF3 count+; if(count=5) /T3
51、中断中断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灯循环一个周期灯循环一个周期 为什么为什么i=9,而不是,而不是i=8?因为还有全灭状态,所因为还有全灭状态,所以共以共9个状态个状态854.3 UART通信接口通信接口 vC8051F020串行通信接口串行通信接口2个个UART、1个个SMBus(兼容(兼容I2C)、)、1个个SPIvUART(Universal
52、 Asynchronous Receiver Transmitter)是全双工串行通信接口,即能同时进行串行发送和接收是全双工串行通信接口,即能同时进行串行发送和接收可以用作可以用作UART(通用异步收发送器),也可以用作同步位(通用异步收发送器),也可以用作同步位移寄存器。移寄存器。 可以实现单片机之间点对点的可以实现单片机之间点对点的单机通信、多机通信单机通信、多机通信以及单以及单片机与系统机(如片机与系统机(如IBM-PC等)的单机或多机通信。等)的单机或多机通信。 864.3.1 4.3.1 串行通信及基础知识串行通信及基础知识 1 1数据通信的概念数据通信的概念 v通信:信息交换通信
53、:信息交换CPUCPU与外设之间、计算机与计算机之间与外设之间、计算机与计算机之间v并行通信和串行通信并行通信和串行通信 并行通信并行通信:数据的:数据的各位同时各位同时传送(发送或接收)的通信方式。传送(发送或接收)的通信方式。优点:速度快;优点:速度快;缺点:要求的线路多。不适宜位数多、距离远的情况。缺点:要求的线路多。不适宜位数多、距离远的情况。串行通信串行通信:数据:数据一位一位地按顺序一位一位地按顺序传送的通信方式传送的通信方式优优点点:只只需需一一对对传传送送线线(如如电电话话线线即即可可),适适宜宜远远距距离离低成本通信。低成本通信。缺点:速度较低。缺点:速度较低。872 2串行
54、通信的传送方向串行通信的传送方向 v单工单工(单向)配置(单向)配置只允许数据向一个方向传送只允许数据向一个方向传送v半双工半双工(半双向)配置(半双向)配置允允许许数数据据向向两两个个方方向向传传送送,但但一一次次只能有一个方向只能有一个方向v全双工全双工(全双向)配置(全双向)配置允许同时双向传送允许同时双向传送相相当当于于一一对对单单工工配配置置,要要求求两两端端都都具有完整和独立的发送和接收能力。具有完整和独立的发送和接收能力。883 3串行通信的两种基本方式串行通信的两种基本方式 (1 1)异步通信)异步通信 以以字字符符为为单单位位,以以起起始始位位“0”开开始始,从从低低位位到到
55、高高位位逐逐位位传传送,最后用送,最后用停止位停止位“1”结束;结束;一个字符又称一一个字符又称一帧帧信息。格式如信息。格式如图图4-184-18所示;所示;在在C8051FC8051F单单片片机机中中,第第9 9位位数数据据位位D8D8可可以以用用作作奇奇偶偶校校验验位位,也可以用作也可以用作地址数据帧地址数据帧的区分标识位(多机通信中);的区分标识位(多机通信中);D8D81 1表示该帧是地址信息,表示该帧是地址信息,D8D80 0表示该帧是数据;表示该帧是数据;帧帧间间可可以以无无间间隔隔,也也可可以以有有间间隔隔,且且间间隔隔时时间间可可任任意意改改变变,间隔用空闲位间隔用空闲位“1”
56、“1”来填充。来填充。89异步通信异步通信 图图4-18 4-18 异步通信数据格式异步通信数据格式 903 3串行通信的两种基本方式串行通信的两种基本方式(2 2)同步通信)同步通信 以以数据块数据块为单位,数据块开头发送一个或两个为单位,数据块开头发送一个或两个同步字符同步字符,使,使收发双方同步;收发双方同步;数据块的各字符间取消了起始位和停止位,所以通信速度比数据块的各字符间取消了起始位和停止位,所以通信速度比异步快;异步快;块间间隔用同步字符填充。块间间隔用同步字符填充。 格式如下:格式如下:图图4-19 4-19 同步通信数据格式同步通信数据格式 914.3.2 4.3.2 串行接
57、口的组成和特性串行接口的组成和特性 1UART的组成的组成v内内部部有有独独立立的的数数据据接接收收缓缓冲冲器器和和数数据据发发送送缓缓冲冲器器。可可实实现现同同时时发送和接收的发送和接收的全双工通信全双工通信。vUART0的的两两个个数数据据缓缓冲冲器器都都用用SBUF0表表示示(UART1的的数数据据缓缓冲器用冲器用SBUF1表示),地址都是表示),地址都是99H(SBUF1的地址是的地址是F2H)。)。vCPU对对SBUF0或或SBUF1执执行行写写操操作作,就就是是将将数数据据写写入入发发送送缓缓冲冲器器;对;对SBUF0或或SBUF1的的读操作读操作,就是读出,就是读出接收缓冲器接收
58、缓冲器的内容。的内容。921UART的组成的组成v发送电路发送电路由发送由发送SBUF、零检测器和发送控制器等组、零检测器和发送控制器等组成。成。如图所示如图所示v接收电路接收电路由接收由接收SBUF、接收移位寄存器和接收控制、接收移位寄存器和接收控制器等组成。器等组成。如图所示如图所示v除发送和接收电路以外,还有除发送和接收电路以外,还有波特率发生器波特率发生器、错误校错误校验电路验电路、多机通信控制电路多机通信控制电路和和交叉开关交叉开关等组成,交叉开等组成,交叉开关可将接收与发送引脚配置到关可将接收与发送引脚配置到P0到到P3的任意口线的任意口线。93UARTUART的组成的组成发送部分
59、发送部分写写SBUF有三个作用有三个作用发送结束,发送结束,置置TI标志标志94UARTUART的组成的组成接收部分接收部分起始位检测起始位检测接收完一字节,装接收完一字节,装SBUFRB8=1时,检测地址,时,检测地址,多机通信多机通信952UART的引脚配置的引脚配置 963 3串行口控制寄存器串行口控制寄存器SCON0SCON0v位位7-5:该三位的功能由:该三位的功能由PCON中的中的SSTAT0位决定位决定SSTAT0 =1时,用于时,用于UART0 的出错状态指示位。的出错状态指示位。FE0=1为为帧格式错误帧格式错误,即收到的停止位为,即收到的停止位为0;RXOV0=1为为接收覆
60、盖错误接收覆盖错误,即前一个字节还没有取走,即前一个字节还没有取走,接收器又锁存了一个新字节;接收器又锁存了一个新字节;TXCOL0=1为为发送冲突错误发送冲突错误,即前一个字节还没有发送,即前一个字节还没有发送完又往完又往SBUF写入一新字节。写入一新字节。SSTAT0 =0时,时, SM00、SM10按按表表4-13选择选择UART0的工作方的工作方式式。 RI0 TI0 RB80 TB80 REN0 SM20/TXCOL0 SM10/RXOV0 SM00/FE0字节字节地址地址98H D7 D6 D5 D4 D3 D2 D1 D0972 2串行口控制寄存器串行口控制寄存器SCON0SCO
61、N0SM00SM10方式方式功功 能能 说说 明明000同步方式(扩展移位寄存器方式,用于同步方式(扩展移位寄存器方式,用于I/O口扩展),口扩展),波特率固定(波特率固定(fosc12)0118位位UART,波特率可变(由,波特率可变(由T1或或T2溢出率决定)溢出率决定)1029位位UART,波特率固定(,波特率固定(fosc64或或fosc32)1139位位UART,波特率可变(由,波特率可变(由T1或或T2溢出率决定)溢出率决定)表表4-13 UART04-13 UART0的方式选择位的方式选择位 982 2串行口控制寄存器串行口控制寄存器SCON0SCON0vSM20为为多机通信多机
62、通信允许位允许位方式方式0时该位无作用。时该位无作用。方式方式1时用于检查有效停止位。时用于检查有效停止位。0:忽略对停止位的检测。:忽略对停止位的检测。1:只有接收到有效的停止位时才置位:只有接收到有效的停止位时才置位RI0。方式方式2和方式和方式3时为多机通信允许位时为多机通信允许位0:忽略对第九位的检测。:忽略对第九位的检测。1:只有当第九位为:只有当第九位为“1”并且接收到的地址与并且接收到的地址与UART0的的地址或广播地址匹配时才置位地址或广播地址匹配时才置位RI0并产生中断。并产生中断。地址监听地址监听 992 2串行口控制寄存器串行口控制寄存器SCONSCONv位位4 4(RE
63、N0REN0):接收允许位):接收允许位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):第):第9 9接收位接收位方式方式2 2和方式和方式3 3中,是接收到的第中,是接收到的第9 9位数据。对于方式位数据。对于方式1 1,如,如SM20=0SM20=0,RB80RB80是接收
64、到的停止位。方式是接收到的停止位。方式0 0不使用不使用RB80RB80。1002 2串行口控制寄存器串行口控制寄存器SCONSCONv位位1 1(TI0TI0):发送中断标志位):发送中断标志位由硬件在方式由硬件在方式0 0串行发送第串行发送第8 8位结束时置位位结束时置位或在其它方式串行发送停止位的开始时置位或在其它方式串行发送停止位的开始时置位中断响应不会将该位清中断响应不会将该位清0 0,必须由软件清必须由软件清0 0v位位0 0(RI0RI0):接收中断标志位):接收中断标志位由硬件在方式由硬件在方式0 0接收到第接收到第8 8位结束时置位位结束时置位或在其它方式接收到停止位的中间时
65、置位(还要看或在其它方式接收到停止位的中间时置位(还要看SM20SM20)中断响应不会将该位清中断响应不会将该位清0 0,必须由软件清必须由软件清0 0 也可以做也可以做查询标志查询标志1014 4特殊功能寄存器特殊功能寄存器PCONPCON v位位7(SMOD0):):UART0波特率系数控制位波特率系数控制位0:UART0的波特率不加倍。的波特率不加倍。1:UART0的波特率加倍。的波特率加倍。v位位6(SSTAT0):):UART0增强状态方式选择位增强状态方式选择位0:读:读/写写SCON0.57时访问时访问UART0方式设置位方式设置位SM20-SM00。1:读:读/写写SCON0.
66、57时访问帧格式错误(时访问帧格式错误(FE0)、接收覆盖)、接收覆盖错误(错误(RXOV0)和发送冲突错误()和发送冲突错误(TXCOL0)状态位。)状态位。IDLEIDLE STOPSTOP - - SSTAT1SSTAT1 SMOD1SMOD1 - - SSTAT0SSTAT0 SMOD0SMOD0 字节字节地址地址87H87H D7 D6 D5 D4 D3 D2 D1 D01034.3.3 4.3.3 串行接口的工作方式串行接口的工作方式 1方式方式0 v是扩展移位寄存器的工作方式,用以串行扩展是扩展移位寄存器的工作方式,用以串行扩展IO接口。接口。串串行行发发送送,发发送送SBUF相
67、相当当于于一一个个并并入入串串出出移移位位寄寄存存器器,由由C8051F的内部总线并行接收的内部总线并行接收8位数据,并从位数据,并从RXn线串行输出。线串行输出。串串行行接接收收,接接收收SBUF相相当当于于一一个个串串入入并并出出的的移移位位寄寄存存器器,从从RXn线接收一帧串行数据,并把它并行地送到内部总线。线接收一帧串行数据,并把它并行地送到内部总线。v由由RXn串串行行输输入入输输出出数数据据,TXn输输出出移移位位脉脉冲冲。波波特特率率固固定定为为fosc12 。 1122 2方式方式1 1v是是8 8位位异异步步串串行行通通信信方方式式,TXnTXn为为数数据据输输出出线线,RX
68、nRXn为为数数据据输输入入线。线。v传传送送一一帧帧信信息息的的数数据据格格式式如如下下图图所所示示,一一帧帧为为1010位位:1 1位位起起始始位,位,8 8位数据位(位数据位(先低位后高位先低位后高位)和)和1 1位停止位。位停止位。1132 2方式方式1 1v输出(发送)输出(发送) CPU向向发送发送SBUF写写入一个数据,即入一个数据,即启动启动发送,从发送,从TXn端输端输出一帧信息,先发送起始位出一帧信息,先发送起始位0,接着从低位开始依次输出,接着从低位开始依次输出8位位数据,最后输出停止位数据,最后输出停止位1,并置,并置1于发送于发送中断标志中断标志TIn。CPU查询查询
69、TIn=1后,清后,清TIn,再向,再向SBUF写入数据,启动下一写入数据,启动下一字符的发送。也可以采用字符的发送。也可以采用中断方式中断方式,TIn=1时向时向CPU产生中断产生中断请求。请求。 查询方式:先发后查,再发再查查询方式:先发后查,再发再查中断方式:主程序发送第一个,等待中断,中断服务中发送中断方式:主程序发送第一个,等待中断,中断服务中发送其他其他114(2)方式)方式1输入输入 v输入(接收)输入(接收)将将RENn置置1后,串行口即可开始接收。后,串行口即可开始接收。如果如果RIn=0且且SM2n=0,则收到停止位后将收到的数据字节,则收到停止位后将收到的数据字节装入接收
70、装入接收SBUFn,停止位装入,停止位装入RB8n,并置位,并置位RIn。如果如果RIn=0且且SM2n=1,则只有收到的停止位为,则只有收到的停止位为1时才将收时才将收到的数据字节装入接收到的数据字节装入接收SBUFn,停止位装入,停止位装入RB8n ,并置位,并置位RIn 。否则,不将收到的数据字节装入接收。否则,不将收到的数据字节装入接收SBUFn,停止位,停止位也不装入也不装入RB8n ,不置位,不置位RIn 。查询方式:先查后读,再查再读查询方式:先查后读,再查再读中断方式:主程序允许接收,等待中断,中断服务中读取数中断方式:主程序允许接收,等待中断,中断服务中读取数据据1153 3
71、方式方式2 2和方式和方式3 3 v9位异步串行通信位异步串行通信方式,方式,TXn为发送端,为发送端,RXn为接收端。为接收端。方式方式2的波特率固定为振荡器频率的的波特率固定为振荡器频率的164或或132,方方式式3的的波波特特率率由由定定时时器器T1或或T2的的溢溢出出率率确确定定(UART1由由定定时器时器T1或或T4的溢出率确定)。的溢出率确定)。一帧信息为一帧信息为11位:位:1位起始位位起始位+8位数据位(先低位后高位)位数据位(先低位后高位)+1位附加的第位附加的第9位数据(发送时为位数据(发送时为SCON中的中的TB8,接收时为,接收时为SCON中的中的RB8。用于。用于奇偶
72、校验奇偶校验和和多机通信多机通信)+1位停止位。位停止位。1163 3方式方式2 2和方式和方式3 3v输出(发送)输出(发送) CPU写发送写发送SBUFn,即,即启动启动发送,同时发送,同时TB8n写入与写入与SBUFn相连的相连的D触发器,从触发器,从TXn端输出一帧信息,先发送起端输出一帧信息,先发送起始位始位0,接着从低位开始依次输出,接着从低位开始依次输出8位数据和位数据和TB8n,最后输,最后输出停止位出停止位1,并将发送,并将发送中断标志中断标志TIn置置1 。CPU查询查询TIn=1后,清后,清TIn,再向,再向SBUF写入数据,启动下写入数据,启动下一字符的发送。也可以采用
73、一字符的发送。也可以采用中断方式中断方式,TIn=1时向时向CPU产生产生中断请求。中断请求。 1173 3方式方式2 2和方式和方式3 3v输入(接收)输入(接收)将将RENn置置1后,串行口即可开始接收。后,串行口即可开始接收。如果如果RIn=0且且SM2n=0,则收到停止位后将收到的数据字节,则收到停止位后将收到的数据字节装入接收装入接收SBUFn,第,第9位装入位装入RB8n,并置位,并置位RIn。如果如果RIn=0且且SM2n=1,则只有收到的第,则只有收到的第9位为位为1时(时(多机通多机通信中的地址信息信中的地址信息),才将收到的数据字节装入接收),才将收到的数据字节装入接收SB
74、UFn,第,第9位装入位装入RB8n ,并置位,并置位RIn 。否则,丢弃收到的数据。否则,丢弃收到的数据 ,不置位,不置位RIn 。1194.3.4 4.3.4 波特率设计波特率设计 方式方式1、3: 2SMOD0 T1溢出率溢出率/32 方式方式0:fOSC /12 方式方式2:2SMOD fOSC /64溢出周期溢出周期T= =1Q方式方式2溢出率溢出率T= = 1波特率波特率= = =XT1 时钟选择位时钟选择位(CKCON.4)1204.3.4 4.3.4 波特率设计波特率设计v例例4.6 已知已知C8051F单片机时钟振荡频率为单片机时钟振荡频率为11.0592MHz,选用定时器,
75、选用定时器T1工作方式工作方式2作波特率发生器,作波特率发生器,波特率为波特率为2400bit/S,求初值,求初值X。 v解:解:设波特率控制位设波特率控制位SMOD0=0,定时器,定时器T1计数脉冲计数脉冲控制位控制位T1M=0,则有:,则有: P163 常用波特率表,也可以用常用波特率表,也可以用Config软件进行配置,软件进行配置,P57:121用定时器用定时器T2T2和和T4T4产生波特率产生波特率 vC/T2 =0C/T2 =0时,波特率计算公式为:时,波特率计算公式为:v C/T2 =1C/T2 =1时,波特率计算公式为:时,波特率计算公式为:T4作波特率发生器类似作波特率发生器
76、类似FCLK为为T2引脚引脚上输入信号的频率上输入信号的频率 转换为初转换为初值的计算值的计算1224.3.5 4.3.5 串行口应用编程串行口应用编程 v配置交叉开关配置交叉开关将将TXn和和RXn连接到相应的连接到相应的I/O端口端口 v设定波特率设定波特率固定波特率(方式固定波特率(方式0、方式、方式2)可可变变波波特特率率(方方式式1、方方式式3),先先计计算算T1或或T2/T4的的计计数数初值,并对相应定时器进行初始化初值,并对相应定时器进行初始化v填写控制字填写控制字对对SCON寄寄存存器器设设定定工工作作方方式式,如如果果是是接接收收程程序序或或双双工工通通信信方方式式,需需要要
77、置置REN=1(允允许许接接收收),同同时时也也要要将将TIn、RIn清零。清零。1234.3.5 4.3.5 串行口应用编程串行口应用编程v用查询或中断方式收发数据(用查询或中断方式收发数据(TInTIn和和RInRIn)查查询询式式发发送送程程序序:发发送送一一个个数数据据(给给SBUFSBUF)查查询询TInTIn发发送下一个数据(送下一个数据(先发后查先发后查)。)。查查询询式式接接收收程程序序:查查询询RInRIn读读入入一一个个数数据据查查询询RInRIn读读下一个数据(下一个数据(先查后收先查后收)。)。中中断断式式发发送送程程序序:主主程程序序发发送送第第一一个个数数据据等等待
78、待中中断断在在中断服务程序中发送下一个数据。中断服务程序中发送下一个数据。中中断断式式接接收收程程序序:等等待待中中断断在在中中断断服服务务程程序序中中接接收收一一个个数据。数据。v两种方式中,发送和接收数据后都要注意两种方式中,发送和接收数据后都要注意清零清零TInTIn或或RInRIn。初始化并启动定时器工作初始化并启动定时器工作设定串行通信方式设定串行通信方式置发送缓冲区首址和置发送缓冲区首址和发送数据块长度计数器发送数据块长度计数器TIn1?开始开始Y清清TIn修改地址指针修改地址指针和块长度计数器和块长度计数器全部数据发送完?全部数据发送完?结束结束YNN发送数据发送数据初始化并启动
79、定时器工作初始化并启动定时器工作设定串行通信方式设定串行通信方式,允许接收允许接收置接收缓冲区首址和置接收缓冲区首址和接收数据块长度计数器接收数据块长度计数器RIn1?开始开始接收数据接收数据Y清清RIn修改地址指针修改地址指针和块长度计数器和块长度计数器全部数据接收完?全部数据接收完?结束结束YNN初初始始化化循循环环发发送送或或接接收收1、查询方式、查询方式1252 2中断方式中断方式发送发送1262 2中断方式接收中断方式接收1293 3串行通信编程举例串行通信编程举例v例例4.7 在在C8051F020的片内数据存储器的片内数据存储器20H3FH单元共有单元共有32个个字节数据,要求使
80、用字节数据,要求使用UART0方式方式1发送出去,传输波特率为发送出去,传输波特率为9600,设,设SYSCLK=12MHz。试分别用查询方式和中断方式编写发送。试分别用查询方式和中断方式编写发送程序和相应的接收程序。程序和相应的接收程序。 v解解 选选T1工作于方式工作于方式2作波特率发生器,取作波特率发生器,取T1M=0(T1按振荡按振荡器的器的12分频计数)、分频计数)、SMOD0=0,T1的时间常数的时间常数: X=256=256- =253=0xFD130#include void main(void) unsigned char i; char data *p; XBR0=0x04
81、; XBR2=0x40; P0MDOUT |= 0x01; TMOD=0x20; TH1=0xfd; TL1=0xfd; TR1=1; SCON0=0x40; p=0x20; for(i=0;i32;i+) SBUF0=*p; p+;while(!TI0);TI0=0; 查询方式发送程序:查询方式发送程序:查询方式发送程序:查询方式发送程序:初始化并启初始化并启动动T1初始化串口,初始化串口,方式方式1发送发送循环发送,循环发送,先发后查先发后查配置交叉开关,配置交叉开关,TX0推挽输出推挽输出131查询方式接收程序:查询方式接收程序:查询方式接收程序:查询方式接收程序:#include vo
82、id main(void) char data *p; unsigned char i; XBR0=0x04; XBR2=0x40; P0MDOUT |= 0x01; TMOD=0x20; TH1=0xfd; TL1=0xfd; TR1=1; SCON0=0x50; p=0x20; for(i=0;i32;i+)while(!RI0); RI0=0; *p=SBUF0; p+; 初始化并启初始化并启动动T1初始化串口,初始化串口,允许接收允许接收循环接收,循环接收,先查后收先查后收配置交叉开关,配置交叉开关,TX0推挽输出推挽输出132中断方式发送主程序:中断方式发送主程序:#include
83、char data *p; void main(void) XBR0=0x04; XBR2=0x40; P0MDOUT |= 0x01; TMOD=0x20; TH1=0xfd; TL1=0xfd; TR1=1; SCON0=0x40; p=0x20; EA=1; ES0=1; SBUF0=*p; while(1); 初始化并启动初始化并启动T1初始化串口,初始化串口,方式方式1发送,发送,开串口中断开串口中断发送第一个数发送第一个数据并等待中断据并等待中断配置交叉开关,配置交叉开关,TX0推挽输出推挽输出133中断方式发送中断服务程序:中断方式发送中断服务程序:void interrupt_
84、UART0(void) interrupt 4TI0=0; p+;if(p0x40)SBUF0=*P; else ES0=0; 在中断服务程在中断服务程序中发送后续序中发送后续数据数据清除发送清除发送中断标志中断标志134中断方式接收主程序:中断方式接收主程序:#include char data *p; void main(void) unsigned char i; XBR0=0x04; XBR2=0x40; P0MDOUT |= 0x01; TMOD=0x20; TH1=0xfd; TL1=0xfd; TR1=1; SCON0=0x50; p=0x20; EA=1; ES0=1; whi
85、le(1); 初始化并启动初始化并启动T1初始化串口,初始化串口,方式方式1接收,接收,开串口中断开串口中断允许并等待串允许并等待串口接收中断口接收中断配置交叉开关,配置交叉开关,TX0推挽输出推挽输出135中断方式接收中断服务程序:中断方式接收中断服务程序:void interrupt_UART0(void) interrupt 4 RI0=0; *p=SBUF0; p+; if(p=0x40) ES0=0; 清除接收中断标清除接收中断标志并接收数据志并接收数据1363 3串行通信编程举例串行通信编程举例v例例4.84.8 试编写一个试编写一个UART0UART0带奇偶校验的发送程序带奇偶校
86、验的发送程序。设设SYSCLK=11.0592MHz,SYSCLK=11.0592MHz,波波特特率率=9600=9600,UART0UART0工工作作于于方方式式1 1,发发送送字字符符的的ASCIIASCII码码最最高高位位作作校校验验位位,用用T2T2作作波波特特率率发发生生器器,T2T2的时间常数计算如下:的时间常数计算如下: 波特率波特率 RCAP2H:RCAP2L= 65536 - = 65500 = 0xffdc1373 3串行通信编程举例串行通信编程举例#include #include char s =“C8051F020 Serial Communication”;char
87、 bdata c; sbit c7=c7;void main(void)char a,b=0;XBR0=0x04; XBR2=0x40; P0MDOUT |= 0x01; T2CON=0x14; SCON0=0x40;RCAP2H=0xff; RCAP2L=0xdc;a=strlen(s); C定义在可定义在可位寻址区位寻址区初始化初始化T2和和串口串口配置交叉开关,配置交叉开关,TX0推挽输出推挽输出?1383 3串行通信编程举例串行通信编程举例for(;ba;b+)c=sb;ACC=c; c7=P; SBUF0=c;while(!TI0);TI0=0; 思考:思考:方式方式2、3中也可以使用中也可以使用TB8n、RB8n作校验位,请自己练习!作校验位,请自己练习!形成校验形成校验位位等待发等待发送完成送完成