rprt.net
当前位置:首页 >> 52单片机 如何用T2来设波特率为115200的 串口接收 要用C语言写 >>

52单片机 如何用T2来设波特率为115200的 串口接收 要用C语言写

void UART_init() { //初始化串行口和波特率发生器 SCON =0x64; //选择串口工作方式,打开接收允许 TMOD =0x21; //定时器1工作在方式2,定时器0工作在方式1 TH1 =0xfd; //实现波特率115200(系统时钟11.0592MHZ) TR1 =1; //启动

#include void main() { T2MOD = 0x01; //自动重载 T2CON = 0x30; //T2用做发送接收时钟 TH2 = 0xFF; //9600波特率,11.0592Mhz晶振 TL2 = 0xDC; RCAP2H = 0xFF; RCAP2L = 0xDC; SCON = 0x50; //串口方式1,1个起始位,1个停止位,8位数据 TR2 = 1; //启动T2 while(1) { SBUF = 0xaa; while( TI==0 ); TI = 0; } }

void UartInit(void) //115200bps@11.0592MHz { SCON = 0x50; //8位数据,可变波特率 AUXR &= 0xBF; //定时器1时钟为Fosc/12,即12T TMOD &= 0x0F; //设定定时器1为16位自动重装方式 TL1 = 0xFE; //设定定时初值 TH1 = 0xFF; //设定定时初值 ET1 = 0; //禁止定时器1中断 TR1 = 1; //启动定时器1 }

//你说的是STC89C52吗?下面供参考9600bps @11.0592MHzvoid UartInit(void) //9600bps@11.0592MHz{ SCON = 0x50; //8位数据,可变波特率 AUXR |= 0x01; //串口1选择定时器2为波特率发生器 AUXR &= 0xFB; //定时器2时钟为Fosc/12,即12T T2L = 0xE8; //设定定时初值 T2H = 0xFF; //设定定时初值 AUXR |= 0x10; //启动定时器2}

如果要求分时收发,是可行的,按照半双工方式工作,接收/发送前切换成指定的波特率即可;如果要求同时收发,那么对于单个串口是不可能的,因为51的串口模块的接收和发送是同一个时钟源、同一个分频比,没有各自独立的时钟分频设置.解决的手段可以有:1. 选用双串口模块的扩展型51单片机,分别用两个模块的接收和发送;2. 接收部分(高波特率)采用硬件UART,发送部分(低波特率)采用软件模拟串行发送.

#include /*****************************************************函数功能:接收一个字节数据***************************************************/unsigned char Receive(void){ unsigned char dat; while(RI==0) //只要接收中断标志位RI没有被置“1” ; //等待,

void UartInit(void) //9600bps@12.000MHz{ SCON = 0x50; //8位数据,可变波特率 AUXR &= 0xBF; //定时器1时钟为Fosc/12,即12T AUXR &= 0xFE; //串口1选择定时器1为波特率发生器 TMOD &= 0x0F; //设定定时器1为16位自动重装方式 TL1 = 0xE6; //设定定时初值 TH1 = 0xFF; //设定定时初值 ET1 = 0; //禁止定时器1中断 TR1 = 1; //启动定时器1}

我用的新唐芯片,8051内核,跟51差不多,望采纳void UART_Initial (void){P02_Quasi_Mode; //Setting UART pin as Quasi mode for transmitP16_Quasi_Mode; //Setting UART pin as Quasi mode for transmitSCON_1 = 0x50; //UART1 Mode1,REN

定时器工作为8位自动重装在的工作模式下得,c8051f系列单片机工作uart波特率=1/2*t1定时器溢出率t1定时器溢出率=t1clk/(256-th1)这样计算没有问题,但是有的时候使用的系统时钟不一定就可以算得出一个整数波特率,这个时候就得通过适当的调整得到最接近的那个装载数和用一个最合适的定时工作模式;所以就有各种条件了,这个程序能够适应不同的系统时钟..

初始化串口的时候把波特率置为115200不就行了?估计你没了解过串口~去看看51的串口通信你就懂了~

相关文档
xmlt.net | lpfk.net | jingxinwu.net | 5689.net | acpcw.com | 网站首页 | 网站地图
All rights reserved Powered by www.rprt.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com