51单片机波特率如何设置?

51单片机波特率如何设置?,第1张

51单片机波特率设置主要有以下两种方式:1)工作方式0 ,2)工作方式1 。\x0d\x0a1)工作方式0 \x0d\x0aSM0=0且SM1=0时,串口选择工作方式0,实质这是一种同步移位寄存器模式。 其数据传输的波特率固定为Fosc/12,数据由RXD引脚输入或输出,同步时钟由TXD引脚输出。\x0d\x0a2)工作方式1 \x0d\x0a当SM0=0且SM1=1时,串口选择工作方式1,其数据传输的波特率由定时/计数器T1、T2的溢出速率决定,可通过程序设定。当T2CON寄存器中的RCLK和TCLK置位时,用T2作为发送和接收波特率发生器,而RCLK=TCLK=0时,用T1作为波特率发生器,两者还可以交叉使用,即发送和接收采用不同的波特率。数据由TXD引脚发送,由RXD引脚接收。

您好!很高兴为您解答问题,以下是我为您提供的解答内容:

你串口初始化那里的设置波特率是4800而不是9600

你在主程序中已经无条件地执行了这个display(dat - 48)程序,你可以把while(1)改成由标志位判定有无接收到串口数据,有才置位标志位,进行显示。

串行口的四种工作方式对应三种波特率。由于输入的移位时钟的来源不同,所以,各种方式的波特率计算公式也不相同。 方式0的波特率 = fosc/12 方式2的波特率 =((2^SMOD)/64)• fosc 方式1的波特率 =((2^SMOD)/32)•(T1溢出率) 方式3的波特率 =((2^SMOD)/32)•(T1溢出率) 注意:SMOD为PCON寄存器的最高位(即PCOM<7>)。 T1 溢出率 = fosc /{12×[256 -(TH1)]} --将该公式代人方式1或3 最后推出公式:TH1=256-(fosc*2^SMOD)/(baudrate*12*32)呵呵 如果你用方式2(波特率 =((2^SMOD)/64)• fosc )的话 12M的晶振就不能得到9600波特率了(除非你改变你的晶振,但是那样的晶振好像没有卖) 所以你只能选择方式1或3 而且12M的晶振在串口传输时会有误差,就如你上面算的那样结果会有小数点 TH1又只能是整数的 所以传输时会有误差. 参考: #include #define baudrate 9600UL #define fosc 11059200UL//其中,UL是不能省略的,代表长整型。 unsigned char a,flagvoid serial_init(void) { unsigned char S_MOD=1TMOD=0x20//T1工作在方式2 SCON=0x50//SM0=0 SM1=1->串口通信在模式1, //SM2=0->多级通信中使用的位,REN=1PCON=0if((PCON&0x80)==0x80) S_MOD=2TH1=256-(fosc*S_MOD)/(baudrate*12*32)//其中SMOD=0, TL1=256-(fosc*S_MOD)/(baudrate*12*32)TR1=1ES=1EA=1}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/7746049.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-09
下一篇 2023-04-09

发表评论

登录后才能评论

评论列表(0条)

保存