📄 seral_c.c
字号:
//*********************************************************************
//实现功能:用查询法实现单片机接收到电脑发送过来的数据之后把收到的数据
// 发回给电脑
//目标板 :至强51开发板
//开发商 :电子开发网www.dzkf.com (专业提供开发方案,
// 电子元器件网上订购,单片机培训服务)
//对开发板有什么疑问,请上我们的论坛bbs.dzkf.com探讨
//*********************************************************************
#include <reg51.h>
//************************定义函数**************************************
void serial_send(unsigned char send);
unsigned char serial_receive(void);
void timer_init(unsigned char time_num,unsigned char time_GATE,unsigned char time_CT,unsigned char time_mode);
void serial_init(unsigned char serial_scon,unsigned char serial_smod);
//******************************主函数*********************************
//描 述:实现单片机接收到电脑发送过来的数据之后把收到的数据发回给电脑
//入口参数:无
//返回参数:无
//设 计:ycj
//最后修改:时间(2006.5.2) 修改人(ycj)
//*********************************************************************
int main(void)
{unsigned char i;
serial_init(0x51,0);//选择方式1,接受允许,波特率不加倍
timer_init(1,0,0,2);//T1,方式2
//设定波特率为9600b,Fosc=11.0592MHz ,TH1=0xfd,TL1=0xfd
TH1=0xfd;
TL1=0xfd;
TR1=1;//启动T1
RI=0;//清除接收完成位
serial_send('o');
serial_send('k');
while(1)
{
i=serial_receive();//调用接收子程序,接收数据
serial_send(i);//把收到的数据发送出去
}
}
//************************串口初始化函数***************************
//描 述:初始化串行口
//入口参数:unsigned char serial_scon : SCON的设定值
// unsigned char serial_smod : SMOD的设定值(0或1)
//返回参数:无
//设 计:ycj
//最后修改:时间(2006.5.2) 修改人(ycj)
//*****************************************************************
void serial_init(unsigned char serial_scon,unsigned char serial_smod)
{
SCON=serial_scon;
PCON&=0x7f;//清SMOD
PCON|=(serial_smod<<8);
}
//************************定时器初始化函数***************************
//描 述:对定时/计数器初始化
//入口参数:unsigned char time_num 定时/计数器的编号(0或者1)
// unsigned char time_GATE 定时/计数器的门控制位(0或者1)
// unsigned char time_CT 定时/计数器的功能选择位(0或者1)
// unsigned char time_mode 定时/计数器的方式选择(0~3)
//返回参数:无
//设 计:ycj
//最后修改:时间(2006.5.2) 修改人(ycj)
//*******************************************************************
void timer_init(unsigned char time_num,unsigned char time_GATE,unsigned char time_CT,unsigned char time_mode)
{
if (time_num==0)
{
TMOD&=0xf0;
TMOD|=(time_GATE<<4)+(time_CT<<3)+(time_mode);
}
else if (time_num==1)
{
TMOD&=0x0f;
TMOD|=(time_GATE<<8)+(time_CT<<7)+(time_mode<<4);
}
}
//************************串口接收函数***************************
//描 述:用查询法接收串行口数据
//入口参数:无
//返回参数:接收到的8位数据
//设 计:ycj
//最后修改:时间(2006.5.2) 修改人(ycj)
//***************************************************************
unsigned char serial_receive(void)
{
while(RI==0);//等待接收数据
RI=0;//接收到数据,清除接收完毕标志
return(SBUF);//返回接收数据
}
//************************串口发送函数***************************
//描 述:用查询法发送串行口数据
//入口参数:要发送的8位数据
//返回参数:无
//设 计:ycj
//最后修改:时间(2006.5.2) 修改人(ycj)
//***************************************************************
void serial_send(unsigned char send)
{
while(TI!=0);//查询发送是否就绪
SBUF=send;//发送就绪,把要发送的数据发送出去
while(TI==0);//查询发送是否完毕
TI=0;//发送完毕,清除发送完成标志
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -