C语言面试之旅:掌握基础,探索深度(面试实战之单片机——IO)

        梦想和自由一样,都有代价,但都值得。

                                                                                                                                               ----小新

引言

        单片机是一种微控制器,它包含一个处理器、存储器、定时器和I/O端口等。I/O端口是单片机与外部设备进行通信的接口。通过I/O端口,外部设备可以输入和输出数据到单片机中。

        在单片机中,I/O端口可以分为输入端口和输出端口。输入端口用于接收外部设备的信号,而输出端口则用于将数据发送到外部设备。

 

  1. 输入和输出模式

    • 输入模式下,IO口充当接收器,可以读取外部设备发送的信号。这种模式适用于读取开关状态、传感器数据等。
      #include <reg52.h> // 包含单片机头文件  
        
      void main() {  
          while (1) { // 无限循环  
              if (P2 == 0x00) { // 如果P2端口全部为0  
                  P1 = 0x00; // 将P1端口全部置0  
              } else { // 否则  
                  P1 = 0xFF; // 将P1端口全部置1  
              }  
          }  
      }

    • 输出模式下,IO口充当驱动器,可以向外部设备发送信号。这种模式适用于控制LED灯、继电器、电机等外部设备。
#include <reg52.h> // 包含单片机头文件  
  
void main() {  
    while (1) { // 无限循环  
        P1 = 0x00; // 将P1端口全部置0  
        delay(1000); // 延时1秒  
        P1 = 0xFF; // 将P1端口全部置1  
        delay(1000); // 延时1秒  
    }  
}  
  
void delay(unsigned int time) { // 延时函数  
    unsigned int i, j;  
    for (i = 0; i < time; i++) {  
        for (j = 0; j < 1275; j++);  
    }  
}
  1. .

  2. 输入缓冲

    • 输入缓冲通常由CMOS(互补金属氧化物半导体)电路构成,用于接收外部设备发送的信号,并提供电平转换和电流放大功能。
    • 输入缓冲可以通过配置寄存器来设置输入电平电压的触发阈值,以适应不同的输入信号电平要求。
  3. 输出驱动

    • 输出驱动是用于向外部设备发送信号的电路,能够提供足够的电流和电压来驱动外部设备。
    • 输出驱动的能力通常由IO口的指定参数(如最大输出电流)来定义,需要根据外部设备的要求选择适当的IO口。
  4. 输入状态寄存器

    • 输入状态寄存器用于存储IO口的输入状态,可以通过读取该寄存器来获取外部设备发送的信号状态。
    • 输入状态寄存器中的位对应于每个IO口,可以判断IO口是处于高电平还是低电平状态。
  5. 输出状态寄存器

    • 输出状态寄存器用于存储IO口的输出状态,可以通过写入该寄存器来控制IO口的输出信号状态。
    • 输出状态寄存器中的位对应于每个IO口,可以设置IO口为高电平或低电平输出。
  6. 上拉和下拉电阻

    • 上拉电阻和下拉电阻用于确保IO口在未连接外部设备时保持稳定的电平状态。
    • 上拉电阻将IO口连接到高电平,而下拉电阻将IO口连接到低电平。
    • 上拉和下拉电阻可以通过配置寄存器来使能或禁用。
  7. 中断功能

    • 中断功能允许IO口在特定事件发生时触发中断请求,以便及时处理相应事件。
    • 中断可以是外部中断,当外部设备信号发生变化时触发;也可以是内部中断,当IO口状态满足特定条件时触发。
    • 中断功能可以通过配置寄存器和中断向量表来实现。
      #include <reg52.h> // 包含单片机头文件  
        
      sbit led=P2^0; // 定义LED灯  
        
      void main() {  
          while(1) { // 无限循环  
              // 中断允许设置  
              IT0=1; // 外部中断0下降沿触发方式  
              EA=1; // 中断总允许  
          }  
      }  
        
      void exter0() interrupt 0 { // 外部中断0服务程序  
          led=~led; // LED灯反转  
      }

  8. IO口编址和寄存器配置

    • IO口通常通过特定的寄存器进行配置和控制。寄存器的地址和位定义根据单片机型号和厂商而异,需要查阅相应的单片机手册和参考资料来了解具体的编址和配置方法。
  9. IO口的引脚分配和映射

    • 单片机的IO口引脚分配和映射关系取决于具体的单片机型号和封装形式。
    • 在设计电路板时,需要根据单片机引脚图和外部设备的连接需求,将相应的IO口引脚与外部设备正确连接。
      #include <reg52.h> // 包含单片机头文件  
        
      // 定义IO口  
      sbit led=P2^0; // P2.0口为LED灯  
      sbit key=P1^0; // P1.0口为按键  
        
      // 定义寄存器  
      typedef unsigned int u16; // 定义无符号整型数变量  
      typedef unsigned char u8; // 定义无符号字符型数变量  
        
      sbit dula=P2^6; // P2.6口为段锁存器  
      sbit wela=P2^7; // P2.7口为位锁存器  
        
      u8 code smgduan[]={ // 定义段码表  
          0x3f, 0x06, 0x5b, 0x4f,  
          0x66, 0x6d, 0x7d, 0x07,  
          0x7f, 0x6f, 0x77, 0x7c,  
          0x39, 0x5e, 0x79, 0x71  
      };  
        
      void delay(u16 i) { // 延时函数  
          while(i--);  
      }  
        
      void main() {  
          while(1) { // 无限循环  
              if (key==0) { // 如果按键按下  
                  dula=0; // 段锁存器清零  
                  wela=1; // 位锁存器置1  
                  delay(100); // 延时一段时间  
                  key=~key; // 反转按键状态  
                  dula=1; // 段锁存器置1  
                  delay(100); // 延时一段时间  
              } else { // 否则  
                  dula=1; // 段锁存器置1  
                  wela=0; // 位锁存器清零  
                  delay(100); // 延时一段时间  
                  led=~led; // LED灯反转  
                  dula=0; // 段锁存器清零  
                  delay(100); // 延时一段时间  
              }  
          }  
      }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/223957.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

