📄 ad9627_c控制代码.txt
字号:
#include "C8051F340.h"
#include <stdio.h>
#define HIGH 2
#define LOW 0
#define SO (P1&0x02) // P1.1端口 与 0000 0010
#define SI_H P1=P1|0x02 // P1.1端口 或 0000 0010
#define SI_L P1=P1&0xFD // P1.1端口 与 1111 1101
#define SCK_H P1=P1|0x01 // P1.0端口 或 0000 0001
#define SCK_L P1=P1&0xFE // P1.0端口 与 1111 1110
#define CS_9517_L P1=P1&0xFB // P1.2端口 与 1111 1011
#define CS_9517_H P1=P1|0x04 // P1.2端口 或 1111 0100
#define CS_9627_L P1=P1&0xEF // P1.4端口 与 1110 1111
#define CS_9627_H P1=P1|0x10 // P1.4端口 与 0001 0000
/*---------------------------------------------------------------------------------------------------------------*/
//*********************************************************************************************************
// AD9627函数
//*********************************************************************************************************
void AD_write(unsigned int addr ,unsigned char data_1) //AD9627 写1Byte
{
unsigned char mark,i;
unsigned char command_1=0x00;
unsigned char mark1; //addr 后3字节有效
unsigned int mark2;
mark1=0x80;
mark2=0x0800;
mark=0x80;
CS_9627_L;
for(i=0;i<4;i++) //
{
if((command_1&mark)==0)
SI_L;
else
SI_H;
mark=mark>>1;
SCK_H;
wait();
SCK_L;
}
for(i=0;i<12;i++) //
{
if((addr&mark2)==0)
SI_L;
else
SI_H;
mark2=mark2>>1;
SCK_H;
wait(); //时钟
SCK_L;
}
for(i=0;i<8;i++)
{
if((data_1&mark1)==0)
SI_L;
else
SI_H;
mark1=mark1>>1;
SCK_H;
wait(); //时钟
SCK_L;
}
CS_9627_H;
}
unsigned char read_AD(unsigned int addr) //形参为地址 A11~A0 12bit 预读取1个字节 9627读1Byte
{
unsigned char return_data;
unsigned char mark2;
unsigned int mark,i;
unsigned int command=0x8000;
CS_9627_L;
// CS_9627_L;
return_data=0x00;
mark=0x8000;
mark2=0x80;
for(i=0;i<4;i++)
{
if((command&mark)==0)
SI_L;
else
SI_H;
mark=mark>>1;
SCK_H; //时钟
wait();
SCK_L;
}
for(i=0;i<12;i++)
{
if((addr&mark)==0)
SI_L;
else
SI_H;
mark=mark>>1;
SCK_H;
wait();
SCK_L;
}
P1 |= 0x02;
for(i=0;i<8;i++)
{
if(SO==HIGH)
{
return_data=return_data|mark2;
mark2=mark2>>1;
}
else mark2=mark2>>1;
SCK_H; //时钟拉高
wait(); //时钟
SCK_L;
}
CS_9627_H;
return return_data; //返回的数据为8bit
}
//*********************************************************************************************************
// 单片机初始化
//*********************************************************************************************************
void Oscillator_Init()
{
int i = 0;
// OSCICN = 0x00;
OSCXCN = 0x67;
for (i = 0;i<3000; i++); // Wait 1ms for initialization
while ((OSCXCN & 0x80)== 0);
CLKSEL=0x01; //如果要选择外部振荡器作为系统时钟,必须将CLKSL(CLKSEL的第0位)设为1
}
void Port_IO_Init()
{
P0MDIN = 0x3F;
// P2MDOUT = 0xFF;
// P2MDOUT=0x04;
P1MDIN =0xFF; //P1 端口全数字输入
P1MDOUT=0x17; // 0001 0011 || P1.0 SCK || P1.1 DIO || P1.2 CS9517 || P1.4 CS9627
// P1MDOUT=0xFF; //for test
XBR1 = 0x40; //
// XBR2 = 0x40; //交叉开关使能
}
void Reset_Sources_Init()
{
int i = 0;
// PCA0MD=0x80;
VDM0CN= 0x00;
for (i =0; i <350;i++); // Wait 100us for initialization
RSTSRC=0x02;
}
void PCA_Init()
{
PCA0MD &= ~0x40;
// PCA0MD = 0x00; //Watchdog disenable
}
//*********************************************************************************************************
void initial_9627()
{
unsigned char da_1=0,da_2=0,da_3=0,da_4=0,da_5=0,da_6=0,da_7=0,da_8=0,da_9=0,da_10=0,da_11=0,da_12=0,da_13=0,da_14=0,da_15=0;
da_1=read_AD(0x0000);
wait();
da_2=read_AD(0x0001);
wait();
da_3=read_AD(0x0005);
wait();
da_4=read_AD(0x0008);
wait();
da_5=read_AD(0x0009);
wait();
da_6=read_AD(0x000B);
wait();
da_7=read_AD(0x000D);
wait();
da_8=read_AD(0x000E);
wait();
da_9=read_AD(0x0010);
wait();
da_10=read_AD(0x0014);
wait();
da_11=read_AD(0x0016);
wait();
da_12=read_AD(0x0017);
wait();
da_13=read_AD(0x0018);
wait();
AD_write(0x0000,0x3C);//0011 1100
AD_write(0x00FF,0x01); //transfer
/*-----------------------output test-----------------------------*/
// AD_write(0x000D,0x06); //0000 0110
// AD_write(0x00FF,0x01); //transfer
wait();
/*-----------------------output test-----------------------------*/
da_1=read_AD(0x0000);
wait();
AD_write(0x0000,0x18); //MSB first
AD_write(0x0005,0x03); // channel A&B
AD_write(0x0018,0x80); // VREF
AD_write(0x0014,0x90); //output mode
AD_write(0x00FF,0x01); //transfer
AD_write(0x0005,0x03); // channel A&B
AD_write(0x0017,0x83); //output delay
AD_write(0x0008,0x20);
AD_write(0x00FF,0x01); //transfer
AD_write(0x0010,0x03);
AD_write(0x0005,0x02);
AD_write(0x00FF,0x01);
AD_write(0x0005,0x04);
AD_write(0x0010,0x09);
AD_write(0x00FF,0x01);
wait();
}
void main()
{
int i,j;
PCA_Init();
for(i=0;i<1000;i++)
{
for(j=0;j<100;j++);
}
Reset_Sources_Init();
Port_IO_Init();
Oscillator_Init();
initial_9517();
// initial_9627();
wait();
while(1)
{;}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -