2517|3

302

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

用中断将接收的数据按顺序存放在数组中,但用串口将数据发送到电脑中时,顺序就乱了? [复制链接]

本帖最后由 ena 于 2016-2-18 09:58 编辑

volatile unsigned char SZ[5];
volatile char int_flag=0;//int6_flag;
char keydisp[5];

static unsigned char read165(void)
{
   unsigned char i,data1=0;
   for(i=0;i<8;i++)
   {
      data1<<=1;
          CLK_L()
          NOP();
          data1|=PINA&1;
          CLK_H()
          NOP();
   }
   return data1;
}
char key_handle(unsigned char u)
{
        char j;
        forbid_all_o();
                scan_mkey(u);
                secure_delayms(270,0xffff);                                                        
                reset_watchdog();
                if(u==0xf2)
                  {   
                         u=d_getkey(0xffff);
                         if(u==0xf2)
                        {  
                          q_set_run_mode();
                          return 0;
                         }
                  }
               
                for(j=0;j<5;j++)
                {
                  d_st(SZ[j]);
                  reset_watchdog();
              keydisp[j]=ZHB[SZ[j]&0x0f];
                 // reset_watchdog();
                  //d_st(ZHB[SZ[j]&0x0f]);
                 // d_st(keydisp[j]);
                 disp_string(keydisp,5,5,1);        
                 }
                reset_watchdog();               
}
#pragma interrupt_handler int5_INT:7
void int5_INT(void)
{   
    char j;
    set_PNAIN()
    set_SHI_H()
        SZ[int_flag++]=read165();
        if(int_flag>4)
          int_flag=0;
        set_SHI_L()
        set_PNAOUT()
}

最新回复

那你要保证,在显示的时候,不要再中断了,至少在显示的时候不能修改数组的内容。 你可以做个双缓存,用两个数组交替接收数据,这样就不会更改显示了。  详情 回复 发表于 2016-2-18 10:58
点赞 关注
 

回复
举报

6040

帖子

202

TA的资源

版主

沙发
 
应该是中断比较频繁,导致在发送过程中,数组的内容被修改。我也只是猜测,你提供的信息和代码太少了,不足以判断。

点评

ena
本来是做显示用的,就是将中断接收的数据,按数组顺序显示出来。用165接收数据,因为要接收5位数据,而且中间间隔时间很短,所以中断5次后再处理数据。  详情 回复 发表于 2016-2-18 10:33
 
 
 

回复

302

帖子

0

TA的资源

一粒金砂(高级)

板凳
 
lcofjp 发表于 2016-2-18 10:15
应该是中断比较频繁,导致在发送过程中,数组的内容被修改。我也只是猜测,你提供的信息和代码太少了,不足 ...

本来是做显示用的,就是将中断接收的数据,按数组顺序显示出来。用165接收数据,因为要接收5位数据,而且中间间隔时间很短,所以中断5次后再处理数据。

点评

那你要保证,在显示的时候,不要再中断了,至少在显示的时候不能修改数组的内容。 你可以做个双缓存,用两个数组交替接收数据,这样就不会更改显示了。  详情 回复 发表于 2016-2-18 10:58
 
 
 

回复

6040

帖子

202

TA的资源

版主

4
 
ena 发表于 2016-2-18 10:33
本来是做显示用的,就是将中断接收的数据,按数组顺序显示出来。用165接收数据,因为要接收5位数据,而且 ...

那你要保证,在显示的时候,不要再中断了,至少在显示的时候不能修改数组的内容。
你可以做个双缓存,用两个数组交替接收数据,这样就不会更改显示了。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表