精华内容
下载资源
问答
  • 2021-05-22 09:02:12

    51单片机P1口输入输出实验实验报告

    实验一 P1口输入输出实验一 实验目的

    1 掌握P1口作为I/O口时的使用方法。

    2 理解读引脚和读锁存器的区别。

    实验原理 由 AT89C51 组成的单片机系统,通常情况下 P0 口分时复用作为地址、数据总线, P2 口提供 A15-A8 即高 8 位地址, P3 口用作第二功能,只有 P1 口用作 I/O 口。 P1 口是 8 位准双向口,它的每一位都可独立地定义为输入或输出。既可作为 8 位的并行 I/O 口,也可作为 8 个不同的输入输出端。 P1 口的结构如图 2.1 所示,当其工作在输入方式时,对应锁存器必须先写 1 ,才能正确地读到引脚上的信号,否则,若对应锁存器的值为 0 ,执行读引脚指令时,读到的结果永远为 0 。每个 I/O 端口都有两种读入,即读锁存器和读引脚,读引脚指令一般都是以 I/O 端口为源操作数的指令,如 MOV C , P1.3 ,而读锁存器指令一般为“读 - 修改 - 写”指令,如 ANL P1.3 , C 指令,请同学们在实验中体会。图 2 中, P1.2 作为输出口, P1.3 作为输入口。

    实验内容与要求

    编写程序实现当P1.3为低电平时(SW1闭合),发光管亮;P1.3为高电平时发光管灭。

    修改程序在执行读P1.3之前,先执行CLR P1.3,观察结果是否正确,分析在第二种情况下程序为什么不能正确执行,理解读引脚和读锁存器区别。 ORG 0000H

    MAIN: MOV SP,#60H ; 设置堆栈指针SP为60H

    MOV P1,#0FFH ;当P1口用作输入时,所有位对应的锁存器必须先置1

    LOOP: ;CLR P1.3

    MOV C,P1.3 ;读P1.3

    JC LIGHT

    CLR P1.2 ;LED灭

    SJMP LOOP

    LIGHT: SETB P1.2 ;LED 亮

    SJMP LOOP

    RET

    END

    若在执行读P1.3之前,先执行CLR P1.3,观察结果正确在执行读P1.3之前,先执行CLR P1.3,观察结果正确,程序不能正确执行,锁存器读引脚和读锁存器区别第一种方式是将引脚作为输入,那是真正地从外部引脚读进输入的值,第二种方式是该引脚处于输出状态时,有时需要改变这一位的状态,则并不需要真正地读引脚状态,而只是读入锁存器的状态,然后作某种变换后再输出。

    更多相关内容
  • STM32F407IGT6单片机GPIO流水灯 按键状态判断 光耦隔离输入输出实验KEIL5工程软件源码:" YSF4_HAL-002. GPIO-流水灯.rar YSF4_HAL-003. GPIO-蜂鸣器.rar YSF4_HAL-004. GPIO-按键状态判断之扫描式.rar YSF4_HAL-005....
  • 计算机组成原理——输入输出系统

    千次阅读 2022-04-05 21:38:11
    输入输出系统 5.1 概述 一、输入输出系统的发展概况 早期 分散连接 CPU 和 I/O设备串行工作 程序查询方式 接口模块和 DMA 阶段 总线连接 CPU 和 I/O设备 并行 工作 中断方式 DMA 方式 具有通道结构的...

    输入输出系统

    5.1 概述

    一、输入输出系统的发展概况

    1. 早期
    • 分散连接
    • CPU 和 I/O设备串行工作 程序查询方式
    1. 接口模块和 DMA 阶段
    • 总线连接
    • CPU 和 I/O设备 并行 工作
      • 中断方式
      • DMA 方式
    1. 具有通道结构的阶段
    2. 具有 I/O 处理机的阶段

    二、输入输出系统的组成

    1. I/O 软件

    (1) I/O 指令

    CPU 指令的一部分
    在这里插入图片描述

    (2) 通道指令

    通道自身的指令

    指出数组的首地址、传送字数、操作命令

    2. I/O 硬件

    设备 I/O 接口
    设备 设备控制器 通道

    三、I/O 设备与主机的联系方式

    1. I/O 设备编址方式

    (1) 统一编址 用取数、存数指令
    (2) 不统一(单独)编址 有专门的 I/O 指令

    2. 设备选址

    用设备选择电路识别是否被选中

    3. 传送方式

    (1) 串行
    (2) 并行

    4. 联络方式

    (1) 立即响应
    (2) 异步工作采用应答信号

    在这里插入图片描述

    (3) 同步工作采用同步时标

    5. I/O 设备与主机的连接方式

    (1) 辐射式连接

    在这里插入图片描述

    (2) 总线连接

    便于增删设备

    四、I/O设备与主机信息传送的控制方式

    1. 程序查询方式

    在这里插入图片描述

    我们来看下图这部分:

    在这里插入图片描述

    CPU运行速度快IO设备运行速度慢,那么CPU大部分时间都会处于一个踏步等待的状态

    2. 程序中断方式

    在这里插入图片描述

    CPU发出启动IO设备的指令,IO设备启动工作自身准备,数据准备,在准备的过程中CPU会去干其他的事情,IO设备尊卑完成后向CPU发出中断信息,CPU接受信息中断程序,然后专门去处理IO设备的请求

    此方式CPU 和 I/O 部分的并行工作,没有踏步等待现象和中断现行程序

    在这里插入图片描述

    在这里插入图片描述

    3. DMA 方式

    主存和 I/O 之间有一条直接数据通道
    不中断现行程序
    周期挪用(周期窃取)
    CPU 和 I/O 并行工作

    在这里插入图片描述

    与程序中断方式相比,将CPU与IO设备数据传输接到中释放出来

    三种方式的 CPU 工作效率比较

    在这里插入图片描述

    在这里插入图片描述

    5.2 I/O设备(非重点)

    一、概述

    在这里插入图片描述

    外部设备大致分三类

    • 人机交互设备 键盘、鼠标、打印机、显示器
    • 计算机信息存储设备 磁盘、光盘、磁带
    • 机—机通信设备 磁盘、光盘、磁带

    二、输入设备

    • 键盘
      • 按键
      • 判断哪个键按下
      • 将此键翻译成 ASCII 码 (编码键盘法)
    • 鼠标
      • 机械式 金属球 电位器
      • 光电式 光电转换器
    • 触摸屏

    三、输出设备

    • 显示器
      • 字符显示 字符发生器
      • 图形显示 主观图像
      • 图像显示 客观图像
    • 打印机
      • 击打式 点阵式(逐字、逐行)
      • 非击打式 激光(逐页)喷墨(逐字)

    四、其他

    • A/D、D/A 模拟/数字(数字/模拟)转换器
    • 终端 由键盘和显示器组成 完成显示控制与存储、键盘管理及通信控制
    • 汉字处理 汉字输入、汉字存储、汉字输出

    五、多媒体技术

    5.3 I/O接口

    一、概述

    为什么要设置接口?

    1. 实现设备的选择
    2. 实现数据缓冲达到速度匹配
    3. 实现数据串 并格式转换
    4. 实现电平转换
    5. 传送控制命令
    6. 反映设备的状态(“忙”、“就绪”、 “中断请求”)

    二、接口的功能和组成

    1.总线连接方式的 I/O 接口电路

    在这里插入图片描述

    • 设备选择线(单向):参与本次信息交换的设备码,端口号,设备地址
    • 数据线(双向):数据的输入与输出
    • 命令线(单向):传输命令信号
    • 状态线(单向):传输状态信号

    2. 接口的功能和组成

    功能组成
    选址功能设备选择电路
    设备选择电路命令寄存器、命令译码器
    传送数据的功能数据缓冲寄存器
    反映设备状态的功能设备状态标记

    在这里插入图片描述

    3. I/O 接口的基本组成

    在这里插入图片描述

    三、接口类型

    1. 按数据 传送方式 分类

      并行接口

      串行接口

    2. 按功能 选择的灵活性 分类

      可编程接口

      不可编程接口

    3. 通用性 分类

      通用接口

      专用接口

    4. 按数据传送的 控制方式 分类

      中断接口

      DMA 接口

    5.4 程序查询方式

    一、程序查询流程

    1. 查询流程

    单个设备

    在这里插入图片描述

    多个设备

    在这里插入图片描述

    2. 程序流程

    在这里插入图片描述

    其中设置计数值的目的是控制传输数据量

    二、程序查询方式的接口电路

    以输入为例

    在这里插入图片描述

    当有多个设备的时候要按优先级进行查询

    5.5 程序中断方式

    一、中断的概念

    CPU在执行程序的过程当中,如果发生意外或特殊事件,CPU要中断当前程序的处理,转而去处理特殊事件,中断结束后要返回之前的断点,继续执行之前的程序

    二、I/O 中断的产生

    CPU与设备是并行的工作的

    三、程序中断方式的接口电路

    1. 配置中断请求触发器和中断屏蔽触发器

    在这里插入图片描述

    中断屏蔽触发器的作用是当CPU正在处理一项非常重要的事情时不能被中断,此时中断请求就会被屏蔽

    2. 排队器

    当有多个设备设,要按优先级进行排队,一般速度快的优先级高,因为一般速度快的存储时间相对较短

    排队功能的实现常见的由链式排队器

    在这里插入图片描述

    设备 1#、2#、3#、4# 优先级按 降序排列

    INTR = 1 有请求

    3. 中断向量地址形成部件

    确认了选择哪个中断源的中断请求后,下一步就是找到中断服务程序的入口地址

    中断号:中断编号
    中断向量:中断服务程序的入口地址,包括中断地址,偏移量,状态信号
    向量地址:中断向量的地址

    在这里插入图片描述

    入口地址由硬件产生向量地址再由向量地址找到入口地址

    4. 程序中断方式接口电路的基本组成

    在这里插入图片描述

    四、I/O 中断处理过程

    1. CPU 响应中断的条件和时间

    (1) 条件

    允许中断触发器 EINT = 1
    用 开中断 指令将 EINT 置 “1”
    用 关中断 指令将 EINT 置“ 0” 或硬件 自动复位

    (2) 时间

    当 D = 1(随机)且 MASK = 0 时
    在每条指令执行阶段的结束前
    CPU 发 中断查询信号(将 INTR 置“1”)

    2. I/O 中断处理过程

    在这里插入图片描述

    五、中断服务程序流程

    1. 中断服务程序的流程

    (1) 保护现场
    • 程序断点的保护 中断隐指令完成
    • 寄存器内容的保护 进栈指令
    (2) 中断服务

    对不同的 I/O 设备具有不同内容的设备服务

    (3) 恢复现场

    出栈指令

    (4) 中断返回

    中断返回指令

    2. 单重中断和多重中断

    • 单重中断 不允许中断现行的中断服务程序
    • 多重中断 允许级别更高的中断源中断现行的中断服务程序

    3. 单重中断和多重中断的服务程序流程

    在这里插入图片描述

    中断周期要做三件事:保护断点、幸存中断服务程序的入口地址、关中断
    保护现场由入栈指令完成
    恢复现场由出栈指令完成

    单重与多重的区别在于多次将开中断任务提前了

    宏观 上 CPU 和 I/O 并行 工作
    微观 上 CPU 中断现行程序 为 I/O 服务

    5.6 DMA 方式

    直接访问存储器方式

    一、DMA 方式的特点

    1. DMA 和程序中断两种方式的数据通路

    在这里插入图片描述

    2. DMA 与主存交换数据的三种方式

    (1) 停止 CPU 访问主存(哒咩)

    控制简单
    CPU 处于不工作状态或保持状态
    未充分发挥 CPU 对主存的利用率

    在这里插入图片描述

    (2) 周期挪用(或周期窃取)

    DMA 访问主存有三种可能
    • CPU 此时不访存:DMA可以访存,CPU继续执行不访存的指令
    • CPU 正在访存:DMA等待 CPU访存
    • CPU 与 DMA 同时请求访存 同时请求访存,DMA优先
    此时 CPU 将总线控制权让给 DMA

    在这里插入图片描述

    (3) DMA 与 CPU 交替访问(哒咩)

    不需要 申请建立和归还 总线的使用权

    在这里插入图片描述

    二、DMA 接口的功能和组成

    1. DMA 接口功能

    (1) 向 CPU 申请 DMA 传送
    (2) 处理总线 控制权的转交
    (3) 管理 系统总线、控制 数据传送
    (4) 确定 数据传送的 首地址和长度 修正 传送过程中的数据 地址 和 长度
    (5) DMA 传送结束时,给出操作完成信号

    2. DMA 接口组成

    在这里插入图片描述

    地址寄存器AR:CPU要告诉DMA接口传输的数据的位置,故用一个地址寄存器来存储

    计数器WC:需要知道传输数据的量的多少,由计数器寄存器存储

    每完成一个数据的传输AR和WC都会+1

    设备地址寄存器DAR:用于存储外部设备的地址

    数据缓冲器BR用于暂存外部设备的数据

    输入输出过程需要DMA控制逻辑,控制在给定时刻给出给定的信号外部设备如果要进行DMA传输,外部设备向DMA控制器发出请求信号DREQ,DMA向外部设备发出反馈信息DACK,DMA控制器向CPU发出请求信号HRQ,CPU向DMA控制器发出放会信号HCDA

    中断机构用于WC=0时中断DMA

    三、DMA 的工作过程

    1. DMA 传送过程

    预处理、数据传送、后处理

    在这里插入图片描述

    (1)预处理

    数据传输前需要的一些处理

    • 通知DMA 控制逻辑传送方向(入/出)
    • 设备地址DMA 的DAR
    • 主存地址DMA 的AR
    • 传送字数DMA 的WC
    (2)数据传送

    在这里插入图片描述

    数据传送过程以输出为例

    在这里插入图片描述

    1. 将BR中的数据传入设备当中,此时BR没数据了
    2. 设备发出DREQ信号给DMA控制逻辑,相当于设备对DMA控制逻辑说我BR没数据了,你快点开始干活
    3. DMA控制逻辑通过总线向CPU提出总线和存储器的占用请求HRQ
    4. CPU在允许的情况下给出应答HLDA,CPU放弃总线和存储器的占用权
    5. 进行数据传输就要给出主存的地址,通过AR得到
    6. 由DMA控制器发出DACK通知设备已经可以开始设备传输了
    7. 主存将数据通过数据线存到BR中,AR和WC的数据+1
    8. WC判断数据是否传输完,如果WC计数为0WC向中断机构发出溢出信号
    9. 中断机构向CPU发出中断请求
    (5)后处理

    校验送入主存的数是否正确
    是否继续用 DMA
    测试传送过程是否正确,错则转诊断程序
    由中断服务程序完成

    2. DMA 接口与系统的连接方式(可以类比总线)

    (1) 具有公共请求线的 DMA 请求(类比总线判优的链式查询方式)

    在这里插入图片描述

    (2) 独立的 DMA 请求(类比总线判优的独立请求方式)

    在这里插入图片描述

    3. DMA 方式与程序中断方式的比较

    中断方式DMA 方式
    数据传送程序硬件
    响应时间指令执行结束存取周期结束
    处理异常情况不能
    中断请求传送数据后处理
    优先级

    四、DMA 接口的类型

    1. 选择型

    物理上 连接 多个 设备

    在 逻辑上 只允许连接 一个 设备

    在这里插入图片描述

    2. 多路型

    物理上 连接 多个 设备

    数据准备阶段 允许连接 多个 设备同时工作

    但在 数据传输阶段 还时只能有 一个 设备

    在这里插入图片描述

    展开全文
  • 笔试时的ACM模式输入输出汇总(C++版)

    千次阅读 多人点赞 2022-04-02 20:16:55
    笔试时的ACM模式输入输出汇总(C++版)

    C++输入输出基础知识:

    • C++语言未定义任何输入输出语句,而是使用标准库(standard library)来提供IO机制。

    • #include<iostream> 
      cin >> 
      cout << 
      
    • 标准输入输出对象

      • cin 标准输入(istream)
      • cout 标准输出(ostream对象)
      • cerr 输出警告和错误信息
      • clog 输出程序运行时的一般性信息
    • C++输入的每个字符串 由 空白(空格符 /换行符/制表符间)隔开文件结束标识符为crtl+Z(windows),control+D(linux)
      https://blog.csdn.net/Eddie_burning/article/details/51493523

    • 两种常用的输入模式:
      在这里插入图片描述

    • cin>> 语句读取用户输入的数据时,它会在遇到换行符时停止。换行字符未被读取,而是仍保留在键盘缓冲区中。从键盘读取数据的输入语句只在键盘缓冲区为空时等待用户输入值,但现在不为空。

    • cin 遇空格或换行,会停止识别,如果你打算输入的字符串中带1个或多个空格,则采用getline把停止识别的符号设置为‘\n’(即换行符),就能正确输入输出了。

    • cin.get 函数执行时,它开始从先前输入操作停止的键盘缓冲区读取,并发现了换行符,所以它无须等待用户输入另一个值。

    • 读取string对象时,string对象会自动忽略开头处的空白(即空格符、换行符、制表符等),并从第一个真正的字符开始读起,直到遇见下一处空白为止,认为为一个字符串。

    ACM模式输入输出参考程序

    #include<iostream>
    #include<sstream>
    #include<string>
    #include<vector>
    #include<algorithm>
    #include<limits.h>  //INT_MIN 和 INT_MAX的头文件  
    
    using namespace std;
    
    struct stu {
    	string name;
    	int num;
    };
    
    
    // 1. 直接输入一个数
    int main() {
    	int n = 0;
    	while (cin >> n) { 
    		cout << n << endl;
    	}
    	return -1;
    }
    
    // 2. 直接输入一个字符串
    int main() {
    	string str;
    	while (cin >> str) {
    		cout << str << endl;
    	}
    	return -1;
    }
    
    // 3. 只读取一个字符 
    int main() {
    	char ch;
    	//方式1
    	while (cin >> ch) {
    		cout << ch << endl;
    	}
    	//方式2: cin.get(ch) 或者 ch = cin.get() 或者 cin.get()
    	while (cin.get(ch)) {   
    		cout << ch << endl;
    	}
    	//方式3 :ch = getchar()  
    	while (getchar()) {
    		cout << ch << endl;
    	}
    	return -1;
    }
    
    
    // 3.1给定一个数,表示有多少组数(可能是数字和字符串的组合),然后读取
    int main() {
    	int n = 0; 
    	while (cin >> n) {   //每次读取1 + n 个数,即一个样例有n+1个数 
    		vector<int> nums(n);
    		for (int i = 0; i < n; i++) {
    			cin >> nums[i];
    		}
    		//处理这组数/字符串
    		for (int i = 0; i < n; i++) {
    			cout << nums[i] << endl;
    		}
    	}
    	return -1;
    }
    
    //3.2 首先给一个数字,表示需读取n个字符,然后顺序读取n个字符
    int main() {
    	int n = 0;
    	while (cin >> n) {  //输入数量
    		vector<string> strs;
    		for (int i = 0; i < n; i++) {
    			string temp;
    			cin >> temp;
    			strs.push_back(temp);
    		}
    		//处理这组字符串
    		sort(strs.begin(), strs.end());
    		for (auto& str : strs) {
    			cout << str << ' ';
    		}
    	}
    	return 0;
    }
    
    
    //4.未给定数据个数,但是每一行代表一组数据,每个数据之间用空格隔开
    //4.1使用getchar() 或者 cin.get() 读取判断是否是换行符,若是的话,则表示该组数(样例)结束了,需进行处理
    int main() {
    	int ele;
    	while (cin >> ele) {
    		int sum = ele;
    		// getchar()   //读取单个字符
    		/*while (cin.get() != '\n') {*/   //判断换行符号
    		while (getchar() != '\n') {  //如果不是换行符号的话,读到的是数字后面的空格或者table
    			int num;
    			cin >> num;
    			sum += num;
    		}
    		cout << sum << endl;
    	}
    	return 0;
    }
    
    //4.2 给定一行字符串,每个字符串用空格间隔,一个样例为一行
    int main() {
    	string str;
    	vector<string> strs;
    	while (cin >> str) {
    		strs.push_back(str);
    		if (getchar() == '\n') {  //控制测试样例
    			sort(strs.begin(), strs.end());
    			for (auto& str : strs) {
    				cout << str << " ";
    			}
    			cout << endl;
    			strs.clear();
    		}
    	}
    	return 0;
    }
    
    
    //4.3 使用getline 读取一整行数字到字符串input中,然后使用字符串流stringstream,读取单个数字或者字符。
    int main() {
    	string input;
    	while (getline(cin, input)) {  //读取一行
    		stringstream data(input);  //使用字符串流
    		int num = 0, sum = 0;
    		while (data >> num) {
    			sum += num;
    		}
    		cout << sum << endl;
    	}
    	return 0;
    }
    
    
    //4.4 使用getline 读取一整行字符串到字符串input中,然后使用字符串流stringstream,读取单个数字或者字符。
    int main() {
    	string words;
    	while (getline(cin, words)) {
    		stringstream data(words);
    		vector<string> strs;
    		string str;
    		while (data >> str) {
    			strs.push_back(str);
    		}
    		sort(strs.begin(), strs.end());
    		for (auto& str : strs) {
    			cout << str << " ";
    		}
    	}
    }
    
    //4.5 使用getline 读取一整行字符串到字符串input中,然后使用字符串流stringstream,读取单个数字或者字符。每个字符中间用','间隔
    int main() {
    	string line;
    	
    	//while (cin >> line) {  //因为加了“,”所以可以看出一个字符串读取
    	while(getline(cin, line)){
    		vector<string> strs;
    		stringstream ss(line);
    		string str;
    		while (getline(ss, str, ',')) {
    			strs.push_back(str);
    		}
    		//
    		sort(strs.begin(), strs.end());
    		for (auto& str : strs) {
    			cout << str << " ";
    		}
    		cout << endl;
    	}
    	return 0;
    }
    
    
    
    int main() {
    	string str;
    
    	
    	//C语言读取字符、数字
    	int a;
    	char c;
    	string s;
    
    	scanf_s("%d", &a);
    	scanf("%c", &c);
    	scanf("%s", &s);
    	printf("%d", a);
    
    
    	//读取字符
    	char ch;
    	cin >> ch;
    	ch = getchar();
    	while (cin.get(ch)) { //获得单个字符
    		;
    	}
    	
    	//读取字符串
    	cin >> str;  //遇到空白停止
    	getline(cin, str);  //读入一行字符串
    
    }
    

    参考资料

    展开全文
  • 第七章 输入输出接口

    千次阅读 2020-11-21 12:59:54
    文章目录I/O接口概述I/O接口的典型结构I/O端口的地址输入输出指令16位DOS应用程序无条件传送和查询传送无条件传送查询传送中断控制系统中断传送IA-32中断系统内部中断服务程序中断控制器外部中断服务程序驻留中断...

    I/O接口概述

    · 微机的外部设备多种多样
    工作原理、驱动方式、信息格式、以及工作速度方面彼此差别很大
    它们不能与CPU直接相连
    必须经过中间电路(I/O接口)再与系统相连
    · I/O接口是位于基本系统与外设间、实现两者数据交换的控制电路

    I/O接口的典型结构

    在这里插入图片描述
    I/O地址=外设端口,对应接口寄存器
    1. 内部结构
    · 数据寄存器
    保存处理器与外设之间交换的数据
    数据输入寄存器:保存从输入设备获取的数据,处理器选择合适的方式进行读取
    数据输出寄存器:保存处理器发往输出设备的数据,适时到达输出设备
    · 状态寄存器
    保存接口电路和外设当前的工作状态信息
    · 控制寄存器
    保存处理器控制接口电路和外设操作的有关信息
    2. 外部特性
    · 接口电路的外部特性由其引出信号来体现
    · I/O接口处于处理器与外设之间
    · 面向微处理器一侧的信号:与处理器总线或系统总线类似,有数据信号、地址信号和控制信号等
    · 面向外设一侧的信号: 与外设有关,外设数据信号、外设状态信号和外设控制信号
    3. 基本功能
    · 数据缓冲
    匹配快速的处理器与相对慢速的外设的数据交换
    缓冲Buffer:实现接口双方数据传输的速度匹配
    · 信号变换
    把信号相互转换为适合对方的形式
    计算机直接处理的信号:数字量(0和1组成的信号编码);开关量(只有两种状态的信号);脉冲量(低脉冲信号,高脉冲信号)
    4. 软件编程
    · 接口芯片具有可编程性(Programmable)
    · 命令字(控制字)
    写入接口芯片、选择工作方式、控制数据传输
    · 初始化程序
    选择I/O接口工作方式、设置原始工作状态等
    · 驱动程序
    操纵I/O接口完成具体工作

    I/O端口的编址

    I/O端口=I/O地址,对应I/O接口的寄存器
    一个接口电路可以具有多个I/O端口,每个端口用来保存和交换不同的信息
    数据寄存器、状态寄存器和控制寄存器占有的I/O地址常依次被称为数据端口、状态端口和控制端口
    输入、输出端口可以是同一个I/O地址

    1. I/O端口与存储器地址独立编址
      · I/O端口单独编排地址,独立于存储器地址
      · 用M/IO区分,有IN/OUT、MOV指令
      · 优点:
      I/O端口的地址空间独立
      控制和地址译码电路相对简单
      专门的I/O指令使程序清晰易读
      · 缺点:
      I/O指令没有存储器指令丰富
      在这里插入图片描述
    2. I/O端口与存储器地址统一编址
      · 将I/O端口与存储器地址统一编排
      · 全部都用MOV指令,靠地址范围区分
      · 优点:
      不需要专门的I/O指令
      I/O数据存取灵活
      · 缺点:
      占去部分存储器空间
      程序不易阅读
      在这里插入图片描述
    3. I/O地址译码
      与存储器地址译码在原理和方法上完全相同
      I/O地址不太强调连续,多采用部分译码
      在这里插入图片描述

    输入输出指令

    输入指令IN:数据从I/O接口输入到微处理器

    IN AL/AX/EAX,i8/DX
    ;举例
    IN AL,21H
    IN AL,DX
    

    输出指令OUT:数据从微处理器输出I/O接口

    OUT i8/DX,AL/AX/EAX
    
    1. I/O寻址方式
      · 直接寻址
      I/O指令直接提供8位I/O地址,只能寻址最低256个I/O地址(00~FFH)。用i8表示I/O地址,表达形式上与立即数一样
      · DX间接寻址
      用DX寄存器保存访问的I/O地址,可寻址全部I/O地址(0000~FFFFH)。直接书写成DX,表示I/O地址
    2. I/O数据传输量
      8位I/O传输:I/O指令使用AL
      16位I/O传输:I/O指令使用AX
      32位I/O传输:I/O指令使用EAX
    3. I/O保护
      · I/O敏感指令:IN、OUT和INS、OUTS,CLI和STI
      · IA-32处理器保护方式下,I/O特权和I/O许可位图限制I/O敏感指令的执行
      程序的当前特权高于或等于程序的I/O特权,I/O敏感指令才可以执行
      I/O许可位图给特权低的程序或虚拟8086方式的程序提供有限的I/O地址访问权限
      · Windows限制应用程序访问I/O地址

    无条件传送和查询传送/同步传送

    · 实现外设与主机的数据传送使I/O接口的主要功能之一。
    · 计算机主机有多种与外设传送数据的方式
    · 通过处理器执行I/O指令完成
    无条件传送、查询传送、中断传送
    · 以硬件为主,加快传输速度
    直接存储器存取(DMA)、使用专门的I/O处理机

    无条件传送

    处理器与慢速变化的设备交换数据
    外设总是处于“就绪”状态,随时可以进行数据传送
    无条件传送的接口电路:只考虑数据缓冲
    在这里插入图片描述

    1. 三态缓冲器
      · 三态缓冲器:加有控制端的同相器或反相器
      控制端T有效时,控制输入A端输出到Y端
      控制端T无效时,输出Y端呈现高阻状态
      · 74LS244:双4位三态同相缓冲器
      · 双向三态缓冲器:两个三态缓冲器构成
      输出允许控制端OE*:控制数据的输出
      方向控制端DIR:控制数据驱动的方向
      · 74LS245 :8位双向三态缓冲器芯片

    三态缓冲器
    在这里插入图片描述

    1. 锁存器
      · 使用D触发器构成:输入端为D端,控制端为C端;两个相反的输出信号Q和Q*;复位R或置位S控制端
      · 电平锁存:电平控制输出能跟随输入变化
      · 边沿锁存:输出只能锁存输入的状态
      74LS273:上升沿锁存的8位边沿锁存器
      74LS373:电平锁存的8位三态缓冲锁存器
      74LS374:边沿锁存的8位三态缓冲锁存器
      在这里插入图片描述
    2. 接口电路
      · 输入接口电路连接开关:读取开关状态
      · 输出接口电路连接发光二极管LED
      · 功能要求:开关闭合时,将相应LED点亮
      · 调用延时子程序DELAY保持一定时间
    	mov dx,8000h	;DX指向输入端口
    	in al,dx	;从输入端口读开关状态
    	not al	;求反
    	out dx,al	;送输出端口显示
    	call delay	;调子程序DELAY进行延时
    

    无条件传送接口
    在这里插入图片描述
    · 三态缓冲器74LS244构成输入端口,其两个控制端被连接在一起,连接8个开关K7~K0,开关的输入端通过电阻挂到高电平上,另一端接地。开关打开,缓冲器输入端为1,开关闭合,缓冲器输入端为0。
    · 8位三态缓冲器构成数据输入寄存器,假设I/O地址被译码为8000H,以DX=8000H为I/O地址,执行IN AL,DX输入指令就形成I/O度总线周期,产生读控制IOR信号低有效。译码输出与读控制同时低有效,使得三态缓冲器控制端低有效。开关的当前状态被三态缓冲器传输到数据总线D7~D0上,此时处理器恰好读取数据总线的数据,开关状态被送到了AL寄存器:其中某位Di=0,说明开关Ki闭合;Di=1说明开关Ki断开。不以8000H为地址/不执行IN指令,三态缓冲器的控制端就无效,相当于与数据总线断开。
    · 8位锁存器74LS273构成输出端口,当CLK出现上升沿时锁存数据,被锁存的数据输出,经反相驱动器74LS06驱动8个发光二极管L7~L0发光。74LS06每个输出线经过电阻挂到高电平上。当处理器某个数据总线Di输出1经反相为0接到发光二极管Li负极,发光二极管Li正极接高电平,形成导通电流,Li点亮。
    · 8为锁存器就是数据输出寄存器,假设经译码其I/O地址为8000H。以DX=8000H为I/O地址,执行OUT DX,AL输出指令就形成I/O写总线周期,产生IOW信号低有效。译码输出与写控制同时低有效,使得8位锁存器CLK为低,经过一个时钟周期,译码输出或写控制无效将使得CLK恢复为高。在CLK上升沿,8位锁存器将锁存器此时出现在其输入端D7~D0的数据,而此时处理器输出的正是AL寄存器的内容。

    ;读取8个开关状态,当开关闭合LED亮,并调用延时子程序DELAY保持一段时间
    	MOV DX,8000H  ;DX指向输入端口
    	IN AL,DX  ;从输入端口读开关状态
    	NOT AL  ;求反
    	OUT DX,AL  ;送输出端口显示
    	CALL DELAY ; 调子程序DELAY进行延时
    

    查询传送/异步传送

    查询传送有查询和传送两个环节
    首先查询外设工作状态,检测、等待外设准备就绪,进行数据传输
    在这里插入图片描述

    1. 查询过程
      · 设计实现查询功能的电路
      连接外设的状态输入信号
      保存在状态寄存器中
      通过状态端口读取
      · 外设的工作状态在状态寄存器中使用一位或若干位表达,查询通过输入指令来实现
      · 有多个状态,按照一定原则轮流查询,先检测到就绪的外设先开始数据传送
      · 实际中常引入超时判断
      · 查询传送工作可靠,具有较广的适用性
      · 查询需大量时间,效率较低
    2. 查询输入接口
      读取状态端口查询外设状态,若已就绪,读取数据端口得到外设提供的数据
    		mov dx,5001h	;DX指向状态端口
    status:	in al,dx	;读状态端口
    		test al,01h	;测试状态位D0
    		jz status   ;D0=0,未就绪,继续查询
    		dec dx      ;D0=1,就绪,DX改指数据端口   inc是加一dec是减一
    		in al,dx	;从数据端口输入数据
    

    查询输入接口
    在这里插入图片描述
    3. 查询输出接口
    读取状态端口查询外设状态,若已就绪,将数据写入数据端口输出给外设

    		mov dx,5001h	;DX指向状态口
    status:	in al,dx	;读取状态口的状态数据
    		test al,80h	;测试标志位D7
    		jnz status  ;D7=1,未就绪,继续查询
    		dec dx      ;D7=0,就绪,DX改指数据口
    		mov al,buf	;将变量BUF送AL
    		out dx,al	;将AL中的数据送数据口
    

    查询输出接口
    在这里插入图片描述

    中断控制系统

    · 中断是微机系统中非常重要的一种技术
    · 利用外部中断
    微机系统可以实时响应外部设备的数据传送请求、能够及时处理外部意外或紧急事件
    · 利用内部中断
    处理器为用户提供了发现、调试并解决程序执行时异常情况的有效途径

    中断传送

    · 处理器在执行程序过程中,被内部或外部的事件所打断,转去执行一段预先安排好的中断服务程序;服务结束后,又返回原来的断点,继续执行原来的程序
    · 中断源:引起中断的事件或原因
    · 内部中断
    · 外部中断:可屏蔽中断、非屏蔽中断
    在这里插入图片描述

    1. 中断工作过程
      在这里插入图片描述
      在这里插入图片描述
    2. 中断源的识别
      · 向量中断
      在中断响应周期,处理器获得中断向量号
      一个中断向量号对应一个中断
      自动转向相应的中断服务程序
      · 中断查询
      中断请求保存在中断状态寄存器
      处理器依次查询中断状态寄存器
      某个中断请求状态有效说明其提出请求
      转向对应的中断服务程序
    3. 中断优先权排队
      · 中断优先权
      每个中断源被处理的级别
      · 中断优先权排队
      事先为每个中断源所确定的优先处理顺序
      · 查询中断时
      依次查询,先查询的中断具有较高的优先权
      · 硬件电路实现时
      分布方式的菊花链排队电路
      集中方式的编码电路和比较电路

    IA-32中断系统

    采用向量中断机制
    能够处理256个中断
    用中断向量号0~255区别
    可屏蔽中断需要中断控制器实现优先权管理

    1. 内部中断
      内部中断是由于处理器内部执行程序出现异常引起的程序中断(异常 Exception)
      除法错异常(向量号0)
      调试异常(向量号1)
      断点异常(向量号3)
      溢出异常(向量号4)
      无效代码异常(向量号6)
      通用保护异常(向量号13)
      页面失效异常(向量号14)
      ……

    除法错异常
    执行除法指令时,若除数为0或商超过了寄存器所能表达的范围,产生的一个向量号为0的内部中断

    		; 数据段
    		msg	byte 0dh,0ah, 'No divide overflow !',0
    		; 代码段
    		call readuiw
    		mov bl,1
    		div bl
    		mov eax,offset msg ; 没有除法错,显示信息
    		call dispmsg
    

    溢出异常
    执行溢出中断指令INTO时,若溢出标志OF为1,产生的一个向量号4的内部中断

    		; 数据段
    		msg	byte 0dh,0ah,'No overflow !',0
    		; 代码段
    		call readuib
    		add al,100
    		jno noflow	; 没有溢出,转移
    		into	; 有溢出,产生溢出中断
    		jmp done
    noflow:	mov eax,offset msg	; 显示无溢出信息
    		call dispmsg
    done:
    
    1. 外部中断
      · 非屏蔽中断
      外部通过非屏蔽中断NMI请求信号提出的中断
      处理器在当前指令执行结束予以响应
      非屏蔽中断的中断向量号是2
      非屏蔽中断主要用于处理系统的意外或故障
      · 可屏蔽中断
      外部通过可屏蔽中断INTR请求信号提出的中断
      允许可屏蔽中断的条件下、当前指令执行结束予以响应
      输出可屏蔽中断响应信号INTA*,产生可屏蔽中断响应总线周期,读取中断向量号
      需要中断控制器负责处理中断优先权排队等管理工作
      可屏蔽中断主要用于与外设进行数据交换

    中断标志
    · IF=1,处理器开中断
    可以响应,允许中断,中断开放
    · IF=0,处理器关中断
    不能响应,禁止中断,中断被屏蔽
    · 关中断的情况
    系统复位后
    任何一个中断被响应后
    执行关中断指令CLI后
    · 开中断的方法
    执行开中断指令STI
    执行中断返回指令IRET恢复中断前IF状态

    1. 中断和异常的响应过程
      在这里插入图片描述
    2. 中断描述符表和中断向量表
      在这里插入图片描述
      中断服务程序的地址含有16位段基地址CS(高字部分)和16位偏移地址IP(低字部分),共4字节,按“低对低高对高”的小端存储方法保存在中断向量表中。
      向量号为N的中断服务程序地址要从物理地址 = N*4取得。
      在这里插入图片描述

    中断控制器

    · 管理多个中断请求并进行优先权排队等工作
    · IBM PC/AT机使用两个Intel 8259A可编程中断控制器PIC,32位PC机兼容了它们的功能
    每个管理8级中断,请求引脚:IR0~IR7
    每一级中断可单独被屏蔽或允许
    多个芯片级联最多扩展至64级中断
    为每级中断提供中断向量号
    · Pentium处理器内部集成局部APIC,外部配合集成在芯片组的I/O APIC

    1. 8259A的寄存器
      · 中断请求寄存器IRR
      保存8条外界中断请求信号IR0~IR7的请求状态
      Di位为1表示IRi引脚有中断请求
      · 中断服务寄存器ISR
      保存正在被8259A服务的中断状态
      Di位为1表示IRi中断正在服务中
      · 中断屏蔽寄存器IMR
      保存对中断请求信号IR的屏蔽状态
      Di位为1表示IRi中断被屏蔽(禁止)
    展开全文
  • 8.1 输入输出系统概述 1.输入输出系统的组成 外部设备、接口部件、总线以及相应的管理软件统称为计算机的输入/输出系统,简称I/O系统。 2.I/O系统的基本功能 完成计算机内部二进制信息与外部多种信息形式间的交流; ...
  • (2)每个子过程的输入输出、工具和技术是什么? (3)每个管理领域可能会出现什么问题,应该怎么解决 (4)每个管理和其余管理的联系是什么? 这边对十大管理的前两个问题,进行整理。 十大管理: 项目...
  • Python字典判断 题目:利用字典判断季度与月份的对应关系,并输出(即输入季度,然后输出对应有哪些月份) 代码上线 season=input('请输入一个季度(请按照这个格式输入:春,夏,秋,冬):') corresponding={'春':...
  • 熟悉Keil uVision5和Proteus集成开发软件的工作环境和使用方法; 掌握通用I/O口基本工作原理; 掌握通用I/O接口电路设计方法; 熟练运用C语言或汇编语言对I/O端口进行操作; 二、实验任务 1.基本任务 单片机P0...
  • 输入 T&T 输出 1.制定项目章程 1.协议 2.项目工作说明书 3.商业论证 4.事业环境因素 5.组织过程资产 1.专家判断 2.引导技术 1.项目章程 2.制定项目...
  • 输入输出系统

    千次阅读 2018-11-18 18:40:20
    输入输出系统的发展概况 (一)分散连接 早期的计算机,计算机数量少,应用少,外部设备少,外部设备和主机之间的连接采用分散连接的方式,CPU 和 I/O设备 串行 工作,采用程序查询方式。也就是每个设备都有专门的...
  • 在Junit测试中模拟控制台输入输出

    千次阅读 2020-04-18 22:26:00
    目录在Junit测试中模拟控制台输入输出Java标准输入输出流自定义输入输出流1. 设置输入流2. 设置输出流在Junit测试中模拟控制台交互 在Junit测试中模拟控制台输入输出 最近的一次软件构造实验中包含控制台交互的代码...
  • Java输入输出

    千次阅读 2017-11-02 11:54:07
    Java所有的I/O机制都是基于数据流进行输入输出,这些数据流表示了字符或者字节数据的流动序列。Java的I/O流提供了读写数据的标准方法。任何Java中表示数据源的对象都会提供以数据流的方式读写它的数据的方法。   ...
  • 本系列文章为哈尔滨工业大学刘宏伟计算机组成原理学习笔记,前面的系列文章链接如下: 计算机组成原理:P1-计算机系统概述 计算机组成原理:P2-系统总线 ...输入输出系统是计算机系统当中种类最多、功能最多、结构最复
  • STM32_USART输入输出讲解

    万次阅读 2016-05-03 22:18:22
    初始化串口使用引脚, 包含端口引脚、频率、输出类型。   三、 串口配置   这里的“串口配置”函数在usart.c文件下面; 详见每一句后面都有注释。 四、串口中断配置   这里的“NVIC配置”...
  • 第三版信息系统项目管理师47个过程的输入输出及工具
  • 【C语言答案】第二次练习--输入输出条件判断

    千次阅读 多人点赞 2020-02-05 00:06:06
    使用软件是Devc++5.11。 A. C语言_ex02_01 运加粗样式行时间限制: 1000 运行内存限制: 65536 题目描述 输入只有一行,依次为整数a、操作符op、和整数b,a、op、b中间有一个空格分隔。其中-10000<a,b<10000...
  • 关于输入-输出模型的思考

    千次阅读 2019-05-02 12:27:34
    输入-输出”模型 在软件开发中是非常见,小到函数设计,大到计算机系统(I/O),都包含了这个模型。其实,生活中,我们在处理信息的时候,也是这个框架。 1 生活中我们是如何处理信息的? 现在大家接触的信息量...
  • 项目管理九大知识点输入输出

    千次阅读 2018-06-17 10:13:36
    项目管理九大知识点输入输出一、 项目整体管理1、制订项目章程;2、制订项目范围说明书(初步);3、制订项目管理计划;4、指导和管理项目实施;5、监督和控制项目工作;6整体变更控制;7、项目收尾1、制订项目章程...
  • 模拟量输入输出模块的模拟量是表示在一定范围内连续变化的任意取值,跟数字量是相对立的一个状态表示。通常模拟量用于采集和表示事物的电压电流或者频率等参数。驱动硬件输出和相关数据通路,按照运行方式选择当前的...
  • 输入年、月,判断该月有多少天

    千次阅读 2021-12-24 00:44:27
    然而2月既不是大月,也不是小月, 2月的天数是以该年是否为闰年来判断天数 2 问题描述 请输入年份:2008 请输入月份:2 输出:本月有29天 3 算法描述 从键盘中输入年份和月份,用if语句将天数为31天的月份表示出来,...
  • 展开全部笔记本上的HDMI接口是视、音频输出接口,只支持输出,不支持输入。笔记本的显示屏虽然62616964757a686964616fe78988e69d8331333363373233是输出设备,但因为结构上的关系,它与笔记本主机是紧密连接在一起,...
  • 输入输出系统的基本功能:是管理主机和外设以及外设与外设之间的信息交换,由硬件和软件共同完成此项任务,基本原则是:不丢失数据,快速传输数据,成本低廉,主机和外设、外设和外设之间尽可能并行工作已充分发挥...
  • STM32 GPIO的输入输出-HAL库

    千次阅读 2020-09-11 17:30:08
    1. LED软件设计 我们创建"led.h"和"led.c"在工程模板的inc和src文件夹中。 1.1 头文件定义 该模块代码作用是防止在某一个代码文件中引入多个.h文件时,防止重复引入同一个.h文件,如果重复引入的话,在编译时候...
  • 本阶段是整个软件开发的开始阶段,输入可以是为了提高工作效率的某个好的想法或者是公司领导为了帮助管理发出的命令。输出就是业务需求文档,英文称为Business Requirement Document。这个文档的文字描述的抽象层次...
  • labview学习笔记1-数字输入输出

    千次阅读 2020-10-12 15:56:27
    1.数字输入 labview与NI-max是不能相分离的,我们首先需要在NI-max中创建虚拟的数字板卡,具体操作下面具体说明。 首先我们需要安装NI-max,没有安装包的小伙伴可以在评论中自取,这里小编也给大家丢一个百度网盘的...
  • (5.0分) 【单选题】11 、 ICC ( A )的承保风险类似我国的( ) 【简答题】定义一个函数,用于判断输入的年份是否是闰年,具体要求如下: (1)输出提示信息:请输入一个年份。 (2)输出判断结果:若是闰年,则输出“是闰年”,...
  • 【51/STM32】详解单片机GPIO口输入输出的各种模式

    千次阅读 多人点赞 2020-05-10 18:54:04
    通用型输入输出端口,简称GPIO口,是单片机与其他外围设备和电路进行信息交换和控制的桥梁。本文从复习模电中所学的场效应管开始,逐步引出开漏输出与推挽输出的概念及阐述其原理,并结合点亮一盏LED灯的实例进一步...
  • 参考答案如下睾酮能促进体内蛋白质的合成代谢,判断...输入由数s输出由数经典型苯丙酮尿症最为关键的治疗操作操作成系船缆的性能应满足:①强度大;②耐腐蚀耐磨损;③密度小弹性适中;④质地柔软和使用方便。关于...
  • 在实际的编程中需要自己写出完整的程序,预留好输入的接口,使用while循环接收多个测试用例,C语言在输出时printf要用换行“\n"。 1.题目描述 计算a+b 输入描述: 输入包括两个正整数a,b(1 <= a, b <= 10^...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 189,055
精华内容 75,622
关键字:

判断输入输出软件