单片机快速将库函数版代码移植为寄存器代码方法

发布者:Mingyue1314最新更新时间:2022-01-15 来源: eefocus关键字:单片机  移植  寄存器代码 手机看文章 扫描二维码
随时随地手机看文章

  现在单片机开发越来越多用的是库函数版本的,寄存器版本使用越来越少了。但是在有些项目中使用库函数会导致程序运行速度比较慢,没有直接操作寄存器运行起来速度快。所以在对时间要求比较严格的项目中,还是需要使用寄存器来开发。如果不能够找到寄存器相关示例代码的时候,开发起来还是比较困难的。今天就来总结一个快速将库函数移植为寄存器的方法,这个方式为通用方法,在任何单片机上都可以使用。


  现在就用一个STM8单片机库函数的工程来举例。

在这里插入图片描述
在这里插入图片描述

  这个代码的主要功能就是使用定时器1的捕获功能来计算输入波形的频率。对于定时器的初始化使用的都是库函数,现在要将定时器初始化部分的库函数修改为寄存器。


  首先单步调试,进入初始化函数中。

在这里插入图片描述

  单步进步到这个函数内部。

在这里插入图片描述

  可以看到在这个函数中初始化了6个寄存器,将这6个寄存器分别添加到观察窗口中。

在这里插入图片描述

  在代码中是通过指针的方式去操作寄存器的,所以在将寄存器添加到观察窗口时要注意名字格式,需要将 TIM1->ARRH 修改为 TIM1_ARRH 格式。添加寄存器的时候,可以直接在观察窗口表达式的位置处单击鼠标,直接将寄存器的名字输入进去。

在这里插入图片描述

  然后将寄存器值显示的方式修改为 16进制显示。在观察窗口中寄存器上单击鼠标右键,选择16进制显示。

在这里插入图片描述

  按照同样的方法将其他寄存器全部添加进去。

在这里插入图片描述

  此时寄存器的值都为默认值,然后单步执行程序。观察寄存器值的变化。

在这里插入图片描述

  当前函数执行完成之后,所有的寄存器值就是库函数设置之后的值。将这些寄存器的值记录下来。

在这里插入图片描述

  相当于TIM1_TimeBaseInit()函数设置的就是这几个寄存器,然后设置后的寄存器值就是变量观察窗口中的值。按照同样的方法,依次单步调试,记录下所有初始化寄存器的值。

在这里插入图片描述

  当初始化代码中的寄存器值全部记录完成之后,这时候就可以用寄存器直接替换库函数了。

在这里插入图片描述

  替换完成后运行程序,观察程序运行结果是否争正确。通过观察串口输出的结果证明程序执行是正确的。

在这里插入图片描述

  这样通过单步调试的方法,直接观察寄存器的值,就能快速的搞清楚库函数代码到底是设置了哪些寄存器,设置后的值是多少。当设置的寄存器值知道之后,然后通过查阅单片机资料,对比寄存器中的各个位的含义,就明白了使用哪些功能要设置哪些寄存器对应的哪些位。

在这里插入图片描述

  当看完寄存器资料后,明白了每个寄存器的作用,这时候就可以将寄存器的初始化优化一下,让代码看起来更清晰明了。

在这里插入图片描述

  将寄存器的设置修改为位操作模式,这样直接通过代码就可以很方法的看出来操作的是哪个寄存器的哪些位。 修改完成后重新编译下载,验证一下修改之后的代码功能是否正常。


  通过这种方法就能快速的了解到寄存器的使用,否则只是看单片机寄存器的相关手册的话,没有重点,而且有些手册非常大,看了后面忘了前面,效率非常低。同时在看的过程中也搞不清楚,有些寄存器到底要在哪个功能中去设置。而通过单步调试的方法,直接观察库函数中设置的寄存器,就能快速的了解寄存器的作用,可以做到用什么功能时再去看对应寄存器的资料,避免了单纯看资料浪费时间过程,还提高了学习效率。

关键字:单片机  移植  寄存器代码 引用地址:单片机快速将库函数版代码移植为寄存器代码方法

上一篇:STM8单片机ADC采样功能通过定时器触发
下一篇:IAR软件中直接查看编译后代码大小

推荐阅读最新更新时间:2024-11-10 12:35

基于单片机的电动汽车多功能充电系统电路设计
  由于石油危机和日益严重的环境污染,电动汽车发展已经是大势所趋。蓄电池为电动汽车提供动力,而蓄电池充电性能直接影响蓄电池的使用和寿命,蓄电池一般分为铅蓄电池、镍镉电池、镍氢电池和锂离子电池。由于蓄电池种类繁多且容量不一,不同种类和容量的蓄电池往往需要不同的充电器匹配,如果蓄电池的充电器匹配不好会出现过充过热等不安全现象,从而影响蓄电池的正常使用并缩短蓄电池寿命。因此,设计一款基于单片机控制的能为各类蓄电池充电的多功能充电系统是十分必要的。多功能充电系统能快速稳定地为不同类型和不同容量的蓄电池充电,我们在软件上针对不同类型的蓄电池设计了相应的充电方法,使每种蓄电池都能在最佳充电方法下充电。对于不同容量的蓄电池,在选择好充电方法时只
