0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

探究如何快速看懂单片机程序方法

jf_f8pIz0xS 来源:21ic中国电子网 作者:21ic中国电子网 2021-04-15 15:46 次阅读

在现实中,我相信有很多刚刚接触单片机的同学,简直是无从下手,打开一个程序,更会被复杂的结构和密密麻麻的代码吓到,产生退缩的想法,这篇文章带你了解一下单片机程序。

我对单片机的总结:“单片机其实就是一个芯片,内部有若干寄存器,外部有若干引脚,我们可以通过程序控制内部的寄存器使得引脚与外部世界保持联系!”就这几句话,道出了单片机的真谛!有没有感觉到单片机是多么的简单!

1.单片机程序执行流程

这是我们首先必须要知道的。单片机程序一般就有两种,一种是汇编程序,一种是c语言程序。这里我们讲c语言程序。

单片机程序都有一个包含主函数的文件,包含主函数的文件都有一个统一的结构,如下所示:

#include “xxx.h”

int main() // 这是主函数的函数名

{

。..。..; // 若干条语句

。..。..;

while(1) // while括号中是1,说明程序进入后将在while里面无线循环,不会出来了,不懂的去看c语言基础之while篇

{

。..。..; // 若干条语句

。..。..;

}

}

重点:单片机一上电,从主函数main的第一条语句开始执行,是一条语句接着一条语句从上而下执行,直到进入while后,再从while的第一条语句执行到最后一条语句,由于是死循环,会再从while的第一条语句执行到最后一条语句,如此反复执行,永不停止!直到断电!

这些语句当中,有些是函数的调用,遇到函数的调用,进入到函数,再从函数的第一条语句执行到最后一条语句,然后跳出函数,再从刚才主函数中那条函数的下一条语句开始执行。如果实在搞不明白函数是怎么一回事,你可以用函数里面的所有语句代替函数在主函数中的位置。例如:

#include “LPC11XX.H”

#define LED1_ON LPC_GPIO1-》DATA &= ~(1《《0)

#define LED1_OFF LPC_GPIO1-》DATA |= (1《《0)

#define LED2_ON LPC_GPIO1-》DATA &= ~(1《《1)

#define LED2_OFF LPC_GPIO1-》DATA |= (1《《1)

/***********************************/

/* 延时函数 */

/***********************************/

void delay()

{

uint16_t i,j;

for(i=0;i《5000;i++)

for(j=0;j《200;j++);

}

/***********************************/

/* LED初始化函数 */

/***********************************/

void led_init()

{

LPC_SYSCON-》SYSAHBCLKCTRL |= (1《《16);

LPC_IOCON-》R_PIO1_0 &= ~0x07;

LPC_IOCON-》R_PIO1_0 |= 0x01;

LPC_IOCON-》R_PIO1_1 &= ~0x07;

LPC_IOCON-》R_PIO1_1 |= 0x01;

LPC_SYSCON-》SYSAHBCLKCTRL &= ~(1《《16);

LPC_GPIO1-》DIR |= (1《《0);

LPC_GPIO1-》DATA |= (1《《0);

LPC_GPIO1-》DIR |= (1《《1);

LPC_GPIO1-》DATA |= (1《《1);

}

/***********************************/

/* 主函数 */

/***********************************/

int main()

{

led_init();

while(1)

{

delay();

LED1_ON;

LED2_OFF;

delay();

LED1_OFF;

LED2_ON;

}

}

上面这个例子中,单片机一上电,会执行主函数的第一条语句,也就是led_init(),这个是一个函数的调用语句,程序会从led_init函数中的第一条语句开始执行,直到执行完最后一条语句后,回到主函数,进入while,从while的第一条语句delay()开始执行,delay()又是一个函数,程序会从delay()的第一条语句开始执行,delay()函数中有两个for循环,执行完for循环后,就跳出delay()函数,执行LED1_ON,由于LED1_ON是个用#define定义的宏定义,由c语言基础知识之#define宏定义篇,我们知道,LED1_ON就是LPC_GPIO1-》DATA &= ~(1《《0),如此继续执行下去……。

如果不用define宏定义,也不用函数,上面的例子就可以写为如下形式:

#include “LPC11XX.H”

/***********************************/

/* 主函数 */

/***********************************/

int main()

{

//LED初始化

LPC_SYSCON-》SYSAHBCLKCTRL |= (1《《16);

LPC_IOCON-》R_PIO1_0 &= ~0x07;

LPC_IOCON-》R_PIO1_0 |= 0x01;

LPC_IOCON-》R_PIO1_1 &= ~0x07;

LPC_IOCON-》R_PIO1_1 |= 0x01;

LPC_SYSCON-》SYSAHBCLKCTRL &= ~(1《《16);

LPC_GPIO1-》DIR |= (1《《0);

LPC_GPIO1-》DATA |= (1《《0);

LPC_GPIO1-》DIR |= (1《《1);

LPC_GPIO1-》DATA |= (1《《1);

while(1)

{

for(i=0;i《5000;i++)

for(j=0;j《200;j++);

LPC_GPIO1-》DATA &= ~(1《《0);

LPC_GPIO1-》DATA |= (1《《1);

for(i=0;i《5000;i++)

for(j=0;j《200;j++);

LPC_GPIO1-》DATA |= (1《《0);

LPC_GPIO1-》DATA &= ~(1《《1);

}

}

