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

news2025/1/21 18:55:24

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

                                                                                                                                               ----小新

引言

        单片机是一种微控制器,它包含一个处理器、存储器、定时器和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.coloradmin.cn/o/1290225.html

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

相关文章

【数据结构】——二叉树特点

前言&#xff1a;我们前面已经了解了二叉树的一些概念&#xff0c;那么我们今天就来了解下二叉树的遍历实现和一些性质。 二叉树的遍历方式有三种&#xff1a;前序&#xff0c;中序&#xff0c;后序。 前序&#xff1a;先根节点&#xff0c;再左子树&#xff0c;最后右子树。 中…

SpringSecurity工作原理(一)

实现功能就是继承这几个对应功能的类。 大概工作流程 Spring Security 的过滤器&#xff08;Filters&#xff09;和拦截器&#xff08;Interceptors&#xff09;是 Spring Security 框架中用于保护 web 应用安全的重要组件。它们在处理 HTTP 请求时扮演不同的角色&#xff0c…

Linux自启服务提示:systemd[1]: *.service: main process exited, code=exited, status=1问题

这两天一直在沉迷于配脚本&#xff0c;由于服务器很多&#xff0c;所以我都是从一台服务器上配置好的脚本直接copy到另一台服务器&#xff0c;按说完全一样的脚本一样的操作&#xff0c;那么应该是一样的执行结果 but, Gul’dan&#xff0c;代…我重启服务器后服务并没有正常启…

k8s官方镜像代理加速

背景 大家可能在云原生领域需要部署周边的一些生态组件时&#xff0c;在国内遇到无法正常拉取镜像&#xff0c;显得就有点苦恼&#xff0c;不过没关系&#xff0c;常见的${{ registry_name }} 例如 “gcr.io”&#xff0c;“registry.k8s.io” Failed to pull image “registry…

【c】杨辉三角

下面介绍两种方法 1.利用上面性质的第五条&#xff0c;我们可以求各行各列的组合数 2.利用上面性质的第7条&#xff0c;我们可以用数组完成 下面附上代码 1. #include<stdio.h> void fact(int n ,int m )//求组合数 {long long int sum11;long long int sum21;int a…

AI Pika 生成进击的巨人动漫分镜案例

背景介绍 Pika 是一个使用 AI 生成和编辑视频的平台。它致力于通过 AI 技术使视频制作变得简单和无障碍。 Pika 1.0 是 Pika 的一个重大产品升级&#xff0c;包含了一个新的 AI 模型,可以在各种风格下生成和编辑视频,如 3D 动画&#xff0c;动漫&#xff0c;卡通和电影风格。…

跳水比赛(C++)

