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); // 延时一段时间  }  }  
      }

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

西工大计算机学院计算机系统基础实验一(函数编写1~10)

还是那句话&#xff0c;千万不要慌&#xff0c;千万不要着急&#xff0c;耐下性子慢慢来&#xff0c;一步一个脚印&#xff0c;把基础打的牢牢的&#xff0c;一样不比那些人差。回到实验本身&#xff0c;自从​​​​​​按照西工大计算机学院计算机系统基础实验一&#xff08;…

YOLOv8改进 | TripletAttention三重注意力机制(附代码+机制原理+添加教程)

一、本文介绍 本文给大家带来的改进是Triplet Attention三重注意力机制。这个机制&#xff0c;它通过三个不同的视角来分析输入的数据&#xff0c;就好比三个人从不同的角度来观察同一幅画&#xff0c;然后共同决定哪些部分最值得注意。三重注意力机制的主要思想是在网络中引入…

C陷阱与缺陷——第6章 预处理器

在严格意义上的编译过程开始之前&#xff0c;C语言预处理器首先对程序代码做了必要的转换处理。预处理器的主要作用是&#xff1a; 我们有时需要将某个特定数量在程序中出现的所有实例统统加以修改大多数C语言实现在函数调用时都会带来重大的系统开销 1. 不能忽视宏定义中的空…

基于Java停车场管理系统

功能需求 1、用户注册和登录&#xff1a;系统需要提供用户注册和登录的功能&#xff0c;使得用户可以创建账户并保护他们的个人信息。 2、车辆管理&#xff1a;能够记录并跟踪进出停车场的车辆信息&#xff0c;包括车牌号、车型、颜色等。 3、停车位管理&#xff1a;显示停车…

EPICS Base 和许多未捆绑的 EPICS 扩展和支持模块

针对物理实验的实验装置驱动操作 网址&#xff1a;https://epics-controls.org/epics-open-license/ 关于EPICS复杂系统 EPICS 是一套软件工具和应用程序&#xff0c;为建立分布式控制系统提供软件基础设施&#xff0c;用于操作粒子加速器、大型实验和大型望远镜等设备。这种…

Kontakt v7.7.2(音频采样器)

Native Instruments Kontakt 7是一款强大的软件采样器&#xff0c;它允许用户从各种来源采样音频并进行编辑和处理。它包含大量预设采样库&#xff0c;包括乐器、合成器、鼓组和声音效果等。此外&#xff0c;Kontakt 7还允许用户创建自己的采样库&#xff0c;以便根据自己的需要…

电脑版的便签软件使用哪一款?

您会选择使用电脑便签软件吗&#xff1f;很多人在日常工作及生活中会选择用电脑便签来督促自己按时完成工作任务&#xff0c;而且选择电脑便签是一个难题&#xff0c;毕竟当前电脑便签类工具非常多&#xff0c;如果想要找一款功能比较强大且又简单易用的便签工具&#xff0c;那…

HarmonyOS学习--创建和运行Hello World

创建和运行Hello World 打开DevEco Studio&#xff0c;在欢迎页单击Create Project&#xff0c;创建一个新工程。根据工程创建向导&#xff0c;选择创建Application应用或Atomic Service元服务。选择“Empty Ability”模板&#xff0c;然后单击Next。关于工程模板的介绍和支持…

A股股票交易费用

A股股票交易费用如下&#xff1a; 经手费&#xff1a;&#xff08;上证/深证&#xff09;按成交额双边收取0.0487‰&#xff0c;交给交易所。 监管费&#xff1a;&#xff08;深证&#xff09;按成交额双边收取0.02‰&#xff0c;交易所代收&#xff0c;交给证监会。 证管费&…

QGraphicsView实现简易地图7『异步加载-多瓦片-无底图』

