一、裸机

        裸机是一个在计算机硬件与软件开发领域高频出现的概念,核心定义是 “未安装操作系统(OS),仅包含硬件本身(或仅运行最底层硬件驱动 / 控制程序)的设备”。

        在电脑中,裸机会映射代码到cpu(中央处理元件)上,cpu会处理裸机的代码;mpu(微处理元件)与mcu(微控制元件)是cpu上的硬件辅助模块,与cpu相辅相成。

        在 AT89C52(经典 8052 架构单片机)上的裸机程序,其核心特点是不依赖操作系统,直接通过操作硬件寄存器(如 I/O 口、定时器、中断控制器等)实现功能,程序逻辑以 “初始化 + 主循环 + 中断服务” 的形式运行。

        

二、AT89C52

        AT89C52 是 Atmel 公司(现被 Microchip 收购)推出的8 位增强型单片机,属于经典的 MCS-51 系列(8051 架构),因成本低、编程简单、兼容性强,广泛用于入门级嵌入式开发和小型电子系统(如智能玩具、小家电控制、传感器数据采集等)。

        

                                                                          原理图

                                                                        实物图

   AT89C52的引脚是从左上延伸向下,从从下延伸向上;网络端口从右上向下,跳到左上向下。

AT89C52特点

1. 存储系统:程序与数据分离

  • 程序存储器(Flash):8KB 容量可存储用户程序(如控制逻辑、中断服务函数等),支持在系统编程(ISP)或通过编程器烧录,无需紫外线擦除(优于早期 EPROM 芯片)。
  • 数据存储器(RAM):256 字节内部 RAM 中,低 128 字节(00H~7FH)为通用 RAM(可直接访问),高 128 字节(80H~FFH)与特殊功能寄存器(SFR)地址重叠,需通过间接寻址访问(用于复杂变量存储)。

2. 外设资源:满足基础控制需求

  • I/O 端口(P0~P3)

    • P0 口:8 位漏极开路输出,作为通用 I/O 时需外接上拉电阻;访问外部存储器时复用为低 8 位地址 / 数据总线。
    • P1~P3 口:内部带上拉电阻的准双向口,无需外接上拉;P3 口引脚可复用为外设功能(如 P3.0/RxD、P3.1/TxD 为串行口,P3.2/INT0、P3.3/INT1 为外部中断输入等)。
  • 定时器 / 计数器 T2:相比 AT89C51 新增的 16 位定时器,支持三种工作模式(自动重装载、捕获、波特率发生器),适合需要精确定时或高频计数的场景(如脉冲测量、高频信号采样)。

  • 中断系统:6 个中断源可独立使能 / 禁止,通过 IP 寄存器配置高 / 低优先级,确保紧急事件(如外部触发信号)优先响应(例如:按键中断优先于 LED 闪烁定时器中断)。

3. 兼容性与开发门槛

  • 指令兼容:完全兼容 MCS-51 指令集,基于 AT89C51 开发的程序可直接移植到 AT89C52(仅需注意 RAM 容量差异)。
  • 开发简单:支持 C 语言或汇编语言编程,常用编译器(如 Keil C51)可直接生成 hex 文件,通过编程器烧录到芯片;入门成本低,适合嵌入式新手学习。

 

三、AT89C52下的裸机程序

        1.跑马灯

        

#include<reg52.h>
#include"led.h"
#include"delay.h"void led_all_on(void)
{P2 = 0;
}void led_all_off(void)
{P2 = 0xFF;
}void led_on(unsigned char n)
{P2 = ~n;
}void paomadeng()
{led_all_off();while(1)//跑马灯{int i = 0;for(i; i < 8; ++i){//P2 = ~(1 << i);led_on((1 << i));delay(9000);	}for(i = 6; i> 0; --i){//P2 = ~(1 << i);led_on((1 << i));delay(9000);}}
}

        在这个程序中使用到了P2寄存器(寄存器:能够操作硬件的,具有固定地址的内存空间),将电平转为低实现二极管的导通;

        使用两次for循环在0~9之间跳变,实现跑马灯;使用delay(),为了更好观察;在循环中,使用位运算对led实现显示,先全部置1,在使用位运算对1动态左移的结构取反。

        网络编号P20—P27对应D1—D7。

       

        2.数码管

