请教关于STC51串行通信问题
由于身边只有12M晶振,所以只能写一个约等于4800的波特率串口通信现编写代码如下,但不知道为什么不能通信,请指教
void uart_init(void) //波特率约为4800
{
TMOD|=0x20;
TL1=0xF3;
TH1=0xF3;
TR1=1;
SCON|=0x50;
PCON|=0x80;
}
void main(void)
{
uart_init();
printf("hello");
}
我用串口助手调试,通信时发现没有任何东西
请大家帮忙看下,看看是不是上面的初始化有问题,所以才不能通信
我调试了下发现程序在printf("hello");这句一直走不动了。。。。。。 用不到printf,要用SBUF。再看看串口的工作原理吧 如果我要显示"hello"该怎么做呢? 温馨提示:LZ注意,本坛封_杀你所用的MCU,禁止讨论! 好象没有开中断吧 好象听人说过用print的时候要把TI=1; 楼主你T1初值怎么计算出来的?
256-12,000,000/4800/32/12=249.48=0xF9 你试一试以下程式
void uart_init(void) //波特率约为4800
{
TMOD|=0x20;
TL1=0xF3;
TH1=0xF3;
TR1=1;
SCON|=0x50;
PCON|=0x80;
}
void main(void)
{
uart_init();
while(!TI)
{
TI=0;
printf("hello");
}
} 要写中断处理程序吧 在51里从来不用printf的路过,,, 1.STC要用STX来代替.
2.12M 4800 误差比较大,建议用11.0592.
3.KEIL用printf TI要先置1.
4.用printf要有足够的ROM和RAM.
5.建议用sprintf(buffer,......,代替,自己做输出函数.
给你个4800的初始化程序
void InitUART(void)
{
TMOD = 0x20;
SCON = 0x50;
TH1 = 0xF3;
TL1 = TH1;
PCON = 0x80;
TR1 = 1;
TI=1;
} 51里12M晶振时只能T2来产生的波特率误差才比较小,T1基本不能产生标准波特率 谢谢大家
果然加个TI=1就可以了 对啊,用不到printf,单片机的c编程和谭的c语言编程还是有不一样的,
送入SBUF里面,就有反应了。
页:
[1]