AVR单片机学习(四)开发基础知识
一、AVR开发工具简介及开发环境的建立
软件开发工具
编译环境:WinAVR
下载软件:MucodeISP
仿真环境:AVR Studio
集成环境:AVR Studio,可以内联WinAVR 成为一个具有编译、仿真、下载功能的集成环境
硬件开发工具
下载线(并口也有USB接口的,功能是下载程序配置熔丝位)
仿真器
学习板(或手工焊接的系统板)
工具手册
WinAVR技术手册
ATmega16官方中文版技术手册(英文水平好也可以看看英文版)
WinAVR 说明
WinAVR 下载安装后只用到PN其他删除就行了、PN我们一般把他作为一个编辑环境来使用,保存为.c文件之后他就会变成一个有颜色的C文件了,这个有点就显示出来了(关键字带颜色深蓝色和点击小括号其中另一半就会高亮很多层括号就有用了)而WinAVR 的编译功能需要编写Makefile文件所以对初学者有难度先不介绍了。而编译使用AVR Studio来完成就可以了。
下载线作用
一、修改熔丝位 熔丝位可理解为是一个独立于CPU之外的一块小存储区它保存了一些关键的控制位、如:时钟源、一些I/O口的特殊作用。
二、向单片机Flash中下载程序代码。不具备单步调试仿真功能。
三、下载线有很多种,最常用的是插在计算机并口上的STK200/300
下载软件说明
下载软件有很多、但推荐初学者使用Mucode isp 优点是熔丝位设置很清晰,不至于设错而锁死芯片
MUcode ISP 如果外部石英晶振高于8MHZ 也选3.0---8MHZ 防止锁死如果芯片锁死了,就下载不进去程序了。芯片解锁只能采用高压编程器,将熔丝位修改回来。然后另一个比较重要的熔丝位是(共16个红点和绿点)这个表示的是ATmega16 的2字节的熔丝位,上面8个表示时钟电源模式。更改时钟的话上面8个自动做出相应的变化。变绿=1 表示没有使能变红表示使能的红点按下去就是使能的意思就好在这里。下面8个最重要的是JTAGEN这个,打开ATmega16 技术文档发现JTAG有个4个脚和普通的I/O口是复用的(TDI TDO TMS TCK )可以配置成普通I/O用也可以当JTAG接口用。现在JTAGEN =0 红色 说明这个4个只能当JTAG 口用。所以在编程的时候对这4个I/O操作就是无效的。点一下变绿了就不使能了,可以当普通I/O口用,当然这个时候JTAG仿真器就连不上了。CKOPT 这个熔丝位如果使能外部晶振的振幅就会变得比较大,示波器就能看的出来会变成5V左右的振幅,如果不使能,晶振就工作与一种低功耗的模式,振幅比较小。初学不用管。EESAVE表示向Flash编程的时候是否擦出内部的EEPROM ,使能就是不擦出,当初学用不到。
一般我们只管设置时钟(前8个 选了就不用管了)和JTAGEN (下面8个其中的一个)就行了。下载线和下载软件
AVR Studio 是Atmel公司官方的汇编、下载与仿真软件可以内联WinAVR获得C语言编译能力。单独装AVR Studio只能编译汇编语言的代码,通过JTAGE 工具也具有下载仿真的功能也可以更改熔丝位不过熔丝位不够直观。内联就可以获得C语言编译能力了。
JTAG ICE 是Atmel公司官方的仿真调试器,但已经被仿制,价格比官方版本要便宜十倍,可以使用淘宝购买的JTAGEICE 当然你买的时候最要要卖家给发给你个AVR Studio 的版本装了AVR Studio 4,创建一个项目如下图,点击下一步
选着JTAGE ICE ATmega16 点击完成
进入项目
点击project 下的配置选项 (configuration options)
填入:晶振频率和代码优化 选项(-00 -01 -02 -03 -0s) 从小到大 0s 最大的优化越好编译出的代码越小,执行速度越快。我们选-00 因为在优化的情况下有些时候会出现一些极其少见的问题。建议选-00。点击确定。
注意AVR都要包含一个最为基本的头文件
#include //在C:\WinAVR\avr\include\avr 这个路径下就有io.h文本文件 可以用PN打开看看
//在AVR Studio下编译代码就不如在 WinAVR下编译好如括号不好用。
调试如下
这样其实已经通过仿真器已经下载到了单片机里面了,这就提到一个JTAG的一个好处,JTAG 一边是DB9头一边就是JTAG仿真接口接单片机。所以仿真什么结果实际运行就是什么结果是一样的。51不带JTAG口一般采用伟福仿真器。、它的仿真是一种ROM仿真,仿真时候使用仿真头来代替单片机来进行仿真,最后再下载进去,所以最后运行的结果不一定是一样的。
二、计算机原理基础知识讲解
数值就是一位数字能够表示的数的数量,N进制数的进位规则是“冯N进1,常用的数制有十进制、二进制、十六进制。人类有十个指头,所以习惯采用十进制。计算机只能识别0和1,采用二进制。为了计算机学中的数据写方便,采用十六进制。位于字节的概念:
位(bit):简写为b,表示二进制数的一位。
字节(byte):简写为B,8位为一字节
数值转换工具:Windows自带的计算器
1Byte = 8bit
1字节=2位十六进制数
例如:
0x55 = 0b01010101 = 85
0xa3 = 0b10100011 = 163
存储器
对于8位单片机,其内部存储器均为8位。
RAM与ROM 模型
这是一个1K大小的ROM 1024-1=1023 = 0x3FF 1维的模型 每一个地址对应一个存储单元,一个存储单元房的有数据像上图的0x23 0x55 0x6a ...0xcf等 存储的都是8位的二进制数。外部模型如右边的 主要有2组总线一边是地址线一边是数据线(其实还有个控制总线没画出),对这个RAM读写给地址线送一个相应地址通过控制总线表示当前是读模式,相应的数据线就将对应的地址存的内容送到数据线上。对于ROM也是这样的。
CPU
CPU即是为中央处理器
取指令-执行
三、C语言基础知识讲解
变量
运算符
语句
函数
顺序语句
选择语句
循环语句
数组和指针
变量:变量就是存储于RAM或ROM中的数据
变量的分类:
单片机中比较常用的是字符型(char)和整型(int)
实型(float)变量在单片机C语言中一般用不到(浮点)
运算符:类似于数学运算中的运算符号(+ - * / 移位等C语言课本后有附表)
语句:C语言中以分号作为一条语句的结束
习惯上每条语句单独占用一行,但也可以每行有多条语句, 用分号隔开即可
DDRx PORTx 都在io.h 里面有定义 当然内嵌一层(
#elif defined (__AVR_ATmega16__)
# include )
在找到iom16.h就有定义地址了
#define DDRC _SFR_IO8(0x14)
#define DDC0 0
#define DDC1 1
#define DDC2 2
#define DDC3 3
#define DDC4 4
#define DDC5 5
#define DDC6 6
#define DDC7 7
就是说明在 0x14位置 0001 0100 这个地址保存一个8位二进制数 没一位表示一个I/O口的方向
字符型变量
占用存储器中的一个字节空间,即8位二进制数
取值范围:0~(2^8 - 1 )即0~255
可以赋值为整数或ASCII码
char zifu =97;
char zifu = 'a'//这种特殊方式是‘a’ 字符就是把ASCII码值给了ASCII(2)0--255对应一个字符是一种映射关系单引号告诉编译器从这个码表中取出对应的ASCII码赋值给zifu 查下表得出对应就是97,所以这两条语句是等效的。
前提是先进入调试模式下view下的Watch才能用 不然是灰色的
在Value右键可以选十六进制和十进制 看看 location下显示的是地址(SRAM)中的位置
整形变量
占用存储器中的2个字节,即16位二进制数
有无符号子类型
unsigned int :无符号整型
取值范围0~(2^16-1)即0~65535
signed int 有符号整形,signed 可以省略。
取值范围-2^15 ~ (2^15-1)即-32768 ~ 32767
长整型
取值范围更大的int 子类型
long int :长整形,长度为32位,即4个字节
long long int :长度为64位,即8个字节
常用的运算符
赋值 = 加 + 减 - 乘 * 除 / 括号() 求余%
与& 或| 取反~ 异或^ 左移 << 右移 >>
逻辑与&& 逻辑||
了解更多AVR单片机系列,请关注“云汉电子社区(ickeybbs) ”官方微信公众号,或者登录云汉电子社区官方网站(bbs.ickey.cn)
Arduino常见函数讲解
今天马克笔设计留学的程老师继续来跟大家讲解Arduino的相关知识。前面我们介绍了很多Arduino的传感器《Arduino人体红外传感器怎么用 》,那这篇文章我们来讲一下Arduino里面的编程语言,也就是一些常见函数的应用。Arduino 是由 C/C++ 混合编写而成。Arduino 语言也继承了 C/C++ 语言的语法。通常所说的 Arduino 语言,是指 Arduino 核心库文件提供的各种应用程序编程接口(Application Programming Interface,简称API)的集合。Arduino程序基本结构由setup() 和loop() 两个函数组成,那我们就先来看看这两个函数是如何使用的。
1.Set up函数
Arduino控制器通电或复位后,即会开始执行setup() 函数中的程序,我们一般会把要执行的程序写在中括号里,该部分的程序只会执行一次。通常我们会在setup() 函数中完成Arduino的初始化设置,如配置I/O口状态,初始化串口等操作。
2.Loop函数
在Setup() 函数中的程序执行完后,Arduino会接着执行Loop() 函数中的程序。而Loop()函数是一个死循环,其中的程序会不断的重复运行。通常我们会在loop() 函数中完成程序的主要功能,如驱动各种模块,采集数据等。我们拿一个最简单的灯泡闪烁这个为例,讲一下LOOP这个函数,中括号里面写的内容我们可以解读为:首先LED小灯泡亮,之后延迟一秒,接着LED小灯泡灭,之后又延迟了一秒,最后反复循环这一段程序,从而实现了小灯泡闪烁的效果。
3.时间函数
描述:将程序暂停给定参数的时间量(以毫秒为单位)
函数原型:delay(ms)参数:ms – 暂停的毫秒数返回值:无4.If函数
If else 语句是一种选择结构,可以让代码选择执行。所谓选择执行,就是“某些代码可能执行,也可能不执行,有选择地执行某些代码”。If 语句后面可以跟随一个可选的 else if … else 语句,其对于测试各种条件非常实用。
当使用 if … else if … else 语句时,我们需要记住三个要点:
1)一个 if 可以有0或一个else语句,它必须在所有else if之后。2)if 可以有0到多个else if语句,它们必须在else之前。3)一旦 else if 成功,将不会测试剩余的else if或else语句。
我们来举个例子:
5.常量用法
HIGH | LOW 表示数字IO口的高低电平。HIGH 表示高电(1),LOW 表示低电平(0)。
INPUT | OUTPUT 表示数字IO口的方向,INPUT 表示输入(高阻态),OUTPUT 表示输出(AVR单片机能提供5V电压 40mA电流)。Arduino中输出的低电平为0V,输出的高电平为当前Arduino的工作电压。例如Arduino UNO的工作电压为5V,其高电平输出也是5V;Arduino UNO工作电压为3.3V,所以高电平输出也就是3.3V。
没有接触过C语言的同学,可能一上来接受这么多知识会觉得有些困难,其实C语言学起来并不是很难,比较友好。我们可以先从一些简单的语句写起来,用一些简单的函数做一些实验,等真正掌握了各个常见函数的应用场景之后,就可以实现复杂的效果了。还要跟大家强调一点,无论是Arduino电路连接还是C语言学习,都需要不断尝试 ,不断试错,只有这样才能真正学会函数的用法。
文章作者:程雅秋英国皇家艺术学院产品设计硕士擅长产品服务系统设计、用户体验设计和硬件Arduino交互
相关问答
avr 是什么 单片机 ?AVR单片机是1997年由ATMEL公司研发出的增强型内置Flash的RISC(ReducedInstructionSetComputer)精简指令集高速8位单片机。AVR的单片机可以广泛应用...
avr单片机 和51的区别?①AVR单片机(ATmega16)的时钟源(晶振、内部RC等)可以不经过分频直接提供给CPU使用,而51的CPU主频等于晶振的12分频,ATmega16外部提供16M的晶振,所以AVR单...
我在烧录 avr单片机 的时候烧录不了-ZOL问答单片机配置写入是你对这片芯片下次再写或程序上电启动时的要求,数据校验是你这片芯片写完后是否还要校验一次(这提高了可靠性可要多花时间)9条回答:【推荐答案...
var是什么指令 单片机 ?AVR是ATMEL公司单片机的一个类型,RISC结构,单指令周期。代表型号有AT90S系列AVR单片机是ATMEL在90年代推出的精简指令集RISC的单片机,跟PIC类似.使用哈佛...
谈谈你对 单片机 的认识?从大一的时候在大学图书馆看到关于AVR单片机的书籍,到参加竞赛、工作,我和单片机已经打了六七年的交道了吧。其间我都是在做产品的软件开发,与硬件工程师合作...
现在流行什么 单片机 ?现在比较流行单片机有51单片机、AVR、PIC、MSP430、STM32、瑞萨单片机、飞思卡尔单片机。1.51单片机ATMEL(艾德梅尔)的:89C51、89C52STC(国产宏晶)单片机:8...
250度高温 AVR单片机 的价格是多少钱?[回答]做250度高温AVR单片机的公司很多,公司不一样,价格方便肯定是有差异的,建议您多找几家公司询问一下。您可以提供一下250度高温AVR单片机的详细要求...
单片机 采集指示灯的交流电平信号通过485与电脑通信来控制继电器的开关的电路图?如果是5V单片机系统,高输出2V的情况有:1、IO口外接了较大的负载,拉低了端口的电压(一般单片机的IO为弱上拉),如果你断开负载测量端口电压还是2V的话就有可能...
AVR单片机 ldi赋值问题?,ldi性价比怎么样??[回答]我就觉得立格生信公司还不错,品质好售后都不错,可以考虑合作一下武汉市立格生信科技有限公司是一家研发公司,一直在开发和制造可实时分析物质的传...
单片机 为什么能直接烧录程序?我刚开始学习单片机的时候也有和题主类似的困惑。当时是在大二,刚申请了个淘宝账号不久,刚看了下我的淘宝已购物品,第五件东西买的就是51单片机开发板,前几件...