打印

51 测试结果的疑惑,请看:

[复制链接]
1504|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
doob|  楼主 | 2009-10-29 23:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
void UartInit(unsigned char baudrate)
{
ES = 0;
TR2 = 0;
bufwptr = 0;     // 写指针
bufrptr = 0;     // 读指针
PCON = 0x00;     // 设置串口波特率, 时钟频率30MHZ
T2CON = 0x30;     // 定时器2作为波特率发生器
SCON = 0x50;     // 模式1
         // n = 65536 - [fosc/baud*32]
         // n = 65536 - 22118400/(57600*32) = 65536 - 12 = 65524 = 0xfff4
RCAP2H = 0xff;     
RCAP2L = BAUD[baudrate];  // baud rate 57600   
TH2 = 0xff;
TL2 = BAUD[baudrate];
IP = 0x10;      // 串口中断优先级高
REN = 1;
TI = 0;
RI = 0;
TR2 = 1;      // 启动定时器2
ES = 1;       // 使能串口中断
}
#endif


/*
*  发送一个字节数据
*/
void SendChar(unsigned char ch)
{
SBUF = ch;
while(TI == 0);
TI = 0;
}
/*
* 发送字符串
*/
void SendString(char *str)
{
while(*str)
{
  SendChar(*str);
  str++;
}
}

void main(void)
{

/* 串口初始化 */
UartInit(BAUDRATE_38400);
  SendString("  AT89s52,测试串口程序 ");
}

结果ok;

/**************************************************************************
/函数名称:InitUART
/入口参数:none
/出口参数:none
/函数功能:串口初始化函数,使用12M晶体
/
***************************************************************************/
void InitUART(void)  //串口初始化函数,使用22.1184M晶体 9600 0XF4
{
  EA=0;
  TMOD&=0x0F;
  TMOD|=0x20; //定时器1工作在模式2
  SCON=0x50;    //串口工作在模式1
  TCON=0x05;
  TH1=0xf4;    ////Baud:4800 fosc=11.0592MHz  16M --0XEF  12M --0XF3
  TL1=0xf4;
  PCON=0x80;    //串口波特率加倍
  ES=1;     //串行中断允许
  TR1=1;     //启动定时器1
  REN=1;     //允许接收
  EA=1;     //允许中断
}

/**************************************************************************
/函数名称:SendToComport
/入口参数:none
/出口参数:none
/函数功能:往串口发送一字节数据
/
***************************************************************************/
void SendToComport(UINT8 d)    //往串口发送一字节数据
{
  Sending=1;
  SBUF=d;
  while(Sending);
}

/**************************************************************************
/函数名称:prints
/入口参数:none
/出口参数:none
/函数功能:发送一个字符串
/
***************************************************************************/
void prints(UINT8 * pd,UINT8 line_feed)
{
while((*pd)!='\0')
  {
   SendToComport(*pd);
   pd++;
  }
if(line_feed)
{
  SendToComport(13);
  SendToComport(10);
}
}

void main(void)
{

/* 串口初始化 */
  InitUART();
Prints("  AT89s52,测试串口程序 ");
}

结果也ok;

奇怪的是,上面两个初始化一替换,就不ok啦,
对比了好久i没看出问题在哪里,大侠帮我点拨一二,
谢谢!

相关帖子

沙发
程序匠人| | 2009-10-30 08:52 | 只看该作者
结果也ok;奇怪的是,上面两个初始化一替换,就不ok啦,

——什么叫ok?什么叫不ok?
问问题时,最好把现象说出来,别让观众猜谜语。

使用特权

评论回复
板凳
doob|  楼主 | 2009-10-31 20:37 | 只看该作者
结果ok,就是:
串口可以打印这行信息:---AT89s52,测试串口程序 ---

不ok,就是串口打印不出来,调试打印信息;

使用特权

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

本版积分规则

165

主题

1113

帖子

3

粉丝