#include #include #include #include #include "define.h" unsigned ChoosePort(); int ChooseCounter(); int ChooseConfig(); int ChooseDir(int DirectNum); void main(void) { int FunctionNum = 1; int result, PortNum; int BitNum, BitValue, ByteValue; int *Data, *BitData, *CountValue; int DirectNum, Direction; int CounterNum, Config; int Port, DAChannel, DARange, DAValue; char LoadValue[6]; int value; long long_value; ioperm(0x300, 16, 1); while (FunctionNum != 0) { printf("0. Exit\n1. DConPort\n2. DBitOut\n3. DIn\n4. DBitIn\n5. DOut\n6. C8254Config\n7. CLoad\n8. CIn\n9. AOut\n"); printf("Choose a function to execute --> "); scanf("%d", &FunctionNum); switch (FunctionNum) { case 0: exit(0); break; case 1: Port = ChoosePort(); printf("1. Input\n2. Output\n"); printf("Configure port as --> "); scanf("%d", &DirectNum); Direction = ChooseDir(DirectNum); result = DConfigPort(Port, Direction); break; case 2: Port = ChoosePort(); printf("Enter a bit number (0-7) to turn on --> "); scanf("%d", &BitNum); printf("\nEnter a value (0 or 1) for bit %d --> ", BitNum); scanf("%d", &BitValue); result = DBitOut(Port, BitNum, BitValue); break; case 3: Port = ChoosePort(); result = DIn(Port, &Data); printf("The port read %d in decimal and %x in hexadecimal.\n", Data, Data); printf("Error code: %d\n", result); break; case 4: Port = ChoosePort(); printf("Enter a bit number (0-7) to read --> "); scanf("%d", &BitNum); result = DBitIn(Port, BitNum, &BitData); printf("The value of the bit is a %d.\n",BitData); break; case 5: Port = ChoosePort(); printf("Enter a value in decimal to write to the port --> "); scanf("%d", &ByteValue); result = DOut(Port, ByteValue); break; case 6: CounterNum = ChooseCounter(); Config = ChooseConfig(); result = C8254Config(CounterNum, Config); break; case 7: CounterNum = ChooseCounter(); printf("Enter a value in the form 0xXXXX to write to the port --> "); scanf("%s", LoadValue); result = CLoad(CounterNum, &LoadValue); break; case 8: CounterNum = ChooseCounter(); result = CIn(CounterNum, &CountValue); printf("I am here.\n"); break; case 9: printf("Enter a channel for output (0 or 1) --> "); scanf("%d", &DAChannel); printf("Enter a range code --> "); scanf("%d", &DARange); printf("Enter a value in decimal (0-4095) --> "); scanf("%d", &DAValue); result = AOut(DAChannel, DARange, DAValue); break; default: exit(1); break; } } exit(0); } unsigned ChoosePort() { int PortNum; unsigned x; printf("1. PORTA\n2. PORTB\n3. PORTCL\n4. PORTCH\n"); printf("Choose a port to configure --> "); scanf("%d", &PortNum); switch (PortNum) { case 1: x = PORTA; break; case 2: x = PORTB; break; case 3: x = PORTCL; break; case 4: x = PORTCH; break; default: return (1); } return(x); } int ChooseDir(int DirectNum) { int x; if (DirectNum == 1) x = DIGITALIN; else if (DirectNum == 2) x = DIGITALOUT; else exit(0); return (x); } int ChooseCounter() { int x; printf("Choose counter 1, 2 or 3 -> "); scanf("%d", &x); return(x); } int ChooseConfig() { int x; printf("0. HIGHONLASTCOUNT\n1. ONESHOT\n2. RATEGENERATOR\n3. SQUAREWAVE\n4. SOFTWARESTROBE\n5. HARDWARESTROBE\n"); printf("Choose a configuration -> "); scanf("%d", &x); return(x); }