电子技术论坛

 找回密码
 快速注册

QQ登录

只需一步,快速开始

搜索
下载方法|用单线程|避免多扣帖子规范|求助必读|发帖建议积分策略|勋章介绍|新人必读获取金币|推广论坛|出售帖子基本礼节|致会员信|版规总则
禁涉政治|反对低俗|举报专帖征集相片|留下足迹|推荐精华上传附件|制作分卷|使用网盘禁发qq群|恶意灌水|纯表情帖加入团队|监督机制|安全上网
查看: 785|回复: 4

调用adc一个通道就不会,调用两个通道就会1 0变化?

[复制链接]
发表于 2024-3-16 21:05:37 来自手机 | 显示全部楼层 |阅读模式

注册家电维修技术论坛,与同行畅聊维修技术,享更多技术论坛功能。

您需要 登录 才可以下载或查看,没有帐号?快速注册

x
P54  p55为什么会随延时约1秒1   0变化?      
#include "stc8g.h"       //包含此头文件后,不需要再包含"reg51.h"头文件
#include "intrins.h"

#define     MAIN_Fosc       24000000L   //定义主时钟

typedef     unsigned char   u8;
typedef     unsigned int    u16;
typedef     unsigned long   u32;


#define ADCTIM (*(unsigned char volatile xdata *)0xfea8)

u16 Get_ADC12bitResult(u8 channel); //channel = 0~15

void delay1us(unsigned int us)
{
    unsigned int i, j;
    for(i = us; i > 0; i--)
for(j =1000; j > 0; j--);  
}

   void mainm2(void)
  {
  
           u8 i;
  Get_ADC12bitResult(2);
                i = Get_ADC12bitResult(2);  //读外部电压ADC
               
                 if(i>200)
                                  { P55=0;}
                                   delay1us(1000)        ;
                             P55=1;         
                                   }
           void mainm3(void)
  {
            u8 j;
   Get_ADC12bitResult(3);
                j = Get_ADC12bitResult(3);  //读外部电压ADC
               
                 if(j>200)
                                  { P54=0;}
                                   delay1us(1000)        ;
                             P54=1;         
                                   }

void main(void)
{
   

    P_SW2 |= 0x80;  //扩展寄存器(XFR)访问使能

                   P3M0 &= ~0x0f; P3M1 |= 0x0f; //高阻



                            P5M0 &= ~0x30; P5M1 &= ~0x30;

     
   
    ADCTIM = 0x3f;      //设置 ADC 内部时序,ADC采样时间建议设最大值
    ADCCFG = 0x2f;      //设置 ADC 时钟为系统时钟/2/16
    ADC_CONTR = 0x80; //使能 ADC 模块
       
   
    while(1)
    {                          mainm2();
                                     mainm3();
                          
                                   } }


//========================================================================
// 函数: u16 Get_ADC12bitResult(u8 channel)
// 描述: 查询法读一次ADC结果.
// 参数: channel: 选择要转换的ADC.
// 返回: 12位ADC结果.
// 版本: V1.0, 2012-10-22
//========================================================================
u16 Get_ADC12bitResult(u8 channel)  //channel = 0~15
{
    ADC_RES = 0;
    ADC_RESL = 0;

    ADC_CONTR = (ADC_CONTR & 0xF0) | 0x40 | channel;    //启动 AD 转换
    _nop_();
    _nop_();
    _nop_();
    _nop_();

    while((ADC_CONTR & 0x20) == 0)  ;   //wait for ADC finish
    ADC_CONTR &= ~0x20;     //清除ADC结束标志
    return  (((u16)ADC_RES << 8) | ADC_RESL);
}
发表于 2024-3-16 21:44:23 | 显示全部楼层
这种问题你该去csdn,那边比较专业
发表于 2024-3-16 22:53:53 | 显示全部楼层
发的是什么等等
发表于 2024-3-16 23:41:23 | 显示全部楼层
都看好了,这就是专业
 楼主| 发表于 2024-3-17 21:25:49 来自手机 | 显示全部楼层
               if(i>200)                         { P55=0;}                         delay1us(1000)        ;                              P55=1;                                             } 改为           if(i>200)                                   { P55=0;}                                   else                         { P55=1;}可以了
您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

手机版|家电维修技术论坛 ( 鄂ICP备09003585号-2 )

GMT+8, 2025-1-30 05:31 , Processed in 0.051173 second(s), 4 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

CopyRight © 电子技术论坛
电子邮箱:8794149@qq.com | 联系 QQ:3081868839 | 官方网址:www.dzdu.com

Qiji. All Rights Reserved


服务条款 | 站长声明

Wuhan Qiji Technology Co., Ltd.武汉奇迹科技有限公司版权所有


鄂ICP备09003585号-2鄂公网安备42010602000420号

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