火急: C语言--串口读取数据时的问题(高分100分)解决以上给分

liyongbo 2006-09-05 02:04:38
我在使用C语言写串口读取时,使用中断方式,使用下面函数:
unsigned char read_char(void)
{
unsigned char unch;
if(buffout!=buffin)
{
unch=Buffer[buffout];
buffout++;

if(buffout>=BUFFLEN)
buffout=0;
return (unch);
}
else
return (0xFF);
}

在主函数中用死循环读取:
do
{
RevCharCom1=read_char();
if(RevCharCom1!=0xFF)
{

}



}while(1);

但是我有时,串口返回的是0xFF,这时也被过滤掉;

我把函数类型改成 int read_char(void) ;函数中改为 return(-1)
在读时返回无数个 FF.

怎么解决这个问题呀? 谢谢啦!
...全文
394 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
liyongbo 2006-09-05
  • 打赏
  • 举报
回复
跟大家说的一样,函数的返回值类型不对!改大一点int型就可以了!


谢谢了!
lonelyair 2006-09-05
  • 打赏
  • 举报
回复
说了是中断函数
unsigned char read_char(void) --interrupt 0
liyongbo 2006-09-05
  • 打赏
  • 举报
回复

感谢兄弟们!问题解决了!

我要分分了!
tailzhou 2006-09-05
  • 打赏
  • 举报
回复
那你的函数不能这样定义的。要象bisc_sunny(总是当时携手处,游遍芳丛)那样处理
tailzhou 2006-09-05
  • 打赏
  • 举报
回复
你“那么会读无数个 0xFE”是什么意思??

总不能是说:
if(RevCharCom1!=0xFE)
{
//这里读到RevCharCom1==0xFE??
}

吧?
liyongbo 2006-09-05
  • 打赏
  • 举报
回复
我接收的东西是0--FF之间的数,所以不能过滤掉任何一个.

liyongbo 2006-09-05
  • 打赏
  • 举报
回复
没内容的话, 我在循环里是不是这样写:
do
{ RevCharCom1=read_char();
if(RevCharCom1!=0xFE)
{

}
}
这样的话, 我也把0xFE过滤掉了呀?


tailzhou 2006-09-05
  • 打赏
  • 举报
回复
缓冲区读完了的时候,buffout==buffin,会一直执行return(-2)呀;
格兰特杨 2006-09-05
  • 打赏
  • 举报
回复
没那么复杂吧...
格兰特杨 2006-09-05
  • 打赏
  • 举报
回复
bool read_char(char *s)
{
unsigned char unch;
if(buffout!=buffin)
{
unch=Buffer[buffout];
buffout++;

if(buffout>=BUFFLEN)
buffout=0;
*s = unch;
return true;;
}
else
return false;
}

do
{
if (read_char(&RevCharCom1) != false)
{
...
}
}while(1);

liyongbo 2006-09-05
  • 打赏
  • 举报
回复
RevCharCom1的类型是unsugned char 的!
tailzhou 2006-09-05
  • 打赏
  • 举报
回复
那么会读无数个 0xFE

这是正常的吧:缓冲区没内容了。
tailzhou 2006-09-05
  • 打赏
  • 举报
回复
你的RevCharCom1的类型是unsugned char还是int??
liyongbo 2006-09-05
  • 打赏
  • 举报
回复
RevCharCom1的类型是unsigned char类型.
如果改为 return(-2) 那么我在读串口时
if(RevCharCom1!=-2)

那么会读无数个 0xFE

为什么?
tailzhou 2006-09-05
  • 打赏
  • 举报
回复
因为他的函数签名改成了 int read_char(void)
所以 -1跟0xff 还是有区别的。0xff成了255;
jixingzhong 2006-09-05
  • 打赏
  • 举报
回复
恩,
这个还是有一点小问题需要说一下:

unsigned char read_char(void)
函数返回 unsigned char,
然后你return一个负数 ...

改成 return 0 吧 ...
jixingzhong 2006-09-05
  • 打赏
  • 举报
回复
你改成 return(-2)
其他的都行 ...
jixingzhong 2006-09-05
  • 打赏
  • 举报
回复
函数中改为 return(-1)

..
-1 就是 0xFF
tailzhou 2006-09-05
  • 打赏
  • 举报
回复
RevCharCom1的类型?
liyongbo 2006-09-05
  • 打赏
  • 举报
回复
高手请回呀!
【ACDC微电网的能源管理策略】微电网仿真模型包括光伏发电机、燃料电池系统、超级电容器和直流侧的电池,包括电压源变换器(VSC),用于将微电网的直流侧与交流侧相连接Simulink仿真实现内容概要:本文介绍了一个用于ACDC微电网能源管理策略的Simulink仿真模型,该模型集成了光伏发电机、燃料电池系统、超级电容器和直流侧电池等多种布式能源,并通过电压源变换器(VSC)实现微电网直流侧与交流侧的连接。文档重点展示了微电网中多能源协调控制与能量管理的仿真方法,涵盖系统建模、能量调度策略设计及动态响应析,旨在提高微电网运行的稳定性与能效。此外,文中还提及多种相关电力系统仿真案例,突出其在科研与工程实践中的应用价值。; 适合人群:具备一定电力系统、新能源技术及Simulink仿真基础的科研人员、电气工程专业研究生及从事微电网、布式能源系统设计的工程技术人员。; 使用场景及目标:①用于微电网多能源系统建模与仿真,掌握VSC在交直流互联中的作用;②研究微电网能量管理策略,优化能源调度与系统稳定性;③作为科研项目或毕业设计的技术参考,支撑高水平论文复现与创新研究。; 阅读建议:建议结合Simulink实际操作,逐步构建模型并调试参数,重点关注各能源单元的控制逻辑与VSC的动态响应特性,同可参考文中提到的优化算法与控制策略进行扩展研究。

70,034

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