输入输出指的是产品输入输出视频信号的端口,比较常见的是S端子和复合视频端口, 以下是为大家整理的关于gpio输入输出实验报告5篇 , 供大家参考选择。
gpio输入输出实验报告5篇
第1篇: gpio输入输出实验报告
实验四 标准输入输出格式控制
一、实验目的
1、掌握输入输出的基本方法
2、熟悉常用输入输出格式控制的方法
二、实验内容
(一)无格式输入输出
1、无格式输出,输入下面程序观察输出结果
#include
using namespace std;
void main()
{
int a=10;
int b=20;
int c=30;
cout
第2篇: gpio输入输出实验报告
终端输入/输出
1 我怎样使我的程序不回射输入?
我怎样能使我的程序不回射输入,就象登录时询问我的口令时那样?
有一个简单方法,也有一个稍微复杂点的方法:
简单方法是使用‘getpass()’函数,它几乎能在所有Unix系统上找到。它以一个给定的字符串参数作为提示符(prompt)。它读取输入直到读到一个‘EOF’或换行符(译者注:‘EOF’用‘^d’输入,而换行符为‘^m’或回车)然后返回一个指向位于静态内存区包含键入字符的字符串指针。(译者注:字符串不包含换行符)
复杂一点的方法是使用‘tcgetattr()’函数和‘tcsetattr()’函数,两个函数都使用一个‘struct termios’结构来操纵终端。下面这两段程序应当能设置回射状态和不回射状态。
#include
#include
#include
#include
static struct termios stored_settings;
void echo_off(void)
{
struct termios new_settings;
tcgetattr(0,&stored_settings);
new_settings = stored_settings;
new_settings.c_lflag &= (~ECHO);
tcsetattr(0,TCSANOW,&new_settings);
return;
}
void echo_on(void)
{
tcsetattr(0,TCSANOW,&stored_settings);
return;
}
两段程序使用到的都是在POSIX标准定义的。
2 我怎样从终端读取单个字符?
我怎样从终端读取单个字符?我的程序总是要等着用户按回车。
终端通常在标准(canonical)模式,在此模式输入总是经编辑后以行读入。你可以设置终端为非标准(non-canonical)模式,而在此模式下你可以设置在输入传递给你的程序前读入多少字符。你也可以设定非标准模式的计时器为0,这个计时器根据设定的时间间隔清空你的缓冲区。这样做使你可以使用‘getc()’函数立即获得用户的按键输入。我们使用的‘tcgetattr()’函数和‘tcsetattr()’函数都是在POSIX中定义用来操纵‘termios’结构的。
#include
#include
#include
#include
static struct termios stored_settings;
void set_keypress(void)
{
struct termios new_settings;
tcgetattr(0,&stored_settings);
new_settings = stored_settings;
/* Disable canonical mode, and set buffer size to 1 byte */
new_settings.c_lflag &= (~ICANON);
new_settings.c_cc[VTIME] = 0;
new_settings.c_cc[VMIN] = 1;
tcsetattr(0,TCSANOW,&new_settings);
return;
}
void reset_keypress(void)
{
tcsetattr(0,TCSANOW,&stored_settings);
return;
}
3 我怎样检查是否一个键被摁下?
我怎样检查是否一个键被摁下?在DOS上我用‘kbhit()’函数,但是在UNIX上看来没有相同作用的函数?
如果你设定了终端为单一字符模式(参见上一个问题解答),那么(在大多数系统)上你可以使用‘select()’函数或‘poll()’函数测试输入是否可读。
4 我怎样将光标在屏幕里移动?
我怎样将光标在屏幕里移动?我想不用curses而做全屏编辑。(译者注:curses是桓鯟/C++编程工具库,它提供编程者许多函数调用,在不用关心终端类型的情况下操纵终端的显示)。
不开玩笑,你也许不应该想去做这个。Curses工具库知道怎样控制不同终端类型所表现出的奇特的东西(oddities);当然termcap/terminfo数据会告诉你任何终端类型具有的这些奇特东西,但你可能会发现正确把握所有这些奇特组合是一件艰巨的工作。(译者注:在Linux系统上,termcap数据位于/etc/termcap,而terminfo数据位于/usr/share/terminfo下按不同终端类型首字母存放的不同文件,目前终端类型数已逾两千种)
但是,你坚决要把你自己搞的手忙脚乱(getting your hands dirty),那么去研究一下 ‘termcap’的函数集,特别是‘tputs()’,‘tparm()’和‘tgoto()’函数。
5 pttys是什么?
Pseudo-teletypes(pttys, ptys,或其它不同的缩写)是具有两部份的伪设备(pseudo-devices):一部份为“主人”一边,你可以认为是一个‘用户’,另一部份是“仆人”一边,它象一个标准的tty设备一样工作。
它们之所以存在是为了提供在程序控制下的一种模拟串行终端行为的方法。比如,‘telnet’在远端系统使用一个伪终端;服务器的远端登录shell程序只是从“仆人”一边的tty设备期待着得到操作行为,而在“主人”一边的伪终端由一个守护程序控制,同时守护程序将所有数据通过网络转发。pttys也被其它程序使用,比如 ‘xterm’,‘expect’,‘script’,‘screen’,‘emacs’和其它很多程序。
6 怎样控制一个串行口和调制解调器?
Unix系统下对于串行口的控制很大程度上受串行终端传统的使用影响。以往,需要不同ioctls函数调用的组合和其它黑客行为才能控制一个串行设备的正确操作,不过值得庆幸的是,POSIX在这个方面的标准化作了一些努力。
如果你使用的系统不支持‘’头文件,‘tcsetattr()’和其它相关函数,那么你只能到其它地方去找点资料(或将你的老古董系统升级一下)。
但是不同的系统仍然有显著的区别,主要是在设备名,硬件流控制的操作,和调制解调器的信号方面。(只要可能,尽量让设备驱动程序去做握手(handshaking)工作,而不要试图直接操纵握手信号。)
打开和初始华串行设备的基本步骤是:
* 调用‘open()’函数打开设备;而且可能需要使用特定标志作为参数:`O_NONBLOCK"除非使用这个标志,否则打开一个供拨入(dial-in)或由调制解调器控制的设备会造成‘open()’调用被阻塞直到线路接通(carrier is present)。一个非阻塞的打开操作给你在需要时令调制解调器控制失效的机会。(参见下面的CLOCAL)`O_NOCTTY"在自4.4BSD演化的系统上这个标志是多余的,但在其它系统上它控制串行设备是否成为会话的控制终端。在大多数情况下你可能不想获得一个控制终端,所以就要设置这个标志,但是也有例外情况。
* 调用‘tcgetattr()’函数获得当前设备模式。虽然有人会经常取消(ignore)得到的大多数或全部初始设定,但它仍然不失为一个初始化‘struct termios’结构的便利方法。
* 设置termios 结构里‘c_iflag’,‘c_oflag’,‘c_flag’,‘c_lfag’和‘c_cc’
为合适的值。(参见下面部分。)
* 调用‘cfsetispeed()’和‘cfsetospeed()’设定设想的波特率。很少系统允许你设置不同的输入和输出速度,所以普通规律是你需要设成同一个设想的值。
* 调用‘tcsetattr()’设定设备模式。
* 如果你是用‘O_NONBLOCK’标志打开的端口,你可能希望调用‘fcntl()’函数将‘O_NONBLOCK’标志重新设置成关闭。因为不同系统看来对是否由非阻塞打开的端口对今后的‘read()’调用造成影响有不同的处理;所以最好显式地设置好。一旦你打开并设置了端口,你可以正常地调用‘read()’函数和‘write()’函数。注意到‘read()’函数的行为将受到你调用‘tcsetattr()’函数时的标志参数设定的控制。
‘tcflush()’,‘tcdrain()’,‘tcsendbreak()’和‘tcflow()’是其它一些你应当注意的函数。
当你使用完端口想要关闭时,要注意一些系统上特别恶心的小危险;如果有任何输出数据等待被写到设备(比如输出流被硬件或软件握手而暂停),你的进程将因为‘close()’函数调用而被挂起(hang)直到输出数据排空,而且这时的进程是*不可杀的*(unkillably)。所以调用‘tcflush()’函数丢弃待发数据可能是个明智之举。(在我的经验中,在tty设备上被阻塞的输出数据是造成不可杀进程最普通的原因。)
7 串行设备和类型
不同系统用于串行端口设备的设备名大相径庭。以下是不同系统的一些例子:
* ‘/dev/tty[0-9][a-z]’作为直接访问设备,而‘/dev/tty[0-9][A-Z]’ 作为调制解调器控制设备(比如SCO Unix)
* ‘/dev/cua[0-9]p[0-9]’作为直接访问设备,‘/dev/cul[0-9]p[0-9]’作为拨出设备,而‘/dev/ttyd[0-9]p[0-9]’作为拨入设备(比如HP-UX)
* ‘/dev/cua[a-z][0-9]’作为拨出设备而‘/dev/tty[a-z][0-9]’作为拨入设备(比如FreeBSD)是否正确地同所用设备名交互,并在任何硬件握手信号线上产生相应的效果是与系统,配置和硬件有关的,但是差不多总是遵循下面这些规则(假设硬件是RS-232 DTE):
- 对于任何设备的一个成功打开操作应当设置DTR和RTS
- 一个对于由调制解调器控制或供拨入的设备的阻塞打开操作将等待DCD(并且可能DSR和/或CTS也需要)被设置,通常在设置DTR/RTS之后。
- 如果一个对于拨出设备的打开操作正巧赶上一个对于相应拨入设备的打开操作因为等待线路接通而阻塞,那么打开拨出的操作*也许*造成打开拨入的操作完成,但*也许也不*造成。一些系统为拨入和拨出端口实现一个简单的共享方案,当拨出端口在使用时,拨入端口被有效地设置成睡眠状态(“put to sleep”);其它系统不这样做,在这种系统上为避免竞争(contention)问题,需要外部的协助才能使拨入和拨出共享端口(比如UUCP锁定文件的使用)。
第3篇: gpio输入输出实验报告
实 验 报 告
课程名称 程序设计基础——c语言
实验项目名称 实验1 基本输入输出
实验学生班级
实验学生姓名
学 号
同组学生姓名 \
实验时间
实验地点
实验成绩评定
指导教师签字 年 月 日
第4篇: gpio输入输出实验报告
GPIO实验一、实验目的1.掌握GPIO 口基本寄存器的使用,掌握如何将GPIO 作为输出口。
2.初步了解如何使用C 语言编写飞思卡尔单片机程序。
二、实验器材1.MC9S12XSMAA开发板
2.USBDM下载器
3.计算机一台
三、实验电路开发板LED实验电路
四、实验原理开发板上有8个发光二极管,每个发光二极管串联一个限流电阻,用单片机的PB口控制发光二极管的两灭状态,PB口的管脚置1时,发光二极管熄灭,PB口清零时,发光二极管点亮。
五、程序代码#include /* common defines and macros */
#include "derivative.h" /* derivative-specific definitions */
#define LED PORTB //定义LED为PB端口
#define LED_dir DDRB //定义LED_dir为DDRB寄存器,控制输入/输出
unsigned char data=0x01;
void delay(void) //延时函数
{
unsigned int i,j;
for(j=0;j
第5篇: gpio输入输出实验报告
【实验目的】
掌握8255 的工作方式及应用编程。
掌握8255的典型应用电路接法。
【试验设备】
PC微机一台、TD-PIT+实验系统一套。
【实验内容】
基本输入输出实验。编写程序,使8255的A口为输出,B口为输入,完成拨动开关到数据灯的数据传输。要求只要开关拨动,数据灯的显示就改变。
【实验原理】
并行接口是以数据的字节为单位与I/O设备或被控制对象之间传递信息。CPU和接口之间的数据传送总是并行的,即可以同时传递8位、16位、32位等。8255可编程外围接口芯片是Intel公司生产的通用并行I/O接口芯片,它具有A、B、C三个并行接口,用+5V单电源供电,能在以下三种方式下工作:方式0--基本输入/出方式、方式1--选通输入/出方式、方式2--双向选通工作方式。8255的内部结构及引脚如图8-1所示,8255工作方式控制字和C口按位置位/复位控制字格式如图8-2所示。
图8-1 8255的内部结构及引脚
【实验说明及步骤】
本实验使8255端口A工作在方式0并作为输出口,端口B工作在方式0并作为输入口。用一组开关信号接入端口B,端口A输出线接至一组数据灯上,然后通过对8255芯片编程来实现输入输出功能。参考程序流程如图8-3所示。
实验步骤如下。
1.确认从PC机引出的两根扁平电缆已经连接在实验平台上。
2.参考图8-4所示连接实验线路。
3.首先运行CHECK程序,查看I/O空间始地址。
4.利用查出的地址编写程序,然后编译链接。
5.运行程序,拨动开关,看数据灯显示是否正确。
(a)工作方式控制字 (b)C口按位置位/复位控制字
8-2 8255控制字格式
图8-3 8255并口应用实验(1)参考程序流程图
图8-4 8255并口应用实验(1)参考接线图
【汇编源程序】
CODE SEGMENT
ASSUEM CS:CODE
START:
MOV DX,0DC0CH
MOV AL,10000010B
OUT DX,AL
PP:
MOV DX,0DC04H
IN AL,DX
MOV DX,0DC00H
OUT DX,AL
MOV AH,1
INT 16H
JZ PP
QUIT:
MOV AH,4CH
INT 21H
CODE ENDS
END START
【实验结果】
在基本的输入输出实验中,A口的工作方式作为输入,接到开关上作为控制输入信号,而B口作为输出端连接到LED灯上可以通过灯的点亮和熄灭来判断输出信号。从实验中可以明显的看到,当key开关拨动后,经过8255处理后的输出信号端相对应的LED灯就会被点亮。具体图像如下(由于条件的限制,图像不是很清晰):
【实验总结】
可以通过对8255工作方式控制的设置,可以实现对对不同的端口设置其输入输出功能,从而实现输入与输出数据的处理功能。
【思考题】
任意设定一组开关状态(1或0):K7K6K5K4K3K2K1K0为 11010010 ,运行程序后,从B口读入到AL的值为 11010010 ,A口输出数据后,LED数据灯显示D7D6D5D4D3DD1D0 为 11010010(1表示灯亮,0表示灯不亮) 。
提示:可使DEBUG查看输入的数据:
E:\TANGDU \PIT-ASM>DEBUG 程序名.EXE(必须是EXE文件)
-U ;反汇编
-T ;用T命令单步运行,观察AL,特别是执行IN指令后AL的值。
例如,8255A初始化前AX=0000H;8255初始化后,AX=0082H(AL为控制字82H);执行IN指令后,AL的值即为从B口读入开关量。