PIC单片机的内部A/D转换

发布者:温柔阳光最新更新时间:2020-02-06 来源: eefocus关键字:PIC单片机  内部A  D转换  寄存器 手机看文章 扫描二维码
随时随地手机看文章

//需求,将板子上电位器接RA0,设置PIC的AD相关寄存器,显示电压

#include

__CONFIG(0x3831);//配置位18323831

#define uint unsigned int

#define uchar unsigned char


//共阴数码管(板子上用了达林顿管ULN2003,反向器)

const unsigned char table[]={0x3f,0x6,0x5b,0x4f,0x66,0x6d,0x7d,0x7,0x7f,0x6f};


//加小数点的共阴数码管显示,非常不错

const uchar table1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,

0x87,0xff,0xef};

void init();//数码管,和AD相关寄存器设置

uint get_ad();//获取电压值,其中包括AD读取,及AD值转电压值的处理,返回值为uint型,精度保留小数点后3位

void delay_ms(int z);

void disp(uchar num1,uchar num2,uchar num3,uchar num4);//数码管动态扫描

void main()

{

uint lednum;//

uchar num1,num2,num3,num4;//高两位接RA1和RA0用不到了

init();

while(1)

{

lednum=get_ad();

num1=lednum/1000;//求模即取整

num2=lednum/100%10;

num3=lednum/10%10;

num4=lednum%10;

disp(num1,num2,num3,num4);

}

}

void init()//数码管,和AD相关寄存器设置

{

TRISA=0x01;//RA0设置为输入,用于AD模拟信号输入

TRISD=0;//接数码管段选IO设置为输出

PORTA=0;

PORTD=0;

ADCON0=0x41;//选择8分频(4M/8=0.5MHz)时钟频率即8倍时钟周期,开AD

ADCON1=0x8E;//选择结果右对齐,ADRESH高6位读作0,选择A通道以电源VDD VSS作参考电压

delay_ms(10);//延时等待AD稳定


}

//获取电位器电压,PIC内部AD

uint get_ad()//一般做工程的时候带个通道参数,读取几通道直接带通道数就可以

{

//实际中要进行数字滤波(如20个数取平均值,然后将其返回去,滤波算法有很多,平均值是一种而已)

uint adval;//存放AD的值

float advalf;//存放AD值转换为的电压值

ADGO=1;//开始转换,ADGO与GODONE宏定义一致

while(ADGO);//AD转换完,硬件自动清零ADGO

adval=ADRESH;//先读AD高8位寄存器的低二位

adval=adval<<8|ADRESL;

advalf=adval/1023.0*5.0;//1023为电位器显示的最大值,假设板子电压为5v时

adval=advalf*1000;//精度取小数点后三位,如4.2356,则读为4.235

return(adval);


}

void disp(uchar num1,uchar num2,uchar num3,uchar num4)//数码管动态显示

{

PORTD=table1[num1];

PORTA=0x20;//0010 0000

delay_ms(2);

PORTD=table[num2];

PORTA=0x10;//0001 0000

delay_ms(2);

PORTD=table[num3];

PORTA=0x08;//0000 1000

delay_ms(2);

PORTD=table[num4];

PORTA=0x04;//0000 0100

delay_ms(2);

}

void delay_ms(int z)