华为对优秀项目经理的三点要求

大家好&#xff0c;我是老原。 一位优秀的项目经理应该肩负什么样的职责和使命&#xff1f; 华为轮值董事长徐直军在《致研发全体PL的一封信》中表示&#xff1a;Project Leader&#xff08;项目经理&#xff09;要从一个独立贡献者转变成为团队贡献者&#xff0c;项目经理带…

【从零认识ECS云服务器 | 快速上线个人网站】二、使用ECS云服务器

第二章 使用ECS 2.1 获取ECS 方式一&#xff1a;通过试用中心免费领取ECS实例 满足以下全部条件的阿里云用户&#xff0c;可免费试用云服务器ECS&#xff1a; 阿里云注册会员用户并完成阿里云企业认证或个人认证用户。申请用户是云服务器ECS产品的新用户&#xff0c;可以申…

电源滤波器如何检测?ATECLOUD-POWER电源自动测试软件如何助力?

电源滤波器常用来对电源中的纹波和干扰信号进行滤波&#xff0c;从而确保元器件不受损坏&#xff0c;是保证系统稳定性的重要方法。因此电源滤波器测试是非常重要的&#xff0c;通过检测来评估其质量、性能和稳定性&#xff0c;从而使电源滤波器可以稳定工作&#xff0c;进行滤…

UniApp H5 跨域代理配置并使用(配置manifest.json、vue.config.js)

UniApp 运行到浏览器的时候&#xff0c;接口会跨域报错&#xff0c;这里通过两种方式解决&#xff0c;第一&#xff1a;修改Uniapp自带的manifest.json 源码视图并进行配置h5设置。第二&#xff1a;在项目根目录新建vue.config.js并配置代理。 二选一即可。 修改或调整配置文件…

[实践总结] Java中读取properties配置文件

