⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 i8255to1.c

📁 功能强大
💻 C
字号:
/*-
 *  ----------------------------------------------------------------------
 *  File        :   I8255TO1.C
 *  Creator     :   Blake Miller
 *  Version     :   01.00.00            February 1991
 *  Language    :   Microsoft Quick C   Version 2.0
 *  Purpose     :   I8255 Digital IO
 *              :   Demonstration Program #1
 *  ----------------------------------------------------------------------
 */

#include    <conio.h>
#include    <stdio.h>
#include    <stdlib.h>
#include    "I8255FN.H"

#define     PPI_BASE    0x300   /* I8255 Base Address   */

void    main ( void );
void kb_dump ( void );  /* flush keyboard buffer    */
int  kb_wait ( void );  /* wait for keypress        */

/*  convert unsigned data value to a binary string
 */
extern void scv_uvtobs ( void *, char *, int, int, int, int );

void main (void)
	{
	unsigned char   inbyte;         /* input byte   */
	I8255DAT        diodat;         /* 8255 data    */
	char            strdat[16];     /* binary text  */

	/*  Initialize 8255 data, assuming base address is at PPI_BASE
	 */
	I8255_init (&diodat, PPI_BASE);

	/*  Initialize 8255 hardware, and set all ports to output
	 */
	I8255_config (&diodat, 0, 0, 0, 0);

	/*  Set data for all ports to zero
	 */
	I8255_put_byte (&diodat, 1, 0);
	I8255_put_byte (&diodat, 2, 0);
	I8255_put_byte (&diodat, 3, 0);

	printf ("Set port A to all 1\n");
	I8255_put_byte (&diodat, 1, 0xFF);
	kb_wait();
	printf ("Set port A to all 0\n");
	printf ("Set port B to all 1\n");
	I8255_put_byte (&diodat, 1, 0x00);
	I8255_put_byte (&diodat, 2, 0xFF);
	kb_wait();
	printf ("Set port B to all 0\n");
	printf ("Set port C to all 1\n");
	I8255_put_byte (&diodat, 2, 0x00);
	I8255_put_byte (&diodat, 3, 0xFF);
	kb_wait();
	I8255_put_byte (&diodat, 3, 0x00);

	printf ("Set all ports to input.\n");
	I8255_config (&diodat, 1, 1, 1, 1);

	kb_dump ();
	printf ("\nPrint out input value of Port A till keypress...\n");
	while ( !kbhit() ){
		I8255_get_byte (&diodat, 1, &inbyte);
		scv_uvtobs ( (void *)&inbyte, strdat, 7, 0, '1', '0' );
		printf ("Port A Data : %02X = %s\r", (unsigned int)inbyte, strdat);
		}

	kb_dump ();
	printf ("\nPrint out input value of Port B till keypress...\n");
	while ( !kbhit() ){
		I8255_get_byte (&diodat, 2, &inbyte);
		scv_uvtobs ( (void *)&inbyte, strdat, 7, 0, '1', '0' );
		printf ("Port B Data : %02X = %s\r", (unsigned int)inbyte, strdat);
		}

	kb_dump ();
	printf ("\nPrint out input value of Port C till keypress...\n");
	while ( !kbhit() ){
		I8255_get_byte (&diodat, 3, &inbyte);
		scv_uvtobs ( (void *)&inbyte, strdat, 7, 0, '1', '0' );
		printf ("Port C Data : %02X = %s\r", (unsigned int)inbyte, strdat);
		}

	exit (0);
	}

/*- Flush Keyboard ----------------------------**
 *  Check for keypress, and read them out of
 *  the buffer until there are no more.
 */
void kb_dump (void)
	{
	short   ch;
	while ( kbhit() ){          /* key was pressed          */
		ch = getch();           /* read out keypress        */
		if ( (ch == 0x00) || (ch == 0xE0) )
			getch();            /* eat 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.
 */
int kb_wait ( void )
	{
	short   ch;

	kb_dump ();
	printf ("\r\n");
	printf ("[ PRESS <SPACE-BAR> TO CONTINUE ]\r");
	ch = getch();
	if ( (ch == 0x00) || (ch == 0xE0) )
		ch = getch() | 0x0100;
	printf ("                                 \r");
	return (ch );
	}

/*-
 *  ----------------------------------------------------------------------
 *  END I8255T01.C Source File
 *  ----------------------------------------------------------------------
 */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -