#define SENDBUFSIZE 0x0f
#define BR_19K2 0xfd
#define RMAX 0x10 //必须是2的整数次幂。21ic上看到的,好像是“刘前辈”的创意
unsigned char xdata *cpSendBufPtr;
unsigned char cFront;
unsigned char cBack;
unsigned char sendData;
bit cTranFlag;
unsigned char cTranData;
bit cRecFlag;
unsigned char cRecData;
bit cJudge;
unsigned char temp;
void HardWareInit();
void Uart_Init(void);
void Uart_Init(void);
void COMM_Init(unsigned char cBaudRate, bit bSMOD); //初始化UART
//sfr AUXR = 0x8E;
//MODE COM4 19200,0,8,1;ASSIGN COM4
//波特率为19200Hz,将串口接收到的数据,重新转发出去?
//数据接收速度可能大于发送速度,增加缓冲区,优先保存接收的数据
main()
{
sendData=0;
cFront=0; //
cBack=0;//
cRecFlag=0; //还未接收到数据
cTranFlag=1;//系统复位后,只要队列非空,随时可以发送数据
RS0 = RS1 = 0;// 使用寄存器组0
AUXR = 0x01; //禁止ALE信号输出
EA = 0;
P1 = 0xFF;
P2 = 0xFF;
P3 = 0xFF;
P4 = 0xFF;
ES = 0;
TR1 = 0;
TMOD = TMOD & 0x0f | 0x20;
TH1 = BR_19K2;
TL1 = BR_19K2;////------------------------------------------------------------------------------------------
PCON = 0x80; // 若SMOD=1, 波特率倍增
SCON = 0x50; // 8位
IP = 0x10; // 串口优先中断
ES = 1;
// wifi模块: 波特率19200/38400/57600/115200bps 数据位:8bits 校验位:无 停止位:1bits 流控 :无
EA = 1;
TR1 = 1;
// SBUF=0x12;
while(1)
{
/*
*/// 14 15 16 17 18 19 20 21
if(cRecFlag)
{
temp=((cFront+1)^cBack)&0x0f;
if(temp!=0) //循环链表还没有填满,可以继续添加数据
{
cFront=cFront+1;
cFront=cFront&(RMAX-1);
cpSendBufPtr[cFront]=cRecData;
cRecFlag=0;
}
}
if(cTranFlag)
{
temp=(cBack^cFront)&0x0f;//发送了一个新的数,这一个地方是cBack而不是cBack+1
if(temp!=0) //循环链表非空时可以发送数据
{
cBack=cBack+1;
SBUF=cpSendBufPtr[cBack];
cpSendBufPtr[cBack]=0x00;
cBack=cBack&(RMAX-1);
cTranFlag=0;
}
}
}
}
/*******************************************************************************
// 功能: UART完成数据收发产生中断程序
// 输入参数: 无
// 输出参数: 无
// 返回值: 无
*******************************************************************************/
void COMM_INT() interrupt 4 using 3
{
if(RI)//若正在处理接受的数据,则丢弃SBUF中的数据 ^cRecFlag
{
cRecData=SBUF;
cRecFlag=1;
RI=0;
}
if(TI)
{
cTranFlag=1;
TI=0;
}//发送完成,同时cTranData被赋新值*/
}
上一篇:DAC0832产生三角波与正弦波
下一篇:关于模拟串口的波特率的分析研究
推荐阅读最新更新时间:2024-03-16 15:09
设计资源 培训 开发板 精华推荐
- 【EEWORLD第三十二届】2011年11月社区明星人物揭晓!
- 下载有礼:2017年泰克亚太专家大讲堂第二期: 100G/200G/400G通讯标准发展趋势及解决方案
- 如何利用WEBENCH快速设计?
- 评论有礼|【Discovery 】走进TI毫米波雷达世界 快速获得设计技能
- 有奖直播:英飞凌工业半导体在电机驱动行业中的应用 2020年4月21日 上午10:00-11:30 准时开启!
- Fluke高分辨率热像仪~小细节也不放过!免费体验报名中
- 老T叔的藏书阁——一位老工程师多年的资料积累
- 看是德科技5G精彩专题,让你了解更多关于5G的那些事~ 下载赢好礼!
- EEWorld邀你来拆解(第五期):拆拆排插学评电路