专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
51单片机
求教LPC934串口收发问题,问题有点奇怪!
2020-02-04 09:23
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
51单片机
5657
4
4
用LPC934做了个收转发的程序,上位机下发数据给934,934在接收中断里收数据,保存到缓冲区,在主程序里将收到的数据再转发给上位机,现在碰到的问题是,明明上位机下发了180个字节,但实际收到的转发数据却只有143个。934的程序已经精简到最小,只开了一接收中断,发送是放在主程序里,用的查询方式,缓冲区用来平衡收发速度,缓冲区调整大小也没有效果。
整了两天了,实在是找不到原因。求解,求指点!
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
4条回答
abuffalo
2020-02-04 12:34
本帖最后由 abuffalo 于 2012-3-29 19:43 编辑
void UartInit(void)
{
P1M1 &= 0xFE; // For TxD = P1.0 Push-Pull (M1=0, M2=1)
P1M2 |= 0x01;
SCON = 0x50; // select BRG as UART Baud Rate Gen
SSTAT = 0x60; // separate Rx / Tx interrupts
BRGR0 = 0xB0; // setup BRG for 38400 baud @ 7.373MHz internal RC oscillator
BRGR1 = 0x00;
BRGCON = 0x03; // enable BRG
ESR = 1; // enable UART interrupt
//EST = 1;
}
uint8 RcvBuffer[30];
uint8 WritePtr = 0;
uint8 ReadPtr = 0;
void UART_RX_ISR(void) interrupt 4 // 接收中断
{
RI = 0; // 清接收标志位为0
RcvBuffer[WritePtr++] = SBUF;
if (WritePtr == 30) WritePtr = 0;
}
extern uint8 RcvBuffer[];
extern uint8 WritePtr;
extern uint8 ReadPtr;
void main(void)
{
// IO初始化
IOInit();
// Uart初始化
UartInit();
// 开中断
EA = 1;
while(1)
{
if (ReadPtr != WritePtr)
{
TI = 0;
SBUF = RcvBuffer[ReadPtr++];
while (!TI);
if (ReadPtr == 30) ReadPtr = 0;
}
}
}
加载中...
查看其它4个回答
一周热门
更多
>
相关问题
【东软载波ESF0654 PDS开发板活动】开箱
1 个回答
东软载波ESF0654 PDS开发板外部中断
1 个回答
东软载波ESF0654 PDS开发板高级控制定时器AD16C4T
1 个回答
用串口调试助手为什么只能在hex模式接收发送而在文本模式不行
9 个回答
触摸芯片SC02B/SC04B在地砖灯的设计方案
1 个回答
相关文章
51单片机与蓝牙模块连接
0个评论
51单片机的硬件结构
0个评论
基于51单片机的无线遥控器制作
0个评论
51单片机 AD转换
0个评论
51单片机数码管递增显示
0个评论
如何实现对单片机寄存器的访问
0个评论
基于51单片机的指纹密码锁
0个评论
×
关闭
采纳回答
向帮助了您的知道网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
51单片机
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
×
付费偷看金额在0.1-10元之间
确定
×
关闭
您已邀请
0
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
void UartInit(void)
{
P1M1 &= 0xFE; // For TxD = P1.0 Push-Pull (M1=0, M2=1)
P1M2 |= 0x01;
SCON = 0x50; // select BRG as UART Baud Rate Gen
SSTAT = 0x60; // separate Rx / Tx interrupts
BRGR0 = 0xB0; // setup BRG for 38400 baud @ 7.373MHz internal RC oscillator
BRGR1 = 0x00;
BRGCON = 0x03; // enable BRG
ESR = 1; // enable UART interrupt
//EST = 1;
}
uint8 RcvBuffer[30];
uint8 WritePtr = 0;
uint8 ReadPtr = 0;
void UART_RX_ISR(void) interrupt 4 // 接收中断
{
RI = 0; // 清接收标志位为0
RcvBuffer[WritePtr++] = SBUF;
if (WritePtr == 30) WritePtr = 0;
}
extern uint8 RcvBuffer[];
extern uint8 WritePtr;
extern uint8 ReadPtr;
void main(void)
{
// IO初始化
IOInit();
// Uart初始化
UartInit();
// 开中断
EA = 1;
while(1)
{
if (ReadPtr != WritePtr)
{
TI = 0;
SBUF = RcvBuffer[ReadPtr++];
while (!TI);
if (ReadPtr == 30) ReadPtr = 0;
}
}
}
一周热门 更多>