打印

求助一个关于串口的程序

[复制链接]
837|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yzcook|  楼主 | 2018-6-6 15:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我想把它改成 我在串口助手发多少个字节 它就接收多少个字节并返回到串口助手上 返回的格式为
发送 1 2 3  返回 31 32 33
现在这个程序是必须要每次发送四个字节才行,如果每次发送一个字节 则要发送四次才能接收

相关帖子

沙发
yzcook|  楼主 | 2018-6-6 15:14 | 只看该作者
程序如下  麻烦大神帮我想想


#include <stc12c5a32s2.h>
#include "usart.h"
#include "delay.h"

#include<intrins.h>
#define uchar unsigned char
#define uint  unsigned int


uchar num = 0;
uchar flag=0;
uchar i;
uchar n;
uchar RBuf[4];

/*------------------主程序--------------------*/
void main(void)
{       
//        uchar key ;
        Delay1ms();
       
        ConfigUART();
        lcd_init();
        lcd_clr();
//        key = Key_Scan();
        dprintf(16,0,"欢 迎 光 临",0);
       

        while(1)
        {       

                if(flag == 1)//当接收到数据
                {
                        ES = 0;//关闭串口中断
                        for(i=0;i<4;i++)
                        {
                                SBUF = RBuf[i];
                                while(!TI); TI = 0;
                        }                                                       
                        ES = 1;
                        flag = 0;
                        num = 0;

                }


}




void Uart_Isr() interrupt 4 using 1
{       
        if(RI)
        {       
          RBuf[num] = SBUF;
                while(!RI);
                RI = 0;
                num++;
        }
        if(num == 4)  flag = 1;

       

}



  













使用特权

评论回复
板凳
gx_huang| | 2018-6-6 15:16 | 只看该作者
估计是接收程序问题,要接收到4个字节才处理。
有些高级一点的芯片,内部有FIFO,可以设置来一个字节就产生中断,可以设置字节长度的。

使用特权

评论回复
地板
yzcook|  楼主 | 2018-6-6 15:36 | 只看该作者
gx_huang 发表于 2018-6-6 15:16
估计是接收程序问题,要接收到4个字节才处理。
有些高级一点的芯片,内部有FIFO,可以设置来一个字节就产生 ...

这个程序就是要接收到4个字节才处理。我想把他改为不管接收多少个 只要接收结束 就返回

使用特权

评论回复
5
Cjy_JDxy| | 2018-6-6 16:34 | 只看该作者
if(flag == 1)//当接收到数据
                {
                        ES = 0;//关闭串口中断
                        
                                SBUF = RBuf[0];
                                while(!TI); TI = 0;
                                                                           
                        ES = 1;
                        flag = 0;
                        num = 0;

                }

使用特权

评论回复
6
gx_huang| | 2018-6-6 16:35 | 只看该作者
改为接收1个字节返回一个字节,很容易呀。
这个贴的程序架构不好,发送还是查询发,且关闭接收中断的,会丢数据的。

使用特权

评论回复
7
chineseboyzxy| | 2018-6-6 16:56 | 只看该作者
做过一个测试串口的汇编程序,以收到#字符做为标记,不管多少个字符,收到#号,直接全部返回。

使用特权

评论回复
8
fengfeng的恒| | 2018-6-6 18:01 | 只看该作者
本帖最后由 fengfeng的恒 于 2018-6-6 18:06 编辑

直接在接收中断里发就好了,收到一个数+0x30返回去啊。不要等待,即收即发多简单啊。
void Uart_Isr() interrupt 4 using 1
{        
        uchar dat;
        if(RI)
        {        
          dat = SBUF;
          RI = 0;
          TI = 0;
          SBUF = dat;
        }
}

使用特权

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

本版积分规则

28

主题

84

帖子

0

粉丝