/*描述:电脑串口显示程序硬件支持:STC12C2052AD用Windows系统中的超级终端软件,将串口端设置[4800,8,无,1,无]*/#includeSTC12C5A60S2.H//单片机头文件#includeintrins.H/******自定义函数**************/voidUART_init(void);/**UART串口初始化函数**********/voidUART_T(unsignedcharUART_data);/****************UART串口发送函数**************************/voidUART_TC(unsignedchar*str);/*****UART串口发送字符串函数*//***********************************************************函数名:主函数调用:无参数:无返回值:无结果:程序开始处,无限循环备注:/**********************************************************************************************/voidmain(void){UART_init();UART_T(0x30);UART_TC(123);while(1);}/*********************************************************************************************函数名:UART串口初始化函数调用:UART_init();参数:无返回值:无结果:启动UART串口接收中断,允许串口接收,启动T/C1产生波特率(占用)备注:振荡晶体为12MHz,PC串口端设置[4800,8,无,1,无]/**********************************************************************************************/voidUART_init(void){EA=1;//允许总中断(如不使用中断,可用//屏蔽)ES=1;//允许UART串口的中断TMOD=0x20;//定时器T/C1工作方式2SCON=0x50;//串口工作方式1,允许串口接收(SCON=0x40时禁止串口接收)TH1=0xF3;//定时器初值高8位设置TL1=0xF3;//定时器初值低8位设置PCON=0x80;//波特率倍频(屏蔽本句波特率为2400)TR1=1;//定时器启动}/**********************************************************************************************//*********************************************************************************************函数名:UART串口发送函数调用:UART_T();参数:需要UART串口发送的数据(8位/1字节)返回值:无结果:将参数中的数据发送给UART串口,确认发送完成后退出备注:/**********************************************************************************************/voidUART_T(unsignedcharUART_data){//定义串口发送数据变量SBUF=UART_data;//将接收的数据发送回去while(TI==0);//检查发送中断标志位TI=0;//令发送中断标志位为0(软件清零)}/**********************************************************************************************//*********************************************************************************************函数名:UART串口发送字符串函数调用:UART_TC();参数:需要UART串口发送的数据(8位/1字节)返回值:无结果:向串口发送一个字符串,长度不限。备注:例:UART_TC(d9887321$);此函数需要#includestring.h头文件支持。/**********************************************************************************************/voidUART_TC(unsignedchar*str){while(*str!='\0'){UART_T(*str);*str=*str++;}*str=0;}用下面这段程序试试(先检查一下晶振频率是不是11.0592MHZ)#includereg51.h#includeintrins.hchartemp;bitflag;voidser()interrupt4{RI=0;temp=SBUF;flag=1;}voidserinit(){TMOD=0x20;TH1=0xfd;TL1=0xfd;//设置波特率9600SM0=0;SM1=1;REN=1;TR1=1;ES=1;EA=1;}voidmain(){serinit();while(1){if(flag==1)//判断是否完成接收{flag=0;ES=0;//串口中断关闭SBUF=temp;//将原先发送的值给缓存器(接发都是同一个,但意义不一样)while(!TI);//判断是否发送完成TI=0;//是则硬件清0ES=1;//再次打开串口中断}}}