首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

51单片机串口通讯

2012-11-10 
51单片机串口通信我想用单片机向电脑发送数据用串口调试助手观察 但我总是收到乱码,晶振是12M 波特率600//

51单片机串口通信
我想用单片机向电脑发送数据用串口调试助手观察 但我总是收到乱码,晶振是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); 

  } 

  } 

  }

[解决办法]
没有加奇偶校验吗?你加上校验之后再试试,还有你程序里说波特率设置成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;
}
[解决办法]
你那串口中断里面的TI是发送中断标志啊
应该是这样的
if(RI){
ch=SBUF;
RI=0;
TX_flag= 1 ; //就置位发送标志 
}

热点排行