stc12的最小系统板,用adc采集东西和超声波采集距离发现adc可以用超声波的反应变的非常迟钝,有什么办法可以调试的吗

最佳答案

  • MOP 发表于2017-09-05

    1. 超聲波單I/O口可以用外部中斷方式來寫

    2. ADC也可用中斷方式來讀值

    中斷方式將不會有Busy waiting的方式,更具彈性不會卡住


    回答点赞:   宫梓萱 举报 评论 1

其他答案

  • xiefy21 发表于 2017-09-05

    楼主,1.检查下两个有没有复用的IO;2.检查下ADC采集中有无较长时间的等待阻塞,造成超声波MCU执行时间很短且执行的频率过低。

    回答点赞:   宫梓萱 724649614@qq.co 举报 评论 2

  • 445465396@qq.com 发表于 2017-09-07

    ADC采用中断的方式来读取,在中断中读取出ADC值即可(中断不推荐做太多耗时处理),在main函数while中处理ADC的值。

    超声波使用Timer中断来翻转IO口发送。

    按照楼主的说法,应该是在处理时使用了延时或者等待等处理方式,实际应用中最好将模块分时处理,保证每个模块都有相应的处理时间,如果一直在等待其中一个模块,那另一个模块的功能会收到影响。尽量使用单片机的外设去实现。

    回答点赞:   宫梓萱 724649614@qq.co 举报 评论 2

  • 瞎折腾 发表于 2017-09-05

    看看你的程序,你是不是用的等待adc转换成功读取 啊?在超声波程序里关掉ADC的中断相应,用查询的方式。我估计你是ADC打断了超声波的程序。

    回答点赞:   宫梓萱 举报 评论 1

  • 2356174012 发表于 2017-09-05

    虽然具体的细节我不太清楚,但是adc采集与超生波测距,两个模块的函数都要用到while语句等待,用while语句可能程序会死在这里。。之前我就遇到过。建议:把其中一个模块先注释掉。一个个调通,再整合起来。调调看。如果还不行。超生波计时可以用输入捕获来实现,这样就不会用到while语句。可能能解决问题。

    回答点赞:   宫梓萱 举报 评论 1

  • 黄莨元 发表于 2017-09-05

    把代码贴出来看看吧,调试的话,肯定先弄好一部分,再把另一部分加进去啊,看看效果怎么样,再慢慢调或者改代码

    回答点赞:   宫梓萱 举报 评论 1

  • 靳飞 发表于 2017-09-05 云汉达人

    超声波对于时间上的要求比较严格,时间精度要高,如果你的ADC部分占用中断线或是占用CPU时间比较长,或是ADC的计算时间比较长(由于是51单片机,计算可能更费时)就会使超声波受到影响。
    不过你可以减少ADC的采样间隔或是简化计算来优化一下。


    回答点赞:   宫梓萱 举报 评论 1

  • 宫梓萱 发表于 2018-09-03

    超声波可采用输入捕获来完成采样工作,ADC采样也可通过中断来完成。还有一个重要的就是中断里不要搞太多耗时的任务。


    举报 评论 0

我来回答

试用推荐

树莓派3B+

产品总数:8个  申请人数:173

距离结束时间:

推荐达人 更多>

  • 向悫 向ta提问

    川楠

    一切能用程序解决的问题都不是问题

    在行: 单片机综合应用 硬件设计

  • 靳飞 向ta提问

    汉云

    在路上的Linuxer

    在行: DSP技术 STM32讨论区

  • 徐珂靖 向ta提问

    xukejing

    规格严格,功夫到家

    在行: 开发板综合 Linux 系统

  • 袁建明 向ta提问

    河北博联科技有限公司 研发部经理

    日知其所亡

    在行: 嵌入式 Linux 系统

  • 张峰 向ta提问

    光学总工

    用心工作,用心生活

    在行: 嵌入式 Linux 系统

完成答题
赶快去开启您的宝箱吧
×
恭喜您成功领取锦鲤卡
幸运锦鲤将在12月28日晚8点的直播中公布
敬请期待...
确定