打印

串口通信问题

[复制链接]
992|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hsbjb|  楼主 | 2012-5-29 15:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我想用单片机向电脑发送数据用串口调试助手观察 但我总是收到乱码,晶振是12M 波特率600

////////////////////////////////////////////////////////////////////////////////////////

#include <reg51.h>
#include <string.h>  
unsigned char ch='a';

bit TX_flag= 0 ;  

void init_serialcom( void ) //串口通信初始设定
  {  
  SCON = 0x50 ; //UART为模式1,8位数据,允许接收
  TMOD= 0x20 ; //定时器1为模式2,8位自动重装
  PCON= 0x80 ; //SMOD=1;  
  TH1=TL1=0xcc ; //Baud:19200 fosc="12MHz  
  IE= 0x90 ; //Enable Serial Interrupt  
  TR1= 1 ; // timer 1 run  
  TI=1;  
  }  

//向串口发送一个字符  
void send_char_com( unsigned char ch)  
  {  
  SBUF=ch;  
  while (TI==0);  
  TI=0 ;  
  }  

//串口接收中断函数  
void serial () interrupt 4 using 3  
{  
  if (TI)  
  {  
  TI = 0 ;  
  SBUF=ch;   
  TX_flag= 1 ; //就置位发送标志  
  }

}  



main()  

  {  

  init_serialcom(); //初始化串口  

  while ( 1 )  

  {  

if (TX_flag) //如果取数标志已置位,就将读到的数从串口发出  

  {  

  TX_flag= 0 ; //取数标志清0  

  send_char_com(ch);  

  }  

  }  

  }

相关帖子

沙发
无冕之王| | 2012-5-29 15:21 | 只看该作者
你那串口中断里面的TI是发送中断标志啊
应该是这样的
if(RI){
  ch=SBUF;
  RI=0;
  TX_flag= 1 ; //就置位发送标志  
}

使用特权

评论回复
板凳
txcy| | 2012-5-29 15:36 | 只看该作者
要用十六进制显示呀

使用特权

评论回复
地板
火箭球迷| | 2012-5-29 15:42 | 只看该作者
没有加奇偶校验吗?你加上校验之后再试试,还有你程序里说波特率设置成19200,你调低些再试一下。
void init_serialcom( void ) //串口通信初始设定
  {   
  SCON = 0x50 ; //UART为模式1,8位数据,允许接收
  TMOD= 0x20 ; //定时器1为模式2,8位自动重装
  PCON= 0x80 ; //SMOD=1;   
  TH1=TL1=0xcc ; //Baud:19200 fosc="12MHz ←←←←←←←←←←←←←←←
  IE= 0x90 ; //Enable Serial Interrupt   
  TR1= 1 ; // timer 1 run   
  TI=1;   
  }

使用特权

评论回复
5
wulala| | 2012-9-12 21:36 | 只看该作者
晶振计算不准确,接受的数据就有问题

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

193

主题

2354

帖子

0

粉丝