单片机

初识ARM嵌入式系统

倖福魔咒の 提交于 2020-03-01 12:28:35
ARM嵌入式系统的基本结构和常见的ARM微处理器 ARM被称为嵌入式微处理器核。 ARM嵌入式系统由3部分组成,即嵌入式系统硬件平台,嵌入式操作系统(代码)和嵌入式系统应用。 1、嵌入式系统硬件平台主要是指各种嵌入式处理器和外围设备等,如基于ARM核的STM32XX处理器、51系列单片机等。 2、嵌入式操作系统(代码)是指嵌入式硬件平台上运行的代码和操作系统。目前主流的嵌入式操作系统是基于C语言(或汇编语言)的嵌入式Linux、UCLinux和uc/os-II等。 一般而言,Linux操作系统具有比较完善的网络接口支持;UCLinux操作系统被用在一些不需要“内存管理单元”(MMU,Memory Management Unit)的嵌入式平台中;而uc/os-II系统是典型的实时操作系统,可满足对实时性要求比较高的场合,如汽车电子油门、车载高速CAN网络等,具有非常快的响应时间。 除了上述介绍的几种嵌入式操作系统外,当前主流的电子产品中,还广泛使用Android、MeeGo等系统。这些系统主要用在智能手机和平板电脑上。 3、嵌入式系统应用是以嵌入式系统硬件平台的搭建、嵌入式操作系统的成功移植和运行为前提的。这一部分内容运行在嵌入式操作系统的上层,完成特定的功能目标。 通常情况下,不同的系统需要根据具体的项目需要设计不同的嵌入式应用程序。在嵌入式系统中,系统应用并不是必需的

嵌入式系统的入门心得

笑着哭i 提交于 2020-03-01 11:07:07
一、嵌入式开发概述 1**. 嵌入式技术是什么? ** 嵌入式技术是以应用为中心,以计算机技术为基础,并且软硬件可裁剪,适用于应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统技术。通常,嵌入式系统是一个控制程序存储在ROM中的嵌入式处理器控制板。事实上,所有带有数字接口的设备,如手表、微波炉、录像机、汽车等,都使用嵌入式系统,有些嵌入式系统还包含操作系统,但大多数嵌入式系统都是是由单个程序实现整个控制逻辑。 简单来说,嵌入式可以在已有的硬件上移植操作系统,可以在操作系统之上做上层应用开发,可以在操作系统之下做底层开发。 2. 嵌入式软件与非嵌入式软件的区别? 主要区别嵌入式软件是结合操作系统之上做的开发,而非嵌入式软件是裸机开发。 除此之外,嵌入式系统安装于主板的ROM只读存储器中,系统是定制在ROM中的,能够瞬间启动,启动效果类似于PC的待机恢复(软件留在内存), 非嵌入式系统安装于硬盘或固态硬盘(如内存卡),系统可以DIY,启动时从硬盘读取系统数据,在RAM建立一个临时的操作系统环境,关机后消失,每次启动都要重新建立一个临时系统环境。 3. 嵌入式开发与单片机开发的区别? 嵌入式开发需要操作系统,而单片机开发不需要。 二·嵌入式的开发方向 1.嵌入式上层应用软件开发 2.嵌入式底层系统软件开发 3.嵌入式系统工程师 三·嵌入式系统的组成 软件子系统:应用程序

《51单片机C语言创新教程》

自作多情 提交于 2020-02-29 03:46:02
献给渴望学好单片机编程的朋友,一切只为了解密单片机编程高手的秘诀! ================================================================================= 《51单片机c语言创新教程》以宏晶公司的stc89c52rc单片机为蓝本,由浅人深,并结合smartm51开发板系统地介绍单片机的原理与结构、开发环境的使用、各种功能器件的应用。   《51单片机c语言创新教程》主要特色是边学边做,不是单纯的理论讲解,各章节中规中矩,遵循由简到繁、循序渐进的编排方式。本书大部分内容均来自作者的项目经验,因而许多c语言代码能够直接应用到工程项目中去,且代码风格良好。书中还介绍了usb通信、网络通信、数据校验、深入编程等,而这些内容在很多同类型书籍中并不具备,恰恰也是即将走出校门的大学生踏入社会工作经常要接触的。其中配套的光盘含有各实验的示例代码,可使读者在短时间内迅速掌握单片机的应用技巧,并可向读者提供配套的单片机开发板。   《51单片机c语言创新教程》既可作为大学本、专科单片机课程教材,也可作为相关技术人员的参考与学习用书。 ================================================================================= 送给渴望学好单片机的朋友:  

分析单片机堆栈,分享个人理解

