51单片机串口程序
#include
//2005-6-1
/****************************************************************
函数功能:串行口发送函数
入口参数:使用函数传递,TxdData(data) 将一个数据放入到发送缓冲区
出口参数:RXDATA[] rxdcon
*****************************************************************/
#define TxDDATAMAX 10 //定义发送缓冲区长度
#define RXDDATAMAX 7 //定义接收缓冲区长度
struct
{
unsigned char txdconl,txdconh; //定义缓冲区指针
unsigned char txdflag,TxdDada[TxDDATAMAX]; //定义缓冲区指针
unsigned char rxdtime;
unsigned char temp[RXDDATAMAX];
}UARTDATA;
unsigned char RXDDATA[RXDDATAMAX]; //接收到的数据,向外传递数据用的
unsigned char RXDCON; //接收到的数据进行
记录
混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载
,数据接收标志
extern unsigned char TIME; //记录全过程的时间信息
static unsigned char Uart_dataup(unsigned char datain) {
datain++;
if(datain >= TxDDATAMAX)
{
datain = 0;
}
return datain;
}
/****************************************************************
将数据按照一定的
格式
pdf格式笔记格式下载页码格式下载公文格式下载简报格式下载
放入到发送缓冲区
*****************************************************************/
void Uart_Tx(unsigned char datain) //向发送数据的程序提供数据接口
{
UARTDATA.txdconh = Uart_dataup(UARTDATA.txdconh);
UARTDATA.TxdDada[UARTDATA.txdconh] = datain;
if(UARTDATA.txdflag == 0) //数据发送还没有启动
{
UARTDATA.txdflag = 1;
UARTDATA.txdconl = Uart_dataup(UARTDATA.txdconl);
SBUF = UARTDATA.TxdDada[UARTDATA.txdconl]; //发现有数据变化就发送数据
}
}
static Uart_ziyuan(void) //根据程序的状态向外发送数据,需要实时的执行
{
static unsigned char time;
if(time != TIME)
{
time = TIME;
if(UARTDATA.rxdtime > 0)
{
UARTDATA.rxdtime--;
}
}
}
/****************************************************************
mega48串行口0初始化
*****************************************************************/
void Uart_init(void)
{
//串行口初始化
SCON = 0x50; //串行工作方式1,多机通讯模式,允许接受
TB8 = 1;
PCON &= 0x7f; //串口波特率加倍为SMOD=0,关闭串行波特率加倍功能
EA = 1;
}
/****************************************************************
函数功能:串行口接收函数
入口参数:使用全局变量传递
出口参数:接收数据使用 RXDATA rxdcon
*****************************************************************/
void Uart_Isr(void) interrupt 4 {
unsigned char i;
static unsigned char con;
if(TI) //发码中断,只清硬件标志
{
TI = 0;
if(UARTDATA.txdconl != UARTDATA.txdconh ) //发行有差值即可启动数据发送
{
UARTDATA.txdconl = Uart_dataup(UARTDATA.txdconl);
SBUF = UARTDATA.TxdDada[UARTDATA.txdconl]; //发现有数据变化就发送数据
}
else
{
UARTDATA.txdflag=0;//数据发送完毕
}
}
if(RI)
{
RI = 0;
if(UARTDATA.rxdtime == 0)
{
con = 0;
}
UARTDATA.rxdtime = 10;
UARTDATA.temp[con] = SBUF;
con++;
if(con >= RXDDATAMAX)
{
con = 0;
for(i=0;i
本文档为【51单片机串口程序】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。