单片机(裸机)程序一般怎么写?

控制/MCU

1814人已加入

描述

裸机(单片机)程序主要是相对于基于操作系统的程序开发而言,就是没有操作系统的基础上开发具有特定功能的代码。

比如我们要用51单片机控制一个LED灯的闪烁,不采用操作系统,通过51汇编代码或者C语言代码实现,这就是裸机程序。

实现硬件裸机程序的一般步骤

1.搞清楚自己需要要实现的功能

根据需求,理清思路,结合硬件,思考需要怎么实现,用到什么相关资源。

2.查看原理图,了解硬件的用途及工作原理

弄清楚硬件和CPU的连接关系,用到哪些相关外设。

3.细读datasheet,尤其是寄存器

主要是看寄存器如何设置。硬件不能正常工作90%是寄存器设置有问题。

4.写代码

裸机程序其实就是寄存器设置。一般先初始化硬件,后实现具体需求功能的业务逻辑代码。

5.测试,解决问题

自测问题,查找BUG,解决问题。

实例讲解

这里我们基于tiny4412开发板硬件,实现对电路板上led2 闪烁功能为例讲解。

下面我们按照上面一般步骤走:

1.要实现的功能

控制led的亮与灭,可以使用GPIO控制

2.查看原理图,了解硬件的用途及工作原理

寄存器

查看原理图,找到LED相关部分电路,如上图。我们要实现LED2的亮灭,LED2左端要是低电平才能亮,高电平灭。所以LED2 脚必须是低电平,led2才会亮。

寄存器

然后我们通过LED2 标签,找到LED2连接到SOC的 GPM4_1引脚。所以剩下就是GPM4_1脚的设置问题。

3.细读datasheet,尤其是寄存器

单片机 GPIO(General Purpose Input Output)可以控制一根外部管脚的电路,可以输出高低电平,可以检测外部管脚电平。一个GPIO脚接口至少有两个相关寄存器,即“通用IO控制寄存器”与“通用IO数据寄存器”。数据寄存器的各位都直接引到芯片外部,而对数据寄存器中每一位的作用,即每一位的信号流通方向时输入还是输出,则可以通过控制寄存器中对应位独立的加以设置。

其中关于GPM4_1脚相关的寄存器描述如下:

寄存器

寄存器

寄存器

  • GPM4[1],GPM4CON寄存器,地址是0x1100_0000 + 0x02E0,7:4位,设置为0x1,设为输出模式。
  • 设置GPM4[1]为输出高电平,需要设置GPM4DAT寄存器的bit1为1。
  • 设置GPM4[1]为输出低电平,需要设置GPM4DAT寄存器的bit1为0。

问题来了,怎么设置一个寄存器?

arm处理器的就是属于内存映射。也就是说访问寄存器就像访普通内存一样。

这实际上就是内存映射机制的方便性了。这里就是通过内存寻址访问到寄存器,可以读/写操作。也就是只要我们知道某个寄存器的地址,就可以通过汇编指令或者C语言指针变量读写该地址数据就行。

4.写代码

a)初始化

  • 设置GPM4_1为输出模式,GPM4CON[7:4]位位设置为0x1
  • 设置GPM4DAT寄存器的bit1为1,led2灭

b)功能

  • 实现led2闪烁循环逻辑程序

以上就是单片机程序,或者裸机程序开发一般步骤,适用所有MCU,SOC裸机程序开发。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分