| 
 
| 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没看出问题在哪里,大侠帮我点拨一二,
 谢谢!
 | 
 |