单片机上电后内部发生的事情

本文介绍了单片机如51系列及STM32的启动原理与过程,详细阐述了不同单片机如何根据晶振启动,并解释了它们在启动时如何选择不同的内存区域来执行代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

单片机上电后,如果晶振正常起震的话,cpu就会在晶振的驱动下开始工作,cpu的工作就是在每个机器周期到指定的地方提取指令,然后解析并执行,51单片机只有一个时钟源所以51单片机永远只能以一种时钟频率工作,单片机一上电单片机的频率就固定了不能更改了,上电后单片机就以固定的频率开始工作了,因此51单片机也没有配置系统时钟的寄存器,stm32等高级单片机就不一样了,这种单片机有多个时钟源,上电后单片机以某种固定的时钟频率开始工作,到指定的地址提取指令,然后解析并执行,在后面的程序中可以更改系统的工作时钟与工作频率,

除非是没有晶振提供时钟,或者是系统没有上电,否则cpu是不可能停止工作的,cpu的任务就是不停的提取指令,然后解析并执行,而且单片机在我们下载程序之前,就已经有程序了,出厂之前厂家就已经下载了一部分程序在单片机里面。单片机上电之后就会先执行这部分程序。例如:stm32系统存储器中的用于ISP串口下载的bootloard程序,这段代码的任务是与下载器通讯将用户写得代码下载到指定地方。

stm32上电后可能在三个不同的地址开始提取指令并解析执行,

一:用户FLASH;里面装载的是用户下载的程序,如果没有程序或者程序不正确,单片机将会跑飞,

二:系统存储器:里面出厂前下载了用于ISP串口下载的bootloard程序,这段代码的任务是与下载器通讯将用户写得代码下载到指定地方。如果这部分代码被破坏这个单片机将再也不能通过串口下载程序了。

三:片上内存SRAM;内存中的代码是掉电不保存的,如果从这里启动, 单片机将会跑飞 因为复位后的内存里面存的都是111111,cpu不认识这些是什么意思。


### 设计与制作基于51单片机的多功能子时钟 #### 项目概述 设计和实现一个基于51单片机的多功能子时钟涉及到多个硬件组件以及软件编程技巧。此项目不仅能够提供基本的时间显示功能,还扩展了诸如闹钟设置、秒表操作及环境温度监测等功能[^2]。 #### 主要组成部分 - **核心控制单元**:采用AT89C51或其他兼容型号作为中央处理器(CPU),负责处理各种输入信号并驱动外围设备工作。 - **时间保持模块**:利用DS1302实时时钟芯片来维持精确的时间记录,在断情况下也能保存当前时间和日期信息。 - **显示屏**:通过7段LED数码管或LCD液晶屏展示时间和其他数据;对于更复杂的设计,则可以考虑使用图形化界面。 - **按键接口路**:用于接收用户的指令输入,比如调整时间、设定闹铃等动作。 - **报警提示装置**:当达到预设条件(如指定时刻响起警报声),可通过蜂鸣器发出声音提醒使用者注意特定事件的发生。 - **传感器连接端口**:如果计划加入温湿度测量特性的话,则需额外配备相应的传感元件及其配套连线结构。 #### 关键技术要点 为了完成上述目标,开发者需要熟悉以下几个方面: ##### 定时器中断机制 定时器是单片机内部的重要资源之一,通过对定时器进行配置可让CPU周期性地执行某些任务而不影响其他程序流程。在这个案例里,就是依靠它来刷新屏幕上的数字变化频率以及管理不同模式间的切换逻辑[^3]。 ##### 数码管显示原理 每一片位选型的共阴极/阳极七段显示器都由八个发光二极管组成,其中七个用来表示阿拉伯数字符号而另一个则通常被当作小数点位置存在。为了让这些器件按照预期的方式呈现出来,必须编写合适的驱动子程序去控制各路流路径通断情况从而点亮相应部分形成所需图案文字效果。 ##### 按键扫描算法 考虑到实际应用环境中可能存在误触碰现象发生概率较高的情形下仍能保证系统的稳定性和准确性就显得尤为重要了。因此建议采取矩阵式布局方式并将多组开关串联起来构成阵列形式再配合上合理的防抖动措施以提高识别效率降低错误率。 ```c // 示例代码片段:简单的按键检测函数 void check_key(void){ unsigned char i; static bit last_state = 0; P1 = 0xFF; // 设置P1为高阻态以便读取外部按键状态 if(P1 != last_state){ // 如果有改变才继续判断具体哪个按钮按下 delay_ms(10); // 软件延时消抖 if(P1 != last_state){ switch (P1){ case KEY1_VALUE : /* 执行对应KEY1的操作 */ break; case KEY2_VALUE : /* 执行对应KEY2的操作 */ break; default : ; // 不做任何事情 } last_state = P1; // 更新上次的状态变量值 }else{ last_state = P1; // 只更新状态不触发事件 } } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值