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 
 *  ---------------------------------------------------------------------- 
 */