stc单片机 串口

liuchang910781261 2015-01-20 02:33:52
小弟遇到一个问题:(程序如下)为什么我在串口上采用“16进制发送”,上位机接收不到数据(如果我不采用16进制发送,才可以接收到数据,如图片显示)?
程序蓝色字体是串口中断部分~~~
还是想请大神指点下,感谢了~~~

void main()
{
UartInit();
while(1)
{
if(flag==1)
{
flag=0;
UartSendByte(0x01);
}
}
}
void UartInit()
{
PCON &= 0x7F; //波特率不倍速
SCON = 0x50; //8位数据,可变波特率
AUXR |= 0x40; //定时器1时钟为Fosc,即1T
AUXR &= 0xFE; //串口1选择定时器1为波特率发生器
TMOD &= 0x0F; //清除定时器1模式位
TMOD |= 0x20; //设定定时器1为8位自动重装方式
TL1 = 0x95; //设定定时初值
TH1 = 0x95; //设定定时器重装值
ET1 = 0; //禁止定时器1中断
TR1 = 1;
EA=1;
ES=1;
}
void UartSendByte(uchar temp)//把数据发送给上位机,送给串口显示
{
ES=0;
SBUF=temp;
while(!TI);
TI=0;
ES=1;
}

void UartRoutine() interrupt 4
{
RI=0;
flag=1;
}
...全文
189 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
worldy 2015-01-20
  • 打赏
  • 举报
回复

void UartInit()//放在main前,可以免除函数声明的麻烦
{
	PCON &= 0x7F;	 //波特率不倍速
	SCON = 0x50;	 //8位数据,可变波特率
	AUXR |= 0x40;	 //定时器1时钟为Fosc,即1T
	AUXR &= 0xFE;	 //串口1选择定时器1为波特率发生器
	TMOD &= 0x0F;	 //清除定时器1模式位
	TMOD |= 0x20;	 //设定定时器1为8位自动重装方式
	TL1 = 0x95;	 //设定定时初值
	TH1 = 0x95;	 //设定定时器重装值
	ET1 = 0;	 //禁止定时器1中断
	TR1 = 1;	
	EA=1;
	ES=1;
}

void main()
{
	bit bStart=0;
	UartInit();
	while(1)
	{
		if(!bStart)
		{
			SBUF=0x01;//这样就可以启动发送数据
			bStart=1;
		}   
	}
}

void UartRoutine() interrupt 4
{	
	if(RI)
	{
	   	RI=0;
	}
	if(TI)
	{
		TI=0;
		SBUF=0x01;//连续不断发送0x01
	}
}
liuchang910781261 2015-01-20
  • 打赏
  • 举报
回复
引用 2 楼 worldy 的回复:
采用16进制发送,是啥意思? lz的这个代码还得加油加油提高提高
是啊,感谢啦
worldy 2015-01-20
  • 打赏
  • 举报
回复
采用16进制发送,是啥意思? lz的这个代码还得加油加油提高提高
玉怀一捧雪 2015-01-20
  • 打赏
  • 举报
回复
0x01+48 ascll显示 0x01 hex显示 0在ascll里面对应48

27,374

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