/* X510_128.c: Demo program for X510-128 Compiler: BC++ 3.1, Turbo C ++ 1.01(3.01) (free from http://community.borland.com/museum) Compile mode: large Project: X510_128.c ..\..\Lib\7188xbl.lib ..\..\lib\Xboard\X510_128.lib Hardware: 7188XB + X510-128 [28/June/2005] by Liam [08/July/2005] by Liam */ /************************************************************************/ /* X510-128: 5 channel D/I */ /* 5 channel D/O */ /* 1 channel RS-232 (3-wire) */ /* EEPROM 128K bytes */ /************************************************************************/ /************************************************************************/ /* EEPROM: 24LC1024, total=128K bytes, 2 blocks, 65536(64K) bytes/block */ /* In X510-128 there is one 24Lc1024. */ /* */ /* in the following functions, the parameters: */ /* Block,StartBlock: range=0 to 3 */ /* Addr,StartAddr: range=0 to 65535 */ /************************************************************************/ #include #include #include #include #include "..\..\lib\7188xb.h" #include "..\..\lib\Xboard\X510_128.h" #define BUFSIZE 1024 char InpBuf[BUFSIZE], OutpBuf[BUFSIZE]; void main(void) { int iRet, iAction, i, quit, idata; int iValue, iInChannel, iDIValue, iOutChannel, iDOValue, iStatus; //For Test EEPROM unsigned int nAction, nData; float fData; char sData[32]; int nAddr; InitLib(); X510_Init(); //Initialize the X510-128 Print("\r\n"); Print("****************************************\r\n"); Print("| 7188XB + X510-128 |\r\n"); Print("****************************************\r\n"); while(iAction!=10) { iAction=0; quit=0; Puts("\r\n"); Puts("1) DI and DO test\r\n"); Puts("2) Read DI (all channels)\r\n"); Puts("3) Read DI (one channel)\r\n"); Puts("4) Write DO (all channels)\r\n"); Puts("5) Write DO (one channel)\r\n"); Puts("6) DO Readback (all channels)\r\n"); Puts("7) DO Readback (one channel)\r\n"); Puts("8) Test COM3 (3-wire RS-232)\r\n"); Puts("9) Test EEPROM\r\n"); Puts("\r\n"); Puts("10) Quits Demo program\r\n\r\n"); Puts("Choose an option and press [Enter]:"); Scanf("%d",&iAction); Puts("\r\n"); switch(iAction) { /************************/ /* DIO test */ /************************/ /* DO0 <===> DI0 */ /* DO1 <===> DI1 */ /* DO2 <===> DI2 */ /* DO3 <===> DI3 */ /* DO4 <===> DI4 */ /************************/ case 1: iValue=0; //no error iDOValue=1; X510_Write_All_DO(iDOValue); Delay(10); // DI is normal hi, low active. // When DI is floating or +5V, DI logic is 1 // When DI is GND, DI logic is 0 // When DO is logic 1 ==> DO low // Ch0 iRet=(~X510_Read_All_DI())&0x1f; if(iRet!=iDOValue) { Puts("DO0 <==> DI0 error!!!\r\n"); iValue=1; //error } // Ch1~Ch4 for(i=1; i<5; i++) { iDOValue=1< DI%d error!!!\r\n", i, i); iValue=1; //error } } if(iValue==0) Print("DIO testing ok.\r\n\r\n"); X510_Write_All_DO(0); break; // Read DI (all channels) case 2: iDIValue=X510_Read_All_DI(); Print("Input value=> 0x%02x\r\n\r\n", iDIValue); break; // Read DI (one channel) case 3: Print("Please select inport channel(0~4): "); Scanf("%d", &iInChannel); if(iInChannel>4) { Puts("Unknow Channel Number!!\r\n\r\n"); break; } iDIValue=X510_Read_One_DI(iInChannel); if(iDIValue) Print("Channel %d ==> OFF\r\n\r\n", iInChannel); else Print("Channel %d ==> ON\r\n\r\n", iInChannel); break; // Write DO (all channels) case 4: Print("Please input Output value(0 ~ 0x1f): "); Scanf("%x", &iDOValue); X510_Write_All_DO(iDOValue); Print("Output value=> 0x%02x\r\n\r\n", iDOValue); break; // Write DO (0ne channels) case 5: Print("Please select outport channel(0~4) and status(0:OFF, 1:ON)\r\n"); Print("Channel number and status:"); Scanf("%d %d", &iOutChannel, &iStatus); if(iOutChannel>4) { Puts("Unknow Channel Number!!\r\n\r\n"); break; } X510_Write_One_DO(iOutChannel, iStatus); Print("Channel %d ==> %s\r\n\r\n", iOutChannel, (iStatus>=1)?"ON":"OFF"); break; // DO Readback (all channels) case 6: iDOValue=X510_Read_All_DO(); Print("Digital Output ReadBack=> 0x%02x\r\n\r\n", iDOValue); break; // DO Readback (one channels) case 7: Print("Please select outport channel(0~4): "); Scanf("%d", &iOutChannel); if(iOutChannel>4) { Puts("Unknow Channel Number!!\r\n\r\n"); break; } iRet=X510_Read_One_DO(iOutChannel); if(iRet) Print("Channel %d ==> ON\r\n\r\n", iOutChannel); else Print("Channel %d ==> OFF\r\n\r\n", iOutChannel); break; // COM3 TEST case 8: // FOR COM3 InstallCom3(115200L, 8, 0, 1); Print("Send & Receive data to/from COM3\r\n"); Print("Enter a string to COM port:"); Scanf("%s",&OutpBuf); ToComStr(3,OutpBuf); Delay(2); idata=ReadComn(3,InpBuf,BUFSIZE); InpBuf[idata]=0x0; Print("Read COM port==>%s,idata=%d\r\n",InpBuf,idata); if(!strcmp(OutpBuf,InpBuf)) Print("Send COM3 <==> Receiv COM3 -->Test OK\r\n"); else Print("Send COM3 <==> Receiv COM3 -->Test error\r\n"); RestoreCom3(); break; //Test EEPROM case 9: nAction=0; while(nAction!=8) { //X510EE_MultiWrite(int Block, unsigned Addr, int no,char *Data) //X510EE_MultiRead(int StartBlock,unsigned StartAddr,int no,char *databuf) //Block,StartBlock: range=0 to 3 //Addr,StartAddr: range=0 to 65535 nAction=0; quit=0; Print("\r\n"); Print("1) Write one Integer to EEPROM\r\n"); Print("2) Write one Float to EEPROM\r\n"); Print("3) Write one String to EEPROM\r\n"); Print("4) Read one Integer from EEPROM\r\n"); Print("5) Read one Float from EEPROM\r\n"); Print("6) Read one String from EEPROM\r\n"); Print("7) Clear EEPROM\r\n"); Print("\r\n"); Print("8) Quit EEPROM Test\r\n\r\n"); Print("Choose an option and press [Enter]:"); Scanf("%d", &nAction); switch(nAction) { case 1: Print("\r\nPlease input Integer(0-25535) to write EEPROM: "); Scanf("%d", &nData); X510EE_WriteEnable(); X510EE_MultiWrite(1, 0, 2, (char*)&nData); X510EE_WriteProtect(); Print("Write %d to EEPROM ok!\r\n", nData); break; case 2: Print("\r\nPlease input Float to write EEPROM: "); Scanf("%f", &fData); X510EE_WriteEnable(); X510EE_MultiWrite(1, 2, 4, (char*)&fData); X510EE_WriteProtect(); Print("Write %f to EEPROM ok!\r\n", fData); break; case 3: Print("\r\nPlease input String to write EEPROM: "); Scanf("%s", &sData); X510EE_WriteEnable(); X510EE_MultiWrite(1, 6, strlen(sData), (char*)&sData); X510EE_WriteProtect(); Print("Write %s to EEPROM ok!\r\n", sData); break; case 4: X510EE_MultiRead(1, 0, 2, (char*)&nData); Print("=> %d\r\n", nData); break; case 5: X510EE_MultiRead(1, 2, 4, (char*)&fData); Print("=> %f\r\n", fData); break; case 6: X510EE_MultiRead(1, 6, 32, (char*)&sData); Print("=> %s\r\n", sData); break; case 7: X510EE_WriteEnable(); nData=0; for(nAddr=0; nAddr<38; nAddr++) X510EE_MultiWrite(1, nAddr, 1, (char*)&nData); X510EE_WriteProtect(); Print("Clear EEPROM ok!\r\n", sData); break; case 8: default: quit=1; break; } if(!quit) { Puts("\r\nPlease press any key to continue...\r\n"); Getch(); } } break; case 10: default: quit=1; break; } if(!quit) { Puts("\r\nPlease press any key to continue...\r\n"); Getch(); } } }