1 基本原理
2 实现原码
#include<pic.h>
__CONFIG(0xFF32);
#define uint unsigned int
#define uchar unsigned char
uint ADbuf=0;
void main()
{
TRISA0=1;
TRISE0=0;
TRISC7=0;
TRISC6=0;
TRISD=0x00;
RA0=0;
RE0=0;
RC7=0;
RC6=0;
RD=0x00;
while(1)
{
ADFM=1;
ADCS2=0;
PCFG3=1;PCFG2=1;PCFG1=1;PCFG0=0;
ADIE=1;
ADIF=0;
PEIE=1;
GIE=1;
ADCS1=0;ADCS0=0;
CHS2=0;CHS1=0;CHS0=0;
GO_DONE=0;
ADON=1;
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
GO_DONE=1;
while(GO_DONE) continue;
ADbuf=ADRESH*256+ADRESL;
RC7= ADbuf/512;
RC6=(ADbuf-RC7*512)/256;
RD7=(ADbuf-RC7*512-RC6*256)/128;
RD6=(ADbuf-RC7*512-RC6*256-RD7*128)/64;
RD5=(ADbuf-RC7*512-RC6*256-RD7*128-RD6*64)/32;
RD4=(ADbuf-RC7*512-RC6*256-RD7*128-RD6*64-RD5*32)/16;
RD3=(ADbuf-RC7*512-RC6*256-RD7*128-RD6*64-RD5*32-RD4*16)/8;
RD2=(ADbuf-RC7*512-RC6*256-RD7*128-RD6*64-RD5*32-RD4*16-RD3*8)/4;
RD1=(ADbuf-RC7*512-RC6*256-RD7*128-RD6*64-RD5*32-RD4*16-RD3*8-RD2*4)/2;
RD0= ADbuf%2;
}
}
void interrupt ISR(void)
{
if(ADIF==1)
{
ADIF=0;
RE0=1;
}
}
3 protues仿真结果
特别要注意ADFM位的选择,左对齐还是右对齐。这会影响ADbuf=ADRESH*256+ADRESL;这条语句对不对。
|