打印

《一种全新的串口接收方案》

[复制链接]
1860|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
bhsdlmj|  楼主 | 2009-12-14 11:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 bhsdlmj 于 2009-12-15 08:04 编辑

采用仿照MODBUS方法!
编译器用的是keil


把接收到的1帧(帧的长度固定)放到结构体Frame里面(结构体里面的成员都是8字节的
 

全局变量 bit   Flag_reveivedatamanymany = FALSE;

void main (void)
{
      if (Flag_reveivedatamanymany) {
                   //do something
      }
}

void UART_IRQHandler(void) interrupt PI_Order_UART
{
      static uint8_t *ptr = 结构体的首字节地址;
     static bit pointerValid_OK = FALSE;//指针有效的含义就是指针指向了结构体的内部

    if (RI) {
         RI = FALSE;
         if (定时器停止计数) {
                ptr = 结构体的首字节地址;
         }
         
         pointerValid_OK =  (结构体首字节地址 <= ptr <= 结构体末尾字节地址)
         if (pointerValid_OK) {
                 pointerValid_OK = FALSE;
                 *ptr = SBUF;   
                 ptr++;
         }

         装载计数器初值;
         启动定时器;
    }


     else if (TI) {
              TI = FALSE;
     }

}




void TIM_IRQHandler(void) interrupt PI_Order_TIM
{
        if (TF) {
                TF = 0;

                 停止定时器;

                 Flag_reveivedatamanymany = TRUE;

         }
}

大家帮忙看看我写的有没有什么漏洞或需要改进的地方
评分
参与人数 1威望 +1 收起 理由
xlsbz + 1

相关帖子

沙发
bhsdlmj|  楼主 | 2009-12-14 13:36 | 只看该作者
嗨  只有人看,没有人顶啊

使用特权

评论回复
板凳
xlsbz| | 2009-12-14 14:24 | 只看该作者
很好,我再研究研究.......

使用特权

评论回复
地板
xlsbz| | 2009-12-14 21:55 | 只看该作者
楼主的方法似乎不行吧:dizzy:

使用特权

评论回复
5
宇容创行| | 2009-12-15 09:11 | 只看该作者
pointerValid_OK 这个是怎么判断的?

没看出算法上有什么好

使用特权

评论回复
6
hotpower| | 2009-12-15 13:25 | 只看该作者
没看出来新在什么地方~~~

使用特权

评论回复
评分
参与人数 2威望 +2 收起 理由
bhsdlmj + 1
xlsbz + 1
7
新好男孩| | 2009-12-15 14:32 | 只看该作者
就是一个超时而已

使用特权

评论回复
8
bhsdlmj|  楼主 | 2009-12-15 15:54 | 只看该作者
6# hotpower

大叔,我这个程序有啥漏洞么?

使用特权

评论回复
9
xlsbz| | 2009-12-15 22:07 | 只看该作者
你这种方法很不咋地啊!!! 需要改进!

:lol

使用特权

评论回复
10
yixiao2000| | 2009-12-16 15:05 | 只看该作者
本帖最后由 yixiao2000 于 2009-12-16 15:06 编辑

方法是可以的,也是常用,不算全新的

使用特权

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

本版积分规则

55

主题

351

帖子

0

粉丝