打印
[PIC®/AVR®/dsPIC®产品]

PIC18 47Q10单片机ADC模块是怎么用的?大神们

[复制链接]
6542|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
PIC18 47Q10单片机ADC模块是怎么用的?看了47q10的说明书,看不懂啊

使用特权

评论回复
沙发
奔波儿熊| | 2021-8-11 17:59 | 只看该作者
试试MCC, 然后研究MCC生成的代码, 配合手册一起看, 就懂了。

使用特权

评论回复
板凳
panxiaoyi| | 2021-8-11 19:32 | 只看该作者
自己写的,比较简单,不知道是否合你意
#include "ADC.h"

void FVR_Init(void)
{
    FVRCON B7H;                                                                 //使能固定参考电压
    FVRCON B5H;                                                                 //温度指示器使能
    FVRCON B4H;                                                                 //温度指示器范围选择位
    FVRCON &=(0xFF<<2);                                                         //清零ADC参考电压
    FVRCON |=FVR_4096;                                                          //配置ADC参考电压
    while(!(FVRCON & 1<<6));                                                    //等待参考电压稳定
}

void ADC_Init(void)
{
    FVR_Init();                                                                 //内部参考电压初始化
   
    TRISC B7H;                                                                  //禁止端口输出驱动器
    TRISC B6H;
   
    ANSELC B7H;                                                                 //禁止数字输入缓冲器
    ANSELC B6H;

    ADREF=VREF_VDD;                                                             //参考电压选择
   
    ADCON0 B7H;                                                                 //使能ADC
    ADCON0 B4H;                                                                 //由FRC专用振荡器提供时钟
    ADCON0 B2H;                                                                 //结果右对齐,即12位结果
}

void ADC_Start(unsigned char in)
{
    ADPCH=in;
    ADCON0 B0H;                                                                 //启动转换   
}

unsigned short ADC_Read(void)
{
    unsigned short adc_data;
    while(ADCON0&1);                                                            //等待转换完成,不用清零标志位
    adc_data=ADRESH;
    adc_data<<=8;
    adc_data=adc_data+ADRESL;
    return adc_data;
}


【模板】PIC18F27Q10_UART_ADC.rar

203.62 KB

使用特权

评论回复
地板
hu9jj| | 2021-8-12 09:52 | 只看该作者
这个帖子也许对您有点帮助:
https://bbs.21ic.com/icview-2982384-1-1.html

2926461147e923203b.png (5.19 KB )

2926461147e923203b.png

使用特权

评论回复
5
橘子阿小|  楼主 | 2021-8-13 11:22 | 只看该作者
        帮我看看我写的AD初始化是对的吗?代码附下:
//AD模块初始化
ADCON0 = 0x84;//ADGO=0;右对齐;使能ADC
    ADCLK = 0x0F;//ADC转换时钟Fosc/32
    ADCON1 = 0x00;
    ADCON2 = 0x00;//ADC模式为基本模式
    ADCON3 = 0x00;
    ADREF = 0x00;//参考电压
    ADPCH = 0x00;//默认为AN0*/
    ADACQ = 0x00;
    ADCAP = 0x00;
    ADRPT = 0x00;
        ADACT = 0x00;
   
        ANSELA=0X2F;//开启AN0-AN4
    ANSELB=0x10;//开启AN9
        ADIF=0;//中断标志位清0
        ADIE=1;//允许中断
        ADIP=0;//低优先级
  //  ADCON0bits.ADGO=1;

使用特权

评论回复
6
橘子阿小|  楼主 | 2021-8-13 11:23 | 只看该作者
panxiaoyi 发表于 2021-8-11 19:32
自己写的,比较简单,不知道是否合你意

帮我看看我写的AD初始化是对的吗?代码附下:
//AD模块初始化
ADCON0 = 0x84;//ADGO=0;右对齐;使能ADC
    ADCLK = 0x0F;//ADC转换时钟Fosc/32
    ADCON1 = 0x00;
    ADCON2 = 0x00;//ADC模式为基本模式
    ADCON3 = 0x00;
    ADREF = 0x00;//参考电压
    ADPCH = 0x00;//默认为AN0*/
    ADACQ = 0x00;
    ADCAP = 0x00;
    ADRPT = 0x00;
        ADACT = 0x00;
   
        ANSELA=0X2F;//开启AN0-AN4
    ANSELB=0x10;//开启AN9
        ADIF=0;//中断标志位清0
        ADIE=1;//允许中断
        ADIP=0;//低优先级
  //  ADCON0bits.ADGO=1;

使用特权

评论回复
7
panxiaoyi| | 2021-8-13 14:15 | 只看该作者
请问你的初始化遇到了什么问题?

ANSELA=0X2F;//开启AN0-AN4

这个应该是 0x1F 吧?

使用特权

评论回复
8
橘子阿小|  楼主 | 2021-8-18 14:52 | 只看该作者
panxiaoyi 发表于 2021-8-11 19:32
自己写的,比较简单,不知道是否合你意

你好,请教一下,27q10 44引脚的单片机EUSART模块,如果想把RC7引脚作为RX1,RC6引脚作为Tx1,我应该怎么办?

使用特权

评论回复
9
panxiaoyi| | 2021-8-20 22:40 | 只看该作者

RC6PPS=0x09;                                                                 //输出端口选择PPS: TXD1 => RC6
RX1PPS=(A=0,B=1,C=2,d=3)<<3 + 0/1/2/3/4/5/6/7           //RXD1=>RC7
RX1PPS=2<<3+7=0x17                                                    //RXD1=>RC7

使用特权

评论回复
10
gwsan| | 2021-9-6 10:49 | 只看该作者
楼主想要怎么用呢

使用特权

评论回复
11
zljiu| | 2021-9-6 10:51 | 只看该作者
看代码没觉得有什么问题啊

使用特权

评论回复
12
tfqi| | 2021-9-6 10:54 | 只看该作者
哪一部分看不懂啊

使用特权

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

本版积分规则

65

主题

152

帖子

1

粉丝