[电源管理]
基于<font color='red'>单片机</font>的电动汽车多功能充电系统电路设计
PIC单片机对9346EEPROM数据的读写
实验目的:熟悉SPI总线以及9346EEPROM的读写 ;RBO键按下时把DATA和DATA2写入到EEPROM中以EE—ADDR为地址的单元内, ;完成后,单个数码观显示“9”做为完成标志 ;RB1键按下时,读取EEPROM中以EE—ADDR为地址的单元,并送数码管显示 ;硬件要求:S3、S5、S6拨码管置ON,S1第7、8位置ON。 LIST P=16F877A, R=DEC include “P16F877A.inc” ;包含头文件 __CONFIG _DEBUG_OFF&_CP_ALL&_WRT_HALF&_CPD_ON&_LVP_OFF&_BODEN_OFF&_PWR TE _ON&_WDT_OFF&_HS_OSC
[单片机]
PIC<font color='red'>单片机</font>对9346EEPROM数据的读写
AVR单片机详细介绍
ATMEL公司的AVR单片机,是增强型RISC内载Flash的单片机,芯片上的Flash存储器附在用户的产品中,可随时编程,再编程,使用户的产品设计容易,更新换代方便。AVR单片机采用增强的RISC结构,使其具有高速处理能力,在一个时钟周期内可执行复杂的指令,每MHz可实现1MIPS的处理能力。AVR单片机工作电压为2.7-6.0V,可以实现耗电最优化。AVR的单片机广泛应用于计算机外部设备,工业实时控制,仪器仪表,通讯设备,家用电器,宇航设备等各个领域。 ATMEL公司的90系列单片机 是基于新的精简指令RISC结构的。这种结构是在90年代开发出来的,综合了半导体集成技术和软件性能的新结构。这种结构使得在8位微处理器市场上
[单片机]
AVR<font color='red'>单片机</font>详细介绍
套路,快速掌握单片机的4个步骤
初学者在学习某一款单片机时,往往手足无措,没有头绪不知从哪里开始。其实单片机就是一款工具,是工具总有操作方法,因此学习单片机也是有套路的, 我把这个套路总结为4步,下面听我娓娓道来。 1. 认清单片机的具体型号 单片机就跟我们身边的朋友一样,都有一个具体的名字,当听到朋友的名字后你就能马上回想起这个朋友的长相特征、性格特征等,人记对了做事就明确了不会张冠李戴。 学习单片机也一样,在学习或者使用单片机之前一定要明确厂商,是STC的、还是Atmel的、还是Microchip的、还是TI的等,此外具体的型号一定要记清楚,是STC89系列,还是ST15系列一定要记清楚,比如说STC89C51、STC15W404AS、STM32F10
[单片机]
套路,快速掌握<font color='red'>单片机</font>的4个步骤
单片机在车辆蓄电池报警器中的设计应用
  在分析比较几种常见蓄电池剩余电量检测方法的基础上,介绍了利用MSP430 单片机设计车辆蓄电池报警器的工作要点。该报警器实现了特定条件下蓄电池剩余电量指示,蓄电池内阻大报警,充电电压过高报警,非规范启动(单次起动时间超过5 s 、两次启动间隔时间少于15 s 、连续启动次数超过3 次)发动机提示报警等功能,具有实用价值。   蓄电池是汽车上的重要部件,不仅为发动机启动提供动力,而且为用电设备提供电能,并存储充电系统的多余电能,蓄电池技术状态的好坏直接影响汽车的正常运行。实际工作生活中,蓄电池技术状况的检查手段比较落后,特别就一般车辆而言,缺少在线、直观、实时的反映蓄电池技术状况的仪器仪表,多数为无法启动车辆时才送检,通常因蓄