读取此key.properties文件 代码实现 import java.io.IOException; import java.io.InputStream; import java.util.Properties;public class PropertyUtils {private static final Properties properties new Properties();static {try (InputStream resourceAsStream Prope…

React--引入第三方插件时,标签名是小写报错问题

报错信息 报错原因 1.组件名得大写 2.缺少 import 语句 解决方案 declare global{namespace JSX{interface IntrinsicElements {micro-app: any}} }

istio为什么能代替传统的SpringCloud 服务网格Istio概述

服务网格Istio概述 什么是服务网格(Service Mesh)&#xff1f;istio简介边车模式&#xff08;Sidecar&#xff09;为什么istio能代替传统SpringCloud&#xff1f;整体架构 首先奉上 istio官网 什么是服务网格(Service Mesh)&#xff1f; 服务网格详解 服务网格&#xff08;Se…

SL4010升压恒压控制器芯片 2.5V启动 最大10A电流 支持300W大功率

SL4010是一款升压恒压控制器芯片&#xff0c;它具有2.5V启动、最大10A电流、支持300W大功率等特点。该芯片采用先进的控制技术&#xff0c;能够实现高效的电能转换&#xff0c;同时保持稳定的输出电压和电流。 SL4010芯片的主要功能是将输入的直流电压升高到所需的电压&#xf…

Http中post和get

get产生一个tcp数据包&#xff0c;服务器只响应一次&#xff0c;而post请求服务器会响应两次&#xff08;第一次发送请求头响应100&#xff0c;再次响应返回200&#xff0c;成功

配置主机与外网时间服务器同步时间

目录 NTP服务简介 时间管理命令 第一步&#xff1a;更改当前主机所在地的时间 方法一&#xff1a;使用tzselect命令查询需要的时区 1、使用tzselect命令查询需要的时区 2、添加变量到 ~/.bash_profile 文件中&#xff0c;即追加类似的内容&#xff1a; 3、重新连接一个…

HashMap系列-放入元素的流程

1.put public class HashMap<K,V> extends AbstractMap<K,V>implements Map<K,V>, Cloneable, Serializable {//通过key生成hash后&#xff0c;调用putVal方法public V put(K key, V value) {return putVal(hash(key), key, value, false, true);} } 2.put…

【沐风老师】3DMAX切片工具插件安装使用方法详解

3DMAX切片工具安装使用方法 3DMAX切片工具&#xff0c;该工具沿世界坐标轴以规则的间隔对对象进行切片处理。例如&#xff0c;对于快速均匀细分复杂网格、顶点绘制或应用“弯曲”修改器非常有用。 【适用版本】 3dMax2016 - 2023&#xff08;不仅限于此范围&#xff09; 【安装…

【MATLAB源码-第96期】基于simulink的光伏逆变器仿真,光伏,boost,逆变器(IGBT)。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 1. 光伏单元&#xff08;PV Cell&#xff09; 工作原理&#xff1a;光伏单元通过光电效应将太阳光转换为直流电。它们的输出取决于光照强度、单元温度和负载条件。Simulink建模&#xff1a;在Simulink中&#xff0c;光伏单元…

AHB 与 DMA

AHB&#xff08;先进高性能总线&#xff09; 随着深亚微米工艺技术日益成熟&#xff0c;集成电路芯片的规模越来越大。数字IC从基于时序驱动的设计方法&#xff0c;发展到基于IP核复用的设计方法&#xff0c;并在SOC设计中得到了广泛应用。在基于IP核复用的SoC&#xff08;Syst…

【EI会议征稿中】第三届光学与机器视觉国际学术会议(ICOMV 2024)

第三届光学与机器视觉国际学术会议(ICOMV 2024) 2024 3rd International Conference on Optics and Machine Vision 第三届光学与机器视觉国际学术会议(ICOMV 2024)将于2024年1月19-21日在中国南昌举行。本次会议将围绕“光学”与"机器视觉”等研究领域展开讨论&#xf…

品牌咨询策划服务预约小程序作用是什么

对很多行业公司来说&#xff0c;想要在竞争激烈的市场中生存和长期发展&#xff0c;就需要不断完善自身服务和信息流程、规范化。品牌咨询策划公司是企业发展中重要的合作伙伴。 二者都有寻找对方的需求&#xff0c;尤其是对咨询策划公司来说需要不断宣传推广品牌和服务来获得…

【Pytorch】理解自动混合精度训练

【Pytorch】理解自动混合精度训练 混合精度概述 实验对比 更大的深度学习模型需要更多的计算能力和内存资源。一些新技术的提出&#xff0c;可以更快地训练深度神经网络。我们可以使用 FP16&#xff08;半精度浮点数格式&#xff09;来代替 FP32&#xff08;全精度浮点数格式…

Java 输入输出流02

六. Java.IO 流类库 1&#xff1a;io 流的四个基本类 java.io 包中包含了流式 I/O 所需要的所有类。在 java.io 包中有四个基本类&#xff1a;InputStream、OutputStream 及 Reader、Writer 类&#xff0c;它们分别处理字节流和字符流&#xff1a; 基本数据流的 I/O 输入 / …

多向通信----多人聊天

package 多人聊天; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.PrintStream; import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList; publ…

信道的极限容量

目录 信道的最高码元传输速率 限制码元在信道上的传输速率的因素&#xff1a; &#xff08;1&#xff09;信道能够通过的频率范围 &#xff08;2&#xff09; 信噪比 任何实际的信道都不是理想的&#xff0c;在传输信号时会产生各种失真以及带来多种干扰。 码元传输的速率越…