www.pudn.com > 8255_code_lib.rar > DIOTST01.C
/*- * ---------------------------------------------------------------------- * File : DIOTST01.C * Creator : Blake Miller * Version : 01.01.00 February 1991 * Language : Microsoft C Version 5.1 * Purpose : Intel 8255 Compatible Digital IO Functions * : Test Program #1 * ---------------------------------------------------------------------- * Link : DIOLIB?.LIB * ---------------------------------------------------------------------- * Revision History: * 022891 BVM : Change int to short. * 091190 BVM : Creation * ---------------------------------------------------------------------- */ #define P_NAME "DIOTST01" #define P_TITL "DIOLIB Digital IO Function Demonstration" #define P_AUTH "Blake Miller" #define P_VERS "01.01.00" #define P_DATE "February 28, 1991" #define P_PURP "Toggle bits at the 8255" /* Include Files ----------------------------*/ #define DIOTST01_C_DEFINED 1 #include#include #include #include "DIOLIB.H" #undef DIOTST01_C_DEFINED /* Function Prototype -----------------------*/ void kb_dump (void); /* keyboard flush function */ void kb_wait (void); /* keypress wait / message */ /*- * ---------------------------------------------------------------------- * Function Definition * ---------------------------------------------------------------------- */ void main (void) { short i; /* counter */ short bitnum; /* bit number */ short bstate; /* bit state */ char s[32]; /* gets buffer */ unsigned char prtbyt; /* port byte */ DIODAT dioprt; /* port data */ /* Print Program Header */ printf ("\n" ); printf ("Program : %s - %s.\n", P_NAME, P_TITL ); printf ("Author : %s\n", P_AUTH ); printf ("Version : %s %s\n", P_VERS, P_DATE ); printf ("Purpose : %s.\n", P_PURP ); printf ("\n" ); printf ("This program will fiddle with the bits of the 8255.\n"); printf ("\n"); /* Prompt user for address of the 8255. * Exit if an empty string is entered. */ printf ("NOTE: 300 Hex is 768 in decimal.\n"); printf ("Enter the base address of the 8255 in decimal : "); gets (s); if ( *s == 0 ){ printf ("Empty string detected. Exiting...\n"); exit (0); } i = atoi(s); /* get address of board */ dio_init (&dioprt, i); /* initialize port data */ /* -------------------------------------------------------- * Digital Output Demonstration * -------------------------------------------------------- */ printf ("\n" ); printf ("Digital Output Demonstration.\n"); printf ("Set up output detection circuitry on ANY of the 8255\n"); printf ("output lines. They will be toggled, flashed, etc.\n"); printf ("ALL lines will be set for output so remove any driving\n"); printf ("(INPUT) circuitry at this time, please.\n"); kb_wait(); dio_config (&dioprt, 0, 0, 0, 0); /* all ports output */ printf ("Clear all bits in digital IO...\n"); dio_dump_bytes (&dioprt); /* all bits clear */ printf ("Toggle bits in digital IO...\n"); bitnum = 0; while ( 1 ){ if ( kbhit() ) break; dio_bitput (&dioprt, bitnum, 0); /* clear bit (OFF) */ bitnum++; bitnum = (bitnum % 24); /* bits from 0 to 23 */ dio_bitput (&dioprt, bitnum, 1); /* set bit (ON ) */ for ( i = 0; i < 200; i++ ){ printf ("......\r"); } } printf ("Set all bits in digital IO...\n"); dio_put_byte (&dioprt, DIO_PORTA, 0xFF); dio_put_byte (&dioprt, DIO_PORTB, 0xFF); dio_put_byte (&dioprt, DIO_PORTC, 0xFF); kb_wait(); printf ("Clear all bits in digital IO...\n"); dio_put_byte (&dioprt, DIO_PORTA, 0); dio_put_byte (&dioprt, DIO_PORTB, 0); dio_put_byte (&dioprt, DIO_PORTC, 0); kb_wait(); printf ("Set all bits in digital IO Port A...\n"); dio_put_byte (&dioprt, DIO_PORTA, 0xFF); kb_wait(); dio_put_byte (&dioprt, DIO_PORTA, 0); printf ("Set all bits in digital IO Port B...\n"); dio_put_byte (&dioprt, DIO_PORTB, 0xFF); kb_wait(); dio_put_byte (&dioprt, DIO_PORTB, 0); printf ("Set all bits in digital IO Port C Low...\n"); dio_put_byte (&dioprt, DIO_PORTC, 0x0F); kb_wait(); dio_put_byte (&dioprt, DIO_PORTC, 0); printf ("Set all bits in digital IO Port C High...\n"); dio_put_byte (&dioprt, DIO_PORTC, 0xF0); kb_wait(); dio_put_byte (&dioprt, DIO_PORTC, 0x00); /* -------------------------------------------------------- * Digital Input Demonstration * -------------------------------------------------------- */ printf ("\n" ); printf ("Digital Input Demonstration.\n"); printf ("Set up some input circuitry on ANY of the 8255\n"); printf ("digital I/O lines. They will be sensed.\n"); printf ("ALL lines will be set for input so remove any detection\n"); printf ("(OUTPUT) circuitry at this time, please.\n"); kb_wait(); dio_config (&dioprt, 1, 1, 1, 1); /* all ports input */ dio_load_bytes (&dioprt); /* all bits read */ printf ("Read ALL bits in digital IO...\n"); for ( bitnum = 0; bitnum <= 23; bitnum++ ){ dio_bitget (&dioprt, bitnum, &bstate); printf ("Bit %2d is ", bitnum); if ( bstate ) printf ("SET \n"); else printf ("CLEAR\n"); } kb_wait(); printf ("Set any new input configuration before all ports\n"); printf ("will be sensed and the settings printed out.\n"); kb_wait(); dio_get_byte (&dioprt, DIO_PORTA, &prtbyt); printf ("Data for Port A is %02X\n", (unsigned int) prtbyt); dio_get_byte (&dioprt, DIO_PORTB, &prtbyt); printf ("Data for Port B is %02X\n", (unsigned int) prtbyt); dio_get_byte (&dioprt, DIO_PORTC, &prtbyt); printf ("Data for Port C is %02X\n", (unsigned int) prtbyt); kb_wait(); printf ("That is the end of this demonstration program.\n"); kb_wait(); exit ( 0 ); } /*- * ---------------------------------------------------------------------- * Support Function Definitions * ---------------------------------------------------------------------- */ /*- Flush Keyboard ----------------------------** * Check for keypress, and read them out of * the buffer until there are no more. */ void kb_dump (void) { while ( kbhit() ){ /* key was pressed */ if ( (getch() == 0x00) || /* read out keypress */ (getch() == 0xE0) ) getch(); /* no function key codes */ } } /*- Keyboard Wait ----------------------------** * Flush keyboard. * Print blank line, then print a message to press * spacebar to continue, then wait for keypress, then * erase message and return. */ void kb_wait (void) { kb_dump (); printf ("\r\n"); printf ("[ PRESS TO CONTINUE ]\r"); if ( getch() == 0 ) getch(); printf (" \r"); } /*- * ---------------------------------------------------------------------- * END DIOTST01.C Source File * ---------------------------------------------------------------------- */