打印
[程序源码]

STC单片机串口通信

[复制链接]
1060|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
花儿一样ha|  楼主 | 2019-6-20 16:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
QUEUE que;

unsigned int pos =0;

/*void delayms(int z)
{
        uint x,y;
        for(x=z;x>0;x--)
            for(y=110;y>0;y--);
} */


void Uart_IRQHendler() interrupt 4
{
    uint ucTemp;
    EA=0;

    if(RI == 1) //当硬件接收到一个数据时,RI会置位
   {
       RI = 0; //接收到一位数据后就让RI为零,关闭中断
       ucTemp= SBUF; //保存接收到的数据
       if((que._head+1)%QUEUE_MAX_SIZE!=que._tail)
      {
        que._data[que._head]=ucTemp;
        que._head=(que._head+1)%QUEUE_MAX_SIZE;
      }



   }
   EA =1;
}






int main(void)
{



    uint recv_data[20]={0};
    uint size =0;
    uint i,j,temp;


    P3M1&=0xFC;
    P3M0|=0x03;//P3.0 P3.1
    Uart1Init();

    queue_reset();
    //delayms(10);





   while(1)
   {      



      if(queue_size(que)>0)
         {
             for(i=0;i<queue_size(que);i++)
              {
                 if(que._tail!=que._head)//非空
                 {
                     temp = que._data[que._tail];
                     que._tail= (que._tail+1)%QUEUE_MAX_SIZE;
                 }//此函数是从队列中取一个数据,而且从队尾开始取

                 if(pos<QUEUE_MAX_SIZE)

                     recv_data[pos++] = temp;//将队列中的数据均取出到这个数组中

                 else

                    pos =0;

                 if(temp==0x0A)
                 {
                      size = pos;
                      pos = 0;
                 }
                 else
                     size = 0;
                // Uart2Data_SendByte(temp);
             }

             if(size>0)
             {

                 for(j=0;j<size;j++)
                 {
                     Uart1Data_SendByte(recv_data[j]);
                 }
                 size =0;

             }
         }

}


}  我想利用这个程序实现不定长数据的接收,先把接收的数据存入到队列中,然后从队列中取数据,再发送给上位机,我在用串口调试助手发送数据时,在接收缓冲区没有接收到数据,不知道程序那里的问题

使用特权

评论回复

相关帖子

沙发
xuyaqi| | 2019-6-21 10:02 | 只看该作者
参考一下 modbus 通信例程。

使用特权

评论回复
板凳
7456| | 2019-6-22 18:20 | 只看该作者
EA要写在主函数里面,写在中断里面没用,因为进不去中断,只有在开启EA的情况下才能进中断。

使用特权

评论回复
评论
花儿一样ha 2019-7-6 08:34 回复TA
真的是研究了大约一个星期,实在是不知道怎么回事 
花儿一样ha 2019-7-6 08:34 回复TA
您好。我的这个程序按照您说的把这个写在主函数里,好用了,但是又出现了别的问题,可以请教一下您吗,我又发了新帖子,希望您能抽空看一下,真的谢谢您啦 
地板
yunie0608| | 2019-6-24 13:44 | 只看该作者
加Q细聊:2593903262

使用特权

评论回复
评论
花儿一样ha 2019-7-6 08:32 回复TA
您好,刚加了您的qq,我那个问题基本解决了,但是这个程序又出现了别的问题 
5
XLazyDog| | 2019-8-14 10:13 | 只看该作者

推荐一款安卓手机上用的 串口调试工具SPU,亲测支持几乎所有型号的USB转串口模块,甚至Arduino。文本和Hex码两种模式,支持定时重发,可定义快捷按钮,设置波特率等。如果调试AT指令的话,还可以自动添加0A 0D的换行符。感兴趣可以在手机应用市场搜索安装试试

使用特权

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

本版积分规则

6

主题

31

帖子

0

粉丝