51单片机串口通信问题

#include <reg51.h>

#define uchar unsigned char
#define uint unsigned int

uchar i=0;
uint a=2000;

void init()
{
SCON=0x40; //Í通信方式2,不接收
TMOD=0x20; //定时器1, 方式2
TH1 =0xfa; //波特率4800, 不加倍,f=12MHZ
TL1 =0xfa;
TR1 =1; //打开定时器T1
}

void delay()
{
while(a--);
}

void main()
{
init();
while(1)
{
SBUF=i;
while(!TI);
TI=0;
delay();
}
}

我想把i=0发送到串口助手,但是串口不显示0000----, 代码有错吗?哪位知道,解释一下啊

如果你想让串口显示0000,那么送到单片机串口的代码就应该按照ASCII码编码。ASCII码也用16进制表示。
也就是说,代码中:SBUF=i; 之前要将i转成ASCII码。

例如:0的ASCII码是30H,1的ASCII码31H,以此类推。ASCII码表百度一个吧。
温馨提示:内容为网友见解,仅供参考
第1个回答  2015-09-13
串口助手,需要设置成:16 进制显示。追问

什么都不显示,程序有没有错?

追答

程序,虽然有些毛病,但是,也可以发送。

你发送可见的符号,试试看,如:SBUF='A';

第2个回答  2015-09-13
在init函数里最后加一句EA=1追问

加EA ? 那不还要加 ES 还要写中断?

追答

不用。EA=1是开总中断,因为你用了定时器

相似回答