void uart_init()//初始化UART,fosc=,波特率19200 { TMOD=0x20;//定时器T1工作于8位自动重载模式 TH1=0xfd; TL1=TH1; TR1=1; PCON=0x80;//波特率倍增 SCON=0x50;//uart工作于模式1 } void senddata(unsigned char sdata)//发送数据 { SBUF=sdata; while(!TI);//等待发送完成 TI=0; } unsigned char recdata()//接收数据 { unsigned char readdata; while(!RI);//等待接收完成 readdata=SBUF; RI=0; return readdata; } void uart() { unsigned char tem,j; uart_init(); for(j=0;j<10;j++) { tem=recdata(); senddata(tem); } } 与电脑通信的话,单片机的晶振一般是 这是我写的一个程序, 如果改成12M,2400波特率的话,应该这样 TMOD=0x20;//定时器T1工作于8位自动重载模式 波特率的计算=K*Fose/(32*12*[256-(TH1)]) 当smod=1时,k=2;当smod=0时(默认)k=1; 得TH1=D; PCON不用设置,默认SMOD为0其他的跟上面的差不多 但是一般来说,串行的话 晶振的就是用