有没有发现,第二种表示方法,虽然不涉及函数和宏定义了,对于c语言掌握不是很好的人来说,看的比较爽。如果你掌握了c语言的这些宏定义和函数的小技巧,第一种表示方法是不是更有利于阅读程序的功能呢?

2.读懂程序需要c语言基础知识,当然,也可以边看程序,边学习c语言基础知识。

3.读懂程序需要会看单片机的寄存器定义,在程序中,大都是在给单片机的寄存器进行配置或是获取单片机寄存器的数据。看哪种单片机程序,就要学会看哪种单片机的寄存器定义。知道了寄存器的定义,就知道如何配置寄存器或是获取的寄存器数据代表的意义了。

例如我们要看LPC1114的程序,那么LPC1114的用户手册是必须要打开的。例如LPC_SYSCON-》SYSAHBCLKCTRL |= (1《《16);这条语句,就是在给SYSCON模块中的SYSAHBCLKCTRL寄存器进行配置,所以我们要找到这个寄存器的定义。首先,打开用户手册,找到SYSCON这一章,然后找到寄存器描述这一节,就可以找到这个寄存器的定义了。至于(|=(1《《16))这些,都是写基本的逻辑运算,也是些c语言的基础知识而已。例如(|=(1《《16)) 这个就是把1左移16个位,然后把左移后的数据与SYSAHBCLKCTRL寄存器进行或运算,运算后的结果再放入SYSAHBCLKCTRL寄存器当中。1左移16个位,就是bit16为1,其它位为0。与寄存器SYSAHBCLKCTRL进行或运算,我们不管这个寄存器原来的值是多少,我们现在只知道,1或任何数,都等于1;0或任何数,都等于任何数。所以,1左移16位后,再与寄存器进行或运算,实际上是把寄存器的bit16置1,剩下的位原来是多少,还是多少。

总结一句话,学习单片机主要是把程序里面的“或”“和”“进制转换”搞清楚,就很容易搞懂单片机程序了。
编辑:lyn

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

    关注

    5999

    文章

    43966

    浏览量

    620736
  • C语言
    +关注

    关注

    180

    文章

    7528

    浏览量

    128335
收藏 人收藏

    评论

    相关推荐

    单片机芯片怎么写入程序

    。为了使单片机工作,我们需要向其非易失性存储器中写入程序。本文将介绍单片机芯片程序写入的过程和方法
    的头像 发表于 01-05 14:06 2618次阅读

    单片机程序读取需要什么工具

    单片机程序读取的工具可以分为硬件工具和软件工具两类。下面将详细介绍这些工具的种类、功能和使用方法。 一、硬件工具 单片机开发板:单片机开发板
    的头像 发表于 01-02 18:10 1339次阅读

    STM32程序烧写方法#单片机

    单片机STM32程序
    油泼辣子
    发布于 :2023年12月11日 10:35:07

    怎么读取单片机程序

    怎么读取单片机程序
    发表于 11-01 06:21

    请问单片机测大电流有哪些方法

    单片机测大电流有哪些方法?​
    发表于 10-23 07:07

    单片机测电容的方法

    单片机测电容的方法
    发表于 10-20 06:50

    单片机“低耦合”的一些方法

    单片机“低耦合”的一些方法
    的头像 发表于 10-17 18:30 271次阅读

    单片机不管烧录啥程序都是一直正在检测中的原因?

    单片机今天刚到,打开烧录的时候一直显示正在检测单片机,没有一次显示操作成功,但是单片机一直显示的是商家的测试程序,不管烧录啥程序都是一直正在
    发表于 10-07 06:00

    一篇文章教你看懂嵌入式、单片机、STM32

    一篇文章教你看懂嵌入式、单片机、STM32
    的头像 发表于 09-27 16:04 644次阅读
    一篇文章教你<b class='flag-5'>看懂</b>嵌入式、<b class='flag-5'>单片机</b>、STM32

    STM32单片机IAP程序分享

    STM32单片机IAP程序
    发表于 09-25 06:57

    51单片机烧写程序方法

    STC89C51是应用广泛的51单片机,很多人都是通过该单片机入门学习的,单片机的学习需要勤动手。单片机需要烧写程序,要用到相关的软件和硬件
    的头像 发表于 09-11 10:10 3516次阅读
    51<b class='flag-5'>单片机</b>烧写<b class='flag-5'>程序</b>的<b class='flag-5'>方法</b>

    什么是单片机解密?单片机解密方法有哪些?

    单片机(MCU)一般都有内部程序区和数据区(或者其一)供用户存放程序和工作数据(或者其一)。为了防止未经授访问或拷贝单片机的机内程序,大部分
    发表于 08-28 09:26 487次阅读

    请问新唐USB系列的单片机在PC端有没有相应驱动程序,只要调用API就能和单片机通讯?

    请问新唐USB系列的单片机在PC端有没有相应驱动程序,只要调用API就能和单片机通讯?不想再用HID的方法了,省事一点~
    发表于 06-20 07:11

    基于89C51单片机的IO输出点亮1个LED灯方法1源程序

    基于89C51单片机的IO输出-点亮1个LED灯方法1源程序
    发表于 05-16 10:03 10次下载

    基于89C51单片机的IO输出点亮多个LED灯方法1源程序

    基于89C51单片机的IO输出-点亮多个LED灯方法1源程序
    发表于 05-16 10:03 0次下载