📄 ad.c
字号:
#include<pic.h>
#define uchar unsigned char
#define nop() asm("nop")
static volatile bit AD_DONE @((unsigned)&ADCON0*8)+1;
static volatile bit Disp_Data @((unsigned)&GPIO*8)+5;
static volatile bit SCLK @((unsigned)&GPIO*8)+4;
static volatile bit ST_Enale @((unsigned)&GPIO*8)+2;
//static volatile bit Motor_stop;
void Init_Mcu(void)//16f716初始化设置
{
GPIO=0x0b;
TRISIO=0x0b;
OPTION=0x00;
ADCON0=0xc0;//向右对齐,选择GP1为参考电压
ANSEL=0x53;//ad转换时钟选择FOSC/16,即4US.同时选AN0通道进行转换
ADRESH=0x00;//
ADRESL=0x00;//
}
//延时20MS子程序
void Time_Delay(void)
{
unsigned int count=5000;
while(--count)
{
asm("clrwdt");
}
}
void Init_Adc(void)//ad转换初始化设置
{
ADON=1;//启动AD转换器
AD_DONE=1;//正在AD转换,等结束时硬件清零
}
void main(void)
{
unsigned char S_Data=0,i;
Init_Mcu();
Init_Adc();
while(1)
{
while(AD_DONE);
ADON=0;
S_Data=0xff;
for(i=6;i>0;--i)
{
if(S_Data&0x01) //数据写 MOSI
{
Disp_Data=1;
}
else
{
Disp_Data=0;
}
SCLK = 1; //时钟 SCLK = 1
S_Data=S_Data>>1;
nop();
SCLK = 0; //时钟 SCLK = 0
}
S_Data=ADRESL;
//S_Data=0xff;
for(i=8;i>0;--i)
{
if(S_Data&0x01) //数据写 MOSI
{
Disp_Data=0;
}
else
{
Disp_Data=1;
}
SCLK = 1; //时钟 SCLK = 1
S_Data=S_Data>>1;
nop();
SCLK = 0; //时钟 SCLK = 0
}
S_Data=ADRESH;
//S_Data=0xff;
for(i=2;i>0;--i)
{
if(S_Data&0x01) //数据写 MOSI
{
Disp_Data=0;
}
else
{
Disp_Data=1;
}
SCLK = 1; //时钟 SCLK = 1
S_Data=S_Data>>1;
nop();
SCLK = 0; //时钟 SCLK = 0
}
asm("nop");
ST_Enale=1;
asm("nop");
asm("nop");
asm("nop");
asm("nop");
ST_Enale=0;
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
ADON=1;
asm("nop");
AD_DONE=1;
Time_Delay();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -