#include <intrins.h>
#include <REG51.H>
#define uint unsigned int
#define uchar unsigned char
sbit ADCS =P1^3; //ADC0832 chip seclect
sbit ADDI =P1^1; //ADC0832 data in
sbit ADDO =P1^1; //ADC0832 data out
sbit ADCLK =P1^0; //ADC0832 clock signal
/***************************************读ADC0832函数***************************************/
//采集并返回
uchar ADC_read(uchar mode)
{ uint dat;
uchar i;
dat=mode;
ADDI=1;
_nop_();
_nop_();
ADCS=0;//拉低CS端
_nop_();
_nop_();
ADCLK=1;//拉高CLK端
_nop_();
_nop_();
ADCLK=0;//拉低CLK端,形成下降沿1
_nop_();
_nop_();
ADCLK=1;//拉高CLK端
ADDI=1;
_nop_();
_nop_();
ADCLK=0;//拉低CLK端,形成下降沿2
_nop_();
_nop_();
ADCLK=1;//拉高CLK端
ADDI=1;
_nop_();
_nop_();
ADCLK=0;//拉低CLK端,形成下降沿3
ADDI=1;//控制命令结束
_nop_();
_nop_();
dat=0;
for(i=0;i<8;i++)
{
dat|=ADDO;//收数据
ADCLK=1;
_nop_();
_nop_();
ADCLK=0;//形成一次时钟脉冲
_nop_();
_nop_();
dat<<=1;
if(i==7)dat|=ADDO;
}
ADCS=1;//拉低CS端
ADCLK=0;//拉低CLK端
ADDO=1;//拉高数据端,回到初始状态
dat<<=8;
return(dat); //return ad data
}
//******************************步进电机驱动程序**************************************//
sbit A1=P0^0; //定义步进电机连接端口
sbit B1=P0^1;
sbit C1=P0^2;
sbit D1=P0^3;
#define Coil_A1 {A1=1;B1=0;C1=0;D1=0;}//A相通电,其他相断电
#define Coil_B1 {A1=0;B1=1;C1=0;D1=0;}//B相通电,其他相断电
#define Coil_C1 {A1=0;B1=0;C1=1;D1=0;}//C相通电,其他相断电
#define Coil_D1 {A1=0;B1=0;C1=0;D1=1;}//D相通电,其他相断电
#define Coil_OFF {A1=0;B1=0;C1=0;D1=0;}//全部断电
void DelayUs2x(unsigned char t)
{
while(--t);
}
void DelayMs(unsigned char t)
{
while(t--)
{
DelayUs2x(245); //大致延时1mS
DelayUs2x(245);
}
}
/*------------------------------------------------
主函数
------------------------------------------------*/
main()
{ uchar y;
y=ADC_read();
if(y<0xee)
{
Coil_A1 //遇到Coil_A1 用{A1=1;B1=0;C1=0;D1=0;}代替
DelayMs()
Coil_B1
DelayMs()
Coil_C1
DelayMs()
Coil_D1
}
else
Coil_OFF
}