找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1235|回复: 3
打印 上一主题 下一主题
收起左侧

求助stc15单片机内置ADC的使用问题

[复制链接]
跳转到指定楼层
楼主
ID:691449 发表于 2022-1-15 15:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
5黑币
本帖最后由 xianming 于 2022-1-15 15:44 编辑

想利用STC15上的ADC功能做一个示波器,刚开始测试ADC就出了一大堆问题。
因为示波器需要连续取样,以及主程序需要响应按钮控制,所以我用了中断方式,自己改了STC的范例程序,然而中断并没有成功。
目前的问题是设置了程序,但根本不会中断


问:单片机中断有什么经验吗?如果想同时使用两个中断,比如串口中断和ADC中断,该如何设置?直接设置ES、EADC、EA的话会冲突
放上一部分代码
这是中断处理程序:
  1. void adc_isr() interrupt 5 using 1
  2. {
  3.         ADC_CONTR &= 0xEF;
  4.         //if((ADC_CONTR&0x07) == 0x02)
  5.         //{
复制代码
初始化ADC:
  1. void openADC(uchar port8)
  2. {
  3.         P1ASF = port8;
  4.         ADC_RES=0;
  5.         CLK_DIV&=0xDF;
  6.         ADC_CONTR=0xEA;

  7.         delayms(5);         
  8.         EADC=1;
  9.         EA=1;
  10.         
  11. }
复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:691449 发表于 2022-1-15 15:45 | 只看该作者
主程序:
  1.                   
  2. openADC(0xff);
  3.                  delayms(30);
  4.                   showADC=1;
  5.                
  6.                  while(1)
  7.                  {
  8.                  
  9.                  if(!showADC){
  10.                  
  11.                  displayADC();       
  12.                  delayms(10);
  13.                  showADC=1;}
  14.                  }
复制代码
回复

使用道具 举报

板凳
ID:213173 发表于 2022-1-15 21:38 | 只看该作者

MCU有多种中断功能,只是为使用者提供多种选择。但中断之间发送冲突时就需要权衡利弊有所取舍。用ADC为示波器取样,虽然需要有连续性但不是完全必要。这就给其它功能模块留有一定的时间。有多种方案可供选择。比如分时交替工作,也可以把查询串口放在ADC中断中。也可以用定时器协调各模块的工作。其实方法很多,要视具体应用环境选择。总之单片机只是工具,怎么使用在于人的智慧。

评分

参与人数 1黑币 +10 收起 理由
xianming + 10 很给力!

查看全部评分

回复

使用道具 举报

地板
ID:691449 发表于 2022-1-18 22:30 | 只看该作者
wulin 发表于 2022-1-15 21:38
MCU有多种中断功能,只是为使用者提供多种选择。但中断之间发送冲突时就需要权衡利弊有所取舍。用ADC为示 ...

感谢大佬的回复!另外,我随后又做了一些ADC的测试,发现ADC不太稳定,感觉时好时坏。去掉其他中断之后,把上文的代码放到两个工程里,可能有一个正常,另一个失败。想问一下大佬,单片机内ADC受到其他因素这么大的影响是正常的吗?
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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