{

int x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

关键字:PIC单片机  内部A  D转换  寄存器 引用地址:PIC单片机的内部A/D转换

上一篇:PIC单片机中断程序的设计技巧总结
下一篇:PIC单片机的应用技巧介绍

推荐阅读最新更新时间:2024-11-13 17:25

PIC单片机电子钟程序+仿真电路
#include pic.h #define uchar unsigned char #define uint unsigned int #define CS RA5 uchar secs = 0; uchar minutes = 0; uchar hours = 0; unsigned char disbuf = {1,2,3,4,5,6,7,8}; void delay_ms(uint n) { uchar i; while(n--) { for(i=0;i 100;i++); } } void Port_Initial(void) { TRISC = 0xD7;
[单片机]
<font color='red'>PIC单片机</font>电子钟程序+仿真电路
堆栈指针寄存器 SP详解以及栈的作用
堆栈是一种具有“后进先出”(LIFO---Last In First Out)特殊访问属性的存储结构。堆栈一般使用RAM 物理资源作为存储体,再加上LIFO 访问接口实现。 堆栈的实现方法: 在随机存储器区划出一块区域作为堆栈区,数据可以一个个顺序地存入(压入)到这个区域之中,这个过程称为‘压栈’(push )。通常用一个指针(堆栈指针 SP---StackPointer)实现做一次调整,SP总指向最后一个压入堆栈的数据所在的数据单元(栈顶)。从堆栈中读取数据时,按照堆栈 指针指向的堆栈单元读取堆栈数据,这个过程叫做 ‘弹出’(pop ),每弹出一个数据,SP 即向相反方向做一次调整,如此就实现了后进先出的原则。 堆栈
[单片机]
堆栈指针<font color='red'>寄存器</font> SP详解以及栈的作用
MSP430看门狗定时器的寄存器定义
/************************************************************ * 看门狗定时器的寄存器定义 ************************************************************/ #define WDTCTL_ 0x0120 sfrw WDTCTL = WDTCTL_; #define WDTIS0 0x0001 /*选择WDTCNT的四个输出端之一*/ #define WDTIS1 0x0002 /*选择WDTCNT的四个输出端之一*/ #define WD
[单片机]
pic关于头文件的进一步理解(基于PIC单片机 C18编译器)
一:关于处理器的寄存器定义 针对处理器的寄存器定义文件是一个汇编文件,包含特定器件上所有特殊功能寄存器的定义。编译时,针对处理器的寄存器定义文件将被编译成需要链接到应用程序的目标文件 。 例如,在 PIC18C452 针对处理器的寄存器定义文件中, PORTA 定义为: SFR_UNBANKED0 UDATA_ACS H'f80' PORTA PORTAbits RES 1 ; 0xf80 第一行指定 PORTA 所在的数据寄存器存储区和这个存储区的起始地址。 PORTA 有两个标号, PORTAbits 和 PORTA,都指向同一个地址 (本例中是 0xf80)。 二:关于头文件声明
[单片机]
关于PIC单片机PAGE和BANK
从PIC单片机的指令结构上来分析一下为什么PIC中要有BANK和PAGE的设置吧。先来看一下为什么PIC中要把RAM区划分多个BANK。 仔细观察PIC单片机汇编语言指令的格式,一条完整的汇编语言指令语句通常是这样的:标号 操作码助记符 操作数1,操作数2;注释。其中,主体部分是‘操作码助记符 操作数1,操作数2’。 例如: 指令:MOVF 33,1 操作码助记符:MOVF ; 操作数1:33 ; 操作数2:1 ; 而在程序被编译时指令语句的主体部分会被转换为代码的形式,通常是:指令代码 操作数2 操作数1。 例如在指令位数为14位的中档PIC单片机中: 指令:MOVF 33,1 转换后代码:00 1000 1 011
[单片机]
STM32F4寄存器与IO输入输出学习
IO设置函数 包括两个函数:GPIO_Set和GPIO_AF_Set. GPIO_AF_Set,每次只能设置一个IO口的复用功能。 STM32F4的每组通用I/O端口包括4个32位配置寄存器(MODER,OTYPER,OSPEEDR和PUPDR),2个32位数据寄存器(IDR和ODR),1个32位置位/复位寄存器(BSRR),1个32位锁定寄存器(LCKR)和2个32位复用功能选择寄存器(AFRH和AFRL). 这样,STM32F4每组IO有10个32位寄存器控制,其中常用的有4个配置寄存器+2个数据寄存器+2个复用功能选择寄存器,共8个。 各个寄存器介绍 1.MODER寄存器,该寄存器是GPIO端口模式控制寄存器,用
[单片机]
PIC单片机控制的小鸭牌药膳煲
  小鸭BD20-A型PIC单片机控制的多功能微电脑药膳煲,煎药或制作膳食时,只要达到定时时间,药膳煲会发出蜂鸣音提示,并自动转入60℃保温状态。   测绘的电路工作原理见附图。   当煎杯压下温度感测盘,感测盘将行程开关压合,上电时药膳煲处于待机状态,切换指示灯亮。按下选择键一次,设定时间累加30分钟。若设定时间为150分钟或180分钟方式,也可通过模式1或2直接选择设定。如需重新设定时间,则需先按切换键。时间设定完成后约5秒钟,单片机发出工作指令,2脚输出高电平,经9014驱动使继电器吸合,加热丝回路接通。每30分钟,时间显示减少30分钟。   变压器次级12V交流电压一路经D4、D2整流、C4滤波得到+14V左右的直流电
[单片机]
<font color='red'>PIC单片机</font>控制的小鸭牌药膳煲
PIC单片机之探讨低功耗
许多人说PIC单片机一大的优势就是低功耗,那我们就来讨论,讨论低功耗的实现。 1,睡眠(sleep) 睡眠方式是我们最常用的一种方式来降低功耗,但睡眠期间单片机不能做任何的事情。对于那些没事情就睡着,有事情就做一下的情况睡眠无疑是功耗最低的处理方式。 比如: 睡眠+ I/O电平变化中断唤醒 当按键没按下时,单片机睡眠,当按键按下后,执行相应的工作。 睡眠+数据接收中断唤醒 这样单片机就可以再没有接收到数据时候进入睡眠状态,接收到数据的时候就唤醒然后处理数据。当然首先单片机要有相关的外设比如SPI ,I2C,USART,等这些支持这些通讯的模块。 睡眠+看门狗唤醒 这个可以用在需要定时唤醒做事情的场合 2,降低时钟频率
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved