当前位置: 首页 > ds >正文

《嵌入式硬件(一):裸机概念与80c51单片机基础》

系统与操作特性

        裸机系统通常不包含操作系统,依赖直接硬件操作。RAM(随机存取存储器)用于临时数据存储,读写速度快但断电后数据丢失。

处理单元分类表
缩写全称功能描述
SoCSystem on Chip高性能处理单元(集成CPU/GPU/内存的高性能芯片)
MCUMicrocontroller Unit微小控制单元->单片机(集成存储与外设的单片机)
MPUMicroprocessor Unit微处理单元(需外接存储的处理核心)
GPUGraphics Processing Unit图像处理单元(专用于图形计算)
CPUCentral Processing Unit中央处理单元(通用计算核心)
数据类型规范
  • int类型占用2字节存储空间(16位系统)
  • unsigned int取值范围为0到65535(2^16-1)
  • 十六进制常量表示如0xFFFF对应十进制65535
寄存器操作原理

        寄存器(外设):是指能够操作硬件的,具有固定地址的内存空间

通用寄存器(如P0-P3)可通过数据类型直接映射:

unsigned char P0 = 0x00;  // 8位寄存器声明

特殊功能寄存器(SFR)具有固定物理地址,51架构中通过sfr关键字定义:

str P0 = 0x80;  // 地址0x80的端口寄存器

硬件接口标准
  • 原理图网络编号规则:红色标识相同电气节点
  • 电源符号标准:Vcc表示正电源,GND为地线
  • 外设接口类型:
    • GPIO:可编程输入/输出引脚
    • UART:异步串行通信接口
    • TIMER:硬件定时器模块
电平逻辑规范

共阴极LED晶体管:高电平时整个晶体亮

代码

1.

main.c

#include <reg52.h>
#include "led.h"
#include "digiter.h"
#include "delay.h"int main(void)
{int i;//必须定义在前面//led_on_all();//打开所有灯//led_off_on();//关闭所有灯//P2 &= ~((1 << 4)| (1 << 6) | (1 << 2) | (1 << 0));//开灯//P2 |= ((1 << 4)| (1 << 6) | (1 << 2) | (1 << 0));//关灯(需要先关灯)//P0 = t[9];//bit_select(1);//位选while(1){//P2 ^= 0x0F;//delay(60000);//延时/*for(i = 0;i < 8;++i){led_on(~(1 << i));//开某个灯delay(3000);}		for(i = 6;i >0; --i){led_on(~(1 << i));delay(3000);}	*//*for(i = 0;i < 10;++i){seqment_select(i);//段选delay(50000);} */ //show_number(1234);输出1234show_number(i++);计时器0~9999}
}

led.h

#ifndef _LED_H_
#define _LED_H_extern void led_on_all(void);
extern void led_off_on(void);
extern void led_on(unsigned int n);
#endif

led.c

#include <reg52.h>void led_on_all(void)
{P2 = 0;
}void led_off_on(void)
{P2 = 0xFF;
}void led_on(unsigned int n)
{P2 = n;
}

digiter.h

#ifndef _DIGITER_H_
#define _DIGITER_H_extern void bit_select(int n);
extern void seqment_select(int n);
extern void show_number(int n);#endif

digiter.c

#include <reg52.h>
#include "delay.h"
#include "digiter"void bit_select(int n)
{P1 &= ~(0x0F << 0);P1 |= (1 << n);
}void seqment_select(int n)
{unsigned char t[10] = {0X3F, 0X06, 0X5B, 0X4F, 0x66, 0X6D, 0X7D, 0X07, 0X7F, 0X6F};P0 = t[n];delay(100);P0 = 0;delay(100);
}void show_number(int n)
{	if(n > 9999){return;}else if(n == 0){bit_select(0);seqment_select(0);}else{int t = 0;while(n){bit_select(t++);seqment_select(n % 10);n /= 10;}}
}

delay.h

#ifndef _DELAY_H_
#define _DELAY_H_extern void delay(unsigned int n);#endif

delay.c

#include <reg52.h>
#include "delay.h"void delay(unsigned int n)
{while(n--);
}

http://www.xdnf.cn/news/20027.html

相关文章:

  • Docker 运行 PolarDB-for-PostgreSQL 的命令,并已包含数据持久化配置
  • Scrapy框架实战:大规模爬取华为应用市场应用详情数据
  • 实现 TypeScript 内置工具类型(源码解析与实现)
  • C语言中的运算符
  • 自动化运维-ansible中的条件判断
  • 前端框架(Vue/React):界面更新的运行链路
  • mysy2使用
  • CC攻击的主要来源
  • 鸿蒙Next图形绘制指南:从基础几何图形到复杂UI设计
  • vue3 vite 自适应方案
  • Java+AI开发实战与知识点归纳系列:Spring流式输出实战——LangChain4j与Ollama集成
  • 2025 大数据时代值得考的证书排名前八​
  • TypeScript与JavaScript:从动态少年到稳重青年的成长之路
  • “企业版维基百科”Confluence
  • STM32 - Embedded IDE - GCC - 如何在工程中定义一段 NoInit RAM 内存
  • 爬取m3u8视频完整教程
  • JavaWeb项目在服务器部署
  • 数据结构之----线性表其一---顺序表
  • 弱电太累,职业发展遇瓶颈?那一定不要错过这个技能!
  • 单片机(89C51)---基础知识
  • 阅兵时刻,耐达讯自动化RS485 转 Profinet 网关助力矿山冶金连接迈向辉煌
  • 【大数据技术实战】Flink+DS+Dinky 自动化构建数仓平台
  • 嵌入式 Linux 启动流程详解 (以 ARM + U-Boot 为例)
  • 【ShiMetaPi M4-R1】上手:RK3568B2|开源鸿蒙(OpenHarmony) 应用开发快速上手
  • Vue+Echarts饼图深度美化指南:打造卓越数据可视化体验
  • 深入理解 Java 集合框架:底层原理与实战应用
  • 0元部署私有n8n,免费的2CPU+16GB服务器,解锁无限制的工作流体验
  • ruoyi vue element 实现点击、返回首页收起已经展开的菜单栏
  • SpringBoot 整合 Kafka 的实战指南
  • 《用 Django 构建博客应用:从模型设计到文章管理的全流程实战》