╄→尐↘猪︶ㄣ 提交于 2020-02-28 18:15:17
看关于单片机方面的书籍的时候,总是能看到别人说的一些堆栈啊什么的操作,之前看到这个术语就直接跳过,没想到去探究单片机内部的原理。但是最近课程学习微机原理这门课,需要我们写汇编程序,汇编里面经常遇到堆栈这个东西,所以就找了个时间把堆栈给彻底的搞一下。 如果了解一点汇编编程话,就可以知道,堆栈是内存中一段连续的存储区域,用来保存一些临时数据。通常用来保存CALL指令调用子程序时的返回地址,RET指令从堆栈中获取返回地址。中断指令INT调用中断程序时,将标志寄存器值、代码段寄存器CS值、指令指针寄存器IP值保存在堆栈中。 堆栈也可以用来保存其他数据。 堆栈操作由PUSH,POP两条指令来完成; 堆栈操作的操作数均为子类型(两个字节)进行操作。 程序内存可以分为几个区,栈区(stack),堆区(Heap),全局区(static),文字常亮区,程序代码区。 程序编译之后,全局变量,静态变量已经分配好内存空间,在函数运行时,程序需要为局部变量分配栈空间,当中断来时,也需要将函数指针入栈,保护现场,以便于中断处理完之后再回到之前执行的函数。 栈是从高到低分配,堆是从低到高分配。 我们一般说的堆栈指的栈。堆栈又分硬堆栈和软堆栈,硬堆栈即SP,从片内RAM的顶部向下生长。软堆栈在硬堆栈跟全局变量区之间的空间,C51函数调用通过R0-R7和栈来实现。 为什么单片机启动时

单片机程序死机,跑飞了可能是因为这几个方面的原因

做~自己de王妃 提交于 2020-02-28 13:26:21
1、意外中断。是否打开了某个中断,但是没有响应和清除中端标志,导致程序一直进入中断,造成死机假象; 2、中断变量处理不妥。若定义某些会在中断中修改的全局变量,这时要注意两个问题:首先为了防止编译器优化中断变量,要在这些变量定义时前加volatile,其次在主循环中读取中断变量前应该首先关闭全局中断,防止读到一半被中断给修改了,读完之后再打开全局中断;否则出现造成数据乱套。 3、地址溢出,常见错误为指针操作错误。我要着重说的是数组下标使用循环函数中循环变量,如果循环变量没控制好则会出现数组下标越界,意外修改系统的寄存器造成死机,这种情况下如果死机说明运气好,否则后面不知道发生什么头疼的事。 4、无条件的死循环;比如使用while(x);等待电平变化,正常情况下x都会变成0,就怕万一,因此最好加上时间限制; 5、看门狗没有关闭。有的单片机即使没使用看门狗开机时也有可能意外自动开启了最小周期的看门狗,导致软件不断复位,造成死机,这个要看芯片手册,最好在程序复位后首先应该显式清除看门狗再关闭看门狗; 6、堆栈溢出。最难查找的问题,对于容量小的单片机,尽量减少函数调用层级,减少局部变量,从而减少压栈的时候所需的空间。当你把以上几条都试过不能解决问题,试一试把你的被调用少函数直接内置到调用的地方并且把占用RAM大的局部变量改成全局变量,试一试说不定就可以了。 来源: oschina 链接:

单片机与晶振到底有什么关系?

ε祈祈猫儿з 提交于 2020-02-28 13:17:20
在初学单片机的时候,总是伴随很多有关于晶振的问题,其实晶振就如同人的心脏,是血液的脉搏。把单片机的晶振问题搞明白了,51单片机的其他问题迎刃而解。 什么是晶振 晶振一般叫做晶体谐振器,是一种机电器件,是用电损耗很小的石英晶体经精密切割磨削并镀上电极焊上引线做成。 晶振,全称是石英晶体振荡器,是一种高精度和高稳定度的振荡器。通过一定的外接电路来,可以生成频率和峰值稳定的正弦波。而单片机在运行的时候,需要一个脉冲信号,做为自己执行指令的触发信号,可以简单的想象为:单片机收到一个脉冲,就执行一次或多次指令。 对于单片机来说晶振是很重要的,可以说是没有晶振就没有时钟周期,没有时钟周期就无法执行程序代码,那样的话单片机就无法工作。 晶振与单片机周期 单片机工作时,是一条一条地从RoM中取指令,然后一步一步地执行。单片机访问一次存储器的时间,称之为一个机器周期,这是一个时间基准。—个机器周期包括12个时钟周期。如果一个单片机选择了12MHz晶振,它的时钟周期是1/12us,也是一个晶振周期。它的一个机器周期是12×(1/12)us,也就是1us。 机器周期不仅对于指令执行有着重要的意义,而且机器周期也是单片机定时器和计数器的时间基准。例如一个单片机选择了12MHz晶振,那么当定时器的数值加1时,实际经过的时间就是1us,这就是单片机的定时原理。 单片机晶振的作用

单片机编程从简单程序开始,通俗易懂才能轻松入门,电工电子基础

