- UID
- 872235
|
三.软件设计
/**************************************************************************
*程序名称:51单片机串口调试
*程序功能:单片机通过串口和上位机的串口调试软件进行数据交换
*开发工具:WSF-51DB开发板
* MCU型号:AT89S52-24PU
*时钟频率:11.0592MHZ
*程序作者:吴师傅
*版权说明:吴师傅版权所有。转载请注明来源和作者。
**************************************************************************/
#include<reg52.h>
//串口初始化:
void IniSerialPort(void)
{
TMOD=0X20; //定时器1工作在方式2
TH1=0xfd;
//置定时器初值,波特率9600/0xfd,4800/0xfa;2400/0xf4;19200/0xfd,PCON=0x80;
TL1=0xfd;//注意:要用11.0592MHZ晶振
//EA=1; //总中断打开,采用查询法时不用打开中断
//ES=1; //串口中断开关,采用查询法时不用打开中断
TR1=1; //定时器1打开
REN=1; //串口为工作方式1,允许接收数据
SM0=0;
SM1=1;
}
//串口查询法接收一个字节:
unsigned char ReceiveByte(void)
{
unsigned char rbyte;
while(!RI); //查询接收标志位,是否有数据到达缓冲区
RI=0; //清零接收标志位
rbyte=SBUF; //从缓冲区读取数据
return rbyte;
}
//串口发送一个字节:
void SendByte(unsigned char sbyte)
{
SBUF=sbyte; //发送数据
while(!TI); //等待发送完成
TI=0; //清零发送标志位
}
//串口发送一个字符串:
void SendString(unsigned char *pstr) //定义指针
{
while(*pstr!='\0') //字符串是否发完
{
SendByte(*pstr);//发送字符串数据
pstr++; //指向下一个字符
}
}
//串口中断函数:
void SerialPortInte(void) interrupt 4 //采用串口中断法收发数据
{
unsigned char rbyte;
RI=0; //清零接收标志位
rbyte=SBUF;//读取缓冲区的数据
P2=rbyte; //把数据送到P2口显示
}
//主函数:
int main(void)
{
unsigned char rdata;
IniSerialPort(); //初始化串口
while(1)
{
rdata=ReceiveByte();//采用查询法接收数据
if(rdata==0x55) SendString("How do you do!Can I help you?");
//如果收到0x55,就发送字符串给上位机
else SendByte(rdata);//如果不是0x55,就把数据发回去
}
return 0;
} |
|