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

STC系列双串口单片机 同时使用两个串口的有关问题

2012-03-13 
求助:STC系列双串口单片机 同时使用两个串口的问题现在我想实现这样一个功能:用pc机给单片机的串口2发数据

求助:STC系列双串口单片机 同时使用两个串口的问题
现在我想实现这样一个功能:用pc机给单片机的串口2发数据,单片机把数据通过串口1发送给GSM模块。单片机的型号是STC12c5a32s2,用的开发板是MC55单片机开发板。
开始计划的是先把两个串口之间的通信程序调好了,可是貌似两个串口不能同时工作啊,把pc机发给单片机串口2的数据再从串口1接收回来,在pc机上显示,一直实现不了。
两个串口分别工作的时候,写的程序都能用,可是当串口2工作时,把串口1接到电脑上,串口2就不能发送数据了,各位大侠谁能帮帮我啊,小女子感激不尽!

下面分别是串口1和串口2的测试程序,就是在pc机的串口调试助手中发数据,经过单片机的串口,再回传到pc机中。

UART1test
#include <cheshi.h>


void Sys_Init(void)//话机启动的初始化程序,包含键盘与定时器,串口等
{
  TH0 = 0xB8;
  TL0 = 0x00; //20ms的时钟基准

  //串口中断
  TI=0; RI=0;
  SCON=0x50; //选用方式1
  TMOD=0x20;
  TMOD = (TMOD & 0xf0) | 1; //MODE 1
  TH1=0xfd; //波特率为9600
  TL1=0xfd;
  PCON=0x00; //倍频0x80
  IE = 0xb0; // EA XX ET2 ES ET0 EX0 ET1 EX1
  TR1=1; //enable TIMER1
// serial_port_two_initial();
  ES=1; //开串口开断
  TR0=1; //串口接收中断
  ET0=1; //T0 中断
  ET1=0; // T1 中断
  EA=1;
  P0=0xFF;
  P1=0xFF;
  P2=0xFF;
  P3=0xFF;
  // P4=0xff;
   
  IO_IGT=1;

//串口2

S2CON = 0x50; //0101,0000 8位可变波特率,无奇偶校验位,允许接收
BRT=220;
AUXR=0x14;
IE2=0x01;//允许串口2中断,ES2=1
  
}

void Interrupt_Receive_2(void) interrupt 4
{

unsigned char temp ;
if(RI ==1)
{
  RI=0;
  temp = SBUF;
  UART_sendbyte(temp);
}
if(TI==1)
{
  TI =0;
}
}


  

void UART_sendbyte(unsigned char mydata)
{

  ES=0;
  TI=0;
SBUF=mydata;
while(!TI);/* 等待发送完毕 */
  TI=0;
ES=1;
}

void main(void)
{
Sys_Init(); 
while(1)
{

}

}



UART2test

#include <cheshi.h>


void Sys_Init(void)//话机启动的初始化程序,包含键盘与定时器,串口等
{
  TH0 = 0xB8;
TL0 = 0x00; //20ms的时钟基准

  //串口中断
  TI=0; RI=0;
  SCON=0x50; //选用方式1
  TMOD=0x20;
  TMOD = (TMOD & 0xf0) | 1;//MODE 1
  TH1=0xfd; //波特率为9600
  TL1=0xfd;
  PCON=0x00; //倍频0x80
  IE = 0xb0; // EA XX ET2 ES ET0 EX0 ET1 EX1
  TR1=1; //enable TIMER1
// serial_port_two_initial();
  ES=1; //开串口开断
  TR0=1; //串口接收中断
  ET0=1; //T0 中断
  ET1=0; // T1 中断
  EA=1;
  P0=0xFF;
  P1=0xFF;
  P2=0xFF;
  P3=0xFF;
  // P4=0xff;
   
  IO_IGT=1;

//串口2

S2CON = 0x50; //0101,0000 8位可变波特率,无奇偶校验位,允许接收
BRT=220;
AUXR1=0x04;
  IE2=0x01;//允许串口2中断,ES2=1
  IP2H = 0x01;
IP2 = 0x01;


   
}

void Interrupt_Receive_2(void) interrupt 8
{
  unsigned char temp ;
  unsigned char k = 0;
k = S2CON ;
k= k & 0x01; //k = S2RI
if(k==1)
{
  S2CON = S2CON & 0xFE; //1111,1110
  temp = S2BUF;
UART_sendbyte(temp);

}
else
{
TI=0;
}
   
}
  

void UART_sendbyte(unsigned char mydata)
{
unsigned char k = 0;
  P1_0 = 0;
  P1_1 = 0;
  
IE2=0x00;
k = S2CON;
k = k & 0x02; // k == S2TI
   
S2CON = S2CON & 0xFD; //S2TI == 0
S2BUF=mydata;
while(!k);/* 等待发送完毕 */
S2CON= S2CON&0xfd;


IE2=0x01;
}

void main(void)
{

  Sys_Init();
while(1)
{


}


}




























[解决办法]
没程序,也能收发 肯定是 rx和tx短接了

热点排行