打印
[51单片机]

12系列自带AD问题

[复制链接]
842|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sbit=T|  楼主 | 2017-4-9 10:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
void main()
{
        AD_init();    //A/D转换初始化
        serial_init();   //串口初始化
        while(1)
        {
                 {
                        TI=1;    //使用printf函数前须先将发送标志位TI置1
                        printf("%f",AD_get() );
                        TI=0;
                        delay(1000); //延时约1s
                  }
        }
}

uint AD_get(void)
{
        ADC_CONTR=0xe8;           //开启AD转换
        _nop_(); _nop_(); _nop_(); _nop_();//要经过4个CPU时钟的延时,其值才能够保证被设置进ADC_CONTR 寄存器
        while(!(ADC_CONTR&0x10));    //等待转换完成
        ADC_CONTR&=0xe7;      //关闭AD转换,ADC_FLAG位由软件清0
        return(ADC_RES*4+ADC_RESL);   //返回AD转换完成的10位数据(16进制)
}

void AD_init()
{
        P1ASF=0xff; //P1口全部作为模拟功能AD使用
        ADC_RES=0;   //清零转换结果寄存器高8位
        ADC_RESL=0; //清零转换结果寄存器低2位
        ADC_CONTR=0xe0;//开启AD电源
        delay(2);   //等待1ms,让AD电源稳定


这个程序串口返回的一直是9F FA,外面电压变了也是这个值
求大佬救救小白

相关帖子

沙发
sbit=T|  楼主 | 2017-4-9 10:03 | 只看该作者
12C5A16S2的单片机

使用特权

评论回复
板凳
wangyy608| | 2017-4-9 11:18 | 只看该作者
1.电路图,
2.尝试将作为AD的口配置为输入或开漏

使用特权

评论回复
地板
sbit=T|  楼主 | 2017-4-9 15:07 | 只看该作者
wangyy608 发表于 2017-4-9 11:18
1.电路图,
2.尝试将作为AD的口配置为输入或开漏

1.最小系统板
2.P1口就是配成用来输入的

使用特权

评论回复
5
wangyy608| | 2017-4-10 08:18 | 只看该作者
最小系统板是什么?不知道
程序没有看到对IO配置

使用特权

评论回复
6
yearnext| | 2017-4-10 09:20 | 只看该作者
 printf("%f",AD_get() );

为什么AD_get() 的返回值是uint类型的

使用特权

评论回复
7
sbit=T|  楼主 | 2017-4-10 11:04 | 只看该作者
yearnext 发表于 2017-4-10 09:20
为什么AD_get() 的返回值是uint类型的

float型么?

使用特权

评论回复
8
yearnext| | 2017-4-10 11:13 | 只看该作者

只是好奇float占4个字节,怎么接收到就两个字节

使用特权

评论回复
9
yearnext| | 2017-4-10 11:18 | 只看该作者

楼主可以使用stc的例程试一下,看看结果怎么样

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

5

帖子

0

粉丝