前文链接&#xff1a;QGraphicsView实现简易地图6『异步加载-单瓦片-无底图』 前一篇文章提到的异步单瓦片加载&#xff0c;是指线程每准备好一个瓦片数据后&#xff0c;立刻抛出信号让主线程加载。而本篇异步多瓦片加载是指线程准备好所有瓦片数据后&#xff0c;一起抛出信号让…

将文件夹中所有文件名取出

dir C:\Users\是啊\Desktop\实验五/b>C:\Users\是啊\Desktop\1111.xls C:\Users\是啊\Desktop\实验五&#xff08;这个是文件夹路径&#xff09; /b &#xff08;参数&#xff09; C:\Users\是啊\Desktop\1111.xls&#xff08;文件名输出的文件路径&#xff09;

限流、熔断、降级、线程池隔离

文章目录 一、限流1.1 常见限流方式1.1.1 固定窗口、滑动窗口、漏斗、令牌桶1.1.2 令牌桶限流原理-公式 1.2Guava令牌桶使用方式1.3 其他限流流控规则配置阻塞类型突发流量限流并且拒绝流量请求&#xff0c;友好提示限流了 二、 熔断1.1 Thfirt熔断器 三、 线程池隔离3.1 背景3…

用VR+科普点亮科技之光VR航天科普体验巡展

11月22日至26日&#xff0c;第十一届中国(绵阳)科技城国际科技博览会圆满闭幕。本届科博会以“科技引领创新转化开放合作”为主题&#xff0c;创新办展办会模式&#xff0c;搭建高能级科技合作交流平台&#xff0c;展示了国内外科技创新发展成就和最新成果&#xff0c;举办了多…

C++:每日选择题--Day3

第一题 1. 指针变量p进行自加运算(即 执行p;)后,地址偏移值为1,则其数据类型为&#xff0c;char说法是否正确&#xff1f; A&#xff1a;正确 B&#xff1a;错误 答案及解析 B 比如我们的空类&#xff0c;空类所占的字节为1&#xff0c;指向空类的指针&#xff0c;自加运算之后…

内核无锁队列kfifo

文章目录 1、抛砖引玉2、内核无锁队列kfifo2.1 kfifo结构2.2 kfifo分配内存2.3 kfifo初始化2.4 kfifo释放2.5 kfifo入队列2.6 kfifo出队列2.7 kfifo的判空和判满2.8 关于内存屏障 1、抛砖引玉 昨天遇到这样一个问题&#xff0c;有多个生产者&#xff0c;多个消费者&#xff0c…

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

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

查询不用order by时结果默认怎么排序

总结: 如果在使用没有指定order by&#xff0c;那么基本上依赖于底层实现的&#xff0c;具体排序规则不定&#xff0c;所以排序的顺序也不固定&#xff0c;可能会随着时间发生变化。 在实际工作中&#xff0c;如果有查询列表展示数据的功能和需求&#xff0c;开发前一定要先确…

近期复习四

目录 ansible.cfg介绍 主机清单&#xff08;常见为INI格式&#xff09; 一.定义主机列表 1.每行写一个 2.主机组 &#xff08;1&#xff09;定义简单主机组 &#xff08;2&#xff09;指定多台主机时可以通过书写范围来表示 &#xff08;3&#xff09;定义嵌套主机组 …

Linux 进程地址空间

文章目录 进程地址空间进程地址空间结构页表虚拟内存写时拷贝 进程地址空间 进程地址空间难以定义&#xff0c;因为它更像是一个中间件。 程序从磁盘中加载到内存&#xff0c;程序的执行需要硬件资源&#xff0c;所以每个程序启动时会创建至少一条进程&#xff0c;进程作为组…

HarmonyOS 修改App的默认加载的界面(ArkTS版本)(十七)

根据鸿蒙系统APP的应用生命周期结构&#xff08;鸿蒙4.0开发笔记之ArkTS语法基础之应用生命周期&#xff09;来看。 1、首先在roject/entry/src/main/ets/entryability/EntryAbility.ts文件中找到UI加载函数&#xff1a;onWindowStageCreate(…){…}&#xff0c;然后找到windo…