#include<reg52.h>
#include "delay.h"
#include "digiter.h"void bit_select(int n){P1 &= ~(0x0F << 0);P1 |= (1 << n); }void segment_select(int i){unsigned char t[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F};P0 = t[i];delay(300);//保证二极管导通P0 = 0;delay(1000);	 //消影}void show_number(int n){	 int t = 0;if(n > 9999){return ;}else if(n == 0){bit_select(0);segment_select(0);}while(n){bit_select(t++);segment_select(n % 10);n /= 10;}}

        上述代码中实现数码的动态选择发亮,其中P1寄存器,选择要亮的数码管,P0寄存器选择要来亮的具体结,如图:

 

        将要亮的数字对应的部分置0或者1,保持高位在前、低位在后的规则,dp是最高位,转换为十六进制;

        在主函数中,可调用show—number函数,传参任意数,若为固定数则显示,也可以定义变量为0,在循环中传参变量自增,设定延迟时间,实现数字的自增(计数器)。

 

 

 

 

 

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

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

相关文章

95%企业AI失败?揭秘LangGraph+OceanBase融合数据层如何破局!​

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。不知道你们有没有遇到过&#xff0c;在我们一些实际落地的AI项目中&#xff0c;虽然前期“Demo 很惊艳&#xff0c;但上线后却无人问津”。你们有没有想…

树莓集团产教融合:数字学院践行职业教育“实体化运营”要求

在职业教育改革不断深化的背景下&#xff0c;“实体化运营” 成为推动职业教育高质量发展的重要方向。树莓集团积极响应这一要求&#xff0c;以产教融合为核心&#xff0c;打造数字学院&#xff0c;切实践行职业教育 “实体化运营”&#xff0c;为培养高素质数字领域专业人才探…

ELK 统一日志分析系统部署与实践指南(上)

#作者&#xff1a;张桐瑞 文章目录1 ELK 技术栈概述1.1ELK 核心组件详解1.2 ELK 工作流程2 ELK部署2.1 环境描述2.1.7 配置es集群下篇&#xff1a;《ELK 统一日志分析系统部署与实践指南&#xff08;下&#xff09;》 链接: [https://blog.csdn.net/qq_40477248/article/detail…

上位机知识篇---poweshellcmd

要理解 PowerShell 和 CMD 的区别&#xff0c;我们可以先打个通俗的比方&#xff1a;CMD 像老式功能机&#xff0c;只能干打电话、发短信这些 “基础活”&#xff1b;而 PowerShell 像智能手机&#xff0c;不仅能做基础操作&#xff0c;还能装 APP、玩复杂功能&#xff0c;甚至…

利用 Python 绘制环形热力图

暑假伊始&#xff0c;Coldrain 参加了学校举办的数模集训&#xff0c;集训的过程中&#xff0c;遇到了需要展示 59 个特征与 15 个指标之间的相关性的情况&#xff0c;在常用的图表不大合适的情况下&#xff0c;学到了一些厉害的图表&#xff0c;但是似乎千篇一律都是用 R 语言…

【序列晋升】27 Spring Cloud Sleuth给分布式系统装上透视镜

Spring Cloud Sleuth作为微服务架构中的核心监控组件&#xff0c;通过轻量级的无侵入式跟踪机制&#xff0c;解决了分布式系统中请求路径复杂、问题定位困难的痛点。它自动为每个服务请求创建唯一的Trace ID&#xff0c;并为每个服务间调用生成Span ID&#xff0c;形成完整的调…

Linux(2)|入门的开始:Linux基本指令(2)

一、基本指令介绍 回顾上篇博客Linux(1)|入门的开始&#xff1a;Linux基本指令-CSDN博客&#xff0c;我们已经学习了mkdir目录的创建&#xff0c;touch普通文件的创建&#xff0c;光有创建肯定是不行的&#xff0c;接下来就介绍我们的删除指令 1、rmdir指令&&rm指令 …

sv中forever如何结束

在 SystemVerilog 中&#xff0c;forever 循环本身无法自我结束。它的设计初衷就是创建一个永不终止的循环。 因此&#xff0c;要结束一个 forever 循环&#xff0c;必须从外部强制中断它。主要有以下两种方法&#xff1a;1. 使用 disable 语句&#xff08;最常用和推荐的方法&…

关于熵减 - 从法拉第圆盘到SEG

我们清楚的知道法拉第圆盘发电机的原理。当导线切割磁感线的时候&#xff0c;会产生电流&#xff0c;当然电流产生需要的是电动势&#xff0c;也就是&#xff0c;这里写 不写 &#xff0c;避免和电场强度混淆。根据上面的分析&#xff0c;我们知道磁场强度特斯拉 的单位&#x…

【机器学习】实战:市场增长点分析挖掘项目

