顶级欧美丰满熟妇XXXXX视频,中文字幕亚洲精品乱码,久久黑国产,中文字幕一区二区三区日韩精品 ,色九月亚洲综合网

I/O 設(shè)備

用U盤實(shí)現(xiàn)數(shù)據(jù)采集存儲(chǔ)

ainet.cn   2009年12月12日
目前正在研制的系統(tǒng)為大功率光伏陣列特性測(cè)試儀,其主要用于對(duì)各種規(guī)格、容量的光伏陣列進(jìn)行I-V特性的測(cè)試,為光伏系統(tǒng)(并網(wǎng)、發(fā)電)的選型提供必要的參考。該系統(tǒng)需要人員采集光伏陣列的電壓、電流、溫度、日照等數(shù)據(jù),由于該系統(tǒng)多用于野外,因此需要對(duì)所測(cè)得的數(shù)據(jù)進(jìn)行存儲(chǔ)以便進(jìn)行I-V特性曲線的繪制及光伏陣列在各種不同的日照和溫度下特性的推演。數(shù)據(jù)的采集及存儲(chǔ)可由系統(tǒng)控制芯片通過(guò)SPI接口USB118模塊通訊,并輔以大容量USB存儲(chǔ)設(shè)備來(lái)完成。
在所設(shè)計(jì)的系統(tǒng)中采用了西安達(dá)泰電子有限責(zé)任公司提供的USB118AD模塊,其具有標(biāo)準(zhǔn)2.0協(xié)議及支持1G以上優(yōu)盤的優(yōu)點(diǎn),這點(diǎn)非常適合于本系統(tǒng)經(jīng)常在野外應(yīng)用的特點(diǎn),并且隨產(chǎn)品所提供的串行通訊程序也可以很方便的移植到所采用的DSP平臺(tái)上,大大簡(jiǎn)化了本系統(tǒng)在數(shù)據(jù)存儲(chǔ)方面的程序設(shè)計(jì)工作。
此測(cè)試代碼是基于MSP430F147和西安達(dá)泰電子的USB118AD模塊的SPI測(cè)試程序。USB118AD實(shí)現(xiàn)將單片機(jī)得數(shù)據(jù)直接存儲(chǔ)到U盤。
/***************************************************/
/*SPI初始化子程序 */
/***************************************************/
void SpiInit(void)
{
// P3SEL |= SDCLK + SDDI + SDDO; //P3.1--P3.3 for spi option select
P3SEL |= 0X0e; //P3口功能設(shè)置(SPI功能選擇)
P3DIR |= BIT0; //設(shè)置IO口方向(P3.0 用于SPI片選控制)
P3OUT |= BIT0;
UCB0CTL1 |= UCSWRST; //設(shè)置SPI
UCB0CTL0 = 0xA9; //10(clk edge) 1(MSB first) 0(8bit) 1(master) 00(3SPI) 1(sync)
UCB0CTL1 = 0x80; //10(SMCLK)
UCB0BR0 = 0x04; //SPICLK 8M/4=2MHz;
UCB0BR1 = 0x00;
UCB0STAT = 0X00;
UCB0CTL1 &=~ UCSWRST;
}

/*SPI讀數(shù)據(jù)*/
int rd_data(void)
{
int value;
P3OUT &=~ BIT0;
UCB0TXBUF=0xff;
while((UCB0STAT&UCBUSY)==0x01);
value = UCB0RXBUF;
P3OUT |= BIT0;
return value;
}
/*SPI寫數(shù)據(jù)*/
void wr_data(uchar n)
{
P3OUT &=~ BIT0;
UCB0TXBUF=n;
while((UCB0STAT&UCBUSY)==0x01);
P3OUT |= BIT0;
}
/*************************************************************************
* 發(fā)送命令
*功能:向模塊發(fā)送命令
*入口參數(shù):命令數(shù)組
*出口參數(shù):無(wú)
**************************************************************************/
void Send_Command(uchar com[64])
{
wr_data(0xaa);
Delay(20); //10uS左右的延時(shí)
wr_data(0xbb);
for(int c=0;c<64;c++)
{
wr_data(com[c]);
}
}
/*************************************************************************
* 接收命令
*功能: 從模塊接收應(yīng)答命令
*入口參數(shù):應(yīng)答信號(hào)
*出口參數(shù):應(yīng)答正確與否標(biāo)志
**************************************************************************/
uchar Receive_Command(int rec)
{

do
{
rd[0] = rd_data();
}
while(rd[0]==0xff);
for(int idata=1;idata<64;idata++)
{rd[idata] = rd_data();}

if(rd[0] == rec&& rd[1]==0x01)
return 0;
else
return 1;
}
/*************************************************************************
* 接收數(shù)據(jù)
*功能: 從模塊接收應(yīng)答數(shù)據(jù)
*入口參數(shù):無(wú)
*出口參數(shù):應(yīng)答數(shù)據(jù)—數(shù)組data[]
**************************************************************************/
void receive_data()
{
int num;
num = rd[4]+(rd[5]<<8);
if(num)
{
int d=0;
for(;num>0;num--)
{
data[d] = rd_data();
d++;
}

}
}
/************************************************************************* *發(fā)送數(shù)據(jù)
*功能: 向模塊發(fā)送數(shù)據(jù)
*入口參數(shù):待寫入數(shù)組app[i]
*出口參數(shù):無(wú)
**************************************************************************/

