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

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

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

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,剩下的位原来是多少,还是多少。

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

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

这款全新的中端MCU系列为设计人员提供了更高水平的安全性和灵活性

关键字: 嵌入式 单片机

单片机是一种嵌入式系统,它是一块集成电路芯片,内部包含了处理器、存储器和输入输出接口等功能。

关键字: 单片机 编写程序 嵌入式

在现代电子技术的快速发展中,单片机以其高度的集成性、稳定性和可靠性,在工业自动化、智能家居、医疗设备、航空航天等诸多领域得到了广泛应用。S32单片机,作为其中的佼佼者,其引脚功能丰富多样,是实现与外部设备通信、控制、数据...

关键字: s32单片机引脚 单片机

在微控制器领域,MSP430与STM32无疑是两颗璀璨的明星。它们各自凭借其独特的技术特点和广泛的应用领域,在市场上占据了重要的位置。本文将深入解析MSP430与STM32之间的区别,探讨它们在不同应用场景下的优势和局限...

关键字: MSP430 STM32 单片机

该系列产品有助于嵌入式设计人员在更广泛的系统中轻松实现USB功能

关键字: 单片机 嵌入式设计 USB

单片机编程语言是程序员与微控制器进行交流的桥梁,它们构成了单片机系统的软件开发基石,决定着如何有效、高效地控制和管理单片机的各项资源。随着微控制器技术的不断发展,针对不同应用场景的需求,形成了丰富多样的编程语言体系。本文...

关键字: 单片机 微控制器

单片机,全称为“单片微型计算机”或“微控制器”(Microcontroller Unit,简称MCU),是一种高度集成化的电子器件,它是现代科技领域的关键组件,尤其在自动化控制、物联网、消费电子、汽车电子、工业控制等领域...

关键字: 单片机 MCU

STM32是由意法半导体公司(STMicroelectronics)推出的基于ARM Cortex-M内核的32位微控制器系列,以其高性能、低功耗、丰富的外设接口和强大的生态系统深受广大嵌入式开发者喜爱。本文将详细介绍S...

关键字: STM32 单片机

在当前的科技浪潮中,单片机作为嵌入式系统的重要组成部分,正以其强大的功能和广泛的应用领域受到越来越多行业的青睐。在众多单片机中,W79E2051以其卓越的性能和稳定的工作特性,成为市场上的明星产品。本文将深入探讨W79E...

关键字: 单片机 w79e2051单片机

单片机,又称为微控制器或微处理器,是现代电子设备中的核心部件之一。它集成了中央处理器、存储器、输入输出接口等电路,通过外部信号引脚与外部设备进行通信,实现对设备的控制和管理。本文将详细介绍单片机的外部信号引脚名称及其功能...

关键字: 单片机 微控制器 中央处理器
关闭
关闭