AVR单片机的BOOT区】的更多相关文章

BOOT区的由来基于一个简单的道理,即单片机的程序是保存在FLASH中的,要运行程序就必须不停的访问FLASH存储器.对于一般的FLASH存储器,数据的写入需要一定的时间来完成,在数据写入完成之前,存储器中所有的数据都是不可读的,这就在运行旧程序和写入新程序之间造成了一个矛盾. 使用BOOT区是解决这个矛盾的方法之一,它将FLASH存储器从物理上分为两个独立的区域,对其中的一个区的数据写入不会影响到另一个区的数据读取操作.我们可以让单片机的程序在其中一个区(通常是BOOT区)运行,而运行着的程序…
BOOT区的由来基于一个简单的道理,即单片机的程序是保存在FLASH中的,要运行程序就必须不停的访问FLASH存储器.对于一般的FLASH存储器,数据的写入需要一定的时间来完成,在数据写入完成之前,存储器中所有的数据都是不可读的,这就在运行旧程序和写入新程序之间造成了一个矛盾. 使用BOOT区是解决这个矛盾的方法之一,它将FLASH存储器从物理上分为两个独立的区域,对其中的一个区的数据写入不会影响到另一个区的数据读取操作.我们可以让单片机的程序在其中一个区(通常是BOOT区)运行,而运行着的程序…
我有幸接触了几款单片机,并用它们做了一些项目.现在想做个小总结,谈一下自己用各种单片机的感受.仅是个人意见,仁者见仁智者见智. 传统51,我想我就不多说了,适合菜鸟入门,容易上手,价格一般(从性价比方面说). 缺点:解密容易(传统51说:谁让咱出道早呢,大家都研究我,哎!哭......)一般功能也有,, 但AD.eeprom等功能要靠扩展,增加硬件和软件负担. IDE环境推荐 keil.编程器自己自制ISP下载线就行,好做,成本5元左右. PIC:我就是学这款单片机入门的,pic的好处就是各个型…
不管是什么单片机程序,中断总是非常重要的一部分 ,linux 下的avr开发,主要是依靠avr-gcc,以及avr-libc,它们对中断程序的格式要求,与window下的icc-avr以及win-avr有所差异,这里对linux下中断服务程序编写做个简要介绍. 个人原创,转载请注明出处:http://blog.csdn.net/embbnux/article/details/12448053 首先是要引入的库: #include <avr/io.h> #include <avr/inte…
RC电容触摸感应按键1:RC感应原理 RC采样原理就是通过测量感应极电容的微小变化,来感知人体对电容式感应器(按键.轮键或者滑条)的感应.电极电容(C)通过一个固定的电阻(R)周期性地充放电.(原文件名:image001.png) 固定电压施加在VIN,VOUT的电压随着电容值的变化而相应增加或者降低, 如图2所示.(原文件名:image002.png) 通过计算VOUT的电压达到阀值VTH所需要的充电时间(tC),来得到电容值(C). 在触摸感应应用中,电容值(C)由两部分组成:固定电容(电极…
单片机最小系统  单片机最小系统设计 AVR基本硬件线路设计与分析 (ATmega16功能小板) AVR DB-CORE Ver2.3 Atmega16开发板 本站商城提供本最小系统销售:99元 AVR学习套件 AVR学习板 AVR开发板 easyavr m16 ,ATmega16 开发板 AVR学习板 Mega16 核心板 (特价). 基本的AVR硬件线路,包括以下几部分: 1.复位线路 2.晶振线路 3.AD转换滤波线路 4.ISP下载接口 5.JTAG仿真接口 6.电源 7.串口电路 下面…
以前小看了定时器,发现这东西还真的很讲究,那先复习复习吧. 先提提中断:我的理解就是cpu执行时,遇到中断——根据对应的中断源(硬件或软件)——pc定位中断入口地址,然后根据这里的函数指针——跳转到相应的服务程序 之所以上面()了硬件或软件,这里还涉及到向量中断和非向量中断:区别就在于确定中断源,如果是硬件编码了中断源的,直接跳转相应的服务函数则是向量中断.而非向量中断指的是:如果发生中断了,但此时还不清楚是那个中断,需要查找标志位来确定跳转到那个中断区域. 可以发现向量中断肯定来的快些,这里为…
AVR单片机8位数码管显示的程序实现 转载:http://www.sohu.com/a/117255149_119709   2016-10-26 16:30 我们接着来完成 数码管的显示实验.现在我们开始动手编写程序: 根据前面的介绍,我们应该已经能够知道编写一个 的C语言程序的基本步骤和方法了. 下面给出这个程序的主程序文件,在这个程序中我们应该能够知道这个程序都包含了那几块,具体来说我们应该能够在这个程序中把以下几个部分找出来:预编译语句. 的定义.函数的声明.主函数.函数定义.如果你还不…
好久没写这个系列了.今天讲讲旋转编码器. 旋转编码器好像不是单片机玩家很常用的器件,但是我们的开发板上有,原因如下: 旋转编码器挺好用的.电位器能旋转的角度有限,旋转编码器可以无限圈旋转:旋转时不连续,有卡点,适合对应离散数据. 开发板上选用的旋转编码器,使用起来简单.方便. 本来旁边的电位器(旋钮,以后会讲)一枝独秀,挺孤单的,我就配一个高度大致相同的旋转编码器陪伴它. 今天我想写旋转编码器,于是在网络上搜索了一下,相关资料很少.最基本地,旋转编码器的作用是将角位移.角速度等机械量转换为电信号…
先解答之前一个思考题:如果不把引脚配置为输出而写高电平,连接LED会怎样? 实验结果是,LED会亮,但相比于输出高电平的情况,亮度很低.这是为什么呢? 通过上一篇教程我们知道,引脚输入输出模式是由寄存器DDRx中DDxn位控制的,可以推断出 pin_mode 函数会改变一个引脚对应的DDxn值,输入为0,输出为1,而其复位后的值为0,即输入,因此如果不把引脚配置为输出,它的模式就是输入.类似地 pin_write 函数会改变PORTxn,其值为函数的第二个参数. 所以不配置输出而写高电平的结果就…
从上一篇教程中我们了解到,按键与开关的输入本质上就是数字信号的读取.这一篇教程要讲的是,控制LED的原理是数字信号的输出.数字IO是单片机编程之有别于桌面编程的各项内容中最简单.最基础的. 在讲数字信号输出之前,我们先来了解一下它控制的器件.LED,是一种二极管,在理想模型中,加以正向电压会发光,反向电压则不会.在稍微实际一点的模型中,当正向电压超过一定阈值时,二极管会发光,其电流会随着正向电压的增大而急剧增大:对反向电压的耐受力也是有限的.现实中的LED的具体参数因生产厂家而异,一般红色与黄色…
我们已经学习了如何使用按键和拨动开关,不知你有没有好奇 button_down 和 switch_status 等函数是如何实现的.本篇教程带你一探究竟,让我们从按键的原理开始. 在原理图中,按键的符号如下图所示: 符号很简单,就是两个触点上方有一个动片,当按下时与两个触点接触.实际上按键内部的机械结构大体上就是这样,实现的功能是,没有按下时两端断路,按下时两端短路. 还有一种画法是这样的,即电键: 就按键内部的机械结构来说,第一种更加真实,但从电路角度来看,两者没什么区别. 但是我们的开发板上…
在按键的上方有4个拨动开关.开关与按键,在原理和使用方法上都是很类似的,但有不同的用途——按键按下后松开就会弹起,而开关可以保存其状态. <switch.h> 定义了与开关相关的函数.switch_status 对应 button_down ,switch_changed 对应 button_pressed ,使用与按键是基本相同的. 这里通过一个异常简单的例子来演示开关函数的使用,并说明开关操作与按键的细微差别:使LED与开关状态保持同步. 仿照上一篇教程,我们可以简单地把 button_p…
上一篇教程中我们学习了如何读取按键状态.而按键的动作,比如单击,至少需要两个状态才能判定,长按.双击的判定更加复杂.今天我们来学习如何使用库函数判断按键单击,以及其实现原理. 我们要实现的是:当一个按键被单击时,一个LED的状态改变(即亮变暗,暗变亮):4个按键对应4个LED.利用库提供的 button_pressed 函数,很容易就能实现这个功能. #include <ee1/button.h> #include <ee1/led.h> #include <ee1/dela…
好久没更新了,今天开始继续,争取日更. 今天我们来讲按键.开发板的右下角有4个按键,按下会有明显的“咔嗒”声.如何检测按键是否被按下呢?首先要把按键或直接或间接地连接到单片机上.与之前使用的4个LED不同,4个按键没有全部连接到单片机上——左边2个是连接的,右边2个通过按键上方标有B2.B3的接口引出(从左到右分别为B0.B1.B2和B3).如果要使用B2.B3,要用杜邦线连接到16个单片机引出针脚上. 开发板库中与按键相关的函数定义在 <ee1/button.h> ,这里是库函数手册.值得一…
这是一篇元教程(meta-tutorial)——其他教程教你怎么使用AVR单片机,本篇教程教你如何使用本系列教程. 我们的教程已经把板载LED讲完了,但是教会你的不应该只是如何使用LED.你应该已经知道: 单片机的英文是microcontroller,主要作控制用途,它内部集成了存储器: 我们使用的单片机型号是ATmega324PA,它是Atmel公司的8位AVR架构单片机,Atmel公司现已被Microchip公司收购: main() 函数可以不写  : 在Debug模式下编译的程序比Rele…
之前我们做的闪烁LED和流水灯,灯效都是循环的.这次我们来尝试一些不一样的——每一次随机选择一个LED并点亮. 要实现随机的效果,我们要用C语言标准库中的相关设施: #define RAND_MAX /*implementation defined*/ int rand(); void srand(unsigned seed); 以上设施都定义在 <stdlib.h> 中.其中,rand() 可以返回[0, RAND_MAX ]范围内的伪随机整数,srand() 用于给 rand() 提供种子…
上次我们用 delay 函数与 while 循环实现了一个LED的闪烁.这一次我们把所有LED加入进来,让它们依次闪烁,形成流水灯的效果. 开发板上有4个LED,我们可以用不多的语句把循环体直接描述出来(看看就行,不用敲): led_set(LED_RED , LED_ON); delay(); led_set(LED_RED , LED_OFF); led_set(LED_YELLOW, LED_ON); delay(); led_set(LED_YELLOW, LED_OFF); led_s…
上次我们把LED点亮了.你可能已经试过把 LED_RED 换成其他灯,也可能已经用 led_on() 把所有LED一起点亮了.但是LED点亮以后,程序就退出了,之后LED一直没有暗,直到没有供电.这一次,我们用程序来控制LED的亮和暗. 新建一个C executable项目,选择ATmega324PA单片机,在项目属性中添加库libee1,将配置改为Release.这是本教程现阶段中每一次新建项目都要做的.我刚才尝试用project template简化,然而设置无法导入. 默认生成的main.…
做了这么多准备,我们终于可以开始用开发板做点事了. 单片机编程与计算机编程有一些不同点.程序都要有零个或多个输入.一个或多个输出,这是两者都有的,但是计算机编程的输入输出主要靠控制台,而单片机没有. 单片机的英文是microcontroller,主要作控制用途,它对设备的控制就是它的输出,从设备读取的信息就是它的输入.计算机编程中,提供了scanf.printf等函数来做输入输出,单片机虽然也有这一些函数,但它们往往是在串口上收发数据,最终还是在电脑上显示的.单片机对它连接的设备的控制,主要通过…
今天去交大密院参观了设计展,无外乎两个主题:Arduino.Python. 关于Python,我印象最深的是一位Python程序员的话:你要硬核的话,可以去那边看Java. 拜托,都9102年了,Java已经算得上硬核了?是Python太好用,还是Java版本更新太快了?真正的硬核,绝对BrainFuck莫属,如果要实际一点,也是C++.Haskell之辈,当Java在他们口中称得上硬核的时候,我觉得我可以换一个展台了. 于是我来到了全是Arduino的楼层.看到那么多Arduino,我不禁疑惑…
本教程使用EasyElectronics开发板: EasyElectronics是一款基于AVR单片机的开发板.AVR单片机是基于改进的哈佛架构.8~32位的一系列RISC微控制器,最初由Atmel公司于1996年推出,特点在于高性能与低功耗之间的平衡.AVR单片机有众多型号,现在常用的有ATtiny.ATmega与ATxmega系列.AVR单片机上一般都带有定时/计数器.SPI.I²C.USART.模拟比较器.模数转换器等外围设备. EasyElectronics拥有丰富的板载资源: 核心部分…
我一直觉得现在的网络环境对电子技术的学习有一点问题,但始终无法确切地指出,更何况网络上相关资源已经那么丰富. 但我觉得是问题的,无论它到底是不是问题,对我来说总归是一个问题.我学习也不算深入,很多东西都没机会.没时间去接触,站在我现在的立场,我之前走了许多弯路,这就是我说它有问题的原因. 单片机是应该自学的,因为它涉及到并应用于方方面面,广泛程度使课堂只能占学习的一小部分.单片机也是适合自学的,只有在不断的尝试与实践中才能获得经验.但是网络环境似乎对自学并不友好. 单片机有两大阵营,以Ardui…
更新:EasyElectronics Library v1.1手册 索引: bit.h delay.h pin.h tone.h pwm.h uart.h adc.h led.h rgbw.h segment.h buzzer.h button.h switch.h rotary.h pot.h ldr.h dac.h exout.h exin.h lcd.h 进度: 全部代码已完成: 手册已完成:bit.h delay.h pin.h led.h rgbw.h button.h 1. 概述 1…
ADC 计算机的世界是0和1的.单片机可以通过读取0和1来确定按键状态,也可以输出0和1来控制LED.即使是看起来不太0和1的PWM,好像可以输出0到5V之间的电压一样,达到0和1之间的效果,但本质上还是高低电平. 但是,世界上终究还是有0和1无法表示的.如果引脚上被施加0到5V之间的电压,寄存器PINx无法告诉我们具体情况,只能指示这个电压是1.5V以下还是3V以上(参考数据手册"Electrical characteristics").这种可以连续变化的信号称为模拟信号,与离散的.…
本文隶属于AVR单片机教程系列.   中断,是单片机的精华. 中断基础 当一个事件发生时,CPU会停止当前执行的代码,转而处理这个事件,这就是一个中断.触发中断的事件成为中断源,处理事件的函数称为中断服务程序(ISR). 中断在单片机开发中有着举足轻重的地位--没有中断,很多功能就无法实现.比如,在程序干别的事时接受UART总线上的输入,而uart_scan_char等函数只会接收调用该函数后的输入,先前的则会被忽略.利用中断,我们可以在每次接受到一个字节输入时把数据存放到缓冲区中,程序可以从缓…
本文隶属于AVR单片机教程系列.   到目前为止,我们的开发板只能处理很小量的数据:读取几个引脚电平,输出几个LED,顶多用数码管显示一个两位数字.至于输入一个指令.输出一条调试信息,甚至用scanf和printf来输入输出,在已经接触过的这些器件上是难以想象的.而本讲"串口发送"与下一讲"串口接收",将打开这一扇大门. 硬件 本讲的主题是UART(Universal Asynchronous Receiver-Transmitter,通用异步收发器),俗称串口.实…
本文隶属于AVR单片机教程系列.   上一讲中,我们实现了单片机开发板向电脑传输数据.在这一讲中,我们将通过电脑向单片机发送指令,让单片机根据指令控制LED.这一次,两端的TX与RX需要交叉连接,单片机TX连接串口工具RX也是需要的,因为程序会根据指令反馈信息. 为了简单起见,我们的程序只需要控制4个板载LED.指令包含两个字节:第一个字节为r.y.g.b中的一个,分别表示红.黄.绿.蓝灯:第二个字节为0或1,表示灯不亮或亮. 然而,a2这样的指令是没有意义的,却是可能出现的.即使用户已经熟悉了…
本文隶属于AVR单片机教程系列.   引子 定时/计数器(简称定时器)是单片机编程中至关重要的一部分,再简单的单片机也会带有定时器. 也许你会觉得我们已经在delay函数中接触过定时器了,然而并不是,它只是软件地通过"浪费时间"来实现延时.我们接触定时器在数码管中,segment_auto函数可以自动完成动态扫描,好像在main函数背后又开了一个线程,两者并行执行一样.这就用到了定时器中断. 中断是一种必要的程序流程控制方法,但这两讲我们先聚焦于利用定时器来输出波形. 本讲中,我们用定…
本文隶属于AVR单片机教程系列.   PWM 两位数码管的驱动方式是动态扫描,每一位都只有50%的时间是亮的,我们称这个数值为其占空比.让引脚输出高电平点亮LED,占空比就是100%. 在驱动数码管时,我们迫不得已使占空比为50%,因为不能让两位真正同时地显示不同的数字.但是,我们也可以有意地让LED的占空比不到100%,以降低其亮度. 占空比是可以用程序来调节的.下面的程序允许用户用按键调整蓝色LED的占空比,并通过数码管来显示. #include <ee1/ee.h> #define DU…