中断里读函数没有正确执行

前些天弄了一个小开发板(布局和焊接都很垃圾,就不拿出来献丑了,呵呵),其中有一个电子表实验,书中按键查询程序是在中断里执行的,大概三百多行代码,仿真时,按键就是不能被响应。后来终于发现一个函数在中断里没有正确执行出的结果。最终发现,是ht1380的读函数没正确执行。读出的全是零。把它放到主函数里,一下就正确了,而且执行多少次都出正确结果,中断里语句执行时间远小于下次中断到来时间。我看了中断里不能执行的函数,这个读函数应该没有那种限制啊。

uchar read(){
  uchar i,m;
  for(i=0;i<8;i++){
    
    iodata = 1;
    m = m>>1;
    if(iodata)
      m = m|0x80;
    sclk = 1;
    _nop_(); 
    _nop_();
    sclk = 0;
     
  }
  return m;
}
uchar readbyte(uchar m){
  rst = 0;
  _nop_(); 
  _nop_();
  sclk = 0;
  _nop_(); 
  _nop_();
  rst = 1;
  write(m);
  m = read();
  _nop_(); 
  _nop_();
  rst = 0;
  return m;
}
中断
void time0() interrupt 1 using 1{
  TL0 = 37896%256;
  TH0 = 37896/256;
  disdata[0] = (readbyte(0x81))%16;
  disdata[2] = (readbyte(0x83))%16;
  disdata[4] = (readbyte(0x85))%16;
}
不管读时,分,还是秒,读哪个,哪个变零。
终于改用查询去读写,中断只进行显示。
不知小弟之言可否抛砖引玉啊,呵呵。。。
 
网友回复:既然可以仿真就在中断里面设个断点,看看到底怎么回事,怀疑根本没有进中断。还有显示别在中断里面,中断一般不宜做比较费时的工作,也就是说中断程序应该越简单越好。你如果想实现定时刷新,可以在中断里面置标志位,然后在中断外面显示,并把标志位清零。对于你这样的应用影响应该也不大,但这是一种比较好的习惯!
永不止步步 发表于11-30 09:43 浏览65535次
分享到:

已有0条评论

暂时还没有回复哟,快来抢沙发吧

添加一条新评论

只有登录用户才能评论,请先登录注册哦!

话题作者

永不止步步
金币:67417个|学分:363741个
立即注册
畅学电子网,带你进入电子开发学习世界
专业电子工程技术学习交流社区,加入畅学一起充电加油吧!

x

畅学电子网订阅号