在电商行业激烈竞争的背景下&#xff0c;精准挖掘市场增长点是企业保持竞争力的关键。本文基于拜耳官方旗舰店驱虫剂市场分析项目&#xff0c;先对原文核心内容进行梳理与解读&#xff0c;再续写关键的竞争分析模块&#xff0c;形成完整的市场增长点挖掘闭环&#xff0c;为企业…

【Day 18】21.合并两个有序链表 2.两数相加

文章目录21.合并两个有序链表题目&#xff1a;思路&#xff1a;迭代代码实现&#xff08;Go&#xff09;&#xff1a;2.两数相加题目&#xff1a;思路&#xff1a;代码实现&#xff08;Go&#xff09;&#xff1a;21.合并两个有序链表 题目&#xff1a; 将两个升序链表合并为…

Vue 3 WebSocket通信方案:从原理到实践

Vue 3 WebSocket通信方案&#xff1a;从原理到实践 在现代Web应用开发中&#xff0c;实时通信已成为许多应用的核心需求。从即时聊天到实时数据更新&#xff0c;用户对应用响应速度的期望越来越高。本文将深入剖析一个Vue 3环境下的WebSocket通信方案&#xff0c;包括基础封装与…

Windows 电源管理和 Shutdown 命令详解

一、Windows 电源管理概述 Windows 操作系统通过其内置的电源管理框架&#xff0c;为用户提供了多种电源状态和配置选项&#xff0c;以在性能、能耗和数据安全之间找到最佳平衡点。以下是 Windows 系统中常见的电源状态及其特点&#xff1a; 1. 睡眠&#xff08;Sleep&#xff…

Selenium WebUI 自动化“避坑”指南——从常用 API 到 10 大高频问题

目录 一、为什么 90% 的 UI 自动化脚本活不过 3 个月&#xff1f; 二、Selenium必会 API 速查 三、实践 四、10 大高频异常“症状 → 病因 → 处方” 五、可复用的工具函数 六、面试高频追问&#xff08;附标准答案&#xff09; 一、为什么 90% 的 UI 自动化脚本活不过 …

【微信小程序】微信小程序基于双token的API请求封装与无感刷新实现方案

文章目录前言一、设计思路二、执行流程三、核心模块3.1 全局配置3.2 request封装3.2.1 request方法配置参数3.2.2 请求预处理3.2.3 核心请求流程3.3 刷新accessToken3.4 辅助方法四、api封装示例总结前言 现代前后端分离的模式中&#xff0c;一般都是采用token的方式实现API的…

基于单片机醉酒驾驶检测系统/酒精检测/防疲劳驾驶设计

传送门 &#x1f449;&#x1f449;&#x1f449;&#x1f449;其他作品题目速选一览表 &#x1f449;&#x1f449;&#x1f449;&#x1f449;其他作品题目功能速览 概述 该设计基于单片机开发&#xff0c;旨在通过实时检测驾驶员酒精浓度&#xff0c;预防酒后驾驶行为…

第6章:垃圾回收分析与调优

1. 垃圾回收基础 1.1 Java 垃圾回收概述 垃圾回收&#xff08;Garbage Collection&#xff0c;GC&#xff09;是 Java 虚拟机自动内存管理的核心机制。理解 GC 的工作原理对于 Java 应用性能调优至关重要。 1.1.1 垃圾回收的目标 自动内存管理&#xff1a;无需手动释放内存防止…

ROS2核心模块-动作通信、参数服务

动作通信 机器人导航到某个目标点,此过程需要一个节点A发布目标信息&#xff0c;然后一个节点B接收到请求并控制移动&#xff0c;最终响应目标达成状态信息。 乍一看&#xff0c;这好像是服务通信实现&#xff0c;因为需求中要A发送目标&#xff0c;B执行并返回结果&#xff0c…

word文档封面中文件编号等标题和内容无法对齐

问题 word文档封面中文件编号等标题和内容无法对齐&#xff0c;因为标题使用的是底纹不是文件内容。 解决办法 字体大小、行距两者配合就可以解决。

163起融资,梅卡曼德融资额夺冠,钉钉、百度智能云10周年,汉桑科技IPO| 2025年8月人工智能投融资观察 · 极新月报

“ 二级的活跃会传导到一级吗&#xff1f;”文&#xff5c;云舒&小鱼编辑 | 小白出品&#xff5c;极新8月重点关注&#xff1a;1、八月人工智能领域投融资事件163起&#xff0c;披露金额76.8亿人民币。2、亿级人民币以上金额的投资事件共20起 。3、八月人工智能领域发生一起…