werty12 发表于 2009-11-24 14:01:58

请教关于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");这句一直走不动了。。。。。。

daiqihao 发表于 2009-11-24 14:27:44

用不到printf,要用SBUF。再看看串口的工作原理吧

werty12 发表于 2009-11-24 14:38:39

如果我要显示"hello"该怎么做呢?

coody 发表于 2009-11-24 14:39:27

温馨提示:LZ注意,本坛封_杀你所用的MCU,禁止讨论!

andyluo324 发表于 2009-11-24 15:28:13

好象没有开中断吧

eaglelpx 发表于 2009-11-24 16:03:12

好象听人说过用print的时候要把TI=1;

z_zt 发表于 2009-11-24 20:26:16

楼主你T1初值怎么计算出来的?
256-12,000,000/4800/32/12=249.48=0xF9

wygood168 发表于 2009-11-24 20:49:48

你试一试以下程式
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");
            }
}

yan_jian 发表于 2009-11-24 20:56:24

要写中断处理程序吧

xpstudio2003 发表于 2009-11-24 21:10:07

在51里从来不用printf的路过,,,

zhxzhx 发表于 2009-11-24 21:42:25

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;
}

kevinzcp 发表于 2009-11-24 22:09:04

51里12M晶振时只能T2来产生的波特率误差才比较小,T1基本不能产生标准波特率

werty12 发表于 2009-11-24 23:22:01

谢谢大家
果然加个TI=1就可以了

wujielin0218 发表于 2011-12-7 19:01:34

对啊,用不到printf,单片机的c编程和谭的c语言编程还是有不一样的,
送入SBUF里面,就有反应了。
页: [1]
查看完整版本: 请教关于STC51串行通信问题