void write_data(int lx,int hx)
{
int tempd;
tempd = hx<<8 +lx ;
for(int i=0;iwr_data(app[i]); //app[i]為待寫入數(shù)組
}
/**************************************************************************
* 發(fā)送檢測(cè)設(shè)備命令
* 入口參數(shù):無(wú)
* 返回值:0-正常,1-無(wú)響應(yīng), 2-返回?cái)?shù)據(jù)錯(cuò)誤
***************************************************************************/
uchar USB118R_Detect(void)
{
uchar i,command[64];
command[0] = 0x01;
command[1] = 0x00;
for(i=2;i<64;i++)
{
command[i] = 0x20;
}
Send_Command(command);
return Receive_Command(0x04);
}
/**************************************************************************
* 獲取磁盤空間
***************************************************************************/
uchar USB118R_GetDiskCapacity(void)
{
uchar i,command[64]; /*command數(shù)組用于存儲(chǔ)命令字節(jié)*/

command[0]=0x12; /*命令字節(jié)賦值*/
command[1]=0x00;
for(i=2;i<64;i++)
command[i]=0x20;

Send_Command(command); /*發(fā)送命令 0x12,無(wú)數(shù)據(jù)字節(jié)*/
return Receive_Command(0x22); /*接收返回值并校驗(yàn)是否發(fā)送成功 */
/*校驗(yàn)碼為0x22,0x01*/

}
/**************************************************************************
* 獲取當(dāng)前系統(tǒng)的版本號(hào)
***************************************************************************/
uchar USB118R_GetVersion(void)
{
uchar i,command[64]; /*command數(shù)組用于存儲(chǔ)命令字節(jié)*/

command[0]=0x30; /*命令字節(jié)賦值*/
command[1]=0x00;
for(i=2;i<64;i++)
command[i]=0x20;

Send_Command(command); /*發(fā)送命令 0x30,無(wú)數(shù)據(jù)字節(jié)*/
return Receive_Command(0x40); /*接收返回值并校驗(yàn)是否發(fā)送成功*/
/* 校驗(yàn)碼為0x40,0x01*/
}
/**************************************************************************
* 創(chuàng)建文件
* 功能:在U 盤上創(chuàng)建指定文件名的文件
* 入口參數(shù):文件名, 8個(gè)字節(jié);擴(kuò)展名,3個(gè)字節(jié)
***************************************************************************/
uchar USB118R_Create(int fi,int fj,int fk)
{
uchar i;
uchar command[64]={0x07,"D","A","T","A","I","E"," "," ","T","X","T"};
/*命令碼為0x07,文件名為DATAIE,擴(kuò)展名為TXT*/
/*
*
*
* 根據(jù)FAT文件規(guī)范,在此可以添加文件
* 屬性、創(chuàng)建時(shí)間等信息。
*
*
*
*/
for(i=12;i<33;i++)command[i]=0x20;
command[33]=0x00; /*命令字節(jié)賦值*/
for(i=34;i<64;i++)command[i]=0x20;

Send_Command(command); /*發(fā)送命令 0x07,無(wú)數(shù)據(jù)字節(jié)*/
return Receive_Command(0x0A); /*接收返回值并校驗(yàn)是否發(fā)送成功 */
/*校驗(yàn)碼為0x0A,0x01*/
}
/**************************************************************************
* 列舉文件
* 功能:列舉目錄下面的所有文件和文件夾
*lx,hx限制文件數(shù)量,每個(gè)文件名32B,修改文件數(shù)量限制時(shí),同時(shí)要修改返回信息
*添加接收數(shù)據(jù)函數(shù)即可
***************************************************************************/
uchar USB118R_List(uchar lx,uchar hx) /*lx為USB118R_List命令返回?cái)?shù)據(jù)長(zhǎng)度*/
/*低字節(jié);hx為高字節(jié)*/
{
uchar i,command[64]; /*command數(shù)組用于存儲(chǔ)命令字節(jié)*/
command[0]=0x10; /*命令字節(jié)賦值*/
command[1]=0x00;
command[2]=0x20; /*返回?cái)?shù)據(jù)長(zhǎng)度低字節(jié)*/
command[3]=0x20; /*返回?cái)?shù)據(jù)長(zhǎng)度高字節(jié)*/
for(i=4;i<64;i++)
command[i]=0x20;

Send_Command(command); /*發(fā)送命令 0x10,無(wú)數(shù)據(jù)字節(jié)*/
return Receive_Command(0x20);
/*接收返回值及返回?cái)?shù)據(jù)并校驗(yàn)是否發(fā)送成功 校驗(yàn)碼為0x20,0x01*/
}

/**************************************************************************
* 讀取文件
* 功能:讀取已經(jīng)打開的文件
* 入口參數(shù):讀取文件長(zhǎng)度低字節(jié),讀取文件長(zhǎng)度高字節(jié)
***************************************************************************/
uchar USB118R_Read(uchar lx,uchar hx)
{
uchar i,command[64]; /*command數(shù)組用于存儲(chǔ)命令字節(jié)*/
uchar flag;
command[0]=0x08; /*命令字節(jié)*/
command[1]=lx; /*讀取文件長(zhǎng)度低字節(jié)*/
command[2]=hx; /*讀取文件長(zhǎng)度高字節(jié)*/
for(i=3;i<64;i++)
command[i]=0x20;
Send_Command(command); /*發(fā)送命令 0x08,無(wú)數(shù)據(jù)字節(jié)*/
flag = Receive_Command(0x0B);
/*接收返回值及返回?cái)?shù)據(jù)并校驗(yàn)是否發(fā)送成功 校驗(yàn)碼為0x0B,0x01*/
receive_data();
return flag;
}
/**************************************************************************
* 打開文件
* 功能: 在U 盤上打開指定文件名的文件
* 入口參數(shù):A~H,文件名;x~z:擴(kuò)展名
***************************************************************************/
uchar USB118R_Open(int fi,int fj,int fk)
{
uchar command[64]={0x06,"D","A","T","A","I","E"," "," ","T","X","T"};
Send_Command(command); /*發(fā)送命令 0x06,無(wú)數(shù)據(jù)字節(jié)*/
return Receive_Command(0x0D);
/*接收返回值并校驗(yàn)是否發(fā)送成功 校驗(yàn)碼為0x0D,0x01*/
}
/**************************************************************************
* 刪除文件
* 功能:刪除指定的文件
* 入口參數(shù):A~H,文件名;x~z:擴(kuò)展名
***************************************************************************/
uchar USB118R_Remove(void)
{
uchar command[64]={0x11,0x00,"D","A","T","A","I","E"," "," ","T","X","T"};
/*命令碼為0x11,文件名為DATAIE,擴(kuò)展名為TXT*/
Send_Command(command); /*發(fā)送命令 0x11,無(wú)數(shù)據(jù)字節(jié)*/
return Receive_Command(0x21);
/*接收返回值并校驗(yàn)是否發(fā)送成功 校驗(yàn)碼為0x21,0x01*/
}
/**************************************************************************
* 寫入數(shù)據(jù)
* 功能: 向已經(jīng)打開的文件中寫入數(shù)據(jù)
* 入口參數(shù):數(shù)據(jù)字節(jié)數(shù)
***************************************************************************/
uchar USB118R_Write(int lx,int hx)
{

uchar i,command[64]; /*command數(shù)組用于存儲(chǔ)命令字節(jié)*/

command[0]=0x09; /*命令字節(jié)賦值*/
command[1]=0x00;
command[2]=lx; /*寫入數(shù)據(jù)長(zhǎng)度低字節(jié)*/
command[3]=hx; /*寫入數(shù)據(jù)長(zhǎng)度高字節(jié)*/
for(i=4;i<64;i++)
command[i]=0x20;
Send_Command(command); /*發(fā)送命令 0x09,有數(shù)據(jù)字節(jié)*/
write_data(lx,hx);
return Receive_Command(0x0C);
/*接收返回值并校驗(yàn)是否發(fā)送成功 校驗(yàn)碼為0x0C,0x01*/
}
/**************************************************************************
* 設(shè)置指針
* 功能: 將文件指針移動(dòng)到指定位置
* 入口參數(shù):指針位置
***************************************************************************/
uchar USB118R_SetFilePointer(uchar para_1,uchar para_2,uchar para_3,uchar para_4)
{ /*參數(shù)para_1,para_2,para_3,para_4用來(lái)設(shè)置指針位置。低字節(jié)在前*/
uchar i,command[64]; /*command數(shù)組用于存儲(chǔ)命令字節(jié)*/
command[0]=0x15; /*命令字節(jié)賦值*/
command[1]=0x00;
command[2]=para_1; /*設(shè)置指針位置*/
command[3]=para_2;
command[4]=para_3;
command[5]=para_4;
for(i=6;i<64;i++) /*命令字節(jié)賦值*/
command[i]=0x20;
Send_Command(command); /*發(fā)送命令 0x15,無(wú)數(shù)據(jù)字節(jié)*/
return Receive_Command(0x25);
/*接收返回值并校驗(yàn)是否發(fā)送成功 校驗(yàn)碼為0x25,0x01*/
}

主函數(shù)根據(jù)需要,調(diào)用各個(gè)子函數(shù)。

(轉(zhuǎn)載)

標(biāo)簽:數(shù)據(jù)采集 我要反饋 
泰科電子ECK、ECP系列高壓直流接觸器白皮書下載
億萬(wàn)克
專題報(bào)道