AVR单片机学习(一)

发布者:CelestialGarden最新更新时间:2015-02-06 来源: 51hei关键字:AVR  单片机 手机看文章 扫描二维码
随时随地手机看文章

一、基础篇

单片机的基本要素

  •    CPU核(如:51核   AVR核 M430核)
  •    ROM(READ ONLY Memory 绕母)
  •    RAM(random access Memory 随机访问寄存器 
  •    片上外设
  •    总线  

CPU核:相当于电脑的CPU吧、就是执行从ROM中取指令。这东西有几个指标非常重要

一、主频(如51核是2MHZ晶振12分频过来就是2MHZ、AVR 是20MHZ(快达到DSP水平了)MSP430F1系列的是8MHZ)

二、指令集  (CISC(复杂) RISC(精简)当然精简指令集比复杂执行效率高很多个人觉得缺点实现的功能少 )

三、字长 (就是一次能处理二进制数据的位数  我们单片机一般是8位  16位   AVR和51都是8位)

ROM:相当于电脑的硬盘、存储程序用的指标就是容量   大多数是flash 结构基本都混淆说了

一、容量   单位一般KB位单位 

二、高级指标 、自编能力(就是程序在运行中可以自己擦出flash然后更改flash中的内容的能力一般我们用不到)

如:51(不具备自编能力)-->8KB  

    MSP430F1101(具备)--> 1KB

    AVR(具备)---> 16KB

RAM:数据存储器、相当于计算机的内存、ROM中的程序在运行时快速的存取数据、目前大多数单

     片机为SRAM结构 计算机室SDRAM结构。指标也是容量 一般 B(字节)  KB(千字节)

一、容量 

    如: 51单片机512字节 

        MSP430F1101 128字节

        AVR 1KB  1千字节

主要是程序运行时调用一些变量啊调用一些数组等都是存在RAM中的。

片上外设:相当于电脑的接口,鼠标接口、显示器接口等

    常见的片上外设模块有外部中断、定时器/计数器、URAT(异步串行)、SPI(同步)IIC(2线的串行口)ADC

    及模拟比较器等。

如:一下三种价格10元左右的单片机

    一、89C52就只有外部中断   定时器计数器   UART

    二、MSP430F1101   外部中断   定时器计数器  ADC

    三、AVR 外部中断、定时器/计数器、URAT(异步串行)、SPI(同步串行)IIC(2线的串行口)ADC

    及模拟比较器。

总线:用于以上四部分之间的传输数据的通道、相当于硬盘的IDE线、光驱线等。

   总线只是一个概念。没有一个实际的这样的一个东西、这个东西我也不太清楚可以理解为一束功能相近的导线

   的集合吧。
单片机能做什么?

单片机无所不能!

所谓的“微电脑控制控制”的核心就是单片机(微电脑控制比较时髦的)

覆盖工业生产、日常生活、军事设备、科研仪表仪器等所有智能化的应用场合

例如:智能洗衣机(一般洗衣机不能完成的功能)

定时完成洗衣脱水功能。

可以判断衣服的干净程度。

实现洗净既停的功能。

蒸汽熨烫的功能。

刷卡投币洗衣

更加智能LG公司的"IPAD"洗衣机一边洗衣一边听歌。

例如:(LED显示屏)

LED发光二极管构成显示屏的像素点

单片机负责逐点火逐行扫描,并与电脑通信获取图片信息。

例如:(PH/ORP仪表)

用于环境监测、工矿企业、科学研究、水产养殖等场合的PH值的测定

读取PH传感器的模拟信号、内部处理后显示在LCD上。(其实就是读取液体的PH值)

还有很多数码产品。。。

还有智能小车(我上大学时就做过这样一个东西呵呵用ATMEGA8)

一、巡线

二、避障

三、电视机遥控器遥控(接受各个遥控器的键码)

四、LCD显示

----------------------------------------------------------------------------------

二、单片机的开发工具

  • 编程器(烧写器):将编译出来的目标代码固化到单片机的ROM内。(老的把单片机插到编程器上)
  • 下载线:作用与编程器相同(ISP 通过一条下载线4根线和单片机通信就可以把代码下载到单片机、好处不需要把单片机从电路板拔下来)
  • 仿真器:对单片机的程序进行单步调试、设置断点等,便于查找程序中的错误。其中JTAG仿真器可以在线仿真调试(它也分为2种一种是传统的需要把单片机拔下来然后把仿真器的仿真头插到板子上、通过后再把代码固化到单片机中然后把单片机放回板子上、最近新型的JTAG仿真器是属于在线仿真左边的、你只需要把单片机插到板子上把JTAG跟单片机相连接就可以进行仿真与调试同事JTAG也具有把代码固化到单片机中的能力、所以有仿真器的话下载线基本可以省了。)

  • 软件开发环境

     编辑与编译软件:WinAVR

     仿真调试软件:AVR Studio

     下载软件:MuCode ISP

  • 硬件开发环境

     仿真调试工具:JatgICE

     下载线工具:STK200/300

     学习板、开发板一块(型号 *-**-M16)

 

 参考技术手册 AVR官方中文版技术手册《AVR单片机与GCC编程》


 [page]

AVR单片机简介

AVR单片机的性价比远高于51单片机

一、高速 、RISC、主频最高可达20MHZ(首先主频就快10倍 RISC又扩大好几倍。)

二、低功耗、宽电压(1.8V---5.5V)。最低全速运行功耗<300uA

三、I/O驱动能力强、推拉电流能力均达30mA ,可以直接驱动继电器、蜂鸣器等。

    (51 拉电流强估计有小于10mA 推电流基本是0   几百个微安了

四、片内资源丰富:外部中断、定时器/计数器、UART、SPI、IIC、ADC、模拟比较器。

    尤其值得一提的是AVR的定时器功能也是非常强的能够实现PWM功能或输入捕获功能、PWM功能

    是非常强的可以用于电机的控制。

五、型号齐全、而且40脚以下的AVR均具有DIP封装形式。(8脚到100脚需要的领域基本都有

    相应的产品了)如下图。


ATMEGA系列中的ATmega16 应该算是我们用的最多一款因为很多人都是用它学习AVR单片机学习的入门。



上图三个是官方提供的开发工具  MK2仿真器:

 JTAG   ICE:   这个可以自制

选择AVR开发有一下几个优点

1、最小系统容易实现设计容易、只需要连接电源 焊接晶振就可以工作(当然如果对时钟要求不是很严格的话

   连晶振都可以不要的不像51单片机需要晶振、EA脚上拉上电复位电路、而AVR单片机内部自带内部上电复位

   电路的)。

2、很多概念符合初学者的思路、理解起来更容易:例如AVR时钟源(晶振、内部RC等)不经过分频直接提供

   给CPU使用,而51的主频等于晶振的12分频这个大家都知道的、所以这一点算定时器的时候非常方便,而51

   算就比较麻烦算定时周期就幻晕。

3、AVR即具有简单的、可以自制的ISP下载线和Jtage仿真器,又有DIP直插的封装形式。(51占用一个串口,

   是不能仿真串口的,属于软仿真,DIP直插很容易让初学者学习像430就没有DIP)

4、AVR的C语言编程与C语言教科书上的标准C语言语法是几乎一样的,不像51的C语言,一些bit srf 之类的变

   量定义在教科书中是找不到的,有利于后期的嵌入式学习。

实际例子:



电路图可以看到8个发光二极管可以进行闪烁和显示二进制显示等。

    有图中可以看到这是ATmega16 单片机,它的最小系统是非常简单的只要GND接地 VCC接+5V就可以了右边

的AGND/AVCC/AREF这三个脚是你用到片内模/数转换 ADC或模拟比较器的时候需要把这三个脚接上电源,如果正常用不到可以悬空就可以了。还有RESET可以悬空。Hander6 是一个简易的下载线的接口 MOSI , MISO,  SCK,RESET共4根线、8个二极管的阳极接PD0---PD7 (学过51的都知道一般都是阴极接I/O口这是因为51的灌电流能力很强,拉电流很弱)。这样阳极接I/O口也比较符合初学者的思维,I/O口输出1二极管是点亮的。

下面是如何用万用板焊接和编译程序:

   焊接万用板就不说了,太简单了只要小心翼翼就ok了。焊接完成后,把ATmega 16 插到插座上,我们往单片机固化的程序采用的是我们自制的一个下载线如下图:

这个下载线电路还是比较简单的,只需要一片 74HC244(也可以直接跟并口相连,用244的原因是因为防止烧坏并口所以接了一个缓冲器,其实就是用并口模拟的时序ISP)  然后插到计算机后面的并口上,标准的AVR单片机下载线是10芯的接口的,但是只有其中的6芯是有用的。所以我们自制了一个10芯转6芯的一个线,把其中有用的6芯给引出来,顺序跟我们电路图上的一样的。然后把这个6芯线插到单片机引出的下载线的6芯接口上。然后找来一个5V电源然后插到单片机上的电源供电口,然后把下载线的软件下载软件 MuCode ISP  如下图是图标和打开后的样子:





下面我们编译一个测试代码:(打开AVR studio下图)




点击:New Project 弹出下图


第一项: ADORD  AVR assemble  这个是会变得 这个是新建一个汇编语言的项目

第二项:AVR GCC  这个是C语言的项目 Project name 起个项目名字 test0

最下面的location 这个是路径   我们可以选择放在桌面上 (桌面上新建一个文件夹放进去就行了)[page]

点击:finish  完成


点击:Next 下一步

下面的这步是选择仿真调试的工具和将要开发的单片机的型号:如下图


调试工具由于我们小板上没有喊JATG ICE接口 如果焊了我们可以选JTAG ICE 选项会如下图:

因为没有焊,我们直接下载到单片机运行验证。所以我们不选 JTAG ICE 选AVR Standlitor 意思就是软件仿真不用仿真器 然后右边选AT mega 16  如下图

点击:finish  进入环境 软件自动为我们建立一个.C 文件


因为C语言文件必须包含基本的头文件

#include

int main (void ){ //avr GCC的语法呢  的这个main函数必须是int 类型的 且没有返回值的

//由于发光二极管阳极是接在PD口上 属于PD口输出型的所以要把整个PD口都置为输出

//PD端口方向寄存器 叫做  DORD =0XFF的时候

DDRD =0XFF;//0到7  都置为输出

   while(1){//因为单片机的程序不像PC机程序可以退出,所以单片机上电之后一般都是死循环的

      PORTD  =0b11100110; //这个表示TD口第一个数据寄存器 给它赋值就等于赋值了

      //0b表示 二进制   是从7位到第0位  左位高位

 

 

   

   }

}[page]

//然后点击编译 如下图



 

然后用 MuCode ISP   下载到单片机中 file ->open  flash

 点击:progarm 如下图

可以看到:如下图所表现

下面加一些动态效果能够让灯闪烁起来 无非是让产生两种状态  还有就是这个所有位就是取反

#include

int main (void ){ //avr GCC的语法呢  的这个main函数必须是int 类型的 且没有返回值的

DDRD =0XFF;//方向寄存器

   while(1){

      int i =0,j=0;

      PORTD  =0b11100110;

      //其实执行这条C语句大概需要2条汇编指令的周期 而这个单片机的时钟周期是1MHZ  默认的是内部RC

      振荡1MHZ 这样也就是每条指令时us级  所以人的眼睛是看不到的。加延时

    for (j=0;j<10;j++) 

       for (i=0;i<10000;i++);//估算下这个for 循环消耗多长时间  每条指令几个微妙 而一个i++

       大概5条指令

     所以10000 * 5 *2 = 100000   大概50毫秒 所以让这条for 执行10次左右

      

 

      PORTD  =0b00011001;//执行完了  加一个延时跟上面一样

       for (j=0;j<10;j++) 

       for (i=0;i<10000;i++);//估算下这个for 循环消耗多长时间  每条指令几个微妙 而一个i++

       大概5条指令

   

   }

}[page]

编译验证下:


 

可以看到mucode isp 自动就下载进去了。 因为有个选项是下图



这个勾上后就没当这个文件更新之后就自动下载到单片机里了。下面可以看到现象每隔1秒闪烁一次





 

由此说明我们的程序是成功的。今天到此结束。  bye  !

最后送大家一句话: Nothing is impossible to a willing heart   

关键字:AVR  单片机 引用地址:AVR单片机学习(一)

上一篇:AVR单片机学习(三)开发基础知识
下一篇:AVR单片机学习(二)硬件电路的设计教程

推荐阅读最新更新时间:2024-03-16 13:53

MCU到FPGA:第1部分
我是MCU的长期用户和狂热者,特别是对多功能低成本MCU上有着浓厚的兴趣,这种MCU模块能够通过单芯片实现优秀的通信能力。我做过很多有意思的小玩意,包括:MP3播放器、闹钟、无线地面湿度控制系统、宠物活动监视器、低功耗蓝牙姿态控制等。在这些小项目中,MCU实现信息的收集和传输,用起来十分方便。 最近,我接手一个项目,这个项目不仅要求我使用FPGA,而且还要求我使用功能更强大的ARM。这都是我从未接触过的领域。在这个系列博客中,我将介绍我是如何将自己现有的MCU知识和经验运用到FPGA中的。本文是系列博客的在第一篇,我将从FPGA的优点和缺点入手,并介绍Terasic DE10 Nano开发套件,以及IP核在FPGA设计中的作用
[嵌入式]
MCU与模拟电源管理集成
  近日,Microchip宣布推出业界首款集成MCU的基于模拟的电源控制管理器MCP19111,该产品可以利用数字信号控制DC/DC转换,可在4.5V至32V的宽电压范围内工作。   为什么需要MCP19111“现在,业界主要提供两种电源转换方案,一种是完全数字式控制,通过模数转换以及MCU计算出结果,而另外一种则是完全通过模拟器件搭出来的电源转换系统,不存在任何模数转换。”Microchip模拟产品营销副总裁兼市场传讯部副总裁Bryan J. Liddiard说道。   Microchip模拟产品营销副总裁兼市场传讯部副总裁Bryan J. Liddiard Bryan提到的两种方案各有利弊,在模拟域而言,控制效率更高,而
[电源管理]
<font color='red'>MCU</font>与模拟电源管理集成
基于16位单片机的语音电子门锁系统
摘要:介绍采用声纹识别技术、在凌阳SPCE061A单片机上实现的一种语音电子门锁身份认证系统。实验结果表明,系统性能稳定,识别效果好,可以推广使用。 关键词:声纹识别 基于周期 线性预测 模式匹配 DTW 生物识别技术是利用人体生物特征进行身份认证的一种技术,是目前公认的最为方便与安全的识别技术。由于每个人的生物特征具有与其他人不同的唯一和在一定时期内不变的稳定性,不易伪造和假冒,所以利用牲识别和技术进行身份认证,安全、准确、可靠。 在生物识别领域中,声纹识别,也称为说话人识别,以其独特的方便性、经济性和准确性等优势受到世人瞩目,并且益成为人们日常生活和工作中重要且普遍的安全认证方式。声纹识别是一种根据说话人语音波形中反映说
[应用]
基于CIP-51内核单片机的总磷在线自动分析仪
   1 概述   C8051F0XX系列单片机是Cygnal公司新推出的一种混合信号系统级单片机。该系列单片机片内含CIP-51的CPU内核,它的指令系统与MCS-51完全兼容。其中的C8051F020单片机含有64kB片内Flash程序存储器,4352B的RAM、8个I/O端口共64根I/O口线、一个12位A/D转换器和一个8位A/D转换器以及一个双12位D/A转换器、2个比较器、5个16位通用定时器、5个捕捉/比较模块的可编程计数/定时器阵列、看门狗定时器、VDD监视器和温度传感器等部分。C8051F020单片机支持双时钟,其工作电压范围为2.7~3.6V(端口I/O,RST和JTAG引脚的耐压为5V)。与以前的51系列单
[单片机]
基于CIP-51内核<font color='red'>单片机</font>的总磷在线自动分析仪
瑞萨电子推出32位RX671 MCU,实现高性能和高能效
瑞萨电子推出32位RX671 MCU,实现高性能和高能效,可支持非接触式HMI功能 具备大容量内存和超紧凑封装的单芯片解决方案,满足广泛的需求 2021 年 9 月 8 日,日本东京讯 - 全球半导体解决方案供应商瑞萨电子集团(TSE:6723)今日宣布,推出32位微控制器(MCU)RX671,为广受欢迎的RX产品家族增添一款全新高性能、多功能,且具备触摸感应和语音识别等非接触式操作方式的单芯片解决方案。作为瑞萨广受欢迎的主流RX600系列的一部分,RX671 MCU基于RXv3 CPU核构建,运行速度为120MHz,集成闪存支持60MHz的快速读取访问,实现卓越实时性能,CoreMark评分达707;电源效率为48.8
[单片机]
瑞萨电子推出32位RX671 <font color='red'>MCU</font>,实现高性能和高能效
AVR单片机外部中断C程序框架
Avr mega16a 单片机在studio4 开发环境中外部中断C程序框架如下: #include avr/io.h //头文件. #include avr/interrupt.h //中断头文件; typedef unsigned char uint8; //习惯宏定义数据类型语法.应用时只需写入数据类型: // uint8 s=0; typedef unsigned int uint16; //习惯宏定义数据类型语法.应用时只需写入数据类型: // uint16 i=0; Int main() //主函数; { MCUCR=0Xnn: //中断模式触发寄存器,用来设置外部
[单片机]
PIC16F505单片机按键处理总结
按键检测方法处理不同事件的对比,所有按键都以PIC16F505的RC4为输入端口作为例子。 方法1: Void scan() { if(RC4==0) { Delay(50); if(RC4==0) { num++;//多事件跳转变量num RC0=1;//按键有效后要做的事情,比如点亮RC0上的LED } } while(!RC4);//松手检测 } 此类按键扫描函数,合适离散型事件,比如一键多能,等。假如把松手检测部分去掉,则合适做LED无极调光,因为,只要按键按住不放,整个函数会一直检测是否有按键按下,并且执行按键有效后的语句。 方法2: void scan() { while(!RC4) { delay(10); i++
[单片机]
68HC908JB8单片机及其在USB外设系统中的应用
主要参数及引脚功能     MC68HC908JB8是采用HCMOS工艺技术生产的高性能单片机芯片,具有片内256BRAM和8KB的Flash ROM结构,16位双通道TIM模块(每一通道配有输入捕捉、输出比较和PWM工作模式),以及兼容USB1.1协议低速通信功能。 JB8 的性能     68HC908JB8是一种高性能M68HC08结构,它和M6805、M146805及M68HC05族代码兼容,3MHz内部总线频率,256B的RAM和8129字节的Flash存储器,且在片内可编程。最多可达37个一般3.3V的I/O口。其中包括:     ·因封装不同有13或10个共享I/
[应用]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved