串口波特率与定时计数器的关系.doc

串口波特率与定时计数器的关系.doc

ID:58993325

大小:171.00 KB

页数:6页

时间:2020-09-16

串口波特率与定时计数器的关系.doc_第1页
串口波特率与定时计数器的关系.doc_第2页
串口波特率与定时计数器的关系.doc_第3页
串口波特率与定时计数器的关系.doc_第4页
串口波特率与定时计数器的关系.doc_第5页
资源描述:

《串口波特率与定时计数器的关系.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、串口波特率与定时计数器的关系在基于单片机的系统开发时,经常采用UART串口,在系统中元件之间,或系统与系统之间进行通信。然而在写过(抑或是生搬硬套)若干串口通信程序之后,却越来越迷惘于串口波特率的设定与T/C间的关系,本文就此问题加以思考并给予验证。1.T1作为波特率发生器在对TMOD进行设置时,若非特殊需要非常低的波特率,一般将T1的工作模式选为方式2:此时既省去了进入T1中断,利用软件重新设置TH1和TL1的不便,又保障了数据收发的正确性(因为晶振稳定)。此时问题来了,那么T0又该设置成什么方式呢?看下表:TMODTR1=?Communicate片内资源(8051)

2、0x200不能通信T/C(1)1可以通信0x210不能通信T/C(1)1可以通信0x220不能通信T/C(1)1可以通信0x230可以通信T/C(1),T(1):由T0拆分1可以通信由上表可看出,当T/C0工作于方式3时,T/C1只需设置好工作方式就可自动运行,而不需要"TR1=1"命令。同时也发现,由于T0的拆分,片内仍存在着一个T/C,一个T,可以说,若使用T1作为串口的波特率发生器,最好使T0工作在方式3下,即TMOD=0X23。正如老子所说"福兮祸之所伏",此做法也存在着一定的坏处:1.由于T0的拆分所得的2个T均为8位,且无reload功能,功能减弱。2.由于

3、TH0占用了T1的TR1与TF1,所以,在写程序时,容易搞混。当TMOD=0x20,0x21,0x22时,TR1=1,开始串口通信,此时串口中断和T/C中断是并存的,一般做法是"ET1=0",禁止T1中断。 2.T2作为波特率发生器随着大规模集成电路的发展,8052系列增加了一个T/C2,从此也看出了,8051单片机在用T1作为波特率发生器的同时,拆分T0,以此来充当2个T/C用,是多么的落后。图1T2在捕获模式下的逻辑图图2T2在自动重载模式下的逻辑图图3T2在波特率模式下的逻辑图T2的三种模式通过上面两图可以清楚的看出其工作原理。由于8052单片机增加了功能强大的T

4、/C2,那么我们在串口通信时,可以选择T2作为波特率发生器。 3.波特率的计算串口工作方式及对应的公式(formula)如下方式0:baudrate=f/12。方式2:baudrate=(2SMOD/64)*f方式1或3:T1-->baudrate=(2SMOD/32)*[f/[12*(2n-x)]]T2-->baudrate=f/[32*[65536-(RCAP2H,RCAP2L)]] 常用波特率初值12Moscillator(1%误差以内)BaudrateT1(不倍频)T1(倍频)T21200E6CCFEC82400F3E6FF644800F3FFB29600FFD

5、911.0592Moscillator(无误差)BaudrateT1(不倍频)T1(倍频)T21200E8D0FEE02400F4E8FF704800FAF4FFB89600FDFAFFDC 4.程序实例以下两例分别为T1T2作为波特率发生器时的设置函数://Deion:12Moscillator,Baudrate=1200//Author://Date:09-9-17voiduart_init(void){/*串口方式:8位UART,不启用多机通信,波特率不加倍*/SCON=0x50;PCON=0;/*T1作为波特率发生器计数源:T(内部晶振)方式2:autorelo

6、ad//gate=0:tr1*/TMOD=0X22;TL1=0xE6;TH1=0xE6;TR1=1;/*允许serialport中断,禁止T1中断*/IE=0X90;}//Deion:12Moscillator,Baudrate=1200//Author://Date:09-9-17voiduart_init(void){/*串口方式:8位UART,不启用多机通信,波特率不加倍*/SCON=0x50;PCON=0;/*T2作为波特率发生器计数源:T(内部晶振)Baudratemode*/TH2=0XFE;TL2=0XC8;RCAP2H=0XFE;RCAP2L=0XC8;

7、T2CON=0X34;/*允许serialport中断,禁止T2中断*/IE=0X90;}下面两例分别为串口接收和发送多个字节的程序,其中接收采用中断形式,发送采用查询方式。注意:在每发送完一个字节,程序都会进进入中断一次。//串口接收Unsignedchararray[10],*p=array;voiduart_service()interrupt4{if(RI){*p++=SBUF;RI=0;}}//串口发送单个字节voidsys_byte(unsignedchartemp){//select=0;//485发送时,75LBC184的

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。