程序如下:
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
uchar SendAscii_Startflag,receivedata[12];
sfr AUXR=0x8e;
void delay0(unsigned int i)
{
while ((i--)!=1 ); // 延时10*i个机器周期,晶振频率11.05926hz;
}
void Uart_Time1_Init()
{
/*采用波特率加倍*/
PCON |= 0x80; //使能波特率倍速位SMOD
SCON = 0x50; //8位数据,可变波特率
AUXR &= 0xBF; //定时器1时钟为Fosc/12,即12T
AUXR &= 0xFE; //串口1选择定时器1为波特率发生器
TMOD &= 0x0F; //清除定时器1模式位
TMOD |= 0x20; //设定定时器1为8位自动重装方式
TL1 = 0xFA; //设定定时初值
TH1 = 0xFA; //设定定时器重装值
ET1 = 0; //禁止定时器1中断
TR1 = 1; //启动定时器1
ES=1; //串口中断允许位;
EA=1;
}
void Laser_Configuration()
{
uchar i;
ES=0;
for(i=0;i<SendAscii_Startflag;i++)
{
SBUF=receivedata[i];
while(!TI);
TI=0;
}
ES=1;
SendAscii_Startflag=0;
}
void main()
{
Uart_Time1_Init();
while(1)
{
Key_Scan();
if(SendAscii_Startflag==5)
Laser_Configuration();
}
}
void Uart_ser() interrupt 4 //串口中断;
{
ES=0;
if(RI)
{
RI=0;
receivedata[SendAscii_Startflag]=SBUF;
SendAscii_Startflag++;
}
if(TI)
TI=0;
ES=1;
}
用不同的串口调试软件发送的数据和接收的数据不同;用示波器测得的rxd,txd数据是对的。是以示波器为主吗?谢谢!!
|