搜索
bottom↓
回复: 2

STC串口数据校验问题

[复制链接]

出70入0汤圆

发表于 2016-8-31 07:24:17 | 显示全部楼层 |阅读模式
原来的程序是单片机收到数据后直接判断接收到数据的结果,没有数据返回给上位机确认。

导致有时候上位按的按键没有办法执行,或是一个按键代码要发两三次才有效果。

现在想改成需要返回数据给上位机数据,没有收到就重发的!

下面是三个主要函数:
STC 12C 5a62S2 芯片

void UartInit(void)                //9600bps@4MHz   串口初始化函数 用软件生成的!
{
        PCON &= 0x7F;                //??????
        SCON = 0x50;                //8???,?????
        AUXR |= 0x04;                //?1T
        BRT = 0xF3;                //?????????????
        AUXR |= 0x01;                //??1?????????????????
        AUXR |= 0x10;                //??????????
  ES=1;
  EA=1;

}

void send1()      //发送8个字节函数  
{
unsigned char i;
ES=0;
for(i=0;i<8;i++)
{   delay1ms(1) ;
           SBUF=Rec_buf[i];
while(!TI);
TI=0;
}
ES=1;
}

                        
void uart_receive() interrupt 4          //接收中断函数
{

unsigned char ch;

  /************
if((Ctrl_buf[6]!=0xa1)||(Ctrl_buf[6]!=0xa2)||(Ctrl_buf[6]!=0xb1)||(Ctrl_buf[6]!=0xb2))
{ Ctrl_buf[6]=0x00;
  }
***********此段是因为按键时下次按重要重复一次上次的按键,第二次按键才能正确执行本次按键,所以自作聪明清了一次Ctrl_buf[6]************/

if(RI)
{
ch=SBUF;

if(Rec_flag==1)
{
Ctrl_buf[Rec_count]=ch;
Rec_count++;

}

if(ch==0xaa)   //0xaa ,8个字节数组最后一位,这个判断是不是很不合理,第一个数组会被丢掉!
{Rec_flag=1;
Rec_count=0;
banduan();//这里收完8八字节后,就作报文判断。
/******************************
  A处 :            //原来打算在这里加上返回给上位机的数据的,结果,返回的 都 是八个00 .
Rec_buf[0]=Ctrl_buf[0]//这里重装八个收到的数给发送数组
Rec_buf[1]=Ctrl_buf[1]
Rec_buf[2]=Ctrl_buf[2]
Rec_buf[3]=Ctrl_buf[3]
Rec_buf[4]=Ctrl_buf[4]
Rec_buf[5]=Ctrl_buf[5]
Rec_buf[6]=Ctrl_buf[6]
Rec_buf[7]=Ctrl_buf[7]
send1();
*************************************/
}
}
RI=0;

}


void banduan ()     //判断函数  
{   
      
        if(Ctrl_buf[6]==0xa1)
        {keynum=0xa1;                   //  如果收到Ctrl_buf[6]=0xa1 就是上升键
         up_key();
          
        }



问题:程序哪里不合理?需要在哪个地方加上收到数组后,原封发回给上位机,使上位机不再重发,目的是,为了数据检查正确。


出0入0汤圆

发表于 2016-9-1 00:08:01 | 显示全部楼层
把单片机当电脑用。。。。。。。。。。

出70入0汤圆

 楼主| 发表于 2016-9-1 06:35:38 | 显示全部楼层
devcang 发表于 2016-9-1 00:08
把单片机当电脑用。。。。。。。。。。

我觉得还是实现方法的问题,
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-12 00:00

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表