打印

不错的**!!!

[复制链接]
楼主: jxyhome
手机看帖
扫描二维码
随时随地手机跟帖
81
BitFu| | 2009-12-16 15:43 | 只看该作者 回帖奖励 |倒序浏览
NO,NO
要用FIFO
要用CRC

使用特权

评论回复
82
zhy433| | 2009-12-16 16:11 | 只看该作者
小顶一下

使用特权

评论回复
83
xfgood3872| | 2010-4-7 20:41 | 只看该作者
顶顶

使用特权

评论回复
84
michaelpan| | 2010-6-7 21:29 | 只看该作者
不错,挺好的

使用特权

评论回复
85
刘前辈| | 2010-6-8 13:17 | 只看该作者
本帖最后由 刘前辈 于 2010-6-8 13:47 编辑
static void UartInterruptService(void) interrupt 4
{
    ES = 0;
    RI = 0;
    uart_process(SBUF);
    ES=1;
}


LZ的开篇确实值得质疑,上面66楼网友讲的正根:“ES不可能自己抢占自己。”串口中断硬件内部已经设计好了这种关系:(Intel硬件设计师是干什么的?如果我是硬件设计师,我怎么会把这种关系留给软件设计员?)——首次ES中断发生并进入ISR之后,必然阻断后面的同级中断(如若有的话)并使其进入中断队列排序等待,只有当前ISR完成,RETI 退出串口中断程序之后,此前纪录的、位于队列中的ES=1才会再次触发串口中断。所以,LZ的开篇程序是不是一开始就没写好?后面.....

static void UartInterruptService(void) interrupt 4
{
  //ES = 0;  
    RI = 0;
    uart_process(SBUF);
  // ES=1;
}

其实我最近一直不好处理的问题是:你在一帧数据接收过程中,如果半中间突然应该来的数据中止不来了,怎么办?你的while(RI !=1) ; RI=0;该如何处理才不至于死等?才可能尽快退出当前状态?——你如何尽快感知到通信失效?我知道是利用T0超时,可是怎么写才简单?接收100字节一帧,就要设置100次T0初值?太呆板了吧。(当然可以用宏指令)如若每接收到第50字节时就发生中止或错误接收现象,只好一帧重新来过,以前的都白干!
如何才能提高通信系统可靠性?

使用特权

评论回复
86
andloani| | 2010-9-28 20:46 | 只看该作者
mark下串口通信,最近正在搞这个。

使用特权

评论回复
87
haolaishi| | 2011-9-10 21:14 | 只看该作者
MARK

使用特权

评论回复
88
dqyubsh| | 2011-9-10 23:01 | 只看该作者
占位,标记。

使用特权

评论回复
89
DownCloud| | 2011-9-11 10:42 | 只看该作者
不怎样。

使用特权

评论回复
90
afei9527| | 2011-9-12 09:20 | 只看该作者
加裤,置顶一周

使用特权

评论回复
91
TRUE_ARM| | 2011-9-12 15:11 | 只看该作者
这是一个非常糟糕的程序:
1,关中断时间太长,
2,中断解析协议?学生的功课。

使用特权

评论回复
92
hf5542| | 2011-9-13 22:41 | 只看该作者
顶串口!!!

使用特权

评论回复
93
baiyunfei.k.f| | 2011-12-27 10:32 | 只看该作者
学习了

使用特权

评论回复
94
abtc1130| | 2012-11-20 21:27 | 只看该作者
我最近做的程序里也在用串口!我是把数据的接收判断全放在中断中完成的!用状态机,完成一个菜执行下一个数据的接收!用SWTITH语句不是很好!被LZ 的程序搞糊涂了

使用特权

评论回复
95
半日浮生| | 2012-11-21 09:53 | 只看该作者
好,学习下

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则