7178|37

95

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

51单片机多中断问题--工业控制 [复制链接]

1、我正在做一个项目  在对单片机编程时使用了T0(用于显示),T1(用于顺序控制),T2(用于产生波特率),串口中断(通信接收和发送)。

2、AD采集需要采集三个字节,共需要5400微妙、采集时关了总中断(不关中断则采不到数据)

3、问题是:主程序不断的进行AD采集,数据处理,平时没有通信,但是在有串口中断的情况下,数码管显示抖动,显示数据不对
           有时通信还不能收和发,请各位多多指教!!!!!!!!!!!!!!!
            

最新回复

这一版块,太没人气了,是不是大家都成大侠了 如果成大侠了,也常回家看看嘛,家里太冷清了 据说努力顶帖也是一种美德,但我只想大家常回家看看 毕竟每天都有新手需要帮忙,而我能帮的只能是把帖子顶起来  详情 回复 发表于 2008-4-4 01:09
点赞 关注

回复
举报

69

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
最简单的办法 就是设置T0的中断优先级为高

 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
硬件没设计好
软件也没设计好
ad采集可在显示和通信的间歇进行
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

4
 
软件结构没想清楚的缘故。
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

5
 
ad采集可在显示和通信的间歇进行

请问怎么实现这个功能?
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

6
 
简单点可以设标志实现
复杂的可以用状态机
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(中级)

7
 
T0作为显示中断的话。。

你的显示器不应该会抖。

逻辑控制最好放在MAIN里面
然后,协调各功能的工作

这个逻辑还是少的,好好调试一下。。。

 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(中级)

8
 
1、 AD采集一个字节需要1.8MS(这个时间是我试出来的); 显示中断2MS;顺序控制(T1中断2MS)

2、 在进行AD采集一个字节的过程中关掉了显示中断,采完后在开显示中断,接着循环再采两个字节,这时AD采集完成。

    采集速率100ms一次。

3、 怎样才能解决AD采集时,不受中断的影响呢?

    今天我又试了一下,程序简短或加长,数码管都会闪烁,这是不是说明AD采集不稳,是软件逻辑不对吗?

    请大家帮我想想办法。不胜感激!!!!!!!!


   
 
 
 

回复

90

帖子

0

TA的资源

一粒金砂(初级)

9
 
其实显示没必要你这么做
需要改变的时候才刷新,不要实时刷
电路改成595驱动
ad采集用中断方式不要用查询方式
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

10
 
软件结构好好调整一下就可以了,中断程序越短越好,最好是只置标志。执行部分全部放到主循环里,判断标志来执行。
 
 
 

回复

94

帖子

0

TA的资源

一粒金砂(初级)

11
 
俺来个代码看懂了就解决啦!



  1. while(1){ //main loop
  2.       if(count>200){
  3.         display();
  4.         count=1;
  5.       }
  6.       count++;

  7. }
复制代码
 
 
 

回复

88

帖子

0

TA的资源

一粒金砂(初级)

12
 
这里太没有人气了,是我们不够活跃,还是搞这行的人太少了呢?
我狂顶!
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

13
 
AD的设计肯定有问题,可以把硬件图及程序流程图发上来看看。
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

14
 
使用动态显示吧,所以要不停的刷屏,呵呵。可以用静态的显示,这样操作应该可以简单解决你显示出错的问题。
要查出问题的话恐怕还是要分析一下自己的代码,各功能关闭了看看,到底是那些功能相互干扰。
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

15
 
10楼的思路正确,显示过程没必要占用一个中断。写在主循环中即可。
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

16
 
1、中断程序中尽量少的代码;
2、划分适当的优先级;
3、显示和通信只要不让人感觉到明显的延迟就可以了;

建议:
1、显示放到主循环里,不要放在中断中,1~2秒的延迟用户感觉不到;
2、串口中断只负责接收一个字节数据,并放到缓冲区里,在主循环中处理,发送时逐字节发送;
3、AD和具体的顺序控制,这个我不清楚,但是优先级应该是比较高的,你自己权衡;
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

17
 
1  AD 为什么必须关中断?可能你的设计有问题!
2  T1中断程序中尽量少的代码,置一个标志后返回,具体工作放到主程序中
3  显示用高优先级中断,保证显示稳定,必要时用汇编代码提高效率
4  串口中断只接收或发送一个字节,多字节处理放到主程序中

具体可以贴出部分程序让大家帮你分析
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

18
 
1、显示:动态显示   595驱动电路
2、A/D芯片CS5513
3、通信:1)接收:只管接收,接收完成后置标志马上转为发送状态,到主程序中解析通信协议,把要发送的数据写到发 送缓冲区
         2)发送:一个字节一个字节发送,直到发送完成,再转为接收状态


疑问:
      1、动态扫描时可以把显示放到主程序中吗?不用中断可以吗?
      2、还是老问题,A/D不受中断影响该怎么做?
         我写的AD时序可能有问题,有用过这个芯片吗?
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

19
 
1、动态扫描时可以把显示放到主程序中吗?不用中断可以吗?
当然,主程序的循环速度是很高的。甚至远高于你的T中断。没看到10楼的仁兄还加了个计数减速吗,主程序的缺点就是循环时间不统一,每次可能差几百或者几十个CPU时钟,但这个不统一肉眼根本感觉不出来。没有精确时间要求的,都可以在主循环中处理。省掉一个中断,何乐而不为。
教科书大部分都说显示要使用T中断,那是要表明T中断起作用了,并不是一定要你用T中断来做显示。
当然,使用专用显示驱动电路也可以,上面几个仁兄已经说了电路型号了。

2、还是老问题,A/D不受中断影响该怎么做?
         我写的AD时序可能有问题,有用过这个芯片吗?
这个我暂时不知道。
 
 
 

回复

96

帖子

0

TA的资源

一粒金砂(初级)

20
 
各位说的很有道理啊  让小弟的思路开阔了不少

现在显示的问题已经搞定了,但是,A/D采集的过程当中仍然需要关掉中断,这样抗干扰能力一定要减弱,愁啊

AD采集用中断方式该怎么做啊?
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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