系列文章目录 进阶的卡莎C++_睡觉觉觉得的博客-CSDN博客数1的个数_睡觉觉觉得的博客-CSDN博客双精度浮点数的输入输出_睡觉觉觉得的博客-CSDN博客足球联赛积分_睡觉觉觉得的博客-CSDN博客大减价(一级)_睡觉觉觉得的博客-CSDN博客小写字母的判断_睡觉觉觉得的博客-CSDN博客纸币(…

从零开发短视频电商 Jmeter压测示例模板详解(无认证场景)

文章目录 添加线程组添加定时器添加HTTP请求默认值添加HTTP头管理添加HTTP请求添加结果断言响应断言 Response AssertionJSON断言 JSON Assertion持续时间断言 Duration Assertion 添加察看结果树添加聚合报告添加表格察看结果参考 以压测百度搜索为例 https://www.baidu.com/s…

面试多线程八股文十问十答第一期

面试多线程八股文十问十答第一期 作者&#xff1a;程序员小白条&#xff0c;个人博客 相信看了本文后&#xff0c;对你的面试是有一定帮助的&#xff01; ⭐点赞⭐收藏⭐不迷路&#xff01;⭐ 1.ThreadLocal如何实现线程安全 Java的ThreadLocal是一个线程本地变量&#xff0…

Python中字符串拼接及其应用场景

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com 字符串拼接是Python中常见而重要的操作&#xff0c;它涉及到将多个字符串连接成一个字符串。本文将深入探讨Python中字符串拼接的不同方式、性能比较、以及在实际应用中的场景和最佳实践。 常见的字符串拼接方法…

【JUC】二十一、CAS比较并交换

文章目录 1、初体验2、CAS概述3、Unsafe类4、Unsafe汇编5、原子引用AutomicReference6、手写自旋锁SpinLock7、CAS的两大缺点8、AtomicStampedReference类解决ABA问题 1、初体验 没有CAS时&#xff0c;多线程环境下不使用原子类保证线程安全&#xff0c;比如i&#xff0c;可以…

21章网络通信

21.1——网络程序设计基础 网络程序设计编写得到是与其他计算机进行通信的程序 21.1.1——局域网与互联网 为了实现两台计算机的通信&#xff0c;必须用一个网络线路连接两台计算机 21.1.2——网络协议 网络协议规定了计算机之间连接的物理、机械 (网线与网卡的连接规定)、…

云上守沪 | 云轴科技ZStack成功实践精选(上海)

为打造国际数字之都&#xff0c;上海发布数字经济发展“十四五”规划&#xff0c;围绕数字新产业、数据新要素、数字新基建、智能新终端等重点领域&#xff0c;加强数据、技术、企业、空间载体等关键要素协同联动&#xff0c;加快进行数字经济发展布局&#xff1b;加快基础软件…

Linux环境下的MySQL安装

文章目录 前提说明1.卸载内置环境2.检查系统安装包3.卸载这些默认安装包4.获取MySQL官方yum源5.安装MySQLyum源&#xff0c;对比前后yum源6.查看yum源是否生效7.安装MySQL服务8.查看相对应的配置文件9.启动服务10.查看启动服务11.登录方法一12.登录方法二13.登录方法三14.设置开…

护理简历自我评价15篇

自我评价示例1&#xff1a; 我性格开朗&#xff0c;上进心强&#xff0c;做事不马虎&#xff0c;有良好的思想道德&#xff0c;注重集体荣誉感。我具备强大的护理技能和团队协作精神&#xff0c;能够在高压环境下保持冷静&#xff0c;积极应对挑战。我期待着在医疗领域发挥我的…

MySQL数据库与其管理工具Navicat

这里介绍MySQL数据库和Navicat的使用 1.下载MySQL数据库及MySQL客户端管理工具Navicat 登录www.mysql.com下载MySQL 登录www.navicat.com.cn/download下载客户端管理工具 2.启动MySQL数据库服务器 以管理员身份打开命令提示窗口 找到mysql的bin目录 输入初始化命令mysqld…

认识jmeter接口测试工具!

jmeter简介 Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试&#xff0c;它最初被设计用于Web应用测试&#xff0c;但后来扩展到其他测试领域。 下载 下载地址&#xff1a;Apache JMeter - Download Apache JMeter 安装 由于Jmeter是基于Java的…

springboot 整合 Spring Security+JWT 实现token 认证和校验

1.大概是这个样子 JWT 是什么&#xff1f; Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准&#xff08;(RFC 7519).该token被设计为紧凑且安全的&#xff0c;特别适用于分布式站点的单点登录&#xff08;SSO&#xff09;场景。JWT的声明…

设计原则 | 依赖转置原则

一、依赖转置原则&#xff08;DIP&#xff1a;Dependence Inversion Principle&#xff09; 1、原理 高层模块不应该依赖低层模块&#xff0c;二者都应该依赖于抽象抽象不应该依赖于细节&#xff0c;细节应该依赖于抽象 2、层次化 Booch曾经说过&#xff1a;所有结构良好的面…

HTML5+CSS3+JS小实例:数字滑动选择控件

实例:数字滑动选择控件 技术栈:HTML+CSS+JS 效果: 源码: 【HTML】 <!DOCTYPE html> <html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"><meta name="viewport" content=&quo…