て烟熏妆下的殇ゞ 提交于 2020-02-28 10:54:04
一:编程任务和思路 我们来做一个让灯不断闪烁的简单程序。怎样才能让灯不断地闪烁呢?要灯亮一段时间,再灭一段时间,也就是说要P1口不断地输出高和低电平。 编程思路: 在执行完SETB P1后,延时一段时间(几秒或零点几秒)再执行第二条指令,就可以分辨出灯曾灭过了。执行完第二条指令后,让计算机再去执行第一条指令,不断地在原地兜圈,我们称之为"循环",这样就可以完成任务了。 二:程序编写 主程序 LOOP: SETB P1 ;(1) LCALL DELAY ;(2) CLR P1 ;(3) LCALL DELAY ;(4) AJMP LOOP ;(5) 子程序 DELAY: MOV R7,#250 ;(6) D1: MOV R6,#250 ;(7) D2: DJNZ R6,D2 ;(8) DJNZ R7,D1 ;(9) RET ;(10) END ;(11) 单片机闪灯电路图 三:程序分析说明 1:第一条是让灯灭,第二条是延时,第三条是让灯亮,第四条和第二条一模一样,也是延时,第五条应当是转去执行第一条指令。 2:再看第五条,LJMP是一条指令,意思是转移,往什么地方转移呢?后面跟的是LOOP,看一下,什么地方还有LOOP,对了,在第一条指令的前面有一个LOOP,所以很直观地,我们可以认识到,它要转到第一条指令处。这个第一条指令前面的LOOP被称之为标号,它的用途就是给这一行起一个名字

单片机怎么和手机通信,你知道吗?

被刻印的时光 ゝ 提交于 2020-02-28 07:54:27
在用单片机做产品的时候,难免会用到单片机和手机通信,能和手机通信的方案有很多这种,像常用的蓝牙,Wifi等等,当然还有更高层次的通过互联网,一般我们使用比较多的就是用蓝牙和手机通信,我们今天就给大家说一下手机蓝牙如何和手机通信。 废话不多说直接转入正题。 一、准备: 1.首先得有一款支持串口通信的单片机,我们使用的是51单片机。 51最小系统 2.蓝牙模块(HC06) HC06(图片来源于网络,如涉权请联系删除) 3.下载个蓝牙串口调试助手 蓝牙串口调试助手图标 蓝牙串口调试助手界面 4.蓝牙转串口模块(主要用于显示接受到的数据,在单片机开发应用中可以没有) 5.电脑上安装一个串口调试助手。 6.若干焊锡,杜邦线,焊台,电脑一台,手机一部等。 二、调试工作 1.调试蓝牙模块 用杜邦线把蓝牙转串口模块和蓝牙模块连接起来,对应引脚链接分别为 VCC-->VCC GND-->GND TXD-->RXD RXD-->TXD 这里一定要注意TXD和RXD一定不要接反,串口的波特率和蓝牙模块波特率要对应,否则不能使用 打开手机上的软件串口调试助手,在下面键盘上输入一个字符,点击发送,然后在电脑显示屏上就会看到该字符,那么调试成功。 三、连接工作 把蓝牙模块和单片机模块连接起来,然后打开蓝牙串口调试助手,连接上蓝牙模块(初次连接可能需要密码,默认初始密码1234)发送数据

单片机 MSP430G2553 FLASH 操作

痴心易碎 提交于 2020-02-28 04:50:17
//FLASH操作 写入 void write_SegC ( char value [ ] , char lenChar ) { char * Flash_ptr ; // Flash pointer char i ; Flash_ptr = ( char * ) 0x1040 ; // Initialize Flash pointer FCTL1 = FWKEY + ERASE ; // Set Erase bit FCTL3 = FWKEY ; // Clear Lock bit * Flash_ptr = 0 ; // Dummy write to erase Flash segment FCTL1 = FWKEY + WRT ; // Set WRT bit for write operation for ( i = 0 ; i < lenChar ; i ++ ) { * Flash_ptr ++ = value [ i ] ; // Write value to flash } FCTL1 = FWKEY ; // Clear WRT bit FCTL3 = FWKEY + LOCK ; // Set LOCK bit } //FLASH操作 读取 void read_SegC ( char value [ ] , char lenChar ) { char *

EEPROM(AT24C02)

拜拜、爱过 提交于 2020-02-27 19:18:28
硬件连接图 引脚图 WP:写保护位,在这里不使用写保护 A0、A1、A2:3个地址位为整个7位地址的后三个地址, 注意 这里的前四位地址已经被固定成1010了即0xa,剩下的三位由这三位控制 按字节写入数据 这里的MSB在前,表示AT24C02是高位先行的 WORD ADDRESS:选择将要写入的地址,也就是从AT24C02的哪一个位置来写,区别于前面的设备地址 当单片机的速度很快,单片机需要等待AT24C02的写入完成,这时单片机再次发送写入信号这个信号包含着AT24C02的地址,相当于询问AT24C02的写入是否完成,当完成时AT24C02的返回值为"0"时,代表上次写入工作已经完成 按页写入 相比按字节写入数据更快,不用每次都询问是否完成。 突发写入:给一次地址,连续写入多次数据 一次可以写入8个字节 读当前地址存的数值 随机指定某一个字节来读取 注意 :这里虽然是读取,但是由于前期需要寻址,所以这里的第一次产生其实起始信号是写入操作 顺序读取 这与前面的 随机指定某一个字节来读取 类似,但是后面顺序读取只要有一直有应答信号产生,AT24C02就会一直顺序发送数据,直到主机产生非应答信号 如果到了最后一位还没有产生应答信号时,AT240C2就会从首地址读取数据发送给单片机 来源: oschina 链接: https://my.oschina.net/u/4306685