/* (c)Copyright Sealevel Systems Incorporated, 1993 - 1995 */ /* this program demonstrates how to interface to the Sealevel PIO48 board */ /* the first connector (J1) is assumed to control output modules */ /* the second connector (J3) is assumed to monitor input modules */ #include #include #define base 0x300 int bval,onoff, slect, status, wordout, wout, bit; unsigned port; main() { _clearscreen(_GCLEARSCREEN); outp(base+3,128); /* control port1: sets a,b,c rack 1 as output */ outp(base+7,155); /* control port2: sets a,b,c rack 2 as input */ outp(base,255); /* sets port a off */ outp(base+1,255); /* sets port b off */ outp(base+2,255); /* sets port c off */ _settextposition(12,10); printf("THE I/O DEMO DRIVER DEFAULTS TO A BASE ADDRESS OF 300 HEX\n"); _settextposition(13,10); printf("TO CHANGE THIS ADDRESS, USE THE PORT SELECT ROUTINE\n"); _settextposition(16,25); printf("Press any key to continue\n"); while( !kbhit() ); port=0x300; menu: _clearscreen(_GCLEARSCREEN); _settextposition(2,20); printf("DEMO PROGRAM FOR THE SEALEVEL DIO32 BOARD\n"); _settextposition(5,25); printf("1 - Select port...currently %x Hex\n",port); _settextposition(6,25); printf("2 - Set a bit\n"); _settextposition(7,25); printf("3 - Reset a bit\n"); _settextposition(8,25); printf("4 - Test a bit\n"); _settextposition(9,25); printf("5 - Set a byte\n"); _settextposition(10,25); printf("6 - Clear a byte\n"); _settextposition(11,25); printf("7 - Read a byte\n"); _settextposition(12,25); printf("8 - Exit the demo program\n"); _settextposition(20,25); printf("Selection...> "); scanf("%d",&slect); switch (slect){ case 1: goto setport; case 2: goto setbit; case 3: goto resetbit; case 4: goto testbit; case 5: goto setbyte; case 6: goto clrbyte; case 7: goto rdbyte; case 8: goto xit; default: goto menu; } setport:_settextposition(20,25); printf("Enter port address in Hex...> "); scanf("%x",&port); goto menu; setbit: _settextposition(20,25); printf("Set bit (0-7) on port %x...> ",port); scanf("%d",&bit); if (0 > bit | bit > 7){ _settextposition(20,52); printf(" "); goto setbit; } status=inp(port); wordout=255-(1 << bit); outp(port,(wordout & status)); goto menu; resetbit:_settextposition(20,25); printf("Reset bit (0-7) on port %x...> ",port); scanf("%d",&bit); if (0 > bit | bit > 7){ _settextposition(20,55); printf(" "); goto resetbit; } status=inp(port); wordout=(1 << bit); outp(port,(wordout | status)); goto menu; testbit:_settextposition(20,25); printf("Test bit (0-7) on port %x...> ",port); scanf("%d",&bit); if (0 > bit | bit > 7){ _settextposition(20,55); printf(" "); goto testbit; } status=inp(port); wordout=(1 << bit); onoff=1; if(status & wordout) onoff=0; _settextposition(20,25); printf("Status of bit %d on port %x is %d ",bit,port,onoff); _settextposition(22,25); printf("Press any key to continue..."); while (!kbhit()); goto menu; rdbyte:status=255-inp(port); _settextposition(20,25); printf("The value on port %x = %d",port,status); _settextposition(22,25); printf("Press any key to continue..."); while (!kbhit()); goto menu; clrbyte:_settextposition(20,15); outp(port,255); printf("Port %x has been cleared...Press any key to continue",port); while(!kbhit()); goto menu; setbyte:_settextposition(20,25); printf("Byte value to be set on port %x...> ",port); scanf("%d",&bval); if (0 > bval | bval > 255){ _settextposition(20,60); printf(" "); goto setbyte; } outp(port,255-bval); goto menu; xit:; }