[单片机]
<font color='red'>单片机</font>在车辆蓄电池报警器中的设计应用
STM32单片机智能电饭煲系统设计方案
一、功能简介 本项目使用Proteus8.12仿真STM32单片机控制器,使用继电器加热/保温模块、数码管模块、按键模块、LED指示灯、蜂鸣器模块等。 主要功能: 系统运行后,数码管默认不显示,当按下K5键选择功能模式,此时数码管会显示对应模式所需时间,且LED指示灯工作,系统默认有煮饭、煮粥、蒸、煲汤四种功能,还可按下K6键设置预约时间,通过K2和K3键修改时间,当设置好时间后,按下K4键开始,预约时间开始倒计时,当时间达到后,继电器开启加热,在所选功能时间倒计时结束后停止加热,开启保温。若不需要保温,可按下K1键关闭。 主要功能如下: (1)功能:煮饭、煮粥、蒸、煲汤; (2)按键:开始、取消、功能、加减、预约; 二、
[单片机]
STM32<font color='red'>单片机</font>智能电饭煲系统设计方案
单片机的就业方向是什么?搞单片机是青春饭吗?
这段时间,很多刚入门的小伙伴找到我,问的最多的问题应该就是单片机的前景和就业方向了。 还有一个顾虑是搞单片机是青春饭吗?20多岁学晚不晚? 我们首先来回答第一个问题。 一、 单片机的就业方向 人对未知的东西都充满了恐惧,这是人类本能的自我保护,我也一样。 刚开始我是自学的单片机,而且是跨行,对我的挑战不小。 入门以后出去找工作,被10几家公司无情打击,心态崩了。 内心总是有一种不自信的声音嘲笑自己:这辈子,可能都没这个行业的公司要我了。 往往是这种最绝望的时候,你更要坚持,在努力。 就像那句话说的:当你最倒霉的时候,也即将是你转运的时候。 这有点玄学的意思,但是回忆我人生的上半场,基本做成功的事情都经历了这个过程。 Ok,扯
[单片机]
MCS-51单片机复位后,对系统有何要求?
单片机复位后,程序计数器PC的内容为0000H,所以系统必须从0000H单元开始取指令来执行程序。 0000H单元是系统的起始地址,一般在该单元存放一条绝对跳转指令(LJMP) 而用户设计的主程序,则从跳转后的地址开始安放。
[单片机]

推荐帖子

【TI工程师经验谈】运算放大器增益误差设计指南
您坐下来为您的电路选择合适的运算放大器(opamp)时,首先要做的便是确定系统通过该放大器进行传输的信号带宽。一旦您确定下来这一点,您便可以开始寻找正确的放大器。来自高速设计专家的告诫是:您应该避免使用相对您的应用而言速度过快的模拟器件。因此,您要尽量选择一种闭环带宽稍高于信号最大频率的放大器。它听起来好像是一种较好的产品选择方案,但是这种设计方法将可能会给您的应用板带来灾难性的后果。在实验室中,您可能会发现当您将应用最大频率的输入正弦波信号置入系统时,您放大器的输出信号并未穿过希望
soso 模拟与混合信号
16位CRC校验原理与算法分析
这里,不讨论CRC的纠错原理以及为什么要选下面提及的生成多项式,只是针对以下的生成多项式,如何获得CRC校验码,作一个比较详细的说明。标准CRC生成多项式如下表:名称生成多项式简记式*标准引用CRC-4x4+x+13ITUG.704CRC-8x8+x5+x4+10x31CRC-8x8+x2+x1+10x07CRC
Aguilera DSP 与 ARM 处理器
ESP32-C3上手体验与开发环境搭建
1.说明2.开发环境搭建2.1下载ESP-IDF的环境2.2编译代码2.3程序烧录与验证3.ESP32-C3LED分析4.使用WiFi功能5.小结1.说明ESP32-C3采用的是RISCV架构的芯片,目前又专注RISCV研究,所以特此来研究一下这个芯片的使用情况。该芯片的主要特性如下:采用RSCV-V32位的单核处理器,四级流水线架构,主频是160MHz。内置400KBSRAM,384KBROM完善的Wi-Fi子系统低功耗蓝牙外设支持
火辣西米秀 国产芯片交流
Helper2416-19——裸机第十弹——S3C2416中断控制器+定时器中断实践(附源码)
本帖最后由yuanlai2010于2014-7-2620:16编辑 裸机第十弹——S3C2416中断控制器+定时器中断实践参与Helper2416开发板助学计划心得看了下S3C2416的中断控制器的配置还是比较简单的,对比之前AM335X的中段控制器,感觉S3C2416的中断用起来不是很灵活,至少这个优先级机制感觉很死板,也不能实现抢占优先级,不知道怎么实现高优先级中断打断低优先级中断而执行。不过也可能是我还没能领悟其中的奥妙之处吧!参考下图,基本就
yuanlai2010 嵌入式系统
SD卡的命令
3.1.SD卡的命令格式:SD卡的指令由6字节(Byte)组成,如下:Byte1:01xxxxxx(命令号,由指令标志定义CMD39为100111即16进制0x27,那么完整的CMD39第一字节为01100111,即0x27+0x40)。Byte2-5:CommandArguments,命令参数,有些命令没有参数。Byte6:前7位为CRC(CyclicRedundacyCheck,循环冗余校验)
13691982107 医疗电子
卡尔曼滤波原理的学习
《卡尔曼滤波原理及应用:MATLAB仿真》讲了卡尔曼滤波的基本原理及扩展卡尔曼滤波的原理,书中有MATLAB仿真代码,可以作为电子信息类各专业高年级本科生和硕士参考资料,非常适合自学者。卡尔曼滤波原理的学习有时间借本卡尔曼滤波的书来看看有Python仿真的相关书籍吗simulink专门用于仿真的
ANSHANLIU 测试/测量
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved