?? 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 + -