/*************串口接收数据***************
*单片机型号:STC89C52RC
*开发环境:KEIL
*功能:往串口发送一字节数据,波特率选为4800。
按下一次S2键,松开后均会在超级终端上显示"欢迎您!"。
****************************************/
#include <reg52.h>
//FOSC = 11.0592MHz,12T模式,SMOD=0
#define reload_count_1200bps 0xe8
#define reload_count_2400bps 0xf4
#define reload_count_4800bps 0xfa
#define reload_count_9600bps 0xfd
unsigned char zifuchuan[]="欢迎您!"; //待显示字符。
sbit SWITCH_S7 = P3^4;
void delay(int In,int Out) //延时函数
{
int i,j;
for( i = 0;i < In;i++ )
{
for( j = 0;j < Out;j++ )
{
;
}
}
}
void serial_port_initial(char TH,char TL)
{
SCON = SCON | 0x50; //0101,0000 8位可变波特率,无奇偶校验位
TMOD = TMOD | 0x20; //0011,0001 设置定时器1为8位自动重装记数器
PCON = PCON | 0x00;
TH1 = TH; //设置定时器1自动重装数
TL1 = TL;
ES = 1; //允许串口中断
EA = 1; //开总中断
TR1 = 1; //开定时器1
}
void send_UART(unsigned char i) //发送一节函数
{
ES = 0; //关串 口中断
TI = 0; //清零串口发送完成中断请求标志
SBUF = i;
while(TI==0); //等特数据传送
TI = 0; //清除数据传送标志
ES = 1;
}
void sendc(unsigned char * pd)
{
while((*pd)!='\0') //发送字符串,直到遇到0才结束
{
send_UART(*pd); //发送一个字符
pd++; //移动到下一个字符
}
}
void main()
{
serial_port_initial(reload_count_4800bps,reload_count_4800bps);
while(1)
{
if(SWITCH_S7 == 0)
{
delay(5,200);
if(SWITCH_S7 == 0)
{
while(SWITCH_S7 == 0);
sendc(zifuchuan);
}
}
}
}