/* XDemo17: pulse width meansurement Compiler: BC++ 3.1 Compile mode: large Project: user.c v7000.c vModbus.c [after vcom3002.lib] ..\Lib\7188EL.Lib ..\Lib\TCPIP32.Lib ..\Lib\VcomNNNN.Lib, with NNNN being the lib file's version. 19~!@#$ -> Any non-null command will be accepted. This demo is similar to Xdemo13 to detect signal change and measure signal width. Hareware: [7188EA] or [7188EX + D/I expansion board] Note: 7188EA(X107)'s DI base address is 1. The other expansion boards's DI and DO base address are all 0. Refer 7188e\TCP\Doc\[Big5|Eng|Gb2312]\Vxcomm.htm 7188e\TCP\Xserver\Xserver.htm 7188e\TCP\Xserver\Function.htm to get more information. Because the kernal of Xserver used InstallCom() function. Please use printCom1() instead of Print() if you want to send formatted output from COM1. [20/Nov/2001] by Kevin [23,Sep,2004] Commented by Annita [14,Oct,2004] Modify by Annita [10/Aug/2005] by Liam [26,July,2011] by Nicholas */ #include #include #include #include "..\lib\7188e.h" #include "..\lib\tcpip32.h" #include "..\lib\vxcomm.h" unsigned long up_t; // timetick of signal from low become high unsigned long down_t; // timetick of signal form high become low unsigned high_width; // width of signal stay at high unsigned low_width; // width of signal stay at low char now,old; void UserCount(void) { /* User's timer trigger function. Please refer to XDemo04 for detail description. Please refer to XDemo09 for example code. */ } void UserInit(void) { /* Initialize user's program. Please refer to XDemo04 for detail description. Please refer to XDemo09 for example code. */ InitLib(); up_t=0; down_t=0; if (inportb(1)&1) // D/I is High now (Use for I7188EA) // if (inportb(0)&1) // D/I is High now (Use for the other I7188E series) old=1; // initial DI0 is High else old=0; // initial DI0 is Low } void UserLoopFun(void) { /* VxComm.exe will call this function every scan time Please refer to XDemo11 for Real-time I/O control */ now=(inportb(1) & 1); // read DI0 (Use for I7188EA) // now=(inportb(0) & 1); // read DI0 (Use for the other I7188E series) if (now != old) // DI0 signal changed { if (now == 1) // Low become High { up_t=GetTimeTicks(); low_width=up_t-down_t; } else // High become Low { down_t=GetTimeTicks(); high_width=down_t-up_t; } old=now; } } char cVal[80]; int UserCmd(unsigned char *Cmd,unsigned char *Response) { /* Xserver executes this function when received a package form TCP port 10000 and the first two bytes are "19". Funtion of Xserver, Please refer to XDemo04 for detail description. */ if (Cmd[0]) // Not Null command { sprintf(cVal,"High:%lu Low:%lu Now:%d",high_width,low_width,now); strcpy(Response,cVal); // returns High and Low time return 1; // returns OK } return 0; // return ERROR } int VcomUserBinaryCmd(TCPREADDATA *p) { /* VXCOMM.EXE 2.6.12(04,Sep,2001) or later will support this function. Xserver executes this function when received a package form TCP port 10000 and the first two bytes are "23". Please refer to XDemo04 for detail description. Please refer to XDemo23 for example code. */ return 1; /* any value will be accept */ } int VcomCmdUser(TCPREADDATA *p) { /* VCOM3005 (Feb,22,2002) or later will call this function for PortUser. When packets received by TCP PORT PortUser(user defined) of 7188E/8000E, Xserver will call this function. Please refer to XDemo04 for detail description. */ VcomSendSocket(p->Socket,p->ReadUartChar,p->Length); return 1; /* any value will be accept */ } void PortUserStart(int skt) { /* XS8_3200.Lib Version 3.2.00 (20,Apr,2004) or later version supports this function. When a TCP/IP client connects to the 7188E/8000E via the user's defined port(PortUser), the Xserver calls the function once. Please refer to XDemo04 for detail description. */ skt=skt; //do nothing } void Port9999Start(int skt) { /* XS8_3200.Lib Version 3.2.00 (20,Apr,2004) or later version supports this function. When a TCP/IP client connects to the 7188E/8000E TCP port 9999, the Xserver calls the function once. Please refer to XDemo04 for detail description. */ skt=skt; //do nothing } void Port502Start(int skt) { /* XS8_3200.Lib Version 3.2.00 (20,Apr,2004) or later version supports this function. When a TCP/IP client connects to the 7188E/8000E TCP port 502, the Xserver calls the function once. Please refer to XDemo04 for detail description. */ skt=skt; //do nothing }